summaryrefslogtreecommitdiff
path: root/lc3.c
diff options
context:
space:
mode:
Diffstat (limited to 'lc3.c')
-rw-r--r--lc3.c5
1 files 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]++);