1 điểm bởi GN⁺ 2024-07-13 | 1 bình luận | Chia sẻ qua WhatsApp
  • Kho lưu trữ này chứa firmware ARC và mã nguồn loader để khởi động Windows NT trên Power Macintosh, nhắm đến các máy PowerPC Macintosh thuộc dòng Gossamer/Grackle và Mac99
  • Các hệ thống được hỗ trợ gồm Power Macintosh G3, một số iMac G3, PowerBook G3/G4, iBook G3/G4 và một số Power Macintosh G4; do thiếu driver USB, một số hệ thống chỉ được hỗ trợ trên lý thuyết hoặc khó dùng thực tế
  • Firmware ARC bao gồm driver cho Cuda/PMU, bàn phím ADB, framebuffer 32bpp, IDE nội bộ Mac I/O, một số ATA-6, MESH SCSI và USB OHCI, nhưng không có driver PCI IDE và không hỗ trợ LBA48
  • Phía Windows NT có HAL cho Gossamer và Mac99, driver Mac I/O IDE/ATA-6, driver HID/lưu trữ triển khai bàn phím/chuột ADB và ramdisk, cùng driver miniport framebuffer 32bpp
  • Tương thích với NT 3.51 RTM trở lên; các bản beta đầu của NT 3.51 cần patch kernel, còn NT 3.5 chỉ hỗ trợ PowerPC 601 nên không tương thích

Phạm vi dự án và phần cứng mục tiêu

  • Kho lưu trữ này chứa firmware ARC và mã nguồn loader dành cho các hệ thống Power Macintosh
  • Kiến trúc Gossamer nhắm đến các hệ thống dùng bộ điều khiển bộ nhớ/PCI host MPC106 “Grackle” và chip Super I/O “Heathrow” hoặc “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!”
  • Kiến trúc Mac99 bao gồm bộ điều khiển bộ nhớ/PCI host “Uni-North”, chip Super I/O “KeyLargo” và các chipset phái sinh như “Intrepid”
    • PowerBook G3 Firewire “Pismo”
    • iBook G3
    • iBook G4
      • iBook G4 mid-2005 PowerBook6,7 có chuột nội bộ dùng USB nên hiện chuột chưa hoạt động
    • PowerBook G4
      • Các mẫu PowerBook G4 từ early 2005 trở về sau như PowerBook6,8, PowerBook5,6 trở về sau dùng bàn phím và chuột USB, nên hiện khó hỗ trợ sử dụng thực tế
  • iMac G3 slot-loading, iMac G4, Power Macintosh G4 AGP “Sawtooth” và các mẫu về sau về lý thuyết được hỗ trợ nhưng hiện khó dùng thực tế do thiếu driver USB
  • Tùy phần cứng có thể phát sinh vấn đề; mã nguồn NT HAL và driver hiện chưa được bao gồm

Driver có trong firmware ARC

  • Firmware ARC bao gồm hỗ trợ Cuda và PMU
    • Có hỗ trợ bàn phím ADB
  • Sử dụng flat framebuffer video 32bpp do loader thiết lập
    • Hỗ trợ phần cứng ATI và nVidia
    • Một số GPU nVidia hiện chưa hoạt động
  • Driver bộ điều khiển IDE nội bộ Mac I/O được fork từ OpenBIOS
    • Không có driver bộ điều khiển PCI IDE

      • Một số bộ điều khiển ATA-6 trên các hệ thống Mac99 đời sau, tức Intrepid và U2, được hỗ trợ
      • LBA48 hiện chưa được hỗ trợ
      • Trên các hệ thống pre-Mac99, bộ điều khiển MESH SCSI được hỗ trợ
      • Driver USB OHCI được fork từ OpenBIOS
      • Trên các hệ thống pre-Mac99, driver này đang ở trạng thái hỏng, không hoạt động và mã khởi tạo cũng đã bị comment out

