マウスドライバにはまる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