Hasty Briefsbeta

双语

Making Nintendo DS ROMs with Rust

9 days ago
  • #ROM Development
  • #Rust
  • #Nintendo DS
  • 项目最初计划用Rust为Game Boy Color开发游戏,但因技术难题转向Nintendo DS平台。
  • 由于LLVM缺少对Game Boy Color CPU的后端支持,不得不采用C代码转换的临时方案。
  • 转向Game Boy Advance开发时遭遇硬件问题(外壳发黄、电池腐蚀)。
  • 虽找到Nintendo DS Lite但需另购充电器,且上屏存在裂痕。
  • 用Rust开发NDS ROM的资源匮乏,多数资料涉及卡带生锈等无关问题。
  • 遵循类似GBA ROM的编译流程:构建对象→链接→生成可执行文件→制作ROM。
  • 使用BlocksDS进行ROM构建和编程,考虑为nds库创建bindgen绑定包。
  • 选定ARM9处理器作为开发目标,通过cargo init --lib初始化项目并配置cargo.toml。
  • 需使用nightly版Rust的-Zbuild-std=core功能,采用release构建避免调试版臃肿。
  • 在lib.rs中添加nostd环境所需的panic占位处理函数和主函数。
  • 通过BlocksDS提供的arm-none-eabi-gcc链接器,结合nds库和dsarm9规范文件进行链接。
  • 最后使用ndstool工具将ARM9可执行文件与预编译的ARM7文件合并生成ROM。
  • 尝试利用libnds内置C库的malloc功能实现小型分配器,以支持Rust标准库的部分功能。