1章でも説明したように、MSXの使用しているPSGは、音声出力の機能とは別にポートAとポートBという2つの8ピット入出力ポートを持っています。MSXはこの2つのポートを汎用入出力インターフェイス(いわゆるジョイスティックポート)に接続して、ジョイスティックやマウスなどの装置とのデータ入出力に利用しています(図6.19)。この汎用入出力インターフェイスに接続される各種の装置は、それぞれ専用のBIOSルーチンが用意されており、手軽にアクセスすることができます。
ここでは、各入出力装置の機能とBIOSルーチンによるアクセス法について説明します。
5.1 ポートの機能
PSGの2つの入出力ポートは、図6.20のように利用されています。
5.2 ジョイスティックの使用法
ジョイスティックの回路を図6.21に示します。この回路からわかるように、8番端子に「0」を出力し、1〜4、6〜7の端子を読み出せば、スティックとトリガボタンの情報は得られますが、将来に渡る互換性を考慮すると、ジョイスティックのアクセスはやはりBIOSを利用して行う方が安全です。
ジョイスティックをアクセスするためには、以下に示すBIOSルーチンが用意されています。なお、これらのルーチンはBASICのSTICK関数やSTRIG関数とほぼ等しい機能を持っているもので、ジョイスティック以外にカーソルキーやスペースキーの状態をリアルタイムで読み取ることも可能です。
- GTSTCK(00D5H/MAIN)
機能 |
ジョイスティックの状態を読み出します。
コール手順 |
A | ジョイスティック番号 | |
0 | カーソルキー | |
1〜2 | ジョイスティック |
戻り値 |
A | ジョイスティックまたはカーソルキーの押された方向 |
変更レジスタ |
すべて
解説 |
現在のジョイスティックまたはカーソルキーの状態をAレジスタに返します。値はBASICのSTICK関数と同じです。
- GTTRIG(00D8H/MAIN)
機能 |
トリガボタンの状態を読み出します。
コール手順 |
A | トリガボタン番号 | |
0 | スペースキー | |
1〜2 | トリガボタン | |
(マウスの場合は1〜2がポート1、2の左ボタン、3〜4が右ボタン) |
戻り値 |
A | トリガボタンまたはスペースバーの状態 | |
0FFH | 押す | |
00H | 離す |
変更レジスタ |
AF
解説 |
サンプルプログラム「JOYSTICK.MAC」を参照して下さい。
5.3 パドルの使用法
パドルの回路例は図6.22のとおりです。8端子にパルスを送ると単安定マルチバイブレータは、ある時間幅のパルスを発生します。この幅は可変抵抗の値によって10μs〜3msの範囲で変化しますので、パルス長を測定すれば可変抵抗の値、ひいてはその回転角度を知ることができます。
パドルをアクセスするためのBIOSルーチンを次に示します。
- GTPDL(00DEH/MAIN)
機能 |
パドル情報の状態を読み出します。
コール手順 |
A | パドル番号(1〜12) |
戻り値 |
A | パドルの回転角(0〜255) |
変更レジスタ |
すべて
解説 |
Aレジスタで指定したパドルの状態を調べ、結果をAレジスタに返します。
5.4 タッチパネル、ライトペン、マウス、トラックボールの使用法
タッチパネル、ライトペン、マウス、トラックボール(キャット)はすべて同一のBIOSを用いてアクセスすることができます。その使い方を以下に示します。
- GTPAD(00DBH/MAIN)
機能 |
コール手順 |
A | 装置ID(0〜19) |
戻り値 |
A | 目的の情報 |
変更レジスタ |
すべて
解説 |
サンプルプログラム「PAD.MAC」、「MOUSE.MAC」を参照して下さい。
表6.7 GTPADのBIOSで得られる情報
装置ID | 指定される装置 | 返ってくる情報 |
0 | タッチパネル1 | パネル面に触っていれば0FFH、いなければ00H |
1 | X座標(0〜255) | |
2 | Y座標(0〜255) | |
3 | ボタンが押されていれば0FFH、いなければ00H | |
4 | タッチパネル2 | 同上 |
5 | ||
6 | ||
7 | ||
8 | ライトペン *1 | 0FFHであればデータは有効、00Hであれば無効 |
9 | X座標(0〜255) | |
10 | Y座標(0〜255) | |
11 | スイッチが押されていれば0FFH、いなければ00H | |
12 | マウス1、またはトラックボール1 *2 *3 *4 | つねに0FFHを返す(入力の要求に使用) |
13 | X座標(0〜255) | |
14 | Y座標(0〜255) | |
15 | つねに00Hを返す(無意味) | |
16 | マウス2、またはトラックボール2 | 同上 |
17 | ||
18 | ||
19 |
*1 | ライトペンの座標(A=9、10)とスイッチ(A=11)の情報は、A=8としてBIOSをコールしたとき同時に読み込まれますが、その結果が0FFHのときにのみ、他の値が有効となります。A=8としてBIOSをコールした結果が00Hの場合は、その後に得られる座標値やスイッチの状態は意味を持ちません。 |
*2 | マウスとトラックボールは自動的に判別します。 |
*3 | マウスやトラックボールの座標値を求める場合、まず入力要求のコール(A=12またはA=16)を行い、その後に実際に座標値を求めるコールを実行する、という手順をふみます。このとき2つのコールの時間間隔はできる限り小さくしなければなりません。入力要求から座標の入力までに必要以上に時間をかけると、得られたデータは保証できません。 |
*4 | マウスまたはトラックボールについているトリガボタンの状態を得るためには、GTTRIG(00D8H/MAIN)を使って下さい。 |