Driver được triển khai cho Windows NT

  • HAL cho chipset Gossamer đã được triển khai
    • Framebuffer khi NT khởi động
    • Bộ điều khiển ngắt Super I/O
    • Hỗ trợ bus PCI Grackle
    • Bao gồm Cuda, PMU và ADB mức thấp
    • Cổng serial chỉ dành cho kernel debugging
  • HAL cho chipset Mac99 cũng đã được triển khai
    • Framebuffer khi NT khởi động
    • Bộ điều khiển ngắt MPIC
    • Hỗ trợ 3 bus PCI của Uni-North
    • Một trong số đó là AGP nhưng chỉ hỗ trợ tập con PCI
    • Bao gồm PMU và ADB mức thấp
    • Cổng serial chỉ dành cho kernel debugging
  • Driver bộ điều khiển IDE nội bộ Mac I/O và bộ điều khiển ATA-6 được fork từ atapi.sys của NT4 DDK
  • Driver HID/lưu trữ chung dự kiến sẽ bao gồm cả USB stack trong tương lai, nhưng hiện chỉ triển khai bàn phím/chuột ADB và ramdisk dùng làm ổ đĩa mềm để cài driver trong quá trình cài đặt dạng text
  • Có driver miniport flat framebuffer video 32bpp

Tương thích phần mềm

  • Tương thích với NT 3.51 RTM trở lên
  • Các bản NT 3.51 beta build 944 trở xuống cần patch kernel để chạy do lỗi phát hiện bộ xử lý
  • NT 3.5 chỉ hỗ trợ PowerPC 601 nên không tương thích
  • Các chức năng suspend/hibernation bổ sung của NT 3.51 PMZ về lý thuyết có thể tương thích, nhưng trên thực tế phải triển khai lại toàn bộ các driver bổ sung cần cho các chức năng đó

Luồng cài đặt và ràng buộc phân vùng

  • Cần tải binary phù hợp với hệ thống từ trang releases
  • Với các hệ thống Gossamer/Grackle, cần ghi image ra optical media
    • Các hệ thống Old World như PowerMac G3 beige, PowerBook G3 Wallstreet/PDQ dùng nt_arcfw_grackle_ow.iso
    • Các hệ thống New World như iMac G3 tray-loading, PowerMac G3 blue&white, PowerBook G3 Lombard, PowerMac G4 Yikes dùng nt_arcfw_grackle.iso
  • Với hệ thống Mac99, có thể ghi image vào USB drive
  • Trong menu firmware ARC, vào Run firmware setupRepartition disk for NT installation để phân vùng đĩa cho cài đặt NT
  • Kích thước phân vùng NT tối đa là 8030MB, sau khi trừ phân vùng hệ thống ARC 32MB và 1MB khỏi giới hạn CHS 16383x16x63
  • Nếu phân vùng NT lớn hơn 2GB, nó sẽ được format thành NTFS
    • Phiên bản format NTFS của các release trước 2024-11-11 không tương thích với NT 3.51
    • Muốn cài NT 3.51 thì phải dùng phân vùng từ 2GB trở xuống
  • Trong quá trình cài NT, chạy cd:\ppc\setupldr; nếu có nhiều ổ quang, nó có thể là cd01: hoặc cd02:
  • Ở bước chọn HAL, các mục trong danh sách đều nạp HAL phù hợp với hệ thống
    • HAL chipset Gossamer là halgoss
    • HAL chipset Mac99 là halunin
  • Ở bước driver thiết bị lưu trữ dung lượng lớn, cần nạp hai driver
    • Mac I/O IDE Controller
    • PowerMac General HID & Storage
  • Ở bước video adapter, chọn tùy chọn khác nhau tùy OS
    • NT 4 là Open Firmware Frame Buffer
    • NT 3.51 là Open Firmware Frame Buffer (NT 3.x)
  • Trong phần cài đặt dạng text, bàn phím phải đổi thành XT, AT or Enhanced Keyboard (83-104 keys), và thiết bị trỏ phải đổi thành No Mouse or Other Pointing Device
  • Nếu tạo phân vùng NT lớn hơn 2GB, quá trình kiểm tra đĩa sẽ phát hiện lỗi và cần khởi động lại; ở lần thử thứ hai, kiểm tra đĩa sẽ thành công

