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:
parent
d2b077c573
commit
ffd298218c
@ -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];
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user