Skip to content

GBA 硬件模拟 — 概念

GBA 内存映射总览

I/O 寄存器

I/O 寄存器从地址 0x04000000 开始,控制 GBA 的所有硬件功能。以下是 WASM 版本中最关键的寄存器。

显示控制寄存器

寄存器地址说明
DISPCNT0x04000000显示控制 — 模式、背景使能、精灵使能
DISPSTAT0x04000004显示状态 — V-Blank 标志、H-Blank 标志
VCOUNT0x04000006当前扫描行号

DISPCNT 位域结构

  • 显示模式:Mode 0(文本背景)、Mode 3(位图)、Mode 4(位图双缓冲)等
  • BG 使能:控制 4 个背景层中哪些可见
  • OBJ 使能:控制 Sprite 精灵层是否可见

背景控制寄存器

寄存器地址说明
BG0CNT0x04000008背景 0 控制
BG1CNT0x0400000A背景 1 控制
BG2CNT0x0400000C背景 2 控制
BG3CNT0x0400000E背景 3 控制

每个 BGxCNT 寄存器包含:

  • 优先级(Bit 0-1):0 最高,3 最低
  • 字符基地址(Bit 2-3):Tile 数据在 VRAM 中的起始位置
  • 颜色模式(Bit 7):0 = 16 色,1 = 256 色
  • 屏幕基地址(Bit 8-12):图块映射表在 VRAM 中的位置
  • 尺寸(Bit 14-15):背景大小(256x256 到 512x512)

定时器寄存器

寄存器地址说明
TM0CNT_L0x04000100定时器 0 计数值
TM0CNT_H0x04000102定时器 0 控制
TM1CNT_L0x04000104定时器 1 计数值
TM2CNT_L0x04000108定时器 2 计数值
TM3CNT_L0x0400010C定时器 3 计数值

定时器控制位域(TMxCNT_H):

  • Bits 0-1:预分频器(0=1周期, 1=64周期, 2=256周期, 3=1024周期)
  • Bit 2:计数溢出中断使能
  • Bit 7:定时器使能

DMA 通道

寄存器地址说明
DMA0SAD0x040000B0DMA 0 源地址
DMA0DAD0x040000B4DMA 0 目标地址
DMA0CNT0x040000B8DMA 0 控制

DMA 用于高速内存拷贝,在 WASM 版本中由 JavaScript 模拟实现。游戏代码通过设置 DMA 寄存器触发大块数据传输(如加载 Tile 数据到 VRAM)。

按键输入寄存器

寄存器地址说明
KEYINPUT0x04000130按键状态(低电平有效)
KEYCNT0x04000132按键中断控制

在 WASM 版本中,JavaScript 将键盘/触摸输入转换为 GBA 按键状态写入此地址。

Palette RAM 结构

地址 0x05000000 处的调色板存储区分为两个 256 色调色板组。

调色板格式:每个颜色为 15 位(BGR555):

Bit 0-4:   红色 (R), 0-31
Bit 5-9:   绿色 (G), 0-31
Bit 10-14: 蓝色 (B), 0-31
Bit 15:    未使用
  • BG 调色板:背景图块使用的颜色。索引 0 为透明色
  • OBJ 调色板:精灵图块使用的颜色。索引 0 同样为透明色

VRAM 布局

VRAM 从地址 0x06000000 开始,总计 96KB,用于存储图块数据和图块映射表。

VRAM 使用方式

  • 图块数据区:存储 8x8 像素的 Tile 图块图案
    • 4bpp 模式:每图块 32 字节(16 色,每像素 4 位)
    • 8bpp 模式:每图块 64 字节(256 色,每像素 8 位)
  • 图块映射表:存储背景的图块排列索引
    • 每条目 2 字节:图块编号 + 水平翻转 + 垂直翻转 + 调色板号

OAM 结构

OAM 从地址 0x07000000 开始,存储 128 个精灵的属性数据。

每个 Sprite 的 3 个属性

属性位域说明
ATTR0Y 坐标 + 形状Bit 0-7: Y 坐标, Bit 14-15: 形状 (正方/横长/竖长)
ATTR1X 坐标 + 尺寸Bit 0-8: X 坐标, Bit 14-15: 尺寸 (8/16/32/64)
ATTR2图块 + 调色板Bit 0-9: 图块编号, Bit 12-15: 调色板号

精灵优先级与绘制顺序

  • OAM 中编号越小的精灵优先级越高(绘制在上层)
  • 同一优先级的精灵按 OAM 编号排序

Flash 存储模拟

地址 0x0E000000 处模拟了 GBA 的 Flash 存储芯片,用于游戏存档。

WASM 内存中的硬件访问流程

相关概念