Instruction Set

Currently all instructions are 8 bits wide with a variable number of immediate values after, but this will likely change at some point in the future to variable length instructions for some of the more complex ones that affect two different registers.

CategoryInstructionFormatParam 1Param 2Operand 1Operand 2
FlowcallImmWordMSB of immediate value to jumpLSB of immediate value to jump
FlowjmpImmWordMSB of immediate value to jumpLSB of immediate value to jump
FlowjmpnoImmWordMSB of immediate value to jumpLSB of immediate value to jump
FlowjmpnzImmWordMSB of immediate value to jumpLSB of immediate value to jump
FlowjmpoImmWordMSB of immediate value to jumpLSB of immediate value to jump
FlowjmpzImmWordMSB of immediate value to jumpLSB of immediate value to jump
Flowpop16.pcBasic
Flowpush16.pcBasic
FlowretiBasic
Load/Storeld16.[1]LoadStoreRegister A-DMSB of memory location to load fromLSB of memory location to load from
Load/Storeld8.[1][2]LoadStoreRegister A-Dl/h halfMSB of memory location to load fromLSB of memory location to load from
Load/Storeldi16.[1]RegImmWordRegister A-DMSB of immediate word to loadLSB of immediate word to load
Load/Storeldi8.[1][2]RegImmByteRegister A-Dl/h halfImmediate value to load
Load/Storest16.[1]LoadStoreRegister A-DMSB of memory location to store toLSB of memory location to store to
Load/Storest8.[1][2]LoadStoreRegister A-Dl/h halfMSB of memory location to store toLSB of memory location to store to
Load/Storeldi16.dpImmWordMSB of immediate word to loadLSB of immediate word to load
Mathadd16.[1][2]RegRegRegister A-DRegister A-D
Mathadd8h.[1][2]RegRegRegister A-DRegister A-D
Mathadd8l.[1][2]RegRegRegister A-DRegister A-D
Mathand16.[1][2]RegRegRegister A-DRegister A-D
Mathand8h.[1][2]RegRegRegister A-DRegister A-D
Mathand8l.[1][2]RegRegRegister A-DRegister A-D
Mathinv16.[1]RegRegister A-D
Mathinv8.[1][2]RegRegister A-Dl/h half
Mathor16.[1][2]RegRegRegister A-DRegister A-D
Mathor8h.[1][2]RegRegRegister A-DRegister A-D
Mathor8l.[1][2]RegRegRegister A-DRegister A-D
Mathsex.[1]RegRegister A-D
Mathshl16.[1]RegImmByteRegister A-DNumber of bits to shift by
Mathshl8.[1][2]RegImmByteRegister A-Dl/h halfNumber of bits to shift by
Mathshr16.[1]RegImmByteRegister A-DNumber of bits to shift by
Mathshr8.[1][2]RegImmByteRegister A-Dl/h halfNumber of bits to shift by
Mathsub16.[1][2]RegRegRegister A-DRegister A-D
Mathsub8h.[1][2]RegRegRegister A-DRegister A-D
Mathsub8l.[1][2]RegRegRegister A-DRegister A-D
Mathswab.[1]RegRegister A-D
Mathxor16.[1][2]RegRegRegister A-DRegister A-D
Mathxor8h.[1][2]RegRegRegister A-DRegister A-D
Mathxor8l.[1][2]RegRegRegister A-DRegister A-D
Pagingldi8.ptbImmByteImmediate value to load
PagingwrpteBasic
Stackldi16.spImmWordMSB of immediate word to loadLSB of immediate word to load
Stackpush16.immImmWordMSB of immediate value to pushLSB of immediate value to push
Stackpush8.immImmByteImmediate byte to push
SystemdiBasic
SystemeiBasic
SystemhaltBasic
Systemldi8.flagsImmByteByte of immediate value to load
SystemtrapImmByteTrap to generate