--- nono/vm/romemu_luna1.cpp 2026/04/29 17:05:28 1.1.1.10 +++ nono/vm/romemu_luna1.cpp 2026/04/29 17:05:41 1.1.1.12 @@ -69,15 +69,6 @@ Luna1PROMEmuDevice::Luna1PROMEmuDevice() { machine_name = "LUNA-I"; - - // LUNA-I の ROM の特定アドレスを読み出す人がいるので、 - // サイズは実 ROM と同じにしておく必要がある。 - uint devlen = 128 * 1024; - imagebuf.reset(new uint8 [devlen]); - memset(&imagebuf[0], 0, devlen); - mem = &imagebuf[0]; - - mask = devlen - 1; } // デストラクタ @@ -93,6 +84,12 @@ Luna1PROMEmuDevice::Init() return false; } + // LUNA-I の ROM の特定アドレスを読み出す人がいるので、 + // サイズは実 ROM と同じにしておく必要がある。 + if (AllocROM(128 * 1024, 0) == false) { + return false; + } + SysClkDevice *sysclk = GetSysClkDevice(); MemoryStreamBE roms(imagebuf.get()); @@ -175,7 +172,7 @@ Luna1PROMEmuDevice::Init() roms.Write2(0x4e75); // rts // MAC アドレス - macaddr_t macaddr; + MacAddr macaddr; if (EthernetDevice::GetConfigMacAddr(0, &macaddr, false) == false) { // エラーメッセージは表示済み return false; @@ -196,7 +193,7 @@ Luna1PROMEmuDevice::ROM_InitMD() // +0010: メモリサイズ roms.SetOffset(0x10); - roms.Write4(mainram->GetSize()); + roms.Write4((uint32)mainram->GetSize()); // プレーン数(1,4,8)をプレーンマスク(0x01, 0x0f, 0xff)に int nplane = bt45x->GetPlaneCount(); @@ -207,7 +204,7 @@ Luna1PROMEmuDevice::ROM_InitMD() // RAM にベクタを書き込む roms.SetOffset(0); - rams.SetOffset(0); + rams.SetAddr(0); rams.Write4(roms.Read4()); // ROM のリセットベクタをコピー rams.Write4(roms.Read4()); for (uint i = 2; i < 256; i++) { // デフォルトベクタで埋める