Taylor Bockman
7 years ago
commit
80b801753e
6 changed files with 185 additions and 0 deletions
@ -0,0 +1,43 @@
|
||||
# Prerequisites |
||||
*.d |
||||
|
||||
# Compiled Object files |
||||
*.slo |
||||
*.lo |
||||
*.o |
||||
*.obj |
||||
|
||||
# Precompiled Headers |
||||
*.gch |
||||
*.pch |
||||
|
||||
# Compiled Dynamic libraries |
||||
*.so |
||||
*.dylib |
||||
*.dll |
||||
|
||||
# Fortran module files |
||||
*.mod |
||||
*.smod |
||||
|
||||
# Compiled Static libraries |
||||
*.lai |
||||
*.la |
||||
*.a |
||||
*.lib |
||||
|
||||
# Executables |
||||
*.exe |
||||
*.out |
||||
*.app |
||||
|
||||
# CMake |
||||
CMakeCache.txt |
||||
CMakeFiles |
||||
CMakeScripts |
||||
Testing |
||||
Makefile |
||||
cmake_install.cmake |
||||
install_manifest.txt |
||||
compile_commands.json |
||||
CTestTestfile.cmake |
@ -0,0 +1,25 @@
|
||||
cmake_minimum_required (VERSION 3.8) |
||||
|
||||
set (CMAKE_CXX_STANDARD 11) |
||||
|
||||
set (CMAKE_C_COMPILER "clang") |
||||
set (CMAKE_CXX_COMPILER "clang++") |
||||
set (CMAKE_C_COMPILER_ID "Clang") |
||||
set (CMAKE_CXX_COMPILER_ID "Clang") |
||||
set (CMAKE_VERBOSE_MAKEFILE ON) |
||||
|
||||
project (uvm) |
||||
|
||||
set (uvm_VERSION_MAJOR 0) |
||||
set (uvm_VERSION_MINOR 1) |
||||
set (uvm_VERSION_PATCH 0) |
||||
|
||||
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) |
||||
|
||||
file(GLOB uvm "include/*") |
||||
file(GLOB uvm "src/*") |
||||
|
||||
add_executable(${PROJECT_NAME} ${uvm_SRC} ${uvm_INCLUDE}) |
||||
target_link_libraries( |
||||
${PROJECT_NAME} |
||||
) |
@ -0,0 +1,43 @@
|
||||
# uVM - Micro Virtual Machine |
||||
|
||||
uVM is simply an experiment ins developing a working virtual machine with it's own bytecode. |
||||
|
||||
## Requirements |
||||
|
||||
* CMake version 3.8 or higher |
||||
* Clang and Clang++ |
||||
|
||||
## Building |
||||
|
||||
1. `git clone` the repository |
||||
2. `cmake .` |
||||
3. `make` |
||||
|
||||
## Architecture |
||||
|
||||
uVM is a _stack machine_. That is, it gets all of it's arguments from the stack, and returns the result |
||||
of the computation back to the stack when it's done. |
||||
|
||||
There are some exceptions to this. In particular the current version of uvm supports a single variable, |
||||
called `0`, that can be written to using `xpop0` where x is the datatype of the thing getting taken off |
||||
the stack. |
||||
|
||||
Additionally `0` can be placed on the top of the stack using `xpush0`. |
||||
|
||||
## uVM Instruction Set |
||||
|
||||
uVM possesses the standard issue instruction set you might expect in a simple VM: |
||||
|
||||
| Instruction | Opcode | Action | |
||||
| ------------ | ------ | ------------------------------------------------------------------------------ | |
||||
| ipush _X_ | 0 | Pushes _integer_ X onto the stack | |
||||
| ipush0 | 1 | Pushes the _integer_ in `0` onto the stack | |
||||
| ipop0 | 2 | Pops the top _integer_ of the stack off and into variable 0 | |
||||
| icmp | 3 | Compares the top two items on the stack together and returns a boolean result | |
||||
| iadd | 4 | Adds the top two _integer_ arguments of the stack together | |
||||
| isub | 5 | Subtracts the top two _integer_ arguments of the stack from each other | |
||||
| jmp _LABEL_ | 6 | Unconditional jump to _label_ | |
||||
| jc _LABEL_ | 7 | Jump if the top of the stack is a 1 | |
||||
|
||||
|
||||
As I learn more about VM development this instruction set will likely become much more robust. |
@ -0,0 +1,25 @@
|
||||
// This file is part of UVM.
|
||||
//
|
||||
// UVM is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// UVM is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with UVM. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
#ifndef DECODER_H_ |
||||
#define DECODER_H_ |
||||
|
||||
|
||||
|
||||
|
||||
#endif // DECODER_H_
|
@ -0,0 +1,33 @@
|
||||
// This file is part of UVM.
|
||||
//
|
||||
// UVM is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// UVM is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with UVM. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
#ifndef OPCODES_H_ |
||||
#define OPCODES_H_ |
||||
|
||||
// Instructions
|
||||
|
||||
#define IPUSH 0x0 |
||||
#define IPUSH0 0x1 |
||||
#define IPOP0 0x2 |
||||
#define CMP 0x3 |
||||
#define IADD 0x4 |
||||
#define ISUB 0x5 |
||||
#define JMP 0x6 |
||||
#define JC 0x7 |
||||
|
||||
#endif // OPCODES_H_
|
@ -0,0 +1,16 @@
|
||||
// This file is part of UVM.
|
||||
//
|
||||
// UVM is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// UVM is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with UVM. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
//
|
Loading…
Reference in new issue