misc. > アタリ仕様ジョイスティック研究 > 機器側の仕様 > その他系列 > Amstrad CPC(1984)

Amstrad CPC(1984)

ハードウェア概要

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の説明によれば、回路及びピンアウトは以下の通り。

/static/images/atari/cpc.png

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のみをコモン端子として利用するもののみである。

信号ピンの数は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]

  1. I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする

  2. I/Oアドレス$F4**に$0Eを書き込み、ポートA経由でAY-3-8912のデータバスに値$0Eを送る

  3. I/Oアドレス$F6**に$C0を書き込み、AY-3-8912のBC1およびBDIRの双方をHにする。この結果、2.でAY-3-8912のデータバスに入力された値$0EがAY-3-8912のレジスタとして処理される。

  4. I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする

  5. I/Oアドレス$F7**に$92を書き込み、ポートAを入力設定にし、ポートCを出力設定にする

  6. I/Oアドレス$F6**に$49(2番目のジョイスティックを読み取るときは$46)を出力する。これにより、ポートAの読み取りによってジョイスティックの状態を知ることができるようになる

  7. I/Oアドレス$F4**を読み取る

  8. I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする

  9. I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする

  1. で読み取った8ビットのデータのうち下位7ビットから以下のように各ピンの状態を判断することができる。(L=0、H=1)

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

Pin5

Pin7

Pin6

Pin4

Pin3

Pin2

Pin1

コントローラ端子の出力については、以下の通りとなる(たぶん)。

  1. I/Oアドレス$F7**に$82を書き込み、ポートAとCを出力設定にする

  2. I/Oアドレス$F4**に$0Eを書き込み、ポートA経由でAY-3-8912のデータバスに値$0Eを送る

  3. I/Oアドレス$F6**に$C0を書き込み、AY-3-8912のBC1およびBDIRの双方をHにする。この結果、2.でAY-3-8912のデータバスに入力された値$0EがAY-3-8912のレジスタとして処理される。

  4. I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする

  5. I/Oアドレス$F6**に$8A~$8Fのいずれかを出力する。これにより、ポートA経由でピン1~7にデータを送信することができるようになる

  6. I/Oアドレス$F4**に送信するデータを書き込む。各ビットとピンとの対応は上記表の通り。ビット7は多分Hにしておいた方がよさそう。

  7. I/Oアドレス$F6**に$00を書き込み、AY-3-8912のデータバスをハイインピーダンスにする

Docutils System Messages


コメント(0)


Note

本サイトのハイパーリンクの一部は、オリジナルのサイトが閉鎖してしまったため"Internet archive Wayback Machine"へのリンクとなっています。そのようなリンクにはアイコン[archive]を付与しています。

本サイトはCookieを使用しています。本サイトにおけるCookieは以下の三種類のみであり、Cookieの内容に基づいてサイトの表示を変更する以外の用途には用いておりません。