summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2021-07-10 14:47:14 +0200
committerAki <please@ignore.pl>2021-07-10 14:47:14 +0200
commit7c9b380f475387e43b385a8b67cd6fcbdd2e6ded (patch)
tree92334ba2b21f7499dc044b0582711f85ce0da620
parent7ad24735886bd94c90da027280ca69ca7748df52 (diff)
downloadlc3-7c9b380f475387e43b385a8b67cd6fcbdd2e6ded.zip
lc3-7c9b380f475387e43b385a8b67cd6fcbdd2e6ded.tar.gz
lc3-7c9b380f475387e43b385a8b67cd6fcbdd2e6ded.tar.bz2
Removed C-implemented traps
-rw-r--r--lc3.c76
1 files changed, 1 insertions, 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: