Skip to content

项目架构概览

pokeemerald-wasm 的整体架构:从 pret/pokeemerald 反编译 C 源码出发,通过 Clang 编译为 WebAssembly。WASM 模块自身模拟 GBA 硬件(内存映射的 I/O 寄存器、VRAMOAMPalette、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 编译管线