戻る

ポケコン PC-G850の解析とソフト集

[ハードウエア編] [I/O編] [ワークエリア編] [自作ソフト・周辺機器]

I/O編
ハードウエアプログラミングに必要なI/Oポートの内容です。これも教師用マニュアルや一般の書籍などに書いてあります。

ROMやRAMのアドレッシングに関しては昔のZ80が強く意識されており、ポケコンをコアにしてシステムを構築できるように拡張端子が数多く構成されています。これを利用して、ポケコンを外部のROMに保存したプログラムで駆動させたり、拡張RAMを実装することも理論的には可能になります。
なお、ROMやRAMのバンクを切り替えるときには、Z80CPUのDIやIM*命令を実行するか、割り込みベクタの変更、周辺機器割り込み(17H)を禁止しておかないと、システムROMの割り込みベクタにジャンプして暴走します。

LCDがらみのI/Oポートは調べてませんので別のサイトを探してください。
Addr機能内容RDWR
10Hキーコモン入力
キーマトリクスからデータを入力する。
×
11Hキーストローブ出力
キー入力のためのストローブ信号を出力する。
×
12Hキーストローブ出力
キー入力のためのストローブ信号を出力する。
×
13Hシフトキー入力
ROM CE切り替え入力

シフトキーを押している間にSFTフラグがセットされる。

ROM CE切り替えは、CPUのSET CEx端子のプルダウン状態で搭載されているROMの容量や個数が入力される。
CE1CE0サイズ
0016Mb×1のみ
014Mb×2
108Mb×2
1116Mb×2

×
14Hタイマー入力
M信号入力の1/32or1/64ごとに1Sビットがセットされる。選択はI/O(68H-7)で行う。
1S信号を確認後、OUT (14H)←01Hをすると、ラッチされたビットがクリアされる。
(通常は1S割り込みが発生しているので、ポケコンが勝手にリセットをかけている)
15HXin入力イネーブル
0=入力禁止
1=入力可能
16H割り込みフラグ
割り込みの発生原因を示す。各ビットに1を書き込むと、フラグがリセットされる。
IAキー入力割り込み
KonBREAKキー入力割り込み
1S1Sタイマー割り込み
/INT1/INT1入力割り込み
SIOシリアルI/F関連の割り込み
17H割り込みマスク
I/Oレベルでの割り込みを禁止する。Z80のDI命令とは関係ない。
0=割り込み禁止
1=割り込み許可
IAキー入力割り込み
KonBREAKキー入力割り込み
1S1Sタイマー割り込み
/INT1/INT1入力割り込み
SIOの割り込みマスクは6CHで行う
18H11Pin I/Fの出力レベル
0=Lレベル出力
1=Hレベル出力
Beep(bit6)は基板上にあるBEEP端子に出力される。
BEEPの発振はしていないので、ON/OFFのループを組む必要がある。
19HROMバンク選択
ROMにつながるA14より上位のアドレスビットは、アドレスバスではなくROM専用のバンクバス(BNK0-BNK6)が使用されているため、ここで指定した内容でROMのアドレッシングが行われます。

BK0-BK3:C000H-FFFFHのアクセス時のシステムROMバンクを選択する。
この時CPUの/CEROM1L信号が有効になり、BNK0-BNK3に出力される。
BK3BK2BK1BK0バンク番号
0000N/A
0001バンク1
1111バンク15

BK'0-BK'2:8000H-BFFFHのアクセス時の外部拡張ROMバンクを選択する。
BK'2を1にすることでCPUの/CEROM2信号が有効になり、本体ROMが切り離される。
BK'1,BK'0は40ピンシステムバスのBANK1,BANK0端子に出力される。
BK'2BK'1BK'0バンク番号
100バンク0
101バンク1
110バンク2
111バンク3

1AHBOOT ROM OFF
0=BOOT ROM ON
1=BOOT ROM OFF
×
1BHRAM CE信号選択
0000H-7FFFHにあるRAMへアクセスする時のCE信号の出力先を選択する。
0=/CERAM1 (内蔵RAM)
1=CERAM2 (システムバス信号)
1CHIORESET信号出力
システムバスの拡張周辺用リセット信号(IORESET)出力。
0=Lレベル
1=Hレベル
ビット0は1を書いておく必要がある。
×
1FH11Pin I/Fの入力レベル
Breakキーの入力

