From 7c9b380f475387e43b385a8b67cd6fcbdd2e6ded Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 10 Jul 2021 14:47:14 +0200 Subject: Removed C-implemented traps --- lc3.c | 76 +------------------------------------------------------------------ 1 file changed, 1 insertion(+), 75 deletions(-) diff --git a/lc3.c b/lc3.c index c509946..ca511cf 100644 --- a/lc3.c +++ b/lc3.c @@ -215,78 +215,6 @@ void update_cond(const uint16_t reg) } } -void trap(const uint16_t instruction) -{ - switch (instruction & 0xff) - { - case TRAP_GETC: - { - uint8_t c; - ssize_t r = read(0, &c, 1); - die(r, "TRAP_GETC read()"); - registers[REGISTER_R0] = (uint16_t) c; - break; - } - case TRAP_OUT: - { - uint8_t c = (uint8_t) registers[REGISTER_R0]; - ssize_t r = write(1, &c, 1); - die(r, "TRAP_OUT write()"); - break; - } - case TRAP_PUTS: - { - uint16_t * w = memory + registers[REGISTER_R0]; - uint8_t c; - while (*w) - { - c = (uint8_t) *w; - ssize_t r = write(1, &c, 1); - die(r, "TRAP_PUTS write()"); - ++w; - } - break; - } - case TRAP_IN: - { - printf("> "); - uint8_t c; - ssize_t r = read(0, &c, 1); - die(r, "TRAP_IN read()"); - r = write(1, &c, 1); - die(r, "TRAP_IN write()"); - registers[REGISTER_R0] = (uint16_t) c; - break; - } - case TRAP_PUTSP: - { - uint16_t * w = memory + registers[REGISTER_R0]; - uint8_t c; - while (*w) - { - c = (uint8_t) (*w & 0xff); - ssize_t r = write(1, &c, 1); - die(r, "TRAP_PUTSP write()"); - c = (uint8_t) (*w >> 8); - if (c) - { - r = write(1, &c, 1); - die(r, "TRAP_PUTSP write()"); - } - } - break; - } - case TRAP_HALT: - { - ssize_t r = write(1, "Halt\n", 5); - die(r, "TRAP_HALT write()"); - exit(EXIT_SUCCESS); - } - default: - exit(EXIT_FAILURE); - } -} - void step(const uint16_t instruction) { const uint16_t opcode = instruction >> 12; @@ -446,9 +374,7 @@ void step(const uint16_t instruction) case OP_TRAP: { registers[REGISTER_R7] = registers[REGISTER_PC]; - registers[REGISTER_PC] = 0 | (instruction & 0xff); - trap(instruction); - registers[REGISTER_PC] = registers[REGISTER_R7]; // TODO: Remove this once traps are implemented. + registers[REGISTER_PC] = read_memory(0 | (instruction & 0xff)); break; } case OP_RES: -- cgit v1.1