I used a bit of space on If, so I will just quickly draft the rest of the instructions in High Level Assembly syntax and Low Level Assembly syntax assuing I need both – we can discuss the draft and possible changes later.
For loop
for A=1 to 10 step 1 nop end
Low Level Assembly:
start for A=1 to 10 step 1, next end1 nop goto start end1
The for statement is 6 x 16 bit entries + 2 for the goto – 8 entries.
Assign statement
Assign is will parse an expression and create an executable table that compute that expression and store the result in a register run-time. This is expected to bloat a bit.
Assign A = B + C / D
The parser will convert this into an instruction consisting of op-code and an array of math intructions as follows:
op-code R1=C/D A=B+R1
Each table entry will take between 3-4 16 bit entries, meaning that the Assign is 7-9 entries in binary code. I will be more exact on this as I dig up some old code on this.
Low level assembly would be as follows:
Assign R1=C/D, A=B+R1
While loop
A while loop contains an Expression that need an assign statement
While A+B/C > 1 NOP End
Low level Assemby example:
while Assign R1 = A+B/C ifgt R1, 1 next end nop goto while end
Loop statement
Not sure this adds any value, but it is a way to avoid writing goto. We can always remove it later.
High level assembly example
loop nop end
Low Level assembly example
loop1 nop goto loop1
Exit
Exit is a single 16 bit instruction that terminate the module execution.
Raise & Call statements
These are identical in syntax, but with a different op-code since Raise do not create a return and Call does. Using Raise on a module is the same as exit with parameters.
High level assembly example
Raise Error(A1, A+B, C) or Call MyFunc(A1, A+B, C)
Low Level assembly example
The assembly need to use assign to compute expressions into a list of registers that can be used as parameters.
Assign R1=A+B Raise Error (A1, R1, C) or Assign R1=A+B Call Myfunc (A1, R1, C)
Assign will in this case use 1 + 4 =5 entries. The Call/Raise will use 1 op-code + one for instruction to call and 3 for parameters = 5, so they do in effect use 10 x 16 bit entries.
Switch
Looking at the assembly I ditched switch for now!
Return
Single entry instruction.
Encode/Decode
Encode/Decode is intended for bit manipulation. Decode will read a bit and convert it into a 32 bit register, encode will read the register and write the bit Field.
Encode A:4:2 = B Decode B = A:4:2
These are low level instructions using 4 entries each.