DUO BINARY BYTECODE Address size is 32 bits. Instruction format: (1 byte opcode) (argument) (argument) (argument)... Argument format: (4 bit address mode) (mode?) (value) (mode?) (mode?)... Address modes: 0000 = Absolute address relative to start of storage 0001 = Code offset 0010 = Global scope offset 0011 = Local scope offset 0100 = Previous argument scope offset 0101 = Next argument scope offset 0110 = Absolute address relative to start of memory 1000 = Int8 constant 1001 = Int16 constant 1010 = Int32 constant 1011 = Int64 constant 0. AG (size): Allocate global scope. 1. AL (size): Allocate local scope. 2. AA (size): Allocate argument scope. 3. A (addr) (dest): Store address relative to storage. 4. J (addr): Jump. 5. JZ (data) (addr): Jump if zero. 6. JN (data) (addr): Jump if not zero. 7. = (data) (dest): Copy value. 8. ~ (data) (dest): Invert. 9. | (data) (data) (dest): Bitwise OR. 10. & (data) (data) (dest): Bitwise AND. 11. == (data) (data) (dest): Equal. 12. > (num) (num) (dest): Greater than. 13. + (num) (num) (dest): Add. 14. - (num) (num) (dest): Subtract. 15. << (data) (amount) (dest): Bitshift left. 16. >> (data) (amount) (dest): Bitshift right. 17. C (func) (code address) (dest): Call function. 18. R (value): Return from function. 19. E (addr): Execute program. 20. P (text): Print. 21. I (amount) (dest): Prompt input. 22. LF (key): Unlock flash if key is equal to 3065; otherwise lock. 23. ES (addr): Erase sector.