HN 日本語サマリー

← 一覧へ戻る
プログラミング

A/UX 1.1を90年代のようにインストールする

Installing A/UX 1.1 like it's the 90s (thomasw.dev)

51 pointsby zdw17 コメント

要約

筆者は、ヴィンテージMacintoshエミュレーター「Snow」上でAppleのUNIXであるA/UX 1.1のインストールに成功しました。このプロセスでは、初期のMacintoshハードウェアの要件を満たすためにエミュレーターに機能を追加し、34枚のフロッピーディスクイメージからOSをインストールしました。インストール中に発生したADBキーボードとSCSIコントローラーに関する2つのバグを修正し、最終的にA/UX 1.1を安定稼働させることができました。

全文翻訳

最近、ヴィンテージMacintoshエミュレーターであるSnow上で、A/UXが起動し安定して動作することに成功しました。A/UXは、68kベースのMacシリーズで動作したAppleのUNIXバージョンでした。プロセス分離を実現するためにメモリ管理ユニット(MMU)が必要で、これはオリジナルの68020ベースのMacintosh IIのオプションである68851 PMMU、または68030および68040ベースのマシンに統合されたMMUのいずれかでした。また、FPUも必要だったため、Macintosh IIシリーズや後のQuadraのようなハイエンドマシンでしか動作せず、LCは対象外でした。A/UX Penelopeは、A/UXの互換性情報に関する良いリソースです。Infinite Macでは、ブラウザ上でSnowがエミュレートするMacintosh IIx上でA/UX 3.1.1を試すことができます。 最近、Tinker Differentで話していたDominic Sharp氏の協力により、新しくアーカイブされたA/UX 1.1のインストールメディアセットを入手し、触れる機会がありました。Dominic氏はこのセットを入手し、公にアーカイブしたいと考えていましたが、ディスクの状態については確信が持てなかったとのことです。A/UX 1.1のソフトウェアが公にアーカイブされている例は私の知る限りありません。最も近いのは1.1.1のプリインストールイメージですが、当時はSnow上でまだ動作しませんでした。Dominic氏は、私が試してSnowを修正できるように、セットを共有することに同意してくれました。このセットは、すべて800K GCRの34枚のフロッピーイメージで構成されています。これらは生のフラックスイメージとして提供され、まず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にこのカードを追加オプションとして実装しました。そして、インストールの作業に取り掛かる時間となりました。A/UXには、非常にUNIXらしい素敵なバインダーが付属しており、OSとインストールプロセスがそれほど簡単ではないため、間違いなく必要でした。幸い、これはBitsaversにアーカイブされています。デジタルバインダーを手に、インストールを進めました。 インストールを開始するために、「System setup and README」ディスクから始めます。ディスクをパーティション分割し、次に直感に反することをしなければなりません:MacパーティションにSystem 6をインストールします。これは、A/UXの起動プロセスを開始するMacアプリケーション、SASH(A/UXスタンドアロンシェル)があるためです。この「プリブート環境」は、A/UXカーネルの起動や、いくつかのディスクおよびリカバリ操作を可能にします。パーティショニングは、おなじみのHD SC Setupを通じて行われ、かなり簡単です。付属のHD SC Setupには、A/UX用のテンプレートレイアウトが含まれています。そして、かなり素のSystem 6をインストールし、その後、「SASH and utilities」ディスクの内容を新しいインストールにコピーします。これで、ついにA/UXに入り込む時間です。これは、「Floppy Launch」ディスクから起動することで行われます。このディスクはSASHを自動起動し、A/UXカーネルを起動し、次に「Floppy Root」ディスクを要求します。これがインストールのパート1を開始し、A/UXパーティションをフォーマットしてブートストラップシステムをコピーします。この時点で、無効なADB Talk 2の実装によりモディファイヤキーがスタックしてしまうSnowのバグを修正する必要がありました。興味深いことに、これは初めての問題です。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を実際に起動し、インストールのパート2を行います。ここで別のSnowのバグに遭遇しました。NCR 5390の「DMA end」ビットを待ってカーネル起動がフリーズしました。これもまた、以前は問題ありませんでした。新しいA/UXバージョンでもです。 ```diff --- 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, - )) +.with_dma_end( + self.reg_mr.dma_mode() + && !matches( + self.busphase, + ScsiBusPhase::DataIn | ScsiBusPhase::DataOut, + ), + ) .with_phase_match(self.phase_match()) .0, ), ``` パート2では、実際のOSが含まれる26枚もの「Installation disks」を処理します。想像できるように、これにはかなりの時間がかかりました。テープドライブがあれば、代わりにテープからのインストールを選択でき、フロッピーの入れ替えの手間を省くことができました。Dominic氏もこの歴史的な遺物をコレクションに持っています。このテープがいつかアーカイブされれば、SnowにエミュレートされたApple 40SCテープドライブを追加して、テープからのインストールを可能にするつもりです。26枚のディスクの後、再びリブートすると、ハードドライブ上のSASHによって起動される最終的なA/UXインストールがようやく表示されます。その後は、お祝いにピークのUNIXゲームを楽しむ時間となりました。Snowがこのインストールの全行程を乗り越え、A/UX 1.xがスムーズに動作するようになったことを嬉しく思います。A/UX 1.xにはグラフィカルインターフェースがあるのか疑問に思うかもしれません。A/UX 3.xのインターフェースはかなり洗練されており、「mac32」エミュレーションレイヤーを通じてMacintoshアプリケーションを実行することさえできます(A/UX 3.xでMystを実行しました)し、X11アプリケーションもサポートしています。マルチユーザーモード(init 2経由)に入ると、Toolboxアプリケーションと呼ばれるグラフィカルアプリケーションを実行できることがわかりました(これはMacintosh ROMのGUI「Toolbox」を指しています)が、利用可能なアプリケーションは3つだけです。ディスクを共有してくれたDominic氏に改めて感謝します。これらのディスクは最終的に公開アーカイブされる予定です。