--- nono/vm/sysctlr.h 2026/04/29 17:05:10 1.1.1.6 +++ nono/vm/sysctlr.h 2026/04/29 17:05:21 1.1.1.8 @@ -5,13 +5,20 @@ // // -// LUNA88K のシステムコントローラのような何か +// LUNA-88K のシステムコントローラのような何か // #pragma once #include "interrupt.h" +class LanceDevice; +class MPU88xx0Device; +class NMIDevice; +class SIODevice; +class SPCDevice; +class SysClkDevice; + class SysCtlrDevice : public InterruptDevice { using inherited = InterruptDevice; @@ -19,9 +26,11 @@ class SysCtlrDevice : public InterruptDe // 割り込みマップ 76543210 static const uint32 IntmapNMI = 0x80000000; static const uint32 IntmapSysClk = 0x08000000; + static const uint32 IntmapXPHigh = 0x04000000; static const uint32 IntmapSIO = 0x00800000; static const uint32 IntmapLance = 0x00080000; static const uint32 IntmapSPC = 0x00008000; + static const uint32 IntmapXPLow = 0x00000800; static const uint32 IntmapSoft3 = 0x00000080; static const uint32 IntmapSoft2 = 0x00000040; static const uint32 IntmapSoft1 = 0x00000020; @@ -31,6 +40,7 @@ class SysCtlrDevice : public InterruptDe SysCtlrDevice(); virtual ~SysCtlrDevice() override; + bool Init() override; void ResetHard(bool poweron) override; uint64 Read32(uint32 addr) override; @@ -42,7 +52,7 @@ class SysCtlrDevice : public InterruptDe private: // デバイスから Intmap 値を引く - uint32 GetIntmap(Device *source) const override; + uint32 GetIntmap(const Device *source) const override; // 割り込み状態を更新 void ChangeInterrupt() override; @@ -65,8 +75,15 @@ class SysCtlrDevice : public InterruptDe int ipl; } cpu[4] {}; + LanceDevice *lance {}; + MPU88xx0Device *mpu88xx0 {}; + NMIDevice *nmi {}; + SIODevice *sio {}; + SPCDevice *spc {}; + SysClkDevice *sysclk {}; + Monitor monitor { this }; }; -// グローバルインスタンスはここではなく gInterrupt を使用する -// (LUNA88K ではこれがメインの割り込みコントローラなので) +// 参照はここではなく GetInterruptDevice() を使用する +// (LUNA-88K ではこれがメインの割り込みコントローラなので)