内部メモリ
空いている領域は未使用領域です。
アドレス | サイズ | バス幅 | 名称 | 用途 |
---|---|---|---|---|
00000000-00003FFF | 16KB | 32bit | BIOS | 起動プログラムなどを実装したROM |
02000000-0203FFFF | 256KB | 16bit | WRAM(オンボード) | プログラムを入れる外部メモリ EWRAMとも |
03000000-03007FFF | 32KB | 32bit | WRAM(チップ) | ARM内蔵の高速メモリ IWRAMとも |
04000000-040003FE | 1KB | 32bit | IOレジスタ | IO機能を制御するレジスタ |
内部メモリ(画面描画用)
空いている領域は未使用領域です。
アドレス | サイズ | バス幅 | 名称 | 用途 |
---|---|---|---|---|
05000000-050003FF | 1KB | 16bit | パレット | 256色分色を記憶可能 |
06000000-06017FFF | 96KB | 16bit | VRAM | LCD に表示するデータを入れる |
07000000-070003FF | 1KB | 32bit | OAM | オブジェクトと背景を重ねる機能 |
外部メモリ (Game Pak)
Game Pak = カートリッジのことです。
アドレス | サイズ | バス幅 | 名称 | 備考 |
---|---|---|---|---|
08000000-09FFFFFF | 32MB | 16bit | カートリッジROM/FlashROM | WaitState 0 |
0A000000-0BFFFFFF | 32MB | 16bit | カートリッジROM/FlashROM | WaitState 1 |
0C000000-0DFFFFFF | 32MB | 16bit | カートリッジROM/FlashROM | WaitState 2 |
0E000000-0E00FFFF | 64KB | 8bit | SRAM | -- |
0E010000-0FFFFFFF | -- | -- | 未使用 | -- |
0A000000-0BFFFFFF
と0C000000-0DFFFFFF
は08000000-09FFFFFF
で、アクセスに必要な待機時間(WaitState)が違います。基本的に08000000-09FFFFFF
(WaitState 0)のみが使用されます。
0x1000_0000-FFFF_FFFF
は使用できません。
デフォルトでは、WRAMの0x0300_7F00-0x0300_7FFF
の256バイトは、割り込みベクタ、割り込みスタック、BIOSコールスタック用に予約されています。
残りのWRAMは、0x0300_7F00
から配置されているユーザースタックを含めてどのような用途にも自由に使用できます。
バス幅とCPUが一度に読み書き可能なbit数、アクセスに要するサイクルの一覧です。
メモリ領域 | バス幅 | Read幅 | Write幅 | サイクル(8/16/32bit) |
---|---|---|---|---|
BIOS | 32 | 8/16/32 | - | 1/1/1 |
EWRAM | 16 | 8/16/32 | 8/16/32 | 3/3/61 |
IWRAM | 32 | 8/16/32 | 8/16/32 | 1/1/1 |
IOレジスタ | 32 | 8/16/32 | 8/16/32 | 1/1/1 |
パレット | 16 | 8/16/32 | 16/32 | 1/1/22 |
VRAM | 16 | 8/16/32 | 16/32 | 1/1/22 |
OAM | 32 | 8/16/32 | 16/32 | 1/1/12 |
GamePak ROM | 16 | 8/16/32 | - | 5/5/81,3 |
GamePak Flash | 16 | 8/16/32 | 16/32 | 5/5/81,3 |
GamePak SRAM | 8 | 8 | 8 | 5 1 |
これ以外にも16bitごとまたは32bitごとのDMA転送がSRAMをのぞいた全てのメモリに可能です。
1: サイクルはwaitstateの設定によって変わってきます
2: GBAが同時にビデオメモリにアクセスする場合はプラス1サイクルされます
3: シーケンシャルアクセスとノンシーケンシャルアクセスのタイミングを分けます。
VRAM、パレットは、HBlank中またはVBlank中のみアクセス可能です。 DISPCNTレジスタのFBlankビット(DISPCNT.7)で表示が無効化されているときはそれ以外のタイミングでもアクセスできます。
OAMはさらにアクセス条件が厳しいです。 DISPCNTのbit5が1の場合にのみ、HBlank中のアクセスが許可されます。
CPUとDMA3のみがROMにアクセスできます。
SRAMにはCPUしかアクセスできず一度に8bitごとしかアクセスできません。 SRAMは電池形式とフラッシュメモリ形式があります。
ROMのバス幅は16bitに制限されているため、ROMの内部からARM命令(32bit)を実行すると、あまり良いパフォーマンスが得られません。よってTHUMB命令(16bit)を使うことをお勧めします。
ただし、どうしてもARM命令を使いたい時はROMから内部のWRAMにコードをコピーすることで、パフォーマンスを落とさず実行が可能です。
GBAでは常にデータはリトルエンディアン形式です。
特殊な挙動を参照
特殊な挙動を参照
特殊な挙動を参照