--- nono/vm/vm_x68k.cpp 2026/04/29 17:04:59 1.1.1.7 +++ nono/vm/vm_x68k.cpp 2026/04/29 17:05:10 1.1.1.8 @@ -4,6 +4,10 @@ // Licensed under nono-license.txt // +// +// VM (X68030) +// + #include "vm_x68k.h" #include "bus.h" #include "config.h" @@ -14,9 +18,11 @@ #include "mainapp.h" #include "mfp.h" #include "mpu680x0.h" +#include "nmi.h" #include "pedec.h" #include "pluto.h" #include "pio.h" +#include "power.h" #include "renderer.h" #include "rp5c15.h" #include "romimg_x68k.h" @@ -25,10 +31,6 @@ #include "x68kkbd.h" #include "xiospace.h" -// -// X68030 VM -// - // コンストラクタ VM_X68030::VM_X68030() { @@ -45,28 +47,29 @@ VM_X68030::VM_X68030() gConfig->Delete("luna-dipsw1"); gConfig->Delete("luna-dipsw2"); gConfig->Delete("prom-image"); + gConfig->Delete("rtc-epoch-year"); // デバイス (順序に注意) // BusErrDevice は親コンストラクタで作成済み。 - gMPU.reset(new MPU680x0Device()); // required by Scheduler - gScheduler.reset(new Scheduler()); // required by * - gInterrupt.reset(new X68030Interrupt()); - gRAM.reset(new RAMDevice()); // required by XIOSpace - gXIOSpace.reset(new XIOSpaceDevice()); - gIPLROM0.reset(new IPLROM0Device()); - - gKeyboard.reset(new X68030Keyboard()); - gRenderer.reset(new X68030Renderer()); + NEWDV(MPU, new MPU680x0Device()); + NEWDV(Interrupt, new X68030Interrupt()); + NEWDV(RAM, new RAMDevice()); // required by XIOSpace + NEWDV(XIOSpace, new XIOSpaceDevice()); + NEWDV(IPLROM0, new IPLROM0Device()); + + NEWDV(NMI, new NMIDevice()); + NEWDV(Keyboard, new X68030Keyboard()); + NEWDV(Renderer, new X68030Renderer()); if (gMainApp.human_mode) { - human68k.reset(new Human68k()); + NEWDV(Human68k, new Human68k()); } // 割り当て // 今は拡張メモリがないので、今は上位8ビット全領域がミラーになっている。 for (int i = 0; i < countof(::devtable); i++) { - ::devtable[i] = gXIOSpace.get(); + ::devtable[i] = gXIOSpace; } } @@ -89,7 +92,7 @@ VM_X68030::PowerButton() power_button = !power_button; // スケジューラに指示 - gScheduler->RequestPowerOn(); + gPower->MakePowerOn(); } // ブートページを切り替える。 @@ -149,11 +152,11 @@ VM_X68030::SwitchBootPage(Device *parent void VM_X68030::ResetByMPU() { - gDMAC->ResetHard(); - gFDC->ResetHard(); - gMFP->ResetHard(); - gPEDEC->ResetHard(); - gPluto->ResetHard(); - gPPI->ResetHard(); - gSPC->ResetHard(); + gDMAC->ResetHard(false); + gFDC->ResetHard(false); + gMFP->ResetHard(false); + gPEDEC->ResetHard(false); + gPluto->ResetHard(false); + gPPI->ResetHard(false); + gSPC->ResetHard(false); }