Vấn đề đã biết và lưu ý khi dual boot

  • Trên laptop dòng Gossamer/Gossamer, có thể bạn sẽ muốn tháo pin
    • Trên Lombard, khi xảy ra bugcheck, cách tắt nguồn duy nhất là reset PMU hoặc ngắt nguồn hoàn toàn
    • Reset PMU của Wallstreet/PDQ có thể thực hiện bằng tổ hợp phím
  • Các driver hiện được triển khai chỉ ở mức tối thiểu cần thiết để chạy và sử dụng NT
  • Đã quan sát thấy PMU hard shutdown trong khi NT khởi động; chỉ có thể khắc phục bằng reset PMU và nguyên nhân chưa rõ
  • Trên hệ thống Old World, nếu gặp vấn đề khi boot sang mục tiêu không phải firmware ARC, nhấn Esc lúc boot để bỏ qua thiết bị firmware ARC
  • Trên Mac99, driver USB hiện chưa hoạt động nên chỉ hỗ trợ các hệ thống laptop
  • Nếu tạo thêm phân vùng Mac, nó sẽ hiển thị là phân vùng HFS trong bảng phân vùng nhưng chưa được format
    • Cần format phân vùng bằng Disk Utility trên OS X 10.1 trở lên
    • Phải xóa volume, không phải drive
    • Với các release sau 2024-11-11, cũng có thể boot vào OS 9 và format bằng hộp thoại hiển thị lúc khởi động
  • Bộ cài OS X và việc boot OS 8/OS 9 sẽ báo lỗi nếu trên đĩa có MBR hợp lệ cần cho NT
    • Cần dùng tùy chọn Run firmware setupReboot to OSX install or OS8/OS9 trong firmware ARC
    • Với các release sau 2024-11-11, khi ghi đĩa, mã driver OS8/9 được patch nên không cần tùy chọn này, nhưng nếu phân vùng driver trên đĩa được cập nhật theo cách khác thì sẽ lại cần
    • Khi boot lại vào firmware ARC, MBR sẽ được chỉnh sửa
    • Định dạng phân vùng HFS tạo bởi OS X 10.2 và 10.3 không hoạt động nếu có MBR hợp lệ

Điều kiện build và giới hạn kích thước

  • Build firmware ARC cần devkitPPC
  • libgcc.a được biên dịch cho powerpcle phải nằm trong arcgrackle/gccle
    • Tính đến 2024-07-12, có thể tìm thấy file cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps trên mirror Void Linux
  • Biến môi trường DEVKITPPC thường phải được đặt tới thư mục devkitPPC, thường là /opt/devkitpro/devkitPPC
  • Thứ tự build là big endian libc, ARC firmware loader, little endian libc, rồi ARC firmware
    • Mac99 dùng các thư mục arcloader_unin, arcunin/baselibc, arcunin
  • Cần thay thế stage1.elfstage2.elf trong image release
  • Khi tạo lại image từ bản dump thư mục, cần tạo hybrid HFS+ISO image, đặt thư mục System ở trạng thái blessed và đặt file type của BootX thành tbxi
  • stage1.elf phải không quá 16KB, stage2.elf phải không quá 224KB
  • Việc build bootloader Old World hãy tham khảo readme tương ứng, còn việc tạo ISO image Old World hãy tham khảo OldWorldIsoBuilder

Mã đã dùng và dự án tham khảo

  • libc dùng baselibc
  • ELF loader và makefile được lấy từ The Homebrew Channel và chỉnh sửa
  • Một số mã PowerPC mức thấp, triển khai console framebuffer firmware ARC và font được lấy từ libogc và chỉnh sửa
  • Một số driver firmware ARC, IDE và USB được lấy từ OpenBIOS và chỉnh sửa
    • Driver USB của OpenBIOS được lấy từ coreboot
  • Triển khai hệ thống file ISO9660 nội bộ firmware ARC được dùng sau khi chỉnh sửa lib9660
  • Triển khai hệ thống file FAT nội bộ firmware ARC được dùng sau khi chỉnh sửa Petit FatFs

