misc. > アタリ仕様ジョイスティック研究 > 機器側の仕様 > ATARI系列(Vcc:pin7, GND:pin8) > ATARI 8bit Computers(1979)

ATARI 8bit Computers(1979)

ハードウェア概要

Atari社が1979年から80年代に掛けて販売していた8ビットコンピュータ。同時代のAppleIIやCommodore64と同様、CPUにMOS6502を使用している。

当初のモデルはメモリ4KBのATARI 400と8KBのATARI 800。その後1983年にXLシリーズ、1985年にXEシリーズ、1987年にキーボードを外付けにしたXE Game Systemが登場している。初代の400と800はコントローラ端子が4つもついているのが大きな特徴。M.U.L.E.[1]という傑作ゲームを生む土壌となった。XLシリーズ以降はコントローラ端子は2つに減らされている。

コントローラ端子の特徴

本機のコントローラ端子のピンアウトは以下の通り。

pin#

Function

1

Digital in / Digital out

2

Digital in / Digital out

3

Digital in / Digital out

4

Digital in / Digital out

5

Analog in

6

Digital in

7

VCC

8

GND

9

Analog in

ピン1〜4はピンごとにデジタル入力とデジタル出力を切替可能である。また、ピン1〜4、6は本体内でプルアップされている。ATARI VCSとは異なり、ピン5,9はアナログ入力専用である[2]。ピン6は通常の検出モードとエッジ検出モードのいずれかを選択可能である(後述)。

ハードウェア実装

AtariAgeに記載のATARI 800の回路図からコントローラ端子周りを抜粋したものを下図に示す。

/static/images/atari/atari800.png

コントローラ端子はCPU(MOS6507)の周辺チップであるMOS6520(通称PIA)と、サウンド/キーボードコントローラであるPOKEY(C012294)と、ビデオコントローラであるCTIA(Color Television Interface Adapter, 型番C012295)[3]のI/Oポートを使って実装されている。

コントローラ端子1、2のピン1〜4はPIAのI/OポートPA0〜7に接続されている。また、コントローラ端子3、4のピン1〜4はPIAのI/OポートPB0〜7に接続されている。PA0〜7は内部でプルアップされているので、当該ポートとコントローラ端子のピンは直接接続されている。PB0〜7については、PIA内部のプルアップ電圧が2.4Vと低い為[4]別途プルアップ回路を追加している。

コントローラ端子のピン6はCTIAの信号入力ポートT0〜3に接続されている。 また、ピン5、9はPOKEYの信号入力ポートP0〜7にRC回路を介して接続されている。

制御方法

Altirra Hardware Reference Manualによれば、各ピンの制御方法は以下の通りである。

ピン1〜4については、アドレス$D300(PORTA, コントローラ端子1、2)、$D301(PORTB, コントローラ端子3、4)を使用して信号の入出力を行う。ビットはHレベルの時が1、Lレベルの時が0である。

port#

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

D300 (R/W)

Read / Write / Check Direction / Set Direction for PA

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

D301 (R/W)

Read / Write / Check Direction / Set Direction for PB

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

信号の出力を行う場合は以下の手順となる。

  1. コントローラ端子1、2であればアドレス$D302(PACTL)、コントローラ端子3、4であればアドレス$D303(PBCTL)のビット2に0を書き込む

  2. アドレス$D300又は$D301に書き込みを行う。0なら入力モード、1なら出力モード。また、このアドレスを読むことで各ピンが入力モードか出力モードかを確認することができる

  3. コントローラ端子1、2であればアドレス$D302、コントローラ端子3、4であればアドレス$D303のビット2に1を書き込む[5]

  4. アドレス$D300又は$D301に出力するデータを書き込む

ピン5、9はPOKEY経由で読み取る。手順は以下の通り。

  1. アドレス$D20F(SKCTL)のビット2に0を書き込む

  2. アドレス$D20B(POTGO)に書き込みを行う

  3. 画面の228ライン描画(約14.5ミリ秒)待つ

  4. アドレス$D200(POT0)〜$D207を読み出す。読み出した値は1〜228(xE4)であり、1が最も抵抗値が大きい(パドルホイールを最も反時計回りに回した状態)ことを示し、228が最も抵抗値が小さい(パドルホイールを最も時計回りに回した状態)ことを示す。

1.の前にアドレス$D20F(SKCTL)のビット2に1を書き込むと、高速スキャンモードとなり、2.の待機時間を2ライン分まで減らすことができる。ただしPOT0〜POT7の値は不正確となる。3.、4.の代わりに、周期的にアドレス$D208(ALLPOT)を読み込んで、各ビットが1から0になる時間を計測してもよい。

port#

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

D208 (R)

Status of Port P0-P7 (1: Charge in Pregress, 0: Charge Finished)

P7

P6

P5

P4

P3

P2

P1

P0

CX-21/23/50キーボード 等、ピン5,9をデジタル入力として想定しているコントローラを使うことも可能である。キーボードの場合、プルアップ抵抗が4.7kΩとパドルのそれ(1MΩ)よりも充分に小さいため、ピン5,9に対応するスイッチがオフの場合はPOT0〜7は大きな値を取る。一方スイッチがオンになってGNDと短絡すると、キャパシタへ電荷が蓄積されないためPOT0〜7は小さな値を取る。

ピン6はアドレス$D010(TRIG0)、$D011(TRIG1)、$D012(TRIG2)、$D013(TRIG3)のビット0を読むことで検出できる。ビット0が1であればHレベル、0であればLレベルである。エッジ検出モードのオン/オフは、アドレス$D01Dのビット2で指定する。通常の検出モードの時は、0、エッジ検出モードの時は1を書き込む。

また、ピン6ではライトペン入力に用いられる。この機能についてはライトペンのページを参照のこと。


コメント(0)


Note

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

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