1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-02-19 23:29:05 +00:00

Adds a dummy interrupt control register.

This commit is contained in:
Thomas Harte 2021-07-22 16:09:32 -04:00
parent 3ee1fc544f
commit 56b62a5e49
3 changed files with 17 additions and 4 deletions

View File

@ -59,6 +59,7 @@ template <typename PortHandlerT, Personality personality> class MOS6526:
template <int port> void set_port_output(); template <int port> void set_port_output();
template <int port> uint8_t get_port_input(); template <int port> uint8_t get_port_input();
void update_interrupts();
}; };
} }

View File

@ -27,6 +27,10 @@ template <int port> uint8_t MOS6526<BusHandlerT, personality>::get_port_input()
return (input & ~registers_.data_direction[port]) | (registers_.output[port] & registers_.data_direction[port]); return (input & ~registers_.data_direction[port]) | (registers_.output[port] & registers_.data_direction[port]);
} }
template <typename BusHandlerT, Personality personality>
void MOS6526<BusHandlerT, personality>::update_interrupts() {
}
template <typename BusHandlerT, Personality personality> template <typename BusHandlerT, Personality personality>
void MOS6526<BusHandlerT, personality>::write(int address, uint8_t value) { void MOS6526<BusHandlerT, personality>::write(int address, uint8_t value) {
address &= 0xf; address &= 0xf;
@ -51,6 +55,12 @@ void MOS6526<BusHandlerT, personality>::write(int address, uint8_t value) {
set_port_output<1>(); set_port_output<1>();
break; break;
// Interrupt control.
case 13:
registers_.interrupt_control_ = value;
update_interrupts();
break;
default: default:
printf("Unhandled 6526 write: %02x to %d\n", value, address); printf("Unhandled 6526 write: %02x to %d\n", value, address);
assert(false); assert(false);
@ -62,12 +72,13 @@ template <typename BusHandlerT, Personality personality>
uint8_t MOS6526<BusHandlerT, personality>::read(int address) { uint8_t MOS6526<BusHandlerT, personality>::read(int address) {
address &= 0xf; address &= 0xf;
switch(address) { switch(address) {
case 0: return get_port_input<0>(); case 0: return get_port_input<0>();
case 1: return get_port_input<1>(); case 1: return get_port_input<1>();
case 13: return registers_.interrupt_control_;
case 2: case 3: case 2: case 3:
return registers_.data_direction[address - 2]; return registers_.data_direction[address - 2];
break;
default: default:
printf("Unhandled 6526 read from %d\n", address); printf("Unhandled 6526 read from %d\n", address);

View File

@ -17,6 +17,7 @@ struct MOS6526Storage {
struct Registers { struct Registers {
uint8_t output[2] = {0, 0}; uint8_t output[2] = {0, 0};
uint8_t data_direction[2] = {0, 0}; uint8_t data_direction[2] = {0, 0};
uint8_t interrupt_control_ = 0;
} registers_; } registers_;
}; };