マウスドライバにはまる

マウスサーバが起動する前に、キーボードを連打するとマウスサーバ起動時にinitialize error =2 になる件を調べてみた。


まずは起動前はマウス・キーボード割り込み共にマスクしておく。
んで、初期化が終わってから割り込みを受け付けるという流れにしてみたが、同様のエラー。

マウスの初期化コード

    static int init()
    {
        byte data;
        outp8(0x64, 0x20);
        if (waitReadable())
        {
            return 1;
        }
        data = inp8(0x60);

        outp8(0x64, 0x60);
        if (waitWritable())
        {
            return 2;//ここ
        }

waitWritable

    static int waitReadable()
    {
        byte status;
        int i;

        for (i = 0, status = inp8(0x64); i < MOUSE_TIMEOUT; i++, status = inp8(0x64)) {

            /* readable */
            if ((status & 0x01) == 0x01) {
                break;
            }
        }

        return (i == MOUSE_TIMEOUT) ? -1 : 0;
    }

無茶な対応

waitWritableするまえに inp8(0x60)を100回位しておくと、バッファが空になるのかうまくいきますが・・・これはありえない。

というわけでハードウェアに詳しい方、アドバイスを頂けるとありがたいです。