## 第4章　周辺システム構成

ここでは、入出力ポートやタイマー、シリアル通信などの周辺デバイスの詳細を説明します。

### 4-1　入出力ポート

ビジュアルメモリ用カスタムチップは、3つのI/Oポートを持っており、それぞれメモリマップされた、特殊機能レジスタ（SFR）に割り当てられています。 ポート1と3は、データディレクションレジスタ（PnDDR）により入出力方向が決定されます。ポート1は、シリアルインターフェイス/Dreamcast専用インターフェイスで利用します。また、ビジュアルメモリのボタン入力専用ポートとしてポート7が用意されています。

リセット後は、すべてのポートが入力モードになり、ポートラッチは‘0’になります。

入出力ポートを使用するためには、次に示す特殊機能レジスタの操作が必要です。

ポート1（P1） | ・P1 | ・P1DDR | ・P1FCR |
ポート3（P3） | ・P3 | ・P3DDR | ・P3INT | ・EXT
ポート7（P7） | ・P7 | （入力専用） |  |

I/Oポートを読み出す場合、命令によってはラッチ（一時的に保持）されたデータを読み出す（図22の左図）命令と、ポートのデータを直接読み出す（図22の右図）命令があります。I/Oポートのポートデータを読み出す場合には、注意が必要です。 次に示す命令は、ポートラッチデータを読み出します。 BPC，DBNZ，INC，DEC，SET1，CLR1，NOT1

▽ 命令とデータ経路(図22)

####

4-1-1　ポート1

ポート1は、ビジュアルメモリのシリアルインターフェイス用入出力として使用できます。 また、Dreamcast専用インターフェイス用入出力としても使用されます。アプリケーションは、SIO（P10〜P15）のみ使用できます。このレジスタを操作する場合は、必ずビット操作命令を使ってください。SIO出力については「4.5　シリアルインターフェイス」を参照してください。

ビジュアルメモリ用アプリケーションをコーディングするにあたり、次の処理を必ず行うようにしてください。 単体（SIOを利用しない）で動作する場合

1. ポート7の5V検出を監視する。
2. ポート1のビット2とビット5の値を保持する。
3. 5Vが検出されたら、ポート1のビット2とビット5をポートデータ出力モードに変更し、それぞれのビットから‘0’を出力する。
4. 保持しておいた、ポート1のビット2とビット5の値を設定しなおす。

これらの処理を行なわなかった場合、Dreamcast接続時にビジュアルメモリが正しく認識/接続されなくなる場合があります。

ポート1関連のレジスタは、上記の場合とシリアル通信を行なう場合を除き、アプリケーションから操作しないでください。

##### ■ポート1ラッチ（P1）：144H

ポート1 | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
P17 | P16 | P15 | P14 | P13 | P12 | P11 | P10
ファンクション | パルス出力 | TEST | SCK1 | SB1 | S01 | SCK0 | SB0 | SD0

##### ■ポート1データディレクションレジスタ（P1DDR）：145H

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
PIDDR | 145H | W | P17DDR | P16DDR | P15DDR | P14DDR | P13DDR | P12DDR | P11DDR | P10DDR
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

ポート1データディレクションレジスタは、データラッチのビットごとに対応している書き込み専用レジスタです。 書き込み専用レジスタにビット操作命令や、INC，DEC命令，DBNZ命令を使用すると、指定したビット以外のビットが'1'になるので注意してください。P1DDRには、次の命令を使用します。 MOV，MOV @，ST，ST @，POP

ビット名 | 機能
P17DDR(ビット7) | P10DDR(ビット0) | 入力制御
0：入力モード 1：出力モード

##### ■P1nDDR（ビット7〜0）：P17〜P10入出力制御

ポート1の7〜0ビットをデータ入力用に使うか出力用に使うかを設定します。

1をセットすると、P1nは出力モードになります。

0にリセットすると、P1nは入力モードになります。

##### ■ポート1機能制御レジスタ（P1FCR）：146H

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
PIFCR | 146H | W | P17FCR | P16FCR | P15FCR | P14FCR | P13FCR | P12FCR | P11FCR | P10FCR
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

ポート1機能制御レジスタは、書き込み専用レジスタです。書き込み専用レジスタにビット操作命令，INC命令，DEC命令，DBNZ命令を使用すると，指定したビット以外のビットが'1'になるので注意が必要です。P1FCRには次の命令を使用します。 MOV，MOV @，ST，ST @，POP

