Skip to content

学习日志

进度总览

  • 初始化学习站点
  • 完成项目架构概览主题
  • 完成 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 子模块

子模块指针ed25aa7c58755bb3bc(上游 master 分支,fast-forward 23 个提交,+1416 / −153 行)

上游默认分支为 master(非 main),故本次同步执行 git pull origin master

重要变更分类

  • 存档系统(功能新增) ⭐:新增 .sav 文件导入/导出 UI(Download/Upload),加入遗留存档迁移与规范化(normalizeSaveForCurrentBuild)、背包加密密钥修复;include/global.h 通过 #if WASM padding 对齐存档结构体布局,使 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 子模块

子模块指针8755bb3bcb1843200d(上游 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.jsrender() 退化为两行——WasmRenderFrame() + ctx.putImageData()。同时新增 HBlank DMA 扫描线寄存器采样(RefreshHblankDmaGpuRegs / ScanlineGpuReg),还原逐行滚屏 / 逐行变色等扫描线特效。
  • 原生前端(架构新增) ⭐:新增 tools/native/——用 WABT wasm2c 把同一份 WASM 转回 C,再链接各自宿主,复用同一游戏与渲染核心。native_engine.c/.h(无头引擎核心:w2c_env_* BIOS 垫片、输入、存档、帧缓冲)、raylib_main.cmake native-raylib 桌面前端)、bench_main.cmake 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.mknative-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 暂存。