Power Macintosh向け Windows NT
(github.com/Wack0)- このリポジトリには、Power Macintosh で Windows NT を起動するための ARC ファームウェアとローダーのソースコードが含まれており、Gossamer/Grackle 系および Mac99 系の PowerPC Macintosh を対象としている
- 対応対象は Power Macintosh G3、一部の iMac G3、PowerBook G3/G4、iBook G3/G4、一部の Power Macintosh G4 に分かれており、USB ドライバーが存在しないため、一部のシステムは理論上のみ対応、または実用が難しい
- ARC ファームウェアには Cuda/PMU、ADB キーボード、32bpp フレームバッファ、Mac I/O 内蔵 IDE、一部 ATA-6、MESH SCSI、USB OHCI ドライバーが含まれるが、PCI IDE ドライバーと LBA48 の対応はない
- Windows NT 側には、Gossamer 用および Mac99 用の HAL、Mac I/O IDE/ATA-6 ドライバー、ADB キーボード/マウスと RAM ディスクを実装した HID/ストレージドライバー、32bpp フレームバッファのミニポートドライバーが用意されている
- 互換対象は NT 3.51 RTM 以降であり、NT 3.51 の初期ベータではカーネルパッチが必要で、NT 3.5 は PowerPC 601 のみをサポートするため互換性がない
プロジェクトの範囲と対象ハードウェア
- このリポジトリには、Power Macintosh システム向けの ARC ファームウェア とローダーのソースコードが含まれている
- Gossamer アーキテクチャの対象は、MPC106 “Grackle” メモリコントローラー/PCI ホストと “Heathrow” または “Paddington” Super I/O チップを使用するシステムである
- Power Macintosh G3 beige
- Macintosh PowerBook G3 Series “Wallstreet”, “PDQ”
- iMac G3 tray-loading
- Power Macintosh G3 Blue & White “Yosemite”
- Macintosh PowerBook G3 Bronze Keyboard “Lombard”
- Power Macintosh G4 PCI “Yikes!”
- Mac99 アーキテクチャの対象には、“Uni-North” メモリコントローラー/PCI ホストと “KeyLargo” Super I/O チップ、さらに “Intrepid” のような派生チップセットが含まれる
- PowerBook G3 Firewire “Pismo”
- iBook G3
- iBook G4
- mid-2005 iBook G4
PowerBook6,7は内蔵マウスが USB のため、まだマウスは動作しない
- mid-2005 iBook G4
- PowerBook G4
- early 2005 以降の PowerBook G4
PowerBook6,8、PowerBook5,6以降のモデルは USB キーボードとマウスを使用するため、現時点では実用的なサポートが難しい
- early 2005 以降の PowerBook G4
- iMac G3 slot-loading、iMac G4、Power Macintosh G4 AGP “Sawtooth” 以降のモデルは、USB ドライバーが存在しないため理論上は対応可能だが、現時点では実用的なサポートは難しい
- ハードウェアによって問題が発生する可能性があり、NT HAL とドライバーのソースは現在含まれていない
ARC ファームウェアに含まれるドライバー
- ARC ファームウェアには Cuda と PMU のサポートが含まれる
- ADB キーボード対応を含む
- ローダーが設定するフラットな 32bpp ビデオフレームバッファ を使用する
- ATI と nVidia のハードウェアをサポートする
- 一部の nVidia GPU は現在動作しない
- Mac I/O 内蔵 IDE コントローラードライバーは OpenBIOS からフォークされている
-
PCI IDE コントローラードライバーはない
- 一部の後期 Mac99 システムの ATA-6 コントローラー、すなわち Intrepid と U2 はサポートされる
- LBA48 はまだサポートされていない
- pre-Mac99 システムでは MESH SCSI コントローラーをサポートする
- USB OHCI ドライバーは OpenBIOS からフォークされている
- pre-Mac99 システムでは故障状態で動作せず、初期化コードもコメントアウトされている
-
Windows NT 向けに実装されたドライバー
- Gossamer チップセット向け HAL が実装されている
- NT 起動時のフレームバッファ
- Super I/O 割り込みコントローラー
- Grackle PCI バス対応
- Cuda と PMU、および低レベル ADB を含む
- カーネルデバッグ専用シリアルポート
- Mac99 チップセット向け HAL も実装されている
- NT 起動時のフレームバッファ
- MPIC 割り込みコントローラー
- Uni-North の 3 本の PCI バスに対応
- このうち 1 本は AGP だが、PCI のサブセットのみをサポートする
- PMU、低レベル ADB を含む
- カーネルデバッグ専用シリアルポート
- Mac I/O 内蔵 IDE コントローラーおよび ATA-6 コントローラードライバーは、NT4 DDK の
atapi.sysからフォークされている - 汎用 HID/ストレージドライバーは、将来的には USB スタックも含める意図があるが、現時点では ADB キーボード/マウスと、テキストセットアップ時にドライバー導入用フロッピードライブとして使う RAM ディスクのみを実装している
- フラットな 32bpp ビデオフレームバッファ のミニポートドライバーがある
ソフトウェア互換性
- 互換対象は NT 3.51 RTM 以降である
- NT 3.51 ベータ build 944 以下のバージョンは、プロセッサ検出バグのため実行にはカーネルパッチが必要である
- NT 3.5 は PowerPC 601 のみをサポートするため互換性がない
- NT 3.51 PMZ の追加サスペンド/ハイバネーション機能は理論上は互換性があるが、実際にはその機能に必要な追加ドライバーをすべて再実装する必要がある
インストール手順とパーティション制約
- システムに合ったバイナリは releases ページから取得する必要がある
- Gossamer/Grackle システムではイメージを光学メディアに書き込む必要がある
- Old World システムである PowerMac G3 beige、PowerBook G3 Wallstreet/PDQ では
nt_arcfw_grackle_ow.isoを使用する - New World システムである iMac G3 tray-loading、PowerMac G3 blue&white、PowerBook G3 Lombard、PowerMac G4 Yikes では
nt_arcfw_grackle.isoを使用する
- Old World システムである PowerMac G3 beige、PowerBook G3 Wallstreet/PDQ では
- Mac99 システムではイメージを USB ドライブ に書き込める
- ARC ファームウェアメニューで
Run firmware setup→Repartition disk for NT installationに進み、NT インストール用ディスクをパーティション分割する - NT パーティションのサイズは、16383x16x63 CHS 制限から 32MB の ARC システムパーティションと 1MB を差し引いた最大 8030MB である
- NT パーティションサイズが 2GB を超える場合は NTFS でフォーマットされる
- 2024-11-11 以前のリリースの NTFS フォーマットバージョンは NT 3.51 と互換性がない
- NT 3.51 をインストールするには 2GB 以下のパーティションを使用する必要がある
- NT のインストール中は
cd:\ppc\setupldrを実行し、光学ドライブが複数ある場合はcd01:またはcd02:になることがある - HAL 選択段階では、一覧の項目はすべてシステムに合った HAL を読み込む
- Gossamer チップセット HAL は
halgoss - Mac99 チップセット HAL は
halunin
- Gossamer チップセット HAL は
- 大容量ストレージドライバーの段階では、2 つのドライバーを読み込む必要がある
Mac I/O IDE ControllerPowerMac General HID & Storage
- ビデオアダプター段階では、OS に応じて異なるオプションを選ぶ
- NT 4 では
Open Firmware Frame Buffer - NT 3.51 では
Open Firmware Frame Buffer (NT 3.x)
- NT 4 では
- テキストセットアップでは、キーボードを
XT, AT or Enhanced Keyboard (83-104 keys)に変更し、ポインティングデバイスをNo Mouse or Other Pointing Deviceに変更する必要がある - 2GB 超の NT パーティションを作成した場合、ディスクチェック処理でエラーが見つかって再起動が必要になるが、2 回目の試行ではディスクチェックが成功する
既知の問題とデュアルブート時の注意点
- Gossamer/Gossamer 系ノートブックでは、バッテリーを取り外したくなる場合がある
- Lombard では、バグチェック時に電源を切る方法が PMU リセットまたは完全な電源断しかない
- Wallstreet/PDQ の PMU リセットはキーボード操作で可能である
- 現在実装されているドライバーは、NT を実行・使用するために必要な 最小限 である
- NT 起動中に PMU のハードシャットダウンが観測されており、PMU リセットでしか解消せず、原因は不明である
- Old World システムで ARC ファームウェア以外の対象を起動する際に問題がある場合は、起動時に
Escを押すと ARC ファームウェアデバイスをスキップする - Mac99 では USB ドライバーがまだ動作しないため、ノートブックシステムのみサポートされる
- 追加の Mac パーティションを作成すると、パーティションテーブル上では HFS パーティションとして表示されるが、フォーマットはされない
- OS X 10.1 以降の Disk Utility でパーティションをフォーマットする必要がある
- ドライブではなく ボリューム を消去する必要がある
- 2024-11-11 以降のリリースでは、OS 9 で起動して起動時に表示されるダイアログからフォーマットすることもできる
- OS X インストーラーおよび OS 8/OS 9 の起動では、NT に必要な有効な MBR がディスク上に存在するとエラーになる
- ARC ファームウェアで
Run firmware setup→Reboot to OSX install or OS8/OS9オプションを使う必要がある - 2024-11-11 以降のリリースでは、ディスク書き込み時に OS8/9 ドライバーコードをパッチするためこのオプションは不要だが、オンディスクのドライバーパーティションが別の方法で更新されると再び必要になる
- ARC ファームウェアで再度起動すると MBR が修正される
- OS X 10.2 および 10.3 で作成した HFS パーティションフォーマットは、有効な MBR があると動作しない
- ARC ファームウェアで
ビルド要件とサイズ制限
- ARC ファームウェアのビルドには devkitPPC が必要である
powerpcle向けにコンパイルされたlibgcc.aがarcgrackle/gccleに存在する必要がある- 2024-07-12 時点では、Void Linux ミラーで
cross-powerpcle-linux-gnu-0.34_1.x86_64.xbpsファイルを見つけられる
- 2024-07-12 時点では、Void Linux ミラーで
DEVKITPPC環境変数は、通常/opt/devkitpro/devkitPPCである devkitPPC ディレクトリに設定する必要がある- ビルド順序は、big endian libc、ARC ファームウェアローダー、little endian libc、ARC ファームウェアの順である
- Mac99 では
arcloader_unin、arcunin/baselibc、arcuninフォルダーを使用する
- Mac99 では
- リリースイメージ内の
stage1.elfとstage2.elfを置き換える必要がある - フォルダーダンプからイメージを再作成する際は、hybrid HFS+ISO イメージを作成し、
Systemフォルダーを blessed 状態にし、BootXファイルタイプをtbxiに設定する必要がある stage1.elfは 16KB 以下、stage2.elfは 224KB 以下 でなければならない- Old World ブートローダーのビルドは該当 readme を、Old World ISO イメージの作成は OldWorldIsoBuilder を参照する必要がある
使用されたコードと参考プロジェクト
- libc には baselibc を使用している
- ELF ローダーと makefile は The Homebrew Channel から取得して修正している
- 一部の低レベル PowerPC コード、ARC ファームウェアのフレームバッファコンソール実装、フォントは libogc から取得して修正している
- 一部の ARC ファームウェアドライバー、IDE と USB は OpenBIOS から取得して修正している
- OpenBIOS の USB ドライバーは coreboot から取得したものである
- ARC ファームウェア内蔵の ISO9660 ファイルシステム実装には lib9660 を修正して使用している
- ARC ファームウェア内蔵の FAT ファイルシステム実装には Petit FatFs を修正して使用している
1件のコメント
Hacker Newsのコメント
ノスタルジーのせいでこの記事を思い出した: https://lowendmac.com/2014/next-openstep-and-the-triumphant-...
Amelioと上級幹部たちは、Wintelの巨大勢力と競争するには新しいオペレーティングシステムが必要で、選択肢は Windows NTのライセンス、Solarisのライセンス、Coplandの縮小版リリース、Beを買収してBeOSを使う案、NeXTを買収してOpenStepを使う案あたりに絞られていた
もともとはNeXTのMotorola 68kワークステーションでしか動かなかったが、32ビットIntel x86の「IBM互換」PC、Hewlett-PackardのPA-RISCワークステーション、Sun MicrosystemsのSPARCワークステーションへ移植されたという説明がある: https://www.wikipedia.org/wiki/OpenStep
Mac OS Xは2001年の10.1になるまでは実用が容易ではなかったのに、iMac、iBook、PowerBook G3は成功したのだから、オペレーティングシステムも間違いなく役割を果たしていたはずだが、こうした話ではほとんど抜け落ちている
1997〜2001年に10代の熱心なMacユーザーだった記憶なのでノスタルジーも混じっているだろうが、7.5を使っていた90年代半ばのPerformaから、9を使っていた90年代末のiMacへ移るあいだにかなり多くの変化があった
未来的なオペレーティングシステムではなかったとしても、エンドユーザーの立場から見ると 8.6/9 はWindows 95/98より相対的にモダンに感じられたし、90年代半ばでもビジネス面での将来が暗かっただけで、7.5が95より特に劣っていたわけではなかった
ほかの提案はどれも合理的なのに、これだけやけに浮いて見えるし、実際に起きなくて本当によかった
同じ開発者が昨年、PPC NT 4 をWiiにも移植していた: https://www.youtube.com/watch?v=d8BpUpr1h9U
興味深い作業だ。ARC標準 https://en.wikipedia.org/wiki/ARC_(specification) はDEC AlphaのWindowsマシンやMIPSなどを起動するのに使われていた
1998年にIntelで作られた元のEFI仕様はARCをモデルにし、そこから着想を得ており、Intel Boot Initiative(IBI)も大部分はARCのように見えた
EFI、現在のUEFIは、おおむねARCにMS COM https://en.wikipedia.org/wiki/Component_Object_Model 風の、インストール可能なGUIDベースのインターフェース、つまりプロトコルを加えた形に近い
https://www.intel.com/content/dam/www/public/us/en/documents... の8ページに、その苦労話の一部が出ている
ARCならNTを起動できたが、SRMではそれができなかった: https://en.wikipedia.org/wiki/SRM_firmware
Windows NT は本当に興味深かった。良い本を探しているならShowstopperを勧める
ちょうど1998年製の bondi blue iMac G3 を起動する理由を探していたところだったのに、こんなものが出てくるとは。奇妙で荒削りで、ものすごく具体的なプロジェクトだ
背景を説明してもらえる? NT は当然クローズドソースだし、Mac 向けに開発されたこともないはずなので、これが実際に何なのか気になる。
ソフトウェアを入手できる可能性がどの程度あるのかも分からない。NT 向けソフトウェアの大半は Intel 専用にコンパイルされていて、ソースも非公開だっただろうし。
だからその部分だけ移植すれば、そのアーキテクチャ向けの既存バイナリは動作するはず。
要点は 3 つある。1) ARC ブートファームウェア: NT は i860 や MIPS のような非 x86 システムで開発され、ARC が標準ブートファームウェアだった。x86 では Vista 以前まで NTLDR がこれをエミュレートしていた。このプロジェクトでは OpenFirmware 上に ARC 互換環境を提供しつつ、インストール初期段階でドライバ「フロッピー」を読めるように、ブートファームウェアがストレージデバイスを持っているふりをさせるという面白いこともしているようだ。
2) HAL.DLL: NTOSKRNL 本体はハードウェア非依存なので、CPU アーキテクチャごとにバイナリが 1 つあるという発想。だがカーネルは実際のタイマーやバスと通信する必要があるため、そのインターフェースコードは HAL.DLL にあり、インストール時に適切なものがコピーされる。昔の Windows の x86-32 HAL 一覧は https://www.geoffchappell.com/studies/windows/km/hal/history... で見られる。現在は AMD64 向けの 1 つが大半カーネル内に取り込まれた形になっている。ここではメインカーネルはそのままで、halgoss が Mac 固有の処理を担う。
3) デバイスドライバ: NT が起動した後は実際のドライバが必要になる。
互換性があるのは 32 ビット PowerPC の Win32 バイナリ、16 ビット x86 の Win16 バイナリ、それに NT4 の DOS ボックスで動く x86 DOS プログラム程度。x86 Win32 は動かず、x86 Win32 エミュレータがあったのは Alpha だけだった。
作者がそのソースを使ったという意味ではないが、そうしたソースがあればこの作業はずっと容易になっただろう。
あるいはブートローダをクリーンルーム方式でリバースエンジニアリングしたのかもしれないし、Windows の内部コードを知らなくても済むほど公開情報が十分にあった可能性もある。
PPC コードベースは Mac を直接対象にしたものではなく、IBM/Motorola の別のシステム向けだったが、「共通」プラットフォームなので NT4 ISO 内のバイナリ自体を修正する必要はない。
それに GitHub ではソースコードを複数のリポジトリで見つけられる。
昔の Windows NT は本当に大好きだった。90 年代末の低スペックなハードウェアでも動くほど軽く、Windows 95 よりずっと安定していた。
その代わり、両方をデュアルブートして使っていた。
とてもクールだし、DOS ゲームを全部あきらめていた時代をまた体験することになると思うと楽しみだ。
だから残念ながら DOS ゲームは動かない。
ブートローダファイルが気に入った: https://github.com/Wack0/maciNTosh/blob/main/boot_files/Syst...
付け加えると、Open Firmware の文法 はあまりにも読みにくい。嫌われたのも無理はないし、失われた機会だった。
新しい NT HAL を書いたのは本当に印象的な達成だ。敬意を表したい。
文書はせいぜい断片的なレベルだろうし、既存の HAL でも、たまたま表面化していないだけの未知のバグが多そうだ。