--- nono/vm/romemu_luna88k.cpp 2026/04/29 17:05:30 1.1.1.15 +++ nono/vm/romemu_luna88k.cpp 2026/04/29 17:05:43 1.1.1.16 @@ -169,15 +169,6 @@ Luna88kPROMEmuDevice::Luna88kPROMEmuDevi { machine_name = "LUNA-88K"; - // ROM の特定アドレスを読み出す人がいるかも知れないので、 - // サイズは実 ROM と同じにしておく。LUNA-I からの類推。 - uint devlen = 256 * 1024; - imagebuf.reset(new uint8 [devlen]); - memset(&imagebuf[0], 0, devlen); - mem = &imagebuf[0]; - - mask = devlen - 1; - // プロンプトを初期化。 prompt = default_prompt; } @@ -195,6 +186,12 @@ Luna88kPROMEmuDevice::Init() return false; } + // ROM の特定アドレスを読み出す人がいるかも知れないので、 + // サイズは実 ROM と同じにしておく。LUNA-I からの類推。 + if (AllocROM(256 * 1024, 0) == false) { + return false; + } + SysClkDevice *sysclk = GetSysClkDevice(); // DOS call エミュレーションのコールバックを登録 @@ -338,7 +335,7 @@ Luna88kPROMEmuDevice::ROM_InitMD() auto *sysctlr = dynamic_cast(GetInterruptDevice()); sysctlr->WriteIntMask(0, 0xc0000000); - rams.SetOffset(0); + rams.SetAddr(0); // ベクタテーブルを rte で埋めておく for (int i = 0; i < 512 * 2; i++) { rams.Write4(OP_rte()); @@ -349,7 +346,7 @@ Luna88kPROMEmuDevice::ROM_InitMD() // 割り込みトランポリン (0x1000) // ベクタテーブルは各2ワードしかないのに、0 番地付近にあるベクタテーブル // から2ワードでは ROM まで飛べない。一体どういう設計してんだ…。 - rams.SetOffset(0x1000); + rams.SetAddr(0x1000); rams.Write4(OP_or_u (r6, r0, 0x4100)); rams.Write4(OP_or (r6, r6, 0x0200)); rams.Write4(OP_jmp (r6)); @@ -363,7 +360,7 @@ Luna88kPROMEmuDevice::ROM_InitMD() // 0x00001114 ビットマッププレーンの有効状態が入っている。 // bit0: plane0 有効 // bit1..7: plane1..7 有効 - rams.SetOffset(0x110c); + rams.SetAddr(0x110c); rams.Write4(0x41000300); rams.Write4(0x41000400); rams.Write4(0x00000001);