像在90年代一样安装 A/UX 1.1

Hacker News Top 新闻

摘要

作者记录了在 Snow 模拟器上成功安装 Apple 的经典 UNIX 系统 A/UX 1.1 的过程,详细描述了硬件需求和设置步骤。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/05 19:33

# 像90年代那样安装 A/UX 1.1 来源:https://thomasw.dev/post/aux11/ 最近,我成功在我的复古 Macintosh 模拟器 Snow (https://snowemu.com/) 上让 A/UX 启动并稳定运行。A/UX 是苹果的 UNIX 版本,运行在基于 68k 的 Mac 系列上。它需要内存管理单元(MMU)来实现进程隔离——要么是在原始 68020 版 Macintosh II 上选配的 68851 PMMU,要么是 68030 和 68040 机型中集成的 MMU。此外还需要 FPU,因此它只能在高端机器上运行,例如 Macintosh II 系列及后来的 Quadra,而 LC 系列则无缘。 A/UX Penelope (https://www.aux-penelope.com/) 是一个不错的 A/UX 兼容性资源网站。你可以在 Infinite Mac (https://infinitemac.org/run?disk=A%2FUX+3.1.1&machine=Mac+IIx+(Snow)) 上,通过浏览器在 Snow 模拟的 Macintosh IIx 中体验 A/UX 3.1.1。 最近我有机会体验一套刚刚归档的 A/UX 1.1 安装介质,这要感谢 Dominic Sharp,我在 Tinker Different (https://tinkerdifferent.com/) 上与他交流过。Dominic 获得了这套介质并希望将其公开存档,但不确定磁盘的状态。据我所知,A/UX 1.1 的软件尚未公开存档;最接近的是 1.1.1 的预装镜像,但当时在 Snow 上还无法运行。Dominic 同意将这套介质分享给我,让我尝试安装,并在此过程中修复 Snow 的问题。这套介质包含 34 张软盘镜像,全部为 800K GCR 格式。它们以原始 flux 镜像形式提供,我首先使用 Applesauce (https://applesauce.com/) 进行了转换。 A/UX 安装盘 11 Applesauce 中的磁盘 首先,需要提供合适的模拟硬件。Snow 模拟了所需的机器、CPU、FPU 和 PMMU,但之前只模拟了 *Macintosh Display Card 8-24*,我不确定 A/UX 1.x 是否支持它,因为 A/UX 1.x 对视频硬件尤其挑剔。根据 A/UX Penelope 的说法,*Macintosh II 显卡(“Toby”)* 得到原生支持,因此我首先在 Snow 中实现了这张卡作为额外选项。 Toby 显卡选择 然后开始进行安装。A/UX 附带了非常 UNIX 风格的精美活页夹,你绝对需要它们,因为操作系统和安装过程并不直观。 A/UX 活页夹 幸运的是,这些资料已归档在 Bitsavers (https://bitsavers.org/pdf/apple/mac/a_ux/aux_1.1/) 上。手拿数字版活页夹,我开始了安装。 首先插入“系统设置与 README”磁盘。我们需要对磁盘进行分区,然后做一件反直觉的事情:在 Mac 分区上安装 System 6。这是因为有一个 Mac 应用程序可以启动 A/UX 的引导过程:SASH——A/UX 独立外壳。这个“预引导环境”允许启动 A/UX 内核,还可执行一些磁盘和恢复操作。 SASH 分区主要通过熟悉的 HD SC Setup 完成,相当直观;其内置的 HD SC Setup 包含一个针对 A/UX 的模板布局。 HD SC Setup 中的分区 然后,我们可以安装一个非常精简的 System 6,再将“SASH 与实用工具”磁盘的内容复制到新安装中。 安装 System 6 现在,终于到了真正进入 A/UX 的时刻。这需要通过从“软盘启动”磁盘引导来实现。这张磁盘会自动启动 SASH,加载 A/UX 内核,然后会要求插入“软盘根目录”磁盘。这开始安装的第一部分,它会格式化 A/UX 分区,并将引导系统复制进去。 安装第一部分 此时,我不得不修复一个 Snow 的 Bug——由于无效的 ADB Talk 2 实现,导致修饰键卡住。有趣的是,这是第一次出现这个问题;即使是 A/UX 3.x 之前也没有受到影响。 ```diff -- a/core/src/mac/adb/keyboard.rs +++ b/core/src/mac/adb/keyboard.rs @@ -140,29 +146,34 @@ impl AdbDevice for AdbKeyboard { response } 2 => AdbDeviceResponse::from_iter( - AdbKeyboardReg2::default() + // The key/modifier bits of register 2 are ACTIVE LOW + AdbKeyboardReg2(0xFFFF) // LED state bits (0..2) are host-controlled and active-high .with_led_numlock(self.keystate[SC_NUMLOCK as usize]) .with_led_capslock(self.capslock) .with_led_scrolllock(self.keystate[SC_SCROLLOCK as usize]) - .with_numlock(self.keystate[SC_NUMLOCK as usize]) - .with_capslock(self.capslock) - .with_scrolllock(self.keystate[SC_SCROLLOCK as usize]) - .with_cmd(self.keystate[SC_COMMAND as usize]) + .with_numlock(!self.keystate[SC_NUMLOCK as usize]) + .with_capslock(!self.capslock) + .with_scrolllock(!self.keystate[SC_SCROLLOCK as usize]) + .with_cmd(!self.keystate[SC_COMMAND as usize]) .with_control( - self.keystate[SC_LCTRL as usize] || self.keystate[SC_RCTRL as usize], + !(self.keystate[SC_LCTRL as usize] || self.keystate[SC_RCTRL as usize]), ) .with_option( - self.keystate[SC_LOPTION as usize] || self.keystate[SC_ROPTION as usize], + !(self.keystate[SC_LOPTION as usize] || self.keystate[SC_ROPTION as usize]), ) - .with_delete(self.keystate[SC_DELETE as usize]) + .with_shift( + !(self.keystate[SC_LSHIFT as usize] || self.keystate[SC_RSHIFT as usize]), + ) + .with_delete(!self.keystate[SC_DELETE as usize]) .to_be_bytes(), ), 3 => AdbDeviceResponse::from_iter( AdbReg3::default() .with_exceptional(true) .with_srq(true) - .with_address(Self::INITIAL_ADDRESS) - .with_handler_id(2) // Apple Extended Keyboard M0115 + .with_address(self.address) + .with_handler_id(self.handler_id) .to_be_bytes(), ), _ => { ``` 然后,我们重新从硬盘引导,启动 SASH 和 A/UX,真正进入安装的第二部分。这里我又遇到了一个 Snow 的 Bug:内核启动时等待 NCR 5390 的“DMA 结束”位而卡住。同样有趣的是,以前从未出现过问题,即使是较新的 A/UX 版本也没有。 ```diff -- a/core/src/mac/scsi/controller.rs +++ b/core/src/mac/scsi/controller.rs @@ -771,10 +771,13 @@ impl BusMember for ScsiController { NcrReadReg::BSR => Some( self.reg_bsr .with_dma_req(self.get_drq()) - .with_dma_end(!matches!( - self.busphase, - ScsiBusPhase::DataIn | ScsiBusPhase::DataOut, - )) + .with_dma_end( + self.reg_mr.dma_mode() + && !matches!( + self.busphase, + ScsiBusPhase::DataIn | ScsiBusPhase::DataOut, + ), + ) .with_phase_match(self.phase_match()) .0, ), ``` 第二部分会引导我们经过整整 26 张“安装盘”,其中包含实际的操作系统。可以想象,这花了很长时间…… 安装第二部分 如果你有磁带机,也可以选择从磁带安装,省去所有换软盘的麻烦。Dominic 的收藏中也有这段历史设备。如果这盘磁带将来被归档,我一定会给 Snow 添加一个模拟的 Apple 40SC 磁带机,这样就能从磁带进行安装了。 A/UX 1.1 安装磁带 经过 26 张磁盘后,再次重启,终于看到最终的 A/UX 安装,由硬盘上的 SASH 引导启动。 首次启动 现在,是时候玩点 UNIX 游戏来庆祝一下了。我很高兴 Snow 能顺利完成整个安装过程,A/UX 1.x 现在也运行流畅。 运行 'fish' 你可能想知道 A/UX 1.x 有没有图形界面。A/UX 3.x 的图形界面相当华丽,甚至可以通过 'mac32' 模拟层运行 Macintosh 应用程序(我曾在 A/UX 3.x 上运行过神秘岛),还支持 X11 应用程序。结果发现,如果你通过 `init 2` 进入多用户模式,可以运行一些图形应用程序,称为 Toolbox 应用程序(指 Macintosh ROM 中的 GUI“工具箱”),不过只有三个这样的应用程序可用…… 手册中的 Toolbox 应用程序 termhfx *再次感谢 Dominic 分享这些磁盘,它们最终将被公开归档。*

相似文章

将Swift引入Apple II

Lobsters Hottest

一位开发者创建了SwiftII,这是一个为Apple II打造的Swift风格迷你开发环境,包含REPL、文件浏览器和文本编辑器,为复古硬件带来了现代编程体验。

Plexus P/20 模拟器

Hacker News Top

一款全新的开源 WebAssembly 模拟器,重现 1980 年代 Plexus P/20 Unix 服务器,让用户可在浏览器中运行 SystemV Unix。

I need your clothes, your boots, and your motorcycle

Hacker News Top

作者详细介绍了使用Claude Code调试MAME的Power Macintosh和Apple Pippin仿真的过程,发现了PowerPC仿真和硬件支持中的错误,从而在启动进度上取得了重大进展。