summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2021-07-07 21:52:04 +0200
committerAki <please@ignore.pl>2021-07-07 21:52:04 +0200
commite29f5d92875863426ed7fcdcf7059ca9e8e133e8 (patch)
treedf8b6ed14ae98a2a616332b614393df83d0fc66d
parentddeaee1222fc4673a40764b5db3ff6a8523fe095 (diff)
downloadlc3-e29f5d92875863426ed7fcdcf7059ca9e8e133e8.zip
lc3-e29f5d92875863426ed7fcdcf7059ca9e8e133e8.tar.gz
lc3-e29f5d92875863426ed7fcdcf7059ca9e8e133e8.tar.bz2
Added memory region enums preparing for interrupts
-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]++);