ビット名 | 機能
P17FCR(ビット7) | P17制御機能
0：ポートデータ(P17)出力 1：PWM出力
P16FCR(ビット6) | 使用不可
0：ポートデータ(P16)出力 固定 1：使用不可
P15FCR(ビット5) | P15制御機能
0：ポートデータ(P15)出力 1：シリアルインターフェース用データ (SCK1)出力
P14FCR(ビット4) | P14制御機能
0：ポートデータ(P14)出力 1：シリアルインターフェース用データ (SB1)出力
P13FCR(ビット3) | P13制御機能
0：ポートデータ(P13)出力 1：シリアルインターフェース用データ (S01)出力
P12FCR(ビット2) | P12制御機能
0：ポートデータ(P12)出力 1：シリアルインターフェース用データ (SCK0)出力
P11FCR(ビット1) | P11制御機能
0：ポートデータ(P11)出力 1：シリアルインターフェース用データ (SB0)出力
P10FCR(ビット0) | P10制御機能
0：ポートデータ(P10)出力 1：シリアルインターフェース用データ (S00)出力

##### ■P17FCR（ビット7）：P17機能選択

P17に割りあてられているPWMを制御します。

1にセットすると、PWM信号とポートラッチデータの論理和を出力します。

0にリセットすると、ポートラッチデータを出力します。

##### ■P16FCR（ビット6）：P16機能選択

このビットは0固定です。アプリケーションからこのビットを操作しないでください。

##### ■P15FCR（ビット5）：P15機能選択

P15に割りあてられているシリアル通信1用のクロックを制御します。

1をセットすると、シリアルインターフェイス用クロック（SCK1）とポートラッチデータの論理和を出力します。

0にリセットすると、ポートラッチデータを出力します。

##### ■P14FCR（ビット4）：P14機能選択

P14に割りあてられているシリアル通信1のデータを制御します。

1をセットすると、シリアルインターフェイス用データ（SB1）とポートラッチデータの論理和を出力しします。

0にリセットすると、ポートラッチデータを出力します。

なお、シリアルインターフェイスのデータは、つねに入力可能です。

##### ■P13FCR（ビット3）：P13機能選択

P13に割りあてられているシリアル通信1のデータを制御します。

1にセットすると、シリアルインタフェース用データ（SO1）とポートラッチデータの論理和を出力します。

0にリセットすると、ポートラッチデータを出力します。

##### ■P12FCR（ビット2）：P12機能選択

P12に割りあてられているシリアル通信0のクロックを制御します。

1をセットすると、シリアルインターフェイス用クロック（SCK0）とポートラッチデータの論理和を出力します。

0にリセットすると、ポートラッチデータを出力します。

##### ■P11FCR（ビット1）：P11機能選択

P11に割りあてられているシリアル通信0のデータを制御します。

1をセットすると、シリアルインターフェイス用データ（SB0）とポートラッチデータの論理和を出力します。

なお、シリアルインターフェイスのデータは、つねに入力可能です。

##### ■P10FCR（ビット0）：P10機能選択

P10に割りあてられているシリアル通信1のデータを制御します。

1をセットすると、シリアルインターフェイス用データ（SO0）とポートラッチデータの論理和を出力します。

0をセットすると、ポートラッチデータを出力します。

- ポート1に割り当てられている機能を使用するときには、対応するポートラッチを0にリセットする必要があります。
  たとえば、PWMを使用するときはP17FCRを1にセットし、P17を0にリセットします。
- BPC，DBNZ，INC，DEC，SET1，CLR1，NOT1命令では、ポートラッチデータが読み出されます。それ以外の命令では，ポートに加えられたデータが読み出されます。

▽ ポート1ブロック図(図23)

####

4-1-2　ポート3

ポート3は、ビジュアルメモリの方向ボタン、Aボタン、Bボタン、MODEボタン、SLEEPボタンが割り当てられている、入力専用ポートです。

##### ■ポート3ラッチ（P3）

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
P3 | 14CH | R/W | P37 | P36 | P35 | P34 | P33 | P32 | P31 | P30
ファンクション | SLEEP | MODE | ボタンB | ボタンA | RIGHT | LEFT | DOWN | UP
リセット時 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