Breakキーを押している間にKonフラグがセットされる。
XinはI/O(15H)の入力可能がセットされている時に入力できる。
×
60H11Pin I/Fの動作
D1D0動作
00従来の3-In 3-Out I/F
018bit PIO
10全二重通信の出来るUART
11N/A
61HPIOの入出力方向
0=出力
1=入力
×
62HPIOデータレジスタ
11ピン I/FがPIOモードの時の入出力信号の状態。
63HUARTのフロー制御レジスタ
フロー制御を行うための入出力信号。フロー制御はソフトウエアで行わなければいけない。
入力信号はプルダウンされているので、未接続の時に0が読み出される。
64HCD信号によるONの制御
CD信号でフロー制御をするものだろうか? 試していないので、意味がわからない。
0=制御なし
1=制御あり
65HM1信号後のウエイト
CPUの/M1発生時のウエイトをかけるかどうか。
0=1ウエイトあり
1=ウエイトなし
66HI/Oのウエイト
I/O 20H-3FHで、ウエイトをかけるかどうか。
0=2ウエイトあり
1=ウエイトなし
67HCPUクロック
UART以外のCPUクロックの選択。1Sタイマの周期も変わらない。
0=8MHz
1=4MHz
68H1Sタイマーの周期
LCDドライバのウエイト

1Sタイマーのカウント周期。
0=1/32
1=1/64

LCDドライバのウエイト。
D1D0ウエイト
00無し
011ウエイト
102ウエイト
11無し

×
69HROMバンク選択
I/O(19H)と同様にC000H-FFFFHにアクセスする時のROMバンクを指定する。BK0-BK3は19Hと共通である。BK6は空きパターンになっており、BK7についてはCPUに端子すら無い。
BK7BK0バンク番号
0000N/A
0001バンク1
1111バンク255
6BHUARTの入力選択
IRイネーブル
SIOイネーブル
SIO-IR間を直結

試していないので詳細不明だが、IR端子はBEEP同様プロトコルを持っていない可能性が高い。若しくは、シリアルデータがそのままLEDを点灯させるのかもしれない。
UART入力0:SIO1:IR
SIO OUT0:出力可能1:出力停止
IR OUT0:出力可能1:出力停止
IR ST0:直結1:分離
6CHUARTモードレジスタ
B2B1B0ボーレート
000300bps
001600bps
0101200bps
0112400bps
1004800bps
1019600bps
110N/A
111N/A
I1I0割り込み制御
00割り込み禁止
01受信割り込み許可
10送信割り込み許可
11N/A
P1P0パリティ制御
00パリティなし
01偶数パリティ
10奇数パリティ
11N/A

CPUリセット時には9600bpsがデフォルト。
×
6DHUARTコマンドレジスタ
TXEN:送信イネーブル0:送信停止1:送信可能
RXEN:受信イネーブル0:受信停止1:受信可能
ERLL:エラーフラグクリア0:エラーを保持1:エラーをクリア
SRST:ソフトウエアリセット0:通常時1:SIOをリセット
×
6EHUARTステータスレジスタ
TXEMP:送信データエンプティ0:送信中1:送信待ち
TXRDY:送信データレディ0:送信待ちデータなし1:送信待ちデータあり
RXRDY:受信データレディ0:受信待ちデータなし1:受信待ちデータあり
PERR:パリティエラー0:エラーなし1:エラーあり
OVWR:送信オーバーライトエラー0:エラーなし1:エラーあり
FRME:フレーミングエラー0:エラーなし1:エラーあり
×
6FHUART送受信レジスタ
送受信に使うレジスタは同じだが、バッファは別なので、送信と受信の値は別に保持される。FIFOも内蔵していて、結構なバイト数をバッファリングできたと思うが、何バイトかまでは忘れた。

Update 2005/11/23