レトロアーケード PAC-MANを解析する
というわけで、近所のトイザらスで買ってきました。
一応前から出ていることは知っていたのですが、ちょっと忙しいので見ないふりをしていたレトロアーケード(MICRO PLAYER RETRO ARCADE) PAC-MAN を解析してみました。
実はすでにある程度解析されていて、同一基板、同一FLASHのものをジャンパ設定で5種類のゲームに切り替えられる、というところまではわかっていたようです。
で、どうも内蔵しているゲームがファミコン版(をベースにしたもの)であるため、中身はファミコンだ、などと言われていたのですが、技術的に考えると、中身はファミコンじゃないんですよ。
("ファミコン"はCPUとかSRAMとかVPUとかで構成されているわけで、樹脂モールドされた中にそれがそのまま入っているわけではなく、また表示もNTSCではなくTFT液晶になっています。つまり、これはファミコンではないのです)
そのため、私は実はファミコン版からこの機器用のCPUに移植かなにかしたものが入っていて、ゲームの差し替えなんて全然望めないものである可能性もあり、それを確認するためにどうしても分解して確認する必要があったのです。
早速分解してみます。先駆者がいるため簡単に分解できました。
初期ロットはジャンパ部分がむき出しで簡単にROMを切り替えてプレイできたようですが、対策版としてエポキシモールドされてしまっています。
ROMはGD25Q80C、Quad SPI Flashであることが事前にわかっていました。
時々SPI Flashを読むためにArduinoでリーダを作ったりしていましたが、それが主目的ではないため、今回はAmazonでぽちっと中華リーダ・ライタを買ってみました。
さて、肝心のSPI Flash、基板につけたままでは読み書きに問題が出る可能性がありますのでいったん取り外します。樹脂モールドがSPI Flashにもかかってしまっているので超音波カッターで基板を傷つけないように削っていきます。
一旦はんだを盛り、吸い取り線でFlashを剥がします。
汚い!が、問題なし。
今回買ったFlashリーダ、親切にも変換基板が2枚もついていました。大変親切!
変換基板に乗せます。
リーダのドライバが署名なしのため、bcdeditでWindowsをテストモードにしてドライバを入れ、読み出しソフトを起動し、パラメータを合わせてREADします。
読めた!!!!
うーん、いきなりBANK0 っていう文字が見えてるけど、これが本体のファームに絡むものなのか、ゲームデータに絡むものなのかわからないな。
とりあえず全文検索でNESヘッダを探してみるものの、見つからない。
NES形式ではないのか。とりあえずもうちょっと見てみよう。
COPYRIGHTの文字が見える。生ROMなんだろうか。
じゃぁ本来の生ROMと目コンペアしてみよう…
あ、一致するわ。これほんとにファミコン版のROMのバイナリパッチだ。
まじか。
というわけで、NESヘッダがないので非常に見つけにくいんだけど、
既存のROMとの比較で大体の存在位置を確認したのでそれを張っておく。
DIP | ROM # | hex offset | hex size | |
0 | 0 | 0 | 40000 | ローリングサンダー |
1 | 1 | 40000 | 8000 | パックマン |
2 | 2 | 48000 | 4000 | マッピー |
3 | 3 | 4C000 | 8000 | ディグダグ |
4 | 4 | 54000 | 6000 | ギャラガ |
5 | 5 | 5A000 | 6000 | ギャラクシアン |
FLASH全体で1MByte(8MBit)だけど、後半512KはFFだったので見てないと思う。
どっかにROMのオフセット表があると思うんだけどまだ見つからない。
そして、吸い出したROMにNESヘッダを付けてエミュレータに読み込ませてみたら
動いたwwww
さて、あとはROMを上書きして動かせるかどうかだな…
チェックサムを見てるかどうかとかを見るために一バイトだけ書き換えたりして試してみようかな。