--- nono/vm/spc.h 2026/04/29 17:04:45 1.1.1.7 +++ nono/vm/spc.h 2026/04/29 17:04:56 1.1.1.10 @@ -8,6 +8,7 @@ #include "device.h" #include "fixedqueue.h" +#include "monitor.h" #include "scheduler.h" #include "scsidev.h" #include "vm.h" @@ -153,9 +154,11 @@ class SPCDevice : public SCSIHostDevice bool Init() override; void ResetHard() override; - void ResetSoft() override; - void MonitorUpdate(TextScreen&) override; + // 接続中のデバイスを ID 順に並べたリストを返す (UI ステータスパネル用) + const std::vector& GetConnectedDevices() const { + return connected_devices; + } // SCSIBus コールバック @@ -168,15 +171,18 @@ class SPCDevice : public SCSIHostDevice // 情報転送フェーズで REQ を立てた (イニシエータのみ通知される) void TransferReqCB() override; + // BusIO インタフェース + // (内蔵 ROM からのアクセス用に特別に public にしてある) + uint64 Write(uint32 offset, uint32 data); + protected: // BusIO インタフェース static const uint32 NPORT = 16; - uint64 Read(uint32 addr); - uint64 Write(uint32 addr, uint32 data); - uint64 Peek(uint32 addr); + uint64 Read(uint32 offset); + uint64 Peek(uint32 offset); private: - void Reset(); + DECLARE_MONITOR_CALLBACK(MonitorUpdate); void MonitorReg(TextScreen&, int x, int y, uint32 reg, const char * const *names); @@ -270,8 +276,10 @@ class SPCDevice : public SCSIHostDevice std::vector connected_devices {}; // イベント - Event event {}; - Event event_tc {}; + Event event { this }; + Event event_tc { this }; + + Monitor monitor { this }; }; extern std::unique_ptr gSPC;