--- nono/vm/vm_luna.cpp 2026/04/29 17:04:36 1.1.1.2 +++ nono/vm/vm_luna.cpp 2026/04/29 17:04:45 1.1.1.4 @@ -14,6 +14,7 @@ #include "crtc2.h" #include "ethernet.h" #include "fuserom.h" +#include "interrupt.h" #include "lance.h" #include "lcd.h" #include "lunakbd.h" @@ -159,8 +160,9 @@ VM_LUNA::VM_LUNA() // デバイス (順序に注意) // BusErrDevice は親コンストラクタで作成済み。 + gMPU.reset(new MPU680x0Device(0x41000000)); // required by Scheduler gScheduler.reset(new Scheduler()); // required by * - gMPU.reset(new MPU680x0Device(0x41000000)); + gInterrupt.reset(new LunaInterrupt()); gRAM.reset(new RAMDevice()); gEthernet.reset(new BusIO_W()); // required by PROM if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) { @@ -172,7 +174,7 @@ VM_LUNA::VM_LUNA() gPIO0.reset(new BusIO_B()); gPIO1.reset(new BusIO_B()); gSIO.reset(new BusIO_BB()); - sysclk.reset(new BusIO_B()); + gSysClk.reset(new BusIO_B()); gTAS.reset(new BusIO_B()); gZRAM.reset(new ZRAMDevice()); gBitmap.reset(new BitmapDevice()); // required by BT454 @@ -198,7 +200,7 @@ VM_LUNA::VM_LUNA() case PIO1: d = gPIO1.get(); break; case SIO: d = gSIO.get(); break; case TAS: d = gTAS.get(); break; - case SYSCLK: d = sysclk.get(); break; + case SYSCLK: d = gSysClk.get(); break; case ZRAM: d = gZRAM.get(); break; case MROM: d = nulldev.get(); break; case BITMAP: d = gBitmap.get(); break; @@ -238,7 +240,7 @@ VM_LUNA::PowerButton() /*static*/ const uint8 VM_LUNA88K::maptable[256] = { - RAM, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 00 + RAM, RAM, RAM, RAM, NONE, NONE, NONE, NONE, // 00 NONE, NONE, NONE, NONE, NONE, NONE, NONE, NONE, // 08 BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 10 BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, BUSERR, // 18 @@ -285,7 +287,7 @@ VM_LUNA88K::VM_LUNA88K() // MPU クロックの初期値は機種ごとに異なる。単位は MHz gConfig->SetDefault("mpu-clock", 25); // RAM 初期値は MAX にしておく - gConfig->SetDefault("ram-size", 16); + gConfig->SetDefault("ram-size", 64); // SPC の入力クロック (XXX LUNA-I と同じ?) gConfig->Add("!spc-tCLF", 163); // LUNA-II, LUNA88K, LUNA88K2 のクロック割り込みは 100Hz らしい @@ -294,8 +296,9 @@ VM_LUNA88K::VM_LUNA88K() // デバイス (順序に注意) // BusErrDevice は親コンストラクタで作成済み。 + gMPU.reset(new MPU88xx0Device(0x41000000)); // required by Scheduler gScheduler.reset(new Scheduler()); // required by * - gMPU.reset(new MPU88xx0Device(0x41000000)); + gInterrupt.reset(new SysCtlrDevice()); gRAM.reset(new RAMDevice()); if (gMainApp.host_file || gConfig->Find("prom-image").AsString().empty()) { prom.reset(new Luna88kPROMEmuDevice()); @@ -306,7 +309,7 @@ VM_LUNA88K::VM_LUNA88K() gPIO0.reset(new BusIO_BFFF()); gPIO1.reset(new BusIO_BFFF()); gSIO.reset(new BusIO_BFFF()); - sysclk.reset(new SysClkDevice()); + gSysClk.reset(new BusIO_BFFF()); gTAS.reset(new BusIO_BFFF()); gZRAM.reset(new ZRAMDevice()); gBitmap.reset(new BitmapDevice()); // required by BT454 @@ -315,7 +318,6 @@ VM_LUNA88K::VM_LUNA88K() gSPC.reset(new BusIO_BFFF()); gEthernet.reset(new BusIO_WF()); // required by FuseROM fuserom.reset(new BusIO_BFFF()); - gSysCtlr.reset(new SysCtlrDevice()); gCMMU.reset(new CMMUDevice()); nulldev.reset(new NullDevice()); @@ -336,7 +338,7 @@ VM_LUNA88K::VM_LUNA88K() case PIO1: d = gPIO1.get(); break; case SIO: d = gSIO.get(); break; case TAS: d = gTAS.get(); break; - case SYSCLK: d = sysclk.get(); break; + case SYSCLK: d = gSysClk.get(); break; case ZRAM: d = gZRAM.get(); break; case MROM: d = nulldev.get(); break; case BITMAP: d = gBitmap.get(); break; @@ -345,7 +347,7 @@ VM_LUNA88K::VM_LUNA88K() case SCSI: d = gSPC.get(); break; case LANCE: d = gEthernet.get(); break; case FUSE: d = fuserom.get(); break; - case SYSCTL: d = gSysCtlr.get(); break; + case SYSCTL: d = gInterrupt.get(); break; case CMMU: d = gCMMU.get(); break; default: __unreachable();