// Motorola MC6821 PIA typedef void (*mem_write_handler) (void* objFrom, void* objTo, int nAddr, BYTE byData); typedef struct _STWriteHandler { void* objTo; mem_write_handler func; } STWriteHandler; // #define PIA_DDRA 0 #define PIA_CTLA 1 #define PIA_DDRB 2 #define PIA_CTLB 3 class C6821 { public: C6821(); virtual ~C6821(); BYTE GetPB(); BYTE GetPA(); void SetPB(BYTE byData); void SetPA(BYTE byData); void SetCA1( BYTE byData ); void SetCA2( BYTE byData ); void SetCB1( BYTE byData ); void SetCB2( BYTE byData ); void Reset(); BYTE Read( BYTE byRS ); void Write( BYTE byRS, BYTE byData ); void UpdateInterrupts(); void SetListenerA( void *objTo, mem_write_handler func ); void SetListenerB( void *objTo, mem_write_handler func ); void SetListenerCA2( void *objTo, mem_write_handler func ); void SetListenerCB2( void *objTo, mem_write_handler func ); protected: BYTE m_byIA; BYTE m_byCA1; BYTE m_byICA2; BYTE m_byOA; BYTE m_byOCA2; BYTE m_byDDRA; BYTE m_byCTLA; BYTE m_byIRQAState; BYTE m_byIB; BYTE m_byCB1; BYTE m_byICB2; BYTE m_byOB; BYTE m_byOCB2; BYTE m_byDDRB; BYTE m_byCTLB; BYTE m_byIRQBState; STWriteHandler m_stOutA; STWriteHandler m_stOutB; STWriteHandler m_stOutCA2; STWriteHandler m_stOutCB2; STWriteHandler m_stOutIRQA; STWriteHandler m_stOutIRQB; };