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

Commodore 64(1982)

ハードウェア概要

コモドール64は1982年よりVIC-20の後継機として開発・販売されたパソコンであり、単一モデルとしては世界一売れたパソコンであるとされている[1]。VIC-20とは互換性があり、VIC-20のソフトをそのまま動作させることも可能である。

同年末には低価格版であるマックスマシーンが日本国内で販売されたが、VIC-1001同様やはり売れ行きはいま一つだったようだ。1985年には上位機種であるCommodore 128(発音はOne Twenty-Eight)が登場している。マックスマシーンやC128もコントローラ端子回りの実装は同じなのでまとめて説明する。

コントローラ端子の特徴

以下の説明は"Commodore 64 Programmer's Reference Guide"、"Commodore 64 memory map"及びcbm.ko2000.nuで見つけた回路図に基づく。本機はコントローラ端子を2つもっており、ピンアウトは以下の通りである。

pin#

Controller 1

Controller 2

1

Digital in / Digital out

Digital in

2

Digital in / Digital out

Digital in

3

Digital in / Digital out

Digital in

4

Digital in / Digital out

Digital in

5

Analog in

6

Digital in / Digital out / Light Pen

Digital in

7

VCC

8

GND

9

Analog in

デジタル端子であるピン1~4、6については、I/Oポートをキーボードと共有している(後述)都合上、入出力可能なのはコントローラ端子1のみである。また、コントローラ端子1のピン6はライトペン入力としても利用可能である。

ハードウェア実装

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

/static/images/atari/c64.png

コントローラ端子はCPU(MOS6510又は8500)[2]の周辺チップであるMOS6526(CIA)と、サウンドコントローラであるMOS6580(SID)のI/Oポートを使って実装されている。なお、CIAは2つ使われているがコントローラ端子で使用するのはそのうちの一方である。ライトペン入力検出用としてビデオコントローラであるVIC-II[3]も利用される。

コントローラ端子1のピン1〜4、6はCIAのPB0〜4に接続されている。また、コントローラ端子2のピン1〜4、6はCIAのPA0~4に接続されている。CIAのPA0~7(WRITE)、PB0~7(READ)は通常はキーボードスキャンのために使用されている。ピン5, 9はスイッチICである4066を介してSIDのアナログ入力端子に接続されている。コントローラ端子1のピン6はVIC-IIのライトペン入力端子に接続されている。

4066は端子E0~E3に応じて、Y0~Y3とZ0~Z3とを開閉するスイッチである。上図の構成では、PA6をH、PA7をLにするとコントローラ端子1のピン5、9とSIDのPOTY、POTX端子がつながり、逆にするとコントローラ端子2のピン5、9とSIDのPOTY、POTX端子がつながる。

制御方法

各ピンの制御方法は以下の通りである。

ピン1〜4、6のデジタル入出力については、アドレス$DC00、$DC01、$DC03を使用する。アドレス$DC02はピン5、9のアナログ入力検出の際に使用する。

port#

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

DC00 (R/W)

Read / Write PA of CIA#1

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

DC01 (R/W)

Read / Write PB of CIA#1

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

DC02 (R/W)

Set(W) or Check(R) Direction for PA of CIA#1 (1=Read&Write, 0=Read Only)

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

DC03 (R/W)

Set(W) or Check(R) Direction for PB of CIA#1 (1=Read&Write, 0=Read Only)

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

デジタル信号の入力は$DC00と$DC01を読み出すだけでよい[4]

デジタル信号の出力手順は以下の通り。

  1. アドレス$DC03の内容を保存する

  2. アドレス$DC03の信号を出力したいピンに対応したビットに1を書き込む

  3. アドレス$DC01を使って信号出力を行う

  4. 1.で保存した内容をアドレス$DC03に書き込む

ピン5、9の読出しは、CIAのPA6、7の制御を伴うため多少複雑になる。手順は以下の通り。

  1. SEI命令を実行して割り込みを禁止する

  2. アドレス$DC02の内容を保存する

  3. アドレス$DC02のビット6、7に1を書き込む

  4. アドレス$DC00のビット6、7でアナログ入力を検出する端子を指定する。ビット6=1、ビット7=0で端子1の、ビット6=0、ビット7=1で端子2のアナログ入力の検出を行う

  5. 512サイクル待機[5]

  6. アドレス$D419の読出しでピン9のアナログ値を、$D41Aの読出しでピン5のアナログ値を取得する

  7. 2.で保存した内容をアドレス$DC02に書き込む

  8. CLI命令を実行して割り込みを許可する

ライトペンは、$D013でX座標を、$D014でY座標を読み出す。


コメント(0)


Note

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

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