[PR]テレビ番組表
今夜の番組チェック

HOME  GB TOP 

japanese only.

作成 '01/5/20
更新 '01/6/12

ゲームボーイアドバンスROMの吸出し

とそのための情報など

 V1.5を製作しました。詳細はこちら!(6/12)

 この回路は個人的に独自に研究用として試作したものです。このページの情報を参考にして、いかなることがあろうとも当方は責任を持てません。また、メーカーなど関係各所にこの件で問い合わせることはご遠慮ください。

index

はじめに
ピン配置
動作タイミング
回路図
ハードの製作
読み出しソフトの作成と使い方
結果と今後の課題
必要そうな機材とパーツリスト
次回版の回路図


はじめに

 さて発売されてはや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カートリッジピン配置表
 1VDD電源3.3V 17AD11address/data bit11
 2N.C. ?
18AD12address/data bit12
 3/WR書き込み時にLow? 19AD13address/data bit13
 4/RD読み出し時にLow 20AD14address/data bit14
 5/CSROM選択時にLow 21AD15address/data bit15
 6AD0address/data bit0 22A16address bit16
 7AD1address/data bit1 23A17address bit17
 8AD2address/data bit2 24A18address bit18
 9AD3address/data bit3 25A19address bit19
10AD4address/data bit4 26A20address bit20
11AD5address/data bit5 27A21address bit21
12AD6address/data bit6 28A22address bit22
13AD7address/data bit7 29A23address bit23
14AD8address/data bit8 30
15AD9address/data bit9 31
16AD10address/data bit10 32GND電源グランド

ROMアクセスの概要

ROMアクセスのタイミング図

 動作タイミングは上図のようになっているようです。実際にはA0-A15とD0-D15は同一バス上で動いていますので同時に信号が出力されるような操作をしてはいけません。
 まず、/CSを下がりエッジでアドレス値が読みこまれるので、その前後にはアドレス値を出力しておきます。(1)
 次に、アドレス値の出力を止め、/CSを下げたまま/RDが下げます。この間にデータが出力されるのでデータを読み込みます。(2),(3)
 また、アドバンスのROMは連続読み出しに対応しています。さらに/CSを下げたまま/RDを上げ下げすることにより次アドレスのデータが順次出力されます。(4),(5)

 それぞれのタイミングに関する時間は不明なのですが、この制御に対しタイミング的に制限のある個所はなさそうなので、実際のタイミングに関してはソフト側で試行錯誤して決めることにします。

回路図

 以上の情報から、なるべく単純な回路でROM読み出しを実現させつつ、手持ちのパーツで作ったのがこの回路図です(クリックで原寸表示できます)。

GBAROM吸出し器V1回路図1/2 回路図その1
GBAROM吸出し器V1回路図2/2 回路図その2(電源部)

 簡単に説明しますと、HC541を3つで0アドレスの出力、HC157とLS257で16bitのデータを4bitずつ入力します。LS07は5Vレベルの信号を3.3Vに変換しています。パラレルポートはデータ出力を制御線に、ステータス入力をデータ入力に使っています(本来の用途と全く逆さま)。アドレスは0番地しか出力できませんが、連続アクセスで順次データが出てくるようなのでその機能を当てにして回路側で手を抜いています。

 電源はACアダプタを使い、定番電源ICで5Vと3.3Vを作っています。センターマイナスで配線して、いわゆるスーファミ用アダプタを使用可能にしています。

製作

 まずは、GBAカートリッジのコネクタが必要です。ですが普通には手に入りません(当然です)。ところが逆に安価になったGBのコネクタを加工すればなんとかなりそうです。実際にアキバでは新品ないし中古品のGBポケットが2千円程度で手に入るので、本体から拝借して使ってしまいます。

