Appearance
存档系统 (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 内存模型 -- 理解内存地址与类型化数组
localStorageAPI 基本用法(getItem、setItem)- Base64 编码原理(可选)
学习路径
下一步: 渲染管线 -- 了解 VRAM 数据如何渲染为屏幕画面。