--- nono/vm/xiospace.cpp 2026/04/29 17:04:50 1.1.1.6 +++ nono/vm/xiospace.cpp 2026/04/29 17:04:53 1.1.1.7 @@ -193,11 +193,10 @@ XIOSpaceDevice::Init() } // 必要なデバイスは全部埋めたので、この時点で nullptr なエントリを - // buserr に差し替える。 - IODevice *buserr = gVM->GetBusErrDevice(); + // BusErr に差し替える。 for (auto&& d : table) { if (d == nullptr) { - d = buserr; + d = gBusErr.get(); } } @@ -306,3 +305,31 @@ XIOSpaceDevice::Peek8(uint32 addr) IODevice *d = SearchDevice(addr); return d->Peek8(addr); } + +// ブートページを切り替える。 +// (VM_X68030::SwitchBootPage() の下請け) +void +XIOSpaceDevice::SwitchBootPage(bool isrom) +{ + IODevice *ram; + IODevice *rom; + + if (isrom) { + // 0x000000 からの 64KB ( 8エントリ)、 + // 0xfe0000 からの 128KB (16エントリ) のどちらも IPLROM0 が担当する。 + ram = gIPLROM0.get(); + rom = ram; + } else { + // 0x000000 からの 64KB ( 8エントリ) に RAM を見せる。 + // 0xfe0000 からの 128KB (16エントリ) に IPLROM1 を見せる。 + ram = gRAM.get(); + rom = gIPLROM1.get(); + } + + for (int i = 0; i < 8; i++) { + table[i] = ram; + } + for (int i = 0; i < 16; i++) { + table[table.size() - 16 + i] = rom; + } +}