Windows NT 用于 GameCube/Wii
摘要
该项目将 Windows NT 移植到任天堂 GameCube 和 Wii 主机,支持多种输入设备和驱动程序。它是开源的,可在 GitHub 上获取。
查看缓存全文
缓存时间: 2026/06/23 04:40
Wack0/entii-for-workcubes
来源: https://github.com/Wack0/entii-for-workcubes
加入我们的 Discord 服务器 (https://discord.gg/S8jWsc4SAq)
适用于 GameCube/Wii 的 Windows NT
支持以下系统:
- Nintendo GameCube
- Nintendo Wii
- Wii Mini 需要使用 SD 卡硬改(暂时)
- Nintendo Wii U(目前仅限 vWii)
以下系统理论上支持,但由于硬件罕见,未经测试:
- Broadway 评估板
- Cortado 板
以下系统永远不会支持:
- 仅有 4MB 可用 RAM 的早期 Dolphin 开发硬件
现有驱动
- Flipper 中断控制器(HAL 中)
- 用于 ARC 固件和 HAL 的 Flipper 视频接口控制台帧缓冲(YUV XFB)
- NT 下的 Flipper GPU RGB 帧缓冲(文本安装阶段写入 EFB,GDI 阶段写入纹理;垂直同步中断时复制到 XFB)
- Flipper 串行接口(GameCube 手柄端口),支持以下设备:
- GameCube ASCII 键盘控制器,以及未发布的英语/欧洲变体(通过逆向《梦幻之星在线》发现);后者完全未测试,前者未在真实硬件上测试
- GameCube 手柄,映射如下:
- 在 ARC 固件下:左摇杆和方向键映射为上下方向,A 键映射为回车,B 键映射为 Esc,X 键映射为字母 ‘S’
- 在 NT 文本安装阶段下:左摇杆和方向键映射为上下方向,C 摇杆映射为向上/向下翻页,A 键映射为回车,B 键映射为 Esc,X 键映射为 F8,Y 键映射为字母 ‘C’,Z 键映射为字母 ‘L’
- 在 NT GDI 下:左摇杆移动鼠标,A 键映射为鼠标左键,B 键映射为鼠标右键,L+R 同时按下映射为 Ctrl+Alt+Del,C 摇杆用于选择键盘扫描码(1-9、0、a-z),X 键确认所选扫描码。数字排在列表前面,因此纯数字文本框(如输入 CD Key)仍可正常工作。
- N64 Randnet 键盘,完全未测试,可能有兼容问题
- N64 鼠标(仅限 NT 下),完全未测试,可能有兼容问题
- N64 手柄(完全未测试,可能有兼容问题),映射如下:
- 在 ARC 固件下:左摇杆和方向键映射为上下方向,A 键映射为回车,B 键映射为 Esc,Z 键映射为字母 ‘S’
- 在 NT 文本安装阶段下:左摇杆和方向键映射为上下方向,C 摇杆映射为向上/向下翻页,A 键映射为回车,B 键映射为 Esc,Z 键映射为 F8,L 扳机映射为字母 ‘C’,R 扳机映射为字母 ‘L’
- 在 NT GDI 下:左摇杆移动鼠标,A 键映射为鼠标左键,B 键映射为鼠标右键,L+R 同时按下映射为 Ctrl+Alt+Del,C 下和 C 上用于选择键盘扫描码(1-9、0、a-z),开始按钮确认所选扫描码。数字排在列表前面,因此纯数字文本框(如输入 CD Key)仍可正常工作。
- Flipper 外部接口(SPI 总线),支持以下设备:
- RTC
- USB Gecko(仅限内核调试器)
- SD Gecko 或兼容设备
- IDE-EXI 或兼容设备(未在真实硬件上测试)
- Vegas IOP 进程间通信
- Vegas SDMC 控制器(通过 IOS)
- Vegas USB(OHCI/EHCI)控制器(通过 IOS),支持以下设备:
- USB 键盘
- USB 鼠标
- USB 大容量存储(目前存在一些问题,部分设备可能无法工作)
- 不支持 USB 设备热插拔。要使用 USB 设备,必须在启动 ARC 固件前将其插入。
软件兼容性
支持 NT 3.51 RTM 及以上版本。NT 3.51 测试版(build 944 及以下)需要内核补丁才能运行,因为存在处理器检测错误。NT 3.5 永远不会兼容,因为它仅支持 PowerPC 601。 (理论上,NT 3.51 PMZ 中的额外挂起/休眠功能可以兼容,但实际需要重新实现所有相关驱动。)
安装
准备工作
- 从发布页面获取二进制文件,解压到 SD 卡(或 EXI-IDE 设备)
- 将 NT 3.51 或 4.0 ISO 复制到
sd:\nt\disk00.iso - 在
sd:\nt\disk00.img创建一个所需大小的原始磁盘镜像 - 我使用qemu-img create disk00.img 2G,可根据需要调整大小。注意 FAT32 分区的最大文件大小为 4GB。 - 在 GameCube 上,从 Swiss 加载
arcldr_dol.dol;在 Wii/vWii 上,从 Homebrew Channel 加载arcldr。
分区磁盘
- 进入 ARC 固件菜单后,选择
运行固件设置,然后选择为 NT 安装重新分区磁盘或磁盘镜像。 - 选择你之前创建的磁盘镜像。
- 按 Y(键盘)、X 按钮(GameCube 手柄)或 Z 按钮(N64 手柄)确认分区操作。
- 完成后,分区程序会提示
按任意键重新启动。这应该会重启系统,或返回加载器,你可以再次加载arcldr。
安装 NT
- 选择
从 cd00 运行 NT 安装程序。- 你将看到消息
安装程序无法确定你的计算机类型。 - 选择
其他(默认选中选项),当提示插入硬件支持磁盘时直接按回车(或 A 按钮)。 - 从列表中选择 HAL,目前只有一个选项:
Nintendo GameCube, Wii and Wii U (vWii)。
- 你将看到消息
- 接下来你会看到消息
安装程序无法确定系统中安装的一个或多个大容量存储驱动类型。此时至少需要加载两个驱动。- 要加载驱动,按
S(GameCube 手柄的 X 按钮,N64 手柄的 Z 按钮)选择驱动,从列表中选择其他,当提示插入硬件支持磁盘时按回车(A 按钮),然后选择驱动。- 在 Wii 或 Wii U 上使用正面 SD 卡槽时,需要
Nintendo Wii SD Slot (via IOS) [Disk Images] - 在 Wii 或 Wii U 上使用任何 USB 设备(键盘、鼠标或大容量存储)时,需要
Nintendo Wii USB (via IOS) - 在 GameCube 或 Wii 上使用插入 GameCube 手柄端口的设备时,需要
Nintendo GameCube Controller Ports - 在 GameCube 或 Wii 的内存卡槽(或 GameCube 底部的串行端口)中使用 SD Gecko(或兼容设备)或 IDE-EXI(或兼容设备)时,需要
SD Gecko or IDE-EXI and Compatible [Disk Images]
- 在 Wii 或 Wii U 上使用正面 SD 卡槽时,需要
- 简化说明:在 GameCube 上只需最后两个;在 Wii U vWii 上只需前两个;在 Wii 上需要前两个,如果使用或不使用 GameCube 手柄端口/内存卡槽,则可能需要后两个。
- 要加载驱动,按
- 你会看到消息
安装程序无法确定系统中安装的显示适配器类型。从列表中选择其他,当提示插入硬件支持磁盘时按回车,然后根据你安装的操作系统选择正确的选项。- 列表中有两个选项:
ArtX Flipper, ATI Vegas, AMD Bollywood (NT 4)适用于 NT 4,ArtX Flipper, ATI Vegas, AMD Bollywood (NT 3.x)适用于 NT 3.51。
- 列表中有两个选项:
- NT 将启动,文本安装阶段开始。按步骤完成文本安装。
- 在
安装程序确定你的计算机包含以下硬件和软件组件页面,将键盘从未知改为XT, AT 或增强型键盘(83-104 键),将指针设备从未知改为无鼠标或其他指针设备。 - 从分区列表中选择
C:驱动器。如果你选择创建大小不超过 2GB 的 NT 分区,则需要格式化。 - 如果你选择创建超过 2GB 的 NT 分区,磁盘检查过程会发现错误,需要重启。你需要从 Swiss 或 Homebrew Channel 重新启动 ARC 固件,然后再次按照“安装 NT”的步骤回到此位置。
- 第二次尝试时,磁盘检查会成功,因此在 NT 文本安装分区选择器中再次选择
C:分区。
- 第二次尝试时,磁盘检查会成功,因此在 NT 文本安装分区选择器中再次选择
- 按照标准流程完成 NT 的文本和图形安装阶段。
已知问题
- 系统有时可能在重启时卡住。
- 部分 USB 大容量存储设备存在问题。
- GDI 驱动使用未优化的缓慢代码将 GDI 位图缓冲区复制到 GPU 纹理缓冲区。
- ARC 固件和 NT 驱动支持 SD 卡/EXI-IDE 设备上的 exFAT 磁盘镜像,但加载器目前不支持从 exFAT 加载 ARC 固件本身。
- 加载器目前不支持从 USB 大容量存储设备加载 ARC 固件。
- 请注意,与其他磁盘接口相比,EXI 总线较慢,因此使用 SD Gecko/EXI-IDE 会导致速度变慢。这在 GameCube 上安装 NT 时最为明显,因为这是唯一可用的选项。
构建 ARC 固件
你需要 devkitPPC。此外,必须有一个为 powerpcle 编译的 libgcc.a 放在 arcfw/gccle 中。如果需要寻找,它应存在于任何 Void Linux 镜像上,截至 2024-07-12 的搜索文件名为 cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps – 通过 zstdcat cross-powerpcle-linux-gnu-0.34_1.x86_64.xbps -o cross-powerpcle-linux-gnu-0.34_1.x86_64.tar 解压,然后从 tarball 中提取文件:usr/lib/gcc/powerpcle-linux-gnu/10.2/libgcc.a。
- 确保
DEVKITPPC环境变量指向你的 devkitPPC 目录,通常为/opt/devkitpro/devkitPPC - 构建 ARC 固件加载器:
cd arcldr ; make -f Makefile.wii ; make -f Makefile.gc ; cd .. - 构建小端 libc:
cd arcfw/baselibc ; make ; cd ../.. - 构建 ARC 固件本身:
cd arcfw; make ; cd ..
构建 HAL/驱动
你需要 peppc (https://github.com/Wack0/peppc)。此外,NT4 DDK 中的 PowerPC lib(https://archive.org/details/94396011997WindowsNTDDKForWinNT4.0WorkstationUS.iso.7z)(ddk/lib/ppc/free/*.lib) 必须放在 lib 目录中。工具链的其余部分(用于汇编 C 预处理的 VC6 PPC CE 交叉编译器,因为 GCC CPP 对多行宏处理不当;汇编器 PASM.EXE,已修补单分支以跳过“dump 语句”;MSVC 4.2 的资源编译器和链接器及其依赖;NT 3.51 DDK 中的 SPLITSYM.EXE 用于从可执行文件中拆分 COFF 调试符号)位于 msvc-ppc 目录中。
要构建 NT 3.5x GDI 驱动 fpgx35dll,你还需要 NT 3.51 DDK 中的 PowerPC winsrv.lib。
头文件已包含,来自不同地方,并针对此工具链或向后兼容性做了少许修改:
nt4/sdk– NT4 SDKnt4/ddk– NT4 DDK(包括src/*/inc目录中的所有头文件)nt4/crt– VC++ 4.0(CRT 头文件)nt4/hal– 由于缺少公开转储,此文件夹包含有证据表明曾包含在 NT4 halkit 中的头文件(减去nthal.h,后者位于 HAL 源文件夹中,并已修改以支持向后兼容)。其中一些已修改,以便驱动程序在执行ntddk.h后可以包含它们(从而使驱动可以调用HalDisplayString进行调试,或使用LOADER_PARAMETER_BLOCK判断是否在文本安装阶段运行)。
使用的 makefile 源自 devkitPro。
确保 PEPPC 环境变量设置为 peppc-build/toolchain/bin 目录。
你必须先构建 HAL(cd halartx; make; cd ..),然后才能构建其他驱动,因为 HAL 实现了导出的 IOP IPC 和 EXI 驱动(因为 HAL 本身使用它们)。
致谢
- 使用的 libc 是 baselibc (https://github.com/PetteriAimonen/Baselibc)
- ELF 加载器、arcfw makefile(以及一些缓存失效函数)改编自 The Homebrew Channel (https://github.com/fail0verflow/hbc)
- 其他 makefile 改编自 devkitPro (https://github.com/devkitPro/devkitppc-rules)
- 一些底层 PowerPC 内容,以及 ARC 固件帧缓冲控制台实现和字体,改编自 libogc (https://github.com/devkitPro/libogc)
- ARC 加载器中的 EXI-IDE 驱动改编自 Swiss (https://github.com/emukidid/swiss-gc/blob/master/cube/swiss/source/devices/fat/ata.c)
- ARC 固件中的 IOS IPC 驱动改编自 The Homebrew Channel 的重载存根 (https://github.com/fail0verflow/hbc/blob/master/channel/channelapp/stub/ios.c)
- ARC 固件中的 ISO9660 文件系统实现是 lib9660 (https://github.com/erincandescent/lib9660),稍作修改。
- ARC 固件中的 FAT 文件系统实现是 Petit FatFs (http://elm-chan.org/fsw/ff/00index_p.html),稍作修改;此外,在 ARC 及 iossdmc.sys 和 fpexiblk.sys 中,使用完整版 FatFs (http://elm-chan.org/fsw/ff/) 读取 FAT16/FAT32/exFAT 分区上的底层磁盘镜像。
- GDI 驱动改编自 NT4 DDK 示例
framebuf。 - 各种驱动改编自 libogc 中的对应驱动。
相似文章
WinCE64 – Windows CE 2.11 for N64
一个爱好项目,将Windows CE 2.11移植到真正的任天堂N64硬件上运行,使用自定义的HAL和驱动程序,支持完整的桌面和声音功能。
看 Windows CE 在 N64 上运行
开发者 Throaty Mumbo 借助 Nintendo 64 的 MIPS 处理器和 1MB 内存,将 Windows CE 原生移植到了该主机上,并在 YouTube 和 GitHub 上记录并公开了整个过程与项目文件。
Nintendo Wii U games running from a 1980's Bernoulli disk [video]
通过SCSI转USB适配器将1980年代的90MB伯努利磁盘连接到Wii U,成功安装并运行了Game Boy Advance游戏《银河战士 融合》,展示了复古存储介质与现代游戏机的兼容性实验。
Windows CE Dreamcast 社区版 (wince-dc)
一个适用于 Sega Dreamcast 的 Windows CE 社区版,它将光盘上的 CE 运行时转变为具有内置工具链的可用多任务桌面。
Show HN:Decomp Academy – 学习将 GameCube 游戏反编译为匹配的 C 代码
Decomp Academy 是一个交互式在线平台,教会用户如何通过编写字节匹配的 C 代码,针对 2001 年 MWCC 编译器生成的真实 PowerPC 汇编输出来反编译 GameCube 游戏。