2012年11月21日

マウスを動かす(2)

  書き忘れです。

  MSX用、PC-8801用、FM-TOWNS用のマウスですが、ジョイスティックモードというのがあります。

  電源を入れる時(マウスを挿す時)に、左クリックを押しながら電源を入れると、ジョイスティックモードになります。


  このモードになると、マウスをジョイスティックの代わりに使う事が出来ます。

  マウスを上下左右に動かすと、パッドの上下左右を押したのと、同じ動きをします。


  あまり使いそうにありませんが(^^;




posted by えすび at 21:42| Comment(0) | P6解析:ジョイスティックポート | このブログの読者になる | 更新情報をチェックする

マウスを動かす(1)

  P6でも、マウスが一応使えます。

  MSX用、PC-8801用、FM-TOWNS用のマウスが使用可能で、ジョイスティック端子に挿して使う事が出来ます。
  仕様的には、上記3つは殆ど同じようです。

  データの受け渡し方法ですが、pin8 がSTROBE 信号で、特定のタイミングで変化させると、pin1-4 にマウスの座標が返ってきます。
  また、マウスのボタンは、pin6、7 に返ってきます(これは、通常のトリガボタンと同じです)。


  入出力タイミングは以下の通りです。

マウスタイミング


  最初に STROBE 信号を L → H にすると、X方向の移動量(上位)が返ってきます。
  次に STROBE 信号を H → L にすると、X方向の移動量(下位)が返ってきます。
  次に STROBE 信号を L → H にすると、Y方向の移動量(上位)が返ってきます。
  次に STROBE 信号を H → L にすると、Y方向の移動量(下位)が返ってきます。


  一度に返って来るデータは4ビットで、4回掛けてX方向の移動量8ビットとY方向の移動量8ビットを受信する事になります。

  返って来るのは移動量で、符号付き8ビットのデータになります。


  タイミングチャート内の、TA はデータが確定するまでに 最大80μs掛かるという意味です。
  同様に、TB はデータが確定するまでに 最大30μs掛かるという意味です。
  TC は、180 μs 以内にしなさい、という意味です。
  TD は、少なくとも 300 μs は空けてアクセスしなさい、という意味です(PC-8801用は80μsになっているようです)。

  TD の最大値が記載していませんが、あまり遅いと移動量がオーバーフローするので、適当なタイミングで読みにいく必要があります。


  上記の仕様の出典は、Panasonic のマウスの説明書、及びPC-8801マスターバイブルからです。


  また、これは未確認ですが、STROBE 信号が反転している仕様もあるみたいです。



  上記のような仕様なんですが、P6 で動かすには、TC の180μs以内にアクセスする必要があるのが、結構大変です。

  画面を表示している最中は CPU が停止しているために、時間を正確に計測できません。
  バスリクエストを OFF にすれば問題ないんですが、画面を表示させて使えない事を意味しますので、この案は却下です。


  幸い、mk2以降では、垂直同期が検出できますので、それを使用します。
 (初代 P6 でも検出が多分可能なんですが、まだ確立できていません)


  垂直同期のタイミングと、CPU が停止するタイミングですが、以下の通りです。


  画面行数:垂直同期:CPU の順です。

 ・MODE 1〜4
    0〜  2:L:通常
    3〜 36:H:通常
   37〜228:H:停止
  229〜261:H:通常

 ・MODE 5
    0〜  2:L:通常
    3〜 32:H:通常
   33〜232:H:停止
  233〜261:H:通常


  CPU 停止期間は、実際はずっと停止するわけではないんですが、70%程度停止しています。

  1/30 秒かけて、262行を描画します。ですので、1行は 大体 127μs に相当します。
  垂直同期を検出してから30行程度、つまり 3ms 程度は、CPU が停止しない期間になります。

  これを使えば、時間を正確に計測する事ができます。


  実際のプログラムがこれになります。mk2、66 用で、MODE2、PAGE4 です。

mouse.zip


  P6 では、垂直同期が検出できないため使用できません。
  SR 以降では、CPUクロックの周波数が違うために、手直しが必要です。また、バスリクエストをOFF にして実行する方が簡単かと思います。

  実行すると、画面右上に数字が出ます。
  上から、ポート1のマウスのX増分/Y増分/ボタンの状態、ポート2のマウスのX増分/Y増分/ボタンの状態、になります。


  アクセス時間が比較的短いため、増分が小さな数字になっています。

  また符号付きの数値なので、マウスをちょっとだけ動かすと、00000000/11111111 の値でパラパラと表示が変わると思います。



  もう一つ、サンプルプログラムです。MODE5、PAGE4 です。

mouse2.zip


  起動すると画面にカーソルが出て、マウスで移動させる事ができます。
  左右のトリガを両方押すと、終了します。


  ただ、マウスのデータに従って動かすだけの事なんですが、P6系では結構大変です。


posted by えすび at 21:29| Comment(1) | P6解析:ジョイスティックポート | このブログの読者になる | 更新情報をチェックする

2012年08月22日

mk2設計(8)

  いろいろな理由で、mk2を調べ直しています。

  で、ジョイスティックポートの回路のミスが見つかりました...
  通常のパッドは問題ないんですが、8pin から信号を出力するものは、ちゃんと動きません。

  電圧の問題もあるので、ジョイスティックポートはあんまり使えないようにはなっていますので、5V対応の回路を作ってみようかなと思っています。


  また、WAIT 関連(I/Oポート0xF3)も調べ直していますが、どうもFPGAの実装が実機と違うようです。
  さらに、実機の回路にもバグがあるような感じです。


  これも、殆ど変更しているソフトはないと思うので、実害は無さそうです。

posted by えすび at 20:25| Comment(0) | P6解析:ジョイスティックポート | このブログの読者になる | 更新情報をチェックする