--- nono/vm/goldfish_pic.h 2026/04/29 17:05:25 1.1.1.1 +++ nono/vm/goldfish_pic.h 2026/04/29 17:05:29 1.1.1.2 @@ -17,23 +17,19 @@ class GFPICDevice : public InterruptDevi using inherited = InterruptDevice; friend class Virt68kInterrupt; - static const uint32 STATUS = 0x00; - static const uint32 PENDING = 0x04; // was NUMBER - static const uint32 CLEAR_ALL = 0x08; // was DISABLE_ALL - static const uint32 DISABLE = 0x0c; - static const uint32 ENABLE = 0x10; + static const uint32 STATUS = 0x00U >> 2; + static const uint32 PENDING = 0x04U >> 2; // was NUMBER + static const uint32 CLEAR_ALL = 0x08U >> 2; // was DISABLE_ALL + static const uint32 DISABLE = 0x0cU >> 2; + static const uint32 ENABLE = 0x10U >> 2; public: - GFPICDevice(int id_); + explicit GFPICDevice(uint id_); ~GFPICDevice() override; bool Init() override; void ResetHard(bool poweron) override; - busdata Read32(uint32 addr) override; - busdata Write32(uint32 addr, uint32 data) override; - busdata Peek8(uint32 addr) override; - busdata InterruptAcknowledge(int lv) override; // IRQ の登録。子デバイスが呼ぶ。irq は 1-32。 @@ -44,6 +40,16 @@ class GFPICDevice : public InterruptDevi int MonitorUpdateDetail(TextScreen& screen, int y, int lv); protected: + // BusIO インタフェース + static const uint32 NPORT = 0x1000 >> 2; + busdata ReadPort(uint32 offset); + busdata WritePort(uint32 offset, uint32 data); + busdata PeekPort(uint32 offset); + + private: + uint32 GetSTATUS() const; + uint32 GetPENDING() const; + void ChangeInterrupt() override; InterruptDevice *interrupt {};