メモリマップ

開始 終了 内容 説明
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