The cool, flexible and distributed VM.
~Jaco Geldenhuys circa 1776
HypeVM is a project that aims at creating an implementation of a virtual machine for the HypeVM specification (described later in this document) with the added features of allowing the virtual machine to be distributed in terms of its various resources mentioned here.
It aims to create a fully functional general purpose virtual machine architecture that can be used by anyone for anything.
The architecture of the HypeVM is as follows:
There are general purpose registers which can be used for use and then there are ones which have an affect on things other than the state of memory.
These are the general purpose registers. This means that their value has no meaning to the state of the machine other than the machine occuying a certain value in these registers.
Each of these registers is prefixed with the size (in bytes) they are. The following format is used {size}s{name}
to name registers.
bsA
- General purpose register byte-sizeA
bsB
- General purpose register byte-sizeB
bsC
- General purpose register byte-sizeC
bsD
- General purpose register byte-sizeD
ssA
- General purpose register word-sizeA
ssB
- General purpose register word-sizeB
ssC
- General purpose register word-sizeC
ssD
- General purpose register word-sizeD
These are the registers of which changing their value has an effect on the machine in someway or another, other than just changing the state of a register as with the general purpose registers.
These registers are useful for determining information regarding the I/O address space used for system devices. They are listed below.
TODO: Finish description of these
ioStart
ioEnd
These registers are useful for determining information regarding the memory of the virtual machine. They are listed below.
TODO: Finish description of these
memSize
These registers are uesful for determining information regarding the state of the virtual machine. They are listed below.
TODO: Finish description of these
machineStatus
- Name: halted
- Size:
signed_byte
- Register ID:
3
- Description: Holds a value that is checked before each machine cycle begins. If the value is
0
then the machine cycle goes ahead, however is the value is not zero then the machine will halt. Notes: The value of this register may soon have more meaning added to it per value hence we recommend that you use the value1
to halt the machine as it will probably become the value required for such a task and the other non-zero values will have different meanings.
Devices can be attatched to the machine to add extra (or much needed) functionality. A dedicated region of memory (an address space) is dedicated to all of the devices. The beginning and end addresses are stored in the special purpose registers ioStart
and ioEnd
.
TODO: Add an I/O address space, probably before the code space.
TODO
The instruction set of the HypeMachine is something that will be undergoing many changes throughout its lifetime but for now we can list some of the instructions that will definately be in it.
halt
- Name: Halt
- Opcode:
0
- Description: This instruction halts the machine resulting in it ending execution. It does this bye setting the
machineStatus
register to a non-zero value (1
in this implementation). - Arguments: None
- TODO: Add more instructions
TODO: Add more instructions.