Windows 1.0 Development Release 5

来自 WinStory Wiki
跳转到导航 跳转到搜索
Development Release #5
Windows 1.0 的版本
发布名称Development Release #5
操作系统家族16 位 Windows
内核版本1.00
体系结构x86 16-位
编译日期1984 年 10 月 31 日

Windows 1.0 Development Release #5 是 Windows 1.0 的预发布版本。此版本是开发版本(Development Release)系列中的第五个版本,旨在帮助应用程序开发人员设计和开发其应用程序以使用 Windows。根据 INSTALL.BAT 中的说法,它于 1984 年 10 月 31 日编译,并可能在接下来的几周内发布。它是迄今为止最早可用的 Windows 版本,尽管已知早期版本存在于私人集合中。

默认情况下,此版本安装到 C:\WINDOWS\TEST,开发资源则位于 C:\WINDOWS\BIN 中。还包括几个模型应用程序,即图表(Chart)、图形(Graph)、PPDemo、Sample 和 Template,以及它们的源代码。整体 UI 设计理念尚未最终确定,这在对话框中可以清楚地看到——有些对话框(如标准 Windows 对话框)使用菜单栏而不是“确定”和“取消”按钮,而自定义对话框往往看起来完全不同。

此版本于 2008 年 9 月 19 日上传到 BetaArchive FTP。[1]

系统要求

根据 INSTALL.BAT 中的表述,需要以下内容:

The following equipment is required:
* IBM XT or AT
* 512 K memory.
* Floppy disk configured as DRIVE A:.
* Hard disk configured as DRIVE C:.
* Color graphics card.
* External console connected to COM1: ( debugging ).
* Microsoft mouse ( bus or serial ).
* Timer.
The following software is required:
* 2.x or 3.0 MS-DOS

中文翻译如下:

要求以下设备:
* IBM XT 或 AT
* 512 K 内存。
* 软盘配置为驱动器 A:。
* 硬盘配置为驱动器 C:。
* 彩色图形卡。
* 连接到 COM1 的外部控制台:(调试)。
* Microsoft 鼠标(总线或串行)。
* 定时器。
需要以下软件支持:
* 2.x 或 3.0 MS-DOS

安装

整个安装是通过名为 INSTALL.BAT 的简单批处理脚本完成的。建议使用 PCem 或 86Box 等仿真器,因为此版本依赖于 IBM XT 或 AT 以及总线/串行鼠标。

安装步骤

  1. 使用仿真器(如 PCem86Box)并使用以下硬件配置创建 XT 或 AT 类的新虚拟机:
    • Intel 8088、8086 或 80286 处理器(取决于所选的计算机)
    • 512k 或更多内存
    • CGA 或 Hercules 显示适配器
    • 串行端口 1 已启用并用于 Microsoft 串行鼠标
    • 适合计算机的硬盘控制器(MFM、RLL、XTIDE 或 IDE)
    • 具有标准 CHS 值且与控制器类型相同的 10 MB 或 20 MB 硬盘
    • 至少一个 5.25 英寸 360k 软盘驱动器
  2. 使用 MS-DOSPC-DOS 2.x 或 3.0 引导盘引导计算机。
  3. 使用 FDISKFORMATSYS 实用程序对硬盘驱动器进行分区和格式化。
  4. 重新启动计算机以从硬盘启动。
  5. 插入 Development Release #5 的第一张软盘。
  6. 运行 copy A:\INSTALL.BAT C:\
  7. 运行 C:\INSTALL.BAT
  8. 按照屏幕上的说明进行操作。

现在,每次要运行 Windows 时,键入路径 path C:\WINDOWS\BINcd C:\WINDOWS\TESTmswin(或将这些行的内容添加到 AUTOEXEC.BAT 文件中,以便在系统启动时自动启动 Windows)。

自上一个开发人员版本以来的更改

