mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-11 08:30:55 +00:00
Improved a comment, added independent C[A/B]2 input mode.
This commit is contained in:
parent
6c4fa4ec5d
commit
93c2bb80a2
@ -59,7 +59,7 @@ template <class T> class MOS6522 {
|
||||
_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);
|
||||
_registers.interrupt_flags &= ~(InterruptFlag::CB1ActiveEdge | ((_registers.peripheral_control&0x20) ? 0 : InterruptFlag::CB2ActiveEdge));
|
||||
reevaluate_interrupts();
|
||||
break;
|
||||
case 0xf:
|
||||
@ -67,7 +67,7 @@ template <class T> class MOS6522 {
|
||||
_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);
|
||||
_registers.interrupt_flags &= ~(InterruptFlag::CA1ActiveEdge | ((_registers.peripheral_control&0x02) ? 0 : InterruptFlag::CB2ActiveEdge));
|
||||
reevaluate_interrupts();
|
||||
break;
|
||||
// // No handshake, so write directly
|
||||
@ -207,7 +207,7 @@ template <class T> class MOS6522 {
|
||||
break;
|
||||
|
||||
case Line::Two:
|
||||
// TODO: independence (?)
|
||||
// TODO: output modes, but probably elsewhere?
|
||||
if( value != _control_inputs[port].line_two && // i.e. value has changed ...
|
||||
!(_registers.peripheral_control & (port ? 0x80 : 0x08)) && // ... and line is input ...
|
||||
value == !!(_registers.peripheral_control & (port ? 0x40 : 0x04)) // ... and it's either high or low, as required
|
||||
|
@ -52,7 +52,7 @@ class SerialPortVIA: public MOS::MOS6522<SerialPortVIA>, public MOS::MOS6522IRQD
|
||||
case ::Commodore::Serial::Line::Clock: _portB = (_portB & ~0x04) | (value ? 0 : 0x04); break;
|
||||
case ::Commodore::Serial::Line::Attention:
|
||||
_portB = (_portB & ~0x80) | (value ? 0 : 0x80);
|
||||
set_control_line_input(Port::B, Line::Two, !value); // from active low to active high
|
||||
set_control_line_input(Port::B, Line::Two, !value); // truth here is active low; the 6522 takes true to be high
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user