Skip to content

存档系统 (Save System)

引言: Game Boy Advance 使用 Flash 存储芯片保存游戏进度(128KB,位于地址 0x0E000000)。在浏览器环境中,pokeemerald-wasm 通过 JavaScript 监控这块内存区域的写入,并将变化序列化为 Base64 字符串存储到 localStorage,实现了 GBA Flash 存档的完整模拟。

涵盖内容

模块说明
存档系统概念Flash 存储原理、存档流程、Base64 序列化
代码导读app.js 中存档加载/保存的代码实现
练习题存档系统的实践练习

核心概念

  • Flash 存储模拟:GBA 的 Flash 存储芯片(如 Macronix MX29L010)位于地址 0x0E000000,容量 128KB。它通过特定的命令序列(command sequence)进行写入和擦除操作,app.js 需要模拟这些命令以正确处理游戏的存档请求。
  • 扇区操作 (Sector Operations):Flash 存储以扇区(sector)为单位进行擦除,每次擦除一个扇区(典型大小 4KB 或 64KB),然后可以逐字节或逐字写入。擦除后扇区内容为 0xFF
  • Base64 序列化:将 128KB 的二进制 Flash 数据编码为 Base64 字符串,以便安全地存储在 localStorage 中(localStorage 只能存储字符串)。
  • 自动存档 (Auto-Save):检测到 Flash 写入操作后,自动触发序列化和 localStorage 存储,无需用户手动操作。

前置知识

  • WASM 内存模型 -- 理解内存地址与类型化数组
  • localStorage API 基本用法(getItemsetItem
  • Base64 编码原理(可选)

学习路径

下一步: 渲染管线 -- 了解 VRAM 数据如何渲染为屏幕画面。