feelsgoodran
feelsgoodran
淡々ブラブラ
1 post
Don't wanna be here? Send us removal request.
feelsgoodran · 8 years ago
Text
ゲームボーイカートリッジについて諸々
吸出し機作った時に調べてわかったこととかが割りと日本語で書かれてなかったので忘れないように
ミスあるかも
基本
アドレスバス16本(2byte分)
データバス8本(1byte分)
カートリッジの端子
左から
5V    Vcc
CLK   クロック 未使用?
/WR   WriteEnable(インバータ)
/RD   ReadEnable(インバータ)
/CS   ChipSelect SRAM選択(インバータ)
A0
|     アドレスバス
A15
D0
|    データバス
D7
/RST  Reset(インバータ)
AUDIO 音声入力?未使用?
GND   グランド
ゲームボーイCPUのメモリマップ
0000h-3FFFh:バンク0(カートリッジ)
4000h-7FFFh:バンク1以降 ※ある場合のみ(カートリッジ)
8000h-9FFFh:VRAM(本体)
A000h-BFFFh:SRAM ※ある場合のみ,バンク切り替え可(カートリッジ)
C000h-CFFFh:WRAMバンク0(本体)
D000h-DFFFh:WRAMバンク1,ゲームボーイカラーモードの場合は複数にバンク切り替え可(本体)
E000h-FDFFh:C000h-DDFFhまでのミラー(本体)
FE00h-FE9Fh:スプライト属性テーブル(OAM)(本体)
FEA0h-FEFFh:不使用
FF00h-FF7Fh:入出力関連(本体)
FF80h-FFFEh:HighRAM(本体)
FFFFh      :割り込み
MBC(Memory Bank Controllers)
カートリッジ内にチップで入ってる(ない場合はMBC無しのアクセス)
ROM/RAMへのアクセス切り替えまたはバンク切り替えを行う
動作としてはROM/RAMにアクセスする際のアドレスバスを拡張している
バンク切り替え
いずれもWrite状態(/RDをHigh、/WRをLow)にする
Readは不可(範囲的にROMのデータが出て来る)
指定したアドレスに読み込む為の値を入れる(例:バンク2を指定する場合は00000010b)
MBC1:2000h-3FFFh
MBC2:2000h-3FFFh 9bit目が1である必要があるため2100-21FF,2300-23FF,...etc
MBC3:2000h-3FFFh
MBC5:2000h-2FFFh 下位8bit分を入れる
     3000h-3FFF 9bit目の値を入れる
カートリッジの範囲
0000h-3FFFh:バンク0
4000h-7FFFh:バンク1,2,3...
※MBC無しの場合は0000h-7FFFhまでがダイレクトにアクセス可
カートリッジヘッダ(吸い出しに重要そうな部分だけ)
・104h-133h:最初に出る任天堂のロゴ
ここが正しくないと実機では起動しないようになっている(海賊版対策+ちゃんと刺さってるかのチェック?)
正しいロゴが以下
 CE ED 66 66 CC 0D 00 0B 03 73 00 83 00 0C 00 0D
 00 08 11 1F 88 89 00 0E DC CC 6E E6 DD DD D9 99
 BB BB 67 63 6E 0E EC CC DD DC 99 9F BB B9 33 3E
ここまで
・134h-143h:タイトル、大文字のアスキーコードで書かれている
・143h:タイトルの最終バイトに当たる(いずれも印字不可文字なので判別できる)
80hの場合:ゲームボーイカラーの機能が使えるが、ゲームボーイでも動作可(カートリッジに"ゲームボーイ&カラー共通"って書いてあるやつ)
C0hの場合:ゲームボーイカラー専用カートリッジ
・147h:カートリッジタイプ カートリッジに何の機能が積まれているかが書かれている
00h ROMのみ                        19h MBC5
01h MBC1                           1Ah MBC5+RAM
02h MBC1+RAM                       1Bh MBC5+RAM+バッテリー
03h MBC1+RAM+バッテリー            1Ch MBC5+振動機能
05h MBC2                           1Dh MBC5+振動機能+RAM
06h MBC2+バッテリー                1Eh MBC5+振動機能+RAM+バッテリー
08h ROM+RAM                        20h MBC6
09h ROM+RAM+バッテリー             22h MBC7+センサー+振動機能+RAM+バッテリー
0Bh MMM01
0Ch MMM01+RAM
0Dh MMM01+RAM+バッテリー
0Fh MBC3+タイマー+バッテリー
10h MBC3+タイマー+RAM+バッテリー   FCh  ポケットカメラ
11h MBC3                           FDh  BANDAI TAMA5
12h MBC3+RAM                       FEh  HuC3
13h MBC3+RAM+バッテリー            FFh  HuC1+RAM+バッテリー
・148h:ROMサイズ
00h -  32KByte (バンク切り替え無し)
01h -  64KByte (4 バンク)
02h - 128KByte (8 バンク)
03h - 256KByte (16 バンク)
04h - 512KByte (32 バンク)
05h -   1MByte (64 バンク)  - MBC1では63バンクのみ使用
06h -   2MByte (128 バンク) - MBC1では125バンクのみ使用
07h -   4MByte (256 バンク)
08h -   8MByte (512 バンク)
52h - 1.1MByte (72 バンク)
53h - 1.2MByte (80 バンク)
54h - 1.5MByte (96 バンク)
吸い出す時の流れイメージ
104h-133hをダンプと比較して正しく認識できるかチェック
147hと148hを見てカートリッジタイプに応じてバンク切り替えに使用するアドレスとバンク数を確認
吸い出す
おわり
参考
GBdev wiki http://gbdev.gg8.se/wiki/articles/Main_Page
1 note · View note