# vc4 **virtual computer 4** (see [vc3](https://git.sfja.dk/sfja/vc4) and [vc2](https://github.com/simonFJ20/vc2)) a computer-emulator with custom architecture, and some stuff to write and run software on it. ## goals - [ ] assemble program on host - [ ] run program from host - [ ] run program from emulated disk - [ ] output to monitor device - [ ] input from keyboard device - [ ] command shell - [ ] read/write files on emulated disk - [ ] host/vm file share - [ ] run programs from emulated disk - [ ] edit text files - [ ] assemble program on vm ## isa - 16-bit instruction set - big endian ### registers ``` r0 accumulator / return value r1 r2 r3 r4 r5 r6 sp stack pointer bp base pointer ``` ### instructions ``` r = register i16 = 16-bit immediate m = memory [r/i16] nop hlt jmp r/i16 jnz r/i16 cmp r/i16 mov r/i16/m r mov r r/i16/m movb m r movb r m in r/i16 out r/i16 r/i16 call r/i16 ret lit r/i16 int i8 or r r/i16 xor r r/i16 and r r/i16 shl r r/i16 rshl r r/i16 shr r r/i16 rshr r r/i16 add r r/i16 sub r r/i16 rsub r r/i16 mul r r/i16 imul r r/i16 div r r/i16 idiv r r/i16 mod r r/i16 rmod r r/i16 ```