我在重读 Joel 的战略信函 II:鸡和蛋的问题时,偶然发现了这个有趣的引述:
事实上,WordStar 是通过更改代码中的一个字节来移植到 DOS 的。(真正的程序员可以告诉你那个字节是什么,我早就忘记了)。
通过快速谷歌搜索,我找不到任何其他参考。这是真的还是只是比喻?为了成为“真正的程序员”,单字节变化是什么?
我在重读 Joel 的战略信函 II:鸡和蛋的问题时,偶然发现了这个有趣的引述:
事实上,WordStar 是通过更改代码中的一个字节来移植到 DOS 的。(真正的程序员可以告诉你那个字节是什么,我早就忘记了)。
通过快速谷歌搜索,我找不到任何其他参考。这是真的还是只是比喻?为了成为“真正的程序员”,单字节变化是什么?
听起来有点夸张,在这里找到了一些WordStar的历史
用于 MS-DOS 的 WordStar 3.0
1982年4月
在一次通宵的会议中,Jim Fox 修补了 WordStar 的 CP/M-86 版本,使其在 IBM PC 上的 MS-DOS 下运行,以便向 Rubenstein 演示。实际移植是由一群爱尔兰程序员使用英特尔开发系统完成的,该系统运行 ISIS II 操作系统。软件构建在 8" 软盘上完成,然后通过串行电缆将二进制(可执行)文件传输到 IBM PC。
但是......乔尔可能意味着MS-DOS 1.0 / QDOS
MS-DOS 1.0 实际上是 QDOS(Quick and Dirty Operating System)的重命名版本,它是微软于 1981 年 7 月从西雅图的一家公司(恰当地命名为西雅图计算机产品公司)购买的。QDOS 是作为 CP/M 8 的克隆而开发的。 -bit 操作系统,以提供与当今流行的商业应用程序(如 WordStar 和 dBase)的兼容性。CP/M(微型计算机控制程序)是由 Digital Research 的 Gary Kildall 几年前编写的,已成为第一个普遍使用的微型计算机操作系统。
您必须更改多个字节。CP/M-86 可执行文件(.CMD)都有一个 128 字节的标头,这与 .EXE 标头不同。
如果将所有 API 调用限制为 CP/M 和 DOS 的公共子集,则可以使用条件汇编从同一源构建 CP/M 和 DOS 版本:
bdos:
if CPM86
int 0E0h
else
mov ah, cl
int 21h
endif
这个 Wikipedia 条目声称 CP/M 和 MS-DOS 共享二进制格式。它接着说:
虽然文件格式在 MS-DOS 和 CP/M 下是一样的,但这并不意味着 CP/M 程序可以在 MS-DOS 下直接执行,反之亦然;MS-DOS COM 文件包含 x86 指令,而 CP/M COM 文件包含 8080、8085 或 Z80 指令。
在 CP/M 3 下,如果 COM 文件的第一个字节是 0xC9,那么这表明存在 256 字节的头;由于 0xC9 对应于 8080 指令 RET,这意味着如果在不支持此扩展的早期版本的 CP/M 上运行 COM 文件将立即终止。
这意味着也许修复/端口正在将第一条指令更改为其他指令,从而允许其余指令执行。不过不确定,这似乎暗示二进制文件一定是“胖”的,这对于遗留二进制文件来说似乎是不合理的。
WordStar 是用 8080 汇编器编写的,如果所有代码都可以放在一个段中,那么当时有工具可以将 8080 转换为 8086 汇编器(8086 指令集旨在允许这样做),所以这是很有可能的。
我在 1979 年首次在 Z80 CP/M 盒子上使用 WordStar。今天的人们可能没有意识到他们是多么幸运——有多少 MS Word 用户会准备好作为安装他们的文字处理器的第一个任务来编写几个小的汇编程序(十六进制!)以有效地连接文字处理器(你可以在屏幕和键盘上使用 CP/M 例程,但它们速度慢且无法正常工作)?快乐的时光...
“事实上,WordStar 是通过更改代码中的一个字节来移植到 DOS 的。(真正的程序员可以告诉你那个字节是什么,我早就忘记了)。”
2009 年 6 月 8 日星期一下午 6:27。我的假设是 Spolsky 是在谈论 8080 CP/M 到 8086 MSDOS,而这个故事可能是假的。8086 CP/M 从来都不是一个大项目——我的意思是,它被MSDOS 彻底粉碎了——有人可能已经将 WordStar 从 8080-CPM 转换为 8086-CPM——正如其他人所指出的那样,使用特殊的8080 到 8086 转换器的东西——然后可能只需要更改一个字节。
我不确定乔尔的说法是否准确。也许他的意思是吉姆福克斯制作的演示版本?
见http://www.wordstar.org/wordstar/history/history.htm
我将引用相关部分:
用于 MS-DOS 的 WordStar 3.0
1982年4月
在一次通宵的会议中,Jim Fox 修补了 WordStar 的 CP/M-86 版本,使其在 IBM PC 上的 MS-DOS 下运行,以便向 Rubenstein 演示。实际移植是由一群爱尔兰程序员使用英特尔开发系统完成的,该系统运行 ISIS II 操作系统。软件构建在 8" 软盘上完成,然后通过串行电缆将二进制(可执行)文件传输到 IBM PC。
(编辑:哎呀,太晚了。其他人已经发现了完全相同的东西:-/请随意忽略我。)
需要了解的重要一点是,当时 16 位 8086 机器刚刚问世,以取代当前的 8 位机器,CP/M 操作系统是当时的 Windows。 带有用于工作的磁盘驱动器的所有东西都运行 CP/M。该版本后来被称为 CP/M-80,以区别于用于 8086 处理器的 CP/M-86。
不幸的是,上市花了很长时间,以至于 QDOS 被编写为有一些东西可以运行程序,这本质上是对 CP/M 功能的快速重新实现(但使用不同的语法)。QDOS后来被微软收购并制成MS-DOS。因此,MS-DOS 实际上有一个深入内部的 CP/M 内核,因此使 CP/M-86 程序在 MS-DOS 下运行所需的工作量是有限的(不是单个字节,而是可管理的)。
我有幸与 CCP/M-86 一起工作了几年,它允许多任务处理,这与今天的 Linux 文本模式(带有虚拟控制台)所允许的非常相似。不幸的是,它从未流行起来。哦,好吧,我们有 Linux :)