--- nono/vm/romemu_luna1.cpp 2026/04/29 17:04:50 1.1.1.1 +++ nono/vm/romemu_luna1.cpp 2026/04/29 17:04:55 1.1.1.3 @@ -18,8 +18,8 @@ // (実ROM) (LUNA-I エミュレーション) (LUNA88K エミュレーション) #include "romemu_luna1.h" -#include "bitmap.h" #include "ethernet.h" +#include "lunafb.h" #include "mainapp.h" #include "memorystream.h" #include "mk48t02.h" @@ -121,7 +121,7 @@ Luna1PROMEmuDevice::ROM_Init() ms.Write32(gRAM->GetSize()); // プレーン数(1..4)をプレーンマスク(0x01..0x0f)に - int nplane = gBitmap->GetPlaneCount(); + int nplane = gLunafb->GetPlaneCount(); int planemask = (1 << nplane) - 1; // 実際は RAM 上を指しているのだが、とりあえずすぐ隣に置いておく。 ms.SetPtr(&romdata[0xb8]); @@ -173,6 +173,7 @@ Luna1PROMEmuDevice::ROM_Init() // ConsoleUpdate を呼ぶことでタイトルを含めて画面を表示する。 done: if (entry == 0) { + ClearPrompt(); ConsoleUpdate(); } @@ -230,19 +231,11 @@ Luna1PROMEmuDevice::Command() // 1ワードごとに分解 strcpy(&buf[0], inputbuf.c_str()); char *p = &buf[0]; - char *s = p; - while (*p != '\0') { - if (*p == ' ') { - *p++ = '\0'; - arg.push_back(std::string(s)); - s = p; - } else { - p++; + for (char *ap; (ap = strsep(&p, " ")) != NULL; ) { + if (*ap != '\0') { + arg.push_back(std::string(ap)); } } - if (p != s) { - arg.push_back(std::string(s)); - } if (loglevel >= 1) { for (int i = 0; i < arg.size(); i++) { putmsgn("arg[%d]=|%s|", i, arg[i].c_str()); @@ -538,49 +531,12 @@ Luna1PROMEmuDevice::CommandX() } } -// NVRAM のチェックサムを返す -uint8 -Luna1PROMEmuDevice::CalcNVRAMCsum() -{ - uint8 eor = 0; - for (uint32 addr = 0x20; addr < 0x560; addr++) { - eor ^= nvram->Peek(addr); - } - return eor; -} - -// NVRAM のチェックサムを計算して書き込む -void -Luna1PROMEmuDevice::WriteNVRAMCsum() -{ - uint8 eor = CalcNVRAMCsum(); - - nvram->Write(0x001c, eor); - nvram->Write(0x001d, eor); - nvram->Write(0x001e, eor); -} - -// NVRAM のマジックとチェックサムを照合する -bool -Luna1PROMEmuDevice::VerifyNVRAM() -{ - if (nvram->PeekString(0x0004) != "") { - return false; - } - - uint8 eor = CalcNVRAMCsum(); - for (uint32 addr = 0x1c; addr < 0x1f; addr++) { - if (nvram->Peek(addr) != eor) { - return false; - } - } - return true; -} - // NVRAM を初期化する bool Luna1PROMEmuDevice::InitNVRAM() { + nvram->ClearAll(); + // 初期値どうしたもんか nvram->WriteString(0x0004, ""); nvram->WriteString(0x0020, "BOOT");