diff --git a/cpu.cpp b/cpu.cpp index 38c358b..46aca36 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -15,9 +15,6 @@ cpu::cpu(bus *const b, uint32_t *const event) : b(b), event(event) { - for(int level=0; level<8; level++) - queued_interrupts.insert({ level, { } }); - reset(); } @@ -25,6 +22,14 @@ cpu::~cpu() { } +void cpu::init_interrupt_queue() +{ + queued_interrupts.clear(); + + for(int level=0; level<8; level++) + queued_interrupts.insert({ level, { } }); +} + void cpu::emulation_start() { instruction_count = 0; @@ -83,6 +88,7 @@ void cpu::reset() psw = 7 << 5; fpsr = 0; runMode = false; + init_interrupt_queue(); } uint16_t cpu::getRegister(const int nr, const bool prev_mode) const @@ -1372,6 +1378,7 @@ bool cpu::misc_operations(const uint16_t instr) case 0b0000000000000101: // RESET b->init(); + init_interrupt_queue(); return true; } diff --git a/cpu.h b/cpu.h index 42ab259..83e98cf 100644 --- a/cpu.h +++ b/cpu.h @@ -85,6 +85,7 @@ public: void pushStack(const uint16_t v); uint16_t popStack(); + void init_interrupt_queue(); void queue_interrupt(const uint8_t level, const uint8_t vector); void busError();