1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-27 01:31:42 +00:00

Added some extra logging while trying to determine what's going on; added interrupt clearing for the control lines.

This commit is contained in:
Thomas Harte 2016-06-26 21:30:06 -04:00
parent 2a2c3da5d4
commit 843d1fdca7
2 changed files with 18 additions and 3 deletions

View File

@ -58,11 +58,17 @@ template <class T> class MOS6522 {
case 0x0:
_registers.output[1] = value;
static_cast<T *>(this)->set_port_output(Port::B, value, _registers.data_direction[1]); // TODO: handshake
_registers.interrupt_flags &= ~(InterruptFlag::CB1ActiveEdge | InterruptFlag::CB2ActiveEdge);
reevaluate_interrupts();
break;
case 0xf:
case 0x1:
_registers.output[0] = value;
static_cast<T *>(this)->set_port_output(Port::A, value, _registers.data_direction[0]); // TODO: handshake
_registers.interrupt_flags &= ~(InterruptFlag::CA1ActiveEdge | InterruptFlag::CA2ActiveEdge);
reevaluate_interrupts();
break;
// // No handshake, so write directly
// _registers.output[0] = value;
@ -119,7 +125,7 @@ template <class T> class MOS6522 {
else
_registers.interrupt_enable &= ~value;
reevaluate_interrupts();
printf("Interrupt mask -> %02x\n", _registers.interrupt_enable);
printf("[%p] Interrupt mask -> %02x\n", this, _registers.interrupt_enable);
break;
}
}
@ -131,9 +137,15 @@ template <class T> class MOS6522 {
// printf("6522 %p: %d\n", this, address);
switch(address)
{
case 0x0: return get_port_input(Port::B, _registers.data_direction[1], _registers.output[1]);
case 0x0:
_registers.interrupt_flags &= ~(InterruptFlag::CB1ActiveEdge | InterruptFlag::CB2ActiveEdge);
reevaluate_interrupts();
return get_port_input(Port::B, _registers.data_direction[1], _registers.output[1]);
case 0xf: // TODO: handshake, latching
case 0x1: return get_port_input(Port::A, _registers.data_direction[0], _registers.output[0]);
case 0x1:
_registers.interrupt_flags &= ~(InterruptFlag::CA1ActiveEdge | InterruptFlag::CA2ActiveEdge);
reevaluate_interrupts();
return get_port_input(Port::A, _registers.data_direction[0], _registers.output[0]);
case 0x2: return _registers.data_direction[1];
case 0x3: return _registers.data_direction[0];

View File

@ -19,6 +19,9 @@ Machine::Machine() :
_keyboardVIA.set_delegate(this);
_tape.set_delegate(this);
set_reset_line(true);
printf("User port: %p\n", &_userPortVIA);
printf("Keyboard: %p\n", &_keyboardVIA);
}
Machine::~Machine()