README.md 1.5 KB

Fantasy Virtual Machine

A 64-bit stack-based virtual machine and its assembler, created for fun.

Build

FVM includes two parts: the virtual machine and the assembler.

The build the assembler, you need to intall CHICKEN Scheme first. For example, on Arch Linux:

sudo pacman -S chicken

Then install CHICKEN Scheme dependencies:

sudo chicken-install matchable srfi-69 srfi-4

Then run make, which will build both components:

make

If successful, you will see two executables, the virtual machine fvm and the assemblerfvm-as.

Run

After writing the assembly code (examples can be found in the examples directory), first run the assembler:

./fvm-as input.asm bytecode.bin

This will generate the bytecode file output.bin. Then run the virtual machine:

./fvm bytecode.bin

Registers

FVM contains 4 registers:

  • SP: stack pointer
  • BP:base pointer
  • PC:program counter
  • RV: returned value

There are no general-purpose registers; all operations happen on the stack.

Opcodes

All opcodes are single-byte, except for immediate value instructions.

The instructions supported by FVM are as follows:

Register Instructions

sp
0x00
push stack pointer to stack

ssp
0x01
pop a 64-bit number from stack and set stack pointer to it.

bp

sbp

pc

rv

srv

Immediate Number

imm

Memory

ld

ld8

ld16

ld32

st

st8

st16

st32

Stack Operations

dup

pop

swap

over

rot

Call Frame

Pseudo-Opcodes