案例
OpenDMCUFirm:重新实现的 Wii U DMCU 显示固件
用 C 语言重新实现 Wii U 的 DMCU 固件。DMCU 是其 AMD 图形控制器中兼容 M68HC11 的显示微控制器,在 Wii 模式下读取视频接口(VI)状态,并配置显示输出、去隔行、缩放与过扫描。README 称这项工作基于对原固件的逆向工程,但并非逐字节一致的反编译,并说明项目仍在开发中。构建出的镜像经 evWii 插件载入后,在 Wii 模式下替代原厂固件。
使用条件与局限
- 所审阅的 main 提交没有发行版或标签。README 称这是仍在开发中的重新实现,预计会有问题;近期提交为寄存器和状态字段命名,其中一次提交称某个函数已完全一致,此前缺失的一个变量曾在 240p 游戏中引发问题。link.ld 警告 Nintendo 的 nn_cmpt 会直接向 DMCU 的 ERAM 中段写入数值,可能覆盖代码。
- 构建只使用项目自己的 C 源码,不需要原始固件。运行需要装有 Aroma 插件环境和 evWii 的 Wii U:将 dmcu.d.hex 放入 SD 卡的 wiiu 文件夹,再用 evWii 的“Load DMCU Firmware from SD Card”选项在 Wii 模式下载入。
- 编译器为 GNU 68HC11/12 软件包中的 GCC 3.3.6-m68hc1x-20060122。Dockerfile 在 Ubuntu 24.04 上用经校验和核对的 Windows 安装程序在 Wine 下配置该工具链,也提供预构建的 garyodernichts/dmcubuilder 镜像;再由 Python 3 运行 hexconv.py,将 S19 输出转换为 DMCU 的 hex 格式。
- CI 只在该容器中构建 dmcu.d.hex 并作为构件上传。所审文件中没有测试套件、硬件测试记录,也没有与原厂固件行为的比较;本次审阅未构建或运行任何程序。
- 仓库没有许可证文件,GitHub 也未识别出许可证;项目源文件只注明属于 OpenDMCUFirm。随附的 68HC11 与 stdint 头文件保留各自的 FSF GPL 和 BSD 声明,evWii 采用 GPL-2.0,原始固件仍受其自身权利约束。所审来源未确立 AI 或 REA 的使用。
关于此条目
- 类型
- 案例
- 类别
- 独立重建案例
- 关联
- 独立重建项目
- 目标
- 固件
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- Makefile GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- Dockerfile GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- hexconv.py GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- link.ld GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- source/dmcu.c GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- .github/workflows/build.yml GitHub · GaryOderNichts/OpenDMCUFirm · 修订 9e6747f
- https://github.com/GaryOderNichts/OpenDMCUFirm/commit/58ab01fe071f0c6df8798b8b178f8160d1c3cacf
- README.md GitHub · GaryOderNichts/evwii · 修订 978b006