misc. > アタリ仕様ジョイスティック研究 > アタリ仕様ではないもの > GCE Vectrex/バンダイ 光速船(1982)

GCE Vectrex/バンダイ 光速船(1982)

ハードウェア概要

General Consumer Electronics(GCE)社より1982年に発売されたベクタースキャン方式[1]を採用した家庭用ゲーム機。その性格上モノクロCRTを内蔵している。翌1983年には日本国内で「光速船」という名称でバンダイより発売された。Vectrexの情報はPlayVectrex.comに優れたドキュメントがあり、本記事もこのサイトの内容を参考にした物てある。

VectrexのCPUはモトローラ68A09(1.5MHz)、音源にGI社のAY-3-8912(PC-6001等で使用されているAY-3-8910の廉価版で、I/Oポートを1系統のみとしたもの)が採用されている。標準コントローラはアナログ2軸、4ボタンであり、ライトペンもオプションで用意された。

ソフトはROMカートリッジで供給され、当時発売されたタイトルは28本。他のレトロゲーム機と同様、現在では活発に同人ゲーム(Homebrew)の開発が行われている。開発者の為のドキュメントも上記PlayVectrex.comにて公開されている。

コントローラ端子の特徴

本機はアタリ仕様と同形状のコントローラ端子を2つもっている(モデルによってはコントローラが本体直結となっておりコネクタはない)が、仕様は微妙に異なる。Vectrexのサービスマニュアルによれば、ピンアウトは以下の通り。VCS標準ジョイスティックは方向のみ検出可能であり、パドルコントローラはボタン及び右コントローラのパドルのみ検出可能である。

pin#

Function

1

Digital in (BUTTON 1)

2

Digital in (BUTTON 2)

3

Digital in (BUTTON 3)

4

Digital in (BUTTON 4/ LIGHT PEN)

5

Analog in (X)

6

Analog in (Y)

7

+5V

8

GND

9

-5V

ハードウェア実装

ピン1 - 4のデジタル入力はAY-3-8912のI/Oポートを用いて実装されている。ピン5、6のアナログ入力は、VCS等とは異なりD/Aコンバータとコンパレータを使って実装されている。

制御方法

ジョイスティックの読み取りはBIOSを使用する。ジョイスティック用のBIOSは以下の通り。なお、いずれのBIOSもコール前にレジスタDPに$D0をセットする必要がある。

  • Joy_Analog ($F1F5)

  • Joy_Digital ($F1F8)

  • Read_Btns_Mask ($F1B4)

  • Read_Btns ($F1BA)

アナログ入力

Joy_AnalogとJoy_Digitalはアナログ入力の検出を行うためのBIOSで、BIOSコールを行う前にメモリアドレス$C81F~$C822に読み取り許可フラグをセットする必要がある。

  • $C81F: ジョイスティック1のX軸: 読み取りを行わないときは0、行うときは1をセットする

  • $C820: ジョイスティック1のY軸: 読み取りを行わないときは0、行うときは3をセットする

  • $C821: ジョイスティック2のX軸: 読み取りを行わないときは0、行うときは5をセットする

  • $C822: ジョイスティック2のY軸: 読み取りを行わないときは0、行うときは7をセットする

Joy_Digital、Joy_Analog共に検出結果は以下のメモリアドレスに保存される。

  • $C81B: ジョイスティック1 X軸

  • $C81C: ジョイスティック1 Y軸

  • $C81D: ジョイスティック2 X軸

  • $C81E: ジョイスティック2 Y軸

Joy_Digitalは単にスティックが倒されたかどうかの検出を行うもので、左又は下に倒されたときに負、右または上に倒されたときは正、倒されていないときは0となるものである。一方Joy_Analogは近似アルゴリズムを用いてアナログ値の検出を行うものであり、BIOSコールに先立ってアドレス$C81Aに近似精度を2のべき乗値(0、2、4、8、…、128)で入力する必要がある。0が最高精度であり、128が最低精度である。

デジタル入力

Read_Btns_MaskはAレジスタにマスク情報をセットした上でコールする。マスク情報とは、各ボタンに対応したビットが0の時はボタン入力をそのままAレジスタに返す(0:押されていない、1:押されている)のに対し、ビットが1の時は前回BIOSコール時からボタン入力に変化があった時に1を返すものである。マスク情報、返り値と各ボタンの関係は以下の通り。

Bit

Button

0

Button 1 of Stick 1

1

Button 2 of Stick 1

2

Button 3 of Stick 1

3

Button 4 of Stick 1

4

Button 1 of Stick 2

5

Button 2 of Stick 2

6

Button 3 of Stick 2

7

Button 4 of Stick 2

Read_Btnsはボタン入力の変化を読み取るものであり、Aレジスタに$FFをセットしてRead_Btns_Maskをコールした時と同じ結果となる。

また、これらのBIOSコールの結果、メモリアドレス$C80F - $C819も変化する。各アドレスの意味は以下の通り。

  • $C80F: 現在のボタンの状態。Aレジスタに$00をセットしてRead_Btns_Maskをコールした時の返り値と同内容

  • $C810: 前回のBIOSコール時のボタンの状態。

  • $C811: 現在ボタンの変化状態。Read_Btnsの返り値と同内容

  • $C812: スティック1のボタン1の変化状態。変化があった時$01がセットされる

  • $C813: スティック1のボタン2の変化状態。変化があった時$02がセットされる

  • $C814: スティック1のボタン3の変化状態。変化があった時$04がセットされる

  • $C815: スティック1のボタン4の変化状態。変化があった時$08がセットされる

  • $C816: スティック2のボタン1の変化状態。変化があった時$10がセットされる

  • $C817: スティック2のボタン2の変化状態。変化があった時$20がセットされる

  • $C818: スティック2のボタン3の変化状態。変化があった時$40がセットされる

  • $C819: スティック2のボタン4の変化状態。変化があった時$80がセットされる


コメント(0)


Note

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

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