Skip to content

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,0x06000000VRAM(视频 RAM),0x07000000 为 OAM(精灵属性),0x0E000000 为 Flash 存档。
  • SharedArrayBuffer:为了在主线程和可能的 Worker 之间共享内存,使用 SharedArrayBuffer 创建 WASM 内存。
  • Uint8Array 视图:通过 Uint8ArrayUint16Array 等类型化数组视图来读写 WASM 内存中的 GBA 数据。

前置知识

  • 基本的计算机内存概念(地址、字节、字)
  • 十六进制地址表示法
  • JavaScript 类型化数组(Uint8ArrayUint32Array 等)

学习路径

下一步: 输入系统 -- 了解键盘/触摸输入如何映射到 GBA 按键。