From 0f3f1a047b0dd646af5ba258fe9e7602c76e11ee Mon Sep 17 00:00:00 2001 From: Erick Date: Fri, 4 Feb 2022 12:22:53 +0100 Subject: [PATCH] add lea register (load effective address) --- tyvm.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tyvm.c b/tyvm.c index 8b738c5..7b641d7 100644 --- a/tyvm.c +++ b/tyvm.c @@ -51,7 +51,7 @@ uint16_t memory[UINT16_MAX]; uint16_t reg[RG_COUNT]; /* Creating instruction set opcodes */ -enum opcodes { // [name, value] +enum opcodes { // [name, 8-bit value] OP_BR = 0, // branch, 0000 OP_ADD, // add, 0001 OP_LD, // load, 0010 @@ -66,7 +66,7 @@ enum opcodes { // [name, value] OP_STI, // indirect store, 1011 OP_JMP, // jump, 1100 OP_RES, // reserved opcode, - OP_LEA, // load effective address, + OP_LEA, // load effective address, 1110 OP_TRAP, // execute trap, }; @@ -245,7 +245,13 @@ int main(int argc, const char* argv[]) { break; case OP_LEA: - //{LEA}; + uint16_t dr = (instr >> 9) & 0x7; + uint16_t PCoffset9 = sign_extend(instr & 0x1FF, 9); + + reg[dr] = reg[RG_PC] + PCoffset9; + + update_flags(dr); + break; case OP_TRAP: //{TRAP};