1 bình luận

 
GN⁺ 2024-07-13
Các ý kiến trên Hacker News
  • Vì hoài niệm nên tôi nhớ tới bài này: https://lowendmac.com/2014/next-openstep-and-the-triumphant-...
    Amelio và ban lãnh đạo cấp cao cần một hệ điều hành mới để cạnh tranh với thế lực khổng lồ Wintel, và các lựa chọn đã được thu hẹp còn cấp phép Windows NT, cấp phép Solaris, phát hành Copland ở quy mô thu gọn, mua Be rồi dùng BeOS, hoặc mua NeXT rồi dùng OpenStep

    • API của NeXT cũng đã được port để chạy trên Windows NT và Solaris của Sun, còn toàn bộ hệ điều hành NextStep cũng chạy bare-metal trên nhiều kiến trúc CPU
      Có phần giải thích rằng ban đầu nó chỉ chạy trên các workstation Motorola 68k của NeXT, rồi được port sang PC 32-bit Intel x86 “tương thích IBM”, workstation PA-RISC của Hewlett-Packard, và workstation SPARC của Sun Microsystems: https://www.wikipedia.org/wiki/OpenStep
    • Tôi chỉ muốn được thấy dù một lần timeline nơi Apple mua Be thay vì NeXT
    • Trong câu chuyện “kinh điển” hiện nay xoay quanh sự trở lại của Jobs, có vẻ thành công về mặt kỹ thuật của Mac OS 8/9 bị đánh giá khá thấp
      Mac OS X trước phiên bản 10.1 năm 2001 không dễ dùng trong thực tế, vậy mà iMac, iBook, PowerBook G3 vẫn thành công, nên hệ điều hành hẳn cũng đã đóng vai trò nào đó; nhưng những chuyện này hầu như bị bỏ qua trong các câu chuyện như vậy
      Có lẽ ký ức của tôi pha chút hoài niệm vì hồi 1997–2001 tôi là một thiếu niên mê Mac, nhưng từ chiếc Performa giữa thập niên 90 chạy 7.5 đến chiếc iMac cuối thập niên 90 chạy 9, đã có khá nhiều thay đổi
      Dù không phải là hệ điều hành của tương lai, từ góc nhìn người dùng cuối, 8.6/9 cảm giác tương đối hiện đại hơn Windows 95/98; còn giữa thập niên 90, chỉ là tương lai về mặt kinh doanh có vẻ u ám, chứ 7.5 cũng không hẳn tệ hơn 95
    • Rốt cuộc họ cũng gom những phần còn dùng được từ Copland và phát hành thành Mac OS 8
    • Tôi tò mò không biết lựa chọn “cấp phép Windows NT từ Microsoft rồi gắn một giao diện giống Mac lên đó” thực sự đã được cân nhắc nghiêm túc đến mức nào
      Các đề xuất khác đều hợp lý, riêng cái này trông đặc biệt lạc lõng, và thật may là nó đã không thực sự xảy ra
  • Cùng nhà phát triển đó năm ngoái cũng đã port PPC NT 4 lên Wii: https://www.youtube.com/watch?v=d8BpUpr1h9U

  • Một công việc thú vị. Chuẩn ARC https://en.wikipedia.org/wiki/ARC_(specification) từng được dùng để khởi động các máy Windows DEC Alpha, MIPS, v.v.
    Năm 1998, đặc tả EFI ban đầu của Intel lấy ARC làm mô hình và nguồn cảm hứng, và Intel Boot Initiative (IBI) cũng phần lớn trông giống ARC
    EFI, tức UEFI ngày nay, đại khái gần như là ARC cộng thêm các giao diện cài được dựa trên GUID theo kiểu MS COM https://en.wikipedia.org/wiki/Component_Object_Model, tức các protocol
    Một phần câu chuyện vất vả đó xuất hiện ở trang 8 của https://www.intel.com/content/dam/www/public/us/en/documents...

    • Chiếc Alpha của bạn cùng phòng tôi có firmware SRM, và chúng tôi đã dùng nó để khởi động NetBSD
      ARC có thể khởi động NT, nhưng SRM thì không: https://en.wikipedia.org/wiki/SRM_firmware
  • Windows NT thật sự rất thú vị. Nếu đang tìm một cuốn sách hay, tôi đề xuất Showstopper

    • Cuốn đó rất xuất sắc, có thể đặt cạnh Masters of Doom hay The Soul of a New Machine
  • Đúng lúc tôi đang tìm một lý do để bật chiếc bondi blue iMac G3 đời 1998 lên, thì thứ này xuất hiện; đúng là một dự án kỳ lạ, thô ráp và cực kỳ cụ thể

  • Bạn có thể giải thích bối cảnh được không? NT hiển nhiên là mã nguồn đóng và chắc cũng chưa từng được phát triển cho Mac, nên tôi tò mò thực chất cái này là gì
    Cũng không rõ khả năng kiếm được phần mềm là bao nhiêu. Phần lớn phần mềm NT có lẽ được biên dịch riêng cho Intel và mã nguồn cũng đóng

    • NT được thiết kế với tính khả chuyển trong đầu, nên ngay cả trong cùng một CPU, phần phụ thuộc từng máy cũng được tách bạch khá gọn gàng
      Vì vậy chỉ cần port phần đó thì các binary hiện có cho kiến trúc tương ứng sẽ chạy được
      Cốt lõi có ba phần. 1) Firmware khởi động ARC: NT được phát triển trên các hệ thống không phải x86 như i860, MIPS, và ARC là firmware khởi động mặc định. Trên x86, NTLDR đã mô phỏng nó cho đến trước Vista. Dự án này có vẻ cung cấp một môi trường tương thích ARC trên OpenFirmware, đồng thời còn làm một việc thú vị là khiến firmware khởi động giả vờ như có thiết bị lưu trữ để có thể đọc “đĩa mềm” driver ở giai đoạn đầu của quá trình cài đặt
      2) HAL.DLL: Ý tưởng là phần lõi NTOSKRNL độc lập với phần cứng, nên mỗi kiến trúc CPU có một binary. Nhưng kernel vẫn phải giao tiếp với timer hay bus thực tế, nên mã giao diện đó nằm trong HAL.DLL và bản phù hợp sẽ được sao chép trong quá trình cài đặt. Danh sách HAL x86-32 của Windows cũ có thể xem tại https://www.geoffchappell.com/studies/windows/km/hal/history.... Hiện nay bản dành cho AMD64 phần lớn đã được đưa vào trong kernel. Ở đây, kernel chính được giữ nguyên, còn halgoss đảm nhiệm phần xử lý đặc thù của Mac
      3) Driver thiết bị: sau khi NT chạy lên thì cần driver thực tế
      Đặc tả của 1) đã được biết nên có thể mô phỏng được, còn 3) có thể có DDK hoặc suy luận từ DDK khác. 2) có vẻ là phần cần nhiều hiểu biết nội bộ nhất, và tôi chưa xem nên không biết mã nguồn NT bị rò rỉ có đi xuống tới mức đó không
      Mức tương thích là các binary Win32 PowerPC 32-bit, binary Win16 x86 16-bit, và các chương trình DOS x86 chạy trong DOS box của NT4. Win32 x86 thì không được, chỉ Alpha mới có trình giả lập Win32 x86
    • NT4 từng được phát triển cho các kiến trúc PowerPC, MIPS và Alpha. Một phần đáng kể mã nguồn NT4 cũng từng bị rò rỉ https://www.neowin.net/news/exclusive-windows-2000--windows-...
      Không có nghĩa là tác giả đã dùng mã đó, nhưng nếu có những mã nguồn như vậy thì công việc này hẳn sẽ dễ hơn nhiều
      Hoặc có thể họ đã reverse engineer bootloader theo kiểu clean-room, hoặc thông tin công khai đã đủ để không cần biết mã nội bộ của Windows
      Codebase PPC không nhắm trực tiếp đến Mac mà dành cho các hệ thống khác của IBM/Motorola, nhưng vì là nền tảng “chung”, nên bản thân các binary trong ISO NT4 không cần sửa đổi
      Và trên GitHub có thể tìm thấy mã nguồn trong nhiều repository
    • Xbox 360 dựa trên PowerPC và chạy một biến thể của Windows 2000, tức hệ điều hành NT: https://en.wikipedia.org/wiki/Xbox_360_technical_specificati...
  • Tôi từng rất thích Windows NT đời cũ. Nó đủ nhẹ để chạy trên phần cứng cấu hình thấp cuối thập niên 90, và ổn định hơn Windows 95 rất nhiều

    • Nếu Microsoft nghiêm túc thúc đẩy POSIX subsystem, có lẽ tôi đã không cần động đến Linux chỉ vì các bài tập UNIX
      Thay vào đó tôi đã dùng dual boot cả hai
  • Rất tuyệt, và tôi háo hức được trải nghiệm lại thời phải từ bỏ toàn bộ game DOS

    • Đây không phải trình giả lập x86 có thể chạy DOS box, mà là NT chạy native trên PPC
      Vì vậy đáng tiếc là không chơi game DOS được
    • Windows 2000 và XP hỗ trợ khá tốt nhiều game MS-DOS nếu cài VDMSound
  • Tôi thích file bootloader này: https://github.com/Wack0/maciNTosh/blob/main/boot_files/Syst...
    Nói thêm là cú pháp Open Firmware quá khó đọc. Nó bị ghét không phải vô cớ, và đó là một cơ hội bị bỏ lỡ

  • Việc viết một NT HAL mới thật sự là một thành tựu ấn tượng. Xin bày tỏ sự kính phục
    Tài liệu nhiều nhất cũng chỉ lác đác, và tôi nghĩ các HAL hiện có cũng có nhiều lỗi chưa biết chỉ là may mắn chưa lộ ra