这是基于对已发布的 DR4 发行说明的分析。由于 DR4 的磁盘映像尚未转储和/或公开发布,因此这不一定是与以前版本相比的完整甚至完全准确的更改列表。

可执行文件格式

可执行文件格式已更新 —— 扩展名也已从 .MOD 更改为 .EXE。Windows NT 3.5 Build 782 源代码中存在的 Windows 1.x SDK、2.11 OAK 和 3.1 内核源代码中存在的 NEWEXE.H 文件证明了这一点。1984年10月17日和10月23日,在 DR4 和 DR5 的编制日期之间对格式进行了修订。

对 DR5 的 MC.EXE(模块编译器)的检查表明,原始模块格式不包含 END* 段(描述为“标记为 NEWEXE 的表末尾”),而是记录每个表中的条目数,并由 EXETOMOD 用于确定每个组的长度。

新的模块实例进程

NewProc 是负责处理多个实例(在可以有多个数据段的应用中)的进程,在此内部版本之前旋即删除。它的功能可能已合并到 LoadProc 中(作为 hPrev 参数)。可以在 QANDA.DOC 和 DR4 的发行说明中看到对它的引用。

内存管理

在此版本中重写了内存管理,以减少以前版本的非常高的内存使用率(根据 DR4 的发行说明加载了多个应用程序,超过 300 KB,完全关闭了当时的许多低端系统)。

初始化过程

初始化过程已重新设计;操作系统不再使用模块启动程序(MB.EXE)从配置文件初始化和加载 USER.PRO 启动应用程序;相反,此任务是通过调用加载 Windows 内核(KERNEL.EXE)的批处理文件来执行的。

值得注意的是,Module Booter 的符号仍然存在于 DR5 磁盘上,如 MB.SYM,表明 MB.EXE 最后一次编译是在 1984 年 10 月 5 日,即编译此版本之前的几周。这表明 MB 只是被删除了,而不是集成到内核中,因为 MB 中包括的任何函数都不在 DR5 的内核中。

显示驱动程序

改进了显示驱动系统。DR5 并不是简单地使用一个名 DISPLAY.MOD 的显示驱动程序(可能用 CGA),而是引入了一个新系统,其中 .DIN 文件将复制到 DISPLAY.EXE,具体取决于已选择的显示适配器。每个驱动程序的游标例程现在都存储在 .CIN 文件中。并在安装过程中复制到 CURSOR.EXE

UI 控件

DR4 中的控制管理中心(CTLMGR.MOD)可能已经被合并到 WINDOWS.EXE 中(在以后的版本中成为 USER.EXE)。

已删除的工具

自 DR4 以来,从发行版中删除了多个工具和示例应用程序。这些是:

  • CTLTEXT.MOD —— 控制管理中心的测试应用程序,可能已在此版本中集成到 WINDOWS.EXE 中。
  • DM.EXE(“模块显示器(Module Displayer)”)—— 基于 .MOD 文件创建列表的应用程序(在以后的版本中变成了 NEWHDR.EXE/EXEHDR.EXE)。
  • DATAX.MOD —— 数据交换的示例应用程序。
  • EXE2MOD.EXE —— MS-DOS 可执行文件到 Windows 模块转换器(在此版本中成为 NE.EXE)。
  • LINK.EXE —— Link 版本 2.44 包含在 DR4 的第三个磁盘中;在此版本中删除了它。
  • MAKE.EXE —— Make 包含在 DR4 的第三个磁盘上,并且在此版本中也被删除。
  • TASKDEMO.MOD —— DR4 新多任务处理系统的演示应用程序。
  • WDB.BAT —— 用于调试早期版本的批处理文件。早期开发版本中也附带了一个文档 —— WDB.DOC —— 也被删除了。

README.DOC 更新

更新了 README.DOC,DR5 版本的日期为 1984 年 9 月 6 日,比上一个开发版本的编译日期晚了 7 天。

游标(Cursors)

