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