82 lines
1.3 KiB
Markdown
82 lines
1.3 KiB
Markdown
|
|
# 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
|
|
```
|
|
|