ポート3のビット0〜7は、プログラマブルプルアップとなっています。アプリケーションにて、検出するボタンに対応するビットを‘1’にセットする必要があります。ボタンが押されると対応するビットが‘0’にリセットされます。

方向ボタンの同時押し回避は、アプリケーション側で行なってください。

##### ■ポート3データディレクションレジスタ（P3DDR）：14DH

このレジスタは、アプリケーションから操作しないでください。

##### ■ポート3割り込み制御レジスタ（P3INT）

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
P3INT | 14EH | R/W | − | − | − | − | − | P32INT | P31INT | P30INT
リセット時 | H | H | H | H | H | 0 | 0 | 0

ビット名 | 機能
P32INT (ビット2) | ポート3割り込み制御フラグ
0：ポート3による割り込み発生の禁止 1：ポート3による割り込み発生の許可
P31INT (ビット1) | ポート3割り込み要因フラグ
0：割り込み要因なし 1：割り込み要因あり
P30INT (ビット0) | ポート3割り込み要求許可
0：割り込み要求禁止 1：割り込み要求許可

##### ■P32INT（ビット2）：ポート3割り込み発生選択フラグ

ポート3に接続されているボタンが押されている間、割り込みを発生するかどうかを指定します。P30INT（ビット0）フラグが、発生した割り込みを許可/禁止するのに対し、このフラグは、割り込みそのものを発生するかしないかを設定します。

‘0’にリセットすると、割り込みを発生しません。

‘1’をセットすると、割り込みが発生します。

ポート3割り込みは、レベル割り込みです。ボタンが押されている間、常に割り込みが発生します。

##### ■P31INT（ビット1）：ポート3割り込み要因フラグ

P32INTのフラグがセットされている場合に、このフラグは意味を持ちます。ポート3からの割り込み要求を監視し、ポート3から割り込み要求が発生した場合にセット（1）され、発生しない場合変化しません。こうすることで、割り込み処理ルーチンにて、割り込みの発生源を特定できます。

このフラグは、アプリケーションでリセットする必要があります。アプリケーションの割り込み処理ルーチンなどでリセットしてください。

##### ■P30INT（ビット0）：ポート3割り込み要求許可制御

ポート3からの割り込み要求を許可（1）または禁止（0）します。

‘0’にリセットすると、割り込みを禁止し、割り込み処理ルーチンがCALLされなくなります。

‘1’にセットすると、割り込み発生（P31INT＝1）時に、割り込みベクトル004BHがCALLされます。

▽ ポート3ブロック図(図24)

####

4-1-3　ポート7

ポート7は、ビジュアルメモリの低電圧確認、Dreamcastへの接続確認用として使用する入力専用ポートです（図25参照）。

##### ■ポート7（P7）

シンボル | アドレス | R/W | ビット7 | ビット6 | ビット5 | ビット4 | ビット3 | ビット2 | ビット1 | ビット0
P7 | 15CH | R | − | − | − | − | P73 | P72 | P71 | P70
ファンクション | − | − | − | − | ID1 | ID0 | 低電圧 | 5V検出
リセット時 | H | H | H | H | 0 | 0 | 1 | 0

ポート7のビット0〜ビット3は、プルアップされています。リセット直後は、ビット1が1にセットされ、それ以外のビットは0にリセットされます。

ビジュアルメモリ用アプリケーション作成基準において、アプリケーション実行中にビジュアルメモリがDreamcastコントローラに接続された場合、データをフラッシュメモリに退避させるなどしてから、直ちにアプリケーションを終了することが推奨されています。 アプリケーションは、ポート7のビット0を監視し‘1’がセットされている場合は、MODEボタンによるアプリケーション終了と同等の処理を行い、制御をシステムBIOSに戻してください。なお、接続の検出には、INT0割り込みが利用できます。

低電圧検出は非常に敏感であるため、フラグがセットされた状態で一時的に低電圧状態になってしまった場合も低電圧状態として検知されてしまいます。 低電圧検出を行う場合は、上記方法で連続して低電圧状態が検知された場合に、アプリケーション終了等の処理を行うようにして下さい。時間にして１秒程度連続して低電圧を検知した場合を「低電圧状態」と定義するのが良いでしょう。

▽ ポート7ブロック図(図25)

[←] | [INDEX] | [→]