1 Punkte von GN⁺ 2024-07-13 | 1 Kommentare | Auf WhatsApp teilen
  • Dieses Repository enthält ARC-Firmware- und Loader-Quellcode zum Booten von Windows NT auf Power Macintosh und richtet sich an PowerPC-Macintosh-Systeme der Gossamer/Grackle- und Mac99-Familien
  • Unterstützt werden Power Macintosh G3, einige iMac G3, PowerBook G3/G4, iBook G3/G4 sowie einige Power Macintosh G4; wegen des fehlenden USB-Treibers sind manche Systeme jedoch nur theoretisch unterstützt oder praktisch kaum nutzbar
  • Die ARC-Firmware enthält Treiber für Cuda/PMU, ADB-Tastatur, 32bpp-Framebuffer, internes Mac-I/O-IDE, einige ATA-6, MESH-SCSI und USB OHCI, aber es gibt keinen PCI-IDE-Treiber und keine LBA48-Unterstützung
  • Auf der Windows-NT-Seite stehen HAL für Gossamer und Mac99, Mac-I/O-IDE-/ATA-6-Treiber, HID-/Storage-Treiber mit ADB-Tastatur/Maus und RAM-Disk sowie ein 32bpp-Framebuffer-Miniport-Treiber bereit
  • Kompatibel ist NT 3.51 RTM oder neuer; frühe Betas von NT 3.51 benötigen einen Kernel-Patch, und NT 3.5 ist inkompatibel, da es nur PowerPC 601 unterstützt

Projektumfang und Zielhardware

  • Dieses Repository enthält ARC-Firmware und Loader-Quellcode für Power-Macintosh-Systeme
  • Die Gossamer-Architektur umfasst Systeme mit dem MPC106-"Grackle"-Speichercontroller/PCI-Host und dem Super-I/O-Chip "Heathrow" oder "Paddington"
    • 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!"
  • Die Mac99-Architektur umfasst den "Uni-North"-Speichercontroller/PCI-Host, den Super-I/O-Chip "KeyLargo" sowie abgeleitete Chipsätze wie "Intrepid"
    • PowerBook G3 Firewire "Pismo"
    • iBook G3
    • iBook G4
      • Beim mid-2005 iBook G4 PowerBook6,7 funktioniert die interne Maus noch nicht, da sie per USB angebunden ist
    • PowerBook G4
      • Ab early 2005 beim PowerBook G4 PowerBook6,8 bzw. bei Modellen nach PowerBook5,6 werden USB-Tastatur und -Maus verwendet, wodurch eine praktische Unterstützung derzeit schwierig ist
  • iMac G3 slot-loading, iMac G4 und Power Macintosh G4 AGP "Sawtooth" sowie spätere Modelle werden theoretisch unterstützt, sind aber wegen des fehlenden USB-Treibers derzeit praktisch kaum nutzbar
  • Je nach Hardware kann es Probleme geben; NT-HAL- und Treiberquellcode sind derzeit nicht enthalten

In der ARC-Firmware enthaltene Treiber

  • Die ARC-Firmware enthält Unterstützung für Cuda und PMU
    • Einschließlich Unterstützung für ADB-Tastaturen
  • Verwendet wird ein flacher 32bpp-Video-Framebuffer, den der Loader einrichtet
    • ATI- und nVidia-Hardware wird unterstützt
    • Einige nVidia-GPUs funktionieren derzeit nicht
  • Der Treiber für den internen Mac-I/O-IDE-Controller ist ein Fork von OpenBIOS
    • Es gibt keinen PCI-IDE-Controller-Treiber

      • Einige ATA-6-Controller späterer Mac99-Systeme, nämlich Intrepid und U2, werden unterstützt
      • LBA48 wird noch nicht unterstützt
      • Auf pre-Mac99-Systemen wird der MESH-SCSI-Controller unterstützt
      • Der USB-OHCI-Treiber ist ein Fork von OpenBIOS
      • Auf pre-Mac99-Systemen ist er defekt, funktioniert nicht, und der Initialisierungscode ist auskommentiert

