Appearance
学习日志
进度总览
- 初始化学习站点
- 完成项目架构概览主题
- 完成 WASM 编译管线主题
- 完成 GBA 硬件模拟主题
- 完成资源转换管线主题
- 完成 WASM 内存模型主题
- 完成输入系统主题
- 完成存档系统主题
- 完成渲染管线主题
- 完成构建与部署主题
- 完成源码兼容与适配主题
Day 1 — 项目架构概览
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 2 — WASM 编译管线
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 3 — GBA 硬件模拟
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 4 — 资源转换管线
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 5 — WASM 内存模型
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 6 — 输入系统
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 7 — 存档系统
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 8 — 渲染管线
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 9 — 构建与部署
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
Day 10 — 源码兼容与适配
日期: 状态:
今日摘要
困惑与突破
- 困惑:
- 突破:
上游同步记录
2026-06-28 — 同步 pokeemerald-wasm 子模块
子模块指针:ed25aa7c5 → 8755bb3bc(上游 master 分支,fast-forward 23 个提交,+1416 / −153 行)
上游默认分支为
master(非main),故本次同步执行git pull origin master。
重要变更分类:
- 存档系统(功能新增) ⭐:新增
.sav文件导入/导出 UI(Download/Upload),加入遗留存档迁移与规范化(normalizeSaveForCurrentBuild)、背包加密密钥修复;include/global.h通过#if WASMpadding 对齐存档结构体布局,使 WASM 存档可与真实 GBA/模拟器.sav互通。 - 音频管线(架构新增) ⭐:新增构建时脚本
tools/generate_wasm_sound.py,将 MIDI/AGB 音频预生成为wasm_sound.h,修复进化/硬化/树果文本崩溃;Makefile 新增WASM_SOUND_HEADER目标与m4a.o依赖,WASM 编译新增-I $(WASM_BUILD_DIR)。 - 渲染修复:HBlank DMA、雾效、背景窗口、倒影等渲染问题修复(
web/app.js)。 - 构建修复:
maps.o/map_events.o显式依赖、地图数据依赖、wasm_asm_data.py战斗脚本别名与地图脚本移动目标处理。 - 游戏逻辑修复:宝可梦动画、战斗动画、轻松聊、队伍菜单、PC 仓库、飞翔地图光标等若干崩溃修复(属实现细节,未写入原理性笔记)。
已更新笔记:
- 存档系统概念 — 新增"存档文件导入/导出""存档迁移与规范化""存档结构对齐(#if WASM padding)"三节
- 存档代码导读 — 新增"存档文件导入/导出与迁移"代码导读,扩充关键函数索引
- 资源转换概念 — 新增"音频数据生成(generate_wasm_sound.py)"小节,更新资源管线总览图
- 知识地图 — 持久化层与资源层 mindmap、知识索引表补充存档互转与音频工具
备注:本次同步聚焦架构/功能变更更新对应笔记章节;纯 bug 修复未逐一写入,避免笔记退化为 changelog。子模块更新已 git add pokeemerald-wasm 暂存。
2026-07-31 — 同步 pokeemerald-wasm 子模块
子模块指针:8755bb3bc → b1843200d(上游 master 分支,fast-forward 20 个提交,+3667 / −574 行)
上游默认分支为
master(非main),故本次同步执行git pull origin master。
重要变更分类:
- 渲染架构迁移(重大架构变更) ⭐⭐:整条 GBA 图形渲染管线从
web/app.js(JavaScript)搬进 WASM 模块本身,新增src/wasm_display.c(627 行,#if WASM守卫)。模块现在导出WasmRenderFrame()(合成一帧)、WasmDisplayBuffer()/WasmDisplayBufferSize()(返回 RGBA 缓冲区);app.js的render()退化为两行——WasmRenderFrame()+ctx.putImageData()。同时新增 HBlank DMA 扫描线寄存器采样(RefreshHblankDmaGpuRegs/ScanlineGpuReg),还原逐行滚屏 / 逐行变色等扫描线特效。 - 原生前端(架构新增) ⭐:新增
tools/native/——用 WABTwasm2c把同一份 WASM 转回 C,再链接各自宿主,复用同一游戏与渲染核心。native_engine.c/.h(无头引擎核心:w2c_env_*BIOS 垫片、输入、存档、帧缓冲)、raylib_main.c(make native-raylib桌面前端)、bench_main.c(make native-bench无头基准测试)。Makefile 新增native-raylib/native-bench/native-kindle/clean-native目标,WASM 链接新增WASM_LDFLAGS/WASM_OPT_FLAGS。 - Kindle Scribe 前端(新增平台) ⭐:新增
tools/wasm_native_kindle.c(1137 行)+tools/kindle_kual/,make native-kindle产出 Linux 帧缓冲前端:灰度帧写/dev/fb0、读/dev/input/event*、经 HWTCON/MXCFB 或eips刷新电子墨水屏,支持KINDLE_CC/KINDLE_CFLAGS交叉编译。 - 基准测试框架(新增):
tools/native/run_bench.sh+bench_golden.json+performance.mk,native-bench从空白存档回放到大世界 / 菜单 / 战斗三场景,预热后精确计时 1,000,003 帧,用渲染前后的 FNV 哈希做正确性校验。 - Bug 修复:Master Ball 捕获概率、WASM 8bpp 精灵渲染等(属实现细节,未写入原理性笔记)。
- 其他:新增
AGENTS.md(项目维护指引)、.optimize-anything/任务脚手架。
已更新笔记:
- 渲染管线概览 / 渲染概念 / 渲染代码走读 / 渲染练习 — 全面重写:围绕
src/wasm_display.c重新组织,订正「app.js 用 JS 实现 PPU」的过时前提,函数名从 JS 映射到 C 等价物(TextBgPixel/ObjPixel/GbaColor/ActiveBlendColor/WindowMask/RenderTiled),新增「HBlank DMA 扫描线」一节;练习 2 顺带修正了一个 OAM 翻转位运算的事实错误 - 项目架构概览 / 架构概念 / 架构代码走读 — 订正运行时层 / 渲染管线归属(渲染在 WASM 内,非 app.js),更新帧渲染序列图、目录树与函数索引,补充三条原生构建路径
- 构建部署概念 — 新增「原生构建目标(wasm2c 管线)」整节,含 wasm→wasm2c→宿主流程序图与四条目标说明;订正
app.js描述 - 知识地图 — 架构全景 mindmap 的运行时层 / 渲染层、知识索引表的交互渲染与部署条目更新
- 跨主题订正「app.js 负责渲染」的过时表述(渲染已迁入 WASM):GBA 硬件代码走读(替换整段渲染走读、序列图、函数索引、性能节)、GBA 硬件概览 与 练习、内存模型代码走读 / 练习 / 概念、编译概念 / 编译代码走读、架构练习,统一改为「
WasmRenderFrame()在 WASM 内合成 RGBA,宿主只搬运」
备注:本次同步的渲染迁移是项目迄今最大的架构变化,按用户要求对 rendering/ 主题做了全面重写;project-overview / build-deploy / knowledge-map 做精准订正;并顺带清理了 gba-hardware / memory-model / wasm-compilation 中「app.js 负责渲染」的过时表述,避免与新架构自相矛盾。纯 bug 修复与脚手架文件未逐一写入。子模块更新已 git add pokeemerald-wasm 暂存。