--- nono/vm/scc.h 2026/04/29 17:04:28 1.1 +++ nono/vm/scc.h 2026/04/29 17:04:59 1.1.1.7 @@ -1,6 +1,7 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once @@ -8,28 +9,33 @@ #include "device.h" #include "upd7201.h" -class SCCDevice - : public uPD7201Device +class SCCDevice : public uPD7201Device { - typedef uPD7201Device inherited; + using inherited = uPD7201Device; private: static const int baseaddr = 0xe98000; public: SCCDevice(); - virtual ~SCCDevice(); + virtual ~SCCDevice() override; - virtual void ResetHard(); + // XXX 親の同名メソッドと名前分けたほうがいいか + uint8 ReadCtrl(struct SIO::channel *chan) override; + void WriteCtrl(struct SIO::channel *chan, uint32 data) override; - virtual uint64 Read8(uint32 addr); - virtual uint64 Read16(uint32 addr); - virtual uint64 Write8(uint32 addr, uint32 data); - virtual uint64 Write16(uint32 addr, uint32 data); - virtual uint64 Peek8(uint32 addr); + // 割り込みアクノリッジ + int InterruptAcknowledge(); - // XXX 親の同名メソッドと名前分けたほうがいいか - virtual uint8 ReadCtrl(struct SIO::channel *chan); - virtual void WriteCtrl(struct SIO::channel *chan, uint32 data); + protected: + // BusIO インタフェース + static const uint32 NPORT = 4; + uint64 Read(uint32 offset); + uint64 Write(uint32 offset, uint32 data); + uint64 Peek(uint32 offset); - virtual void Interrupt(); + private: + void Interrupt() override; + void WriteCR5(struct SIO::channel *chan, uint32 data) override; }; + +extern std::unique_ptr gSCC;