| この回路は個人的に独自に研究用として試作したものです。このページの情報を参考にして、いかなることがあろうとも当方は責任を持てません。また、メーカーなど関係各所にこの件で問い合わせることはご遠慮ください。 |
|
はじめに さて発売されてはや2ヶ月のアドバンス。発売直後にはなぜかエミュレータが出まわり、吸出し回路も海外サイトには報告されていましたが、依然その方法は公になってないようです。そんな中、某氏によりROMアクセスに関する有力な情報を得られたため、アドバンスROMの吸出し回路を作ってみました。 現状では、ROMの完全な吸出しはできていませんが、ほぼその方法と動作は解明できたつもりなのでその報告です。今後、完全な吸出しに対応するかどうかは未定ですが、この情報があればおそらく完全な回路を自作することも可能でしょう。 なおこの回路は、バックアップRAMなどのアクセスには一切触れません。おそらくSRAMバックアップに関しては従来のGBと余り変わりがないのではないかと思えますし、シリアルEEPROMは既知のチップらしいので、その手の情報を当たれば解明できるでしょう。 さて、まずなんにしろGBAのROMのアクセス方法です。某氏の情報(・・・というか、元は海外のGB開発・解析チームのMLからの情報のようです)と、その他GB系サイトの情報なども含めなんとかこちらでまとめてみたのが以下の表と図です。これを仮定として回路設計をします。 |
|
ROMカートリッジピン配置 GBAのROMはアドレスバス24ビット、データバス16ビットをマルチプレクスさせているようです。従来のA0-A15はそれぞれアドレス、データに割り当てられ、D0-D7はアドレス用の16-23ビット目に割り当てられているようです(信号名は情報に従い、A0-A15をAD0-AD15、D0-D7をA16-A23としました)。 現状2、30、31ピンは関係なさそうなので使いません(31ピンは手持ちのカートリッジ側でGNDに落とされてましたが、将来意味のあるデータが出力されるのかもしれないのでオープンにしておきます)。 |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ROMアクセスの概要
動作タイミングは上図のようになっているようです。実際にはA0-A15とD0-D15は同一バス上で動いていますので同時に信号が出力されるような操作をしてはいけません。 まず、/CSを下がりエッジでアドレス値が読みこまれるので、その前後にはアドレス値を出力しておきます。(1) 次に、アドレス値の出力を止め、/CSを下げたまま/RDが下げます。この間にデータが出力されるのでデータを読み込みます。(2),(3) また、アドバンスのROMは連続読み出しに対応しています。さらに/CSを下げたまま/RDを上げ下げすることにより次アドレスのデータが順次出力されます。(4),(5) それぞれのタイミングに関する時間は不明なのですが、この制御に対しタイミング的に制限のある個所はなさそうなので、実際のタイミングに関してはソフト側で試行錯誤して決めることにします。 |
|
製作 まずは、GBAカートリッジのコネクタが必要です。ですが普通には手に入りません(当然です)。ところが逆に安価になったGBのコネクタを加工すればなんとかなりそうです。実際にアキバでは新品ないし中古品のGBポケットが2千円程度で手に入るので、本体から拝借して使ってしまいます。
上から、加工前写真の参考としてのGBCのコネクタ、同写真の加工位置、加工後のGBポケットのコネクタです。 真ん中の写真の黄色い線のあたりまで、ヤスリやカッターなどで削ります。一度に削りすぎずちょっとずつ現物あわせをしながら削っていきます。削りすぎると、コネクタ位置があいまいになり接触不良を起しそうです。 一番下の写真の通り、こんな感じになりました。 まずはGBコネクタが貴重品ですから変換基板を作ります。接続用にはFDDで使われている34Pフラットケーブルを使いました。通常のPC用ケーブルを使えば圧着済みのケーブルが容易に入手できます。コネクタは普通に電子パーツショップで入手できます。 実際に作ったのがこの回路です。ちょっと小さ目の基板に積め込み過ぎました。
|
|
ソフト作成 吸出しハードができたら、後は制御ソフトが必要です。WindowsではOSがI/Oを隠蔽するため、簡単にI/OにアクセスするためにDOSレベルのプログラムを作ることにしました。フリーのコンパイラであるLSI-C試食版を使いました。先ほどのタイミングチャートにあわせて制御できるプログラムを書きます。さらにタイミングをとるためには適当なウエイトが必要です。RTCの読み出しをウエイトルーチンにしました。 実行ファイル(lzh形式) ソース ACアダプタ、パラレルポート、GBAソフトを接続して、DOS窓からプログラムを起動します。オプションなどは下の画面のとおりです。
吸い出したイメージをバイナリエディタで覗くと、識別名らしき文字列が確認できました。 |
|
結果と今後の予定 一応組みあがったあとに、テスタやオシロスコープやすでになぜかあるROMイメージなどを駆使して試行錯誤をしているうちに、一見それらしいデータが出力されるようになりました。 しかし、すでにあるイメージと比較すると、どうしても0x10E4番地付近からデータが異なってしまいます。どうも0000FFFFというデータ列のあとのデータは異なるアドレスのデータになっているようです。そのデータ列があると内部カウンタが無効になるのでしょうか。あるいは単に私がタコで設計か配線に間違いがあるのかもしれませんが、今のところ詳細は不明です。 完全なイメージを作る吸出しには成功しませんでしたが、少なくとも4Kバイト強のデータはばっちり一致しました。元の情報の通りでおおむねROMのアクセス方法に間違いはなかったと確信できました。 また、完全なROMイメージを作るには現状のみの情報でも、きちんとアドレス出力ができる回路があれば出来そうな気がします。 アドレスを出力する回路はさほど大変でもないのですが、現在手持ちのパーツでは回路を構成するのが面倒なのでこれ以上の試作と検証は出来ていません。
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
次回版の回路図 一応次回版の回路図だけが出来ましたのでここにアップします。まだ作ったわけではありませんのでバグがあるかも知れない事と制御ソフトは自分で組む必要がありますが、チャレンジ精神のある方はこれを参考に試してはいかがでしょうか?
|