Merge branch 'master' of https://github.com/MasterQ32/DasOS
This commit is contained in:
commit
8c23fa6b8f
3 changed files with 42 additions and 22 deletions
|
@ -1,4 +1,4 @@
|
||||||
# SuperVM
|
# SuperVM
|
||||||
|
|
||||||
SuperVM is a stack machine with a simple, but flexible command
|
SuperVM is a stack machine with a simple, but flexible command
|
||||||
set.
|
set.
|
||||||
|
@ -219,23 +219,24 @@ This allows a configuration such that the right hand side operand
|
||||||
is taken by the argument of the instruction instead of beeing popped
|
is taken by the argument of the instruction instead of beeing popped
|
||||||
from the stack.
|
from the stack.
|
||||||
|
|
||||||
| cmdinfo | Operation |
|
| cmdinfo | Operation | Forumla |
|
||||||
|---------|-----------------------------|
|
|---------|-----------------------------|-----------------|
|
||||||
| 0 | Addition |
|
| 0 | Addition | input1 + input0 |
|
||||||
| 1 | Subtraction |
|
| 1 | Subtraction | input1 - input0 |
|
||||||
| 2 | Multiplication |
|
| 2 | Multiplication | input1 * input0 |
|
||||||
| 3 | Division |
|
| 3 | Division | input1 / input0 |
|
||||||
| 4 | Euclidean Division / Modulo |
|
| 4 | Euclidean Division / Modulo | input1 % input0 |
|
||||||
| 5 | Bitwise Logic And |
|
| 5 | Bitwise Logic And | input1 ∧ input0 |
|
||||||
| 6 | Bitwise Logic Or |
|
| 6 | Bitwise Logic Or | input1 ∨ input0 |
|
||||||
| 7 | Bitwise Logic Xor |
|
| 7 | Bitwise Logic Xor | input1 ⊻ input0 |
|
||||||
| 8 | Bitwise Logic Not |
|
| 8 | Bitwise Logic Not | ˜input0 |
|
||||||
| 9 | Rotating Bit Shift Left |
|
| 9 | Rotating Bit Shift Left | input1 ⊲ input0 |
|
||||||
| 10 | Rotating Bit Shift Right |
|
| 10 | Rotating Bit Shift Right | input1 ⊳ input0 |
|
||||||
| 11 | Arithmetic Bit Shift Left |
|
| 11 | Arithmetic Bit Shift Left | input1 ≺ input0 |
|
||||||
| 12 | Arithmetic Bit Shift Right |
|
| 12 | Arithmetic Bit Shift Right | input1 ≻ input0 |
|
||||||
| 13 | Logic Bit Shift Left |
|
| 13 | Logic Bit Shift Left | input1 « input0 |
|
||||||
| 14 | Logic Bit Shift Right |
|
| 14 | Logic Bit Shift Right | input1 » input0 |
|
||||||
|
| 15 | Negation | -input0 |
|
||||||
|
|
||||||
#### SpGet, SpSet
|
#### SpGet, SpSet
|
||||||
These commands modify the stack pointer directly.
|
These commands modify the stack pointer directly.
|
||||||
|
|
|
@ -175,4 +175,4 @@ int main(int argc, const char **argv)
|
||||||
dump_memory(p);
|
dump_memory(p);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,12 +9,31 @@ static void cmd_copy(CommandInfo *info)
|
||||||
|
|
||||||
static void cmd_load(Process *p, CommandInfo *info)
|
static void cmd_load(Process *p, CommandInfo *info)
|
||||||
{
|
{
|
||||||
info->output = vm_read_byte(p, info->input0);
|
info->output = 0;
|
||||||
|
switch(info->additional) {
|
||||||
|
case 2:
|
||||||
|
info->output|=(uint32_t)(vm_read_byte(p, info->input0+3))<<24;
|
||||||
|
info->output|=(uint32_t)(vm_read_byte(p, info->input0+2))<<16;
|
||||||
|
case 1:
|
||||||
|
info->output|=(uint32_t)(vm_read_byte(p, info->input0+1))<< 8;
|
||||||
|
case 0:
|
||||||
|
info->output|=(uint32_t)(vm_read_byte(p, info->input0+0))<< 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmd_store(Process *p, CommandInfo *info)
|
static void cmd_store(Process *p, CommandInfo *info)
|
||||||
{
|
{
|
||||||
vm_write_byte(p, info->input0, info->input1);
|
switch(info->additional) {
|
||||||
|
case 2:
|
||||||
|
vm_write_byte(p, info->input0+3, info->input1>>24);
|
||||||
|
vm_write_byte(p, info->input0+2, info->input1>>16);
|
||||||
|
case 1:
|
||||||
|
vm_write_byte(p, info->input0+1, info->input1>>8);
|
||||||
|
case 0:
|
||||||
|
vm_write_byte(p, info->input0, info->input1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
info->output = info->input1;
|
info->output = info->input1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -242,4 +261,4 @@ void vm_write_byte(Process *process, uint32_t address, uint8_t value)
|
||||||
vm_assert(page < process->mmap.length, "Out of memory.");
|
vm_assert(page < process->mmap.length, "Out of memory.");
|
||||||
|
|
||||||
process->mmap.pages[page][index] = value;
|
process->mmap.pages[page][index] = value;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue