开发者生态
morning
WinCE64 – 适用于 N64 的 Windows CE 2.11
2026-05-15
1 阅读
xyru
Nintendo 64 Stock 上的 Windows CE 2.11 在真正的 Nintendo 64 上运行的 Microsoft Windows CE 2.11。自定义 HAL 将未修改的 nk.lib 内核放入 VR4300 上,调出 CE 2.11 GWES 桌面和 shell,将 EverDrive-64 X7 的 SD 卡安装在 \SDCard 下,将 N64 控制器视为鼠标,通过标准 CE Wave 堆栈通过 N64 AI 硬件播放声音,以及直接从 SD 卡运行第三方 CE 2.11 EXE。这是一个业余爱好逆向工程项目:Microsoft 没有官方的 N64 CE 2.11 端口。未修改的 nk.lib 下的所有内容(HAL、OAL、显示驱动程序、FSD、kbd/鼠标 PDD、wave PDD、RDP 加速 GDI 填充、ed64-X7 驱动程序)都是此存储库的一部分。 https://www.youtube.com/watch?v=eGS9su_inBY Status 中精选 完全在真正的 N64 + EverDrive-64 X7 上启动。工作:桌面、任务栏、文件浏览器;窗口拖动、close-X、模式对话框 N64 控制器驱动可见光标; A = 左键单击,B = 右键单击 \SDCard\* 通过 FatFS 通过 X7 盒安装 SD Wave 音频通过 sndPlaySoundW / waveOutOpen → N64 AI 可从 SD 卡启动的第三方 CE 2.11 EXE(例如 BeziersCE) RDP 加速 3D 演示 (cube3d.exe) 直接通过 RDP 架构光栅化平面阴影三角形 未修改的 nk.lib 是主干:它拥有PSL调度、调度和TLB。围绕它,标准 CE 2.11 用户模式模块( coredll.dll 、 gwes.exe 、 filesys.exe 、 device.exe 、 shell.exe )从 ROM 映像中加载,无需更改。定制部分包括:HAL / OAL ( bsp/hal/ ) — 启动、异常向量、MIPS 启动、定时器、USB 调试、两个 LE 模式 RDRAM 部分字怪异解决方法。显示驱动程序 ( bsp/drivers/display/ ) — VI 帧缓冲区 + RDP 填充加速 + 软件光标合成器,填补了 CE 2.11 的分割 CURSOR.LIB / MCURSOR.LIB 在非覆盖硬件上留下的空白。鼠标/键盘 PDD ( bsp/drivers/kbdmouse/ ) — SI Joybus poll,解码 N64 控制器和官方 N64 鼠标。 SD 文件系统 ( bsp/drivers/sdfsd/ ) — FatFS 支持的 FSD,注册在 \SDCard 下。将 libdragon 的 libcart 替换为基于 PI-DMA 的 EverDrive-X7 驱动程序 ( edx_x7.c ),以避免在仿真中不可见的真实硬件购物车总线写入后读取怪癖。 Wave PDD ( bsp/drivers/wavedev/ ) — 轮询模式 AI 驱动程序,位于库存 waveapi.dll 下。轮询而不是中断,因为 MI_INTR_MASK_AI 会停止真实硬件上的 SysAD 总线。 commctrl.dll ( bsp/drivers/commctrl/ ) — CE 2.11 的 commctrl.lib 忘记提供的一个小型 DllMain,因此微调控件(msctls_updown32 类)实际上已注册。 Shell ( bsp/shell/ ) — Win9x 风格的桌面、任务栏、文件浏览器。 RDP 3D 库 ( bsp/lib/rdp3d/ ) — 用户 EXE 的最小三角形光栅器;由 bsp/apps/cube3d/ 使用。对于较长的调试历史记录(缓存怪异、TLB 遍历、GWES 启动、CE 端波堆栈特性等),请参阅每个驱动程序中的源代码级注释。您将需要此存储库故意不提供任何 Microsoft 或任天堂专有的内容。您必须自己提供外部树并将它们放在此目录旁边(或将它们符号链接到其中): Path WhatWhere wince211_sdk/ Microsoft Windows CE 2.11 Platform Builder / Embedded Toolkit 早已绝版,但可以在线找到。 libdragon/ N64 homebrew 工具链( mips64-elf-gcc 、 n64.mk ) + FatFS 源 https://github.com/DragonMinded/libdragon — 克隆并运行其安装脚本,以便 $N64_INST 指向工具链。用于实际硬件部署的 EverDrive-64 X7 Cart https://krikzz.com 。加上 SD 卡上的官方 EverDrive 固件副本。主机端工具:Wine — SDK 的 CLMIPS.EXE / LINK.EXE / RC.EXE / ROMIMAGE.EXE 都在 Wine 下运行。在 Linux 上测试。 Python 3 与 libdragon 工具链中的 Pillow mips64-elf-gcc(用于引导加载程序 ROM)。 libftdi1 如果你想通过 USB 上传到真正的 X7 - 需要构建 diag/ed64_upload 。将 wince211_sdk/ 和 libdragon/ 放置在此目录旁边之后: bash bsp/build.sh 这将编译 HAL + 每个驱动程序 DLL,在 Wine 下运行 LINK.EXE 和 ROMIMAGE.EXE 以生成 bsp/build/nk.bin (库存 CE ROM 映像),然后链接到 bootloader/Makefile 以将其包装在 libdragon IPL3 蹦床中。输出:bootloader/n64ce.z64(约 3.5 MB,可直接由 X7 加载)。典型的干净构建在现代硬件上运行大约 30 秒;主要成本是 Wine 冷启动,构建脚本通过在整个运行过程中保持单个 wineserver 处于活动状态来摊销。在真正的 N64 + EverDrive-64 X7 上运行 构建 USB 上传器一次: cd diag && make ed64_upload 然后上传 + boot: diag/ed64_upload bootloader/n64ce.z64 # write + boot diag/ed64_upload --listen bootloader/n64ce.z64 # 还流 USB 调试 --listen 在上传后保持 FTDI 句柄打开,因此不会删除调试输出。仿真 早期开发使用 Ares 和一个针对 LE 模式 RDRAM 部分字怪癖的小型本地补丁。然而,这逐渐导致这个项目转变为“让我们改进 Ares”项目,而不仅仅是在真实硬件上进行测试。让它在阿瑞斯上工作