Appearance
项目架构概览
pokeemerald-wasm 的整体架构:从 pret/pokeemerald 反编译 C 源码出发,通过 Clang 编译为 WebAssembly。WASM 模块自身模拟 GBA 硬件(内存映射的 I/O 寄存器、VRAM、OAM、Palette、Flash)并完成图形渲染;宿主端(浏览器
app.js、原生 Raylib / Kindle 前端)只负责输入、帧调度,以及把 WASM 合成的 RGBA 画面搬到屏幕。
涵盖内容
| 章节 | 核心主题 |
|---|---|
| 概念 | 分层架构、核心组件、数据流 |
| 练习 | 架构图绘制、组件交互分析 |
| 代码走读 | 入口点、构建系统、模块组织 |
核心概念
pokeemerald-wasm 采用边界适配(Boundary Adapter)架构,在不修改原始游戏源码的前提下,通过构建层、兼容层、运行时层三个边界实现 GBA → WASM 的跨平台移植:
- 构建层(Makefile):
make wasm使用clang --target=wasm32-unknown-unknown编译,-DWASM=1启用条件编译 - 兼容层(include/wasm/):C 标准库声明垫片,避免与 Clang 内建函数冲突
- 运行时层(web/app.js / 原生前端):输入映射、存档持久化、帧调度,以及把 WASM 合成的 RGBA 画面搬运到屏幕(Canvas / 纹理 / 帧缓冲)。注意:图形渲染(PPU)本身在 WASM 模块内(
src/wasm_display.c),不在宿主侧
前置知识
- C 语言编译流程基础
- WebAssembly 基本概念
- GBA 硬件架构基础(可选)
学习路径
读完本主题后,你将理解:
- pokeemerald-wasm 的整体分层架构和模块组织
- 一个游戏帧从 WASM 执行到 Canvas 渲染的完整流程
- 构建层、兼容层、运行时层之间的协作关系
- 项目如何保持与原始 GBA 构建路径的兼容
→ 下一步:WASM 编译管线