お知らせ

整理のため全部の記事を非公開にしましたが重要そう(情報の価値が高そう)なやつから改訂が終わり次第公開に戻していきます
重要じゃないやつは多分一生そのままですが

arduinogbdumpで64GBパックを使ってゲームボーイのROMとセーブデータを吸い出す

公開

arduinogbdumpというやつを使うと、Arduino Microと64GBパックを接続したコントローラーブロスでゲームボーイカセットのROMとセーブデータを吸い出すことができます。


fl4shk/arduinogbdump: This is a mostly finished GB/GBC game cart Save Data (!) and ROM dumper that uses an Arduino, an N64 controller, and an N64 Transfer Pak.


スーパーゲームボーイや64GBパックを分解して差し込み口を取り出して線を何十本も繋ぐということをしなくて済むので非常に手軽に吸い出しができます。



Ubuntu(Linux)の環境が必要になります。VirtualBox上でもOKでした。


ArduinoはATmega32U4が搭載されているもの(Leonardoとか)ならMicroでなくても使えるようですが、確認はしていません。Arduino Megaでもできるようです。

また、3.3Vが必要になるので3.3VピンがないArduinoの互換機などでは3.3Vを作るのにレギュレータがついた降圧モジュールが必要になるでしょう。多分 やってないから知らんけど


--- ⚡ ---


必要なもの

  • Ubuntuが動くパソコン Virtualboxの仮想環境でもいい
  • 64のコントローラーブロス
  • 64GBパック
  • ATmega32U4が搭載されているArduino
  • (3.3VピンがないArduinoの場合) 3.3V降圧モジュール
  • プルアップ抵抗(1KΩ)


手順

UbuntuにArduino IDEをインストール

Arduino IDEはArduinoの公式サイトからダウンロードする事もできますが、Snapストアにあるものを使ったほうが簡単そうです。


Install arduino on Linux | Snap Store


Arduinoとシリアル通信をする際にユーザーがdialoutのグループに所属していないと権限の関係でエラーになるのですが、Snapストアにあるほうをインストールした場合にはIDEの初回起動時にそこらへんをちゃんと処理してくれます。(IDE初回起動のあとはUbuntuを再起動してください)


もしそうならなかった場合はターミナルから



sudo usermod -a -G dialout $USER


と入れてUbuntuを再起動することで解決します。


arduinogbdumpのスケッチを書き込む

Arduinoをパソコンに接続します。

VirtualBoxを使っている場合は左下のUSBのアイコンを右クリックすると出てくるメニューからArduino Microを選べばゲストOS(Ubuntu)側にArduinoが接続されます。



githubからダウンロードしたarduinogbdumpのzipから /src/arduinogbdump/arduinogbdump.pde をArduino IDEで開いてArduino Microに書き込みます。特にエラーもなく普通にできるはずです。


別にこの部分はWindowsとか別のOSでやっても構わないのですが、UbuntuからArduinoにちゃんと接続できることを確認するためにやってます。


配線する

次は64のコントローラーに配線します。いい感じにコネクタの穴にフィットする線を突っ込んでクリップ付きリード線でつなぐなりしてください。

コントローラーのコネクタは平らになっている部分を下として左からGND, DATA, VCCになっています。

  • Arduinoの3.3VピンをコントローラーのVCCに
  • Arduinoの2番ピンをDATAににつないで、プルアップ抵抗(1KΩ)もArduinoの3.3Vからつなぎます。
  • ArduinoのGNDはGNDに

Fritzingで図にしてみました!




配線できればハード側の準備は完了!


communicatorのビルド

次は通信ソフトにあたるcommunicatorをビルドする必要があります。

githubからダウンロードしたarduinogbdumpのzipを展開して

ターミナルで /src/communicator/ に移動してから make と入れればビルドされるのですが、やろうとしてもmakeやらg++がないと言われてビルドできません。



sudo apt install g++ make


で必要なものをインストールします。そのあとmakeできるようになります。



make


makeするとcommunicatorがビルドされます。


実際に吸い出す

ビルドしたcommunicatorは



./communicator


で実行できます。実行するとusageが出るのでコレに従って使います。具体的には



./communicator /dev/ttyACM0 dump_rom rom.gb


で "rom.gb" というファイルとしてROMが吸い出されるはずです。


"ttyACM0" の部分はWindowsで言うところのCOMポートで、接続されているUSBシリアルデバイスの数によって数字の部分が変動するかもしれません。

Arduino1つだけを接続しているなら "ttyACM0" でたぶん大丈夫です


しかし、このまま実行してもいろんなエラーが発生しまくって全く話になりません。



ここからがミソ。

Arduino IDEでシリアルモニタを開いてボーレートから 115200 bps を選択してからシリアルモニタを閉じます。



すると理由はよくわかりませんが、communicatorがArduinoとちゃんと通信できるようになります!



ROMの容量にもよりますが、吸い出しにはまあまあ時間がかかります。

吸い出せたらROM Checker(Windows専用)でチェックサムを確認すると良いでしょう。


ROMチェッカー (ヘッダ情報 HEADER INFO NES/FDS/SMC/N64/GB/GBA/SMS/SMD/GG/PCE/MSX/WS/NGP)


チェックサムが一致しました。 と出ていれば吸い出しが正しく成功したことになります。



セーブデータの吸い出し


./communicator /dev/ttyACM0 dump_ram rom.sav


で "rom.sav" というファイルに吸い出されます。



吸い出したセーブデータをエミュレーターで確認したいなら mGBA が良いです。こちらもSnapストアからインストールできます。


Install mgba on Linux | Snap Store




ちゃんと実機と同じデータが吸い出せてました。


ポケモンじゃないゲームでも試してみた




ゲームボーイカラー専用ソフトでも問題なく吸い出せました。


0 件のコメント:

コメントを投稿