GCE Vectrex/バンダイ 光速船(1982)
- 公開日: 2022/04/06
- 更新日: 2022/04/06
ハードウェア概要
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がセットされる