1 points par GN⁺ 2024-07-13 | 1 commentaires | Partager sur WhatsApp
  • Ce dépôt contient le firmware ARC et le code source du chargeur permettant de démarrer Windows NT sur Power Macintosh, et cible les Macintosh PowerPC des familles Gossamer/Grackle et Mac99
  • Les machines prises en charge se répartissent entre Power Macintosh G3, certains iMac G3, PowerBook G3/G4, iBook G3/G4 et certains Power Macintosh G4 ; en raison de l’absence de pilote USB, certains systèmes ne sont pris en charge qu’en théorie ou sont difficiles à utiliser en pratique
  • Le firmware ARC inclut des pilotes Cuda/PMU, clavier ADB, framebuffer 32 bpp, IDE interne Mac I/O, certains ATA-6, MESH SCSI et USB OHCI, mais ne prend pas en charge les pilotes PCI IDE ni LBA48
  • Côté Windows NT, des HAL pour Gossamer et Mac99, des pilotes Mac I/O IDE/ATA-6, des pilotes HID/stockage implémentant clavier/souris ADB et disque RAM, ainsi qu’un pilote miniport de framebuffer 32 bpp sont prêts
  • La compatibilité vise NT 3.51 RTM ou ultérieur ; les premières bêtas de NT 3.51 nécessitent un patch du noyau, et NT 3.5 n’est pas compatible car il ne prend en charge que le PowerPC 601

Périmètre du projet et matériel cible

  • Ce dépôt contient le firmware ARC et le code source du chargeur destinés aux systèmes Power Macintosh
  • L’architecture Gossamer cible les systèmes utilisant le contrôleur mémoire/hôte PCI MPC106 « Grackle » et la puce Super I/O « Heathrow » ou « 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! »
  • L’architecture Mac99 cible notamment le contrôleur mémoire/hôte PCI « Uni-North », la puce Super I/O « KeyLargo » et des chipsets dérivés comme « Intrepid »
    • PowerBook G3 Firewire « Pismo »
    • iBook G3
    • iBook G4
      • sur l’iBook G4 mid-2005 PowerBook6,7, la souris interne est en USB, elle ne fonctionne donc pas encore
    • PowerBook G4
      • les PowerBook G4 PowerBook6,8 de début 2005 et les modèles postérieurs à PowerBook5,6 utilisent un clavier et une souris USB, ce qui rend actuellement la prise en charge pratique difficile
  • Les iMac G3 slot-loading, iMac G4 et les modèles à partir du Power Macintosh G4 AGP « Sawtooth » sont pris en charge en théorie en raison de l’absence de pilote USB, mais leur prise en charge pratique est actuellement difficile
  • Des problèmes peuvent apparaître selon le matériel, et les sources du HAL NT et des pilotes ne sont pas incluses pour le moment

Pilotes inclus dans le firmware ARC

  • Le firmware ARC inclut la prise en charge de Cuda et PMU
    • Avec prise en charge du clavier ADB
  • Il utilise un framebuffer vidéo 32 bpp flat configuré par le chargeur
    • Prise en charge du matériel ATI et nVidia
    • Certains GPU nVidia ne fonctionnent pas actuellement
  • Le pilote du contrôleur IDE interne Mac I/O est un fork d’OpenBIOS
    • Il n’y a pas de pilote de contrôleur PCI IDE

      • Certains contrôleurs ATA-6 des systèmes Mac99 tardifs, à savoir Intrepid et U2, sont pris en charge
      • LBA48 n’est pas encore pris en charge
      • Sur les systèmes pré-Mac99, le contrôleur MESH SCSI est pris en charge
      • Le pilote USB OHCI est un fork d’OpenBIOS
      • Sur les systèmes pré-Mac99, il est en panne, ne fonctionne pas, et le code d’initialisation est également commenté

