--- nono/vm/vm_luna.cpp 2026/04/29 17:04:56 1.1.1.7 +++ nono/vm/vm_luna.cpp 2026/04/29 17:04:59 1.1.1.8 @@ -91,7 +91,7 @@ VM_LUNA::MakeDevtable(const uint8 *mapta switch (maptable[i]) { case NONE: d = gNopIO.get(); break; case BUSERR: d = gBusErr.get(); break; - case PROM: d = prom.get(); break; + case PROM: d = gPROM.get(); break; case MK48: d = gRTC.get(); break; case PIO0: d = gPIO0.get(); break; case PIO1: d = gPIO1.get(); break; @@ -137,6 +137,9 @@ VM_LUNA::Init() ::devtable[i] = gPartialRAM.get(); } + // ブートページ切り替え用に覚えておく + ram0 = ::devtable[0]; + return true; } @@ -164,9 +167,11 @@ VM_LUNA::SwitchBootPage(Device *parent, // 思うけど、具体的にどの範囲が切り替わるのかを知る方法がないのと // 大して副作用もないので、先頭の 1ブロックをまるごと切り替えておく。 if (isrom) { - ::devtable[0] = prom.get(); + ::devtable[0x00] = gPROM0.get(); + ::devtable[0x41] = gPROM0.get(); } else { - ::devtable[0] = gRAM.get(); + ::devtable[0x00] = ram0; + ::devtable[0x41] = gPROM.get(); } } @@ -279,11 +284,12 @@ VM_LUNA1::VM_LUNA1() gRAM.reset(new RAMDevice()); // required by PartialRAM gPartialRAM.reset(new PartialRAMDevice()); gEthernet.reset(new BusIO_W()); // required by PROM - if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) { - prom.reset(new Luna1PROMEmuDevice()); + if (gMainApp.exec_file || gConfig->Find("prom-image").AsString().empty()) { + gPROM.reset(new Luna1PROMEmuDevice()); } else { - prom.reset(new PROMDevice()); + gPROM.reset(new PROMDevice()); } + gPROM0.reset(new PROM0Device()); gRTC.reset(new BusIO_B()); gPIO0.reset(new BusIO_B()); gPIO1.reset(new BusIO_B()); @@ -381,11 +387,12 @@ VM_LUNA88K::VM_LUNA88K() gInterrupt.reset(new SysCtlrDevice()); gRAM.reset(new RAMDevice()); // required by PartialRAM gPartialRAM.reset(new PartialRAMDevice()); - if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) { - prom.reset(new Luna88kPROMEmuDevice()); + if (gMainApp.exec_file || gConfig->Find("prom-image").AsString().empty()) { + gPROM.reset(new Luna88kPROMEmuDevice()); } else { - prom.reset(new PROMDevice()); + gPROM.reset(new PROMDevice()); } + gPROM0.reset(new PROM0Device()); gRTC.reset(new BusIO_BFFF()); gPIO0.reset(new BusIO_BFFF()); gPIO1.reset(new BusIO_BFFF());