Windows NT para Power Macintosh
(github.com/Wack0)- Este repositório contém o firmware ARC e o código-fonte do loader para inicializar o Windows NT em Power Macintosh, com foco nos PowerPC Macintosh das famílias Gossamer/Grackle e Mac99
- O suporte é dividido entre Power Macintosh G3, alguns iMac G3, PowerBook G3/G4, iBook G3/G4 e alguns Power Macintosh G4, mas, devido à ausência de driver USB, alguns sistemas têm apenas suporte teórico ou são difíceis de usar na prática
- O firmware ARC inclui suporte a Cuda/PMU, teclado ADB, framebuffer de 32bpp, IDE interno Mac I/O, alguns ATA-6, MESH SCSI e driver USB OHCI, mas não há driver PCI IDE nem suporte a LBA48
- Do lado do Windows NT, há HAL para Gossamer e Mac99, driver IDE/ATA-6 do Mac I/O, drivers HID/armazenamento com teclado/mouse ADB e ramdisk, além de driver miniport de framebuffer 32bpp
- A compatibilidade cobre NT 3.51 RTM ou superior; betas iniciais do NT 3.51 exigem patch no kernel, e o NT 3.5 não é compatível porque suporta apenas PowerPC 601
Escopo do projeto e hardware-alvo
- Este repositório inclui o firmware ARC e o código-fonte do loader voltados a sistemas Power Macintosh
- A arquitetura Gossamer cobre sistemas com controlador de memória/host PCI MPC106 “Grackle” e chip 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!”
- A arquitetura Mac99 cobre o controlador de memória/host PCI “Uni-North”, o chip Super I/O “KeyLargo” e chipsets derivados como o “Intrepid”
- PowerBook G3 Firewire “Pismo”
- iBook G3
- iBook G4
- no iBook G4 mid-2005
PowerBook6,7, o mouse interno usa USB, então ainda não funciona
- no iBook G4 mid-2005
- PowerBook G4
- modelos PowerBook G4
PowerBook6,8,PowerBook5,6e posteriores, a partir do early 2005, usam teclado e mouse USB, então hoje é difícil oferecer suporte prático
- modelos PowerBook G4
- iMac G3 slot-loading, iMac G4 e modelos posteriores ao Power Macintosh G4 AGP “Sawtooth” têm suporte teórico, mas o uso prático ainda é difícil por causa da ausência de driver USB
- Dependendo do hardware, podem existir problemas, e o código-fonte do HAL e dos drivers do NT não está incluído no momento
Drivers incluídos no firmware ARC
- O firmware ARC inclui suporte a Cuda e PMU
- Inclui suporte a teclado ADB
- Usa um framebuffer de vídeo 32bpp flat configurado pelo loader
- Suporta hardware ATI e nVidia
- Algumas GPUs nVidia ainda não funcionam
- O driver do controlador IDE interno Mac I/O foi derivado do OpenBIOS
-
Não há driver para controladores PCI IDE
- Alguns controladores ATA-6 de sistemas Mac99 mais novos, como Intrepid e U2, são suportados
- LBA48 ainda não é suportado
- Em sistemas pre-Mac99, há suporte ao controlador MESH SCSI
- O driver USB OHCI foi derivado do OpenBIOS
- Em sistemas pre-Mac99, ele está quebrado e não funciona, e o código de inicialização está comentado
-
Drivers implementados para Windows NT
- Há um HAL implementado para o chipset Gossamer
- Framebuffer durante o boot do NT
- Controlador de interrupções do Super I/O
- Suporte ao barramento PCI Grackle
- Cuda e PMU, incluindo ADB de baixo nível
- Porta serial apenas para depuração do kernel
- Também há um HAL implementado para o chipset Mac99
- Framebuffer durante o boot do NT
- Controlador de interrupções MPIC
- Suporte aos 3 barramentos PCI do Uni-North
- Um deles é AGP, mas só o subconjunto PCI é suportado
- PMU, incluindo ADB de baixo nível
- Porta serial apenas para depuração do kernel
- Os drivers do controlador IDE interno Mac I/O e do controlador ATA-6 foram derivados de
atapi.sysdo NT4 DDK - O driver genérico de HID/armazenamento pretende no futuro incluir também a stack USB, mas por enquanto implementa apenas teclado/mouse ADB e um ramdisk usado como unidade de disquete para instalação de drivers durante a instalação em modo texto
- Há um driver miniport de framebuffer de vídeo 32bpp flat
Compatibilidade de software
- A compatibilidade cobre NT 3.51 RTM ou superior
- Versões beta do NT 3.51 build 944 ou anteriores exigem patch no kernel para rodar por causa de um bug na detecção do processador
- O NT 3.5 não é compatível porque suporta apenas PowerPC 601
- O recurso adicional de suspend/hibernation do NT 3.51 PMZ é teoricamente compatível, mas na prática seria necessário reimplementar todos os drivers extras exigidos por esse recurso
Fluxo de instalação e limitações de partição
- O binário correspondente ao seu sistema deve ser baixado na página de releases
- Sistemas Gossamer/Grackle exigem gravar a imagem em mídia óptica
- Em sistemas Old World como PowerMac G3 beige e PowerBook G3 Wallstreet/PDQ, use
nt_arcfw_grackle_ow.iso - Em sistemas New World como iMac G3 tray-loading, PowerMac G3 blue&white, PowerBook G3 Lombard e PowerMac G4 Yikes, use
nt_arcfw_grackle.iso
- Em sistemas Old World como PowerMac G3 beige e PowerBook G3 Wallstreet/PDQ, use
- Em sistemas Mac99, a imagem pode ser gravada em uma unidade USB
- No menu do firmware ARC, entre em
Run firmware setup→Repartition disk for NT installationpara particionar o disco para a instalação do NT - O tamanho máximo da partição NT é 8030MB, descontando a partição de sistema ARC de 32MB e 1MB do limite CHS 16383x16x63
- Se a partição NT tiver mais de 2GB, ela será formatada em NTFS
- A versão de formatação NTFS das releases anteriores a 2024-11-11 não é compatível com NT 3.51
- Para instalar o NT 3.51, é preciso usar uma partição de 2GB ou menos
- Durante a instalação do NT, execute
cd:\ppc\setupldr; se houver várias unidades ópticas, pode sercd01:oucd02: - Na etapa de seleção do HAL, todos os itens da lista carregam um HAL compatível com o sistema
- O HAL do chipset Gossamer é
halgoss - O HAL do chipset Mac99 é
halunin
- O HAL do chipset Gossamer é
- Na etapa de drivers de armazenamento em massa, é preciso carregar os dois drivers
Mac I/O IDE ControllerPowerMac General HID & Storage
- Na etapa do adaptador de vídeo, escolha opções diferentes conforme o sistema operacional
- No NT 4,
Open Firmware Frame Buffer - No NT 3.51,
Open Firmware Frame Buffer (NT 3.x)
- No NT 4,
- Na instalação em modo texto, o teclado deve ser alterado para
XT, AT or Enhanced Keyboard (83-104 keys)e o dispositivo apontador paraNo Mouse or Other Pointing Device - Se você criou uma partição NT maior que 2GB, serão encontrados erros na verificação do disco e será necessário reiniciar; na segunda tentativa, a verificação passa com sucesso
Problemas conhecidos e cuidados com dual boot
- Em notebooks Gossamer/da família Gossamer, talvez você queira remover a bateria
- No Lombard, em caso de bugcheck, a única forma de desligar é resetando a PMU ou cortando totalmente a energia
- No Wallstreet/PDQ, o reset da PMU pode ser feito por combinação de teclas
- Os drivers atualmente implementados são o mínimo necessário para executar e usar o NT
- Foi observado hard shutdown da PMU durante o boot do NT, resolvido apenas com reset da PMU; a causa é desconhecida
- Se houver problemas para inicializar outro destino que não seja o firmware ARC em sistemas Old World, pressione
Escdurante o boot para ignorar o dispositivo do firmware ARC - Em Mac99, como o driver USB ainda não funciona, apenas sistemas notebook são suportados
- Se você criar partições Mac adicionais, elas aparecerão como partições HFS na tabela de partição, mas não serão formatadas
- É preciso formatá-las no Disk Utility do OS X 10.1 ou superior
- Deve-se apagar o volume, não a unidade
- Em releases a partir de 2024-11-11, também é possível inicializar no OS 9 e formatar pela caixa de diálogo exibida na inicialização
- O instalador do OS X e o boot do OS 8/OS 9 falham se houver um MBR válido no disco, necessário para o NT
- É preciso usar a opção
Run firmware setup→Reboot to OSX install or OS8/OS9no firmware ARC - Em releases a partir de 2024-11-11, essa opção deixa de ser necessária porque o código de driver do OS8/9 é corrigido ao gravar no disco, mas voltará a ser necessária se a partição de driver on-disk for atualizada de outra forma
- Ao inicializar novamente no firmware ARC, o MBR será modificado
- A formatação de partições HFS criada no OS X 10.2 e 10.3 não funciona se houver um MBR válido
- É preciso usar a opção
Requisitos de build e limites de tamanho
- O build do firmware ARC exige devkitPPC
libgcc.acompilado parapowerpcledeve estar emarcgrackle/gccle- Em 2024-07-12, o arquivo
cross-powerpcle-linux-gnu-0.34_1.x86_64.xbpspodia ser encontrado em um mirror do Void Linux
- Em 2024-07-12, o arquivo
- A variável de ambiente
DEVKITPPCnormalmente deve apontar para o diretório do devkitPPC, geralmente/opt/devkitpro/devkitPPC - A ordem de build é libc big endian, loader do firmware ARC, libc little endian e firmware ARC
- Para Mac99, use as pastas
arcloader_unin,arcunin/baselibcearcunin
- Para Mac99, use as pastas
- É preciso substituir
stage1.elfestage2.elfdentro da imagem de release - Ao recriar a imagem a partir de um dump de pasta, é necessário gerar uma imagem híbrida HFS+ISO, deixar a pasta
Systemblessed e definir o tipo do arquivoBootXcomotbxi stage1.elfdeve ter no máximo 16KB estage2.elf, no máximo 224KB- Para o build do bootloader Old World, consulte o readme correspondente; para gerar a imagem ISO Old World, consulte o OldWorldIsoBuilder
Código usado e projetos de referência
- A libc usada é baselibc
- O loader ELF e o makefile foram obtidos de The Homebrew Channel e modificados
- Parte do código PowerPC de baixo nível, a implementação do console de framebuffer do firmware ARC e as fontes vieram de libogc e foram modificados
- Alguns drivers do firmware ARC, além de IDE e USB, vieram de OpenBIOS e foram modificados
- O driver USB do OpenBIOS veio de coreboot
- A implementação interna do sistema de arquivos ISO9660 no firmware ARC usa uma versão modificada de lib9660
- A implementação interna do sistema de arquivos FAT no firmware ARC usa uma versão modificada de Petit FatFs
1 comentários
Opiniões no Hacker News
Por nostalgia, este texto me veio à cabeça: https://lowendmac.com/2014/next-openstep-and-the-triumphant-...
Amelio e a alta liderança precisavam de um novo sistema operacional para competir com o enorme poderio Wintel, e as opções se afunilaram para licenciar o Windows NT, licenciar o Solaris, lançar uma versão reduzida do Copland, comprar a Be e usar o BeOS, ou comprar a NeXT e usar o OpenStep
Há a explicação de que ele originalmente rodava apenas nas workstations Motorola 68k da NeXT, mas foi portado para PCs “IBM compatíveis” Intel x86 de 32 bits, workstations PA-RISC da Hewlett-Packard e workstations SPARC da Sun Microsystems: https://www.wikipedia.org/wiki/OpenStep
O Mac OS X não era fácil de usar de verdade até a versão 10.1, em 2001, e mesmo assim iMac, iBook e PowerBook G3 foram sucessos; então o sistema operacional certamente teve seu papel, mas isso quase não aparece nessas histórias
Talvez minha lembrança esteja misturada com nostalgia, já que eu era um adolescente entusiasta de Mac entre 1997 e 2001, mas houve muitas mudanças na passagem de um Performa de meados dos anos 90 com 7.5 para um iMac do fim dos anos 90 com 9
Mesmo não sendo um sistema operacional futurista, do ponto de vista do usuário final o 8.6/9 parecia relativamente mais moderno que o Windows 95/98; e, mesmo em meados dos anos 90, embora o futuro do negócio parecesse sombrio, o 7.5 não era exatamente pior que o 95
As outras propostas parecem todas razoáveis, mas só essa destoa bastante, e ainda bem que não aconteceu de verdade
O mesmo desenvolvedor também portou PPC NT 4 para o Wii no ano passado: https://www.youtube.com/watch?v=d8BpUpr1h9U
É um trabalho interessante. O padrão ARC https://en.wikipedia.org/wiki/ARC_(specification) era usado para inicializar máquinas Windows DEC Alpha, MIPS etc.
Em 1998, na Intel, a especificação EFI original tomou o ARC como modelo e inspiração, e a Intel Boot Initiative (IBI) também se parecia em grande parte com o ARC
O EFI, hoje UEFI, é mais ou menos como o ARC acrescido de interfaces instaláveis baseadas em GUID no estilo MS COM https://en.wikipedia.org/wiki/Component_Object_Model, ou seja, protocolos
Em https://www.intel.com/content/dam/www/public/us/en/documents..., na página 8, aparece parte dessa saga
O ARC conseguia inicializar o NT, mas o SRM não: https://en.wikipedia.org/wiki/SRM_firmware
Windows NT era realmente fascinante. Se estiver procurando um bom livro, recomendo Showstopper
Eu por acaso estava procurando um motivo para ligar meu iMac G3 bondi blue de 1998, e aí aparece isto: um projeto estranho, bruto e extremamente específico
Você pode explicar o contexto? O NT obviamente é de código fechado e imagino que nunca tenha sido desenvolvido para Mac; fiquei curioso para saber o que isso é de fato
Também não sei qual seria a chance de conseguir o software. A maior parte dos softwares para NT deve ter sido compilada só para Intel, e provavelmente com código fechado
Portanto, se você portar só essa parte, os binários existentes para aquela arquitetura devem funcionar
O ponto central são três coisas. 1) firmware de boot ARC: o NT foi desenvolvido em sistemas não x86, como i860 e MIPS, e o ARC era o firmware de boot padrão. No x86, até antes do Vista, o NTLDR emulava isso. Este projeto parece fazer um trabalho interessante de fornecer um ambiente compatível com ARC sobre o OpenFirmware e, durante a fase inicial da instalação, fazer o firmware de boot fingir que há um dispositivo de armazenamento para que seja possível ler o “disquete” de drivers
2) HAL.DLL: a ideia é que o corpo principal do NTOSKRNL seja independente de hardware, com um binário por arquitetura de CPU. Mas o kernel precisa se comunicar com temporizadores ou barramentos reais, então esse código de interface fica no HAL.DLL, e o adequado é copiado durante a instalação. A lista dos HALs x86-32 do Windows antigo pode ser vista em https://www.geoffchappell.com/studies/windows/km/hal/history.... Hoje, existe basicamente um para AMD64, em grande parte incorporado ao kernel. Aqui, o kernel principal fica intacto e o halgoss cuida do tratamento específico do Mac
3) drivers de dispositivo: depois que o NT sobe, são necessários drivers reais
Como a especificação de 1) é conhecida, deve ser possível emulá-la; e 3) parece viável com o DDK ou por inferência a partir de outros DDKs. 2) parece ser a parte que mais exige conhecimento interno, e não sei se o código-fonte vazado do NT chega a esse nível, pois nunca vi
A compatibilidade é com binários Win32 de 32 bits para PowerPC, binários Win16 x86 de 16 bits e programas DOS x86 rodando na caixa DOS do NT4. Win32 x86 não funciona, e só o Alpha tinha emulador de Win32 x86
Isso não quer dizer que o autor tenha usado esse código, mas, se tivesse esse código-fonte, esse trabalho provavelmente teria ficado muito mais fácil
Ou talvez ele tenha feito engenharia reversa do bootloader em estilo clean room, ou talvez houvesse informação pública suficiente para não precisar conhecer o código interno do Windows
A base de código PPC não mirava diretamente o Mac, e sim outros sistemas da IBM/Motorola, mas, por ser uma plataforma “comum”, os próprios binários dentro da ISO do NT4 não precisam ser modificados
E é possível encontrar o código-fonte em vários repositórios no GitHub
Eu gostava muito do antigo Windows NT. Ele era leve o bastante para rodar até em hardware modesto no fim dos anos 90 e era muito mais estável que o Windows 95
Em vez disso, usei os dois em dual boot
Muito legal, estou ansioso para reviver a época em que era preciso abrir mão de todos os jogos de DOS
Então, infelizmente, nada de jogos de DOS
Gostei do arquivo do bootloader: https://github.com/Wack0/maciNTosh/blob/main/boot_files/Syst...
Além disso, a sintaxe do Open Firmware é difícil demais de ler. Não foi odiada à toa; foi uma oportunidade perdida
Escrever um novo HAL do NT é uma conquista realmente impressionante. Meus respeitos
A documentação, quando muito, é bem esparsa, e imagino que existam muitos bugs desconhecidos que os HALs existentes simplesmente, por sorte, nunca expuseram