scmvm
- a Scheme virtual machine. And assembler.
$ scheme-of-choice # scheme-of-choice means csi
REPL> (load "defs.scm")
REPL> (load "vm.scm")
scmvm
is a very basic virtual machine for experimenting with compilation techniques. It is designed to run in Chicken Scheme (defs.scm is actually a copy of my .csirc), but modifying it to run under other Schemes is trivial.
scmvm
instruction code isn't really a bytecode but a symbolic code - that is, it is made of Lisp atoms. This enables extending the instruction set with great ease.
scmvm
comes with an assembler. In the repository you can find the examples of assembly code (note that it is mostly a symbolic code with labels instead of raw addresses).
(vm:assemble-from-file source-file origin-offset) - assembles a program from source-file and stores it in the VM memory at address origin-offset.
(vm:run) - runs a program until HALT.
(vm:step) - executes a single instruction and stops.
(vm:dump-registers) - examine the content of registers.
(vm:reset) - resets the VM. Resetting scmvm
might not be the thing you think it is.
(vm:load-program vector) - loads a vector with symbolic code into VM's memory.
The README is misleading. The code is, too.