1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-09-28 09:54:49 +00:00

Tie off initial values; fix FIQ usage.

This commit is contained in:
Thomas Harte 2024-04-07 21:58:16 -04:00
parent d2b077c573
commit ffd298218c

View File

@ -319,15 +319,15 @@ struct InputOutputController {
// Interrupts. // Interrupts.
case 0x18: case 0x18:
irq_a_.mask = byte(bus_value); irq_a_.mask = byte(bus_value);
// logger.error().append("IRQ A mask set to %02x", byte(bus_value)); logger.error().append("IRQ A mask set to %02x", byte(bus_value));
break; break;
case 0x28: case 0x28:
irq_b_.mask = byte(bus_value); irq_b_.mask = byte(bus_value);
// logger.error().append("IRQ B mask set to %02x", byte(bus_value)); logger.error().append("IRQ B mask set to %02x", byte(bus_value));
break; break;
case 0x38: case 0x38:
fiq_.mask = byte(bus_value); fiq_.mask = byte(bus_value);
// logger.error().append("FIQ mask set to %02x", byte(bus_value)); logger.error().append("FIQ mask set to %02x", byte(bus_value));
break; break;
// Counters. // Counters.
@ -430,10 +430,6 @@ struct InputOutputController {
// logger.error().append("TODO: exteded external podule space"); // logger.error().append("TODO: exteded external podule space");
// return true; // return true;
// //
// case 0x331'0000 & AddressMask:
// logger.error().append("TODO: 1772 / disk write");
// return true;
//
// case 0x336'0000 & AddressMask: // case 0x336'0000 & AddressMask:
// logger.error().append("TODO: podule interrupt request"); // logger.error().append("TODO: podule interrupt request");
// return true; // return true;
@ -475,28 +471,22 @@ struct InputOutputController {
const auto &keyboard() const { return keyboard_; } const auto &keyboard() const { return keyboard_; }
void update_interrupts() { void update_interrupts() {
if(sound_.interrupt()) { const auto set = [&](Interrupt &target, uint8_t flag, bool set) {
irq_b_.set(IRQB::SoundBufferPointerUsed); if(set) {
} else { target.set(flag);
irq_b_.clear(IRQB::SoundBufferPointerUsed); } else {
} target.clear(flag);
}
};
set(irq_b_, IRQB::SoundBufferPointerUsed, sound_.interrupt());
set(fiq_, FIQ::FloppyDiscInterrupt, floppy_.get_interrupt_request_line());
set(fiq_, FIQ::FloppyDiscData, floppy_.get_data_request_line());
if(video_.interrupt()) { if(video_.interrupt()) {
irq_a_.set(IRQA::VerticalFlyback); irq_a_.set(IRQA::VerticalFlyback);
} }
// if(floppy_.get_interrupt_request_line()) {
// irq_b_.set(FIQ::FloppyDiscInterrupt);
// } else {
// irq_b_.clear(FIQ::FloppyDiscInterrupt);
// }
//
// if(floppy_.get_data_request_line()) {
// irq_b_.set(FIQ::FloppyDiscData);
// } else {
// irq_b_.clear(FIQ::FloppyDiscData);
// }
observer_.update_interrupts(); observer_.update_interrupts();
} }
@ -515,7 +505,7 @@ private:
// IRQA, IRQB and FIQ states. // IRQA, IRQB and FIQ states.
struct Interrupt { struct Interrupt {
uint8_t status, mask; uint8_t status = 0x00, mask = 0x00;
uint8_t request() const { uint8_t request() const {
return status & mask; return status & mask;
} }
@ -531,9 +521,9 @@ private:
// The IOCs four counters. // The IOCs four counters.
struct Counter { struct Counter {
uint16_t value; uint16_t value = 0;
uint16_t reload; uint16_t reload = 0;
uint16_t output; uint16_t output = 0;
}; };
Counter counters_[4]; Counter counters_[4];