Für Windows NT implementierte Treiber

  • Für den Gossamer-Chipsatz ist ein HAL implementiert
    • Framebuffer beim NT-Boot
    • Super-I/O-Interrupt-Controller
    • Grackle-PCI-Bus-Unterstützung
    • Cuda und PMU, einschließlich Low-Level-ADB
    • Serielle Schnittstelle nur für Kernel-Debugging
  • Auch für den Mac99-Chipsatz ist ein HAL implementiert
    • Framebuffer beim NT-Boot
    • MPIC-Interrupt-Controller
    • Unterstützung für die drei PCI-Busse von Uni-North
    • Einer davon ist AGP, unterstützt aber nur die PCI-Teilmenge
    • PMU, einschließlich Low-Level-ADB
    • Serielle Schnittstelle nur für Kernel-Debugging
  • Die Treiber für den internen Mac-I/O-IDE-Controller und ATA-6-Controller sind Forks von atapi.sys aus dem NT4 DDK
  • Ein allgemeiner HID-/Storage-Treiber soll künftig auch einen USB-Stack enthalten, aktuell sind jedoch nur ADB-Tastatur/-Maus und eine RAM-Disk implementiert, die während der Textinstallation als Treiber-Diskettenlaufwerk dient
  • Es gibt einen Miniport-Treiber für einen flachen 32bpp-Video-Framebuffer

Software-Kompatibilität

  • Kompatibel ist NT 3.51 RTM oder neuer
  • Bei NT 3.51 Beta Build 944 oder älter ist wegen eines Prozessordetektion-Bugs ein Kernel-Patch zum Ausführen nötig
  • NT 3.5 ist inkompatibel, da es nur PowerPC 601 unterstützt
  • Die zusätzlichen Suspend-/Hibernation-Funktionen von NT 3.51 PMZ wären theoretisch kompatibel, in der Praxis müssten dafür aber alle zusätzlich benötigten Treiber neu implementiert werden

Installationsablauf und Partitionsbeschränkungen

  • Die zum System passenden Binärdateien müssen von der Releases-Seite heruntergeladen werden
  • Bei Gossamer/Grackle-Systemen muss das Image auf optische Medien gebrannt werden
    • Old-World-Systeme wie PowerMac G3 beige und PowerBook G3 Wallstreet/PDQ verwenden nt_arcfw_grackle_ow.iso
    • New-World-Systeme wie iMac G3 tray-loading, PowerMac G3 blue&white, PowerBook G3 Lombard und PowerMac G4 Yikes verwenden nt_arcfw_grackle.iso
  • Auf Mac99-Systemen kann das Image auf ein USB-Laufwerk geschrieben werden
  • Im ARC-Firmware-Menü wird die Platte über Run firmware setupRepartition disk for NT installation für die NT-Installation partitioniert
  • Die NT-Partitionsgröße ist durch das CHS-Limit 16383x16x63 begrenzt und beträgt nach Abzug der 32MB-ARC-Systempartition und 1MB maximal 8030MB
  • Wenn die NT-Partition größer als 2GB ist, wird sie mit NTFS formatiert
    • Die NTFS-Formatversion in Releases vor dem 2024-11-11 ist nicht mit NT 3.51 kompatibel
    • Für die Installation von NT 3.51 muss daher eine Partition mit höchstens 2GB verwendet werden
  • Während der NT-Installation wird cd:\ppc\setupldr ausgeführt; bei mehreren optischen Laufwerken kann es cd01: oder cd02: sein
  • Im HAL-Auswahlschritt laden alle Einträge in der Liste den zum System passenden HAL
    • HAL für den Gossamer-Chipsatz: halgoss
    • HAL für den Mac99-Chipsatz: halunin
  • Im Schritt für Massenspeichertreiber müssen zwei Treiber geladen werden
    • Mac I/O IDE Controller
    • PowerMac General HID & Storage
  • Im Schritt für den Videoadapter wird je nach OS eine andere Option gewählt
    • NT 4: Open Firmware Frame Buffer
    • NT 3.51: Open Firmware Frame Buffer (NT 3.x)
  • In der Textinstallation muss die Tastatur auf XT, AT or Enhanced Keyboard (83-104 keys) geändert und das Zeigegerät auf No Mouse or Other Pointing Device gesetzt werden
  • Wenn eine NT-Partition über 2GB erstellt wurde, werden bei der Datenträgerprüfung Fehler gefunden und ein Neustart ist erforderlich; beim zweiten Versuch läuft die Prüfung erfolgreich durch

