From e29f5d92875863426ed7fcdcf7059ca9e8e133e8 Mon Sep 17 00:00:00 2001 From: Aki Date: Wed, 7 Jul 2021 21:52:04 +0200 Subject: Added memory region enums preparing for interrupts --- lc3.c | 14 ++++++++++---- 1 file 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]++); -- cgit v1.1