Amstrad CPC(1984)
- 公開日: 2020/08/22
- 更新日: 2021/12/11
ハードウェア概要
1984年に英Amstrad社から発売されたZ80ベースのパソコン。Sinclair社のZX Spectrumと共に、80年代のイギリスや西欧でヒットしたパソコンである。標準のフロッピーディスクは3インチ[1]であり、おそらくはこのディスクの最大消費アーキテクチャである。
1990年には後継機であるAmstrad 464 Plus/6128 Plus/GX4000が登場している。これらの機種はおおむねオリジナルのCPCと互換性があるが、コントローラ端子の仕様は微妙に異なる。なお、GX4000はキーボードを接続できないゲームコンソールである。
コントローラ端子の特徴
本機はコントローラ端子を1つもっている。かつてGrimwareに掲載されていた図面(リンク先はミラー。オリジナルのURLはhttp://www.grimware.org/doku.php/documentations/hardware/amstrad.cpc464)や、CPCWikiの説明によれば、回路及びピンアウトは以下の通り。
pin# |
Function |
---|---|
1 |
Digital in / Digital out |
2 |
Digital in / Digital out |
3 |
Digital in / Digital out |
4 |
Digital in / Digital out |
5 |
Digital in / Digital out |
6 |
Digital in / Digital out |
7 |
Digital in / Digital out |
8 |
COMMON 1 |
9 |
COMMON 2 |
コモン端子が2つあるが、ジョイスティックを2つ接続するために利用される。Amstrad純正のジョイスティックには2台目のジョイスティックを接続するための増設コネクタがついている。この増設コネクタは本体側コネクタに対してピン8と9がクロス結線となっており、ここに(ピン8をコモン端子とする)別のジョイスティックを接続すると、本体側は2台のジョイスティックを読みとることができるようになる[2][3]。したがって、CPCで使用可能なジョイスティックはピン8のみをコモン端子として利用するもののみである。
ジョイスティック1の検出を行うときはピン8をL、ピン9をHにし、ジョイスティック2の検出を行うときは逆にピン8をH、ピン9をLにする。
ただ、CPCWikiのジョイスティック修理のページによれば、純正ジョイスティックは1ボタンのみのサポート(2ボタンのモデルもあるが両ボタンはどちらもピン6)で、増設ジョイスティック用のコネクタもサポートされるのは1ボタンジョイスティックのみのようだ。
信号ピンの数は7つであり、2ボタンジョイスティックのボタンはピン6と7を使用する。
Plusシリーズ及びGX4000はコントローラ端子が2つに拡張されている。ピンアウトは以下の通り。
pin# |
port1 |
port2 |
---|---|---|
1 |
Digital in / Digital out |
|
2 |
Digital in / Digital out |
|
3 |
Digital in / Digital out |
|
4 |
Digital in / Digital out |
|
5 |
NC |
|
6 |
Digital in / Digital out |
|
7 |
Digital in / Digital out |
|
8 |
COMMON 1 |
COMMON 2 |
9 |
COMMON 2 |
NC |
オリジナルCPCとの違いは以下の通りである。
ピン5は使用しない
端子2のピン8はコモン端子2となっている
端子2のピン9は使用しない
端子1、2の双方に8ピンをコモン端子とするコントローラを接続可能である。端子1については、オリジナルCPCのように分岐ケーブルなどを使って2つコントローラを接続することも可能である(2つ目のコントローラは端子2と等価)。Plus及びGX4000の発売に合わせ、2ボタンジョイパッド(`MSX用コントローラ</nb/misc/atari_p6_msx_joystick>`_と同じ仕様)も用意された。なお、デジタルジョイスティックとは別に、アナログジョイスティック用としてDB15端子のコネクタが用意されている(PC用ゲームポートとは微妙に異なる)。
ハードウェア実装
本機のジョイスティック端子は、PSGコントローラであるAY-3-8912のI/Oポートと、3chパラレルI/Oコントローラのインテル8255を利用して実装されている(AY-3-8912自体もi8255経由で制御される)。AY-3-8912のI/Oポートの制御方法は「PSG音源の利用」を参照のこと。i8255のI/OポートAはZ80のI/Oアドレス$F4**に、I/OポートCはZ80のI/Oアドレス$F6**にアサインされている。
上記回路図の通り、コントローラ端子からの読み取りは以下の通りキーボード読み取りと同じやりかたで行う[4]。
I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする
I/Oアドレス$F4**に$0Eを書き込み、ポートA経由でAY-3-8912のデータバスに値$0Eを送る
I/Oアドレス$F6**に$C0を書き込み、AY-3-8912のBC1およびBDIRの双方をHにする。この結果、2.でAY-3-8912のデータバスに入力された値$0EがAY-3-8912のレジスタとして処理される。
I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする
I/Oアドレス$F7**に$92を書き込み、ポートAを入力設定にし、ポートCを出力設定にする
I/Oアドレス$F6**に$49(2番目のジョイスティックを読み取るときは$46)を出力する。これにより、ポートAの読み取りによってジョイスティックの状態を知ることができるようになる
I/Oアドレス$F4**を読み取る
I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする
I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする
で読み取った8ビットのデータのうち下位7ビットから以下のように各ピンの状態を判断することができる。(L=0、H=1)
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
---|---|---|---|---|---|---|
Pin5 |
Pin7 |
Pin6 |
Pin4 |
Pin3 |
Pin2 |
Pin1 |
コントローラ端子の出力については、以下の通りとなる(たぶん)。
I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする
I/Oアドレス$F4**に$0Eを書き込み、ポートA経由でAY-3-8912のデータバスに値$0Eを送る
I/Oアドレス$F6**に$C0を書き込み、AY-3-8912のBC1およびBDIRの双方をHにする。この結果、2.でAY-3-8912のデータバスに入力された値$0EがAY-3-8912のレジスタとして処理される。
I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする
I/Oアドレス$F6**に$8A~$8Fのいずれかを出力する。これにより、ポートA経由でピン1~7にデータを送信することができるようになる
I/Oアドレス$F4**に送信するデータを書き込む。各ビットとピンとの対応は上記表の通り。ビット7は多分Hにしておいた方がよさそう。
I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする