Appearance
WASM 内存模型 (WASM Memory Model)
引言: 在 pokeemerald-wasm 中,整个 GBA 的 256MB 地址空间被映射为 WebAssembly 的一块平坦线性内存。理解这块内存的布局,是掌握游戏如何在浏览器中运行的关键。从 I/O 寄存器到 VRAM,从调色板到 Flash 存档,所有 GBA 硬件资源都在这片内存中有明确的地址。
涵盖内容
| 模块 | 说明 |
|---|---|
| 内存模型概念 | 256MB 线性内存布局与 GBA 地址映射 |
| 代码导读 | app.js 中内存创建与视图的代码实现 |
| 练习题 | 动手计算与追踪内存操作 |
核心概念
- 平坦线性内存 (Flat Linear Memory):WebAssembly 使用一块连续的字节数组作为内存,pokeemerald-wasm 初始化时请求 256MB(
initial-memory=268435456),与 GBA 的完整地址空间一一对应。 - GBA 地址映射:GBA 硬件寄存器和资源通过固定地址访问——
0x04000000为 I/O 寄存器,0x05000000为调色板 (Palette) RAM,0x06000000为 VRAM(视频 RAM),0x07000000为 OAM(精灵属性),0x0E000000为 Flash 存档。 - SharedArrayBuffer:为了在主线程和可能的 Worker 之间共享内存,使用
SharedArrayBuffer创建 WASM 内存。 - Uint8Array 视图:通过
Uint8Array和Uint16Array等类型化数组视图来读写 WASM 内存中的 GBA 数据。
前置知识
- 基本的计算机内存概念(地址、字节、字)
- 十六进制地址表示法
- JavaScript 类型化数组(
Uint8Array、Uint32Array等)
学习路径
下一步: 输入系统 -- 了解键盘/触摸输入如何映射到 GBA 按键。