GBメモリカートリッジに書き込みたい

GBメモリカートリッジに書き込みたい

February 19, 2018
GameConsole, GB, Arduino

なんとかしてGBメモリに LSDjを書き込みたいというアレ

成果物 #

資材 #

  • 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に書き込んだ後読み込むと最後のバンクの内容が先頭から繰り返し書かれている

  • アドレス0x0000のデータばっかり読める

    • /RDをLOWにし忘れてる
  • GBメモリのWakeupに失敗する

    • /RSTが外れてた

LSDjを動かす場合 #

  • 前述のとおりSRAMサイズが足りないがSAVE/LOAD(作業中の曲データの退避/復帰)ができない以外は動作する様子
  • セーブデータをPCとの間で読み書きする場合,writeboyはROMヘッダのとおり128kbytesを読み書きしようとする
    • カートリッジからの読み出しは問題ないが,エミュレータ等で作成した本来の128kbytes分のSRAMイメージを書き込むと正常に動作せずセーブデータが初期化されてしまう
    • おそらく32kbytes分の領域に繰り返し書き込んでしまっている
    • とりあえずセーブデータの最初の32kbytes×4のsavファイルを作って書き込むといいかも

参考 #

ハードウェア #

カートリッジコネクタ部 #

Arduinoとの接続 #

ソフトウェア #

GB本体/GBカートリッジ仕様 #

GBメモリカートリッジ #