--- nono/vm/romemu_luna.cpp 2026/04/29 17:04:36 1.1.1.2 +++ nono/vm/romemu_luna.cpp 2026/04/29 17:04:39 1.1.1.3 @@ -231,11 +231,11 @@ LunaPROMEmuDevice::ROM_Init() // 内蔵 ROM: スクリーンを初期化 text.Init(80, 32); - text.foldmode = true; gBitmap->EmuConsoleOpen(&text); inputbuf.clear(); inputpos = 0; is_shift = false; + mousecnt = 0; prompt_idx = 0; prompt = default_prompt; @@ -328,6 +328,12 @@ LunaPROMEmuDevice::ROM_Keyin() { uint32 lunakey = gSIO->Read8(0x51000004); + // マウス入力の 2, 3バイト目は無視 + if (mousecnt > 0) { + mousecnt--; + return 0; + } + // SHIFT キーだけ状態を持つので先に処理 if (lunakey == 0x0c || lunakey == 0x0d) { // 左右SHIFT押下 is_shift = true; @@ -337,7 +343,12 @@ LunaPROMEmuDevice::ROM_Keyin() is_shift = false; return 0; } - // 後は最上位ビットが立ってたらキー開放かマウスなので無視 + // マウスデータの1バイト目なら、後続2バイトをスキップ + if ((lunakey & 0xf8) == 0x80) { + mousecnt = 2; + return 0; + } + // キー開放は無視してよい if ((lunakey & 0x80)) { return 0; } @@ -978,7 +989,7 @@ LunaPROMEmuDevice::LoadByNVRAM(const std putmsg(0, "%s", errmsg.c_str()); return 0; } - if (target->GetDevType() != SCSI::HD) { + if (target->GetDevType() != SCSI::DevType::HD) { errmsg = "No bootable disks"; putmsg(0, "%s", errmsg.c_str()); return 0;