GBメモリカートリッジに書き込みたい
February 19, 2018
なんとかしてGBメモリに LSDjを書き込みたいというアレ
成果物 #
- n13i/writeboy: An Arduino based ROM image writer for GB Memory Cartridge
- n13i/GB-Memory-Binary-Maker at develop
資材 #
- Ardiuno Mega 2560 R3 (互換ボード)
- カートリッジコネクタ
- ジャンク品から拝借
- 2018/02現在,入手性がよさそうなのは64GBパック,DS,DS Lite
経過 #
-
ROMをdumpできるところまでは辿り着いた
-
GBメモリをdumpしてみたところ0x4000-0x7fffと0x8000-0xbfffが同じ
- バンク切り替えに失敗してる?
- /RST (カートリッジのpin30) にVCCを10kΩのプルアップ抵抗経由で印加(GBCartReadと同様)するとうまくいった
- INPUT_PULLに設定したピンと接続(cartreaderと同様)だとNGっぽい
-
Game boy pak reader and the cartridge header.
- Miraculously, some cartridges still worked while this was low, leading me to believe the problem was something else.
- /RSTがHIGHになってないとレジスタ書き込み全般が失敗するみたい
-
ROMに書き込みできるようになったが,気付いたら
SRAMに書き込めなくなってたSRAMの読み込みに失敗してた- RAM読み込み時に/CSをLOWにしていなかった
-
MBC2のRAMの先頭1バイトがうまく書けてないっぽい(0b0001を書きたいのに読むと0b0000になってる)
-
MBC5でRAMの0x6000(bank3:0xA000)が0x00になる
- 書き込み時,アドレスのMSBが1のときだけ/CSをLOWにするようにしたら改善した
- 最後にRAMをdisableするときに0x0000へ書き込む0x00がRAMに書かれてしまっていた?
-
MBC5のROM(LSDj)を書き込んだGBメモリでRAMに書き込んだ後読み込むと最後のバンクの内容が先頭から繰り返し書かれている
- バンク切り替えができていない?
- 読むのに失敗しているか,書くのに失敗しているか
- SRAMは1024kbits(128kbytes),64kbits(8kbytes)×16ブロック
-
nesdev.com • View topic - How to program a NINTENDO POWER Cartridge ?によると32kbytes(4ブロック)が最大?
- ニンテンドウパワーのゲームタイトル一覧 - Wikipediaを見てもB×4が最大
- GB Memory Binary Makerで作成したmapファイルではB5 00 00 (MBC5, ROM 1Mbytes, RAM 8kbytes) となっていた
- B5 80 00 (MBC5, ROM 1Mbytes, RAM 32kbytes) に変えてみる
- LSDjは起動したがSAVE/LOADが無い(該当メニューがRESET MEMORYになってる)
- B7 80 00 にしても変化なし
-
アドレス0x0000のデータばっかり読める
- /RDをLOWにし忘れてる
-
GBメモリのWakeupに失敗する
- /RSTが外れてた
LSDjを動かす場合 #
- 前述のとおりSRAMサイズが足りないがSAVE/LOAD(作業中の曲データの退避/復帰)ができない以外は動作する様子
- セーブデータをPCとの間で読み書きする場合,writeboyはROMヘッダのとおり128kbytesを読み書きしようとする
- カートリッジからの読み出しは問題ないが,エミュレータ等で作成した本来の128kbytes分のSRAMイメージを書き込むと正常に動作せずセーブデータが初期化されてしまう
- おそらく32kbytes分の領域に繰り返し書き込んでしまっている
- とりあえずセーブデータの最初の32kbytes×4のsavファイルを作って書き込むといいかも
参考 #
ハードウェア #
カートリッジコネクタ部 #
- そうだGB Cart Flasher を作ろう : synthgeek
- チップチューンへの道!~第4回 GB CART FLASHERの制作~ – すいラボ
rdoz.blog - ゲームボーイ・ロム吸い出し #1
Arduinoとの接続 #
-
こーどねーむ「ホンコン」 with Arduino を作る - GBAプログラミング跡地
- Arduino Megaを使うことで
シフトレジスタICを省略
- Arduino Megaを使うことで
-
こーどねーむ「ホンコン」 with Arduino
- 上のオリジナル版
- Arduino - PinMapping2560
ソフトウェア #
-
GitHub - sanni/cartreader: An Arduino based cartridge reader for video game systems
- Reads and writes Nintendo Power Game Boy Memory Flash Cartridges とある
- GBCartRead – Gameboy Cart Reader « insideGadgets
- Arduinoを使ったgameboyカードリッジのdump
GB本体/GBカートリッジ仕様 #
- Foreword - Pan Docs
-
GBシリアルリーダー
- GBのメモリーアクセスタイミング
- h3nnn4n/gameboy_documentation: This is a repository containing a backup and a list of several documentation that I found on the Internet while developing my gameboy emulator.
- Emulating a GameBoy Cartridge with an STM32F4. Part 1 · Dhole’s blog
- avivace/awesome-gbdev: A curated list of Game Boy development resources such as tools, docs, emulators, related projects and open-source ROMs.
GBメモリカートリッジ #
- nesdev.com • View topic - How to program a NINTENDO POWER Cartridge ?
- Gameboy Genius » Blog Archive » Gameboy project week 8: The white Nintendo Power official flash cartridge, a tale of reverse engineering, sweat and tears
- GitHub - Infinest/GB-Memory-Binary-Maker: An application to quickly generate binaries to burn to the official Nintendo GB Memory flash cartridge
- GB Memory - The Cutting Room Floor