编译Microsoft Word 1989





收集作品



Opus是Microsoft开发人员为Microsoft Word for Windows v1.1a赋予的代号。让我们从源代码编译它,看看是否可以运行它!



1.简介



本文介绍了获取源代码并将其转换为可运行的Windows应用程序的过程。编译器和开发工具在MS-DOS操作系统上运行,因为1989年没有在Windows上运行的开发工具。



注意:在本文中,我将经常提到DOS。尽管大多数信息也适用于IBM PC-DOS和大多数其他类型的DOS,但该名称是指Microsoft MS-DOS。



如果您不熟悉DOS操作系统,那么我建议您在Microsoft MS-DOS v6.22副本(DOS的1994年6月版)(最新发行版)中重复我的步骤,该版本包含我们需要的所有工具(我将在下面讨论唯一的例外)。



2.背景



由理查德·布罗迪(Richard Brodie)等人于1982年开始开发一种称为DOS的Microsoft Word文字处理器。理查德(Richard)被施乐帕克(Xerox Parc)聘请,因为他熟悉当时颇具未来派风格的Bravo文字处理器。



Word for DOS于1983年首次发布,并与MS-DOS的最早版本之一捆绑在一起。它使用图形(原始)并支持鼠标操作,但是该程序本身收到了相互矛盾的评论。



DOS版Word v2.0于1985年发布,它支持EGA图形并具有拼写检查器。



用于DOS的Word v3.0于1986年发布,它支持Hercules图形和扩展打印机集。



DOS版Word v4.0于1987年发布,它支持VGA图形,并具有文本和图形模式。



用于DOS和OS / 2的Word v5.0成为16位应用程序。



1989年对Word v5.5的更新引入了Windows / Mac风格的窗口和菜单,并且是同年发布的Windows版Word的前身。



第一个用于Microsoft Windows的WYSIWYG *文本处理器的开发在1988-1989年左右完成,现在可以在计算机历史博物馆(CHM)的网站上找到该版本。



*所见即所得=您所看到的就是所获得的内容



阅读有关历史的更多信息,并从此处的计算机历史博物馆下载源代码:



https://computerhistory.org/blog/microsoft-word-for-windows-1-1a-source-code/



3.我可以编译此代码吗?



是! 但是如何?您可以使用老式PC或相对较新的计算机(可以引导到旧版BIOS模式),也可以配置虚拟机监控程序以运行虚拟PC。所有必要的工具都在上述链接的源代码转储中。它们都可以在DOS下工作,因此让我们弄清楚这应该如何工作。



对于演示,我将在Mac上使用VMware Fusion,但是您可以使用任何合适的可以运行MS-DOS的旧式硬件或管理程序。安装DOS后,您需要检查您有多少可用内存。为了这

有必要从总体上理解DOS如何“看到”硬件。由于编译器似乎需要扩展的内存,因此我将说明如何访问这种类型的内存以及如何配置DOS以使该内存可用于编译器。



另外,文件集非常大(对于DOS应用程序),因此我建议通过使用源文件创建CD-ROM映像来使您的生活更轻松,以便可以将它们立即复制到DOS计算机上。但是,还需要设备驱动程序才能使CD-ROM在DOS中工作,因此我还将在下面进行介绍。



源代码很有趣,因为专有的编译器需要一台至少具有386和4 MB RAM的处理器的计算机。这超越了当时许多PC的特性,因此肯定会被认为是“高端”的,因为那时大多数计算机最多具有1 MB的RAM,而只有640 KB的内存可用于典型的DOS应用程序。DOS本身占据了相当数量的空间,而应用程序则使用剩余的空间。那么,我们的汽车有多少内存?如何为她增加更多的记忆?在下面的更多内容。



4.英特尔处理器的历史



DOS需要内存管理的原因与应该在OS上运行的处理器的历史密切相关。由于许多早期程序都是用汇编语言编写的,因此DOS操作系统与运行它的处理器紧密集成在一起。结果,它继承了这些处理器的局限性,并提出了奇怪的要求,因为每个新一代处理器都必须支持以前所有处理器的代码库。



