--- nono/vm/pio.h 2026/04/29 17:05:17 1.1.1.11 +++ nono/vm/pio.h 2026/04/29 17:05:29 1.1.1.13 @@ -28,18 +28,21 @@ class i8255Device : public IODevice using inherited = IODevice; public: - i8255Device(int objid_); - virtual ~i8255Device() override; + explicit i8255Device(uint objid_); + ~i8255Device() override; void ResetHard(bool poweron) override; protected: + // BusIO インタフェース + bool PokePort(uint32 offset, uint32 data); + // コントロールポートの読み出し uint32 ReadCtrl() const { return ctrl; } // コントロールポートへの書き込み void WriteCtrl(uint32); // PortC への個別書き込み - virtual void SetPC(int, int) = 0; + virtual void SetPC(uint, uint) = 0; // 共通部分 int MonitorUpdateCommon(TextScreen& screen, int y); @@ -71,11 +74,11 @@ class PPIDevice : public i8255Device { using inherited = i8255Device; - static const int baseaddr = 0xe9a000; + static const uint32 baseaddr = 0xe9a000; public: PPIDevice(); - virtual ~PPIDevice() override; + ~PPIDevice() override; // ADPCM のサンプリングレートの 2bit を取得する uint8 GetADPCMRate() const { return adpcm_rate; } @@ -83,12 +86,12 @@ class PPIDevice : public i8255Device protected: // BusIO インタフェース static const uint32 NPORT = 4; - uint64 Read(uint32 offset); - uint64 Write(uint32 offset, uint32 data); - uint64 Peek(uint32 offset); + busdata ReadPort(uint32 offset); + busdata WritePort(uint32 offset, uint32 data); + busdata PeekPort(uint32 offset); private: - void SetPC(int, int) override; + void SetPC(uint, uint) override; bool pan_left {}; bool pan_right {}; @@ -104,7 +107,7 @@ class PIO0Device : public i8255Device public: PIO0Device(); - virtual ~PIO0Device() override; + ~PIO0Device() override; bool Init() override; void ResetHard(bool poweron) override; @@ -119,15 +122,15 @@ class PIO0Device : public i8255Device protected: // BusIO インタフェース static const uint32 NPORT = 4; - uint64 Read(uint32 offset); - uint64 Write(uint32 offset, uint32 data); - uint64 Peek(uint32 offset); + busdata ReadPort(uint32 offset); + busdata WritePort(uint32 offset, uint32 data); + busdata PeekPort(uint32 offset); private: uint32 GetPA() const; uint32 GetPB() const; uint32 GetPC() const; - void SetPC(int, int) override; + void SetPC(uint, uint) override; void ChangeInterrupt(); DECLARE_MONITOR_CALLBACK(MonitorUpdate); @@ -151,27 +154,25 @@ class PIO1Device : public i8255Device using inherited = i8255Device; public: PIO1Device(); - virtual ~PIO1Device() override; + ~PIO1Device() override; bool Init() override; void ResetHard(bool poweron) override; - // BusIO インタフェース - // (内蔵 ROM からのアクセス用に特別に public にしてある) - uint64 Write(uint32 offset, uint32 data); - // PIO0 の下請け void MonitorUpdatePIO1(TextScreen& screen, int y); - protected: // BusIO インタフェース + // (内蔵 ROM からのアクセス用に特別に public にしてある) + busdata WritePort(uint32 offset, uint32 data); + protected: static const uint32 NPORT = 4; - uint64 Read(uint32 offset); - uint64 Peek(uint32 offset); + busdata ReadPort(uint32 offset); + busdata PeekPort(uint32 offset); private: uint32 GetPC() const; - void SetPC(int, int) override; + void SetPC(uint, uint) override; DECLARE_MONITOR_CALLBACK(MonitorUpdate);