マウスホイール検知

提供: OSWiki
移動先: 案内検索

マウスのホイールを有効にするには、マウスの初期化前に次のコマンドを送ります。どうやらホイールもマウスができて一時してから実装されたため、OS混乱しないように無効化されてるようです。 (第四、第五ボタンも有効にしています。) (PS/2マウスの場合)

キーボード制御回路の設定

  • キーボード制御回路 : 0x0064
  • キーボードデータ出力 : 0x0060
  1. キーボード制御回路から8bit読み出して下位2bitが00になるまで待つ(はりぼてOSでのwait_KBC_sendready、以後「キーボード制御回路待ち」と書く)
  2. キーボード制御回路に書き込みコマンド : 0x60 を書き込む。
  3. キーボード制御回路待ち
  4. キーボードデータ出力に0x47を書き込む。

詳しくはOSWiki(AT)keyboardを見てください。はりぼてOSと同じです。

マウス制御回路の設定

  • キーボード制御回路 : 0x0064
  • キーボードデータ出力 : 0x0060
  • マウス制御回路転送コマンド : 0xD4

ここからは割り込みを許可して割り込みの発生を受けて次の作業に移るという方法になります。 「マウス制御回路の作業完了確認」方法は

  1. マウス制御回路に0xF3を送る。
  2. マウス制御回路(キーボード制御回路)からの割り込みを待つ。
  3. キーボード制御コマンド出力から8bit読み出し、0xFAか調べる。0xFFが来たときはコマンドを再送信。

となります。

本題のスクロール有効化方法は

  1. キーボード制御回路にマウス制御回路転送コマンドを送る。
  2. キーボード制御回路待ち
  3. キーボードデータ出力に0xF3を送る。
  4. マウス制御回路の作業完了確認をする。
  5. キーボード制御回路にマウス制御回路転送コマンドを送る。
  6. キーボード制御回路待ち
  7. キーボードデータ出力に0xC8を送る。
  8. マウス制御回路の作業完了確認をする。
  9. キーボード制御回路にマウス制御回路転送コマンドを送る。
  10. キーボード制御回路待ち
  11. キーボードデータ出力に0xF3を送る。
  12. マウス制御回路の作業完了確認をする。
  13. キーボード制御回路にマウス制御回路転送コマンドを送る。
  14. キーボード制御回路待ち
  15. キーボードデータ出力に0xC8を送る。(第四、第五ボタンを有効にしたくないときは,0x64)
  16. マウス制御回路の作業完了確認をする。
  17. キーボード制御回路にマウス制御回路転送コマンドを送る。
  18. キーボード制御回路待ち
  19. キーボードデータ出力に0xF3を送る。
  20. マウス制御回路の作業完了確認をする。
  21. キーボード制御回路にマウス制御回路転送コマンドを送る。
  22. キーボード制御回路待ち
  23. キーボードデータ出力に0x50を送る。
  24. マウス制御回路の作業完了確認をする。
  25. キーボード制御回路にマウス制御回路転送コマンドを送る。
  26. キーボード制御回路待ち
  27. キーボードデータ出力に0x50を送る。
  28. マウス制御回路の作業完了確認をする。

これでおそらく有効化できてると思います。間に転送コマンドを送ってますが、直接マウス制御回路に届くデータは、

  1. 0xF3
  2. 0xC8
  3. 0xF3
  4. 0xC8(0x64)
  5. 0xF3
  6. 0x50
  7. 0xF4

です。


ちなみに昔調べたことなので出典がどこかわかりませんし、合ってるかわかりません。完全に信じ込まないように...