Pilotes implémentés pour Windows NT

  • Un HAL pour le chipset Gossamer est implémenté
    • Framebuffer au démarrage de NT
    • Contrôleur d’interruptions Super I/O
    • Prise en charge du bus PCI Grackle
    • Cuda et PMU, avec ADB bas niveau
    • Port série réservé au débogage du noyau
  • Un HAL pour le chipset Mac99 est également implémenté
    • Framebuffer au démarrage de NT
    • Contrôleur d’interruptions MPIC
    • Prise en charge des trois bus PCI de l’Uni-North
    • L’un d’eux est AGP, mais seul le sous-ensemble PCI est pris en charge
    • PMU, avec ADB bas niveau
    • Port série réservé au débogage du noyau
  • Les pilotes du contrôleur IDE interne Mac I/O et du contrôleur ATA-6 sont des forks de atapi.sys du NT4 DDK
  • Le pilote générique HID/stockage est destiné à inclure aussi une pile USB à l’avenir, mais pour l’instant il n’implémente que le clavier/la souris ADB et un disque RAM utilisé comme lecteur de disquette pour l’installation de pilotes pendant l’installation en mode texte
  • Un pilote miniport de framebuffer vidéo 32 bpp flat est disponible

Compatibilité logicielle

  • La compatibilité vise NT 3.51 RTM ou ultérieur
  • Les versions bêta de NT 3.51 jusqu’au build 944 inclus nécessitent un patch du noyau pour s’exécuter, en raison d’un bug de détection du processeur
  • NT 3.5 n’est pas compatible, car il ne prend en charge que le PowerPC 601
  • Les fonctions supplémentaires de suspension/hibernation de NT 3.51 PMZ sont théoriquement compatibles, mais en pratique il faudrait réimplémenter tous les pilotes supplémentaires nécessaires à ces fonctions

Déroulement de l’installation et contraintes de partition

  • Les binaires adaptés au système doivent être téléchargés depuis la page des releases
  • Sur les systèmes Gossamer/Grackle, l’image doit être gravée sur un support optique
    • Les systèmes Old World PowerMac G3 beige et PowerBook G3 Wallstreet/PDQ utilisent nt_arcfw_grackle_ow.iso
    • Les systèmes New World iMac G3 tray-loading, PowerMac G3 blue&white, PowerBook G3 Lombard et PowerMac G4 Yikes utilisent nt_arcfw_grackle.iso
  • Sur les systèmes Mac99, l’image peut être écrite sur une clé USB
  • Dans le menu du firmware ARC, aller dans Run firmware setupRepartition disk for NT installation pour partitionner le disque destiné à l’installation de NT
  • La taille de la partition NT est limitée à un maximum de 8030 Mo, en raison de la limite CHS 16383x16x63, moins une partition système ARC de 32 Mo et 1 Mo
  • Si la partition NT dépasse 2 Go, elle est formatée en NTFS
    • La version du formatage NTFS des releases antérieures au 2024-11-11 n’est pas compatible avec NT 3.51
    • Pour installer NT 3.51, il faut utiliser une partition de 2 Go ou moins
  • Pendant l’installation de NT, exécuter cd:\ppc\setupldr ; s’il y a plusieurs lecteurs optiques, il peut s’agir de cd01: ou cd02:
  • À l’étape de sélection du HAL, tous les éléments de la liste chargent le HAL adapté au système
    • Le HAL du chipset Gossamer est halgoss
    • Le HAL du chipset Mac99 est halunin
  • À l’étape des pilotes de stockage de masse, deux pilotes doivent être chargés
    • Mac I/O IDE Controller
    • PowerMac General HID & Storage
  • À l’étape de l’adaptateur vidéo, choisir l’option selon l’OS
    • NT 4 : Open Firmware Frame Buffer
    • NT 3.51 : Open Firmware Frame Buffer (NT 3.x)
  • Dans l’installation en mode texte, il faut remplacer le clavier par XT, AT or Enhanced Keyboard (83-104 keys) et le dispositif de pointage par No Mouse or Other Pointing Device
  • Si une partition NT de plus de 2 Go a été créée, des erreurs sont détectées lors de la vérification du disque et un redémarrage est nécessaire ; au deuxième essai, la vérification du disque réussit

