2009年2月20日金曜日

カードリーダー解析完了

解析にはオシャレ魔女ラブandベリーを使用しました。
自作DSソフトからデータを読み込む手順は以下の通りです。

1.ROMの特定アドレスを3ワード分読み出す。 
※オシャレ魔女ラブandベリーでは、 以下のアドレスを読み込んでいます。
 カートリッジの識別はここで行います。

 左側が読み出しアドレスで、右側が応答値
 0x08000059 → 0x78F9
 0x0800FFFF → 0xFDFF
 0x08000056 → 0x78F6

2. 手順1を2回繰り返す

3.SRAMの0x0A000000を読み込む。 
読み出した値がカードを読み込んだときの値(初期値は0x83)
バーコードの白黒が変わるたびに、下位1bit目が変化します。
例:0x11,0x13,0x11,0x13 以下繰り返し
(一定以上の速度で読み取らせないと、反応しないようです)
ソフトウェア側で一定時間ごとに読み込ませることにより、バーコードの1/0を判別します。
オシャレ魔女ラブandベリーで使用されているバーコードは、Code39規格の様です。

4. 手順1を行う

5.16msのWait(VSyncに同期?)

6.以下1.から繰り返し

※PHI端子より、16.78MHzのクロックの送出が必要。

※バーコードリーダーの有効、無効を設定出来ます
 無効の場合、バーコードを読み取ることが出来ないので注意してください。
 (有効になっている場合、バーコード読み取り部から赤い光が出ます)
 有効にするには
 SRAMの0x0A000000に0x81を書き込みます

 無効にするには
 SRAMの0x0A000000に0x00を書き込みます
※読み取り時のタイミングは下記画像を参照してください。

カードリーダーGET

NDS用カードリーダーとソフトのセットが
中古ワゴンセールで投げ売りされていたので買ってみた。

こういう風に使うらしい
http://sega.jp/ds/oshare/

対応カード
http://osharemajo.com/card/card0807/card_h070.html

表面
裏面にはHCV-1000と書かれている。
対応ソフトを起動すると真ん中に赤い光の筋が現れて
バーコードを読み取ることが出来るようだ。




そして早速分解

下側にある小さい基板が光学センサー

電源供給用レギュレータ+センサードライバ用トランジスタ
+センサ電圧増幅用オペアンプ+CPLDの構成のようだ。
CPLDは削られているのか型番は読めなかった。
配線はSRAM用データバス8bitとROM/SRAM用アドレスバスの下位5bit
他制御線が接続されているようだ。

暇なときにでも解析してみよう。

2009年2月18日水曜日

フェイスニングスキャンGET

大人のDS顔トレーニングがワゴンセールで安かったので
中に入っているフェイスニングスキャンカートリッジ目当てで買ってみた。
大層な名前がついているけど、要はGBAカートに差し込むデジカメユニット
早速分解してみた。

表面


裏面&カメラを伸ばしてみた


内部構成
無駄なくコンパクトにまとまっており、こだわりを感じさせられる。
デジカメユニットとは中央にあるフレキでメイン基板と接続されるようだ。
左下の四角くて黒い物体がメインチップ


中の基板を取り出してみた
すっきりした配線となっており、4層以上の基板が使用されてると思われる。
金メッキは高価な電解金メッキを採用しているようだ。


次はロジアナで解析してみようと思います。

2009年2月16日月曜日

パドルコントローラの検証用ソフト作成

koiseya氏の解析情報を元に、某パドルコントローラの検証用ソフトを作成しました。
基本的にはSRAM[0]とSRAM[1]を読むだけでOKの模様。
void paddle_init()
{
// SRAM Access Time = 18 cycles
// ROM 1st Access Time = 18 cycles
// PHI-pin out = 4.19MHz
REG_EXMEMCNT = 0x002F;
}

bool paddle_check()
{
uint16 w1, w2, w3;
w1 = GBA_BUS[0x0059];
w2 = GBA_BUS[0xFFFF];
w3 = GBA_BUS[0x0056];
return w1 == 0xEFFF && w2 == 0xEFFF && w3 == 0xEFFF;
}

uint16 paddle_scan()
{
uint16 sram = 0xFFFF;
if (paddle_check()) {
uint8 sram0 = SRAM[0];
uint8 sram1 = SRAM[1];
sram = sram1 << 8 | sram0;
}
return sram;
}
paddle_init()で初期化後、paddle_scan()を呼べば0~FFFhの値が返る。
パドルコントローラ未装着時はFFFFhが返る。

2009年2月15日日曜日

ブログ内のソースコードが色付けされるように!

おためし。
int main()
{
irqInit();
irqEnable(IRQ_VBLANK);
consoleDemoInit();

for (;;) {
swiWaitForVBlank();
consoleClear();
iprintf("Hello, NDS world!\n");
}
}

int main()
{
irqInit();
irqEnable(IRQ_VBLANK);
consoleDemoInit();

for (;;) {
swiWaitForVBlank();
consoleClear();
iprintf("Hello, NDS world!\n");
}
}

ROMEO2解析完了

回路図も完成した。この基板を使って何かテストコードを書いてみるか・・・。

さすがに完全な回路図はマズいので、
コネクタ&チップ類とFPGAとのピン接続対応資料を張っときます



2010/03/29追記
需要が有る様なので、時間があるときに添付資料の追加修正しておきます。

