GBA用ROM吸い出し機を使ってBIOSも吸い出す

Table of Contents

gaiyou

https://drroot.page/wp/?p=158
ハードウェア的には前回のこれと同一。
ようはBIOS欲しいけどネットから落とすと微妙にグレー度が上がるし自前で吸いたいなーみたいな時に使える(?)。

てずん

基本的には前回と全く同じ手順が使えるんだけど、SDに予め置いておくtest.gbaの中身が違う。
test.gbaはこれ
であとは前回同様の手順を踏んでもいいし、カセット無し+START,SELECT同時押し無しでも同様の動作をする。

出来上がったdata.binの整合性チェックをする場合はSHA256でハッシュ取ればいい。
Windowsなら

certutil -hashfile data.bin SHA256

とかコマンド叩いて、

fd 25 47 72 4b 50 5f 48 7e 6d cb 29 ec 2e cf f3 af 35 a8 41 a7 7a b2 e8 5f d8 73 50 ab d3 65 70

が得られれば成功してる。GBAのBIOSはユニークなので。

何やってんのこれ

http://akkera102.hatenablog.com/entry/2014/11/18/222822
http://akkera102.sakura.ne.jp/gbadev/index.php?NO.110%20dump
https://github.com/devkitPro/gba-examples/blob/master/utility/biosdumper/source/biosdumper.c
この辺気合いで読んでいけばまぁ分かるんだけど一応補足。

GBAはカセットであれば普通にメモリ空間にマップされるので、読み出すのは造作も無い。
しかもSPI通信(SIOなんちゃらみたいなレジスタ名)用の割り込みハンドラまで用意されてるので、そこにROM読んで何バイト返すみたいなコード書きゃ楽勝でダンプ出来る。

で、メモリマップ上に存在しないBIOSはそうもいかんのだが、何でかBIOS関数のMidi2frequency関数を使うとBIOSが読み出せてしまう。バグじゃねぇの。
てなわけでこれで1バイトずつ4バイト分読み上げてってパケット作って送るだけ。

てな感じの話は実はオリジナルのソースコードの末尾にコメントで追記されてるので、割とフィーリングで出来あがった。
改めてDumperの製作者様には頭が下がる。

カテゴリー: 電子工作 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です