summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lc3.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/lc3.c b/lc3.c
index 759361a..49cbd5d 100644
--- a/lc3.c
+++ b/lc3.c
@@ -24,7 +24,7 @@ enum Register
REGISTER_R6,
REGISTER_R7,
REGISTER_PC,
- REGISTER_COND,
+ REGISTER_PSR,
REGISTER_COUNT,
};
@@ -167,17 +167,18 @@ void write_memory(const uint16_t address, const uint16_t value)
void update_cond(const uint16_t reg)
{
+ registers[REGISTER_PSR] &= 0xfff8;
if (registers[reg] == 0)
{
- registers[REGISTER_COND] = FLAG_ZRO;
+ registers[REGISTER_PSR] |= FLAG_ZRO;
}
else if (registers[reg] >> 15)
{
- registers[REGISTER_COND] = FLAG_NEG;
+ registers[REGISTER_PSR] |= FLAG_NEG;
}
else
{
- registers[REGISTER_COND] = FLAG_POS;
+ registers[REGISTER_PSR] |= FLAG_POS;
}
}
@@ -241,7 +242,7 @@ void step(const uint16_t instruction)
{
const uint16_t offset = sign_extend(instruction & 0x1ff, 9);
const uint16_t flag = (instruction >> 9) & 0x07;
- if (flag & registers[REGISTER_COND])
+ if (flag & registers[REGISTER_PSR])
{
registers[REGISTER_PC] += offset;
}