Problèmes connus et précautions pour le dual boot

  • Sur les portables Gossamer/de la famille Gossamer, il peut être préférable de retirer la batterie
    • Sur Lombard, en cas de bugcheck, les seules façons d’éteindre sont une réinitialisation PMU ou une coupure complète de l’alimentation
    • La réinitialisation PMU des Wallstreet/PDQ est possible via une combinaison de touches
  • Les pilotes actuellement implémentés représentent le minimum nécessaire pour démarrer et utiliser NT
  • Un arrêt matériel par PMU a été observé pendant le démarrage de NT ; seule une réinitialisation PMU a permis de le résoudre, et la cause est inconnue
  • Sur les systèmes Old World, en cas de problème pour démarrer vers une autre cible que le firmware ARC, appuyer sur Esc au démarrage permet d’ignorer le périphérique du firmware ARC
  • Sur Mac99, le pilote USB ne fonctionne pas encore ; seuls les systèmes portables sont donc pris en charge
  • Si des partitions Mac supplémentaires sont créées, elles apparaissent dans la table de partition comme des partitions HFS, mais ne sont pas formatées
    • Il faut formater la partition avec Disk Utility sous OS X 10.1 ou ultérieur
    • Il faut effacer le volume, pas le disque
    • Dans les releases postérieures au 2024-11-11, il est également possible de démarrer sous OS 9 et de formater via la boîte de dialogue affichée au démarrage
  • Le programme d’installation d’OS X et le démarrage d’OS 8/OS 9 échouent s’il existe sur le disque un MBR valide requis par NT
    • Il faut utiliser l’option Run firmware setupReboot to OSX install or OS8/OS9 dans le firmware ARC
    • Dans les releases postérieures au 2024-11-11, le code du pilote OS8/9 est patché lors de l’écriture du disque, ce qui rend cette option inutile ; toutefois, elle redevient nécessaire si la partition de pilote sur disque est mise à jour autrement
    • En redémarrant sur le firmware ARC, le MBR est modifié
    • Le format de partition HFS créé par OS X 10.2 et 10.3 ne fonctionne pas s’il existe un MBR valide

Conditions de build et limites de taille

  • Le build du firmware ARC nécessite devkitPPC
  • Un libgcc.a compilé pour powerpcle doit se trouver dans arcgrackle/gccle
    • Au 2024-07-12, le fichier cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps est disponible sur un miroir Void Linux
  • La variable d’environnement DEVKITPPC doit généralement pointer vers le répertoire devkitPPC, typiquement /opt/devkitpro/devkitPPC
  • L’ordre de build est : libc big endian, chargeur du firmware ARC, libc little endian, puis firmware ARC
    • Mac99 utilise les dossiers arcloader_unin, arcunin/baselibc et arcunin
  • Il faut remplacer stage1.elf et stage2.elf dans l’image de release
  • Pour recréer une image à partir d’un dump de dossier, il faut créer une image hybride HFS+ISO, mettre le dossier System en état blessed et définir le type du fichier BootX sur tbxi
  • stage1.elf doit faire 16 Ko ou moins, et stage2.elf 224 Ko ou moins
  • Pour le build du bootloader Old World, consulter le readme correspondant ; pour créer l’image ISO Old World, consulter OldWorldIsoBuilder

Code utilisé et projets de référence

  • La libc utilise baselibc
  • Le chargeur ELF et le makefile ont été repris de The Homebrew Channel et modifiés
  • Une partie du code PowerPC bas niveau, l’implémentation de la console framebuffer du firmware ARC et les polices ont été repris de libogc et modifiés
  • Certains pilotes du firmware ARC, IDE et USB, ont été repris de OpenBIOS et modifiés
    • Le pilote USB d’OpenBIOS provient de coreboot
  • L’implémentation interne du système de fichiers ISO9660 du firmware ARC utilise une version modifiée de lib9660
  • L’implémentation interne du système de fichiers FAT du firmware ARC utilise une version modifiée de Petit FatFs

