カメレオンUSB DS−RAMアダプタ

DSハッカー


<概要>
DS−RAMアダプタは任天堂DSのSLOT2(GBAコネクタ)に接続して、DSとPCの間でデータやプログラムを転送するためのハードウエアです。カメレオンUSBと組み合わせて、カメレオンUSBのアドオン基板として動作します。
RAM容量は8Mbit(1Mbyte)ですので、市販のゲームを起動するような使い方は出来ません。あくまでもDS用の自作プログラムを効率よく開発するのが目的です。

自作プログラムを効率的に開発するために、DSとPC間で通信を行うための、通信バッファを2組実装しています。通信バッファの一つは、デバッグ中のプログラムでメッセージを表示するためのprintf()関数や、DSからPCのファイルにアクセスするためのホスト機能に使用されます。(通信バッファはSLOT2のSRAM領域に実装されます。このためARM7とARM9のどちらからもアクセス可能ですが、同時にアクセスすることは出来ません。)

プログラムの開発途中では、更新したプログラムを頻繁に再起動する必要があります。DS-RAMアダプタではDS本体を改造してリセット信号を引き出すことで、プログラムのダウンロード後、自動的にDS本体のリセットを行い、プログラムの再起動をすることが出来ます。(オプション)

DS−RAMアダプタはDS自作プログラムを開発するのが目的ですが、PCとDSの間で高速にデータを転送できますので、市販のゲーム改造ツールのサーチツールとしても使用することが可能です。(ワザポン用サーチツールはこちら

カメレオンUSB、DS−RAMアダプタはこちらのページから購入できます


<ブート方法>
DS−RAMアダプタをDSに接続しただけでは、DS−RAMアダプタに書き込まれたDSのプログラムは起動しません。
このためDS-RAMアダプタを使用するには次のどちらかの方法でSLOT2からプログラムを起動する必要があります。

FlashMeの方が電源ON(リセットON)からSLOT2のプログラムが起動するまでの時間が短いですので、開発効率は上がりますが、DS本体の改造を必要とするところが難点です。
DS本体をFlashMeさせるプログラムは、ブートカートリッジ(PassCARDやPassKEYなど)とDS−RAMアダプタを使用して起動することが可能です。


<DS−RAMアダプタの製作>
DS−RAMアダプタはキットです。半田付けに自信の無い方は完成品(製作代行)をご利用ください。
DS−RAMアダプタを使用するには別途カメレオンUSBを用意してください。

DS−RAMアダプタを実際に使用するためには、別途市販のGBAゲームカートリッジのケース(内部の基板は使いません)、DSを傷つけないためのゴムシート、リセット接続ケーブル(オプション)が必要になります。(キット・完成品には付属しません)
また、GBAゲームカートリッジやDSを分解するために、Y字の形をした特殊なドライバーが必要になります。(ホームセンタや秋葉の工具屋で入手可能です)

キットが届きましたら組み立てる前に部品が揃っていることを確認ください。
カメレオンUSB、DS−RAMアダプタはこちらのページから購入できます。

パーツ名 個数 備考
SRAM基板 1  
GBAカートリッジ基板 1  
4Mbit SRAM
(TC55V16256FT-12/CY7C1041CV33-12)
2 半田付けされてません
0.1uFチップセラミックコン 4 1個は予備です
100uF 16V電解コンデンサ 1  
22pFチップセラコン 3  
2*20ピンヘッダ 2  
2*15ピンヘッダ 2  

20-30W程度の先端の細い半田ごて、ピンセット、ルーペ(虫眼鏡)、はんだを用意してください。
チップ部品のはんだ付けは、片側のランドにはんだを盛っておき、半田ごてではんだを溶かしながら、ピンセットでチップ部品を固定します。
ピンセットでチップ部品を飛ばしたりしないように注意してください。


SRAMを半田付けします。


裏面には0.1uFのチップコンデンサ(4こぐち)と100uFの電解コンデンサを取り付けます。
電解コンデンサには向き(極性)があります。写真の外側が-(マイナス)になります。
最後に2*15のピンヘッダを下向きに取り付けます。


GBAカートリッジには22pF(3こぐち)のチップコンデンサを半田付けします。
(GBAカートリッジの上ぶたを閉めるときにチップコンデンサが干渉するので、
なるべく下側に取り付けるとよい)


2*20のピンヘッダは写真のように2個を重ねることで高さを確保します。
重ねた状態で全てのピンを半田付けします。


GBAカートリッジ基板にピンヘッダを取り付る際は、少し外側に倒した状態で半田付けします。
(DSスロットにGBAカートリッジを挿す際に、少し傾斜があったほうが使いやすいので)

市販のGBAゲームカートリッジのプラケースを加工します。
加工するのはプラケースの下側だけです。

左側が加工前の状態で、右側が加工後の状態です。
一番上の部分のへりを全て取り除くような感じになります。
電動カッターなどがあると楽ですが、普通のカッターナイフなどでも加工することが出来ます。


ケースを加工することで、このようにカートリッジ内にぴったり基板が収まります。


<リセットケーブルを取り付ける>(オプション)

DS本体を改造してリセット信号を引き出すと、dsconsでプログラムをロードした後に、自動的にDS本体のリセットをかけることが出来ます。
(リセットケーブルを取り付けなくても、手動でDS本体の電源をOFF/ONすればプログラムは起動されます。)

リセット信号はこの写真の場所に接続します。

高解像度写真
初期型DSの場合は写真の緑のワイヤの位置がリセット信号になります。
写真では無線LANモジュールのシールドを外してありますが、通常はシールドされています。
(私のDSはデュアルファームウエアにしてあるので、このように多数の配線が出ていますが気にしないでください。)


高解像度写真
Liteの場合は無線LANアダプタがソケット式ですので、無線LANアダプタを外します。
コネクタの左下からリセット信号が取り出せます。
(DSLiteは分解時に、タッチパネル用のケーブルは外さないほうがいいです。私の場合は外して、再度接続することが出来ませんでした。リセット信号を引き出す場合は、旧型のDSを用意したほうが無難かもしれません。)

DSから引き出したリセット信号はGBAカートリッジ基板と接続します。
私はDS本体の内部に、1Pのピンヘッダのメスコネクタをホットボンドで固定しました。DSのケースには小さい穴をあけ、GBAカートリッジ基板のリセットケーブルに1Pのピンヘッダメスを取り付け、抜き差しすることで接続できるようにしました。
(このようにすることで、DS本体からケーブルがはみ出ませんので、携帯性に優れています)


<デバイスドライバのインストール>

カメレオンUSBを使用するにCypress社のデバイスドライバをインストールする必要があります。
(Windows XP/200用です。VISTAには非対応)
デバイスドライバはこちらのものをインストールしてください。
うまくインストールできない場合はEZ-USBのSDKをインストールします。

ドライバが正常にインストールされた状態で、カメレオンUSBをPCに接続するとWindowsのデバイスマネージャで
「Cypress EZ-USB(2131Q/2131S/2135S) - EEPROM missing」が確認出来ます。


<カメレオンUSBのCPLDプログラム>

カメレオンUSBはCPLDと呼ばれるロジックをプログラム可能なデバイスが使用されています。
DS-RAMアダプタではCPLDにロジックを書き込むことで、GBAのバスからSRAMにアクセスしたり、EZ-USBを介してPCからSRAMにアクセスする機能などを実現しています。
(「DS-RAMアダプタ+カメレオンUSB」完成品を注文された場合は、ロジックは書き込み済みですので、この作業は不要です。)

ロジックの書き込みはcusbwr.exeを使用します。
書き込むロジックはcusbram.jedになります。
nds_cpld.zipをダウンロード&解凍すると上記2つのファイルが得られます。

カメレオンUSBにSRAMボードを接続していない状態で、PCとUSBケーブルで接続します。
Windowsのコンソール画面(DOS窓)から「cusbwr cusbram.jed」と実行します。
下記のように表示されれば書き込み完了です。


<カメレオンUSBとの接続>

GBAカートリッジのカバーを取り付ければ完成です。

SRAM基板はカメレオンUSBに写真のように取り付けます。

SRAM基板に印刷されている矢印が、カメレオンUSBのUSBコネクタ側にぴったりつく位置に取り付けます。

このままの状態では、DSを接続したときにDSの裏面とピンヘッダの半田付けした部分が当たり、DSに傷がつきますので、ピンヘッダの部分にゴムシートを取り付けます。(オプション)


GBAカートリッジ基板はカメレオンUSBのCN1コネクタに写真の向きに取り付けます。


この状態でDSのSLOT2にGBAカートリッジ基板をしっかり差し込みます。

そして、リセットケーブルをDS本体に接続します。(オプション)


<DSにプログラムをダウンロードして実行する>

使用するDSはFlashMeされているものを使用します。
FlashMeしていない場合はSuperKeyなどをSLOT1に挿入してGBAスロットからプログラムを起動できる状態にする必要があります。

DSの電源を入れ、カメレオンUSBをPCと接続します。
Windowsでコマンドプロンプト(DOS窓)を開き、「dscons sample.nds」を起動します。


dsconsはndsプログラムが指定された場合は、自動的にGBAスロットから起動できるローダを付加して、
GBAスロットのRAM(8Mbit)に書き込みます。
gbaファイルが指定された場合は、ローダの付加は行わずそのまま書き込む。
書き込み後、DS本体のリセットをかけ、GBAスロットのプログラムを実行します。
(リセットケーブルを配線してない場合は、この時点でDS本体の電源のOFF/ONを行ってください。)

DSの画面に「hello ....」のメッセージが表示されれば正常に動作しています。

dsconsはDSのプログラム実行後、DSからのprintf()メッセージの表示や、
PCのファイルI/O操作を行うために実行されたままの状態になります。
キーボードのESCキーを押すとdsconsは終了します。

ダウンロード


<開発環境・ドキュメント>

コンパイラなどの開発環境はWindowsで使用できるGNUツールのDevkitProがお勧めです。

NDS関連のドキュメントはGBATEKのページが充実しています。


<dsconsの機能>

hio.c hio.hを参照してください。
メッセージ表示やファイルI/O機能はGBAスロットのSRAM領域を
使用してDSとPCでデータの転送を行うことで実現しています。
このため、ARM7、ARM9のどちら側からでも使用できますが、
同時に使用することは出来ません。

ファイルI/Oのサンプル

i=PcOpen("test.bin",PC_RDWR|PC_CREAT);
PcPrintf("pcopen=%d\n",i);
PcWrite(i,sample,1024*2);
PcPrintf("pcwrite ok\n");
PcClose(i);
i=PcOpen("test.bin",PC_RDONLY);
PcRead(i,sample2,1024*2);
PcClose(i);

引数指定のサンプル

「dscons sample.nds arg1 arg2」を実行すると
argc = (int)*(u32 *)0x080001bc;
argv = (char **)0x080001c0;

argc=2、argv[0]="arg1" argv[1]="arg2"となる

ダウンロード