RESET clears the interrupt-queue

This commit is contained in:
folkert van heusden 2022-04-13 17:48:49 +02:00
parent 4bf488212b
commit 841d0d9720
2 changed files with 11 additions and 3 deletions

13
cpu.cpp
View file

@ -15,9 +15,6 @@
cpu::cpu(bus *const b, uint32_t *const event) : b(b), event(event) 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(); 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() void cpu::emulation_start()
{ {
instruction_count = 0; instruction_count = 0;
@ -83,6 +88,7 @@ void cpu::reset()
psw = 7 << 5; psw = 7 << 5;
fpsr = 0; fpsr = 0;
runMode = false; runMode = false;
init_interrupt_queue();
} }
uint16_t cpu::getRegister(const int nr, const bool prev_mode) const 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 case 0b0000000000000101: // RESET
b->init(); b->init();
init_interrupt_queue();
return true; return true;
} }

1
cpu.h
View file

@ -85,6 +85,7 @@ public:
void pushStack(const uint16_t v); void pushStack(const uint16_t v);
uint16_t popStack(); uint16_t popStack();
void init_interrupt_queue();
void queue_interrupt(const uint8_t level, const uint8_t vector); void queue_interrupt(const uint8_t level, const uint8_t vector);
void busError(); void busError();