1 pontos por GN⁺ 2024-07-13 | 1 comentários | Compartilhar no WhatsApp
  • 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
    • PowerBook G4
      • modelos PowerBook G4 PowerBook6,8, PowerBook5,6 e posteriores, a partir do early 2005, usam teclado e mouse USB, então hoje é difícil oferecer suporte prático
  • 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.sys do 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 Mac99, a imagem pode ser gravada em uma unidade USB
  • No menu do firmware ARC, entre em Run firmware setupRepartition disk for NT installation para 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 ser cd01: ou cd02:
  • 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
  • Na etapa de drivers de armazenamento em massa, é preciso carregar os dois drivers
    • Mac I/O IDE Controller
    • PowerMac 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)
  • Na instalação em modo texto, o teclado deve ser alterado para XT, AT or Enhanced Keyboard (83-104 keys) e o dispositivo apontador para No 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 Esc durante 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 setupReboot to OSX install or OS8/OS9 no 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

Requisitos de build e limites de tamanho

  • O build do firmware ARC exige devkitPPC
  • libgcc.a compilado para powerpcle deve estar em arcgrackle/gccle
    • Em 2024-07-12, o arquivo cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps podia ser encontrado em um mirror do Void Linux
  • A variável de ambiente DEVKITPPC normalmente 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/baselibc e arcunin
  • É preciso substituir stage1.elf e stage2.elf dentro 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 System blessed e definir o tipo do arquivo BootX como tbxi
  • stage1.elf deve ter no máximo 16KB e stage2.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

 
GN⁺ 2024-07-13
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

    • A API da NeXT também foi portada para rodar sobre Windows NT e Solaris, da Sun, e o sistema operacional NextStep completo também rodava em bare metal em várias arquiteturas de CPU
      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
    • Eu queria ver, nem que fosse uma vez, a linha do tempo em que a Apple comprou a Be em vez da NeXT
    • Acho que, na narrativa hoje “clássica” centrada no retorno de Jobs, o sucesso de engenharia do Mac OS 8/9 é bastante subestimado
      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
    • No fim, eles reuniram as partes aproveitáveis do Copland e as lançaram como Mac OS 8
    • Fico curioso para saber o quão séria era, de fato, a opção de “licenciar o Windows NT da Microsoft e colocar uma interface parecida com a do Mac por cima”
      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

  • Windows NT era realmente fascinante. Se estiver procurando um bom livro, recomendo Showstopper

    • Esse livro era excelente, e dá para colocá-lo ao lado de Masters of Doom ou The Soul of a New Machine
  • 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

    • O NT foi projetado pensando em portabilidade, então mesmo dentro da mesma CPU as partes específicas de cada máquina são bem separadas
      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
    • O NT4 foi desenvolvido para as arquiteturas PowerPC, MIPS e Alpha. Uma parte considerável do código-fonte do NT4 também já vazou https://www.neowin.net/news/exclusive-windows-2000--windows-...
      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
    • O Xbox 360 era baseado em PowerPC e rodava uma variante do Windows 2000, ou seja, do sistema operacional NT: https://en.wikipedia.org/wiki/Xbox_360_technical_specificati...
  • 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

    • Se a Microsoft tivesse levado a sério o subsistema POSIX, acho que eu nem teria mexido em Linux por causa de trabalhos de UNIX
      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

    • Isso não é um emulador x86 capaz de rodar uma caixa DOS, e sim o NT rodando nativamente em PPC
      Então, infelizmente, nada de jogos de DOS
    • O Windows 2000 e o XP, com o VDMSound instalado, davam suporte bastante bom a muitos jogos de MS-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