--- nono/vm/sysport.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/vm/sysport.h 2026/04/29 17:05:18 1.1.1.11 @@ -1,12 +1,25 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt +// + +// +// システムポート // #pragma once #include "device.h" +class CGROMDevice; +class IPLROM1Device; +class Keyboard; +class MainRAMDevice; +class NMIDevice; +class ROMDevice; +class SRAMDevice; + struct SYSPORT { static const int CONTRAST = 0; // $E8E001 @@ -20,26 +33,48 @@ struct SYSPORT int contrast; int rom_wait; // 設定値。ウェイトにする時には +2 する - int ram_wait; + int ram_wait; // 設定値。 + bool key_ctrl; + uint pwoff_count; }; -class SysportDevice - : public IODevice +class SysportDevice : public IODevice { - typedef IODevice inherited; - private: + using inherited = IODevice; + static const uint32 baseaddr = 0xe8e000; public: SysportDevice(); - virtual ~SysportDevice(); + virtual ~SysportDevice() override; + + bool Init() override; + void ResetHard(bool poweron) 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); + // KEYCTRL の状態を取得する + bool GetKeyCtrl() const { + return sysport.key_ctrl; + } + + protected: + // BusIO インタフェース + static const uint32 NPORT = 8; + uint64 Read(uint32 offset); + uint64 Write(uint32 offset, uint32 data); + uint64 Peek(uint32 offset); private: struct SYSPORT sysport {}; + + CGROMDevice *cgrom {}; + IPLROM1Device *iplrom1 {}; + ROMDevice *iplrom2 {}; + Keyboard *keyboard {}; + MainRAMDevice *mainram {}; + NMIDevice *nmi {}; + SRAMDevice *sram {}; }; + +static inline SysportDevice *GetSysportDevice() { + return Object::GetObject(OBJ_SYSPORT); +}