諸元
CPU / メモリ
項目 内容 備考 CPU Sharp LR35902 (Z80 互換) 8.38MHz の倍速モードあり。
以前のゲームボーイは 4.19MHzRAM 4KB + 4KB × 7 バンク 初代ゲームボーイは 4KB + 4KB VRAM 8KB × 2 バンク 初代ゲームボーイは 8KB HRAM 127バイト CPU に内蔵
表示
*1 合計 56 色 (32768 色中)
項目 内容 備考 液晶パネル 2.3 インチ 反射型 TFT カラー液晶
バックライトなし解像度 160×144 ピクセル タイル 20×18 発色数(背景)*1 32 色 ピクセル 256 × 256、タイル 32 × 32 発色数(スプライト)*1 24 色 最大 40 個表示、水平ライン上に最大 10 個
その他
項目 内容 備考 シリアル通信 赤外線通信 ゲームボーイカラーにのみ搭載
後継のアドバンスや SP には非搭載電源 単三乾電池 × 2 -
余談 アドバンスと SP について
Z80 互換 変化なし (LR35902) ARM7DTMI 16.78MHz (32bit RISC) 解像度 240×160 ピクセル アドバンス: バックライトなし / SP フロントライト RAM 256KB (ARM 用) バンクなし / LR35902 では 32KB VRAM 96KB (ARM 用) バンクなし / LR35902 では 16KB アドバンス: 単三乾電池 × 2 / SP: リチウムイオン(充電式)
LR35902(命令セット: SM83) と Z80 の違い
種類 SM83 Z80 備考 AF, BC, DE, HL レジスタ ✓ ✓ - 裏レジスタと EXX 命令 - ✓ - IX, IY レジスタ - ✓ - LDH 命令 ✓ - FF00 - FFFF のゼロページ用
上位 8 ビットは必ず FFxx だが、RGBDS では省略できない。HALT 命令 ✓ ✓ 割り込み受信まで CPU 停止 STOP 命令 ✓ - クロックも停止
ゲームボーイカラーのメモリマップ 全 64KB
容量 開始 終了 場所 容量 名称 備考 32KB 0000 3FFF カート
リッジ16KB ROM バンク 固定 (バンク 0)
割り込みプログラム 各 8 バイト
0040: V-Blaink
0048: Stat
0050: Timer
0058: Serial
0060: Joypad
ユーザプログラムの開始 4 バイト
0100: nop, jp $0150
カートリッジヘッダ 76 バイト
0104 - 014F
通常のプログラム開始位置
0150
4000 7FFF 16KB ROM バンク バンク 1~511
[2000] → 下位 8bit と [3000] → 上位 1bit を書き込むことで指定。16KB 8000 9FFF 本体 8KB VRAM バンク 0~1 (8KB × 2) [VBK (FF4F)] で切り替え。
• バンク 0: 初代/カラー共通
• バンク 1: カラー専用 (色属性等)A000 BFFF カート
リッジ8KB External RAM バンク 0~15 (8KB × 16)
[0000] → 0A と [4000] → (バンク番号) を書き込むことで指定。8KB C000 CFFF 本体 4KB WRAM 固定 (バンク 0) D000 DFFF 4KB WRAM バンク 1~7 (4KB × 7) [SVBK (FF70)] で切り替え。 8KB E000 FDFF 7,680B Echo C000 - DDFF のミラー (使用禁止) FE00 FE9F 160B OAM オブジェクト属性 (スプライト情報) FEA0 FEFF 96B 使用不可 FF00 FF7F 128B I/O レジスタ ジョイパッド・シリアル通信・タイマー・サウンド等
FF00: P1/Joypad
FF04: DIV 常にカウントアップされる
FF05: TIMA タイマー
FF0F: IF 割り込みリクエスト
FF10 - FF26: Sound 音源制御
FF40: LCDC 画面表示の ON/OFF、背景/スプライトの有効化
FF42 - FF45: 画面スクロール位置、現在の描画ライン数
FF46: DMV OAM (スプライトメモリ) への一括転送開始
FF47: DMG 専用: BG パレットデータ
FF48: DMG 専用: OBJ0 パレットデータ
FF49: DMG 専用: OBJ1 パレットデータ
FF4D: KEY1 倍速モードへの切り替え準備*2
FF4F: VBK VRAM バンクの切り替え
FF68: CGB 専用: BG パレット - アドレス (0 - 63: 32 色)
FF69: CGB 専用: BG パレット - 色情報 Low, High
FF6A: CGB 専用: OBJ パレット - アドレス (0 - 63: 32 色)
FF6B: CGB 専用: OBJ パレット - 色情報 Low, High
FF70: SVGK WRAM バンクの切り替え
FF80 FFFE 127B HRAM ゼロページ (小規模スタック) FFFF 1B IE レジスタ
7 - 5 4 3 2 1 0 未使用 Joypad Serial Timer Stat V-Blank 未使用 スリープ
解除用通信ポート
データ転送完了タイマ(FF05)
オーバーフロー走査線
指定到達走査線
ブランク開始
ゲームボーイカラーは電源を ON すると 0000 からプログラムが起動する。
このときカートリッジは無効にされたまま本体の ROM で初期処理 (ロゴの表示等) を実行する。
本体の ROM が初期処理を終了すると、カートリッジが有効になるとともに 0100 へ制御が遷移する。
つまり、プログラムは 0100 から開始するように作成する。
*2 倍速モードの切り替え。
ld a, $01
ld ($FF4D), a ; KEY1 レジスタのビット 0 を 1 にして「切り替え準備」
stop ; ここでモードが反転(倍速 / 通常)→ CPU が再起動しモード変更
ld a, ($FF4D) ; FF4D のビット 7: 0 通常 / 1 倍速
VRAM (8000-9FFF) の役割とアクセス
VBK (FF4F) に $00 (or $01) を書き込むことにより VRAM バンクを切り替えてアクセスする。
アドレス VRAM
バンク容量 内容 備考 8000 - 97FF 0 6KB タイル 384 枚 (1 タイル: 8×8 ピクセル = 1Byte×8×2 バイト) 初代 / カラー共通 9800 - 9BFF 1KB タイルマップ 0 32×32 タイル 9C00 - 9FFF 1KB タイルマップ 1 32×32 タイル 8000 - 97FF 1 6KB タイル 384 枚 (追加タイルデータ) カラー専用 9800 - 9BFF 1KB 属性マップ 0 32×32 属性 9C00 - 9FFF 1KB 属性マップ 1 32×32 属性
LCDC (FF40) によって タイルマップ&属性マップ の 0/1 どちらを使用するか指定する。(bit3: 背景用、bit6: ウィンドウ用)
PPU (Picture Processing Unit) は、バンク 0 と 1 を同時にアクセスして表示を行う。
属性マップ 0,1 の内容
7 6 5 4 3 2 1 0 OBJ に対する背景の優先順位 上下反転 左右反転 未使用 VRAM バンク パレット番号 0~7