2009年2月9日月曜日

ROMEO2解析メモ

以下調べたことメモ

・コンフィグレーションモードについて
 M0-M2の状態より、スレーブセレクトマップ

・JTAG端子について
 M0-2はちゃんとパターンカット出来るように引き出されているため
 改造をすることによりJTAG設定になる。
 左上の2列3ピンのコネクタがJTAG端子

・コンフィグレーションについて
 アドレスデコーダが組み込まれており
 NDSより特定のアドレスにアクセスすることにより
 コンフィグレーションが可能

追記:解析は完了しました 資料は下記を参照して下さい。
http://hkhacks.blogspot.com/2009/02/romeo.html

ROMEO2解析開始

ROMEO2をFPGAボードとして遊び倒すのに必要な情報が全く無いので
手始めに解析に必要なチップの型番を調べてみた。
シルクのロケーション名がチップ下に書いてあるのが非常に痛い。
以下メモ

ケータイ用コネクタ(Page7参照)
http://www.nttdocomo.co.jp/binary/pdf/corporate/technology/document/foma/foma5.pdf

DAC
TI(Burr-Brown)PCM1770PW
http://focus.tij.co.jp/jp/docs/prod/folders/print/pcm1770.html

FPGAコンフィグレーション時アドレスデコード?用ロジック
TI SN74AHC244PW(ロット印字:HA244)
http://focus.ti.com/docs/prod/folders/print/sn74ahc244.html

TI SN74AHCT139PW(ロット印字:HB139)
http://focus.ti.com/docs/prod/folders/print/sn74ahct139.html

レギュレータ各種(1.2/2.5V)
RICOH R1161N121D(ロット印字:R12xx)
RICOH R1161N251D(ロット印字:R25xx)
http://www.ricoh.co.jp/LSI/product_power/vr_ldo/r1161x/index.html

2009年2月8日日曜日

新ハンダごてGET

日本橋をふらついてたら半田ごて(FX-951)が妙に安くなっていたので速攻GETしてみた。
このコテは、鉛フリーハンダとの相性がとても良いとのこと。
ちなみに会社では、こてが同時に2本使える上位機種(FX-952)を使用している。

HAKKO FX-951
http://www.hakko.com/japan/products/hakko_fx951.html

箱はとってもシンプル

設置してみた
前のコテに比べてステーション部がかなり大きい。つーかちょい邪魔。


熱量の差か、鉛フリーハンダを使っている時でも半田付けがしやすくなった
(熱量が大きいので、手早く酸化する前に半田付け作業が終わる。)

鉛フリーハンダを使って半田付けをよくする人には結構お勧めできるかも。

2009年2月7日土曜日

パドルコントローラ解析完了

解析にはアルカノイドDSを使用しました。

自作DSソフトからデータを読み込む手順は以下の通りです。

1.SRAMの0x0A000001を読み込む。
 読み出した下位4bitの値が現在の回転値。  
 ※一周単位?で値が変化する。
  左回転で値減少(0の次はFに戻る)、右回転で値増加(Fの次は0に戻る)
  数値の初期値(電源投入時)は0

2.ROMの適当なアドレスを合計3バイト分読み出す。
 ※データは0xEFが返ってきます。
 ※アルカノイドDSでは、
  0x08000059,0x0800FFFF,0x08000056を読んでいるようです

3.SRAMの0x0A000000を読み込む。
 読み出したByte値が現在の回転値。
 ※1度単位?で値が変化する。
  左回転で値減少(00の次はFFに戻る)、右回転で値増加(FFの次は00に戻る)
  数値の初期値(電源投入時)は00

4. 手順2(ROM空読み込み)を3回繰り返す

5.以下1.から繰り返し
アルカロイドDSでは、約16msのインターバルで読んでいるようです。

※PHI端子より、4.19MHzのクロックの送出が必要。

ロジアナ解析画像
一部おかしいところがあるけど気にしない。





興味深い記事を発見

外国でGPS@NDSと似たようなのがあるみたい
いろいろ参考に出来そうだ。

GPS-DS
http://www.pdroms.de/news/7333/

GPS for DS
http://www.natrium42.com/blog/?p=31

DS-RAMアダプタについて

使っていて調べた&分かったことを以下メモ

・セットアップ&使用手順は以下を参照
 http://optimize.ath.cx/NDS/cusbram.html

・公式サイトでドライバーはVista非対応と書いてあるが、実際は使える
 (EZUSB.SYSをWindows\System32\Driversにコピーしておけば
 Vistaでもドライバーのインストールが通る。)

・ファームウェアの転送は約50秒程必要
 2回目以降は不要

・転送出来るNDSファイルは1MByteまで
 (転送はめっさはやい)

・NDS@GPSとの共存は可能かもしれない
 (Rev.2相当のハードウェアは必要)

・使用する際にPasscardを使えば、FlashMeは不要ぽい

各種解析用アダプター完成

各種GBA周辺機器・カートリッジを解析するためのアダプターがやっと完成。
ついでなんでDS-RAMアダプタとも連携可能な仕様にしてみた。
右に出ているのがロジアナにつなぐためのハーネス
中央がGBAカートリッジとDS-RAMアダプタへ接続するためのコネクタ
左がNDSへ接続するコネクタ


このようにして連携(写真を撮るため反対に向けてます)
これでROMEO2なり、パドルコントローラーの解析が出来そうだ。