THIS LIBRARY IS A WORK IN PROGRESS AND IS NOT YET FULLY FUNCTIONAL
API IS SUBJECT TO CHANGE AT ANY TIME
This is an (experimental) Arduino library that runs a PLC virtual machine.
This library was designed to allow you to run PLC logic on most Arduino boards, but you can also run it on a computer as a standalone program or in the browser using WebAssembly.
It is not yet recommended to use this library in a production environment, as it is still in development.
The library allows you to run, update and online-debug PLC programs. The runtime excutes the PLC bytecode reasonably fast.
Updating the running PLC programs is done almost instantly, without the need to recompile the Arduino sketch.
I've written a custom assembly language for the PLC runtime, which is used to compile PLC logic to the PLC bytecode that the runtime understands. This assembly language is the base that allows more complex programming languages to be built on top of it.
The web interface is provided in the `./wasm/web-server` folder of this library.
The PLC runtime runs in a custom stack-based virtual machine that has its' own instruction set and memory model.
The runtime library just barely fits the Arduino Nano's 32KB of flash memory, so it is recommended to use a board with more memory if you plan to use this library in a more advanced project.
To use the provided web interface, you will need LLVM installed on your system to compile the library to WebAssembly (WASM) so it can be run in the browser.
You will also need Node.JS to run the web server that serves the web interface and Python to run the WASM build scripts.
My plan is to have the web interface running as a VS Code extension in the future.#define __RUNTIME_PRODUCTION__
#define PLCRUNTIME_SERIAL_ENABLED
#include <VovkPLCRuntime.h>
VovkPLCRuntime runtime;void setup() {
// ...
runtime.initialize();
// ...
}Run the PLC runtime in the loop function without blocking delays as quickly as possible for smooth operation
void loop() {
// 1. Read inputs
bool input = digitalRead(2);
runtime.setInputBit(0, 0, input); // Set input bit 0.0 to the value of the input
// 2. Run the PLC program
runtime.run();
// 3. Write outputs
bool output = runtime.getOutputBit(0, 0); // Get the value of output bit 0.0
digitalWrite(3, output); // Write the output to the output pin
// 4. Listen for external plc commands (default Serial)
runtime.listen();
}- Read inputs
- Run PLC program
- Write outputs
Control system memory layout starting at address 0 (P are one-time periodic pulse bits, S are square wave bits)
# This is a comment
// This is also a comment
/*
This is the same program written in JavaScript:
let sum = 0;
for (let i = 0; i < 10; i++) {
sum += 10;
}
return sum;
*/
################# Define constant values
const sum = 0 // set "sum" to memory index 0
const index = 1 // set "i" to memory index 1
const incr = 10
################# Set initial values
ptr.const sum
u8.const 0
u8.move
ptr.const index // set u8 at address 1 to value 0
u8.const 0
u8.move
################# Run test for loop
loop:
################# jump to end if "i" >= 10
ptr.const index
u8.load
u8.const 10
u8.cmp_lt
jmp_if_not end
jmp end
################# sum += 10
ptr.const sum
ptr.copy
u8.load
u8.const incr
u8.add
u8.move
################# i++
ptr.const index
ptr.copy
u8.load
u8.const 1
u8.add
u8.move
jmp loop
################# exit the program and return the remaining stack
end:
ptr.const sum
u8.load
// Should return 100 (0x64 in hex)
// Test type conversion and overflow handling
u8.const 130
cvt u8 i8
cvt i8 f32
cvt f32 u8
// Test bit operations
u8.const 0
u8.set 0
u8.set 1
u8.set 2
u8.set 3
u8.set 4
u8.set 5
u8.set 6
u8.set 7
u8.const 255
u8.get 7
// Expected leftover stack after test: [64 82 FF 01]
########## Run recursive function test with a parameter (count down from 5)
u8.const 5
call FunctionTest
u8.drop
// Simple PLC logic test
u8.readBit 10.0
// u8.not
u8.writeBit 20.0
// Previous way of doing the same task
ptr.const 20
ptr.copy
u8.load
ptr.const 10
u8.load
u8.get 0
// u8.not
jump_if_not RESET
u8.set 0
jump END
RESET:
u8.rset 0
END:
u8.move
exit
FunctionTest:
// At the top of the stack should be the input value
// Make a copy to check the if statement for 0
u8.copy
u8.const 0
u8.cmp_eq
ret_if
u8.const 1
u8.sub
call FunctionTest
ret
Compiling the assembly code...
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Using VovkPLCRuntime Library - Author J.Vovk <jozo132@gmail.com> ::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
VovkPLCRuntime - PLCASM Compiler v1.0
Compiling assembly to bytecode ... finished in 0 ms
Labels 5:
loop = 14
end = 58
RESET = 120
END = 121
FunctionTest = 124
Consts 3:
sum <int> = 0 => 0
index <int> = 1 => 1
incr <int> = 10 => 10
Bytecode checksum C6, 140 bytes:
01 00 00 03 00 12 03 01 00 01 03 00 12 03 01 00 01 11 03 03 0A D3 03 E2 00 3A E0 00 3A 01 00 00 4 01 11 03 03 0A 20 03 12 03 01 00 01 14 01 11 03 03 01 20 03 12 03 E0 00 0E 01 00 00 11 03 03 82 10 03 07 10 07 0B 10 0B 03 03 00 48 49 4A 4B 4C 4D 4E 4F 03 FF 47 03 05 E3 00 7C 16 03 58 00 0A 60 00 14 01 00 14 14 01 11 03 01 00 0A 11 03 40 E2 00 78 48 E0 00 79 50 12 03 FF 14 03 03 00 D0 03 E7 03 01 21 03 E3 00 7C E6 FF
Loading program with 140 bytes and checksum 0xC6 ...
Program[140] [01 00 00 03 00 12 03 01 00 01 03 00 12 03 01 00 01 11 03 03 0A D3 03 E2 00 3A E0 00 3A 01 00 00 4 01 11 03 03 0A 20 03 12 03 01 00 01 14 01 11 03 03 01 20 03 12 03 E0 00 0E 01 00 00 11 03 03 82 10 03 07 10 07 0B 10 0B 03 03 00 48 49 4A 4B 4C 4D 4E 4F 03 FF 47 03 05 E3 00 7C 16 03 58 00 0A 60 00 14 01 00 14 14 01 11 03 01 00 0A 11 03 40 E2 00 78 48 E0 00 79 50 12 03 FF 14 03 03 00 D0 03 E7 03 01 21 03 E3 00 7C E6 FF]
#### Program Explanation:
0 [00 00] - 01: PUSH pointer --- [size 3] 010000
3 [00 03] - 03: PUSH u8 -------- [size 2] 0300
5 [00 05] - 12: MOVE ----------- [size 2] 1203
7 [00 07] - 01: PUSH pointer --- [size 3] 010001
10 [00 0A] - 03: PUSH u8 -------- [size 2] 0300
12 [00 0C] - 12: MOVE ----------- [size 2] 1203
14 [00 0E] - 01: PUSH pointer --- [size 3] 010001
17 [00 11] - 11: LOAD ----------- [size 2] 1103
19 [00 13] - 03: PUSH u8 -------- [size 2] 030A
21 [00 15] - D3: CMP_LT --------- [size 2] D303
23 [00 17] - E2: JMP_IF_NOT ----- [size 3] E2003A
26 [00 1A] - E0: JMP ------------ [size 3] E0003A
29 [00 1D] - 01: PUSH pointer --- [size 3] 010000
32 [00 20] - 14: COPY ----------- [size 2] 1401
34 [00 22] - 11: LOAD ----------- [size 2] 1103
36 [00 24] - 03: PUSH u8 -------- [size 2] 030A
38 [00 26] - 20: ADD ------------ [size 2] 2003
40 [00 28] - 12: MOVE ----------- [size 2] 1203
42 [00 2A] - 01: PUSH pointer --- [size 3] 010001
45 [00 2D] - 14: COPY ----------- [size 2] 1401
47 [00 2F] - 11: LOAD ----------- [size 2] 1103
49 [00 31] - 03: PUSH u8 -------- [size 2] 0301
51 [00 33] - 20: ADD ------------ [size 2] 2003
53 [00 35] - 12: MOVE ----------- [size 2] 1203
55 [00 37] - E0: JMP ------------ [size 3] E0000E
58 [00 3A] - 01: PUSH pointer --- [size 3] 010000
61 [00 3D] - 11: LOAD ----------- [size 2] 1103
63 [00 3F] - 03: PUSH u8 -------- [size 2] 0382
65 [00 41] - 10: CVT ------------ [size 3] 100307
68 [00 44] - 10: CVT ------------ [size 3] 10070B
71 [00 47] - 10: CVT ------------ [size 3] 100B03
74 [00 4A] - 03: PUSH u8 -------- [size 2] 0300
76 [00 4C] - 48: SET_X8_B0 ------ [size 1] 48
77 [00 4D] - 49: SET_X8_B1 ------ [size 1] 49
78 [00 4E] - 4A: SET_X8_B2 ------ [size 1] 4A
79 [00 4F] - 4B: SET_X8_B3 ------ [size 1] 4B
80 [00 50] - 4C: SET_X8_B4 ------ [size 1] 4C
81 [00 51] - 4D: SET_X8_B5 ------ [size 1] 4D
82 [00 52] - 4E: SET_X8_B6 ------ [size 1] 4E
83 [00 53] - 4F: SET_X8_B7 ------ [size 1] 4F
84 [00 54] - 03: PUSH u8 -------- [size 2] 03FF
86 [00 56] - 47: GET_X8_B7 ------ [size 1] 47
87 [00 57] - 03: PUSH u8 -------- [size 2] 0305
89 [00 59] - E3: CALL ----------- [size 3] E3007C
92 [00 5C] - 16: DROP ----------- [size 2] 1603
94 [00 5E] - 58: READ_X8_B0 ----- [size 3] 58000A
97 [00 61] - 60: WRITE_X8_B0 ---- [size 3] 600014
100 [00 64] - 01: PUSH pointer --- [size 3] 010014
103 [00 67] - 14: COPY ----------- [size 2] 1401
105 [00 69] - 11: LOAD ----------- [size 2] 1103
107 [00 6B] - 01: PUSH pointer --- [size 3] 01000A
110 [00 6E] - 11: LOAD ----------- [size 2] 1103
112 [00 70] - 40: GET_X8_B0 ------ [size 1] 40
113 [00 71] - E2: JMP_IF_NOT ----- [size 3] E20078
116 [00 74] - 48: SET_X8_B0 ------ [size 1] 48
117 [00 75] - E0: JMP ------------ [size 3] E00079
120 [00 78] - 50: RSET_X8_B0 ----- [size 1] 50
121 [00 79] - 12: MOVE ----------- [size 2] 1203
123 [00 7B] - FF: EXIT ----------- [size 1] FF
124 [00 7C] - 14: COPY ----------- [size 2] 1403
126 [00 7E] - 03: PUSH u8 -------- [size 2] 0300
128 [00 80] - D0: CMP_EQ --------- [size 2] D003
130 [00 82] - E7: RET_IF --------- [size 1] E7
131 [00 83] - 03: PUSH u8 -------- [size 2] 0301
133 [00 85] - 21: SUB ------------ [size 2] 2103
135 [00 87] - E3: CALL ----------- [size 3] E3007C
138 [00 8A] - E6: RET ------------ [size 1] E6
139 [00 8B] - FF: EXIT ----------- [size 1] FF
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 2) [00 00]
Step 3 [00 03]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 3) [00 00 00]
Step 5 [00 05]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 0) []
Step 7 [00 07]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 2) [00 01]
Step 10 [00 0A]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 3) [00 01 00]
Step 12 [00 0C]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 0) []
Step 14 [00 0E]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 2) [00 01]
Step 17 [00 11]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 1) [00]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 2) [00 0A]
Step 21 [00 15]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 1) [01]
Step 23 [00 17]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3A] --------------------- Stack( 0) []
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 3A] --------------------- Stack( 0) []
Step 58 [00 3A]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 2) [00 00]
Step 61 [00 3D]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 1) [00]
Step 63 [00 3F]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 82] ------------------------ Stack( 2) [00 82]
Step 65 [00 41]: Executed in [ 0.000 ms] Opcode[10]: CVT ---------- [10 03 07] --------------------- Stack( 2) [00 82]
Step 68 [00 44]: Executed in [ 0.000 ms] Opcode[10]: CVT ---------- [10 07 0B] --------------------- Stack( 5) [00 C2 FC 00 00]
Step 71 [00 47]: Executed in [ 0.000 ms] Opcode[10]: CVT ---------- [10 0B 03] --------------------- Stack( 2) [00 82]
Step 74 [00 4A]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 3) [00 82 00]
Step 76 [00 4C]: Executed in [ 0.000 ms] Opcode[48]: SET_X8_B0 ---- [48] --------------------------- Stack( 3) [00 82 01]
Step 77 [00 4D]: Executed in [ 0.000 ms] Opcode[49]: SET_X8_B1 ---- [49] --------------------------- Stack( 3) [00 82 03]
Step 78 [00 4E]: Executed in [ 0.000 ms] Opcode[4A]: SET_X8_B2 ---- [4A] --------------------------- Stack( 3) [00 82 07]
Step 79 [00 4F]: Executed in [ 0.000 ms] Opcode[4B]: SET_X8_B3 ---- [4B] --------------------------- Stack( 3) [00 82 0F]
Step 80 [00 50]: Executed in [ 0.000 ms] Opcode[4C]: SET_X8_B4 ---- [4C] --------------------------- Stack( 3) [00 82 1F]
Step 81 [00 51]: Executed in [ 0.000 ms] Opcode[4D]: SET_X8_B5 ---- [4D] --------------------------- Stack( 3) [00 82 3F]
Step 82 [00 52]: Executed in [ 0.000 ms] Opcode[4E]: SET_X8_B6 ---- [4E] --------------------------- Stack( 3) [00 82 7F]
Step 83 [00 53]: Executed in [ 0.000 ms] Opcode[4F]: SET_X8_B7 ---- [4F] --------------------------- Stack( 3) [00 82 FF]
Step 84 [00 54]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 FF] ------------------------ Stack( 4) [00 82 FF FF]
Step 86 [00 56]: Executed in [ 0.000 ms] Opcode[47]: GET_X8_B7 ---- [47] --------------------------- Stack( 4) [00 82 FF 01]
Step 87 [00 57]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 05] ------------------------ Stack( 5) [00 82 FF 01 05]
Step 89 [00 59]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 05]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 05 05]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 05 05 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 05 00]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 05]
Step 131 [00 83]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 6) [00 82 FF 01 05 01]
Step 133 [00 85]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 03] ------------------------ Stack( 5) [00 82 FF 01 04]
Step 135 [00 87]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 04]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 04 04]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 04 04 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 04 00]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 04]
Step 131 [00 83]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 6) [00 82 FF 01 04 01]
Step 133 [00 85]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 03] ------------------------ Stack( 5) [00 82 FF 01 03]
Step 135 [00 87]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 03]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 03 03]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 03 03 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 03 00]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 03]
Step 131 [00 83]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 6) [00 82 FF 01 03 01]
Step 133 [00 85]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 03] ------------------------ Stack( 5) [00 82 FF 01 02]
Step 135 [00 87]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 02]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 02 02]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 02 02 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 02 00]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 02]
Step 131 [00 83]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 6) [00 82 FF 01 02 01]
Step 133 [00 85]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 03] ------------------------ Stack( 5) [00 82 FF 01 01]
Step 135 [00 87]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 01]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 01 01]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 01 01 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 01 00]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 01]
Step 131 [00 83]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 6) [00 82 FF 01 01 01]
Step 133 [00 85]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 03] ------------------------ Stack( 5) [00 82 FF 01 00]
Step 135 [00 87]: Executed in [ 0.000 ms] Opcode[E3]: CALL --------- [E3 00 7C] --------------------- Stack( 5) [00 82 FF 01 00]
Step 124 [00 7C]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 03] ------------------------ Stack( 6) [00 82 FF 01 00 00]
Step 126 [00 7E]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [00 82 FF 01 00 00 00]
Step 128 [00 80]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 03] ------------------------ Stack( 6) [00 82 FF 01 00 01]
Step 130 [00 82]: Executed in [ 0.000 ms] Opcode[E7]: RET_IF ------- [E7] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 138 [00 8A]: Executed in [ 0.000 ms] Opcode[E6]: RET ---------- [E6] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 138 [00 8A]: Executed in [ 0.000 ms] Opcode[E6]: RET ---------- [E6] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 138 [00 8A]: Executed in [ 0.000 ms] Opcode[E6]: RET ---------- [E6] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 138 [00 8A]: Executed in [ 0.000 ms] Opcode[E6]: RET ---------- [E6] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 138 [00 8A]: Executed in [ 0.000 ms] Opcode[E6]: RET ---------- [E6] --------------------------- Stack( 5) [00 82 FF 01 00]
Step 92 [00 5C]: Executed in [ 0.000 ms] Opcode[16]: DROP --------- [16 03] ------------------------ Stack( 4) [00 82 FF 01]
Step 94 [00 5E]: Executed in [ 0.000 ms] Opcode[58]: READ_X8_B0 --- [58 00 0A] --------------------- Stack( 5) [00 82 FF 01 00]
Step 97 [00 61]: Executed in [ 0.000 ms] Opcode[60]: WRITE_X8_B0 -- [60 00 14] --------------------- Stack( 4) [00 82 FF 01]
Step 100 [00 64]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 14] --------------------- Stack( 6) [00 82 FF 01 00 14]
Step 103 [00 67]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [00 82 FF 01 00 14 00 14]
Step 105 [00 69]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [00 82 FF 01 00 14 00]
Step 107 [00 6B]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 0A] --------------------- Stack( 9) [00 82 FF 01 00 14 00 00 0A]
Step 110 [00 6E]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 8) [00 82 FF 01 00 14 00 00]
Step 112 [00 70]: Executed in [ 0.000 ms] Opcode[40]: GET_X8_B0 ---- [40] --------------------------- Stack( 8) [00 82 FF 01 00 14 00 00]
Step 113 [00 71]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 78] --------------------- Stack( 7) [00 82 FF 01 00 14 00]
Step 120 [00 78]: Executed in [ 0.000 ms] Opcode[50]: RSET_X8_B0 --- [50] --------------------------- Stack( 7) [00 82 FF 01 00 14 00]
Step 121 [00 79]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [00 82 FF 01]
Step 123 [00 7B]: Executed in [ 0.000 ms] Opcode[FF]: EXIT --------- [FF] --------------------------- Stack( 4) [00 82 FF 01]
Leftover Stack( 4) [00 82 FF 01]
Time to execute program: 0.000 ms
Debug failed with error: PROGRAM_EXITED
Runtime status: PROGRAM_EXITED
Program download string for Serial/UART/RS232: PD0000008C01000003001203010001030012030100011103030AD303E2003AE0003A01000014011103030A2003120301000114011103030120031203E0000E0100001103038210030710070B100B03030048494A4B4C4D4E4F03FF470305E3007C160358000A6000140100141401110301000A110340E2007848E00079501203FF14030300D003E703012103E3007CE6FFBA
Running VovkPLCRuntime WebAssembly simulation unit test...
----------------------------------------------------------------------
Runtime Unit Test
----------------------------------------------------------------------
RuntimeError Status List:
0: STATUS_SUCCESS
1: UNKNOWN_INSTRUCTION
2: INVALID_INSTRUCTION
3: INVALID_DATA_TYPE
4: STACK_OVERFLOW
5: STACK_UNDERFLOW
6: INVALID_STACK_SIZE
7: EMPTY_STACK
8: CALL_STACK_OVERFLOW
9: CALL_STACK_UNDERFLOW
10: INVALID_MEMORY_ADDRESS
11: INVALID_MEMORY_SIZE
12: UNDEFINED_STATE
13: INVALID_PROGRAM_INDEX
14: PROGRAM_SIZE_EXCEEDED
15: PROGRAM_POINTER_OUT_OF_BOUNDS
16: PROGRAM_EXITED
17: EMPTY_PROGRAM
18: NO_PROGRAM
19: INVALID_CHECKSUM
20: EXECUTION_ERROR
21: EXECUTION_TIMEOUT
22: MEMORY_ACCESS_ERROR
23: PROGRAM_CYCLE_LIMIT_EXCEEDED
----------------------------------------------------------------------
Bytecode Instruction Set:
0x00: NOP (1 byte)
0x01: PUSH pointer (3 bytes)
0x02: PUSH boolean (2 bytes)
0x03: PUSH u8 (2 bytes)
0x04: PUSH u16 (3 bytes)
0x05: PUSH u32 (5 bytes)
0x06: PUSH u64 (9 bytes)
0x07: PUSH i8 (2 bytes)
0x08: PUSH i16 (3 bytes)
0x09: PUSH i32 (5 bytes)
0x0A: PUSH i64 (9 bytes)
0x0B: PUSH f32 (5 bytes)
0x0C: PUSH f64 (9 bytes)
0x10: CVT (3 bytes)
0x11: LOAD (2 bytes)
0x12: MOVE (2 bytes)
0x13: MOVE_COPY (2 bytes)
0x14: COPY (2 bytes)
0x15: SWAP (3 bytes)
0x16: DROP (2 bytes)
0x17: CLEAR (1 byte)
0x20: ADD (2 bytes)
0x21: SUB (2 bytes)
0x22: MUL (2 bytes)
0x23: DIV (2 bytes)
0x24: MOD (2 bytes)
0x25: POW (2 bytes)
0x26: SQRT (2 bytes)
0x27: NEG (2 bytes)
0x28: ABS (2 bytes)
0x29: SIN (2 bytes)
0x2A: COS (2 bytes)
0x40: GET_X8_B0 (1 byte)
0x41: GET_X8_B1 (1 byte)
0x42: GET_X8_B2 (1 byte)
0x43: GET_X8_B3 (1 byte)
0x44: GET_X8_B4 (1 byte)
0x45: GET_X8_B5 (1 byte)
0x46: GET_X8_B6 (1 byte)
0x47: GET_X8_B7 (1 byte)
0x48: SET_X8_B0 (1 byte)
0x49: SET_X8_B1 (1 byte)
0x4A: SET_X8_B2 (1 byte)
0x4B: SET_X8_B3 (1 byte)
0x4C: SET_X8_B4 (1 byte)
0x4D: SET_X8_B5 (1 byte)
0x4E: SET_X8_B6 (1 byte)
0x4F: SET_X8_B7 (1 byte)
0x50: RSET_X8_B0 (1 byte)
0x51: RSET_X8_B1 (1 byte)
0x52: RSET_X8_B2 (1 byte)
0x53: RSET_X8_B3 (1 byte)
0x54: RSET_X8_B4 (1 byte)
0x55: RSET_X8_B5 (1 byte)
0x56: RSET_X8_B6 (1 byte)
0x57: RSET_X8_B7 (1 byte)
0x58: READ_X8_B0 (3 bytes)
0x59: READ_X8_B1 (3 bytes)
0x5A: READ_X8_B2 (3 bytes)
0x5B: READ_X8_B3 (3 bytes)
0x5C: READ_X8_B4 (3 bytes)
0x5D: READ_X8_B5 (3 bytes)
0x5E: READ_X8_B6 (3 bytes)
0x5F: READ_X8_B7 (3 bytes)
0x60: WRITE_X8_B0 (3 bytes)
0x61: WRITE_X8_B1 (3 bytes)
0x62: WRITE_X8_B2 (3 bytes)
0x63: WRITE_X8_B3 (3 bytes)
0x64: WRITE_X8_B4 (3 bytes)
0x65: WRITE_X8_B5 (3 bytes)
0x66: WRITE_X8_B6 (3 bytes)
0x67: WRITE_X8_B7 (3 bytes)
0x68: WRITE_S_X8_B0 (3 bytes)
0x69: WRITE_S_X8_B1 (3 bytes)
0x6A: WRITE_S_X8_B2 (3 bytes)
0x6B: WRITE_S_X8_B3 (3 bytes)
0x6C: WRITE_S_X8_B4 (3 bytes)
0x6D: WRITE_S_X8_B5 (3 bytes)
0x6E: WRITE_S_X8_B6 (3 bytes)
0x6F: WRITE_S_X8_B7 (3 bytes)
0x70: WRITE_R_X8_B0 (3 bytes)
0x71: WRITE_R_X8_B1 (3 bytes)
0x72: WRITE_R_X8_B2 (3 bytes)
0x73: WRITE_R_X8_B3 (3 bytes)
0x74: WRITE_R_X8_B4 (3 bytes)
0x75: WRITE_R_X8_B5 (3 bytes)
0x76: WRITE_R_X8_B6 (3 bytes)
0x77: WRITE_R_X8_B7 (3 bytes)
0x78: WRITE_INV_X8_B0(3 bytes)
0x79: WRITE_INV_X8_B1(3 bytes)
0x7A: WRITE_INV_X8_B2(3 bytes)
0x7B: WRITE_INV_X8_B3(3 bytes)
0x7C: WRITE_INV_X8_B4(3 bytes)
0x7D: WRITE_INV_X8_B5(3 bytes)
0x7E: WRITE_INV_X8_B6(3 bytes)
0x7F: WRITE_INV_X8_B7(3 bytes)
0xA0: BW_AND_X8 (1 byte)
0xA1: BW_AND_X16 (1 byte)
0xA2: BW_AND_X32 (1 byte)
0xA3: BW_AND_X64 (1 byte)
0xA4: BW_OR_X8 (1 byte)
0xA5: BW_OR_X16 (1 byte)
0xA6: BW_OR_X32 (1 byte)
0xA7: BW_OR_X64 (1 byte)
0xA8: BW_XOR_X8 (1 byte)
0xA9: BW_XOR_X16 (1 byte)
0xAA: BW_XOR_X32 (1 byte)
0xAB: BW_XOR_X64 (1 byte)
0xAC: BW_NOT_X8 (1 byte)
0xAD: BW_NOT_X16 (1 byte)
0xAE: BW_NOT_X32 (1 byte)
0xAF: BW_NOT_X64 (1 byte)
0xB0: BW_LSHIFT_X8 (1 byte)
0xB1: BW_LSHIFT_X16 (1 byte)
0xB2: BW_LSHIFT_X32 (1 byte)
0xB3: BW_LSHIFT_X64 (1 byte)
0xB4: BW_RSHIFT_X8 (1 byte)
0xB5: BW_RSHIFT_X16 (1 byte)
0xB6: BW_RSHIFT_X32 (1 byte)
0xB7: BW_RSHIFT_X64 (1 byte)
0xC0: LOGIC_AND (1 byte)
0xC1: LOGIC_OR (1 byte)
0xC2: LOGIC_XOR (1 byte)
0xC3: LOGIC_NOT (1 byte)
0xD0: CMP_EQ (2 bytes)
0xD1: CMP_NEQ (2 bytes)
0xD2: CMP_GT (2 bytes)
0xD3: CMP_LT (2 bytes)
0xD4: CMP_GTE (2 bytes)
0xD5: CMP_LTE (2 bytes)
0xE0: JMP (3 bytes)
0xE1: JMP_IF (3 bytes)
0xE2: JMP_IF_NOT (3 bytes)
0xE3: CALL (3 bytes)
0xE4: CALL_IF (3 bytes)
0xE5: CALL_IF_NOT (3 bytes)
0xE6: RET (1 byte)
0xE7: RET_IF (1 byte)
0xE8: RET_IF_NOT (1 byte)
0xFF: EXIT (1 byte)
----------------------------------------------------------------------
######################################################################
Executing Runtime Unit Tests...
######################################################################
Running test: demo_uint8_t => (1 + 2) * 3
Program[10] [03 01 03 02 20 03 03 03 22 03]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 0301
2 [00 02] - 03: PUSH u8 -------- [size 2] 0302
4 [00 04] - 20: ADD ------------ [size 2] 2003
6 [00 06] - 03: PUSH u8 -------- [size 2] 0303
8 [00 08] - 22: MUL ------------ [size 2] 2203
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 02] ------------------------ Stack( 2) [01 02]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 1) [03]
Step 6 [00 06]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 03] ------------------------ Stack( 2) [03 03]
Step 8 [00 08]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 03] ------------------------ Stack( 1) [09]
Leftover Stack( 1) [09]
Time to execute program: 0.000 ms
Program result: 9
Expected result: 9
Test status: Passed
######################################################################
Running test: demo_uint16_t => (1 + 2) * 3
Program[13] [04 00 01 04 00 02 20 04 04 00 03 22 04]
#### Program Explanation:
0 [00 00] - 04: PUSH u16 ------- [size 3] 040001
3 [00 03] - 04: PUSH u16 ------- [size 3] 040002
6 [00 06] - 20: ADD ------------ [size 2] 2004
8 [00 08] - 04: PUSH u16 ------- [size 3] 040003
11 [00 0B] - 22: MUL ------------ [size 2] 2204
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[04]: PUSH u16 ----- [04 00 01] --------------------- Stack( 2) [00 01]
Step 3 [00 03]: Executed in [ 0.000 ms] Opcode[04]: PUSH u16 ----- [04 00 02] --------------------- Stack( 4) [00 01 00 02]
Step 6 [00 06]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 04] ------------------------ Stack( 2) [00 03]
Step 8 [00 08]: Executed in [ 0.000 ms] Opcode[04]: PUSH u16 ----- [04 00 03] --------------------- Stack( 4) [00 03 00 03]
Step 11 [00 0B]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 04] ------------------------ Stack( 2) [00 09]
Leftover Stack( 2) [00 09]
Time to execute program: 0.000 ms
Program result: 9
Expected result: 9
Test status: Passed
######################################################################
Running test: demo_uint32_t => (1 + 2) * 3
Program[19] [05 00 00 00 01 05 00 00 00 02 20 05 05 00 00 00 03 22 05]
#### Program Explanation:
0 [00 00] - 05: PUSH u32 ------- [size 5] 0500000001
5 [00 05] - 05: PUSH u32 ------- [size 5] 0500000002
10 [00 0A] - 20: ADD ------------ [size 2] 2005
12 [00 0C] - 05: PUSH u32 ------- [size 5] 0500000003
17 [00 11] - 22: MUL ------------ [size 2] 2205
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[05]: PUSH u32 ----- [05 00 00 00 01] --------------- Stack( 4) [00 00 00 01]
Step 5 [00 05]: Executed in [ 0.000 ms] Opcode[05]: PUSH u32 ----- [05 00 00 00 02] --------------- Stack( 8) [00 00 00 01 00 00 00 02]
Step 10 [00 0A]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 05] ------------------------ Stack( 4) [00 00 00 03]
Step 12 [00 0C]: Executed in [ 0.000 ms] Opcode[05]: PUSH u32 ----- [05 00 00 00 03] --------------- Stack( 8) [00 00 00 03 00 00 00 03]
Step 17 [00 11]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 05] ------------------------ Stack( 4) [00 00 00 09]
Leftover Stack( 4) [00 00 00 09]
Time to execute program: 0.000 ms
Program result: 9
Expected result: 9
Test status: Passed
######################################################################
Running test: demo_uint64_t => (1 + 2) * 3
Program[31] [06 00 00 00 00 00 00 00 01 06 00 00 00 00 00 00 00 02 20 06 06 00 00 00 00 00 00 00 03 22 06]
#### Program Explanation:
0 [00 00] - 06: PUSH u64 ------- [size 9] 060000000000000001
9 [00 09] - 06: PUSH u64 ------- [size 9] 060000000000000002
18 [00 12] - 20: ADD ------------ [size 2] 2006
20 [00 14] - 06: PUSH u64 ------- [size 9] 060000000000000003
29 [00 1D] - 22: MUL ------------ [size 2] 2206
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[06]: PUSH u64 ----- [06 00 00 00 00 00 00 00 01] --- Stack( 8) [00 00 00 00 00 00 00 01]
Step 9 [00 09]: Executed in [ 0.000 ms] Opcode[06]: PUSH u64 ----- [06 00 00 00 00 00 00 00 02] --- Stack(16) [00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 02]
Step 18 [00 12]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 06] ------------------------ Stack( 8) [00 00 00 00 00 00 00 03]
Step 20 [00 14]: Executed in [ 0.000 ms] Opcode[06]: PUSH u64 ----- [06 00 00 00 00 00 00 00 03] --- Stack(16) [00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 03]
Step 29 [00 1D]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 06] ------------------------ Stack( 8) [00 00 00 00 00 00 00 09]
Leftover Stack( 8) [00 00 00 00 00 00 00 09]
Time to execute program: 0.000 ms
Program result: 9
Expected result: 9
Test status: Passed
######################################################################
Running test: demo_int8_t => (1 - 2) * 3
Program[10] [07 01 07 02 21 07 07 03 22 07]
#### Program Explanation:
0 [00 00] - 07: PUSH i8 -------- [size 2] 0701
2 [00 02] - 07: PUSH i8 -------- [size 2] 0702
4 [00 04] - 21: SUB ------------ [size 2] 2107
6 [00 06] - 07: PUSH i8 -------- [size 2] 0703
8 [00 08] - 22: MUL ------------ [size 2] 2207
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[07]: PUSH i8 ------ [07 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[07]: PUSH i8 ------ [07 02] ------------------------ Stack( 2) [01 02]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[21]: SUB ---------- [21 07] ------------------------ Stack( 1) [FF]
Step 6 [00 06]: Executed in [ 0.000 ms] Opcode[07]: PUSH i8 ------ [07 03] ------------------------ Stack( 2) [FF 03]
Step 8 [00 08]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 07] ------------------------ Stack( 1) [FD]
Leftover Stack( 1) [FD]
Time to execute program: 0.000 ms
Program result: -3
Expected result: -3
Test status: Passed
######################################################################
Running test: demo_float => (0.1 + 0.2) * -1
Program[19] [0B 3D CC CC CD 0B 3E 4C CC CD 20 0B 0B BF 80 00 00 22 0B]
#### Program Explanation:
0 [00 00] - 0B: PUSH f32 ------- [size 5] 0B3DCCCCCD
5 [00 05] - 0B: PUSH f32 ------- [size 5] 0B3E4CCCCD
10 [00 0A] - 20: ADD ------------ [size 2] 200B
12 [00 0C] - 0B: PUSH f32 ------- [size 5] 0BBF800000
17 [00 11] - 22: MUL ------------ [size 2] 220B
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[0B]: PUSH f32 ----- [0B 3D CC CC CD] --------------- Stack( 4) [3D CC CC CD]
Step 5 [00 05]: Executed in [ 0.000 ms] Opcode[0B]: PUSH f32 ----- [0B 3E 4C CC CD] --------------- Stack( 8) [3D CC CC CD 3E 4C CC CD]
Step 10 [00 0A]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 0B] ------------------------ Stack( 4) [3E 99 99 9A]
Step 12 [00 0C]: Executed in [ 0.000 ms] Opcode[0B]: PUSH f32 ----- [0B BF 80 00 00] --------------- Stack( 8) [3E 99 99 9A BF 80 00 00]
Step 17 [00 11]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 0B] ------------------------ Stack( 4) [BE 99 99 9A]
Leftover Stack( 4) [BE 99 99 9A]
Time to execute program: 0.000 ms
Program result: -0.3000000120
Expected result: -0.3000000120
Test status: Passed
######################################################################
Running test: demo_double => (0.1 + 0.2) * -1
Program[31] [0C 3F B9 99 99 99 99 99 9A 0C 3F C9 99 99 99 99 99 9A 20 0C 0C BF F0 00 00 00 00 00 00 22 0C]
#### Program Explanation:
0 [00 00] - 0C: PUSH f64 ------- [size 9] 0C3FB999999999999A
9 [00 09] - 0C: PUSH f64 ------- [size 9] 0C3FC999999999999A
18 [00 12] - 20: ADD ------------ [size 2] 200C
20 [00 14] - 0C: PUSH f64 ------- [size 9] 0CBFF0000000000000
29 [00 1D] - 22: MUL ------------ [size 2] 220C
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[0C]: PUSH f64 ----- [0C 3F B9 99 99 99 99 99 9A] --- Stack( 8) [3F B9 99 99 99 99 99 9A]
Step 9 [00 09]: Executed in [ 0.000 ms] Opcode[0C]: PUSH f64 ----- [0C 3F C9 99 99 99 99 99 9A] --- Stack(16) [3F B9 99 99 99 99 99 9A 3F C9 99 99 99 99 99 9A]
Step 18 [00 12]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 0C] ------------------------ Stack( 8) [3F D3 33 33 33 33 33 34]
Step 20 [00 14]: Executed in [ 0.000 ms] Opcode[0C]: PUSH f64 ----- [0C BF F0 00 00 00 00 00 00] --- Stack(16) [3F D3 33 33 33 33 33 34 BF F0 00 00 00 00 00 00]
Step 29 [00 1D]: Executed in [ 0.000 ms] Opcode[22]: MUL ---------- [22 0C] ------------------------ Stack( 8) [BF D3 33 33 33 33 33 34]
Leftover Stack( 8) [BF D3 33 33 33 33 33 34]
Time to execute program: 0.000 ms
Program result: -0.3000000000
Expected result: -0.3000000000
Test status: Passed
######################################################################
Running test: bitwise_and_X8
Program[5] [03 0F 03 55 A0]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 030F
2 [00 02] - 03: PUSH u8 -------- [size 2] 0355
4 [00 04] - A0: BW_AND_X8 ------ [size 1] A0
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0F] ------------------------ Stack( 1) [0F]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 55] ------------------------ Stack( 2) [0F 55]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[A0]: BW_AND_X8 ---- [A0] --------------------------- Stack( 1) [05]
Leftover Stack( 1) [05]
Time to execute program: 0.000 ms
Program result: 5
Expected result: 5
Test status: Passed
######################################################################
Running test: bitwise_and_X16
Program[7] [04 00 FF 04 F0 0F A1]
#### Program Explanation:
0 [00 00] - 04: PUSH u16 ------- [size 3] 0400FF
3 [00 03] - 04: PUSH u16 ------- [size 3] 04F00F
6 [00 06] - A1: BW_AND_X16 ----- [size 1] A1
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[04]: PUSH u16 ----- [04 00 FF] --------------------- Stack( 2) [00 FF]
Step 3 [00 03]: Executed in [ 0.000 ms] Opcode[04]: PUSH u16 ----- [04 F0 0F] --------------------- Stack( 4) [00 FF F0 0F]
Step 6 [00 06]: Executed in [ 0.000 ms] Opcode[A1]: BW_AND_X16 --- [A1] --------------------------- Stack( 2) [00 0F]
Leftover Stack( 2) [00 0F]
Time to execute program: 0.000 ms
Program result: 15
Expected result: 15
Test status: Passed
######################################################################
Running test: logic_and => true && true
Program[5] [03 01 03 01 C0]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 0301
2 [00 02] - 03: PUSH u8 -------- [size 2] 0301
4 [00 04] - C0: LOGIC_AND ------ [size 1] C0
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 2) [01 01]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[C0]: LOGIC_AND ---- [C0] --------------------------- Stack( 1) [01]
Leftover Stack( 1) [01]
Time to execute program: 0.000 ms
Program result: 1
Expected result: 1
Test status: Passed
######################################################################
Running test: logic_or => true || false
Program[5] [03 01 03 00 C1]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 0301
2 [00 02] - 03: PUSH u8 -------- [size 2] 0300
4 [00 04] - C1: LOGIC_OR ------- [size 1] C1
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 2) [01 00]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[C1]: LOGIC_OR ----- [C1] --------------------------- Stack( 1) [01]
Leftover Stack( 1) [01]
Time to execute program: 0.000 ms
Program result: 1
Expected result: 1
Test status: Passed
######################################################################
Running test: cmp_eq_1 => 1 == 1
Program[6] [03 01 03 01 D0 02]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 0301
2 [00 02] - 03: PUSH u8 -------- [size 2] 0301
4 [00 04] - D0: CMP_EQ --------- [size 2] D002
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 2) [01 01]
Step 4 [00 04]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 02] ------------------------ Stack( 1) [01]
Leftover Stack( 1) [01]
Time to execute program: 0.000 ms
Program result: 1
Expected result: 1
Test status: Passed
######################################################################
Running test: cmp_eq_2 => 0.29 == 0.31
Program[12] [0B 3E 94 7A E1 0B 3E 9E B8 52 D0 0B]
#### Program Explanation:
0 [00 00] - 0B: PUSH f32 ------- [size 5] 0B3E947AE1
5 [00 05] - 0B: PUSH f32 ------- [size 5] 0B3E9EB852
10 [00 0A] - D0: CMP_EQ --------- [size 2] D00B
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[0B]: PUSH f32 ----- [0B 3E 94 7A E1] --------------- Stack( 4) [3E 94 7A E1]
Step 5 [00 05]: Executed in [ 0.000 ms] Opcode[0B]: PUSH f32 ----- [0B 3E 9E B8 52] --------------- Stack( 8) [3E 94 7A E1 3E 9E B8 52]
Step 10 [00 0A]: Executed in [ 0.000 ms] Opcode[D0]: CMP_EQ ------- [D0 0B] ------------------------ Stack( 1) [00]
Leftover Stack( 1) [00]
Time to execute program: 0.000 ms
Program result: 0
Expected result: 0
Test status: Passed
######################################################################
Running test: jump => push 1 and jump to exit
Program[14] [03 01 E0 00 0D 03 01 20 03 03 03 22 03 FF]
#### Program Explanation:
0 [00 00] - 03: PUSH u8 -------- [size 2] 0301
2 [00 02] - E0: JMP ------------ [size 3] E0000D
5 [00 05] - 03: PUSH u8 -------- [size 2] 0301
7 [00 07] - 20: ADD ------------ [size 2] 2003
9 [00 09] - 03: PUSH u8 -------- [size 2] 0303
11 [00 0B] - 22: MUL ------------ [size 2] 2203
13 [00 0D] - FF: EXIT ----------- [size 1] FF
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 1) [01]
Step 2 [00 02]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 0D] --------------------- Stack( 1) [01]
Step 13 [00 0D]: Executed in [ 0.000 ms] Opcode[FF]: EXIT --------- [FF] --------------------------- Stack( 1) [01]
Leftover Stack( 1) [01]
Time to execute program: 0.000 ms
Debug failed with error: PROGRAM_EXITED
Program result: 1
Expected result: 1
Test status: Passed
######################################################################
Running test: jump_if => for loop sum
Program[66] [05 12 34 56 78 01 00 00 03 00 12 03 01 00 01 03 00 12 03 01 00 01 11 03 03 0A D3 03 E2 00 3C 01 00 01 14 01 11 03 03 01 20 03 12 03 01 00 00 14 01 11 03 03 0A 20 03 12 03 E0 00 13 01 00 00 11 03 FF]
#### Program Explanation:
0 [00 00] - 05: PUSH u32 ------- [size 5] 0512345678
5 [00 05] - 01: PUSH pointer --- [size 3] 010000
8 [00 08] - 03: PUSH u8 -------- [size 2] 0300
10 [00 0A] - 12: MOVE ----------- [size 2] 1203
12 [00 0C] - 01: PUSH pointer --- [size 3] 010001
15 [00 0F] - 03: PUSH u8 -------- [size 2] 0300
17 [00 11] - 12: MOVE ----------- [size 2] 1203
19 [00 13] - 01: PUSH pointer --- [size 3] 010001
22 [00 16] - 11: LOAD ----------- [size 2] 1103
24 [00 18] - 03: PUSH u8 -------- [size 2] 030A
26 [00 1A] - D3: CMP_LT --------- [size 2] D303
28 [00 1C] - E2: JMP_IF_NOT ----- [size 3] E2003C
31 [00 1F] - 01: PUSH pointer --- [size 3] 010001
34 [00 22] - 14: COPY ----------- [size 2] 1401
36 [00 24] - 11: LOAD ----------- [size 2] 1103
38 [00 26] - 03: PUSH u8 -------- [size 2] 0301
40 [00 28] - 20: ADD ------------ [size 2] 2003
42 [00 2A] - 12: MOVE ----------- [size 2] 1203
44 [00 2C] - 01: PUSH pointer --- [size 3] 010000
47 [00 2F] - 14: COPY ----------- [size 2] 1401
49 [00 31] - 11: LOAD ----------- [size 2] 1103
51 [00 33] - 03: PUSH u8 -------- [size 2] 030A
53 [00 35] - 20: ADD ------------ [size 2] 2003
55 [00 37] - 12: MOVE ----------- [size 2] 1203
57 [00 39] - E0: JMP ------------ [size 3] E00013
60 [00 3C] - 01: PUSH pointer --- [size 3] 010000
63 [00 3F] - 11: LOAD ----------- [size 2] 1103
65 [00 41] - FF: EXIT ----------- [size 1] FF
#### End of program explanation.
Starting detailed program debug...
Step 0 [00 00]: Executed in [ 0.000 ms] Opcode[05]: PUSH u32 ----- [05 12 34 56 78] --------------- Stack( 4) [12 34 56 78]
Step 5 [00 05]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 8 [00 08]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [12 34 56 78 00 00 00]
Step 10 [00 0A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 12 [00 0C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 15 [00 0F]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 00] ------------------------ Stack( 7) [12 34 56 78 00 01 00]
Step 17 [00 11]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 00]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 00 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 00]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 01]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 00]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 00 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 0A]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 01 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 01]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 01 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 02]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 0A]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 0A 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 14]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 02]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 02 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 02]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 02 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 03]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 14]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 14 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 1E]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 03]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 03 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 03]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 03 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 04]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 1E]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 1E 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 28]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 04]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 04 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 04]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 04 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 05]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 28]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 28 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 32]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 05]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 05 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 05]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 05 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 06]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 32]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 32 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 3C]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 06]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 06 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 06]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 06 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 07]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 3C]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 3C 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 46]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 07]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 07 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 07]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 07 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 08]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 46]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 46 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 50]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 08]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 08 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 08]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 08 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 09]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 50]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 50 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 5A]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 09]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 09 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 01]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 31 [00 1F]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 34 [00 22]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 01 00 01]
Step 36 [00 24]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 01 09]
Step 38 [00 26]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 01] ------------------------ Stack( 8) [12 34 56 78 00 01 09 01]
Step 40 [00 28]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 01 0A]
Step 42 [00 2A]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 44 [00 2C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 47 [00 2F]: Executed in [ 0.000 ms] Opcode[14]: COPY --------- [14 01] ------------------------ Stack( 8) [12 34 56 78 00 00 00 00]
Step 49 [00 31]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 7) [12 34 56 78 00 00 5A]
Step 51 [00 33]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 8) [12 34 56 78 00 00 5A 0A]
Step 53 [00 35]: Executed in [ 0.000 ms] Opcode[20]: ADD ---------- [20 03] ------------------------ Stack( 7) [12 34 56 78 00 00 64]
Step 55 [00 37]: Executed in [ 0.000 ms] Opcode[12]: MOVE --------- [12 03] ------------------------ Stack( 4) [12 34 56 78]
Step 57 [00 39]: Executed in [ 0.000 ms] Opcode[E0]: JMP ---------- [E0 00 13] --------------------- Stack( 4) [12 34 56 78]
Step 19 [00 13]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 01] --------------------- Stack( 6) [12 34 56 78 00 01]
Step 22 [00 16]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 0A]
Step 24 [00 18]: Executed in [ 0.000 ms] Opcode[03]: PUSH u8 ------ [03 0A] ------------------------ Stack( 6) [12 34 56 78 0A 0A]
Step 26 [00 1A]: Executed in [ 0.000 ms] Opcode[D3]: CMP_LT ------- [D3 03] ------------------------ Stack( 5) [12 34 56 78 00]
Step 28 [00 1C]: Executed in [ 0.000 ms] Opcode[E2]: JMP_IF_NOT --- [E2 00 3C] --------------------- Stack( 4) [12 34 56 78]
Step 60 [00 3C]: Executed in [ 0.000 ms] Opcode[01]: PUSH pointer - [01 00 00] --------------------- Stack( 6) [12 34 56 78 00 00]
Step 63 [00 3F]: Executed in [ 0.000 ms] Opcode[11]: LOAD --------- [11 03] ------------------------ Stack( 5) [12 34 56 78 64]
Step 65 [00 41]: Executed in [ 0.000 ms] Opcode[FF]: EXIT --------- [FF] --------------------------- Stack( 5) [12 34 56 78 64]
Leftover Stack( 5) [12 34 56 78 64]
Time to execute program: 0.000 ms
Debug failed with error: PROGRAM_EXITED
Program result: 100
Expected result: 100
Test status: Passed
----------------------------------------------------------------------
######################################################################
Runtime Unit Tests Completed.
######################################################################
######################################################################
Report:
######################################################################
Test "demo_uint8_t => (1 + 2) * 3" Passed - 0.000 ms
Test "demo_uint16_t => (1 + 2) * 3" Passed - 0.000 ms
Test "demo_uint32_t => (1 + 2) * 3" Passed - 0.000 ms
Test "demo_uint64_t => (1 + 2) * 3" Passed - 0.000 ms
Test "demo_int8_t => (1 - 2) * 3" Passed - 0.000 ms
Test "demo_float => (0.1 + 0.2) * -1" Passed - 0.000 ms
Test "demo_double => (0.1 + 0.2) * -1" Passed - 0.000 ms
Test "bitwise_and_X8" Passed - 0.000 ms
Test "bitwise_and_X16" Passed - 0.000 ms
Test "logic_and => true && true" Passed - 0.000 ms
Test "logic_or => true || false" Passed - 0.000 ms
Test "cmp_eq_1 => 1 == 1" Passed - 0.000 ms
Test "cmp_eq_2 => 0.29 == 0.31" Passed - 0.000 ms
Test "jump => push 1 and jump to exit" Passed - 0.000 ms
Test "jump_if => for loop sum" Passed - 0.000 ms
######################################################################
Runtime Unit Tests Report Completed.
######################################################################
Done.


