--- nono/vm/x68kkbd.cpp 2026/04/29 17:05:17 1.1.1.12 +++ nono/vm/x68kkbd.cpp 2026/04/29 17:05:25 1.1.1.14 @@ -106,7 +106,7 @@ X68030Keyboard::MonitorUpdate(Monitor *, // Ctrl Enable: OPT.2 Enable: % // Key Repeat: Delay $x(????msec) // Repeat $x(????msec) - // LED: Zen Hira INS CAPS Code Roma Kana ($xx) + // LED: $xx Zen Hira INS CAPS Code Roma Kana // LED Darkness: x // KEY_EN, CTRL_EN, OPT2_EN, MSCTRL は未実装 @@ -144,12 +144,12 @@ X68030Keyboard::MonitorUpdate(Monitor *, uint val = 0x80; for (int i = 0; i < 7; i++) { int n = 6 - i; - screen.Puts(7 + i * 5, y, TA::OnOff(led[n]), ledname[i]); + screen.Puts(12 + i * 5, y, TA::OnOff(led[n]), ledname[i]); if (led[n] == 0) { val |= 1 << n; } } - screen.Print(42, y, "($%02x)", val); + screen.Print(5, y, "$%02x", val); y++; // LED の明るさ (というより暗さ) @@ -361,7 +361,8 @@ X68030Keyboard::MouseSendStart() mouse_y = 0; // 1バイト目は MSCTRL が立ち下がってから 700us 以上後から送信。 - mouse_event.time = 700_usec; + // さらに1バイトの送信に 2.3msec かかる(このすぐ下参照)。 + mouse_event.time = 700_usec + 2300_usec; mouse_event.code = 1; scheduler->RestartEvent(mouse_event); } @@ -373,22 +374,20 @@ X68030Keyboard::MouseCallback(Event& ev) // マウスは 4800bps で、ストップビット 2 なので11ビット。 // 1/4800 * 11 = 2.29166 msec なので、1バイトあたり 2.3 msec にしておく。 - // code は 1 なら1バイト目 ([0]) - // : - // code が 4 なら送らずに終了 - - if (mouse_event.code < 4) { - // 1, 2, 3 バイト目送信 - scc->Rx(1, mouse_data[mouse_event.code - 1]); + // code 1 なら1バイト目 (mouse_data[0]) の送信完了時刻が来た。 + // code 2 なら2バイト目 (mouse_data[1]) の送信完了時刻が来た。 + // code 3 なら3バイト目 (mouse_data[2]) の送信完了時刻が来た。 + // 3バイト目を送信してイベントループ終了。 + scc->Rx(1, mouse_data[mouse_event.code - 1]); + + if (mouse_event.code < 3) { // 次のイベント mouse_event.time = 2300_usec; mouse_event.code++; scheduler->StartEvent(mouse_event); } else { - // 3 バイト目の送信が終わって、1文字送信分の時間が経過したので - // ここで code を 0 に戻す。 - // XXX 実際のタイミングがどうかは知らない。 + // 3 バイト目の送信が終わった。 mouse_event.code = 0; } }