プレイステーション・PAD/メモリ・インターフェースの解析                  Nifty−ID:HFB03536 藤田 95/ 4/17 初版 95/11/23 AVマルチ出力の端子説明追加 96/ 1/13 PAD応答IDの説明追加 電源ピンの最大消費電力についての注意追加 96/ 1/22 ナスカ(パチンココントローラ)の説明追加 96/ 2/ 2 メモリカード情報の追加  TIMファイルフォーマットの追加(by Mike) 96/ 2/10 マルチタップ(コントローラ)の説明追加 97/ 5/16 アナログコントローラの説明追加  パッドデータの内容については一部'H.Kashima'氏のデータを参考としています. =============================== 注意 ========================================  この情報は個人で解析したモノであり信頼性は保証いたしかねます.  この情報を個人で使用する目的以外(投稿等)には、メールで一報入れるか、参考 文献としてその旨を明記して下さい。 ============================================================================ 1.ピンアサイン メモリカード _______________________________ | | | □ □ □ □ □ □ □ □ |  (本体正面より見た図) |_______________________________|   ピン 9 7 6 5 4 3 2 1   PS PADコネクタ ============================= ‖○ ○ ○|○ ○ ○|○ ○ ○ ‖ (本体正面より見た図) \_______|________|________/   ピン 9 8 7 6 5 4 3 2 1 Pin 信号名 方向 論理 機能 -------------------------------------------------------------------- 1. DAT IN 正 PAD/メモリからのデータ 2. CMD OUT 正 PAD/メモリへのコマンド 3. +7V -- -- +7.6V CD-ROMドライブ電源 4. GND -- -- 電源のグランド 5. +3V -- -- +3.6Vシステム電源 6. SEL OUT 負 PAD/メモリのセレクト 7. CLK OUT -- コマンド/データの取り込みクロック 8. -- -- -- 未定 9. ACK IN 負 PAD/メモリからの応答信号 -------------------------------------------------------------------- 注1)方向はPS本体を基準としたIN/OUT 注2)PADコネクタ上部の金属端子は、ピン4とケーブルシールドに接続 注3)コネクタ1/2ではSEL信号が違うだけそのほかの信号は共通 注4)3番ピンのドライブ電源はCDの動作により変動(7.2〜7.8V) 注5)メモリカードとPADのコネクタは共通 注6)メモリには8番ピンはない ==================================================================== 注7)3/5番ピンの電源は、20mAのヒューズがついているので消費    電力には注意すること。 ==================================================================== ------------------------------------------------------------------------------ 2.インターフェースタイミング図  PAD/メモリカードともデータ/コマンドを除きタイミングは共通 ・全体図 ____ _____ SEL- |____________________________________________________________| ______ ____ ____ ____ ____ _________ CLK |||||||| |||||||| |||||||| |||||||| |||||||| _______________________________________________________________________ CMD X 01h XXXX 42h XXXX 00h XXXX 00h XXXX 00h XXXX ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ _____________________________________________________________ DAT -----XXXXXXXXXXXXX ID XXXX 5Ah XXXX key1 XXXX key2 XXXX----- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ACK- ---------------|_|---------|_|---------|_|---------|_|----------------- ・スタート部分の拡大図 ____ SEL- |__________________________________________________________________ ______ _ _ _ _ _ _ _ __________________ _ _ _ _ CLK |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| |_| __________ ___ CMD |________________________________________________| |_______ ____ DAT -----XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |___________ ACK- ----------------------------------------------|___|-------------------- X = 不定 , -=ハイインピーダンス   コマンドはPAD=01h,メモリカード=81h.   データ/コマンドはBit0〜Bit7の順で転送される.   4Ahデータの転送は01010010のデータとなる.   データ/コマンドはクロックの立ち下がりで出力.立ち上がりで取り込みとする.   データ/コマンドはクロックの立ち上がりに確定していること.   デバイスは100μsec以内にACK−を返さない場合、未接続と認識される.   セレクトされなかったデバイスは出力ピンをハイインピーダンスとすること.  クロックの間隔は250KHz(4μsec) (注1)   最終バイトのシーケンスではACK−は必要無い.   ACK−の信号幅は、2μsec以上あればよい.   PADのSEL−から次のSEL−までの時間は約16ms   メモリカード読み書きはPADアクセス間に行われる.(16msに1回の転送) 0ms 16ms 32ms 64ms 時間 ------|< 16ms >|---------------|---------------|---------------| ______ _ _ ____________ _ __ ____________ SEL |__| |________| |__| |__| |_______| |__| | 注)はアクセスされたときのみ 注1)マルチタップとの通信では1MHz(1μsec)の場合がある    自作回路でのメモリ/パッドへのアクセス時の周波数は、遅くても動作可能    (250KHzにこだわる必要はない)    PS本体へ接続する自作回路は、250KHz(場合により1MHz)の速度に    対応可能なこと. ------------------------------------------------------------------------------ 3.インターフェース回路図 ・PAD参考例  PAD   PS本体から /| P R,200Ω P=Pullup(必要なし?) PAD SEL ----○< |--+--\/\/\/-- PS SEL-  \| HC14相当 /| P R,200Ω PAD CMD- ----○< |--+--\/\/\/-- PS CMD  \| HC14相当 /| P R,200Ω PAD CLK- ----○< |--+--\/\/\/-- PS CLK  \| HC14相当 PAD DAT _________ | |\○ ----| >------------- PS DAT | |/ ▽ HC125相当 PAD ACK- _________ | |\○ ----| >------------- PS ACK- | |/ ▽ HC125相当   DAT/ACK信号は、PAD/メモリ共通となっているので、必ずオープン  ドレインとすること. ・PS参考例 PS本体  PADへ SEL- _________ | |\○ P P=Pullup 1Kオーム ----| >--+---------- PAD SEL- | |/ ▽ HC125相当 CLK _________ | |\○ P ----| >--+---------- PAD CLK | |/ ▽ HC125相当 CMD _________ | |\○ P ----| >--+---------- PAD CMD | |/ ▽ HC125相当 /| P R,200Ω DAT- ----○< |--+--\/\/\/-- PAD DAT  \| HC14相当 /| P R,200Ω ACK- ----○< |--+--\/\/\/-- PAD ACK-  \| HC14相当   本体側のSEL/CLK/CMDはHC125でなく直接CMOSでドライブして  もよい。 ------------------------------------------------------------------------------ 4.PAD通信フォーマット PADはPSからのコマンド'01h'を検出して動作を開始する事。   PADでは1バイトの応答IDを持ち、IDの後に'Z'(5Ah)を出力してから  2バイトのキーコード+拡張コードを送出する。  応答ID:上位4ビット = コントローラのタイプを示す   下位4ビット = 転送バイト数(3バイト目以降のデータ)/2                0の場合32バイトとなる.   PADとの通信は、応答IDと'Z'を受信した後応答IDの下位4ビット×2  バイト分のデータを転送する。転送するデータ数は最低5バイトとなる。 ノーマルPAD       時間の流れ → 10000000 01000010 01011010 01234567 01234567 |--------|--------|--------|--------|--------| CMD | 01h | 42h | 00h | 00h | 00h | |--------|--------|--------|--------|--------| xxxxxxxx 10000010 10100101 01234567 01234567 |--------|--------|--------|--------|--------| DAT | ---- | 41h | 5ah | SW.1 | SW.2 | |--------|--------|--------|--------|--------| 応答ID 'Z' コントローラタイプ:4 転送バイト数   :5(3+1×2) キーデータは押されたボタンが0となる  ・SCPH−1010 ノーマルパッド +----------+--------+----+----+----+----+----+----+----+----+ | バイト |コマンド| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+========+====+====+====+====+====+====+====+====+ |1バイト目| 0x01 | ----- | 不定 +----------+--------+---------------------------------------+ |2バイト目| 0x42 | 0x41 | 'A' +----------+--------+---------------------------------------+ |3バイト目| 0x00 | 0x5a | 'Z' +----------+--------+----+----+----+----+----+----+----+----+ |4バイト目| 0x00 | 左 | 下 | 右 | 上 |スタート| 1 | 1 |セレクト| +----------+--------+----+----+----+----+----+----+----+----+ |5バイト目| 0x00 | □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+--------+----+----+----+----+----+----+----+----+  ・SLPH−0001 ネジコン +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x23 | +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 左 | 下 | 右 | 上 |スタート| 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |5バイト目| 1 | 1 | A | B | R | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |6バイト目| ねじり ADCデータ 最左:0x00, 中心:0x80 | +----------+---------------------------------------+ |7バイト目| I ボタン ADCデータ(8bit unsigned) | 00h 〜 FFh +----------+---------------------------------------+ |8バイト目| II ボタン ADCデータ | 00h 〜 FFh +----------+---------------------------------------+ |9バイト目| Lボタン ADCデータ | 00h 〜 FFh +----------+---------------------------------------+  ・SLPH−0007 ナスカ(パチンココントローラ) +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x23 | +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |5バイト目| 1 | 1 | 1 |ネジリ| 1 | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |6バイト目| ねじり ADCデータ ホーム:0x00, 右:0x7f | +----------+---------------------------------------+ |7バイト目| 0x00 | 使用しない +----------+---------------------------------------+ |8バイト目| 0x00 | 使用しない +----------+---------------------------------------+ |9バイト目| 0x00 | 使用しない +----------+---------------------------------------+ 5バイト目の'ネジリ'は、ハンドルをねじると0となる。  ・SLPH−0015 ボリュームコントローラ +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x23 | +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 1 | 1 | 1 | 1 | A | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |5バイト目| 1 | 1 | B | 1 | 1 | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |6バイト目| 回転 ADCデータ 最左:0x00, 最右:0xFF | +----------+---------------------------------------+ |7バイト目| 00h 固定 | +----------+---------------------------------------+ |8バイト目| 00h 固定 | +----------+---------------------------------------+ |9バイト目| 00h 固定 | +----------+---------------------------------------+  ・SCPH−1030 マウス +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x12 | +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | +----------+----+----+----+----+----+----+----+----+ |5バイト目| 1 | 1 | 1 | 1 | 左 | 右 | 0 | 0 | +----------+----+----+----+----+----+----+----+----+ |6バイト目| 縦移動量 8bitSigned 上:+,下:-,なし:00 | +----------+---------------------------------------+ |7バイト目| 横移動量 8bitSigned 右:+,左:-,なし:00 | +----------+---------------------------------------+  ・SCPH−1110 アナログジョイスティック(アナログモード) +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x53 | +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 左 | 下 | 右 | 上 |スタート| 1 | 1 |セレクト| +----------+----+----+----+----+----+----+----+----+ |5バイト目| □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+----+----+----+----+----+----+----+----+ |6バイト目| 右ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+---------------------------------------+ |7バイト目| 右ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+---------------------------------------+ |8バイト目| 左ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+---------------------------------------+ |9バイト目| 左ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+---------------------------------------+ 注)4バイト目の上下左右は、右ハンドルの方向キー アナログジョイスティック(デジタルモード) +----------+----+----+----+----+----+----+----+----+ | バイト | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+====+====+====+====+====+====+====+====+ |1バイト目| ----- | 不定でよい +----------+---------------------------------------+ |2バイト目| 0x41 | 'A' +----------+---------------------------------------+ |3バイト目| 0x5a | 'Z' +----------+----+----+----+----+----+----+----+----+ |4バイト目| 左 | 下 | 右 | 上 |スタート| 1 | 1 |セレクト| +----------+----+----+----+----+----+----+----+----+ |5バイト目| □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+----+----+----+----+----+----+----+----+ 注)左右のハンドルついているボタン/方向キーはすべて無効   左右のハンドル位置はどちらを操作しても上下左右ビットに反映  ・SCPH−1150(アナログコントローラ)  アナログコントローラは、4/5バイト目のコマンドに41hを 送信することにより、バイブレーションを行う。  バイブレーション機能は、全モードで使用可能。  アナログコントローラはピン3(ドライブ電源)をバイブレーション 用のモータ電源として使用する。 アナログコントローラ(デジタルモード:LED消灯) +----------+--------+----+----+----+----+----+----+----+----+ | バイト |コマンド| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+========+====+====+====+====+====+====+====+====+ |1バイト目| 0x01 | ----- | 不定 +----------+--------+---------------------------------------+ |2バイト目| 0x42 | 0x41 | 'A' +----------+--------+---------------------------------------+ |3バイト目| 0x00 | 0x5a | 'Z' +----------+--------+----+----+----+----+----+----+----+----+ |4バイト目| バイブ | 左 | 下 | 右 | 上 |スタート| 1 | 1 |セレクト| +----------+--------+----+----+----+----+----+----+----+----+ |5バイト目| バイブ | □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+--------+----+----+----+----+----+----+----+----+ 注)左右のハンドルは無効/バイブ=オフ:0x00,オン:0x41   バイブレーションのオン/オフは二進で01xxxxx1b,xxxxxxx1b  (x=なんでもよい)を送信することで一定時間のバイブレーション   を行う。 アナログコントローラ(アナログモード:赤LED点灯) +----------+--------+----+----+----+----+----+----+----+----+ | バイト |コマンド| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+========+====+====+====+====+====+====+====+====+ |1バイト目| 0x01 | ----- | 不定 +----------+--------+---------------------------------------+ |2バイト目| 0x42 | 0x73 | +----------+--------+---------------------------------------+ |3バイト目| 0x00 | 0x5a | 'Z' +----------+--------+----+----+----+----+----+----+----+----+ |4バイト目| バイブ | 左 | 下 | 右 | 上 |スタート|右SW|左SW|セレクト| +----------+--------+----+----+----+----+----+----+----+----+ |5バイト目| バイブ | □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+--------+----+----+----+----+----+----+----+----+ |6バイト目| 0x00 | 右ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+--------+---------------------------------------+ |7バイト目| 0x00 | 右ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+--------+---------------------------------------+ |8バイト目| 0x00 | 左ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+--------+---------------------------------------+ |9バイト目| 0x00 | 左ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+--------+---------------------------------------+ 注)右SW/左SWはハンドルを押したときのスイッチ アナログコントローラ(アナログジョイスティックモード:緑LED点灯) +----------+--------+----+----+----+----+----+----+----+----+ | バイト |コマンド| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | +==========+========+====+====+====+====+====+====+====+====+ |1バイト目| 0x01 | ----- | 不定 +----------+--------+---------------------------------------+ |2バイト目| 0x42 | 0x53 | +----------+--------+---------------------------------------+ |3バイト目| 0x00 | 0x5a | 'Z' +----------+--------+----+----+----+----+----+----+----+----+ |4バイト目| バイブ | 左 | 下 | 右 | 上 |スタート| 1 | 1 |セレクト| +----------+--------+----+----+----+----+----+----+----+----+ |5バイト目| バイブ | □ | × | ○ | △ | R1 | L1 | R2 | L2 | +----------+--------+----+----+----+----+----+----+----+----+ |6バイト目| 0x00 | 右ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+--------+---------------------------------------+ |7バイト目| 0x00 | 右ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+--------+---------------------------------------+ |8バイト目| 0x00 | 左ハンドル 左右 左:00h,中心:80h,右:FFh | +----------+--------+---------------------------------------+ |9バイト目| 0x00 | 左ハンドル 上下 上:00h,中心:80h,下:FFh | +----------+--------+---------------------------------------+  ・SCPH−1070 マルチタップ +----------+----+----+----+----+----+----+----+----+ | 詳細は項目7を参照 + +----------+----+----+----+----+----+----+----+----+ ------------------------------------------------------------------------------ 4.メモリカード通信フォーマット メモリカードはPSからのコマンド'81h'を検出して動作を開始  メモリの128バイトを1フレームとして通信  メモリカードからのデータは、カード側が設定しないと送信データが戻ってくる 4.1.ライトコマンド   種別    バイト数 機能   -------------------------------------------------------------------------   コマンドヘッダ  4 メモリライトの指定   アドレス指定  2 ライトアドレスの指定(フレーム単位)   データブロック  128 メモリへのライトデータ   XORフラグ  1 チェック用の排他論理和コード   終了ステータス  2 メモリライトの結果   終了フラグ  1 終了フラグ   ------------------------------------------------------------------------- 計    138 コマンドヘッダ アドレス指定 |--------|--------|--------|--------| |--------|--------| CMD | 81h | 57h 'W'| 00h | 00h | | アドレスH | アドレスL | |--------|--------|--------|--------| |--------|--------| DAT | ---- |* 00h | 5Ah 'Z'| 5Dh ']'| |* 00h |*アドレスH | |--------|--------|--------|--------| |--------|--------| ここまでがコマンドブロック. データブロック XORフラグ |--------|--------|--------|--------|--------| |--------| CMD | dt 1 | dt 2 | ・・・・ | dt 127 | dt 128 | | xor | |--------|--------|--------|--------|--------| |--------| DAT |*アドレスL |* dt 1 |* ・・・・ |*dt 126 |*dt 127 | |*dt 128 | |--------|--------|--------|--------|--------| |--------| 終了ステータス 終了フラグ 終了フラグ(エラーの場合) |--------|--------| |--------| |--------| CMD | 00h | 00h | | 00h | | 00h | |--------|--------| |--------| |--------| DAT | 5Ch '\'| 5Dh ']'| | 47h 'G'| | 4Eh 'N'| |--------|--------| |--------| |--------| XORフラグ = (アドレス指定+データブロック)内のデータの排他論理和  注)ライトでエラー(終了フラグ='N')の場合、メモリには書き込まれません.   '*'がついているデータは無視してもよい. ・ライトデータ例 PSからの出力データ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ASCII +00 81 57 00 00 00 80 53 43 11 01 82 71 82 68 82 63 .W....SC..RID +10 82 66 82 64 81 40 82 71 82 60 82 62 82 64 82 71 GE RACER +20 81 40 83 5E 83 43 83 80 83 65 81 5B 83 75 83 8B  タイムテーブル +30 00 CD 7B 7B 77 7B FB C7 FB D7 FB DB FB DB DD DB .ヘ{{w{........ンロ +40 DB DB DB DB 7D C7 CB CD FD FD FF FC B7 CC FD DC ロロロロ}ヌヒヘ.....フ.ワ +50 FF DE FF FC FF FC DB FF DD FD DD FD FD DF C7 77 .゙......ン.ン..゚ヌw +60 C7 77 B7 77 B7 77 BC F7 7A EF 38 EB F5 E2 B3 DE ヌwキwキwシ...8..箋゙ +70 71 D6 4F D2 EC C5 8A B9 48 AD E6 A0 DD D2 5D C6 qヨOメ..柑Hュ譬ンメ]ニ +80 FE B9 7C AD 1A A1 1A 00 00 00 .ケ|ュ.。.... メモリからの出力データ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ASCII +00 01 00 5A 5D 00 00 80 53 43 11 01 82 71 82 68 82 ..Z]...SC..RID +10 63 82 66 82 64 81 40 82 71 82 60 82 62 82 64 82 GE RACER +20 71 81 40 83 5E 83 43 83 80 83 65 81 5B 83 75 83  タイムテーブル +30 8B 00 CD 7B 7B 77 7B FB C7 FB D7 FB DB FB DB DD .ヘ{{w{........ン +40 DB DB DB DB DB 7D C7 CB CD FD FD FF FC B7 CC FD ロロロロロ}ヌヒヘ.....フ. +50 DC FF DE FF FC FF FC DB FF DD FD DD FD FD DF C7 ワ.゙......ン.ン..゚ヌ +60 77 C7 77 B7 77 B7 77 BC F7 7A EF 38 EB F5 E2 B3 wヌwキwキwシ...8..箋 +70 DE 71 D6 4F D2 EC C5 8A B9 48 AD E6 A0 DD D2 5D ゙qヨOメ..柑Hュ譬ンメ] +80 C6 FE B9 7C AD 1A A1 5C 5D 47 ニ.ケ|ュ.。\]G 4.2.リードコマンド   種別    バイト数 機能   -------------------------------------------------------------------------   コマンドヘッダ  4 メモリリードの指定   アドレス指定  2 リードアドレスの指定(フレーム単位)   コマンド応答  1 コマンドを受信したことをメモリが通知   データヘッダ  1 データを転送することをメモリが通知   データアドレス  2 読み出したデータのアドレス   データブロック  128 メモリからのリードデータ   XORフラグ  1 チェック用の排他論理和コード   終了フラグ  1 終了フラグ   ------------------------------------------------------------------------- 計    140   コマンド応答の後は、メモリアクセスのためカードからのACK信号の出力に  時間がかかる. コマンドヘッダ アドレス指定 コマンド応答 |--------|--------|--------|--------| |--------|--------| |--------| CMD | 81h | 52h 'R'| 00h | 00h | | アドレスH | アドレスL | | 00h | |--------|--------|--------|--------| |--------|--------| |--------| DAT | ---- |* 00h | 5Ah 'Z'| 5Dh ']'| |* 00h |*アドレスH | | 5Ch '\'| |--------|--------|--------|--------| |--------|--------| |--------| データヘッダ データアドレス |--------| |--------|--------| CMD | 00h | | 00h | 00h | |--------| |--------|--------| DAT | 5Dh ']'| | アドレスH | アドレスL | |--------| |--------|--------| データブロック XORフラグ 終了フラグ |--------|--------|--------|--------|--------| |--------| |--------| CMD | 00h | 00h | ・・・・ | 00h | 00h | | 00h | | 00h | |--------|--------|--------|--------|--------| |--------| |--------| DAT | dt 1 | dt 2 | ・・・・ | dt 127 | dt 128 | | xor | | 47h 'G'| |--------|--------|--------|--------|--------| |--------| |--------| XORフラグ = (データアドレス+データブロック)内のデータの排他論理和   '*'がついているデータは無視してもよい. ・リードデータ例 PSからの出力データ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ASCII +00 81 52 00 00 00 80 00 00 00 00 00 00 00 00 00 00 .R.............. +10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ +80 00 00 00 00 00 00 00 00 00 00 00 00 ............ メモリからの出力データ +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F ASCII +00 01 00 5A 5D 00 00 5C 5D 00 80 53 43 11 01 82 71 ..Z]..\]..SC..R +10 82 68 82 63 82 66 82 64 81 40 82 71 82 60 82 62 IDGE RAC +20 82 64 82 71 81 40 83 5E 83 43 83 80 83 65 81 5B ER タイムテー +30 83 75 83 8B 00 CD 7B 7B 77 7B FB C7 FB D7 FB DB ブル.ヘ{{w{...... +40 FB DB DD DB DB DB DB DB 7D C7 CB CD FD FD FF FC ..ンロロロロロ}ヌヒヘ.... +50 B7 CC FD DC FF DE FF FC FF FC DB FF DD FD DD FD .フ.ワ.゙......ン.ン. +60 FD DF C7 77 C7 77 B7 77 B7 77 BC F7 7A EF 38 EB .゚ヌwヌwキwキwシ...8. +70 F5 E2 B3 DE 71 D6 4F D2 EC C5 8A B9 48 AD E6 A0 .箋゙qヨOメ..柑Hュ譬 +80 DD D2 5D C6 FE B9 7C AD 1A A1 1A 47 ンメ]ニ.ケ|ュ.。.G 4.3.メモリカードコネクタの自作方法  用意するもの:20ピン以上のカードエッジコネクタ  手順 1.カードエッジコネクタを半分(ラインごと)にカットする. 2.10ピン分のコネクタを作る 3.ハンダづけピンを下にして端子面を見える方向にする 4.左から3と7の端子を抜いて、端子部分のプラスチックを削る 5.カッター/やすり等で削った部分を綺麗にする。 図 ___ ___ ___ ___ ___ ___ ___ ___ 端子の接触面を正面 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # A # # # # B # # # # A/Bの端子部分のみ削る # # # # # # # # # # # # # # # # # # # # # # 注)端子のセパレータは削らない # # # # # # # # # # # ========================================= ========================================= ========================================= | | x | | | x | | | | | | | | | | | | | 削る部分の端子は抜くかカット | | | | | | | | | |  自作したコネクタにシフトレジスタ等で回路を組み、インターフェース回 路図(PS参考例)で駆動すればメモリカードにアクセスすることが出来ま す。 ------------------------------------------------------------------------------ 5.メモリカード・フォーマット   15ブロック仕様のメモリカードのフォーマットについて   1Mビット(128Kバイト)のメモリを16のブロックに分割して管理   1ブロック = 8Kバイト   1ブロックを64のフレームに分割して使用   1ブロック = 64フレーム   1フレーム = 8Kバイト/64 = 128バイト  5.1.ブロック配置   メモリカードのブロックは次のように配置されている ブロック ブロック名称   機能 0 管理ブロック    カードID/ディレクトリ情報 1 データブロック1  データ格納領域 2 データブロック2    〃 | | 14 データブロック14 データ格納領域 15 データブロック15   〃  5.2.フレームマップ   ・管理ブロック    フレーム +00 メモリカード識別コード +01-0F ディレクトリ0〜14 +10-23 ディレクトリ(予約) +24-3E 未使用 +3F リード/ライト試験用  注)ディレクトリが0から始まっていることに注意する事  注)ディレクトリフレーム(予約)はゲームによってはフォーマットしない場合    がある.   ・データブロック(先頭ブロック) フレーム +00 タイトル/アイコンパレット +01-n アイコン1〜n(アイコンをアニメーションさせる場合) +(n+1) バックアップデータ   ・データブロック(リンクブロック) フレーム +00- バックアップデータ  注)ブロック数が1以上のゲームでは、2ブロック目以降(リンクブロック)は、    全てのフレームにバックアップデータを格納している。  5.3.ブロック詳細  5.3.1.管理ブロック詳細  ・メモリカード識別コード +00,01 'MC' +02-7E 未使用(00h) +7F XORコード 注)XORコード=フレーム内の00h−7ehのデータをXORした結果.    フレーム内の全データをXORすると00hとなる.  ・ディレクトリフレーム +00 データフラグ 上位4ビット A 使用可能(未使用/削除) 5 使用中 F 予約 下位4ビット 0 未使用ブロック 1 通常ブロック 2 リンクブロック 3 リンクエンドブロック F 予約 +01-03 不明(00h) +04-07 バイト数 06,05,04 (ブロック数×2000h) 0,00,00 未使用/リンク/リンクエンド 0,20,00 1ブロック使用 0,40,00 2  〃   (メタルジャケット) 0,60,00 3  〃   (ウィザードリィ) 0,80,00 4  〃 0,A0,00 5  〃   (テーマパーク) 1,E0,00 15 〃   (A列車) (A列車のバイト数は予想) +08,09 リンクするディレクトリ番号(0〜14) FFFFhの場合、リンクするブロックはなし +0A,0B 'BI' +0C - 製品番号+識別子+00h(ASCIIZ) (製品番号+識別子がセーブデータ名となる) +7F XORコード    データフラグ種別 A0 未使用(フォーマット初期値) 51 使用中/リンク先頭ブロック 52  リンク中間ブロック 53     リンク終了ブロック Ax 削除ブロック FF 予約ブロック  注)リンクブロックには製品番号は入っていない.  注)1枚のメモリカードに同一のセーブデータ名は存在しない.  ・ディレクトリフレーム(予約) +00-03 FF * 4 +04-07 00 +08,09 FF * 2 +0A-7E 00 +7F 00 XORコード  5.3.2.データブロック詳細  ・タイトルフレーム +00,01 識別文字列 'SC' +02 上位4ビット アイコン表示フラグ(1) 下位4ビット アイコン数(アニメーションする場合は1以上) +03 アイコン表示数(使用するブロック数分) +04-5F タイトル(ASCIIZ) 空き部分はソフトによって目的が違う. +60- パレットデータ65536色中16色 (パレット情報はTIMファイルフォーマットの項を参照)  ・アイコンフレーム +00-7F アイコンデータ(4ビット×16×16) (ビット情報はTIMファイルフォーマットの項を参照) 5.4.ディレクトリ例 テーマパークの場合 ディレクトリ.0 +00 51 00 00 00 00 A0 00 00 Q....... +08 01 00 42 49 53 4C 50 53 ..BISLPS +10 2D 30 30 31 37 35 54 50 -00175TP +18 41 52 4B 2E 47 30 00 00 ARK.G0.. ディレクトリ.1 +00 52 00 00 00 00 00 00 00 R....... +08 02 00 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ ディレクトリ.2 +00 52 00 00 00 00 00 00 00 R....... +08 03 00 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ ディレクトリ.3 +00 52 00 00 00 00 00 00 00 R....... +08 04 00 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ ディレクトリ.4 +00 53 00 00 00 00 00 00 00 S....... +08 FF FF 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ ウィザードリィの場合 ディレクトリ.0 +00 51 00 00 00 00 20 00 00 Q.... .. キャラクタデータ +08 FF FF 42 49 53 43 50 53 ..BISCPS +10 2D 31 30 30 31 30 50 43 -10010PC +18 46 49 4C 45 2E 00 00 00 FILE.... ディレクトリ.1 +00 51 00 00 00 00 60 00 00 Q....... セーブデータ1 +08 02 00 42 49 53 43 50 53 ..BISCPS +10 2D 31 30 30 31 30 43 44 -10010CD +18 53 31 00 00 00 00 00 00 S1...... ディレクトリ.2 +00 52 00 00 00 00 00 00 00 R....... +08 03 00 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ ディレクトリ.3 +00 53 00 00 00 00 00 00 00 S....... +08 FF FF 00 00 00 00 00 00 ........ +10 00 00 00 00 00 00 00 00 ........ +18 00 00 00 00 00 00 00 00 ........ 5.5.フォーマット例  キリーク・ザ・ブラッドでディレクトリ1にある場合  データブロックの先頭フレームは   先頭フレーム = 64(フレーム/ブロック)×2(ディレクトリ番号+1)          =128フレーム  となる。  フレーム128:'SC??キリーク・ザ・ブラッド B02'      129:キャラクタデータ1      130:キャラクタデータ2      131:セーブデータ  またセーブデータの内容は、   +00,01:シールド×10   +04,05:エネルギー×10   +0C−2B:武器リスト(4×8種類)  武器を取ると0,0,0,0から255,255,255,255になる   +30   :アーマーROMバージョン 0Ah=1.0,01h=9.9,00h=S.P   +38−  :武器弾数  シナリオだけをみたい人は   +28,29,2A,2B <- 0FFh,0FFh,0FFh,0FFh VEDA   +30 <- 00h 無敵モード +50,51 <- 0Fh,27h VEDA弾数=9999  とすると、エンディングを簡単に見ることが出来ます。(チャンチャン)  途中でROMを取ると、無敵モードが解除されます。 ------------------------------------------------------------------------------ 6.AVマルチ出力ピンアサイン  本資料はRGBケーブルから調べましたが、音声の右/左の確認をしていません.  Sビデオ信号については、出力波形から予想しているので注意して下さい. AVマルチ出力 _______________________________________ | | | |□ □ □ □ □ □ □ □ □ □ □ □| |  (本体裏面より見た図) | ===================================== | |---------------------------------------| 1 2 3 4 5 6 7 8 9 10 11 12 Pin 色   信号名 -------------------------------------------------------------------- 1. 黒   音声グランド 2. 茶   音声L/R? 3. 灰   ビデオグランド 4. 橙   音声L/R? 5. ?   Sビデオ(Y信号) 6. 黄   ビデオ 7. ?   Sビデオ(C信号) 8. 白   RGBグランド 9. 青   RGBビデオ ブルー 10. 紫   VCC(+5V) 11. 赤   RGBビデオ レッド 12. 緑   RGBビデオ グリーン -------------------------------------------------------------------- 注)グランドはすべて共通 ------------------------------------------------------------------------------ 7.マルチタップ通信フォーマット ・キーデータの取り込み  コマンドヘッダを転送した次のシーケンスから、マルチタップの動作が開始され る。キーデータは1シーケンス分遅れて出力されるので注意すること。  データブロックは固定長(8バイト)で、コントローラがセットされていないと きは全て0FFhを出力する。接続されているコントローラの、2バイト目からの データが出力される。  マルチタップとの通信では、特定のコマンド/データの転送レートが通常の4倍 (250KHz→1MHz)になる場合があります。 コマンドヘッダ +--------+--------+--------+ CMD | 01h | 42h 'B'| 01h | +--------+--------+--------+ DAT | ---- | 80h | 5Ah 'Z'| +--------+--------+--------+    データブロックA +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 応答ID | 5Ah'Z' | データ1 | データ2 | データ3 | データ4 | データ5 | データ6 | +--------+--------+--------+--------+--------+--------+--------+--------+    データブロックB +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 応答ID | 5Ah'Z' | データ1 | データ2 | データ3 | データ4 | データ5 | データ6 | +--------+--------+--------+--------+--------+--------+--------+--------+    データブロックC +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 応答ID | 5Ah'Z' | データ1 | データ2 | データ3 | データ4 | データ5 | データ6 | +--------+--------+--------+--------+--------+--------+--------+--------+    データブロックD +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 応答ID | 5Ah'Z' | データ1 | データ2 | データ3 | データ4 | データ5 | データ6 | +--------+--------+--------+--------+--------+--------+--------+--------+   *のコマンドは、マルチパッド側ではチェックしていないので00hでもよい ・例マルチタップのAとCにノーマルパッドが接続されている場合。 コマンドヘッダ +--------+--------+--------+ CMD | 01h | 42h 'B'| 01h | +--------+--------+--------+ DAT | ---- | 80h | 5Ah 'Z'| +--------+--------+--------+ +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 41h | 5Ah | FFh | FFh | FFh | FFh | FFh | FFh | +--------+--------+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | FFh | FFh | FFh | FFh | FFh | FFh | FFh | FFh | +--------+--------+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | 41h | 5Ah | FFh | FFh | FFh | FFh | FFh | FFh | +--------+--------+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+--------+--------+ CMD |* 42h | 00h | 00h | 00h | 00h | 00h | 00h | 00h | +--------+--------+--------+--------+--------+--------+--------+--------+ DAT | FFh | FFh | FFh | FFh | FFh | FFh | FFh | FFh | +--------+--------+--------+--------+--------+--------+--------+--------+ ==================================================  マルチタップでのメモリアクセスに関しては解析中 ================================================== ------------------------------------------------------------------------------ 8.TIMファイルフォーマット(暫定版)  本情報はMike氏よりいただきました.  PS-X TIM file  [ ヘッダ ]  [ パレットデータ ]  [ ピクセルデータ ]  となっている  データは すべてINTEL形式   ^^^^^^^^^^^^^^^^^^^^ -----------------------ヘッダ +00 [ 不明 .4Byte ] +04 [ 色/パレット情報 .Long ] 2 : 32K色データ パレットなし 9 : 256色データ パレットあり 8 : 16色データ パレットあり -----------------------パレットデータ [ 情報部 ] 12バイト [ データ部 ] ** 情報部 +00 [ データ長 .Long ] 情報部 + データ部 の 値 (例) データ部 512バイトだと 524 となる +04 [ 不明 .8Byte ] ** データ部 パレットコード 0〜 の順で入っている. 1色分は 2バイト たぶんこのビットの並びだと思う. bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ? B4 B3 B2 B1 B0 G4 G3 G2 G1 G0 R4 R3 R2 R1 R0 ------------------ ------------------ ------------------ Blue data Green data Red data ** これが X68 の パレットデータ変換ブロック move.w (a2)+,d2 ror.w #2,d2 move.w d2,d3 and.w #%11111_11111_00000_0,d2 add.w d3,d3 and.w #%11111_0,d3 or d3,d2 move.w d2,(a0)+ -----------------------ピクセルデータ [ 情報部 ] 12バイト [ データ部 ] ** 情報部 +00 [ データ長 .Long ] 情報部 + データ部 の 値 (例) データ部 512バイトだと 524 となる +04 [ 不明 .4Byte ] +08 [ Xサイズ .Word ] ワードを単位とした値 32K色の場合 そのまま 256色の場合 絵の横幅は Xサイズ × 2 16色の場合 × 4 +0A [ Yサイズ .Word ] ** データ部 <32K色> ピクセルデータがそのままパレットデータで入っている. 1ピクセルのデータは 2バイト 使用する. <256色> ピクセルデータは パレット番号で入っている. 1ピクセルのデータは 1バイト 使用する. <16色> ピクセルデータは パレット番号で入っている. 1ピクセルのデータは 1ニブル 使用する. bit 7 6 5 4 3 2 1 0 [ 右 ][ 左 ] ============================================================================ ・PS(プレーステーションではなく追伸) 96年2月5日  昔の某誌に、PSパッドの記事が登載されていましたが自分で解析したといいな がら信号名の名称が本文とまったく同じというのが不思議でした.(笑)  まあ、タイミングチャートは誰が解析しても同じになりますが...  こんなことを書いている私にしても、この解析にあたっては'H.Kashima'氏のファ イルを元に始めたのだから人のことは言えないかな(^^;)  解析には、推理小説の謎解きにも似たおもしろさがありなかなかやめられそうにあ りません。 96年後期  某誌に投稿した人と話しました。聞けば同じ会社関係の仕事をしているそうで 信号名が似ているのもなるほどと頷けました。ごめんなさい。 ============================================================================  PSからのコマンドによりPAD/メモリカードがセレクトされているので、無節 操にセレクト信号に応答してしまうとメモリの内容を消してしまうという自体になり ます。(経験者は語る ^^;)  コマンドをデコードするのであれば、1チップCPUなどでコマンド認識した方が 金はかかりますが、簡単に拡張性のあるコントローラが作れます。  5VのCPUボードでも本体から電源を取れるので(レギュレータが必要)、Z80 ボードなどを使ってネジコンもどきを自作する事が出来ますが、ネジコンより高くなっ てしまうでしょう。  PS本体とのインターフェースは3章の参考例の回路を3Vで動かし、CPUを5V で動作させるのが安全でしょう。  メモリを自作する場合、First Write First Allocate(最初にライトされたフレーム を最初に割り付け)する事により32Kバイトぐらいあれば、それなりのメモリカード を作ることが出来ます。(A列車等には使えない)  現在、S社のサイバースティックをAKI−80を使ってネジコン/マウス/PAD としてPSに接続していますがスティックではリッジレーサーの操作は難しい。  また、サイバースティックに2本のスティックを挿してアナログデータをデジタル化 してPADデータとして送ることでサイバースレッド用コントローラにすることが出来 ます。(ゲーセンみたいでかっこいいが操作感がふにゃふにゃしてる)  ちなみにサイバースティックのスティック部分を補修部品として購入すると1万円し ます。