ATARI VCS/2600(1977)
- 公開日: 2020/07/23
- 更新日: 2021/01/23
ハードウェア概要
ATARI VCS(Video Computer System)は、1977年に登場した最初期のROMカートリッジ式の家庭用ビデオゲームコンソールである[1]。ATARI社の様々なゲームや、任天堂のドンキーコング、ナムコのパックマンなどが移植されヒット商品となった。性能的には後発のファミコンなどと比べると大分劣り、商業的には1980年代中盤には終息したものの人気は根強く、今なおホビイスト達によるゲーム開発が盛んに行われている[2]。
オリジナルのVCSは後継機であるATARI 5200[3]の登場に伴い、ATARI 2600と名称変更された。バリエーションとしては廉価版の2600 Jr.、日本市場向けの2800、Sears社にOEM供給されたSears Video Arcade、Sears Video Arcade II[4]、Coleco社によるライセンス互換製品のGemini等がある。
本機で採用されたコントローラ端子は、様々なバリエーションを生みつつアメリカや日本のパソコンやゲーム機に採用された。
5200はVCSとは基本的に互換性はなく、コントローラも異なる。
Sears Video ArcadeはVCSの、Sears Video Arcade IIは2800のOEM品
コントローラ端子の特徴
本機はコントローラ端子を2つ備えている。ピンアウトは以下の通り。
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 / Analog in |
6 |
Digital in |
7 |
VCC |
8 |
GND |
9 |
Digital in / Analog in |
ピン1〜4はピンごとにデジタル入力とデジタル出力を切替可能である。また、ピン1〜4、6は本体内でプルアップされている。これに対してピン5,9をデジタル入力として使用する場合はコントローラ内にプルアップ回路を形成する必要がある。ピン6は通常の検出モードとエッジ検出モードのいずれかを選択可能である(後述)。
ハードウェア実装
AtariAgeに記載のATARI VCS(NTSC版)の回路図からコントローラ端子周りを抜粋したものを下図に示す。
コントローラ端子はCPU(MOS6507)の周辺チップであるMOS6532(通称PIA)と、ビデオ/サウンドコントローラであるTIA(Television Interface Adapter, 型番C010444)のI/Oポートを使って実装されている。
コントローラ端子のピン1〜4はPIAのI/OポートPA0〜7に接続されている。PA0〜7は内部でプルアップされているので、当該ポートとコントローラ端子のピンは直接接続されている。一方コントローラ端子のピン6はTIAの信号入力ポートI4、I5とプルアップ回路を介して接続されている。ピン5、9はTIAの信号入力ポートI0〜I3にRC回路を介して接続されている。
制御方法
STELLA PROGRAMMER'S GUIDEによれば、各ピンの制御方法は以下の通りである。
ピン1〜4については、入出力の指定をアドレス$0281(SWACNT)で行い、データの出力/検出をアドレス$0280(SWCHA)で行う[5]。両アドレスの機能は以下の通り。両コントローラ端子のピン1〜4を全てデジタル入力とする場合は、$0281にx00を書き込んだ上で$0280を読む。左コントローラのポート1〜4を書き込み用として使う場合は、$0281にxF0を書き込んだ上で$0280に送信するデータを書き込む(ビット4〜7のみ有効)。なお、値1がHレベル(入力として使う場合は、ピンがピン8と短絡していない状態を指す)、値0がLレベルである。
port# |
Bit7 |
Bit6 |
Bit5 |
Bit4 |
Bit3 |
Bit2 |
Bit1 |
Bit0 |
---|---|---|---|---|---|---|---|---|
0280 (R/W) |
Read / Write PA |
|||||||
PA7 |
PA6 |
PA5 |
PA4 |
PA3 |
PA2 |
PA1 |
PA0 |
|
0281 (W) |
Set Direction of PA |
|||||||
PA7 |
PA6 |
PA5 |
PA4 |
PA3 |
PA2 |
PA1 |
PA0 |
VCSはメモリマップトIO
ピン5、6、9はTIAによって制御される。ピン5、9をアナログ入力として使用する場合は以下の手順を踏む。
アドレス$01[6](VBLANK)のビット7に1を書き込む。そうするとキャパシタに蓄えられた電荷が放出され、再び充電が行われる。
充電が完了する(=1.から可変抵抗の抵抗値に比例した時間が経過する)まで、アドレス$X8(左コントローラピン5)、$X9(左コントローラピン9)、$XA(右コントローラピン5)、$XB(右コントローラピン9)のビット7に1が出力され続ける[7]。
CPUは上記アドレスを周期的にチェックして各アドレスのビット7が0に戻るまでの時間を計測する。
TIAのアドレスバスは6本、一方TIA用に割り当てられたポートは$00〜$7Fなので、アドレス$01の代わりに$41を使っても構わない
アドレスの"X"は0〜7どれでも同じ。
アドレス$01のビット7に0を書き込むとピン5、9はデジタル入力モードとなる。読み出しはアナログ入力と同様上記アドレスのビット7を使用する。PIAとは逆にHレベルが0、Lレベルが1である。
ピン6はアドレス$XC(左コントローラ)、$XD(右コントローラ)のビット7にアサインされている。ピン6がHレベルの時は当該ビットは1、Lレベルの時は0である[8]。アドレス$01のビット6に1を書き込むとラッチが有効となり、エッジ検出モードとなる。つまり、H→Lの立ち下がりを検出すると以降は(アドレス$01のビット6に1を書き込むまで)該当アドレスのビット7の値は0を維持する。