Spin Byte Code - rosco-pc/propeller-wiki GitHub Wiki
Spin Byte code was long undocumented. However they have been reverse engineered by Cliffe L. Biffle and Robert Vandiver ("asterick"). The meaning of the operand types can be deduced from the source. The names of the byte codes is unofficial. Even though the source code of the SPIN interpreter is released, there is no official list of opcode names whatsoever.
Opcode structure
Opcodes are divided into two main categories: LOWER and UPPER opcodes. Opcodes $00 to $3F are LOWER opcodes and $40 to $FF are UPPER opcodes. That is, if two highest bits of an opcode are zero, the opcode is a LOWER opcode. Otherwise it is an UPPER opcode.
LOWER opcodes are decoded in the main loop with a jump table. UPPER opcodes are handled in a separate subroutine.
Structure of LOWER opcodes
Following is the structure of opcodes, based on the source code of SPIN interpreter. The names of the fields are not official.
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
0 | < 0 | < L | < L | < B | < B | < C | < NZ |
The L and B fields tell to which subroutine (of 16 different) the SPIN interpreter jumps to. L: LONG. These bits mean from what long the jump address is read. (The jump table is in 4 longs, each long has four one-byte pointers). For UPPER instructions B: BYTE. Which byte of the long is used as a jump destination? C: CARRY. Value of the C flag is set to the value of this bit. NZ: NONZERO. Value of the Z flag is set to the negative value of this bit.
Structure of UPPER opcodes
UPPER opcodes are divided into 3 classes: variable ops, memory ops and math ops. Math ops handle mathematical operations and always operate on the stack. Memory ops (memops) operate on memory, addressed by an operand in the stack. Variable ops (varops) also operate on memory, but an index is embedded in the instruction, it is not read from the stack. They are used to save memory as use of memory op would take an extra long.
For variable ops bit 7 is clear and bit 6 is set, ie. opcodes from $40 to $7F are variable ops. For memory ops, bit 7 is set, but either bit 6 or 5 is clear. So opcodes from $80 to $DF are memory ops. For math ops, bits 7 to 5 are set. Therefore opcodes from $E0 to $FF are math ops.
Struture of Variable ops
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
0 | 1 | S/V | X | X | X | O | O |
S/V-field: Operate on VAR or STACK? Zero means that the instruction operates on VAR region, one means it operates on local stack (function local variables). X-field: Offset. These three bits tell which LONG to access. The long offset is added to stack pointer or VAR base pointer. O-field: Operation field. What to do with the memory location? 00: Read (Push result in the stack) 01: Write (Pop value from the stack) 10: Assignment (effect). In this mode, a second opcode (different from the normal opcodes), called an assignment operator, is executed and its result is stored in the target. These opcodes can be math operators, or for example random number operators, sign-extend operators or decrement/increment operators. 11: Push the address of destination into stack.
Structure of Memory ops
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
1 | S | S | I | B | B | O | O |
S-field: Size of address operand. 00: Byte; 01: Word; 10: Long; 11: Illegal (would be a math op). If the I-field is set to 1, the index value is shifted left by S bits. I-field: Index field. If 1, the target register is determined by adding an index popped from stack to a base address determined by the B-field. If 0, an absolute address is popped from the stack. B-field: Base mode. If I-bit is 1, this indicates what base address the offset is added to. 00: Base is popped from stack. 01: Base is the object base address 10: VAR base. 11: Stack base. O-field: See Structure of Variable ops.
Structure of Math ops
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
1 | 1 | 1 | X | X | X | X | X |
X-field: The 5-bit X-field determines the operation to be executed.
Spin Byte Code Instruction List
The following table is extracted from asterick's GEAR source code, and gives a list of the byte codes.
Byte Code | Operand Type | Opcode class | |
---|---|---|---|
$00 | FRAME_CALL_RETURN | OP_NONE | LOWER |
$01 | FRAME_CALL_NORETURN | OP_NONE | LOWER |
$02 | FRAME_CALL_ABORT | OP_NONE | LOWER |
$03 | FRAME_CALL_TRASHABORT | OP_NONE | LOWER |
$04 | BRANCH | OP_SIGNED_OFFSET | LOWER |
$05 | CALL | OP_BYTE_LITERAL | LOWER |
$06 | OBJCALL | OP_OBJ_CALL_PAIR | LOWER |
$07 | OBJCALL_INDEXED | OP_OBJ_CALL_PAIR | LOWER |
$08 | LOOP_START | OP_SIGNED_OFFSET | LOWER |
$09 | LOOP_CONTINUE | OP_SIGNED_OFFSET | LOWER |
$0a | JUMP_IF_FALSE | OP_SIGNED_OFFSET | LOWER |
$0b | JUMP_IF_TRUE | OP_SIGNED_OFFSET | LOWER |
$0c | JUMP_FROM_STACK | OP_NONE | LOWER |
$0d | COMPARE_CASE | OP_SIGNED_OFFSET | LOWER |
$0e | COMPARE_CASE_RANGE | OP_SIGNED_OFFSET | LOWER |
$0f | LOOK_ABORT | OP_NONE | LOWER |
$10 | LOOKUP_COMPARE | OP_NONE | LOWER |
$11 | LOOKDOWN_COMPARE | OP_NONE | LOWER |
$12 | LOOKUPRANGE_COMPARE | OP_NONE | LOWER |
$13 | LOOKDOWNRANGE_COMPARE | OP_NONE | LOWER |
$14 | QUIT | OP_NONE | LOWER |
$15 | MARK_INTERPRETED | OP_NONE | LOWER |
$16 | STRSIZE | OP_NONE | LOWER |
$17 | STRCOMP | OP_NONE | LOWER |
$18 | BYTEFILL | OP_NONE | LOWER |
$19 | WORDFILL | OP_NONE | LOWER |
$1a | LONGFILL | OP_NONE | LOWER |
$1b | WAITPEQ | OP_NONE | LOWER |
$1c | BYTEMOVE | OP_NONE | LOWER |
$1d | WORDMOVE | OP_NONE | LOWER |
$1e | LONGMOVE | OP_NONE | LOWER |
$1f | WAITPNE | OP_NONE | LOWER |
$20 | CLKSET | OP_NONE | LOWER |
$21 | COGSTOP | OP_NONE | LOWER |
$22 | LOCKRET | OP_NONE | LOWER |
$23 | WAITCNT | OP_NONE | LOWER |
$24 | READ_INDEXED_SPR | OP_NONE | LOWER |
$25 | WRITE_INDEXED_SPR | OP_NONE | LOWER |
$26 | EFFECT_INDEXED_SPR | OP_EFFECT | LOWER |
$27 | WAITVID | OP_NONE | LOWER |
$28 | COGINIT_RETURNS | OP_NONE | LOWER |
$29 | LOCKNEW_RETURNS | OP_NONE | LOWER |
$2a | LOCKSET_RETURNS | OP_NONE | LOWER |
$2b | LOCKCLR_RETURNS | OP_NONE | LOWER |
$2c | COGINIT | OP_NONE | LOWER |
$2d | LOCKNEW | OP_NONE | LOWER |
$2e | LOCKSET | OP_NONE | LOWER |
$2f | LOCKCLR | OP_NONE | LOWER |
$30 | ABORT | OP_NONE | LOWER |
$31 | ABORT_WITH_RETURN | OP_NONE | LOWER |
$32 | RETURN | OP_NONE | LOWER |
$33 | POP_RETURN | OP_NONE | LOWER |
$34 | PUSH_NEG1 | OP_NONE | LOWER |
$35 | PUSH_0 | OP_NONE | LOWER |
$36 | PUSH_1 | OP_NONE | LOWER |
$37 | PUSH_PACKED_LIT | OP_PACKED_LITERAL | LOWER |
$38 | PUSH_BYTE_LIT | OP_BYTE_LITERAL | LOWER |
$39 | PUSH_WORD_LIT | OP_WORD_LITERAL, | LOWER |
$3a | PUSH_MID_LIT | OP_NEAR_LONG_LITERAL, | LOWER |
$3b | PUSH_LONG_LIT | OP_LONG_LITERAL, | LOWER |
$3c | UNKNOWN OP $3C | OP_NONE | LOWER |
$3d | INDEXED_MEM_OP | OP_MEMORY_OPCODE, | LOWER |
$3e | INDEXED_RANGE_MEM_OP | OP_MEMORY_OPCODE | LOWER |
$3f | MEMORY_OP | OP_MEMORY_OPCODE | LOWER |
$40 | PUSH_VARMEM_LONG_0 | OP_NONE | VAROP |
$41 | POP_VARMEM_LONG_0 | OP_NONE | VAROP |
$42 | EFFECT_VARMEM_LONG_0 | OP_EFFECT | VAROP |
$43 | REFERENCE_VARMEM_LONG_0 | OP_NONE | VAROP |
$44 | PUSH_VARMEM_LONG_1 | OP_NONE | VAROP |
$45 | POP_VARMEM_LONG_1 | OP_NONE | VAROP |
$46 | EFFECT_VARMEM_LONG_1 | OP_EFFECT | VAROP |
$47 | REFERENCE_VARMEM_LONG_1 | OP_NONE | VAROP |
$48 | PUSH_VARMEM_LONG_2 | OP_NONE | VAROP |
$49 | POP_VARMEM_LONG_2 | OP_NONE | VAROP |
$4a | EFFECT_VARMEM_LONG_2 | OP_EFFECT | VAROP |
$4b | REFERENCE_VARMEM_LONG_2 | OP_NONE | VAROP |
$4c | PUSH_VARMEM_LONG_3 | OP_NONE | VAROP |
$4d | POP_VARMEM_LONG_3 | OP_NONE | VAROP |
$4e | EFFECT_VARMEM_LONG_3 | OP_EFFECT | VAROP |
$4f | REFERENCE_VARMEM_LONG_3 | OP_NONE | VAROP |
$50 | PUSH_VARMEM_LONG_4 | OP_NONE | VAROP |
$51 | POP_VARMEM_LONG_4 | OP_NONE | VAROP |
$52 | EFFECT_VARMEM_LONG_4 | OP_EFFECT | VAROP |
$53 | REFERENCE_VARMEM_LONG_4 | OP_NONE | VAROP |
$54 | PUSH_VARMEM_LONG_5 | OP_NONE | VAROP |
$55 | POP_VARMEM_LONG_5 | OP_NONE | VAROP |
$56 | EFFECT_VARMEM_LONG_5 | OP_EFFECT | VAROP |
$57 | REFERENCE_VARMEM_LONG_5 | OP_NONE | VAROP |
$58 | PUSH_VARMEM_LONG_6 | OP_NONE | VAROP |
$59 | POP_VARMEM_LONG_6 | OP_NONE | VAROP |
$5a | EFFECT_VARMEM_LONG_6 | OP_EFFECT | VAROP |
$5b | REFERENCE_VARMEM_LONG_6 | OP_NONE | VAROP |
$5c | PUSH_VARMEM_LONG_7 | OP_NONE | VAROP |
$5d | POP_VARMEM_LONG_7 | OP_NONE | VAROP |
$5e | EFFECT_VARMEM_LONG_7 | OP_EFFECT | VAROP |
$5f | REFERENCE_VARMEM_LONG_7 | OP_NONE | VAROP |
$60 | PUSH_LOCALMEM_LONG_0 | OP_NONE | VAROP |
$61 | POP_LOCALMEM_LONG_0 | OP_NONE | VAROP |
$62 | EFFECT_LOCALMEM_LONG_0 | OP_EFFECT | VAROP |
$63 | REFERENCE_LOCALMEM_LONG_0 | OP_NONE | VAROP |
$64 | PUSH_LOCALMEM_LONG_1 | OP_NONE | VAROP |
$65 | POP_LOCALMEM_LONG_1 | OP_NONE | VAROP |
$66 | EFFECT_LOCALMEM_LONG_1 | OP_EFFECT | VAROP |
$67 | REFERENCE_LOCALMEM_LONG_1 | OP_NONE | VAROP |
$68 | PUSH_LOCALMEM_LONG_2 | OP_NONE | VAROP |
$69 | POP_LOCALMEM_LONG_2 | OP_NONE | VAROP |
$6a | EFFECT_LOCALMEM_LONG_2 | OP_EFFECT | VAROP |
$6b | REFERENCE_LOCALMEM_LONG_2 | OP_NONE | VAROP |
$6c | PUSH_LOCALMEM_LONG_3 | OP_NONE | VAROP |
$6d | POP_LOCALMEM_LONG_3 | OP_NONE | VAROP |
$6e | EFFECT_LOCALMEM_LONG_3 | OP_EFFECT | VAROP |
$6f | REFERENCE_LOCALMEM_LONG_3 | OP_NONE | VAROP |
$70 | PUSH_LOCALMEM_LONG_4 | OP_NONE | VAROP |
$71 | POP_LOCALMEM_LONG_4 | OP_NONE | VAROP |
$72 | EFFECT_LOCALMEM_LONG_4 | OP_EFFECT | VAROP |
$73 | REFERENCE_LOCALMEM_LONG_4 | OP_NONE | VAROP |
$74 | PUSH_LOCALMEM_LONG_5 | OP_NONE | VAROP |
$75 | POP_LOCALMEM_LONG_5 | OP_NONE | VAROP |
$76 | EFFECT_LOCALMEM_LONG_5 | OP_EFFECT | VAROP |
$77 | REFERENCE_LOCALMEM_LONG_5 | OP_NONE | VAROP |
$78 | PUSH_LOCALMEM_LONG_6 | OP_NONE | VAROP |
$79 | POP_LOCALMEM_LONG_6 | OP_NONE | VAROP |
$7a | EFFECT_LOCALMEM_LONG_6 | OP_EFFECT | VAROP |
$7b | REFERENCE_LOCALMEM_LONG_6 | OP_NONE | VAROP |
$7c | PUSH_LOCALMEM_LONG_7 | OP_NONE | VAROP |
$7d | POP_LOCALMEM_LONG_7 | OP_NONE | VAROP |
$7e | EFFECT_LOCALMEM_LONG_7 | OP_EFFECT | VAROP |
$7f | REFERENCE_LOCALMEM_LONG_7 | OP_NONE | VAROP |
$80 | PUSH_MAINMEM_BYTE | OP_NONE | MEMOP |
$81 | POP_MAINMEM_BYTE | OP_NONE | MEMOP |
$82 | EFFECT_MAINMEM_BYTE | OP_EFFECT | MEMOP |
$83 | REFERENCE_MAINMEM_BYTE | OP_NONE | MEMOP |
$84 | PUSH_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$85 | POP_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$86 | EFFECT_OBJECTMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$87 | REFERENCE_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$88 | PUSH_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$89 | POP_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$8a | EFFECT_VARIABLEMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$8b | REFERENCE_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$8c | PUSH_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$8d | POP_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$8e | EFFECT_LOCALMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET, | MEMOP |
$8f | REFERENCE_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$90 | PUSH_INDEXED_MAINMEM_BYTE | OP_NONE | MEMOP |
$91 | POP_INDEXED_MAINMEM_BYTE | OP_NONE | MEMOP |
$92 | EFFECT_INDEXED_MAINMEM_BYTE | OP_EFFECT | MEMOP |
$93 | REFERENCE_INDEXED_MAINMEM_BYTE | OP_NONE | MEMOP |
$94 | PUSH_INDEXED_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$95 | POP_INDEXED_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$96 | EFFECT_INDEXED_OBJECTMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET, | MEMOP |
$97 | REFERENCE_INDEXED_OBJECTMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$98 | PUSH_INDEXED_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$99 | POP_INDEXED_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$9a | EFFECT_INDEXED_VARIABLEMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET, | MEMOP |
$9b | REFERENCE_INDEXED_VARIABLEMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$9c | PUSH_INDEXED_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$9d | POP_INDEXED_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$9e | EFFECT_INDEXED_LOCALMEM_BYTE | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$9f | REFERENCE_INDEXED_LOCALMEM_BYTE | OP_UNSIGNED_OFFSET | MEMOP |
$a0 | PUSH_MAINMEM_WORD | OP_NONE | MEMOP |
$a1 | POP_MAINMEM_WORD | OP_NONE | MEMOP |
$a2 | EFFECT_MAINMEM_WORD | OP_EFFECT | MEMOP |
$a3 | REFERENCE_MAINMEM_WORD | OP_NONE | MEMOP |
$a4 | PUSH_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$a5 | POP_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$a6 | EFFECT_OBJECTMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$a7 | REFERENCE_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$a8 | PUSH_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$a9 | POP_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$aa | EFFECT_VARIABLEMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$ab | REFERENCE_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$ac | PUSH_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$ad | POP_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$ae | EFFECT_LOCALMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$af | REFERENCE_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$b0 | PUSH_INDEXED_MAINMEM_WORD | OP_NONE | MEMOP |
$b1 | POP_INDEXED_MAINMEM_WORD | OP_NONE | MEMOP |
$b2 | EFFECT_INDEXED_MAINMEM_WORD | OP_EFFECT | MEMOP |
$b3 | REFERENCE_INDEXED_MAINMEM_WORD | OP_NONE | MEMOP |
$b4 | PUSH_INDEXED_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$b5 | POP_INDEXED_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$b6 | EFFECT_INDEXED_OBJECTMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$b7 | REFERENCE_INDEXED_OBJECTMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$b8 | PUSH_INDEXED_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$b9 | POP_INDEXED_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$ba | EFFECT_INDEXED_VARIABLEMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$bb | REFERENCE_INDEXED_VARIABLEMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$bc | PUSH_INDEXED_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$bd | POP_INDEXED_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$be | EFFECT_INDEXED_LOCALMEM_WORD | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$bf | REFERENCE_INDEXED_LOCALMEM_WORD | OP_UNSIGNED_OFFSET | MEMOP |
$c0 | PUSH_MAINMEM_LONG | OP_NONE | MEMOP |
$c1 | POP_MAINMEM_LONG | OP_NONE | MEMOP |
$c2 | EFFECT_MAINMEM_LONG | OP_EFFECT | MEMOP |
$c3 | REFERENCE_MAINMEM_LONG | OP_NONE | MEMOP |
$c4 | PUSH_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$c5 | POP_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$c6 | EFFECT_OBJECTMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$c7 | REFERENCE_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$c8 | PUSH_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$c9 | POP_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$ca | EFFECT_VARIABLEMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$cb | REFERENCE_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$cc | PUSH_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$cd | POP_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$ce | EFFECT_LOCALMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$cf | REFERENCE_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$d0 | PUSH_INDEXED_MAINMEM_LONG | OP_NONE | MEMOP |
$d1 | POP_INDEXED_MAINMEM_LONG | OP_NONE | MEMOP |
$d2 | EFFECT_INDEXED_MAINMEM_LONG | OP_EFFECT | MEMOP |
$d3 | REFERENCE_INDEXED_MAINMEM_LONG | OP_NONE | MEMOP |
$d4 | PUSH_INDEXED_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$d5 | POP_INDEXED_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$d6 | EFFECT_INDEXED_OBJECTMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$d7 | REFERENCE_INDEXED_OBJECTMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$d8 | PUSH_INDEXED_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$d9 | POP_INDEXED_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$da | EFFECT_INDEXED_VARIABLEMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$db | REFERENCE_INDEXED_VARIABLEMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$dc | PUSH_INDEXED_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$dd | POP_INDEXED_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$de | EFFECT_INDEXED_LOCALMEM_LONG | OP_UNSIGNED_EFFECTED_OFFSET | MEMOP |
$df | REFERENCE_INDEXED_LOCALMEM_LONG | OP_UNSIGNED_OFFSET | MEMOP |
$e0 | ROTATE_RIGHT | OP_NONE | MATHOP |
$e1 | ROTATE_LEFT | OP_NONE | MATHOP |
$e2 | SHIFT_RIGHT | OP_NONE | MATHOP |
$e3 | SHIFT_LEFT | OP_NONE | MATHOP |
$e4 | LIMIT_MIN | OP_NONE | MATHOP |
$e5 | LIMIT_MAX | OP_NONE | MATHOP |
$e6 | NEGATE | OP_NONE | MATHOP |
$e7 | COMPLEMENT | OP_NONE | MATHOP |
$e8 | BIT_AND | OP_NONE | MATHOP |
$e9 | ABSOLUTE_VALUE | OP_NONE | MATHOP |
$ea | BIT_OR | OP_NONE | MATHOP |
$eb | BIT_XOR | OP_NONE | MATHOP |
$ec | ADD | OP_NONE | MATHOP |
$ed | SUBTRACT | OP_NONE | MATHOP |
$ee | ARITH_SHIFT_RIGHT | OP_NONE | MATHOP |
$ef | BIT_REVERSE | OP_NONE | MATHOP |
$f0 | LOGICAL_AND | OP_NONE | MATHOP |
$f1 | ENCODE | OP_NONE | MATHOP |
$f2 | LOGICAL_OR | OP_NONE | MATHOP |
$f3 | DECODE | OP_NONE | MATHOP |
$f4 | MULTIPLY | OP_NONE | MATHOP |
$f5 | MULTIPLY_HI | OP_NONE | MATHOP |
$f6 | DIVIDE | OP_NONE | MATHOP |
$f7 | MODULO | OP_NONE | MATHOP |
$f8 | SQUARE_ROOT | OP_NONE | MATHOP |
$f9 | LESS | OP_NONE | MATHOP |
$fa | GREATER | OP_NONE | MATHOP |
$fb | NOT_EQUAL | OP_NONE | MATHOP |
$fc | EQUAL | OP_NONE | MATHOP |
$fd | LESS_EQUAL | OP_NONE | MATHOP |
$fe | GREATER_EQUAL | OP_NONE | MATHOP |
$ff | LOGICAL_NOT | OP_NONE | MATHOP |