--- nono/vm/mpu88xx0.cpp 2026/04/29 17:04:45 1.1.1.5 +++ nono/vm/mpu88xx0.cpp 2026/04/29 17:04:52 1.1.1.7 @@ -13,14 +13,11 @@ std::unique_ptr gMPU88200ATC[2]; // コンストラクタ -MPU88xx0Device::MPU88xx0Device(uint32 reset_vector) +MPU88xx0Device::MPU88xx0Device() { monitor_size = nnSize(79, 18); - cpu.reset(new m88kcpu(reset_vector)); - - // リセット例外イベントコールバック設定 - event.func = (DeviceCallback_t)&MPU88xx0Device::Callback; + cpu.reset(new m88kcpu()); // LUNA88K では CMMU の ID は次のように割り振ってあるようだ。 // OpenBSD の sys/arch/luna68k/include/board.h より。 @@ -61,13 +58,37 @@ MPU88xx0Device::Init() return true; } -// リセット例外イベントコールバック +bool +MPU88xx0Device::PowerOn() +{ + cpu->PowerOn(); + return true; +} + void -MPU88xx0Device::Callback(Event& ev) +MPU88xx0Device::ResetHard() { cpu->RequestReset(); } +// アクセス中の論理アドレスを取得 +uint32 +MPU88xx0Device::GetLaddr() const +{ + m88200 *cmmu = m88200::GetBusMaster(); + assert(cmmu); + return cmmu->GetLaddr(); +} + +// アクセス中の物理アドレスを取得 +uint32 +MPU88xx0Device::GetPaddr() const +{ + m88200 *cmmu = m88200::GetBusMaster(); + assert(cmmu); + return cmmu->GetPaddr(); +} + // アクセスウェイトを加算 void MPU88xx0Device::AddCycle(int32 cycle)