1979年,8位Intel 8086/8088处理器可以寻址1,024 KB或1 MB RAM(8位数据总线,16位内存寄存器)。



1982年,一个16位的Intel 80286处理器可以寻址多达16 MB的RAM(16位数据总线,24位地址空间*)。



1985年,32位Intel 80386(及更高版本486)可以(理论上)寻址到4096 MB或4 GB RAM。**



现代64位处理器具有40位,52位和64位可寻址内存架构。因此可以支持1 TB到4 PB的RAM!



注意*:24位地址空间等于2等于24×1字节的幂= 16,777,216字节或16 MB。



注意**:32位地址空间是32 x 1字节的幂= 2 294 967 296字节,即4 GB,但是在具有386处理器的PC中,由于主板的限制和当时RAM的巨大成本,通常将其设置为小于1 GB。



DOS和Windows的历史充满了由向后兼容性和内存管理约束所产生的问题,这些问题受到首批英特尔处理器的体系结构的影响。



5. DOS内存类型



DOS操作系统解决了五个内存区域。在引导时,使用在CONFIG.SYS中调用的一个或两个设备驱动程序来解决每个问题。 HIMEM.SYS提供对扩展内存的访问,而EMM386.EXE提供对扩展内存的访问。这是这些类型的内存的简要说明。



常规内存:0到640 KB(或651,264字节)的内存,也称为下内存区域(LMA)



上内存区域:UMA是640 KB到1024 KB(1 MB)的内存也称为



高级内存块(UMB)扩展内存规范:XMS是从1MB到64MB的内存地址,但是此规范还描述了UMA,因为如果没有HIMEM.SYS的支持,DOS将无法访问UMA。



扩展的内存规范:EMS使用“上层内存”中定义的64 KB页面框架来提供对1 MB以上内存的访问。指定AUTO参数时,DOS可以同时使用XMS和EMS;如果EMM386.EXE加载了NOEMS参数,则DOS可以禁用XMS和EMS。 EMM386和其他内存管理器在扩展的内存区域中模拟扩展的内存-一切都完全清楚,一点也不混乱!



高内存区域:HMA为64 KB,刚好超过1 MB,DOS可以在启动时通过使用CONFIG.SYS文件的DOS = HIGH参数将自身加载到其中。



常规内存包含老式的DOS应用程序。它们只能使用0-640KB的内存,并且由于DOS本身占用了一些空间,因此它们在运行时只能访问不到500KB的RAM。这通常会限制在所谓的“实模式”下运行的应用程序,换句话说,就是16位应用程序仅限于常规内存。实模式之所以称为实模式,是因为可寻址内存应用程序映射到实内存地址。



几年来这只是很正常,后来640KB成为限制了更复杂的应用程序(例如游戏)的限制因素!较新的Windows应用程序需要更多的内存,因此引入了扩展内存规范(XMS)。超过1 MB的内存可以通过16位程序进行寻址。该规范出现在286个处理器中,该处理器实施保护模式以访问高于DOS限制的内存,但也支持以实模式访问主内存,并根据需要在模式之间进行切换。



6.安装DOS



我们可以使用实际的软盘和USB软盘驱动器,从物理软盘创建软盘映像,或从WinWorld等站点下载软盘映像。



物理机或虚拟机必须至少具有4 MB和最大32 MB的RAM,以及具有单个FAT16分区的不超过512 MB的硬盘驱动器。如果硬盘驱动器物理上大于512 MB,则将第一个分区限制为DOS版本可以解决的最大大小。出于兼容性原因,请将第一个分区限制为512 MB或更小。



如果计算机具有上述最低规格,请从第一张DOS软盘启动。在高于5.0的版本中,安装程序将启动。按照其说明进行操作,并选择所有默认值。在下一篇文章中,我们将尝试安装选项。如果没有看到包含安装建议的对话框,则通常在第一张软盘上可以找到INSTALL.EXE文件,或者通过手动分区硬盘自行配置所有内容。请参阅下面的“使硬盘驱动器可启动”部分。



7.使硬盘驱动器可启动



