--- nono/vm/lunakbd.h 2026/04/29 17:04:45 1.1.1.6 +++ nono/vm/lunakbd.h 2026/04/29 17:04:55 1.1.1.8 @@ -7,6 +7,7 @@ #pragma once #include "keyboard.h" +#include "monitor.h" #include "scheduler.h" class LunaKeyboard : public Keyboard @@ -16,13 +17,12 @@ class LunaKeyboard : public Keyboard LunaKeyboard(); virtual ~LunaKeyboard() override; + bool PowerOn() override; void ResetHard() override; - void MonitorUpdate(TextScreen&) override; - // キーを押した - void MakeKey(uint) override; - // キーを離した - void BreakKey(uint) override; + // シフト状態なら true を返す + bool IsShift() const override; + // マウス入力 void MouseInput(int x, int y, bool rb, bool lb, bool mb) override; @@ -30,30 +30,29 @@ class LunaKeyboard : public Keyboard void Command(uint32 data) override; private: - // キーを離した (内部用) - void BreakKeyCommon(uint lunakey); + // MD キーコードに変換 + uint KeyToMDKey(uint keycode) const override; + + // キーを1つ処理する + void KeyInput(uint keystat) override; - // キーイベントを空きスロットに登録 - void SetKeyEvent(uint code); + // キーイベントを起こせる空きスロットを計算して、イベントを開始 + void SendStart() override; // キーボードコールバック void KeyboardCallback(Event& ev); - // 共通キーコードから LUNA キーコードへの変換 - uint keycode2lunakey(uint); - - // LUNA キーコードから LED 番号を取得。 + // 共通キーコードから LED 番号を取得。 // 0: かな // 1: CAPS - int LunaKey2LED(uint lunakey) const; + int Keycode2LED(uint keycode) const; + + DECLARE_MONITOR_CALLBACK(MonitorUpdate); // イベント - Event key_event {}; + Event key_event { this }; Event mouse_event[3] {}; - // キー送信中なら true - bool key_sending {}; - // マウス状態 int mouse_x {}; // 前回送信から現在までの積算値 int mouse_y {}; @@ -68,18 +67,10 @@ class LunaKeyboard : public Keyboard void MouseSamplingCallback(Event& ev); void MouseCallback(Event& ev); - // 変換テーブル - static const uint keycode2lunakey_table[128]; - - // キー名テーブル - static const char * const keyname[128]; + Monitor monitor { this }; - // キーリピート用のテーブル。 - // LUNA のキーボードはキーを押し続けてもキーボードはオートリピート - // しないが、wxWidgets はキーを押し続けると KEY_DOWN イベントが連続 - // して飛んでくる。そのためすでに押されているキーについて再び - // KEY_DOWN が来てもこれを本体に送らないようにする。 - uint8 reptable[128] {}; + // 変換テーブル + static const uint keycode2lunakey_table[0x80]; // LUNA キーコード static const uint NoKey = 0;