#pragma once #include "hw/hwreg.h" extern u32 UBC[9]; extern u32 BSC[19]; extern u32 CPG[5]; extern u32 RTC[16]; extern u32 INTC[5]; extern u32 TMU[12]; extern u32 SCI[8]; extern u32 SCIF[10]; class UBCRegisters : public RegisterBank { using super = RegisterBank; public: void init(); }; extern UBCRegisters ubc; class BSCRegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); }; extern BSCRegisters bsc; class CPGRegisters : public RegisterBank { using super = RegisterBank; public: void init(); }; extern CPGRegisters cpg; class RTCRegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); }; extern RTCRegisters rtc; class INTCRegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); void term(); }; extern INTCRegisters intc; class TMURegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); void term(); void serialize(Serializer& ser); void deserialize(Deserializer& deser); }; extern TMURegisters tmu; class SCIRegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); }; extern SCIRegisters sci; class SCIFRegisters : public RegisterBank { using super = RegisterBank; public: void init(); void reset(); void term(); }; extern SCIFRegisters scif; struct SerialPipe { // Serial TX virtual void write(u8 data) = 0; // RX buffer Size virtual int available() = 0; // Serial RX virtual u8 read() = 0; virtual ~SerialPipe() = default; }; void serial_setPipe(SerialPipe *pipe);