Appearance
pokeemerald-wasm 学习笔记 — 知识地图
项目概览
pokeemerald-wasm 是将 pret/pokeemerald(Pokemon Emerald 的完整反编译项目)重新编译为 WebAssembly 的项目。通过 Clang 的 wasm32-unknown-unknown 目标将 C 源码编译为 WASM;WASM 模块自身在 256MB 线性内存中复刻 GBA 硬件(VRAM、OAM、调色板、I/O 寄存器),并由 src/wasm_display.c 合成 240×160 RGBA 帧。宿主端(浏览器 app.js 或经 wasm2c 的 Raylib / Kindle 原生前端)只负责输入、帧调度和把 RGBA 搬到屏幕。
架构全景
学习路径
知识索引
构建与编译知识点
| 概念 | 主题 | 术语 |
|---|---|---|
| Makefile WASM 构建规则 | [[topics/wasm-compilation/ | WASM 编译管线]] |
| Clang wasm32 目标编译 | [[topics/wasm-compilation/concepts | WASM 编译概念]] |
| wasm-ld 链接配置 | [[topics/wasm-compilation/concepts | WASM 编译概念]] |
| WASM 模块导出(AgbMain, WasmRunFrame) | [[topics/wasm-compilation/concepts | WASM 编译概念]] |
硬件模拟知识点
| 概念 | 主题 | 术语 |
|---|---|---|
| GBA 地址空间映射 | [[topics/gba-hardware/ | GBA 硬件模拟]] |
| VRAM 视频内存结构 | [[topics/gba-hardware/concepts | GBA 硬件概念]] |
| OAM 精灵属性内存 | [[topics/gba-hardware/concepts | GBA 硬件概念]] |
| 调色板与颜色格式 | [[topics/gba-hardware/concepts | GBA 硬件概念]] |
| I/O 寄存器模拟 | [[topics/gba-hardware/concepts | GBA 硬件概念]] |
资源与数据知识点
| 概念 | 主题 | 术语 |
|---|---|---|
| INCGFX/INCBIN 资源扫描 | [[topics/asset-pipeline/ | 资源转换管线]] |
| GBA 汇编数据转 WASM | [[topics/asset-pipeline/concepts | 资源转换概念]] |
| 地图/事件/脚本数据转换 | [[topics/asset-pipeline/concepts | 资源转换概念]] |
| 音频数据生成(wasm_sound.h) | [[topics/asset-pipeline/concepts | 资源转换概念]] |
| 256MB 扁平内存模型 | [[topics/memory-model/ | WASM 内存模型]] |
交互与渲染知识点
| 概念 | 主题 | 术语 |
|---|---|---|
| 键盘/触摸输入映射 | [[topics/input-system/ | 输入系统]] |
| GBA 按键 → 宿主事件 | [[topics/input-system/concepts | 输入系统概念]] |
| 软件 PPU(wasm_display.c) | [[topics/rendering/ | 渲染管线]] |
| Tile 图块渲染 | [[topics/rendering/concepts | 渲染概念]] |
| Sprite 精灵渲染 | [[topics/rendering/concepts | 渲染概念]] |
| HBlank DMA 扫描线 | [[topics/rendering/concepts | 渲染概念]] |
| RGBA 帧导出 → 宿主搬运 | [[topics/rendering/code-walkthrough | 渲染代码走读]] |
持久化与部署知识点
| 概念 | 主题 | 术语 |
|---|---|---|
| Flash 存档 → localStorage | [[topics/save-system/ | 存档系统]] |
| Base64 序列化/反序列化 | [[topics/save-system/concepts | 存档概念]] |
| .sav 文件导入/导出 | [[topics/save-system/concepts | 存档概念]] |
| 存档迁移与规范化 | [[topics/save-system/code-walkthrough | 存档代码导读]] |
| 存档结构对齐(#if WASM padding) | [[topics/save-system/concepts | 存档概念]] |
| Cloudflare Workers 部署 | [[topics/build-deploy/ | 构建与部署]] |
| Wrangler 打包配置 | [[topics/build-deploy/concepts | 构建部署概念]] |
| wasm2c 原生构建(raylib/bench/kindle) | [[topics/build-deploy/concepts | 构建部署概念]] |
| 无头基准测试与黄金哈希 | [[topics/build-deploy/concepts | 构建部署概念]] |
| #if WASM 条件编译守卫 | [[topics/source-compat/ | 源码兼容与适配]] |
学习进度
- 项目架构概览
- WASM 编译管线
- GBA 硬件模拟
- 资源转换管线
- WASM 内存模型
- 输入系统
- 存档系统
- 渲染管线
- 构建与部署
- 源码兼容与适配