此版本中添加了几个新游标,而不是 DR4 的两个与应用程序无关的游标;自 DR4 以来,BULLSEYE.CUR(图标编辑器源代码的一部分)仅作为编译资源(在 ICONEDIT.RES 中)提供。

Bug、修复和增强功能

Development Release #5 仍然是一个相当早期的版本,因此存在一些明显的性能和稳定性问题。长时间或内存密集型使用(例如,同时运行多个应用程序)可能会导致生成挂起或崩溃,而不会发出警告,有时甚至只有硬重启才能恢复计算机的功能。

记事本崩溃

启动记事本可能会导致系统挂起或崩溃,因为系统可能会用完文件句柄。通常,将这两行添加到 C: 驱动器根目录中的 CONFIG.SYS 文件将避免其崩溃:

FILES=30
BUFFERS=30

向上箭头(Up-Arrow)光标

由于源代码中的拼写错误,将鼠标悬停在菜单上时显示的 uparrow 光标在 WINDOWS 模块初始化期间将无法加载,从而导致返回空指针。SetCursor 例程将检测 null 指针并改用默认游标。在 1983 秋季 COMDEX 内部版本中可以看到向上箭头光标,因此当资源与 WINDOWS 模块分离时,最有可能发生拼写错误。它在 Alpha Release 中返回,原因是所有资源名称都已转换为 ID。可以通过将 WINDOWS.EXE 中的字符串从 upArrow 更改为 uparrow 来解决此问题。

剪贴板、记事本和控制面板问题

剪贴板、记事本和控制面板在每个会话中仅启动一次。尝试第二次启动它们只会导致光标从正常状态短暂更改为沙漏状态,然后恢复正常状态。这样做的原因是,与所有其他包含的应用程序不同,这三个应用程序是单个数据段应用程序。应用程序的每个实例都必须具有唯一的数据段,且只允许存在一个数据段,因此每个会话只能启动一个实例。将可执行文件重命名为其他名称会诱使系统认为它们是不同的应用程序,因此你有机会再次启动它们。修补可执行文件的标头(以删除单个数据段限制)可以允许它们以相同的名称多次启动。

PPDEMO 问题

PPDEMO.EXE 应用程序将导致系统在关闭后挂起,这是由于为其 FreeProc 定义了一个名为 bLastInstance 的额外参数。目前尚不清楚 bLastInstance 是在以前的版本中还是在 DR5 之前删除的,还是新的但尚未添加的内容,但其目的很明确——通知应用程序这是否是应用程序的最后一个实例。某些应用可能希望在最后一个实例终止后才释放其对象。这将导致向堆栈指针添加额外的 2 个字节,从而破坏系统的内部状态。

剪贴板问题

剪贴板应用程序一旦启动,就无法在会话的其余部分关闭。这是因为剪贴板既是一个应用程序,也是一个动态链接库,关闭它会导致依赖于它的应用程序行为异常。其 DestroyProc 对所有查询都将返回 FALSE。如果修补 DestroyProc 以返回 TRUE,则可以关闭它,但这样做会导致记事本等应用程序引发错误和/或崩溃。

访问空软盘驱动器

如果用户尝试在 MS-DOS Executive 中访问空软盘驱动器,系统将在 Windows 上显示 DOS 磁盘错误消息并挂起或崩溃。此问题已在 Alpha Release 中修复,因此 Windows 会显示正确的错误对话框。

API 导入限制

应用程序导入的 API 函数不得超过 100 个,否则 Windows 将拒绝加载模块。1984 年的链接器在物理上无法生成超过 100 个导入的二进制文件,即使使用较新的链接器来生成有效的可执行文件,Windows 的模块加载器仍然不会加载可执行文件。

切换显示驱动程序

DR5 运行在 CGA 和 Hercules

此版本支持双扫描 CGA(640×400)和 Hercules(720×348)显示,两者均仅为单色。但是,默认情况下仅安装 CGA 驱动程序。可以使用随附的 DRIVERS.BAT 批处理文件在它们之间切换,只需按照以下简单步骤操作:

