44 lines
1.8 KiB
Org Mode
44 lines
1.8 KiB
Org Mode
#+title: Oreo's Virtual Machine (OVM)
|
|
#+author: Aryadev Chavali
|
|
#+date: 2023-10-15
|
|
|
|
A stack based virtual machine in C11, with a dynamic register setup
|
|
which acts as variable space. Deals primarily in bytes, doesn't make
|
|
assertions about typing and is very simple to target.
|
|
* How to build
|
|
Requires =GNU make=, a compliant C11 compiler. Code base has been
|
|
tested against =gcc= and =clang=, but given how the project has been
|
|
written without use of GNU'isms it shouldn't be an issue to compile
|
|
using something like =tcc= or another compiler (look at
|
|
[[file:Makefile::CC=gcc][here]] to change the compiler).
|
|
|
|
To build everything simply run ~make~. This will build:
|
|
+ [[file:lib/inst.c][instruction bytecode system]] which allows one to
|
|
target the VM by writing and reading instruction bytecode
|
|
+ [[file:vm/main.c][VM executable]] which can execute bytecode (your
|
|
=java= executable)
|
|
+ [[file:asm/main.c][Assembler executable]] which can assemble
|
|
compliant assembly code to VM bytecode
|
|
+ [[file:examples/][Assembly examples]] which provide some source code
|
|
examples on common programs one may write. Use this to figure out
|
|
how to write compliant assembly.
|
|
|
|
One may also build each component individually through the
|
|
corresponding recipe:
|
|
+ ~make lib~
|
|
+ ~make vm~
|
|
+ ~make asm~
|
|
+ ~make examples~
|
|
* Instructions to target the virtual machine
|
|
You need to link with the object files for
|
|
[[file:lib/base.c][base.c]], [[file:lib/darr.c][darr.c]] and
|
|
[[file:lib/inst.c][inst.c]] to be able to properly target the OVM.
|
|
The basic idea is to create instructions via ~inst_t~ then using the
|
|
~inst(s)_write_*~ API to generate bytecode (and write to a file).
|
|
|
|
Then to execute the program, the virtual machine interpreter ~ovm.out~
|
|
is used.
|
|
|
|
For clarity, one may build ~lib~ (~make lib~) then use the resulting
|
|
object files to link and create bytecode for the virtual machine.
|