Windows NT cho Power Macintosh
(github.com/Wack0)- 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,7có chuột nội bộ dùng USB nên hiện chuột chưa hoạt động
- iBook G4 mid-2005
- PowerBook G4
- Các mẫu PowerBook G4 từ early 2005 trở về sau như
PowerBook6,8,PowerBook5,6trở 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ế
- Các mẫu PowerBook G4 từ early 2005 trở về sau như
- 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.syscủ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
- Các hệ thống Old World như PowerMac G3 beige, PowerBook G3 Wallstreet/PDQ dùng
- Với hệ thống Mac99, có thể ghi image vào USB drive
- Trong menu firmware ARC, vào
Run firmware setup→Repartition 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ặccd02: - Ở 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
- HAL chipset Gossamer là
- Ở bước driver thiết bị lưu trữ dung lượng lớn, cần nạp hai driver
Mac I/O IDE ControllerPowerMac 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)
- NT 4 là
- 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ànhNo 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
Esclú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 setup→Reboot to OSX install or OS8/OS9trong 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ệ
- Cần dùng tùy chọn
Đ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 chopowerpclephải nằm trongarcgrackle/gccle- Tính đến 2024-07-12, có thể tìm thấy file
cross-powerpcle-linux-gnu-0.34_1.x86_64.xbpstrên mirror Void Linux
- Tính đến 2024-07-12, có thể tìm thấy file
- Biến môi trường
DEVKITPPCthườ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
- Mac99 dùng các thư mục
- Cần thay thế
stage1.elfvàstage2.elftrong 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ủaBootXthànhtbxi stage1.elfphải không quá 16KB,stage2.elfphả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
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
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
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
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...
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
Đú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
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
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
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
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
Vì vậy đáng tiếc là không chơi game DOS được
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