--- nono/vm/lunakbd.h 2026/04/29 17:05:06 1.1.1.10 +++ nono/vm/lunakbd.h 2026/04/29 17:05:32 1.1.1.14 @@ -4,22 +4,25 @@ // Licensed under nono-license.txt // +// +// LUNA のキーボードとマウス +// + #pragma once #include "keyboard.h" -#include "monitor.h" -#include "scheduler.h" -#include +#include "event.h" + +class SIODevice; class LunaKeyboard : public Keyboard { using inherited = Keyboard; public: LunaKeyboard(); - virtual ~LunaKeyboard() override; + ~LunaKeyboard() override; - bool PowerOn() override; - void ResetHard() override; + bool Init() override; // シフト状態なら true を返す bool IsShift() const override; @@ -34,6 +37,10 @@ class LunaKeyboard : public Keyboard void Command(uint32 data) override; private: + // キーボードの接続と取り外し + void MDConnect() override; + void MDDisconnect() override; + // MD キーコードに変換 uint KeyToMDKey(uint keystat) const override; @@ -67,7 +74,6 @@ class LunaKeyboard : public Keyboard bool mouse_on {}; // ブザー - bool buzzer_on {}; // ブザー発音中なら true uint buzzer_msec {}; // コマンドで指定した発音時間 [msec] uint buzzer_freq {}; // コマンドで指定した発音周波数 [Hz] uint64 buzzer_end {}; // ブザーを鳴らし終わる仮想時刻 @@ -75,7 +81,9 @@ class LunaKeyboard : public Keyboard // イベント Event event { this }; - Monitor monitor { this }; + Monitor *monitor {}; + + SIODevice *sio {}; // 変換テーブル static const uint keycode2lunakey_table[KC_max]; @@ -119,6 +127,7 @@ class LunaKeyboard : public Keyboard static const uint LunaKey_minus = 0x2c; static const uint LunaKey_circum = 0x2d; static const uint LunaKey_backslash = 0x2e; + static const uint LunaKey_buzzer = 0x2f; static const uint LunaKey_Q = 0x32; static const uint LunaKey_W = 0x33;