path C:\WINDOWS\BIN
cd C:\WINDOWS\TEST
drivers <desired-driver>

<desired-driver> 替换为 IBMCOLOR (对于 CGA)或 HERCULES(对于 Hercules)。请注意,你当然还必须在模拟器设置中更改模拟显示适配器。

注册文件扩展名

USER.PRO 文件(在 \windows\test 中)中,你可以找到 [extensions] 部分。你可以在此处注册用于处理文件扩展名的默认应用程序。格式如下:

txt = notepad ^.txt
ico = iconedit ^.ico

请注意,应用程序必须支持接收文件名作为参数,而记事本此时不支持。此外,应用程序必须与要打开的文件位于同一目录中。

DR5 的内核中有一个名为 RegisterType 的未记录函数,序号为 68(最后一个序号)。它返回 0,不执行任何其他操作。堆栈指针中添加了 6 个字节,这意味着它可能接受 3 个 WORD 值或 1 个 DWORD 和1 个 WORD 值。

在启动时运行应用程序

此外,USER.PRO 中还有 [windows] 部分中的 Run 值。包含在此空格分隔列表中的任何 Windows 可执行文件都会在 MS-DOS 执行程序启动之前执行。以这种方式启动的应用程序将直接进入屏幕底部的标志性模式(换句话说,它们都将被最小化)。

有趣的发现

NE 格式

此版本使用早期版本的 NE 可执行文件格式,此格式与最终版本完全不同,并且与最终版本不兼容。主要区别在于应用程序资源(如菜单、图标等)存储在外部 .RES 文件,通常与 EXE 同名。资源文件似乎是在应用程序的初始化过程中加载的。双击 MS-DOS Executive 中的资源文件将启动关联的应用程序,其方式与双击 EXE 的方式相同。

另一个区别是,此版本的格式不需要文件开头的 MS-DOS MZ 存根。这导致有两种 DR5 可执行文件 —— 带有 MZ 存根的可执行文件和不具有 MZ 存根的可执行文件。前者可以在 MS-DOS 下启动,在那里它们将显示通常的“此程序需要 Microsoft Windows”消息并退出。后者将导致系统挂起,因为 NE 标头将被视为代码。

使用 SHIFT 键

你可以通过按住 SHIFT 键,同时在 MS-DOS Executive 中双击应用程序,以图标模式启动应用程序。若要在一次移动中恢复和最大化最小化的应用程序,请在按住 SHIFT 键的同时双击应用程序的图标。

若要快速启动已运行应用程序的新实例,请按住 SHIFT 键,然后单击应用程序窗口并将其拖动到要创建新窗口的位置。你也可以在其窗口标题上单击一次,这将在现有窗口上方创建一个新窗口。然后,新窗口将与前一个窗口垂直平铺。这也适用于最小化的应用程序,将图标拖放到图标区域将创建一个新的最小化实例。

崩溃消息

崩溃消息

此版本包含一条消息,指出“Windows 即将崩溃(Windows is about to crash)”。但是,仅当 Windows 在 MS-DOS Executive 初始化过程中无法创建子窗口(驱动器列表、路径和文件列表)时,才会显示它。[2]因此,很难自然触发它。此消息在 Beta Release 发布后、Premiere Edition 之前的一段时间内被删除。

MS-DOS Executive 拖放支持

此版本中的 MS-DOS Executive 实际上支持在目录之间移动文件的简单拖放操作。此功能后来在 Alpha Release 之后被完全删除,当时 MS-DOS Executive 进行了小的重新设计。这可能用于通过将文件拖放到图标区域的垃圾桶图标上来促进文件删除(见下文)。

时钟实例限制

DR5 中并发运行的计时器数量限制为 16 个。由于时钟应用程序对每个实例使用计时器,因此最多可以同时运行 16 个实例。如果你尝试启动第 17 个时钟实例,对 SETTIMER 的调用将失败,并显示错误消息。

