--- nono/vm/x68kkbd.cpp 2026/04/29 17:05:14 1.1.1.11 +++ nono/vm/x68kkbd.cpp 2026/04/29 17:05:21 1.1.1.13 @@ -49,6 +49,21 @@ X68030Keyboard::~X68030Keyboard() { } +// 初期化 +bool +X68030Keyboard::Init() +{ + if (inherited::Init() == false) { + return false; + } + + mfp = GetMFPDevice(); + scc = GetSCCDevice(); + sysport = GetSysportDevice(); + + return true; +} + // キーボード接続時の MD 固有処理 void X68030Keyboard::MDConnect() @@ -58,12 +73,12 @@ X68030Keyboard::MDConnect() rept_time_data = 4; rept_time = 110_msec; rept_key = KC_none; - gScheduler->StopEvent(rept_event); + scheduler->StopEvent(rept_event); led_darkness = 0; // XXX マウスの接続取り外しは未定 - gScheduler->StopEvent(mouse_event); + scheduler->StopEvent(mouse_event); mouse_event.code = 0; } @@ -71,8 +86,8 @@ X68030Keyboard::MDConnect() void X68030Keyboard::MDDisconnect() { - gScheduler->StopEvent(rept_event); - gScheduler->StopEvent(mouse_event); + scheduler->StopEvent(rept_event); + scheduler->StopEvent(mouse_event); mouse_event.code = 0; } @@ -91,7 +106,7 @@ X68030Keyboard::MonitorUpdate(Monitor *, // Ctrl Enable: OPT.2 Enable: % // Key Repeat: Delay $x(????msec) // Repeat $x(????msec) - // LED: Zen Hira INS CAPS Code Roma Kana ($xx) + // LED: $xx Zen Hira INS CAPS Code Roma Kana // LED Darkness: x // KEY_EN, CTRL_EN, OPT2_EN, MSCTRL は未実装 @@ -129,12 +144,12 @@ X68030Keyboard::MonitorUpdate(Monitor *, uint val = 0x80; for (int i = 0; i < 7; i++) { int n = 6 - i; - screen.Puts(7 + i * 5, y, TA::OnOff(led[n]), ledname[i]); + screen.Puts(12 + i * 5, y, TA::OnOff(led[n]), ledname[i]); if (led[n] == 0) { val |= 1 << n; } } - screen.Print(42, y, "($%02x)", val); + screen.Print(5, y, "$%02x", val); y++; // LED の明るさ (というより暗さ) @@ -207,11 +222,11 @@ X68030Keyboard::KeyInput(uint keystat) // いま起きているリピートは中止 rept_key = keycode; rept_event.time = rept_delay; - gScheduler->RestartEvent(rept_event); + scheduler->RestartEvent(rept_event); } else { if (keycode == rept_key) { // 同じキーのブレークでのみリピートを終了する - gScheduler->StopEvent(rept_event); + scheduler->StopEvent(rept_event); rept_key = KC_none; } } @@ -226,7 +241,7 @@ X68030Keyboard::ReptCallback(Event& ev) // 二回目以降のリピートは rept_time 間隔で発生 rept_event.time = rept_time; - gScheduler->StartEvent(rept_event); + scheduler->StartEvent(rept_event); } // MFP、システムポートと、キーボードの関係。 @@ -252,7 +267,7 @@ X68030Keyboard::ReptCallback(Event& ev) void X68030Keyboard::SendStart() { - if (gMFP->RxIsReady()) { + if (mfp->RxIsReady()) { // 本体が Ready ならここで送信 Ready(); } else { @@ -267,7 +282,7 @@ X68030Keyboard::SendStart() void X68030Keyboard::Ready() { - if (gSysport->GetKeyCtrl()) { + if (sysport->GetKeyCtrl()) { // KEYCTRL が有効なら処理する // ここで取り出せるのは MDKey。 @@ -276,12 +291,12 @@ X68030Keyboard::Ready() // あれば送信 // 呼ばれたからには送信できるはず - assert(gMFP->RxIsReady() == true); + assert(mfp->RxIsReady() == true); assert(x68kkey != 0); // 送信 - gMFP->Rx(x68kkey); + mfp->Rx(x68kkey); } else { // なければ何もせず終了 } @@ -348,7 +363,7 @@ X68030Keyboard::MouseSendStart() // 1バイト目は MSCTRL が立ち下がってから 700us 以上後から送信。 mouse_event.time = 700_usec; mouse_event.code = 1; - gScheduler->RestartEvent(mouse_event); + scheduler->RestartEvent(mouse_event); } // マウスデータのイベントコールバック @@ -364,12 +379,12 @@ X68030Keyboard::MouseCallback(Event& ev) if (mouse_event.code < 4) { // 1, 2, 3 バイト目送信 - gSCC->Rx(1, mouse_data[mouse_event.code - 1]); + scc->Rx(1, mouse_data[mouse_event.code - 1]); // 次のイベント mouse_event.time = 2300_usec; mouse_event.code++; - gScheduler->StartEvent(mouse_event); + scheduler->StartEvent(mouse_event); } else { // 3 バイト目の送信が終わって、1文字送信分の時間が経過したので // ここで code を 0 に戻す。