--- nono/vm/x68kkbd.cpp 2026/04/29 17:05:03 1.1.1.8 +++ nono/vm/x68kkbd.cpp 2026/04/29 17:05:07 1.1.1.9 @@ -66,16 +66,21 @@ X68030Keyboard::ResetHard() } } -// 共通キーコードを X680x0 キーコードに変換して返す。 +// 共通 keystat を X680x0 キーコードに変換して返す。 // 対応する X680x0 のキーがなければ 0 を返す。 uint -X68030Keyboard::KeyToMDKey(uint keycode) const +X68030Keyboard::KeyToMDKey(uint keystat) const { + uint keycode = KC_CODE(keystat); if (keycode >= countof(keycode2x68kkey_table)) { return 0; } - return keycode2x68kkey_table[keycode]; + uint mdkey = keycode2x68kkey_table[keycode]; + if (mdkey && KC_IS_BREAK(keystat)) { + mdkey |= 0x80; + } + return mdkey; } // シフト状態なら true を返す @@ -142,7 +147,7 @@ void X68030Keyboard::ReptCallback(Event& ev) { // リピート - sendqueue.Enqueue(rept_key); + sendqueue.Enqueue(KeyToMDKey(rept_key)); SendStart(); // 二回目以降のリピートは rept_time 間隔で発生 @@ -191,23 +196,17 @@ X68030Keyboard::Ready() if (gSysport->GetKeyCtrl()) { // KEYCTRL が有効なら処理する - // ここで取り出せるのは keystat。 - uint keystat; - if (sendqueue.Dequeue(&keystat)) { + // ここで取り出せるのは MDKey。 + uint x68kkey; + if (sendqueue.Dequeue(&x68kkey)) { // あれば送信 // 呼ばれたからには送信できるはず assert(gMFP->RxIsReady() == true); - uint keycode = KC_CODE(keystat); - // ここで X68k キーコードに変換 (変換できないはずはない) - uint x68kkey = KeyToMDKey(keycode); assert(x68kkey != 0); // 送信 - if (KC_IS_BREAK(keystat)) { - x68kkey |= 0x80; - } gMFP->Rx(x68kkey); } else { // なければ何もせず終了 @@ -358,7 +357,7 @@ X68030Keyboard::keycode2x68kkey_table[KC X68kKey_kigou, // [05] X68kKey_touroku, // [06] X68kKey_HELP, // [07] - X68kKey_HOME, // [08] + X68kKey_SHIFT, // [08] X68kKey_TAB, // [09] X68kKey_CTRL, // [0a] X68kKey_kana, // [0b] @@ -399,7 +398,7 @@ X68030Keyboard::keycode2x68kkey_table[KC X68kKey_minus, // [2c] X68kKey_circum, // [2d] X68kKey_backslash, // [2e] - X68kKey_UNDO, // [2f] + NoKey, // [2f] X68kKey_OPT1, // [30] X68kKey_OPT2, // [31] @@ -418,8 +417,8 @@ X68030Keyboard::keycode2x68kkey_table[KC X68kKey_hira, // [3e] X68kKey_zenkaku, // [3f] - NoKey, // [40] - NoKey, // [41] + X68kKey_HOME, // [40] + X68kKey_UNDO, // [41] X68kKey_A, // [42] X68kKey_S, // [43] X68kKey_D, // [44] @@ -435,8 +434,8 @@ X68030Keyboard::keycode2x68kkey_table[KC NoKey, // [4e] NoKey, // [4f] - NoKey, // [50] - NoKey, // [51] + X68kKey_XF1, // [50] + X68kKey_XF2, // [51] X68kKey_Z, // [52] X68kKey_X, // [53] X68kKey_C, // [54] @@ -448,9 +447,9 @@ X68030Keyboard::keycode2x68kkey_table[KC X68kKey_period, // [5a] X68kKey_slash, // [5b] X68kKey_underscore, // [5c] - NoKey, // [5d] - NoKey, // [5e] - NoKey, // [5f] + X68kKey_XF3, // [5d] + X68kKey_XF4, // [5e] + X68kKey_XF5, // [5f] NoKey, // [60] X68kKey_PAD_plus, // [61] @@ -485,11 +484,4 @@ X68030Keyboard::keycode2x68kkey_table[KC X68kKey_PAD_divide, // [7d] X68kKey_PAD_equal, // [7e] X68kKey_PAD_comma, // [7f] - - X68kKey_XF1, // [80] - X68kKey_XF2, // [81] - X68kKey_XF3, // [82] - X68kKey_XF4, // [83] - X68kKey_XF5, // [84] - X68kKey_SHIFT, // [85] };