Python custom virtual machine.
- Registers
- Basic registers
- Flags
- Zero flag
- Stack
- LIFO
- Max size
- Stackframes
- Heap
- Max size
- Instructions
-
add reg, val
-
add reg, reg
-
sub reg, val
-
sub reg, reg
-
cmp reg, val
-
cmp reg, reg
-
mov reg, val
-
mov reg, reg
-
push val
-
push reg
-
pop reg
-
jmp addr
-
jmp label
-
call func
-
exit
-
- Preprocessor
- Strip labels from code
- Assemble code
- From file
- From stdin
- Parser
- Disassemble code
- From file
- From stdin
- Invert parser
- Exec instructions
- From file
- From stdin
# Get sources
git clone ...
cd Soft-Machine
# Use a virtual environment
python3 -m venv my-venv
source my-venv/bin/activate
# Install via pip
pip install -e .
soft-machine exec -s "0x31034567;0x30001000;0x33100000;0x02110000;0x03000000;0x41120000;0x80000000"
soft-machine assemble --stdin "mov a, 11; mov b, 0x45; exit"
soft-machine disassemble --file code.bin
Stress test on push/pop:
time softmachine stresstest -n 100000