中山公众号开发,中山小程序开发,中山企业官网开发,中山软件开发,中山APP开发
公司动态
COMPANY DYNAMIC
行业资讯
COMPANY DYNAMIC
扫一扫出方案
时隔 35 年后,复古计算爱好者让 Windows 1.0 “重生”
点击数:
2020-06-03 15:07:55

本文最初发表在 The New Stack 网站,经原作者 David Cassel 授权,InfoQ 中文站翻译并分享。

导读:复古计算(Retrocomputing)是一个文化话题,复古计算社区是相当多元化的国际社区,容纳了许多不同文化背景的爱好者。以目前的电脑硬件的性能来看,现代电脑硬件的性能不仅可以模拟大多数的古董电脑,甚至早已远远超越。有这么一个复古计算爱好者,就进行了一次伟(wu)大(liao)的尝试:让 35 年前的 Windows 1.0 “重生”,并尝试了在 Windows 1.0 编写的程序能不能在 Windows 10 上运行。究竟还能不能运行呢?让我们来看看本文!

35 年前,在 Windows 上进行编程是什么样的体验?

有这么一个人,为了找出这个答案,决定亲自尝试。

纽约开发人员 Michael Casadevail 就是这样的人,他一路冒险,追溯到 Microsoft 发布第一个基于 GUI 的操作系统 Windows 1.0 之时,他构建了一个虚拟系统,在这个虚拟系统中,他可以安装 1985 年的原始软件开发工具包,然后研究了一个简单的“Hello World”程序附带的传奇示例代码。

Casadevall 那一场令人着迷的实验,让我们得以能够一瞥 Windows 最初的起源,不仅显示了这 35 年来,事情发生了多大的变化,而且也显示了有多少东西被保留了下来。

当然,追溯这一过程也是乐趣所在。

历史重演

Casadevall 使用的是 Oracle 的 X86 虚拟化工具: Oracle VM VirtualBox ,在虚拟机中,他先加载了 IBM 的 PC DOS 3.3,而不是微软的 MS DOS 3.3。他在Soylent News 的一篇文章中指出:“我这样做的原因是,当时的 DOS 还不是一个独立的产品,相反的是,Microsoft 将授权 DOS OEM 适配开发套件,需要原始设备制造商(Original Equipment Manufacturer,OEM)创建自己的 DOS,如 Compaq DOS 3.3。”

很显然,为了这次实验,Casadevall 带来了很多技术上的专业知识。他在自己的推特个人资料上将自己描述为 “复古计算爱好者” 和 “狂热的信息安全黑客”。

“我个人对复古计算很感兴趣,这已经不是什么秘密了, ” Casadevall 在网站上写道,“我还记录了个人电脑的历史和演变史。” 在后来的一段视频中,他称自己是 “90 年代的孩子”。有一年圣诞节,他惊讶地发现,自己居然还有一台运行 Windows 3.1 的 Packard Bell 计算机。

但为了做出这一段视频,Casadevall 回到了更远的过去……

这个项目给 Casadevall 带来了一些挑战。

Casadevall 写道:“Windows 1.0 早在鼠标作为计算机硬件标准部件出现之前就已经存在了。” 事实上,很早的时候,Casadevall 就发现自己无法模拟出串行或总线鼠标。他想出了一个解决办法,将鼠标驱动从 Windows 2.0 安装软盘复制到 Windows 1.0 安装软盘上,这样,鼠标就可以在设置屏幕上显示为一个选项。

Casadevall 在 Soylent News 上写道:“第二个选项,我直到制作完视频才知道,是使用 PS/2 版本的 Windows 1.0。就像那个时代的 DOS 一样,Windows 也是授权给原始设备制造商,原始设备制造商可以根据自己的硬件进行调整。” 这是一个被遗忘的时代,它是如此原始,以至于 Windows 仍然必须通过键入 win命令从 DOS 命令行来启动。Casadevall 写道,“有传闻称,Windows 将被移植到 XENIX 上运行,XENIX 是 Microsoft 基于 UNIX 的操作系统。”

当然,至少有一些更简单的方法可以做到这一点。你可以使用 PCjs.org 这个网站,它是基于浏览器的仿真器,已经提供鼠标的支持。

他称 Windows 1.0 “本质上就是 DOS 的图形化程序,不过,通过深奥的魔力,它能够协同多任务处理。这完全是通过软件技巧来完成的……”

DISK 2 有什么?

在对磁盘进行分区并安装 DOS 和 Windows 1.0 之后,是时候设置开发环境了。Casadevall 写道:“不幸的是,网上几乎没有关于如何做这件事的文档。” 但幸运的是,OS/2 博物馆扫描了一些原始的参考文件夹,“在仔细检查磁盘时,我发现了一个安装批处理文件”,它的起名恰如其分,就叫 install.bat ,并提醒用户必须有至少 512K 的内存。此外,还需要一个软盘驱动器,配置为驱动器 A,以及图形监视器(单色或彩色均可)。

“如果你没有上述设备或软件,请放弃该批处理文件,” 文档警告称,“建议使用鼠标,但非必需。”

在 Soylent News 上的帖子中,他提到了更详细的界面,“这样的改进很可能是因为大多数用户希望自己安装 Windows,而不是预装……”

但这是对那个世界的一瞥,在那里并没有网页分享相关信息。有关软件开发工具包中文件的完整列表,请参阅 Disk 2 的 FILELIST.TXT 文件。

“由于可能只有在 1985 年才有意义的原因,脚本和 README 自述文件都放在 Disk 2 上,而不是放在 Disk 1。”

事实上,SDK 分布在 7 张软盘上,其中 4 张软盘需在安装过程中插入。当然,这一切插入行为都是由名为install.bat 的文件触发的。

时隔 35 年后,复古计算爱好者让 Windows 1.0 “重生”

第五张软盘有 Windows 内核的调试版本,其余两张磁盘有示例编程代码,包括 Hello World 示例。

而且用户还需要执行更多的安装。“与后来的 SDK 版本不同的是,程序员有责任提供编译器……” 他在帖子指出。安装屏幕提示支持三个选项:

  • Microsoft C compiler, version 4.0

  • Microsoft Pascal compiler, version 3.3 or later

  • Microsoft Macro assembler, version 4.0

Casadevall 写道,“非官方的(以及非经正式的),Borland C 的一些版本也可以用,尽管这没有经过测试,除了在新闻组上的一些注释外,似乎并没有人做出任何记录。更有趣的是,上述所有工具都是针对 DOS 的编译器,对 Windows 没有任何特定的支持。”

Casadevall 在视频中指出,要找到 Microsoft C 4.0 并不难,不过,他需要再看一遍用户手册,才能知道正确的安装方法。由于硬盘在 1985 年还不常见,因此 Microsoft 支持通过软盘运行编译器。硬盘安装需要编辑这些关键的文件:CONFIG.SYS 和 AUTOEXEC.BAT,以及手动复制所有必需的库和可执行文件。

编写代码还涉及到处理近指针(功能上与给定段内的普通 C 指针相同)和远指针(8086 具有使用这些指针的特殊操作码)。

“回调函数总是必须声明 FAR,因为 Windows 在从任务管理器中跳转到应用程序代码时,需要加载正确的段。”

此外,Windows 1 清理堆栈的方式也有一些奇怪之处。

Casadevall 指出,16 位 Windows 应用程序 “普遍存在于共享地址空间中”,当时的 Windows 并不会立即回收标记为未使用的内存。即使在应用程序被终止后,它的某些部分仍然会保留在内存中。

尽管如此,经过多次通过软驱交换软盘和一些故障排除之后,Casadevall 使用文本编辑器编写了一个快速的 Hello World 程序(用 C 语言编写),然后用 Microsoft 的 C 语言编译器进行编译。显然,它创建了一个 .exe 版本的文件,只需键入文件名 “hello” 而无需后缀名即可执行。该程序将立即打印出 NCommander 的测试信息。

“来自 DOS 的问候。”

向下兼容性怎么样?

Casadevall 还想尝试另一个实验:为 Windows 1.0 编写的 “Hello World” 程序,在现代系统上还能运行吗?

一些研究表明,通过运行 NT 虚拟 DOS 模型(即 NT virtual DOS mode ,NTVDM)与 Windows 的子系统(Windows on Windows,称为 “Wow”),可以实现对旧版 DOS 和 16 位 Windows 程序的兼容性。Casadevall 指出,即使到了今天,NTVDM 仍然是 Windows 10 某些版本的一部分,不过他指出,Windows 10 转向 64 位时已经完全放弃了对传统 16 位的支持,并且不包括 NTVDM。

