--- nono/vm/lunakbd.h 2026/04/29 17:04:52 1.1.1.7 +++ nono/vm/lunakbd.h 2026/04/29 17:04:59 1.1.1.9 @@ -7,7 +7,9 @@ #pragma once #include "keyboard.h" +#include "monitor.h" #include "scheduler.h" +#include class LunaKeyboard : public Keyboard { @@ -18,7 +20,6 @@ class LunaKeyboard : public Keyboard bool PowerOn() override; void ResetHard() override; - void MonitorUpdate(TextScreen&) override; // シフト状態なら true を返す bool IsShift() const override; @@ -26,6 +27,9 @@ class LunaKeyboard : public Keyboard // マウス入力 void MouseInput(int x, int y, bool rb, bool lb, bool mb) override; + // マウスデータを VM に送信する MD 処理 + void MouseSendStart() override; + // ホストからの制御コマンド void Command(uint32 data) override; @@ -33,8 +37,8 @@ class LunaKeyboard : public Keyboard // MD キーコードに変換 uint KeyToMDKey(uint keycode) const override; - // キー処理(MD固有処理) - bool ProcessKey(uint keystat) override; + // キーを1つ処理する + void KeyInput(uint keystat) override; // キーイベントを起こせる空きスロットを計算して、イベントを開始 void SendStart() override; @@ -47,24 +51,18 @@ class LunaKeyboard : public Keyboard // 1: CAPS int Keycode2LED(uint keycode) const; - // イベント - Event key_event {}; - Event mouse_event[3] {}; + DECLARE_MONITOR_CALLBACK(MonitorUpdate); - // マウス状態 - int mouse_x {}; // 前回送信から現在までの積算値 - int mouse_y {}; - bool mouse_r {}; // 現在値 - bool mouse_l {}; - bool mouse_m {}; - bool prev_r {}; // 前回送信時の値 - bool prev_l {}; - bool prev_m {}; + // イベント + Event key_event { this }; + std::array mouse_event {}; // マウスコールバック void MouseSamplingCallback(Event& ev); void MouseCallback(Event& ev); + Monitor monitor { this }; + // 変換テーブル static const uint keycode2lunakey_table[0x80];