diff options
Diffstat (limited to 'lc3.c')
-rw-r--r-- | lc3.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -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]++); |