The blog entries show how Plain VM/Assembly evolved, but they can be a bit confusing to read stand-alone. So, I need to clean-up the content here a bit. The exercise now is to write up Plain Assembly Reference, Plain VM Reference and make sure the two documents are synchronized and consistent. I had a working core before, but need to change it to adapt to my latest ideas. Looking at my first register only VM I admit that is much simpler, but I am really keen to get instructions like Transaction and syntax supporting distributed processing and parallelism going. Below is an updated VM Instruction table – the text is fresh from a libreOffice document that will be uploaded later.
Assign | Assign an expression to a variable. Execute a pre-parsed expression tree and store the resulting value in a variable. Expression can either be written as an algebraic math expression or a list of simple operations separated with ; |
Call |
Call a function. Call creates a return entry on the stack and will continue with next instruction as End of the function is reached. Call can in contrary to raise also capture event’s raised by Raise. |
Decode | Unpack a bit field |
Encode | Pack a bit Field. |
End |
End a conditional block of code by jumping to a pre-calculated ix on the stack. For (as an example) will insert it’s own ix on the stack, End will jump to that ix and remove it from the stack. |
Exit | Exit the VM. Will terminate the current module. |
For |
For Loop. Will create a stack return entry causing the next End instruction to jump back to the loop start. |
If | If statement to allow if..elsif..else with expressions. |
Nop |
No Operation. Basically not needed except usefully for testing basic performance. |
On |
On capture event’s raised by a Call or State. It contains parameters defined by the Event definition in a Func. |
Raise |
Call an event with parameters, but without creating a return entry. Raise remove the stack, but will leave the stack entry point. The next end will return to the last “call”. |
Switch | Switch to a selected value. |
State |
Will wait until a listed event is raised before it process that event and continue. |
While | Loop while an expression is true. |
Transaction |
Lock access to listed “interface” variables. Transaction will wait until access is granted or we time out. Transaction can also “spawn” in which case the transaction block is treated as a function in a different, local module that execute in parallel. See instruction Spawn. |
Update |
Update complete a Transaction by either Commit or Rollback changes. |
Commit |
Can be called separate inside a Transaction block to commit part of the changes made. |
Rollback |
Can be called separate inside a Transaction block to reset changes made. Changes are reset to the last commit. |
Spawn |
Spawn call a function located in a different module. This function is executed in parallel and the returning event is inserted into our event queue. |