--- nono/vm/prom.cpp 2026/04/29 17:05:20 1.1.1.13 +++ nono/vm/prom.cpp 2026/04/29 17:05:24 1.1.1.14 @@ -34,7 +34,8 @@ #include "config.h" #include "ethernet.h" #include "mainapp.h" -#include "vm.h" +#include "mainbus.h" +#include "mpu.h" // // PROM0 @@ -77,7 +78,8 @@ PROM0Device::Init() void PROM0Device::ResetHard(bool poweron) { - gVM->SwitchBootPageToROM(this); + auto mainbus = GetMainbusDevice(); + mainbus->SwitchBootPageToROM(); } // アドレスデコーダ @@ -91,21 +93,21 @@ PROM0Device::Decoder(uint32 addr) return addr; } -uint64 +busdata PROM0Device::Read8(uint32 addr) { addr = Decoder(addr); return prom->Read8(addr); } -uint64 +busdata PROM0Device::Read16(uint32 addr) { addr = Decoder(addr); return prom->Read16(addr); } -uint64 +busdata PROM0Device::Read32(uint32 addr) { addr = Decoder(addr); @@ -120,34 +122,35 @@ PROM0Device::Read32(uint32 addr) // よってアドレスを定めず PROM 全域への書き込みで最初の1回だけ発動する // ようにしておく。サイズも今の所ワード(16bit)アクセスは確認してないけど // 統一的に対処しておく。 -uint64 +busdata PROM0Device::Write() { - gVM->SwitchBootPageToRAM(this); + auto mainbus = GetMainbusDevice(); + mainbus->SwitchBootPageToRAM(); // バスエラーは起きない return 0; } -uint64 +busdata PROM0Device::Write8(uint32 addr, uint32 data) { return Write(); } -uint64 +busdata PROM0Device::Write16(uint32 addr, uint32 data) { return Write(); } -uint64 +busdata PROM0Device::Write32(uint32 addr, uint32 data) { return Write(); } -uint64 +busdata PROM0Device::Peek8(uint32 addr) { addr = Decoder(addr); @@ -212,7 +215,7 @@ PROMDevice::InitLuna1() } // XXX アクセスウェイトは未調査。とりあえず RAM と同程度にしておく - wait = 1; + wait = busdata::Wait(1 * mpu->GetClock_nsec()); // ROM バージョンを確認。確認されてるのは // V4.02 (Wed Oct 12 17:07:11 1988) @@ -297,7 +300,7 @@ PROMDevice::InitLuna88k() } // XXX アクセスウェイトは未調査。とりあえず RAM と同程度にしておく - wait = 3; + wait = busdata::Wait(3 * mpu->GetClock_nsec()); // ROM バージョンを照合。どこかに日付が埋まってるっぽい。 //