libsidplayfp  1.8.7
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
MOS6526 Class Referenceabstract

#include <mos6526.h>

Inheritance diagram for MOS6526:
component c64cia1 c64cia2

Public Member Functions

virtual void reset ()
 
void setDayOfTimeRate (unsigned int clock)
 

Static Public Member Functions

static const char * credits ()
 

Protected Member Functions

 MOS6526 (EventContext *context)
 
void bTick ()
 
void trigger ()
 
void underflowA ()
 
void underflowB ()
 
void trigger (uint8_t interruptMask)
 
void clear ()
 
void serialPort ()
 
virtual void interrupt (bool state)=0
 
virtual void portA ()
 
virtual void portB ()
 
uint8_t read (uint_least8_t addr)
 
void write (uint_least8_t addr, uint8_t data)
 

Protected Attributes

uint8_t regs [0x10]
 These are all CIA registers.
 
uint8_t icr
 Interrupt control register.
 
uint8_t idr
 Interrupt data register.
 
EventContextevent_context
 Event context.
 
Tod tod
 TOD.
 
bool triggerScheduled
 Have we already scheduled CIA->CPU interrupt transition?
 
uint8_t & pra
 Ports.
 
uint8_t & prb
 Ports.
 
uint8_t & ddra
 Ports.
 
uint8_t & ddrb
 Ports.
 
TimerA timerA
 Timers A and B.
 
TimerB timerB
 Timers A and B.
 
uint8_t sdr_out
 Serial Data Registers.
 
bool sdr_buffered
 Serial Data Registers.
 
int sdr_count
 Serial Data Registers.
 
EventCallback< MOS6526bTickEvent
 Events.
 
EventCallback< MOS6526triggerEvent
 Events.
 

Friends

class TimerA
 
class TimerB
 
class Tod
 

Detailed Description

This class is heavily based on the ciacore/ciatimer source code from VICE. The CIA state machine is lifted as-is. Big thanks to VICE project!

Author
alankila

Constructor & Destructor Documentation

§ MOS6526()

MOS6526::MOS6526 ( EventContext context)
protected

Create a new CIA.

Parameters
contextthe event context

Member Function Documentation

§ bTick()

void MOS6526::bTick ( )
protected

This event exists solely to break the ambiguity of what scheduling on top of PHI1 causes, because there is no ordering between events on same phase. Thus it is scheduled in PHI2 to ensure the b.event() is run once before the value changes.

  • PHI1 a.event() (which calls underFlow())
  • PHI1 b.event()
  • PHI2 bTick.event()
  • PHI1 a.event()
  • PHI1 b.event()

§ clear()

void MOS6526::clear ( )
protected

Clear interrupt state.

§ credits()

static const char* MOS6526::credits ( )
inlinestatic

Get the credits.

Returns
the credits

§ interrupt()

virtual void MOS6526::interrupt ( bool  state)
protectedpure virtual

Signal interrupt.

Parameters
stateinterrupt state

Implemented in c64cia2, and c64cia1.

§ read()

uint8_t MOS6526::read ( uint_least8_t  addr)
protectedvirtual

Read CIA register.

Parameters
addrregister address to read (lowest 4 bits)

Implements component.

§ reset()

void MOS6526::reset ( )
virtual

Reset CIA.

Implements component.

Reimplemented in c64cia1.

§ serialPort()

void MOS6526::serialPort ( )
protected

Handle the serial port.

§ setDayOfTimeRate()

void MOS6526::setDayOfTimeRate ( unsigned int  clock)
inline

Set day-of-time event occurence of rate.

Parameters
clock

§ trigger() [1/2]

void MOS6526::trigger ( )
protected

Signal interrupt to CPU.

§ trigger() [2/2]

void MOS6526::trigger ( uint8_t  interruptMask)
protected

Trigger an interrupt.

Parameters
interruptMaskInterrupt flag number

§ underflowA()

void MOS6526::underflowA ( )
protected

Timer A underflow.

§ underflowB()

void MOS6526::underflowB ( )
protected

Timer B underflow.

§ write()

void MOS6526::write ( uint_least8_t  addr,
uint8_t  data 
)
protectedvirtual

Write CIA register.

Parameters
addrregister address to write (lowest 4 bits)
datavalue to write

Implements component.


The documentation for this class was generated from the following files: