りんけーじ - 開発資料 - PSX - シリアル I/O


この資料について

ここには FlareStorm の開発の際に PlayStation の シリアル I/O(以下 SIO) の動作を解析した情報を載せていきます。
SIO は 2 つありますが、これは前面のコントローラとメモリーカード接続用の方に関するものです。
ベースとなる情報はあちこちに散らばっていて覚えていません。以下の解析の情報はその資料をもとに、私自身が解析したものです。
一応書いておきますが、以下の情報は推測を含み、間違っているものもあるかもしれません。
解析は SCPH-1000 で行っています。
ビットは最下位ビットをビット 0 とします。

ハードウェアレジスタ

ベースアドレスルートカウンタ
0x1F801040SIO 0 (前面)
0x1F801050SIO 1 (背面)
制御系のレジスタへのアクセスは、通常は Half-Word です。
データはバッファサイズによってはまとめて転送できるのかもしれませんが、未調査です。
以下の解析はすべて Mode レジスタの値が 0x000D での条件でのものです。
オフセットこの資料での呼び名ロード時ストア時
0x0000 データ (Data) 受信データ 送信データ
0x0004 ステータス (Status) 0x0001 : 不明
0x0002 : データレディ
0x0004 : 不明
0x0080 : ACK ライン(ラインが L レベルの時にフラグが立つ)
0x0200 : 割り込み発生
他は不明。上位 6 ビットは常に変化しているが、意味は分かっていない。
未調査
0x0008モード (Mode) 未調査 0x0004 : 不明, Baud 関係
その他未調査
0x000Aコントロール (Control) 設定されているコントロール状態 0x0001 : 送信許可
0x0002 : 受信許可
0x0010 : 割り込みクリア
0x0040 : リセット, ステータスを 0x0005、ボードとモードを 0x0000 にセット
0x0400 : 強制的に割り込み発生?
0x1000 : ACK ラインによる割り込み有効
他は不明または未調査。
0x000Eボード (ボー, Baud) 設定されているボードの値 1 ビットのデータを転送するのにかかる時間。単位は CPU のクロック

データの送受信

データを送信するとき、全く同じクロックを使ってデータを受信する。
そのため、送信されるときに受信が許可されていないと、受信ができない。
データを送信するには、送信が許可された状態でデータレジスタに書き込むか、または送信を許可していない状態でデータを書いて、その後で送信を許可しても良い。
受信したデータはデータレジスタを読むことで得られる。一度読むとデータはクリアされる。
送受信の完了は割り込みか、ステータス 0x0002 : データレディで確認できる。
データの送受はデバイスが存在するかどうかに関わらず行え、その場合にはデータレディも発生する。データとしては、DAT ラインが H レベルのままであるため、0xFF が返る。

割り込み

コントロールのフラグ 0x1000 が立っているとき、ACK 信号によって割り込みが発生する。
何もデバイスが接続されていないとき、または ACK を返さないときはこの割り込みは発生しない。
この割り込みフラグはコントロールに 0x0010 を含む値が書かれるまでクリアされない。
他の原因によって割り込みが発生する可能性もあるが、確認できていない。
また、ACK ラインが L レベルである間はステータスにフラグ 0x0080 が表れ、ACK が H レベルに戻るとフラグもクリアされる。

修正・更新履歴