但 Microsoft 仍然提供了 32 位版本的 Windows 10,其中仍然包括 NTVDM。Casadevall 获取了现在的 Windows 10 1909 版,并将其安装到虚拟机中,然后试图运行他为 Windows 1 编写的 “Hello World” 应用程序。他写道:“双击 hello.exe 时,会提示 Windows 需下载并安装 NTVDM,这第一步就让人看到了希望。在进行第二次的尝试时,我可以确认,这是有可能实现的!”

“长达 35 年的向下兼容性!”

时隔 35 年后,复古计算爱好者让 Windows 1.0 “重生”

文章版权归极客邦科技 InfoQ 所有

节点互动(广东)科技有限公司一家专注于 APP开发 + 小程序开发 + 微信开发 + 系统开发 + 网站开发 的专业互联网应用服务提供商。5年实战开发经验,高校合作基地,多年行业深耕经验,助力传统行业快速转型,为众多企业提供创新性互联网应用产品。


推荐文章
让你的代码讲出它的故事
现在用 Hooks 管理 React 函数式组件中的状态已经很容易了。我以前曾写过“用自定义 Hooks 作为服务”和“自定义 Hooks 中的函数式编程”(译文)。在本文中,我会分享自己做的一个相当简单的重构,通过重构带来了一种更整洁、可重用且更简
微信漂流瓶与QQ邮箱漂流瓶的大不同
【摘要】看过《瓶中信》这部电影的朋友都会被故事里动人的情节所感动,而现实生活中漂流瓶曾是荒岛遇难者的求救方式。为了将动人的故事搬到生活里,让更多的人感受到生活的浪漫,围绕漂流瓶的应用模块先后出现在QQ邮箱和微信里面。看过《瓶中信》这部电影的朋友都会被
如何设计一款好的产品?
作者通过自己的实践后,整理出的关于产品设计的一个论点——一个好的产品应该是情、趣、用、品皆具备,只有这样才能设计出一款好的产品。有一次学生问我,老师,我们学会了画原型,流程图,写PRD,可是我还是不知道怎么样去设计一款产品?这个问题让我很有感触,是啊
资讯类新闻客户端开发有哪几种类型?
【摘要】广州新闻资讯APP开发公司【商侣软件】产品经理Kay分析,移动互联网时代带动新闻APP开发行业发展,纸质媒体以传统的模式开始向数字化、跨媒体过渡,行业媒体如何在不断变化的互联网时代转型、崛起,第一步就是定制开发专属的新闻类资讯APP软件。广州
拍拍小店APP客户端接入京东商品探索O2O模式
【摘要】拍拍小店app移动客户端是京东集团旗下的移动电子商务应用程序,是国内领先的移动社交电商平台,这款app移动应用主要基于用户连接核心——社交关系、中心化和去中心化相结合的流量渠道,根据移动社交场景重构电商生态。拍拍小店app移动客户端是京东集团
有声量没销量,社交媒体营销的繁荣窘境
关于会员产品我们一定并不陌生,但是你知道怎么搭建和运营会员产品的核心能力吗?网上关于会员产品的5W1H分析法中How的分享较少,本文作者主要围绕如何搭建和运营会员的核心能力进行展开,带大家更多维度了解会员的实用打法。
Fastjson 被曝出“高危”远程代码执行漏洞
5 月 28 日,360 网络安全响应中心(360-CERT)发布“Fastjson 远程代码执行漏洞通告”。通告称, Java 库 fastjson <= 1.2.68 版本存在远程代码执行漏洞,漏洞被利用可直接获取服务器权限。36
从广告策划转型到电商营销策划,应该怎么做?
现在以天猫为首的电商平台在营销上已经不满足于曾经拉人砍价/拼团的促销玩法了;而是需要越来越多、越来越创新的品牌站外那套social(社会化营销)digital(数字化营销)玩法。做social、digital的,如何做好电商营销策划呢?本文讲了三点从
洞悉MySQL底层架构:游走在缓冲与磁盘之间
提起MySQL,其实网上已经有一大把教程了,为什么我还要写这篇文章呢,大概是因为网上很多网站都是比较零散,而且描述不够直观,不能系统对MySQL相关知识有一个系统的学习,导致不能形成知识体系。为此我撰写了这篇文章,试图让这些底层架构相关知识更加直观易
如何给产品制定数据指标?
制度产品数据指标是产品经理必须要做的事情。那究竟怎么制作产品数据指标?又需要哪些能力呢?本文介绍了制定产品数据指标需要注意的两点和制定产品指标大致逻辑,与大家分享!制度业务指标几乎是每个部门每个岗位都要做,且非常重要的事。相对于其它部门的业务指标,产
在线客服系统