summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lc3.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/lc3.c b/lc3.c
index c23dcce..854a3ec 100644
--- a/lc3.c
+++ b/lc3.c
@@ -25,6 +25,8 @@ enum Register
REGISTER_R7,
REGISTER_PC,
REGISTER_PSR,
+ REGISTER_SSR,
+ REGISTER_USR,
REGISTER_COUNT,
};
@@ -53,6 +55,7 @@ enum Flag
FLAG_POS = 1u << 0,
FLAG_ZRO = 1u << 1,
FLAG_NEG = 1u << 2,
+ FLAG_SUP = 1u << 15,
};
enum Trap
@@ -67,7 +70,10 @@ enum Trap
enum Memory
{
- MEMORY_START = 0x3000,
+ MEMORY_TRAP = 0x0000,
+ MEMORY_INT = 0x00ff,
+ MEMORY_SUP = 0x0200,
+ MEMORY_USER = 0x3000,
MEMORY_KBSR = 0xfe00,
MEMORY_KBDR = 0xfe02,
MEMORY_DSR = 0xfe04,
@@ -104,7 +110,7 @@ void restore_terminal()
die(r, "restore_terminal tcsetattr()");
}
-void handle_interrupt(int signal)
+void handle_signal(int signal)
{
(void) signal;
restore_terminal();
@@ -442,10 +448,10 @@ int main(int argc, char ** argv)
{
die(read_image(argv[i]), "read_image");
}
- signal(SIGINT, handle_interrupt);
+ signal(SIGINT, handle_signal);
atexit(restore_terminal);
prepare_terminal();
- registers[REGISTER_PC] = MEMORY_START;
+ registers[REGISTER_PC] = MEMORY_USER;
for (;;)
{
const uint16_t instruction = read_memory(registers[REGISTER_PC]++);