
2026/07/06 1:07
90年代の風にしてA/UX 1.1 をインストールする
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
現行のサマリーは機能するもののやや密度が高く、キーポイントリストに含まれる一部の詳細な技術的詳細(特にハードウェア制約、正確なメディアタイプ、ディスプレイカードのサポート)に触れていない。これを改善し、より明確にし、リストからすべての独自の点をカバーすることを確認する必要がある。
改善されたサマリー: 著者は、ドミニク・シャープによって新たにアーカイブされたメディアを使用して Snow エミュレータ上で A/UX 1.x(Apple の高エンド 68k ベース Mac 向けの UNIX バージョン)を正常に起動し、実行することに成功した(MMU/PMMU および FPU を必要とする)。インストールセットは、Tinker Different の討論から入手された 34 つの Floppy イメージで構成されている。起動可能なシステムを実現するために、著者は「Toby」ディスプレイカードに対するネイティブサポートを実装し、特定のインストールパスに従った:HD SC Setup によるパーティション割付け、最初に System 6 をインストールして SASH を実行し、それから 26 つのインストールディスクから OS を読み込む。このプロセスでは、2 つの重大なバグを修正する必要があった。1 つ目は
core/src/mac/adb/keyboard.rs にあり、無効な ADB Talk 2 ロジックによる Modifier キーのフリーズ問題に対応し、もう 1 つは core/src/mac/scsi/controller.rs であり、カーネル起動時の NCR 5390 DMA フリーズ問題を解決した。テープドライブもドミニクに関連する歴史を持つ代替インストール方法を提供するが、現在の焦点はエミュレートされた 68k ベース Mac での円滑な動作の確認にある。このブレークスルーは Snow における「ピーク UNIX ゲーミング」の妥当性を検証し、A/UX 3.x が X11 および Myst などの現代ゲームをサポートするのに対し、限られたグラフィカルアプリケーション(Toolbox アプリ 3 つのみ)をサポートする初期のマルチユーザー環境への機能的な窓を提供する。本文
A/UX 1.x の Snow エミュレーション環境で安定稼動に成功
最近、古き良しのマッキントッシュエミュレータ**「Snow」上でA/UX 1.x のブートと安定稼動**に成功しました。以下は、その過程における環境構築や解決した問題のまとめです。
A/UX と Snow エミュレータ
- A/UXとは、Apple が 68k プロセッサ搭載の Macintosh 向けに提供した UNIX ベースの環境です。
- 動作させるには以下のハードウェア構成が必須でした。
- メモリー管理ユニット(MMU):プロセス間の隔離のため必要。
- 元 II シリーズ:オプションの68851 PMMUまたは統合型 MMU。
- Quadra など:標準搭載の統合型 MMU。
- 浮動小数点演算ユニット(FPU)。
- メモリー管理ユニット(MMU):プロセス間の隔離のため必要。
- 対応機種:
- ✅ Macintosh II シリーズ
- ✅ Quadra シリーズ
- ❌ LC シリーズ(非対応)
情報源と入手経路
- 情報源: A/UX Penelopeは互性情報の有益なリソースです。
- 入手経路:
- 交流していた Dominic Sharp 氏より、公開アーカイブ用のセットを共有いただきました。
- このセットは「disc status」に確信が持てないため、非公開で共有されていました。
- 現状の確認:
- A/UX 1.1 のソフトウェア自体の公開アーカイブ例は存在せず、Snow でも動作していなかった(不具合のある)1.1.1 のみでした。
初期環境の整備
- ディスク構成:
- 34 枚分の800KB GCR フォーマットフロッピーディスクイメージ。
を使用し、RAW ドアイメージに変換しました。Applesauce
- ハードウェア要件:
- Snow は CPU、FPU、PMMU を全てエミュレートしています。
- A/UX 1.x はビデオハードウェアに非常に厳しく、サポート状況が不明確でした。
- 実装対応:
- A/UX Penelope に記載の「Toby」(マッキントッシュ II のビデオカード)をネイティブサポートとして追加しました。
インストール手順(第 1 ページ:ディスクからの起動)
パーティション分割
- ツール:
を使用。HD SC Setup - テンプレートレイアウトが含まれており、直感的に進められます。
システム 6 と SASH の導入
- 「システム設定と README」ディスクから開始。
- 逆説的ですが、まず Mac パーティションに**Macintosh System 6(最小限)**をインストール。
- 理由:A/UX ブート用のアプリケーション「SASH(スタンドアロンシェル)」が必須のため。
- SASH は A/UX カーネル起動、ディスク操作などを可能にします。
- 「SASH and utilities」ディスクの内容を新規先へコピー。
A/UX の初期設定
- **「Floppy Launch」**ディスクからブートし自動的に対応開始:
- SASH を起動。
- A/UX カーネルを起動。
- 「Floppy Root」ディスクを読み出し。
- フォーマットとコピー:
- A/UX パーティションのフォーマット。
- ブートローダとなるシステムのコピー。
問題解決:ADB キーボード実装
- 現象: 無効な
実装により、変修鍵(Modifier keys)が固定された問題が発生。ADB Talk 2 - 対応策: キー状態のロジックを反転させるコード修正を行いました。
--- 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() + // Register 2 のキー・変修ビットは ACTIVE LOW (低電位で有効) です。 + AdbKeyboardReg2(0xFFFF) + // LED ステータスビット(0..2)はホスト制御であり、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]) + // NUM, CAPS, SCROLL, CMD など、状態は反転して出力します。 + .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]) + // Shift キーの状態も同様に反転処理します。 + .with_shift( + !(self.keystate[SC_LSHIFT as usize] || self.keystate[SC_RSHIFT as usize]), + ) + // Delete キーも同様です。 + .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(), ),
インストール手順(第 2 ページ:ハードディスクからの起動)
SCSI コントローラーの修正
- 現象: カーネル起動時に NCR 5390 コントローラーの 'DMA end'ビット待機でフリーズ。
- 対応策: DMA モードも考慮してフラグを正しく計算するコードに修正。
--- a/core/src/mac/scsi/controller.rs +++ b/core/src/mac/scsi/controller.rs @@ -771,10 +771,13 @@ impl BusMember<Address> for ScsiController { NcrReadReg::BSR => Some( self.reg_bsr .with_dma_req(self.get_drq()) - .with_dma_end(!matches!( - self.busphase, - ScsiBusPhase::DataIn | ScsiBusPhase::DataOut, - )) + // DMA 終了フラグを正しく計算するために、現在のモードも考慮します。 + .with_dma_end( + self.reg_mr.dma_mode() + && !matches!( + self.busphase, + ScsiBusPhase::DataIn | ScsiBusPhase::DataOut, + ), + ) .with_phase_match(self.phase_match()) .0, ),
ディスクのインストール
- 「Installation Disks」 26 枚を処理(時間がかかります)。
- 代替手段:
- テープドライブを持つ場合はテープからのインストールが可能(フロッピー交換不要)。
- Dominic のコレクションにテープが含まれています。
- 将来的には Snow にApple 40SC テープドライブを追加し、テープからのインストールも実現可能です。
インストール完了と検証
- 26 枚目のディスク読み終えたら再起動。
- ハードディスク上の SASH から最終的な A/UX インストールが完了。
- UNIX ゲームで成果を祝い、滑らかな動作を確認しました。
グラフィカルインターフェースについて
A/UX 1.x はグラフィカルな側面を持っていますか?
- X11 アプリケーション: サポートしています(Myst などを以前実行した経験あり)。
- Toolbox GUI:
でマルチユーザモードへ移行すると動作可能。init 2- 利用可能なアプリケーションは3 つのみです。
おわりに
- Dominic 氏にディスクを共有いただいたことに心から感謝します。
- これらのディスクは、将来的に公開アーカイブされる予定です。