--- nono/vm/x68kkbd.cpp 2026/04/29 17:05:33 1.1.1.16 +++ nono/vm/x68kkbd.cpp 2026/04/29 17:05:46 1.1.1.18 @@ -27,6 +27,7 @@ #include "scc.h" #include "scheduler.h" #include "sysport.h" +#include "uimessage.h" // コンストラクタ X68030Keyboard::X68030Keyboard() @@ -199,12 +200,10 @@ X68030Keyboard::KeyInput(uint keystat) // どのキーコードで問い合わせをされても KC_SHIFT_L と KC_SHIFT_R の OR が // [SHIFT] キーの状態である。 if (keycode == KC_SHIFT_L || keycode == KC_SHIFT_R) { - // KC_SHIFT_L, R に対する pressed は内部の OR 処理用 - pressed[keycode] = ismake; - if (keycode == KC_SHIFT_L && pressed[KC_SHIFT_R]) { - return; - } - if (keycode == KC_SHIFT_R && pressed[KC_SHIFT_L]) { + // それぞれのシフトキーが押されたことは覚えておく。 + SetPressed(keycode, ismake); + // 反対側のキーが押されていたら、いま押した・離したほうは無視する + if (IsPressed(keycode ^ 1)) { return; } keycode = KC_SHIFT; @@ -423,6 +422,7 @@ X68030Keyboard::Command(uint32 data) // 0 が明るく 3 が暗いので、明るさというより暗さ。 led_darkness = (data & 3); putlog(1, "Command LED brightness %u", led_darkness); + UIMessage::Post(UIMessage::KEYBOARD); } else if (data < 0x5c) { // $58-$5b 本体からのディスプレイ制御許可 @@ -458,6 +458,7 @@ X68030Keyboard::Command(uint32 data) led[i] = ((data & b) == 0); b <<= 1; } + UIMessage::Post(UIMessage::KEYBOARD); } }