git @ Cat's Eye Technologies linapple / master inc / 6821.h
master

Tree @master (Download .tar.gz)

6821.h @masterraw · history · blame

// 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;
};