GBカセットコネクタ加工写真

 上から、加工前写真の参考としてのGBCのコネクタ、同写真の加工位置、加工後のGBポケットのコネクタです。
 真ん中の写真の黄色い線のあたりまで、ヤスリやカッターなどで削ります。一度に削りすぎずちょっとずつ現物あわせをしながら削っていきます。削りすぎると、コネクタ位置があいまいになり接触不良を起しそうです。

 一番下の写真の通り、こんな感じになりました。

 まずはGBコネクタが貴重品ですから変換基板を作ります。接続用にはFDDで使われている34Pフラットケーブルを使いました。通常のPC用ケーブルを使えば圧着済みのケーブルが容易に入手できます。コネクタは普通に電子パーツショップで入手できます。

 実際に作ったのがこの回路です。ちょっと小さ目の基板に積め込み過ぎました。

吸出し回路の写真

ソフト作成

 吸出しハードができたら、後は制御ソフトが必要です。WindowsではOSがI/Oを隠蔽するため、簡単にI/OにアクセスするためにDOSレベルのプログラムを作ることにしました。フリーのコンパイラであるLSI-C試食版を使いました。先ほどのタイミングチャートにあわせて制御できるプログラムを書きます。さらにタイミングをとるためには適当なウエイトが必要です。RTCの読み出しをウエイトルーチンにしました。

 実行ファイル(lzh形式) ソース

 ACアダプタ、パラレルポート、GBAソフトを接続して、DOS窓からプログラムを起動します。オプションなどは下の画面のとおりです。

吸出し中のDOS窓イメージ
ROMのダンプイメージ

吸い出したイメージをバイナリエディタで覗くと、識別名らしき文字列が確認できました。

結果と今後の予定

 一応組みあがったあとに、テスタやオシロスコープやすでになぜかあるROMイメージなどを駆使して試行錯誤をしているうちに、一見それらしいデータが出力されるようになりました。
 しかし、すでにあるイメージと比較すると、どうしても0x10E4番地付近からデータが異なってしまいます。どうも0000FFFFというデータ列のあとのデータは異なるアドレスのデータになっているようです。そのデータ列があると内部カウンタが無効になるのでしょうか。あるいは単に私がタコで設計か配線に間違いがあるのかもしれませんが、今のところ詳細は不明です。
 完全なイメージを作る吸出しには成功しませんでしたが、少なくとも4Kバイト強のデータはばっちり一致しました。元の情報の通りでおおむねROMのアクセス方法に間違いはなかったと確信できました。

 また、完全なROMイメージを作るには現状のみの情報でも、きちんとアドレス出力ができる回路があれば出来そうな気がします。
 アドレスを出力する回路はさほど大変でもないのですが、現在手持ちのパーツでは回路を構成するのが面倒なのでこれ以上の試作と検証は出来ていません。

ゲームカートリッジを接続、動作中

部品リスト
部品名型番など数量
TTL-IC74LS071
74LS2571
CMOS-IC74HC1572
74HC5413
レギュレータIC78051
LM3171
抵抗3.3kΩ4
330kΩ1
半固定抵抗1kΩ1
電解コンデンサ100μF1
10μF2
積層セラミックコンデンサ0.1μF11
10μF2
ユニバーサル基板部品実装用とGBコネクタ変換用2
ACアダプタ用ソケット-1
FDD用ケーブル-1
コネクタ34Pフラットケーブル用オス1
コネクタD-SUB25Pメス(直接PCに繋ぐならオスなど)1
線材ハンダ、錫メッキ線、
フラットケーブル、ラッピングワイヤなど
適当量
その他 実際には回路図には載っていないLEDと330Ω抵抗が
を3.3V-GND間に直列に入れてあったり、ICソケットを
使ってたりします。各自適当に工夫すると良いカモ
-

次回版の回路図

 一応次回版の回路図だけが出来ましたのでここにアップします。まだ作ったわけではありませんのでバグがあるかも知れない事と制御ソフトは自分で組む必要がありますが、チャレンジ精神のある方はこれを参考に試してはいかがでしょうか?
吸出し器V2回路図


acer@pal.tok2.com