如果在上一步中是从软盘引导的,但是还没有可访问的硬盘,或者DOS副本不包含安装程序,则可以手动安装它。



从软盘运行FDISK,并选择第4项并按Enter,以查看现有的分区结构。



如果存在分区,则应写入FAT16文件系统最大511 MB的信息,并且状态列应指示该分区处于活动状态(状态列中的符号“ A”)。



如果不是这种情况,则创建一个节;通过按Escape键返回主菜单。



选择项目1,然后按Enter。键入1,然后再次按Enter以创建新的主分区。该程序将抱怨它已经有一个现有的节。如果您足够勇敢,则可以将其删除并创建一个新的,或者仅使用现有的一个。



之后,返回主菜单,选择项目2并激活新分区,然后退出FDISK。在DOS提示符下,我们需要格式化磁盘以使该新分区可读,并且还使用formatcommand命令的“ / s”开关将DOS引导系统带到磁盘上“ / v”开关将询问新卷的名称。



format c: /s /v


按照提示并为卷指定一个有效的11个字符的名称。这将创建启动盘,但在重新启动之前创建一个DOS文件夹。



md C:\DOS


...然后将所有文件从软盘复制到C:\ DOS ...



copy A:. C:\DOS\.


重新启动之前,请创建标准的CONFIG.SYS和AUTOEXEC.BAT。没有文件编辑器?没问题,输入以下命令将文本从控制台复制到名为config.sys的文件中:



C:
CD\
copy con CONFIG.SYS
files=30
buffers=10


然后按Ctrl-Z退出并保存输出。这些命令会将控制台(CON)的内容复制到磁盘。现在,我们在C:驱动器的根目录中有一个CONFIG.SYS文件。



让我们做同样的事情来创建AUTOEXEC.BAT文件:



copy con AUTOEXEC.BAT
@echo off
prompt $p$g
ver


然后按Ctrl-Z。太好了,现在您可以重新启动了。



8.配置DOS



通常,MS-DOS配置有两个在启动时由DOS读取的文件(除了COMMAND.COM本身)。它们是以下文件(按访问顺序):



CONFIG.SYS包含启动时加载的设备驱动程序和配置选项的列表;它位于启动盘的根目录中。在引导计算机之后以及将设备驱动程序加载到CONFIG.SYS中之后,



AUTOEXEC.BAT将启动。这两个配置文件都必须位于启动盘的根目录中。 A:系统从软盘启动时; C:具有硬盘的系统。



DOS可能会在没有这些文件的情况下很好地引导,但是大多数应用程序都向它们添加了配置选项,以使其工作或优化其执行。 DOS的最新版本还尝试通过在安装过程中对这些文件进行更改来进行自我配置。



在启动时运行HIMEM.SYS还不够,我们需要配置EMM386.EXE或第三方扩展内存管理器。稍后再详细介绍。英特尔处理器架构的历史与内存管理有关,因此我们需要弄清楚这一点。



要配置扩展的内存访问,我们将使用DOS编辑器编辑C:\ CONFIG.SYS:



\DOS\EDIT \CONFIG.SYS


如果找不到该文件,则只需将新文件保存为名称C:\ CONFIG.SYS。

以下文本添加到第一行:



DEVICE=C:\DOS\HIMEM.SYS


CONFIG.SYS中可能还有其他条目,但请将其添加到第一行。完成后,按Alt-F转到“文件”菜单,然后按S保存,然后再次按Alt-F和X退出。重新启动后,您应该看到一个内存测试,然后是DOS命令行:“ C>”。



在命令行上输入MEM命令以查看DOS应用程序现在有多少可用内存:





如您所见,DOS仅具有571KB的常规内存用于应用程序,但几乎有30MB的扩展内存(XMS),而没有扩展内存(EMS)。



原因是我为此虚拟机分配了32 MB的RAM,并且在您的硬件/虚拟机上情况可能有所不同。



看起来我们需要访问扩展内存(EMS)才能运行编译器,但是如何实现它呢?这是EMM386.EXE派上用场的地方;此内存驱动程序随更高版本的DOS一起提供,以支持需要大量内存(包括某些DOS游戏)的Microsoft Windows和其他DOS应用程序。



9. DOS中的内存管理



如果我们通过CONFIG.SYS加载内存管理驱动程序,我们可以看到它分配了多少RAM。config.sys文件的开头有以下两行。可能还有其他条目,但是前两行必须位于文件的开头并按此顺序。



DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE
DOS=HIGH
FILES=30


重新启动并再次运行MEM。





将此屏幕快照与上一个屏幕快照进行比较,我们可以看到找到了相同的主内存,但是现在可以运行的程序的最大大小为612 KB(大于571 KB),因为我们是使用DOS命令将DOS加载到高端内存中的=高。我们还模拟了扩展内存(XMS)范围内的扩展内存(EMS)。



如果运行DOS MSD命令,我们将获得以下内存分配方案:





它显示了扩展内存占用的连续内存区域。每个P字符代表1 KB,因此每行代表16 KB可以分配的空间。不是16KB的边界不需要分配,因为它们不是连续的。



要编译Word,常规内存和EMS对我来说就足够了,但是根据所使用的DOS版本及其配置,您的可用内存量可能会有所不同。



如果您需要更多的主内存和/或扩展内存,请尝试使用第三方扩展内存管理器,例如QEMM,JEMM或UMBPCI,它们使用较少的主内存,同时仍提供兼容的扩展内存。



完成配置



某些应用程序需要临时空间来存储文件,转储内存等,因此让我们使用MD(make directory)命令为临时文件创建目录,然后使用SET命令指向TEMP环境变量。



MD C:\TEMP


然后,通过将其添加到autoexec.bat中来在启动时进行设置。输入:



\DOS\EDIT \AUTOEXEC.BAT


并将以下内容添加到文件末尾:



SET TEMP=C:\TEMP


按Alt-F,S保存并按Alt-F,X退出编辑器。



10.编译OPUS



OPUS是Microsoft Word for Windows v1.1a的代号。提供的源代码包含C和汇编代码,专有的编译器,链接器,专有的修补工具,开发人员说明和文档。这些文件包含创建16位可执行文件所需的所有内容,这些文件可以在Windows v2.x,Windows v3.x和OS / 2 v2.x上运行而无需修改。



我们至少需要612KB的主内存才能编译此软件,以及至少4MB的扩展内存,因此您可能需要研究《 DOS配置指南》以针对这些情况配置DOS。



我在VMware Fusion中以MS-DOS v6.22作为来宾操作系统创建了一个来宾,并在Windows XP下配置了DOS VDM。这一切都在两种环境下都有效。



阶段1:下载



可以在计算机历史博物馆网站上找到源代码:



https :



//computerhistory.org/blog/microsoft-word-for-windows-1-1a-source-code/它将允许您编译Microsoft Word v1.1a,但是链接器经常发生崩溃,除非您与构建文件夹分开运行op1.bat。我还没有弄清楚为什么在DOS下会发生这种情况...但是在Windows XP下,我们不仅可以模拟DOS命令行,而且可以模拟扩展和额外的内存,并且一切正常!但是该怎么做呢?



阶段2:解压缩zip文件



主机可以运行Windows,Linux或MacOS。我使用的是Mac,但这没关系。解压缩zip文件并创建包含所有文件的CD-ROM ISO映像文件。



请参阅ISO创建指南



阶段3:复制档案



我们通过CD-ROM将源代码,编译器,链接器和文档传输到DOS机器/ VM。



编译器必须从启动磁盘运行,因此我们将其全部放在C:\ SRC中。由于数据量远远大于一个或两个软盘,因此我创建了一个安装在VM中的CD-ROM映像。如果您具有物理硬件,则可以执行相同的操作,或者查看《 DOS配置指南》以了解如何从DOS,通过物理磁盘或通过ISO映像文件访问CD-ROM。



阶段4:创建BUILD文件夹



