マウスドライバにはまる2

Yasさん、たろすけさんアドバイスありがとうございます。
現状のMonaのコードは、出力レジスタのごみ掃除というか、readable/writableのステータスを見ているのですが不十分でしょうか。
現状だとinitの1個目のwaitWritableでタイムアウトになってしまいます。
もしお分かりの方がいましたらぜひぜひアドバイスをば。

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

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

        outp8(0x60, data & (~0x30) | 0x3);
        if (!waitReadable())
        {
            inp8(0x60);
        }

        outp8(0x64, 0xd4);
        if (waitWritable())
        {
            return 4;
        }
        outp8(0x60, 0xf4);
        if (waitReadable())
        {
            return 5;
        }
        inp8(0x60);
        return 0;
    }

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

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

            /* writable */
            if *1 {

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

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

*1:status & 0x03) == 0x00) { break; } } return (i == MOUSE_TIMEOUT) ? -1 : 0; } static int waitReadable() { byte status; int i; for (i = 0, status = inp8(0x64); i < MOUSE_TIMEOUT; i++, status = inp8(0x64