--- nono/vm/romemu_luna.cpp 2026/04/29 17:05:43 1.1.1.18 +++ nono/vm/romemu_luna.cpp 2026/04/29 17:05:51 1.1.1.19 @@ -42,6 +42,7 @@ #include "mpu.h" #include "pio.h" #include "prom.h" +#include "rtc.h" #include "scsidev.h" #include "scsidomain.h" #include "sio.h" @@ -121,6 +122,9 @@ LunaPROMEmuDevice::ReadROMIO(busaddr add case ROMIO_CLKCNT: return clkcnt; + case ROMIO_QUITSTOP: + return quitstop; + default: break; } @@ -140,6 +144,11 @@ LunaPROMEmuDevice::WriteROMIO(busaddr ad case ROMIO_CLKCNT: clkcnt = data; return true; + + case ROMIO_QUITSTOP: + quitstop = data; + return true; + default: break; } @@ -318,12 +327,17 @@ LunaPROMEmuDevice::Putc(uint ch) bold = false; break; - case 0x10: + case 0x10: // カラーコード変更 + lunafb->SetBMSEL(0); + break; case 0x11: + lunafb->SetBMSEL(1); + break; case 0x12: + lunafb->SetBMSEL(3); + break; case 0x13: - // カラーコード変更 - lunafb->SetBMSEL(ch - 0x10); + lunafb->SetBMSEL(5); break; case CR: @@ -430,6 +444,8 @@ LunaPROMEmuDevice::ROM_Close() // その時のためにエントリポイント等も初期化しておく。 entrypoint = -1; execute = false; + clkcnt = 0; + quitstop = 0; } // ROM プロンプトのキー入力。 @@ -773,8 +789,16 @@ LunaPROMEmuDevice::ROM_AP1() static uint8 ap1pal[] = { 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf8, + 0, 0, 0, 0xf8, 0xf8, 0x00, + 0, 0, 0, 0xf8, 0xf8, 0xf8, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0x00, 0x00, 0x00, + 0xf8, 0xf8, 0xf8 }; bt45x->WritePort(0, 0); for (int i = 0; i < countof(ap1pal); i++) { @@ -790,12 +814,9 @@ LunaPROMEmuDevice::ROM_AP1() Print(std::string((const char *)test3)); n = strlcpy(buf, (const char *)&Builtin::IPLROM30[0x111e3], sizeof(buf)); - snprintf(buf + n, sizeof(buf) - n, "%d.%d.%d %s", - NONO_MAJOR_VER, NONO_MINOR_VER, NONO_PATCH_VER, NONO_DATE); - for (int i = 0; buf[i]; i++) { - if (buf[i] == '/') - buf[i] = '.'; - } + snprintf(buf + n, sizeof(buf) - n, "%d.%d.%d '%02d.%02d.%02d", + NONO_MAJOR_VER, NONO_MINOR_VER, NONO_PATCH_VER, + GetRTCDevice()->GetYear() % 100, 4, 1); Print("%s\n", buf); memcpy(buf, &Builtin::IPLROM30[0x111f5], 0x28);