From 583b4154ca6783ba03ddaace51f698a14efc3733 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 10 Jul 2021 15:13:20 +0200 Subject: Fixed interrupt/exception and related initialization --- lc3.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lc3.c b/lc3.c index ca511cf..7a0c4ec 100644 --- a/lc3.c +++ b/lc3.c @@ -127,7 +127,7 @@ uint16_t sign_extend(uint16_t value, const int bits) void fire(const uint16_t interrupt, const uint16_t priority) { const uint16_t current_priority = (registers[REGISTER_PSR] >> 8) & 0x07; - if (current_priority >= priority) + if (0x00 != interrupt && 0x01 != interrupt && current_priority > priority) { return; } @@ -321,7 +321,7 @@ void step(const uint16_t instruction) { if (FLAG_SUP & registers[REGISTER_PSR]) { - fire(0, (registers[REGISTER_PSR] >> 8) & 0x07); + fire(0x00, (registers[REGISTER_PSR] >> 8) & 0x07); } else { @@ -421,6 +421,7 @@ int main(int argc, char ** argv) atexit(restore_terminal); prepare_terminal(); registers[REGISTER_PC] = MEMORY_USER; + registers[REGISTER_PSR] |= FLAG_SUP; for (;;) { const uint16_t instruction = read_memory(registers[REGISTER_PC]++); -- cgit v1.1