1 commentaires

 
GN⁺ 2024-07-13
Avis de Hacker News
  • Par nostalgie, cet article m’est revenu en tête : https://lowendmac.com/2014/next-openstep-and-the-triumphant-...
    Amelio et les cadres dirigeants avaient besoin d’un nouveau système d’exploitation pour rivaliser avec le géant Wintel, et les options s’étaient réduites à prendre une licence Windows NT, prendre une licence Solaris, lancer une version réduite de Copland, racheter Be puis utiliser BeOS, ou racheter NeXT puis utiliser OpenStep.

    • L’API de NeXT avait elle aussi été portée pour fonctionner au-dessus de Windows NT et de Solaris de Sun, et le système d’exploitation complet NextStep tournait aussi en bare metal sur plusieurs architectures CPU.
      Il est expliqué qu’il ne fonctionnait à l’origine que sur les stations de travail Motorola 68k de NeXT, avant d’être porté sur les PC « compatibles IBM » Intel x86 32 bits, les stations de travail PA-RISC de Hewlett-Packard et les stations de travail SPARC de Sun Microsystems : https://www.wikipedia.org/wiki/OpenStep
    • J’aimerais voir ne serait-ce qu’une fois la ligne temporelle où Apple aurait acheté Be au lieu de NeXT.
    • Dans le récit désormais « classique » centré sur le retour de Jobs, j’ai l’impression que le succès technique de Mac OS 8/9 est pas mal sous-estimé.
      Mac OS X n’était pas vraiment facile à utiliser au quotidien avant la version 10.1 en 2001, et pourtant l’iMac, l’iBook et le PowerBook G3 ont été des succès ; le système d’exploitation a donc forcément joué un rôle, mais il est presque absent de ce genre d’histoires.
      C’est sans doute teinté de nostalgie, car j’étais un ado fan de Mac entre 1997 et 2001, mais il y a eu beaucoup de changements entre les Performa du milieu des années 90 sous 7.5 et les iMac de la fin des années 90 sous 9.
      Ce n’était pas un système d’exploitation futuriste, mais du point de vue de l’utilisateur final, 8.6/9 paraissait relativement moderne face à Windows 95/98 ; et même au milieu des années 90, si l’avenir commercial semblait sombre, 7.5 n’était pas spécialement inférieur à 95.
    • Au final, ils ont tout de même rassemblé les morceaux récupérables de Copland pour sortir Mac OS 8.
    • Je me demande à quel point l’option « prendre Windows NT sous licence auprès de Microsoft et lui coller une interface à la Mac » a vraiment été envisagée sérieusement.
      Les autres propositions sont toutes raisonnables, mais celle-ci détonne vraiment, et c’est une très bonne chose qu’elle ne se soit jamais concrétisée.
  • Le même développeur a aussi porté PPC NT 4 sur Wii l’an dernier : https://www.youtube.com/watch?v=d8BpUpr1h9U

  • Travail intéressant. La norme ARC https://en.wikipedia.org/wiki/ARC_(specification) servait à démarrer les machines Windows DEC Alpha, MIPS, etc.
    En 1998, chez Intel, la spécification EFI d’origine s’inspirait d’ARC et le prenait pour modèle, et l’Intel Boot Initiative (IBI) ressemblait elle aussi beaucoup à ARC.
    EFI, devenu aujourd’hui UEFI, ressemble en gros à ARC auquel on aurait ajouté des interfaces installables à base de GUID à la manière de MS COM https://en.wikipedia.org/wiki/Component_Object_Model, c’est-à-dire des protocoles.
    https://www.intel.com/content/dam/www/public/us/en/documents... en page 8 raconte une partie de cette galère.

  • Windows NT était vraiment fascinant. Si vous cherchez un bon livre, je recommande Showstopper.

    • Ce livre était excellent, et on peut le ranger aux côtés de Masters of Doom ou de The Soul of a New Machine.
  • Justement, je cherchais une raison de rallumer mon iMac G3 bondi blue de 1998, et voilà que ça sort : un projet bizarre, rugueux et très spécifique.

  • Peux-tu donner le contexte ? NT est évidemment à source fermé et n’a probablement jamais été développé pour Mac, donc je me demande ce que c’est réellement.
    Je ne sais pas non plus quelles sont les chances de mettre la main sur les logiciels. La plupart des logiciels NT devaient être compilés uniquement pour Intel, et leurs sources devaient être fermées.

    • NT a été conçu avec la portabilité en tête, avec une séparation nette des parties propres à chaque machine, même au sein d’un même CPU.
      Donc, si l’on porte seulement cette partie, les binaires existants pour cette architecture devraient fonctionner.
      Il y a trois points essentiels. 1) Le firmware de démarrage ARC : NT a été développé sur des systèmes non x86 comme l’i860 ou le MIPS, et ARC était le firmware de démarrage par défaut. Sur x86, NTLDR l’a émulé jusqu’avant Vista. Ce projet semble fournir un environnement compatible ARC par-dessus OpenFirmware, avec aussi un travail intéressant consistant à faire croire au firmware de démarrage qu’il y a un périphérique de stockage, afin de pouvoir lire une « disquette » de pilotes au début de l’installation.
      2) HAL.DLL : l’idée est que NTOSKRNL lui-même est indépendant du matériel, avec un seul binaire par architecture CPU. Mais le noyau doit communiquer avec les vrais minuteurs ou bus, donc ce code d’interface se trouve dans HAL.DLL, et le bon fichier est copié lors de l’installation. La liste des HAL x86-32 des anciens Windows est visible ici : https://www.geoffchappell.com/studies/windows/km/hal/history.... Aujourd’hui, il reste surtout une version pour AMD64, largement intégrée au noyau. Ici, le noyau principal est conservé tel quel, et halgoss prend en charge les traitements spécifiques au Mac.
      3) Les pilotes de périphériques : une fois NT démarré, il faut de vrais pilotes.
      La spécification du point 1) étant connue, elle doit pouvoir être émulée, et pour le point 3), il doit exister un DDK, ou on peut sans doute déduire les choses d’un autre DDK. Le point 2) me semble être celui qui exige le plus de connaissances internes, et je ne sais pas si le code source de NT qui a fuité descend jusqu’à ce niveau, je ne l’ai jamais vérifié.
      La compatibilité se limite aux binaires Win32 PowerPC 32 bits, aux binaires Win16 x86 16 bits et aux programmes DOS x86 tournant dans la boîte DOS de NT4. Pas de Win32 x86 ; seule la version Alpha disposait d’un émulateur Win32 x86.
    • NT4 a été développé pour les architectures PowerPC, MIPS et Alpha. Une partie importante du code source de NT4 a aussi déjà fuité : https://www.neowin.net/news/exclusive-windows-2000--windows-...
      Cela ne veut pas dire que l’auteur a utilisé ce code, mais s’il est disponible, cela a probablement rendu ce travail beaucoup plus simple.
      Sinon, il a peut-être rétroconçu le bootloader en clean room, ou bien les informations publiques étaient suffisamment complètes pour ne pas avoir besoin de connaître le code interne de Windows.
      La base de code PPC ne visait pas directement le Mac, mais d’autres systèmes IBM/Motorola ; comme il s’agit d’une plateforme « commune », les binaires présents dans l’ISO de NT4 n’ont pas besoin d’être modifiés.
      Et on peut trouver le code source sur GitHub dans plusieurs dépôts.
    • La Xbox 360 était basée sur PowerPC et exécutait Windows 2000, c’est-à-dire une variante de l’OS NT : https://en.wikipedia.org/wiki/Xbox_360_technical_specificati...
  • J’aimais vraiment l’ancien Windows NT. Il était assez léger pour tourner sur du matériel peu puissant de la fin des années 90, et bien plus stable que Windows 95.

    • Si Microsoft avait vraiment poussé le sous-système POSIX, je n’aurais sans doute pas eu besoin de toucher à Linux pour les devoirs UNIX.
      À la place, j’utilisais les deux en dual boot.
  • Très classe ; j’ai hâte de revivre l’époque où il fallait renoncer à tous les jeux DOS.

    • Ce n’est pas un émulateur x86 capable de lancer une boîte DOS, mais NT exécuté nativement sur PPC.
      Donc, malheureusement, pas de jeux DOS.
    • Windows 2000 et XP prenaient assez bien en charge beaucoup de jeux MS-DOS avec VDMSound installé.
  • J’aime bien le fichier du bootloader : https://github.com/Wack0/maciNTosh/blob/main/boot_files/Syst...
    Au passage, la syntaxe d’Open Firmware est vraiment difficile à lire. Elle n’a pas été détestée sans raison ; c’était une occasion manquée.

  • Écrire un nouveau HAL NT est un accomplissement vraiment impressionnant. Respect.
    La documentation est au mieux clairsemée, et il doit aussi y avoir beaucoup de bogues inconnus que les HAL existants n’ont simplement pas révélés par chance.