diff --git a/InstructionSets/ARM/Registers.hpp b/InstructionSets/ARM/Registers.hpp index 85ed909dd..8d579601c 100644 --- a/InstructionSets/ARM/Registers.hpp +++ b/InstructionSets/ARM/Registers.hpp @@ -147,11 +147,6 @@ struct Registers { /// Updates the program counter, interupt flags and link register if applicable to begin @c exception. template void exception() { - interrupt_flags_ |= ConditionCode::IRQDisable; - if constexpr (type == Exception::Reset || type == Exception::FIQ) { - interrupt_flags_ |= ConditionCode::FIQDisable; - } - switch(type) { case Exception::IRQ: { const auto r14 = pc_status(8); @@ -170,6 +165,11 @@ struct Registers { } break; } + interrupt_flags_ |= ConditionCode::IRQDisable; + if constexpr (type == Exception::Reset || type == Exception::FIQ) { + interrupt_flags_ |= ConditionCode::FIQDisable; + } + set_pc(uint32_t(type)); } diff --git a/Machines/Acorn/Archimedes/Archimedes.cpp b/Machines/Acorn/Archimedes/Archimedes.cpp index aa0d4e2c6..e4bc5d613 100644 --- a/Machines/Acorn/Archimedes/Archimedes.cpp +++ b/Machines/Acorn/Archimedes/Archimedes.cpp @@ -389,7 +389,7 @@ struct Interrupts { // IRQ A. case 0x3200010 & AddressMask: value = irq_a_.status; - logger.error().append("IRQ A status is %02x", value); +// logger.error().append("IRQ A status is %02x", value); return true; case 0x3200014 & AddressMask: value = irq_a_.request(); @@ -403,7 +403,7 @@ struct Interrupts { // IRQ B. case 0x3200020 & AddressMask: value = irq_b_.status; - logger.error().append("IRQ B status is %02x", value); +// logger.error().append("IRQ B status is %02x", value); return true; case 0x3200024 & AddressMask: value = irq_b_.request(); @@ -434,7 +434,7 @@ struct Interrupts { case 0x3200060 & AddressMask: case 0x3200070 & AddressMask: value = counters_[(target >> 4) - 0x4].output & 0xff; - logger.error().append("%02x: Counter %d low is %02x", target, (target >> 4) - 0x4, value); +// logger.error().append("%02x: Counter %d low is %02x", target, (target >> 4) - 0x4, value); return true; case 0x3200044 & AddressMask: @@ -442,7 +442,7 @@ struct Interrupts { case 0x3200064 & AddressMask: case 0x3200074 & AddressMask: value = counters_[(target >> 4) - 0x4].output >> 8; - logger.error().append("%02x: Counter %d high is %02x", target, (target >> 4) - 0x4, value); +// logger.error().append("%02x: Counter %d high is %02x", target, (target >> 4) - 0x4, value); return true; } @@ -1041,7 +1041,7 @@ class ConcreteMachine: // printf(""); // } // log |= (executor_.pc() > 0x02000000 && executor_.pc() < 0x02000078); - log |= executor_.pc() == 0x0381201c; +// log |= executor_.pc() == 0x0381201c; // log = executor_.pc() == 0x0381202c; // log |= (executor_.pc() > 0x03801000); // log &= executor_.pc() != 0x03801a0c;