Os8088:适用于 IBM XT、286、386 的强大的类 Mac 操作系统
摘要
os8088 是一个面向 Intel 8086/8088 PC 的业余爱好者级 Macintosh System 1 风格 GUI 操作系统,完全用实模式汇编编写,具有抢占式多任务能力,仅占用 256K RAM。该项目已完成,源代码可供获取。
暂无内容
查看缓存全文
缓存时间: 2026/08/09 02:22
# os8088 —— 面向 IBM PC XT 的 Mac 风格图形操作系统
来源:https://os8088.com/
os8088 1\.0
## 本可成为 IBM XT 的图形操作系统
面向 Intel 8086 的 Macintosh System 1 风格桌面,完全用实模式汇编编写,从软盘启动。重叠窗口、下拉菜单、串口鼠标、可加载程序——以及真正的 1984 年 Macintosh 从未有过的抢占式多任务。
像素640x480颜色16内存256K内核52,718字节任务槽12抢占频率18\.2Hz
os8088
os8088 桌面:顶部是菜单栏,一个带有键入文本的 Note Pad 窗口,一个正在计时的 Clock,一个 Bounce 窗口,Control Panel 显示抢占式/协作式选择,以及 Task Manager 显示 CPU 历史图——同时运行五个程序,每个程序在底部 Dock 中都有一个磁贴。**在 1978 年的 CPU 上同时运行五个程序。**一个从软件软盘加载的 Note Pad、一个滴答作响的 Clock、一个弹跳的小球、Control Panel 和 Task Manager,每个都是独立的实例,拥有自己的 Dock 磁贴。Task Manager 报告机器忙率为 70%,已用内存 147K。
## 这是什么
os8088 从软盘的第一扇区启动,进入图形桌面。它下面没有 DOS,里面也没有任何命令行——512 字节的引导扇区加载 40KB 的内核,内核检测机器拥有哪种显示适配器并将其切换到图形模式,借用显卡自带的 8x8 字符集,并显示一个菜单栏。
之后的一切就是你记忆中的 1984 年 Macintosh 界面:可通过标题栏拖动的窗口,带橡皮筋轮廓;可下拉并拖动浏览的菜单;关闭框和最小化框;每个软盘驱动器的图标;以及底部一个 Dock,每个正在运行的程序对应一个磁贴。程序从第二张软盘加载,作为一等应用程序运行,可同时运行多个。
整个系统可以装进 Intel 8086 或 8088——也就是原始 IBM PC 和 PC/XT 的处理器——的 256K 内存中。这是一个业余项目,已经足够完善可以使用,源码是 66,183 行 NASM,你可以用一个下午读完。
## 数据一览
以下每个数字都来自构建结果,而非记忆。
os8088 的已验证规格内核大小52,718 字节调度器、窗口管理器、VGA 驱动、鼠标驱动、声音层、文件管理器、加载器、Task Manager 和 Control Panel,全部在内。引导扇区512 字节LBA 到 CHS 转换以及带重试的 BIOS 软盘读取。如果汇编结果不是这个大小,构建就会失败。段占用59,031 字节代码加上内核通过 DS 访问的所有缓冲区。它必须放进 64K 段内——目前还有 6,505 字节余量。任务栈、磁盘缓冲区和每个已加载程序都位于段外,不计入此处。汇编行数66,183手写实模式 8086。没有 C、没有链接器、没有运行时库。显示器VGA、Hercules 或 CGA启动时探测。VGA 12h 模式为 640x480、16 色——四个 1 位平面,每扫描线 80 字节;Hercules 为 720x348,CGA 为 640x200,两者都是单色且分bank。三种卡上都直接绘制到帧缓冲。后备缓冲可选,默认关闭屏幕的离屏副本为 153,600 字节,超过机器内存的一半,因此 256K 机器总是直接绘制到显示器,就像 1984 年的 Macintosh 那样。在 500K 或更大内存时,Control Panel 可以开启它。任务12 个槽位,1,536 字节栈每个 Clock 和每个 Bounce 窗口都是独立的抢占任务。上下文切换频率18\.2065 HzPC 的标准定时器频率。每个时钟滴答,处理程序保存九个寄存器,交换栈指针,然后返回另一个程序。可加载程序每个一段从第二张软盘加载到常规内存中各自区域——512K 机器上大约 107K 的竞技场,640K 时为 233K——多个可同时驻留,关闭时各自释放内存。鼠标1200 波特,7N1COM1 上的 Microsoft 串口鼠标,每次报告三个字节,在中断处理程序中解码,同时绘制光标。目标硬件IBM PC/XT,8088 @ 4\.77MHz256K RAM、一个串口鼠标,以及 VGA、Hercules 或 CGA 卡中的任意一种。重绘慢到可以亲眼看到过程。指令集仅 8086,强制执行`cpu 8086`加上`\-w\+error`,因此任何更新的指令都会导致构建失败。一个 1978 年的指令集,由机制保证。
## 它能做什么
以下是它真正擅长的四件事。更多内容见截图页面(https://os8088.com/screenshots/)。
抢占式多任务
两个 Clock 窗口在计时,两个 Bounce 窗口内有方块在移动,全部同时动画。**不需要任何程序协作。**两个时钟持续走时,两个小球持续运动,同时你还在另一个程序里打字。定时器中断每秒触发 18\.2 次,保存正在运行的任务,交换栈指针,然后返回下一个任务——大约三十条指令。同时期的 Macintosh 根本无法做到这一点:System 1 一次只运行一个应用程序,而 1987 年 MultiFinder 出现时也只是协作式多任务。橡皮筋拖动
一个 Note Pad 窗口保持不动,一个单像素矩形轮廓被拖过桌面,然后窗口跳到该轮廓所在位置。**窗口直到你松手才移动。**一个单像素 XOR 轮廓跟随指针,释放时窗口吸附到该位置——因为在 4\.77MHz 下,每次鼠标报告都重绘整个窗口是不可能的,正如 1984 年那样。可加载软件
Disk 文件管理器显示 GAMES 文件夹——MINES\.O88、SOLITAIR\.O88 和 ARKANOID\.O88,每个都有自己的图标——上方打开着一个扫雷窗口,显示部分翻开的 9x9 网格,带有彩色数字和红旗。**程序来自第二张软盘。**双击 Disk 窗口中的文件,它就会加载到自己的段中并作为真正的应用程序运行。扫雷程序只有 1,510 字节,包括图标。多个软件包——或同一个软件的多个副本——可以同时驻留。Task Manager
Task Manager 窗口显示 CPU 百分比、扫过整个宽度的历史图、显示 39K / 639K 的内存条,以及运行中实例的列表,包含状态和 CPU 占用。**它监视自己。**一个实时 CPU 仪表,带有滚动历史图、内存读数,以及每个运行程序一行。没有自己任务的应用程序会在调度点对窗口回调计时并计入其名下,因此各行加起来仍然等于一个总量。
所有截图(https://os8088.com/screenshots/)
## 它能在真实硬件上运行
以上所有内容都是在模拟器中捕获的。2026 年 8 月,有人将磁盘映像写入真实软盘,并在三台时代机器上启动——一台 1981 年的 IBM 5150、一台 Toshiba T1100 Plus 和一台 286——并拍摄了结果照片。
IBM 5150,8088 @ 4\.77MHz
一台绿色磷光 IBM 5151 显示器显示 os8088 桌面,同时打开了 Note Pad、About 框、Clock、Task Manager、扫雷棋盘和 Disk 窗口。**在 1981 年的 IBM PC 上同时运行六个程序。**一台真实的 5150 驱动 Hercules 卡,720x348 分辨率,从 360K 软盘启动,机器自己的硬件清单被键入一个 Note Pad,而该 Note Pad 正是从同一张磁盘加载的。照片由 Elendilon(https://github.com/Elendilon)拍摄,他还报告说在真实硬件上的速度并不比模拟器慢。os8088 在真实硬件上(https://os8088.com/hardware/)
## 它所对话的历史
1985 年 2 月,Digital Research 为 IBM PC 发布了 GEM 1\.0:一个 Macintosh 风格的桌面,具有重叠窗口和图标,运行在标准 XT 硬件上。苹果提起诉讼。和解协议导致 1986 年的 GEM Desktop 2\.0 移除了 PC 上的重叠窗口和桌面图标——而 Atari ST 版本不受协议约束,保留了这些功能。
所以 PC 曾经短暂拥有过这个,然后就没有了。os8088 是在四十年后,用同样的机器级别,从零开始大致重建了这一理念——再加上 GEM 和同时期 Macintosh 都没有提供的抢占式多任务。
## 它不是什么
- 它*不是* DOS,也不运行 DOS 程序。它下面没有 DOS;它从引导扇区开始就完全拥有这台机器。
- 它没有内存保护。8086 本身就没有——每个程序与内核共享一个 64K 段,这正是上下文切换便宜到值得做的原因。
- 它没有文件句柄,也没有寻址。磁盘 API 一次移动整个文件——写入、读取、删除、重命名——这是在没有磁盘缓存和十二个抢占任务的情况下保持诚实的最大的子集。
- 它没有网络支持,也没有硬盘支持。
- 它是一个业余项目,不是产品。但它也足够完整,你可以坐下来使用它,这正是重点所在。
## 试试看
浏览器演示在一台模拟 PC 中启动真实的软盘映像——与你写入磁盘的字节完全相同。如果你更愿意自己运行,下载页面有适用于时代硬件和 86Box 的 360K 映像,以及适用于 QEMU 的 1\.44MB 映像。
相似文章
z386:基于原始微码构建的开源80386
本文详述了z386,一款基于原始Intel微码构建的开源FPGA 80386 CPU。它能引导DOS 6/7、运行保护模式程序,并玩经典游戏如Doom,既是一种教育性重构,也是一个可用的FPGA CPU。
CP/M-68K 模拟器
一位业余开发者创建了一个适用于Motorola 68000 CPU的模拟器,可运行CP/M-68K,支持自定义BIOS和RAM磁盘;源代码已在GitHub和GitLab上提供。
Scratch 中的 8086 模拟器
一位开发者在 Scratch 中构建了一个 8086 CPU 模拟器,展示了在可视化编程环境中的复古硬件模拟。
ao486:x86兼容的Verilog核心,实现486 SX的全部功能(2014)
ao486是一个开源的Verilog核心,实现了完整的486 SX处理器和SoC,能够在FPGA上启动Linux和Windows 95,并记录了2014年的基准测试和资源占用情况。
发掘我为Am29000自制计算机用机器码编写的1996年窗口操作系统
Oscar Toledo G. 讲述了他于1996-1997年间为自制Am29000计算机用机器码开发窗口操作系统的经历,以及近期重新发现并记录这一系统的历程。