|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
# uVM - Micro Virtual Machine |
|
|
|
|
|
|
|
|
|
uVM is simply an experiment ins developing a working virtual machine with it's own bytecode. |
|
|
|
|
uVM is simply an experiment in developing a working virtual machine with it's own bytecode. |
|
|
|
|
|
|
|
|
|
## Requirements |
|
|
|
|
|
|
|
|
@ -13,6 +13,21 @@ uVM is simply an experiment ins developing a working virtual machine with it's o
|
|
|
|
|
2. `cmake .` |
|
|
|
|
3. `make` |
|
|
|
|
|
|
|
|
|
## Usage |
|
|
|
|
|
|
|
|
|
`uvm [-v] [-h] -f <your_file_of_bytecode>.uc` |
|
|
|
|
|
|
|
|
|
* `-v`: Enable verbose logging mode |
|
|
|
|
* `-h`: Show usage |
|
|
|
|
* `-f <file_name>.uc`: Load the uvm bytecode file for processing |
|
|
|
|
|
|
|
|
|
## Testing |
|
|
|
|
|
|
|
|
|
CMake tests are used to confirm a handful of sample programs will run successfully in the VM |
|
|
|
|
|
|
|
|
|
1. `cmake .` |
|
|
|
|
2. `make test` |
|
|
|
|
|
|
|
|
|
## Architecture |
|
|
|
|
|
|
|
|
|
uVM is a _stack machine_. That is, it gets all of it's arguments from the stack, and returns the result |
|
|
|
@ -41,3 +56,12 @@ uVM possesses the standard issue instruction set you might expect in a simple VM
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
As I learn more about VM development this instruction set will likely become much more robust. |
|
|
|
|
|
|
|
|
|
## TODO |
|
|
|
|
|
|
|
|
|
- [] Tests for good paths for all instructions |
|
|
|
|
- [] Tests for uncompilable code |
|
|
|
|
- [] Logging out current stack position, etc when verbose mode is enabled |
|
|
|
|
- [] If verbose mode isn't enabled it shows the ascii loading while processing |
|
|
|
|
- [] Come up with a way to allow the user to echo to the screen |
|
|
|
|
- [] It would be cool to eventually write a high level language compiler that compiles down to the uvm |
|
|
|
|