Windows NT 用于 GameCube/Wii

Hacker News Top 工具

摘要

该项目将 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]
    • 简化说明:在 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 的文本和图形安装阶段。

已知问题

  • 系统有时可能在重启时卡住。
  • 部分 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 SDK
  • nt4/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

Hacker News Top

一个爱好项目,将Windows CE 2.11移植到真正的任天堂N64硬件上运行,使用自定义的HAL和驱动程序,支持完整的桌面和声音功能。

看 Windows CE 在 N64 上运行

Lobsters Hottest

开发者 Throaty Mumbo 借助 Nintendo 64 的 MIPS 处理器和 1MB 内存,将 Windows CE 原生移植到了该主机上,并在 YouTube 和 GitHub 上记录并公开了整个过程与项目文件。

Windows CE Dreamcast 社区版 (wince-dc)

Hacker News Top

一个适用于 Sega Dreamcast 的 Windows CE 社区版,它将光盘上的 CE 运行时转变为具有内置工具链的可用多任务桌面。