// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) #pragma once #include "common/bitfield.h" #include "common/fifo_queue.h" #include "types.h" #include #include class StateWrapper; class Controller; class MemoryCard; class SIO { public: SIO(); ~SIO(); void Initialize(); void Shutdown(); void Reset(); bool DoState(StateWrapper& sw); u32 ReadRegister(u32 offset); void WriteRegister(u32 offset, u32 value); private: union SIO_CTRL { u16 bits; BitField TXEN; BitField DTROUTPUT; BitField RXEN; BitField TXOUTPUT; BitField ACK; BitField RTSOUTPUT; BitField RESET; BitField RXIMODE; BitField TXINTEN; BitField RXINTEN; BitField ACKINTEN; }; union SIO_STAT { u32 bits; BitField TXRDY; BitField RXFIFONEMPTY; BitField TXDONE; BitField RXPARITY; BitField RXFIFOOVERRUN; BitField RXBADSTOPBIT; BitField RXINPUTLEVEL; BitField DSRINPUTLEVEL; BitField CTSINPUTLEVEL; BitField INTR; BitField TMR; }; union SIO_MODE { u16 bits; BitField reload_factor; BitField character_length; BitField parity_enable; BitField parity_type; BitField stop_bit_length; }; void SoftReset(); SIO_CTRL m_SIO_CTRL = {}; SIO_STAT m_SIO_STAT = {}; SIO_MODE m_SIO_MODE = {}; u16 m_SIO_BAUD = 0; }; extern SIO g_sio;