開始 |
終了 |
内容 |
説明 |
0000 |
3FFF |
16KB ROM バンク 0 |
バンク #0 で固定。 割り込みジャンプテーブル、任天堂ロゴ、カートリッジ情報などの後にプログラムコード。 |
4000 |
7FFF |
16KB ROM バンク 1 から N |
バンク切り替え方法は、カートリッジのメモリバンクコントローラー毎に異なる。 MBC1/2/3カートリッジでは、バンク#0を指定しても#1となる。 MBC5・Rumbleカートリッジでは、バンク#0も指定可能。 |
8000 |
9FFF |
8KB ビデオ RAM (VRAM) |
背景やオブジェクトのタイルデータ、及び背景、ウィンドウ表示 ゲームボーイ・カラーでは、バンク切り替えあり。 |
A000 |
BFFF |
8KB カートリッジ RAM バンク 0 から N |
バンク切り替え方法は、カートリッジのメモリバンクコントローラー毎に異なる。 MBC3カートリッジでは、RAMに加えて、RTCのコントロールもこの領域に割り当てられる。 |
C000 |
CFFF |
4KB 作業 RAM (WRAM) バンク 0 |
メインメモリ |
D000 |
DFFF |
4KB 作業 RAM (WRAM) バンク 1 から N |
メインメモリ ゲームボーイ・カラーでは、バンク切り替え可能 |
E000 |
FDFF |
C000 から DDFF のミラー |
C000 から DDFF を読み込んだ時と同じ内容が出現する |
FE00 |
FE9F |
スプライト属性テーブル (OAM) |
オブジェクト属性メモリで OAM。 40ブロック(1ブロックは4バイト)オブジェクト(スプライト)表示 |
FEA0 |
FEFF |
未使用 |
- |
FF00 |
FF7F |
I/O レジスタ |
I/Oポートを持たず、メモリーマップされている。デバイスにアクセスする時に使用する。 |
FF80 |
FFFE |
上位 RAM (HRAM) |
スタック用の領域。 |
FFFF |
FFFF |
割り込み有効レジスタ (IE) |
割り込みの有効/無効を切り替える |
開始、終了アドレスは 16 進数。
ROM バンク 0 のジャンプテーブル
ジャンプテーブルに使われるアドレスについて
RST 命令: 0000, 0008, 0010, 0018, 0020, 0028, 0030, 0038
割り込み: 0040, 0048, 0050, 0058, 0060
RST 命令や割り込みを使わない場合、上記のアドレスは他の目的で使われることがある。
ROM バンク 0 のカートリッジヘッダ
0100 - 014F のアドレスには
カートリッジヘッダが含まれている。
次のような内容が書かれている。
- プログラムの開始位置
- チェックサム
- MBC チップについての情報
- ROM と RAM のサイズ
外部メモリとハードウェア
0000 - 7FFF と A000 - BFFF の範囲は、外部の
ハードウェアに接続されている。
- 0000 - 7FFF: ROM に接続されている。読み込み専用。
- カートリッジにメモリバンクコントローラ (MBC) が接続されている場合、この領域を使って MBC チップに書き込むことができる。
- A000 - BFFF: 外部メモリ、リアルタイムクロック等に接続されている。
- 外部メモリは、バッテリバックアップされていることもある。ゲームの内容をセーブするために使われる。
バンク切り替え
ゲームボーイのCPUは、8ビットのZ80に似たものであり、アドレスバスも16ビットである。これは、
CPUが直接アクセスできる空間は64Kバイトとなる。
さらに、ユーザー用に割り当てられたメモリ領域は、0000h-3FFFhと4000h-7FFFhのROM領域32Kバイト、A000h-BFFFhとC000h-DFFFhのRAM領域16KBである。
そこで、ゲームボーイでは、バンク切り替えという方法を利用して、より多くのメモリーを間接的に扱えるようにしている。
このバンク切り替えをおこなうメモリ・バンク・コントローラーは、カートリッジ内に組み込まれており、その種類によってメモリ構成が異なる。基本的に4000h-7FFFhROMとA000h-BFFFhRAMとをバンク切り替え可能としている。
バンク切り替えのレジスタとして、ある領域のアドレスがそれぞれのコントローラーで割り当てられている。
バンク切り替え等をする時、「2000h領域(2000h-3FFFh)へ値を書き込む」とあれば、「アドレス2000h-3FFFh範囲の何処かに値を書き込む」ようにすればよい。
さらに
ゲームボーイカラーでは、内部RAMが増設され、D000h-DFFFhをバンク切り替え可能となった。このバンク切り替えは、SVBK(FF70h)で行う。
RAM バンク書き込みプロテクト
0000h領域(0000h-1FFFh)へ値を書き込むことによって、RAMに書きこみプロテクトを設定したり解除したりできる。
これは、ゲームボーイの電源を切ったときに発生するするかもしれない余分な書きこみを防ぐためにあるようだ。
カートリッジの種類
- 32KB ROM
256Kbit(32KB, 2バンク)のROMのみで構成されている
バンク切り替え機能を持たず、また、RAM領域A000h-BFFFhもない。
- MBC1
16/8タイプと4/32タイプとがある。
16/8タイプでは、16Mbit(2MB, 128バンク)のROMと8KBのRAMとで構成されている。
4/32タイプでは、4Mbit(512KB,4バンク)のROMと32KB(4バンク)のRAMとで構成されている。
- MBC2
16Mbit(2MB, 128バンク)のROMで構成されており、コントローラー自身に512x4bit(256バイト)のRAMを持つ。
- MBC3
16Mbit(2MB, 128バンク)のROMとRTC(リアルタイムクロック)とで構成されている。
RTCは、内臓バッテリーで駆動されている。
- MBC5
64Mbit(8MB, 512バンク)のROMと1Mbit(128KB, 16バンク)までのRAMとで構成されている。
これは、ゲームボーイカラーの倍速モードに対応させたものであり、また、ROMバンク0をアドレス4000h-7FFFhに割り当てることも可能である(他のMBCでは、バンク0を割り当てようとしてもバンク1となる)。
- Rumble
64Mbit(8MB, 512バンク)のROMと256Kbit(32KB, 4バンク)までのRAM及び振動モーターとで構成されている。
メモリーバンクコントローラーはMBC5とおなじものが使われている。
32KB ROM カートリッジ
32KBROMのカートリッジは、バンク切り替え機能がなく、もっとも基本的なメモリーマップを構成している。
また、A000h-BFFFhも使用不可能である。
MBC1 カートリッジ
16MbitROM/8KbyteRAMと4MbitROM/32KByteRAMとの2種類があり、ROM・RAMともにバンク切り替え可能となっている。
MBC3 カートリッジ
16MbitROMと256KByteRAM及びRTCとで構成されており、ROM・RAMバンク切り替え可能となっている。
RTCは、RAMバンク切り替えの要領でアクセス可能となる。
MBC5 カートリッジ
64MbitROMと128KByteRAMCとで構成されており、ROM・RAMバンク切り替え可能となっている。
Rumble カートリッジ
64MbitROMと128KByteRAMCとで構成されており、ROM・RAMバンク切り替え可能となっている。
内部RAMバンク
ゲームボーイ・カラーでは、内部RAMが増設され、アドレスD000h-DFFFhをバンク#1~#7に割り当てられる。
メモリーマップ
C000h-CFFFhは、バンク#0に固定され、D000h-DFFFhは、バンク切り替え可能である。
バンク切り替え
D000h-DFFFhの内部RAMバンクは、SVBK(FF70h)へ値を書き込むことによってバンク(#1~#7)を指定できる。尚、バンク#0を指定しても#1となる。
最終更新:2017年08月28日 03:52