忍者ブログ
MASTER →  ADMIN / NEW ENTRY / COMMENT
現代魔法(nearly equal 情報技術)を勉強中な人のメモ(チラシの裏)
/ 2024/04/26 (Fri) / 編集
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

/ 2008/09/04 (Thu) / 編集
衝撃の事実、マウスはキーボードコントローラで制御されているらしい!でもってキーボード制御回路の初期化をうまい事すればマウス制御回路を有効にできるらしい(bootpack.c:wait_KBC_sendalready(),init_keyboard())
でもってその次はマウス自体の有効化、これもキーボード制御回路を通してやるらしい(bootpack.c : enable_mouse())

そしてマウスからの割り込みの受付、面倒なことにマウスのIRQは12、つまりPIC1についているらしい。なのでPIC1に「IRQ12の受付完了」と教えた後PIC1が繋がっているPIC0のIRQ2にも受付完了を知らせないといけないらしい

//int.c
void inthandler2c(int *esp)
/* PS/2マウスからの割り込み */
{
        unsigned char data;
        /* IRQ-12受付完了をPIC1に通知 */
        io_out8(PIC1_OCW2, 0x64);
        /* IRQ-02受付完了をPIC0に通知 */
        io_out8(PIC0_OCW2, 0x62);
        data = io_in8(PORT_KEYDAT);
        fifo8_put(&mousefifo, data);
        return;
}

これでデータがキュー(mousefifo)に登録されるらしい。

あとはデータを解読するわけで、マウスからのデータは次の4バイトらしい
  1. フェーズ0:最初の0xfa
  2. フェーズ1:ボタンの状態を表す
  3. このバイトの下位3bitがボタンの状態
  4. フェーズ2:xを表す
  5. フェーズ3:-yを表す
  6. マウスはy方向の符号がディスプレイと逆
ちなみに「フェーズx」はソースコードと見比べるために書いてあるのであんま気にしないでください。

カーソルの表示のほうは図形を表示するのといっしょなので「前回のカーソルを消す(つまり前回カーソルがあった場所を背景色で塗りつぶす)」ー>「新しい位置にカーソルを表示」
(bootpack.c:HariMain()のmousefifoがどうとか書いてあるとこ,mouse_decode(),MOUSE_DEC)

これくらい書いておけばソースコードと見比べればわかるかな?

拍手[0回]

PR
忍者ブログ [PR]