diff --git a/src/registers.h b/src/registers.h index be4dde5..6d95be2 100644 --- a/src/registers.h +++ b/src/registers.h @@ -9,14 +9,14 @@ enum mmr { /* Initializing 10 registers of which: 8 general purpose, 1 program counter, 1 conditional */ enum registers { - RG_000 = 0, - RG_001, - RG_010, - RG_011, - RG_100, - RG_101, - RG_110, - RG_111, + R0 = 0, + R1, + R2, + R3, + R4, + R5, + R6, + R7, RG_PC, // program counter RG_COND, // condition flag RG_COUNT @@ -24,32 +24,32 @@ enum registers { /* Creating instruction set opcodes */ enum opcodes { // [name, 8-bit value] - OP_BR = 0, // branch, 0000 - OP_ADD, // add, 0001 - OP_LD, // load, 0010 - OP_ST, // store, 0011 - OP_JSR, // jump register, 0100 - OP_AND, // bitwise and, 0101 - OP_LDR, // load register, 0110 - OP_STR, // store register, 0111 - OP_RTI, // unused opcode - OP_NOT, // bitwise not, 1001 - OP_LDI, // indirect load, 1010 - OP_STI, // indirect store, 1011 - OP_JMP, // jump, 1100 - OP_RES, // reserved opcode, - OP_LEA, // load effective address, 1110 - OP_TRAP, // execute trap, 1111 + BR = 0, // branch, 0000 + ADD, // add, 0001 + LD, // load, 0010 + ST, // store, 0011 + JSR, // jump register, 0100 + AND, // bitwise and, 0101 + LDR, // load register, 0110 + STR, // store register, 0111 + RTI, // unused opcode + NOT, // bitwise not, 1001 + LDI, // indirect load, 1010 + STI, // indirect store, 1011 + JMP, // jump, 1100 + RES, // reserved opcode, + LEA, // load effective address, 1110 + TRAP, // execute trap, 1111 }; /* Trap codes used for OP_TRAP */ enum trapcodes { - TRAP_GETC = 0x20, // get charcter from keyboard - TRAP_OUT = 0x21, // output a character - TRAP_PUTS = 0x22, // output a word string - TRAP_IN = 0x23, // get charcter from keyboard and echo to terminal - TRAP_PUTSP = 0x24, // output a byte string - TRAP_HALT = 0x25 // halt program + GETC = 0x20, // get charcter from keyboard + OUTP = 0x21, // output a character + PUTS = 0x22, // output a word string + INP = 0x23, // get charcter from keyboard and echo to terminal + PUTSP = 0x24, // output a byte string + HALT = 0x25 // halt program }; /* Creating condition flags */ diff --git a/src/tyvm.c b/src/tyvm.c index 3abd6ea..a03dc90 100644 --- a/src/tyvm.c +++ b/src/tyvm.c @@ -1,10 +1,10 @@ /* TYVM is a virtual machine based on LC-3 architecture for educational purposes. Copyright (c) 2022 Erick Ahmed - Open-source software distributed under MIT license + Open-source software distributed under GNU GPL v.3 license */ -//#define __UNIX // used to modify code whether compiling on a Unix-based OS or a Windows machine +#define __UNIX // used to modify code whether compiling on a Unix-based OS or a Windows machine #include "includes.h" #include "registers.h" @@ -190,14 +190,14 @@ int main(int argc, const char* argv[]) { uint16_t* ch; switch (op) { - case OP_BR: + case BR: cond = (instr >> 9) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); if(cond & reg[RG_COND]) reg[RG_PC] += PCoffset9; break; - case OP_ADD: + case ADD: dr = (instr >> 9) & 0x7; sr1 = (instr >> 6) & 0x7; imm_flag = (instr >> 5) & 0x1; @@ -213,7 +213,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_LD: + case LD: dr = (instr >> 9) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); @@ -222,7 +222,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_ST: + case ST: sr = (instr >> 6) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); // 9-bit value that indicates where to load the address when added to RG_PC @@ -231,7 +231,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_JSR: + case JSR: PCoffset11 = sign_extend(instr & 0x1FF, 11); jsr_flag = (instr >> 11) & 0x1; BaseR_jsrr = (instr >> 6) & 0x7; // JSRR only ecoding @@ -240,7 +240,7 @@ int main(int argc, const char* argv[]) { else reg[RG_PC] += PCoffset11; // JSR break; - case OP_AND: + case AND: dr = (instr >> 9) & 0x7; sr1 = (instr >> 6) & 0x7; imm_flag = (instr >> 5) & 0x1; @@ -256,7 +256,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_LDR: + case LDR: dr = (instr >> 9) & 0x7; BaseR = (instr >> 6) & 0x7; offset6 = sign_extend(instr & 0x3FF, 6); @@ -266,7 +266,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_STR: + case STR: sr = (instr >> 6) & 0x7; BaseR = (instr >> 6) & 0x7; offset6 = sign_extend(instr & 0x1FF, 6); @@ -276,7 +276,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_NOT: + case NOT: dr = (instr >> 9) & 0x7; // destination register sr = (instr >> 6) & 0x7; // source register @@ -285,7 +285,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_LDI: + case LDI: dr = (instr >> 9) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); @@ -294,7 +294,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_STI: + case STI: sr = (instr >> 6) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); // 9-bit value that indicates where to load the address when added to RG_PC @@ -303,7 +303,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_JMP: + case JMP: BaseR = (instr >> 6) & 0x7; reg[RG_PC] = reg[BaseR]; @@ -311,7 +311,7 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_LEA: + case LEA: dr = (instr >> 9) & 0x7; PCoffset9 = sign_extend(instr & 0x1FF, 9); @@ -320,17 +320,17 @@ int main(int argc, const char* argv[]) { update_flags(dr); break; - case OP_TRAP: + case TRAP: switch(instr & 0xFF) { - case TRAP_GETC: - reg[RG_000] = (uint16_t)getchar(); + case GETC: + reg[R0] = (uint16_t)getchar(); break; - case TRAP_OUT: - putc((char)reg[RG_000], stdout); + case OUTP: + putc((char)reg[R0], stdout); fflush(stdout); break; - case TRAP_PUTS: - stringPnt = memory + reg[RG_000]; + case PUTS: + stringPnt = memory + reg[R0]; while (*c) { putc((char)*c, stdout); @@ -339,18 +339,18 @@ int main(int argc, const char* argv[]) { fflush(stdout); break; - case TRAP_IN: + case INP: printf("Enter a character: "); char c = getchar(); putc(c, stdout); fflush(stdout); - reg[RG_000] = (uint16_t)c; - update_flags(RG_000); + reg[R0] = (uint16_t)c; + update_flags(R0); break; - case TRAP_PUTSP: - ch = memory + reg[RG_000]; + case PUTSP: + ch = memory + reg[R0]; while (*ch) { char char1 = (*ch) & 0xFF; putc(char1, stdout); @@ -361,7 +361,7 @@ int main(int argc, const char* argv[]) { fflush(stdout); break; - case TRAP_HALT: + case HALT: puts("HALT"); fflush(stdout); running = FALSE; @@ -372,8 +372,8 @@ int main(int argc, const char* argv[]) { break; } break; - case OP_RES: // reserved - case OP_RTI: // unused + case RES: // reserved + case RTI: // unused default: abort(); break;