未使用的链接器应答文件

尽管没有用,但 PPDEMO.LNK 还是被复制了。它确实表明 Microsoft 最初使用链接器的应答文件,而 SLIBC.LIB 的使用表明它曾经默认链接到 MS-DOS C 库。目前尚不清楚 Microsoft 何时从 C 编译器的 2.03 版切换到 3.0 版的预发布版本,但链接到 MS-DOS 库确实暗示它可能发生在最近,因为 Windows 库不存在或尚未准备好。

对过去版本的引用

WINDOWS 文件夹中的文件 REMOVE.BAT 包含较旧的日期,即 1984 年 5 月 29 日。根据 1984 年 5 月 7 日发行的《InfoWorld》杂志,此文件可能是从以前的版本中重用的,可能是从 DR1 中重用的,DR1 计划于 1984 年 5 月发布。[3]

INSTALL.BAT 中的安装过程首先清空某些文件夹,但会完全删除 \windows\lib。以前的版本可能使用此文件夹,而 DR5 仅使用 \lib。用于卸载 Windows 的批处理文件 REMOVE.BAT 并不关心 \windows\lib,而是提到了 \lib,因此它要么被修改,要么它所在的版本已经使用了 \lib

在提供的文档中,QANDA.DOC(位于 \windows\doc 中)中包括对任何先前版本的唯一引用,其中说:“RC.EXE程序有一个小文件缓冲区。它根本无法处理你的大菜单。该错误已修复(The RC.EXE program had a small file buffer. It simply couldn't handle your large menu. The bug has been repaired)”。包含的数字文档仅包含一个时间戳,即 GRAPH.DOC 中的“16/10/1984 16:37”(也在 \windows\doc 中)。文件尚未更改为具有相同的日期,因此你可以清楚地看到每个文件的创建和修改时间。

对未来版本的引用

QANDA.DOC 中,即将发布的 1 月版本被多次提及:“到 1 月发布时,我们的目标是……(By our January release, our goal is to...)”和“在我们一月份的版本中,将有……(In our January release, there will be...)”。由于Alpha 于 1985 年 1 月发布,这似乎表明 DR5 和 Alpha 之间没有发布其他版本。

复活节彩蛋和有趣的事情

在一些示例的源代码包含一些有趣的注释。

MENUID.C

/*----------------------------------------------------------------------------
   "Some people, they like to go our dancing, and other people
   [like main], they do all the work . . ."
----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
   Our mad chicken-with-it's-head-cut-off error abort routine.
----------------------------------------------------------------------------*/

图标

Windows 1.0 引入了图标和光标格式(.ICO 和 .CUR 文件),尽管它在 Windows 3.0 中发生了重大变化,此后至今基本保持不变。这两种格式不兼容,但文件可以毫不费力地从一种格式转换为另一种格式。[4]

SAMPLE.EXE 的图标是超人的标志。

WINDOWS.RES 中,有一个名为 TRASH 的未使用图标,表示较旧的版本可能具有某种垃圾桶功能。这得到了早期版本的照片的支持,在这些照片中可以看到这个图标,以及新闻文章,其中它被描述为丢弃文件的地方。[5]显然,此功能在 DR5 之前就已经被删除了,只剩下垃圾桶图标。

CONFIG.BIN 用于存储字体配置和系统位图(如窗口控件),包含两个未使用的位图、一个菜单和一个帮助图标。它们可能是早期版本中状态栏按钮的遗留物。[6]

错误消息

DR5 中的警告
DR5 中的小错误

此版本中的 API 有一个 PostError函数,可以显示 3 个错误级别:WARNINGMINOR_ERRORFATAL_ERROR。使用 PostError 创建的对话框始终具有“中止(Abort)”、“重试(Retry)”和“忽略(Ignore)”按钮,这些按钮看起来像菜单栏。

如果应用程序需要其他按钮组合,则必须使用 PostMessage 函数。对于 PostMessage,没有错误级别的概念。当使用错误级别为 WARNINGPostError 时,以及每当使用 PostError 时,都会显示著名的注释图标。

使用错误级别为 MINOR_ERRORPostError 时,将显示炸弹图标。MINOR_ERROR 未被任何包含的应用程序使用,因此此图标在正常使用期间永远不会出现。

不会显示错误级别为 FATAL_ERRORPostError 的用户界面。手动触发 Windows 后,Windows 将在 8 MHz 计算机上的几毫秒内退出。Windows 退出后,MS-DOS 中会显示一条错误消息大约 1 秒钟,然后屏幕上会充满看似随机的内存内容。

DR5 示例应用程序中的所有错误都使用错误级别为 WARNINGPostError 或仅显示注释图标的 PostMessage,并导致许多人认为炸弹是以前开发版本的残余物。错误图标后来被改为执行“停止”手势的手,但最初选择炸弹表明早期的 Windows 开发受到了 Apple Macintosh 的影响,后者也使用炸弹作为错误图标。

clsWndHelp

这是在 WINDOWS.H 的 WndClass 结构中定义的类过程之一。类过程是消息队列的前身,当发生与焦点应用程序相关的事件(如用户向下滚动)时,Windows会调用这些过程。在注册其类之前,每个应用程序都必须在其类实例中设置指针,这些指针指向它为处理所需事件而实现的过程。

任何示例应用程序都未使用此特定过程,其名称表明它可能是早期版本的遗留内容,这些版本使用它通过屏幕顶部状态栏中的系统帮助按钮向用户提供帮助。找不到其他对帮助系统的引用。

高分辨率和色彩支持(EGA、VGA、SVGA)

Betaarchive 社区成员 jb881122 修改了随附的 Hercules 驱动程序,这使得可以在 EGA、VGA 和 VESA 800x600 模式下运行 DR5,尽管没有彩色支持。[7]为 Windows 编写第一个彩色驱动程序和彩色应用程序的 Microsoft 员工表示,1984 年的 EGA 支持最初是匆忙进行的,并在很短的时间内完成,主要用于 IBM 的演示。这可能就是为什么 Microsoft 没有将其包含在此版本中的原因。

对所包含的应用程序进行逆向工程证实,计算器、拼图和黑白棋等应用程序在此开发阶段已经支持彩色。[8]在此版本中,它们的颜色与 DR3 及更早版本中的颜色不同,拼图和计算器的背景颜色被切换。

后期版本

包括 PIF 编辑器的未经确认的版本

2019年 8 月 5 日,在 BetaArchive Discord 服务器上发布了一张描绘与 DR5 非常相似的低分辨率图像,但到目前为止,由于其来源未知,因此无法证明此图像的真实性。从视觉上看,该版本与 DR5 相同,但它包括 PIF 编辑器(PIF.EXEPIF.RES),它是在 DR5 和 Alpha 版本之间的某个时间引入的。PIF 编辑器的存在可能表明对 DOS 应用程序的最低限度支持。文件 DOSAPP.BINDOSAPP.EXE 可能是 WINOLDAP.MOD(Windows 旧应用程序模块,用于在 Windows 下运行 DOS 应用程序)的早期版本,但 DOSAPP.PIF 的存在也可能意味着它实际上只是一个 DOS 应用程序。时钟应用程序也在运行,但其文件不在驱动器 A: 上(其内容可以在 MS-DOS Executive 窗口中看到),这表明它们可能位于另一个磁盘上。

在此图像中看到的 PIF 编辑有一个“图标”字段,此字段在标签后缺少冒号(:)。它还具有名为“警告”和“强制退出”的选项,这些选项不会出现在程序的更高版本中。在 Alpha 的 PIF 编辑器中看到的许多选项都丢失了,这表明这可能是此程序的一个非常早期的形式。显示 DOS 应用程序的自定义图标的能力将特别有趣。

图库

安装程序

CGA 图形

Hercules 图形

引用资料