注意:其中一些步骤是从Beta存档论坛(https://www.betaarchive.com/forum/上的评论中采取的



让我们为每个程序集创建一个新的BUILD文件夹,并更改fast.ini以指向该新程序集。



MD \SRC\OPUS\BUILD1


阶段5:更改编译器配置



在应用程序编译之前,需要修改两个文件以适合您的环境。我从betaarchive论坛上的帖子中获取了大多数这些参数转到工具文件夹:



CD \SRC\OPUS\TOOLS


备份fast.ini



COPY FAST.INI FASTOLD.INI


打开FAST.INI,如下所示:



\DOS\EDIT \SRC\OPUS\TOOLS\FAST.INI


然后将内容更改为如下所示:



OPFL=+ls
NAM=WINWORD
EXE_DIR=C:\SRC\OPUS\PROGRAM
BUILD=C:\SRC\OPUS\BUILD1
OPUS=C:\SRC\OPUS
WORDTECH=C:\SRC\OPUS\WORDTECH
USER=Richard Lewis or Your Name
MMEM=
NOAPPLOADER=


用Alt-F,S保存文件,然后使用Alt-F,X退出。



打开mo1.bat,使其指向您的文件夹结构,而不是源代码中列出的网络驱动器:



\DOS\EDIT \SRC\OPUS\TOOLS\MO1.BAT


并更改以下行以匹配文件路径:



set PATH=C:\SRC\OPUS\TOOLS\tools\dos;C:\SRC\OPUS\TOOLS\tools
set LIB=C:\SRC\OPUS\TOOLS\lib
set INCLUDE=C:\SRC\OPUS\TOOLS;=C:\SRC\OPUS\TOOLS\wordtech;=C:\SRC\OPUS\TOOLS\lib;=C:\SRC\OPUS\TOOLS\asm


更改所有其他路径以匹配您的路径,它们的驱动器名称可能不是C:;;因此更改它们以= C:\ SRC \ OPUS \开头



阶段6:编译!



如果还没有,请更改tools文件夹:



CD \SRC\OPUS\TOOLS


使用修改后的INI配置文件编译BUILD1:



MAKEOPUS @FAST.INI


没有错!目标文件将放置在C:\ SRC \ OPUS \ BUILD1中,如果成功链接,则EXE文件将位于C:\ SRC \ OPUS \ PROGRAM中。

如果使用DOS进行编译,则所有内容应如下所示:





CSL编译器-成功的代码编译和修补程序



如果使用XP(配置说明将在下一篇文章中),则成功完成将如下所示:





如果发生内存错误,则可能是主内存或扩展内存不足,您错过了AUTOEXEC.BAT中的TEMP =分配步骤,或者错过了CONFIG.SYS中的FILES =分配步骤,或者FAST2.INI中存在语法错误。再次检查这些参数。



如果您无法解决内存错误,则有两种解决方案。



  1. 尝试从BUILD文件夹中运行mo1.bat。如果可行,则问题可能是主内存不足,但连续扩展内存不足。
  2. 在Windows XP下的DOS VDM中尝试相同的构建过程-似乎为每种类型的内存正确分配了RAM,但是生成的EXE无法在Windows XP下运行;它将在Windows v2或v3计算机上运行。请参阅Windows XP配置指南。


注意:编译后,mo1.bat文件将重置PATH环境变量,并且不再包含DOS文件夹。这意味着如果您没有为每个命令提供DOS文件夹的完整路径,则某些DOS命令将不再起作用。将C:\ DOS添加到mo1.bat文件的PATH变量中,或者简单地重新启动以恢复以前的设置。



11.发射作品



简而言之,只需将所有文件从C:\ SRC \ OPUS \ PROGRAM复制到Windows v2.x或v3.x计算机,然后运行WINWORD.EXE。就这样!



将来,我将整理一组软盘,这些软盘将根据此代码进行正确的安装,但是到目前为止,这足以进行测试。



在Windows 2.x下,程序应如下所示





...以及在Windows 3.x上运行的相同代码:







广告



我们公司提供预装Windows的服务器我们不会节省硬件-仅保留品牌设备以及俄罗斯和欧盟一些最佳的数据中心。赶快检查一下。






All Articles