Skip to content

GBA 硬件模拟

GBA 的完整硬件地址空间被映射进 WASM 模块的线性内存,让编译为 WebAssembly 的游戏代码像在真实硬件上一样按地址读写。app.js 负责建立内存视图、处理输入与 Flash 存档;图形渲染则由 WASM 内的 src/wasm_display.c 直接读取这片内存完成。

涵盖内容

模块说明
硬件概念GBA 内存映射、I/O 寄存器、VRAM、OAM、Palette 结构
练习地址映射分析、像素渲染追踪、寄存器位域解析
代码走读逐段解读 app.js 中的内存视图/输入/Flash 实现(渲染见渲染主题)

核心概念

GBA(Game Boy Advance)的内存地址空间通过 WASM 线性内存进行模拟。游戏代码直接读写这些固定地址,以下关键硬件区域都位于 WASM 的 256MB 线性内存中:

地址范围硬件区域大小说明
0x04000000I/O 寄存器~1KB显示控制、定时器、DMA、按键输入
0x05000000Palette RAM1KB256 色调色板(BG + OBJ 各 256 色)
0x06000000VRAM96KB背景和精灵图块数据
0x07000000OAM1KB128 个精灵属性数据
0x0E000000Flash128KB游戏存档存储

游戏代码使用与原版 GBA 相同的地址进行读写操作。普通读写(I/O 寄存器、VRAM、OAM、调色板)直接落在 WASM 线性内存里,渲染器(wasm_display.c)每帧再从这片内存读取数据合成画面;Flash 存档写入则由 app.js 的命令状态机拦截处理(见 存档系统)。

前置知识

知识点说明
十六进制地址能够理解 0x04000000 这样的内存地址表示
位运算了解与、或、移位等位操作(寄存器操作的基础)
WebAssembly 线性内存了解 WASM 模块的内存模型
WASM 编译管线了解游戏代码如何编译为 WASM

学习路径

下一步资源转换管线 — 了解 GBA 图形资源如何转换为 WASM 可用的数据格式。