Bekannte Probleme und Hinweise zum Dual-Boot

  • Bei Gossamer/Gossamer-basierten Laptops möchte man eventuell den Akku entfernen
    • Auf Lombard kann bei einem Bugcheck nur per PMU-Reset oder vollständiger Stromtrennung ausgeschaltet werden
    • Auf Wallstreet/PDQ ist ein PMU-Reset über eine Tastenkombination möglich
  • Die derzeit implementierten Treiber stellen nur das Mindestmaß dar, das zum Ausführen und Nutzen von NT erforderlich ist
  • Während des NT-Boots wurde ein harter PMU-Shutdown beobachtet, der sich nur per PMU-Reset beheben ließ; die Ursache ist unbekannt
  • Falls es auf Old-World-Systemen Probleme beim Booten anderer Ziele als der ARC-Firmware gibt, überspringt Esc beim Start das ARC-Firmware-Gerät
  • Auf Mac99 funktioniert der USB-Treiber noch nicht, daher werden derzeit nur Laptop-Systeme unterstützt
  • Zusätzliche Mac-Partitionen erscheinen in der Partitionstabelle als HFS-Partitionen, werden aber nicht formatiert
    • Sie müssen mit dem Disk Utility von OS X 10.1 oder neuer formatiert werden
    • Gelöscht werden muss das Volume, nicht das Laufwerk
    • In Releases nach dem 2024-11-11 kann alternativ in OS 9 gebootet und über den beim Start angezeigten Dialog formatiert werden
  • Das OS-X-Installationsprogramm sowie das Booten von OS 8/OS 9 schlagen fehl, wenn sich auf der Platte ein für NT erforderlicher gültiger MBR befindet
    • In der ARC-Firmware muss Run firmware setupReboot to OSX install or OS8/OS9 verwendet werden
    • In Releases nach dem 2024-11-11 wird beim Schreiben auf die Platte der OS8/9-Treibercode gepatcht, sodass diese Option nicht nötig ist; wenn jedoch die On-Disk-Treiberpartition auf andere Weise aktualisiert wird, ist sie wieder erforderlich
    • Beim erneuten Booten in die ARC-Firmware wird der MBR geändert
    • Das Formatieren von HFS-Partitionen, die unter OS X 10.2 und 10.3 erstellt wurden, funktioniert nicht mit einem gültigen MBR

Build-Voraussetzungen und Größenbeschränkungen

  • Zum Bauen der ARC-Firmware wird devkitPPC benötigt
  • Eine für powerpcle kompilierte libgcc.a muss sich in arcgrackle/gccle befinden
    • Stand 2024-07-12 ist die Datei cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps in einem Void-Linux-Mirror zu finden
  • Die Umgebungsvariable DEVKITPPC sollte auf das devkitPPC-Verzeichnis gesetzt sein, normalerweise /opt/devkitpro/devkitPPC
  • Die Build-Reihenfolge ist: Big-Endian-libc, ARC-Firmware-Loader, Little-Endian-libc, ARC-Firmware
    • Für Mac99 werden die Ordner arcloader_unin, arcunin/baselibc, arcunin verwendet
  • stage1.elf und stage2.elf im Release-Image müssen ersetzt werden
  • Beim Neuerstellen eines Images aus einem Ordner-Dump muss ein hybrides HFS+ISO-Image erzeugt, der Ordner System als blessed markiert und der Dateityp von BootX auf tbxi gesetzt werden
  • stage1.elf muss 16KB oder kleiner, stage2.elf 224KB oder kleiner sein
  • Für den Old-World-Bootloader-Build ist die entsprechende README zu beachten, für die Erstellung von Old-World-ISO-Images OldWorldIsoBuilder

Verwendeter Code und Referenzprojekte

  • Für libc wird baselibc verwendet
  • ELF-Loader und Makefile wurden aus The Homebrew Channel übernommen und angepasst
  • Ein Teil des Low-Level-PowerPC-Codes, die Framebuffer-Konsolenimplementierung der ARC-Firmware und die Schriftarten wurden aus libogc übernommen und angepasst
  • Einige ARC-Firmware-Treiber, IDE und USB wurden aus OpenBIOS übernommen und angepasst
    • Der USB-Treiber von OpenBIOS stammt aus coreboot
  • Die interne ISO9660-Dateisystemimplementierung der ARC-Firmware basiert auf einer angepassten Version von lib9660
  • Die interne FAT-Dateisystemimplementierung der ARC-Firmware basiert auf einer angepassten Version von Petit FatFs

