|
■転送時の注意点(2) 内部の移動量カウンタは8ビットしかないため、データ読み出しから次の読み出しまでの間隔が長いとオーバーフローしてしまい、正しい移動量が得られなくなる。 このマウスのアクセスは、VDP割込みのタイミングで読み出しを行うことを前提としているので、なるべく読み出しルーチンは、VDP割り込みの中で行うようにすべし(と、資料には書いてあるが、これは実際に守られていたのだろうか?)。 ■転送時の注意点(3) ジョイスティックポートのアクセスは、BIOSコールのPSGアクセスを利用し、移動量の読み出しは右図Aのタイミングで行うこと。 このタイミングは、MSXマウスの読み出しの標準的タイミングとなっている。 (なお、資料では「BIOSコールのPSGアクセスを利用し、」となっているが、これはRDPSGのことであり、WRTPSGはダメである。理由は後述。) ■マウスの移動と出力データの関係(右図B) X軸では左、Y軸では上が正の方向となっている。 ■中締め 疑問点。 「MSXテクニカルガイドブック」では大意、マウス/トラックボールを使うとき、MSX1のGETPADはトラックボールに対応していないので自前のルーチンを使うべし、その際、RDPSGを使うと割り込みが許可されてしまうので、直接I/Oポートをアクセスすべし。MSX2以降の場合はGETPADを使用すべし、としている。 ところが、今回入手した資料掲載のサンプルプログラムではRDPSGを使っている。割り込みが許可されちゃっても平気、なのであろうか? と思って、MSX1のBIOSを参照してみると、WRTPSGはルーチン内で割り込み禁止/解除を行っているが、RDPSGは割り込み関係はノータッチである。 というわけで、「テクガイ」記述の「RDPSG」は、「WRTPSG」の誤りであろう。実際、MSX1のGETPADでは、PSGに書き込むときは直接I/Oポートをアクセスし、読み込むときはRDPSGを使っている。 マウスが接続されているポート(Aポート又はBポート)を選択するに当たり、PSGレジスタ#15に値を書き込まないといけないが、その際は、WRTPSGを使わず、直接I/Oポートをアクセスすべし、ということである。 いろいろと資料を突合して、ようやく合点がいった。ことほどさように「現場百遍」は大事である。ちょっと違うか? まあ、いいや。 |
全体表示