1 Kommentare

 
GN⁺ 2024-07-13
Meinungen auf Hacker News
  • Aus Nostalgie musste ich an diesen Artikel denken: https://lowendmac.com/2014/next-openstep-and-the-triumphant-...
    Amelio und die Führungsetage brauchten ein neues Betriebssystem, um mit der Wintel-Übermacht konkurrieren zu können, und die Optionen hatten sich im Wesentlichen auf Windows NT lizenzieren, Solaris lizenzieren, Copland in abgespeckter Form veröffentlichen, Be übernehmen und BeOS verwenden oder NeXT übernehmen und OpenStep verwenden reduziert.

    • Auch die APIs von NeXT wurden so portiert, dass sie auf Windows NT und Suns Solaris liefen, und das komplette NextStep-Betriebssystem lief zudem bare-metal auf mehreren CPU-Architekturen.
      Ursprünglich lief es nur auf NeXTs Motorola-68k-Workstations, wurde dann aber auf 32-Bit-Intel-x86-„IBM-kompatible“ PCs, Hewlett-Packards PA-RISC-Workstations und Sun Microsystems’ SPARC-Workstations portiert, heißt es hier: https://www.wikipedia.org/wiki/OpenStep
    • Ich würde wirklich gern wenigstens einmal die Zeitlinie sehen, in der Apple statt NeXT Be gekauft hat.
    • In der heutigen „klassischen“ Erzählung rund um Jobs’ Rückkehr scheint der technische Erfolg von Mac OS 8/9 ziemlich unterschätzt zu werden.
      Mac OS X war vor Version 10.1 im Jahr 2001 kaum angenehm im Alltag zu nutzen, trotzdem waren iMac, iBook und PowerBook G3 erfolgreich – das Betriebssystem muss also durchaus eine Rolle gespielt haben, kommt in solchen Geschichten aber fast gar nicht vor.
      Das ist sicher von Nostalgie gefärbt, weil ich von 1997 bis 2001 ein jugendlicher Mac-Enthusiast war, aber zwischen einem Performa aus der Mitte der 90er mit 7.5 und einem iMac aus den späten 90ern mit 9 hatte sich ziemlich viel getan.
      Auch wenn es kein zukunftsweisendes Betriebssystem war, fühlten sich 8.6/9 aus Endnutzer-Sicht im Vergleich zu Windows 95/98 relativ modern an; und selbst Mitte der 90er war 7.5 nicht wirklich schlechter als 95 – nur aus geschäftlicher Sicht sah die Zukunft düster aus.
    • Am Ende hat man die brauchbaren Teile aus Copland zusammengesammelt und als Mac OS 8 veröffentlicht.
    • Ich frage mich, wie ernsthaft die Option „Windows NT von Microsoft lizenzieren und eine Mac-ähnliche Oberfläche darüberlegen“ tatsächlich war.
      Die anderen Vorschläge wirken alle vernünftig, aber dieser sticht schon sehr heraus – und ich bin wirklich froh, dass es nie dazu gekommen ist.
  • Derselbe Entwickler hat letztes Jahr auch PPC NT 4 auf die Wii portiert: https://www.youtube.com/watch?v=d8BpUpr1h9U

  • Spannende Arbeit. Der ARC-Standard https://en.wikipedia.org/wiki/ARC_(specification) wurde genutzt, um DEC-Alpha-Windows-Maschinen, MIPS und andere Systeme zu booten.
    Die ursprüngliche EFI-Spezifikation von Intel aus dem Jahr 1998 nahm ARC als Vorbild und Inspiration, und auch die Intel Boot Initiative (IBI) sah größtenteils wie ARC aus.
    EFI, heute UEFI, ist grob gesagt eher ARC plus installierbare GUID-basierte Schnittstellen im Stil von MS COM https://en.wikipedia.org/wiki/Component_Object_Model – also Protokolle.
    Auf Seite 8 von https://www.intel.com/content/dam/www/public/us/en/documents... wird ein Teil dieser Mühen beschrieben.

  • Windows NT war wirklich faszinierend. Wenn ihr ein gutes Buch sucht, empfehle ich Showstopper.

    • Das Buch war hervorragend und gehört für mich in eine Reihe mit Masters of Doom oder The Soul of a New Machine.
  • Ich hatte gerade nach einem Grund gesucht, meinen bondi blue iMac G3 von 1998 mal wieder einzuschalten, und dann kommt so etwas daher – ein seltsames, raues und extrem spezifisches Projekt.

  • Kannst du den Kontext erklären? NT ist natürlich Closed Source und dürfte nie für den Mac entwickelt worden sein; ich frage mich, was das hier tatsächlich ist.
    Ich weiß auch nicht, wie groß die Chance ist, überhaupt Software dafür zu bekommen. Die meiste NT-Software war vermutlich nur für Intel kompiliert und ebenfalls Closed Source.

    • NT wurde mit Portabilität im Sinn entworfen, sodass selbst innerhalb derselben CPU die maschinenspezifischen Teile sauber getrennt sind.
      Wenn man also nur diesen Teil portiert, sollten vorhandene Binärdateien für diese Architektur laufen.
      Im Kern sind es drei Dinge. 1) ARC-Boot-Firmware: NT wurde auf Nicht-x86-Systemen wie i860 und MIPS entwickelt, und ARC war die Standard-Boot-Firmware. Auf x86 hat NTLDR das bis vor Vista emuliert. Dieses Projekt stellt offenbar eine ARC-kompatible Umgebung auf OpenFirmware bereit und macht dabei auch die interessante Arbeit, die Boot-Firmware so tun zu lassen, als gäbe es ein Speichergerät, damit in der frühen Installationsphase eine Treiber-„Diskette“ gelesen werden kann.
      2) HAL.DLL: Die Idee ist, dass der NTOSKRNL-Kern selbst hardwareunabhängig ist und es pro CPU-Architektur eine Binärdatei gibt. Der Kernel muss aber mit echten Timern oder Bussen kommunizieren, daher steckt dieser Interface-Code in HAL.DLL, und während der Installation wird die passende Variante kopiert. Eine Liste der x86-32-HALs früherer Windows-Versionen findet man unter https://www.geoffchappell.com/studies/windows/km/hal/history.... Heute ist die eine AMD64-Variante größtenteils in den Kernel gewandert. Hier bleibt der Hauptkernel unverändert, während halgoss die Mac-spezifische Behandlung übernimmt.
      3) Gerätetreiber: Sobald NT hochgefahren ist, braucht man echte Treiber.
      Die Spezifikation von 1) ist bekannt, also sollte man sie emulieren können, und 3) scheint machbar, wenn man das DDK hat oder aus anderen DDKs ableiten kann. 2) dürfte der Teil sein, der am meisten internes Wissen erfordert, und ich weiß nicht, ob der geleakte NT-Source bis auf diese Ebene hinuntergeht; ich habe es nicht gesehen.
      Die Kompatibilität beschränkt sich auf 32-Bit-PowerPC-Win32-Binärdateien, 16-Bit-x86-Win16-Binärdateien und x86-DOS-Programme, die in der DOS-Box von NT4 laufen. x86-Win32 geht nicht; nur Alpha hatte einen x86-Win32-Emulator.
    • NT4 wurde für die Architekturen PowerPC, MIPS und Alpha entwickelt. Ein erheblicher Teil des NT4-Source-Codes ist ebenfalls einmal geleakt: https://www.neowin.net/news/exclusive-windows-2000--windows-...
      Das heißt nicht, dass der Autor diesen Source verwendet hat, aber wenn er vorhanden ist, dürfte diese Arbeit deutlich einfacher geworden sein.
      Oder der Bootloader wurde im Clean-Room-Verfahren per Reverse Engineering nachgebaut, oder es gab genügend öffentliche Informationen, sodass man den internen Windows-Code gar nicht kennen musste.
      Die PPC-Codebasis zielte nicht direkt auf den Mac, sondern auf andere Systeme von IBM/Motorola, aber weil es eine „gemeinsame“ Plattform ist, müssen die Binärdateien aus der NT4-ISO selbst nicht verändert werden.
      Außerdem findet man den Source Code auf GitHub in mehreren Repositories.
    • Xbox 360 basierte auf PowerPC und führte Windows 2000 aus, also eine Variante des NT-Betriebssystems: https://en.wikipedia.org/wiki/Xbox_360_technical_specificati...
  • Ich mochte das alte Windows NT wirklich. Es war leichtgewichtig genug, um Ende der 90er auch auf schwacher Hardware zu laufen, und deutlich stabiler als Windows 95.

    • Wenn Microsoft das POSIX-Subsystem ernsthaft vorangetrieben hätte, hätte ich mich für UNIX-Aufgaben vermutlich gar nicht mit Linux beschäftigen müssen.
      Stattdessen habe ich beide per Dual Boot genutzt.
  • Sehr cool, und ich freue mich darauf, die Zeit wieder zu erleben, in der man auf alle DOS-Spiele verzichten musste.

    • Das ist kein x86-Emulator, der eine DOS-Box ausführen kann, sondern NT, das nativ auf PPC läuft.
      Daher gehen DOS-Spiele leider nicht.
    • Windows 2000 und XP unterstützten mit installiertem VDMSound viele MS-DOS-Spiele ziemlich gut.
  • Die Bootloader-Datei gefällt mir: https://github.com/Wack0/maciNTosh/blob/main/boot_files/Syst...
    Nebenbei: Die Open-Firmware-Syntax ist wirklich schwer zu lesen. Sie wurde nicht ohne Grund gehasst, und es war eine verpasste Chance.

  • Einen neuen NT HAL zu schreiben, ist wirklich eine beeindruckende Leistung. Hut ab.
    Die Dokumentation ist bestenfalls lückenhaft, und ich vermute, dass es auch viele unbekannte Bugs gibt, die in den vorhandenen HALs nur glücklicherweise nie zutage getreten sind.