# PTSL/instrtable

Jump to navigation
Jump to search

## Instruction table for PTSL

ID | Opcode | Definition |
---|---|---|

00 | DROP | SP-- |

01 | DUP | [SP++] = [SP] |

02 | SWAP | swap [SP-1] [SP] |

03 | PUSHI32 data | [SP++] = [DATA:32] |

04 | PUSHI24 data | [SP++] = [DATA:24] |

05 | PUSHI16 data | [SP++] = [DATA:16] |

06 | PUSHI8 data | [SP++] = [DATA:8] |

07 | LOADI32 | [SP] = MEM[[SP]:32] |

08 | LOADI24 | [SP] = MEM[[SP]:24] |

09 | LOADI16 | [SP] = MEM[[SP]:16] |

0A | LOADI8 | [SP] = MEM[[SP]:8] |

0B | JUMP | PC = [SP--] |

0C | JPIF | IF [SP--] { PC = [SP--] } |

0D | ADDI8 | [SP] = [SP] + [DATA:8] |

0E | ADD | [SP--] = [SP-1] + [SP-2] |

0F | ADC | |

10 | SUBVI8 | [SP--] = [SP-1] - [DATA:8] |

11 | SUBI8V | [SP--] = [DATA:8] - [SP-1] |

12 | SUB | [SP--] = [SP-1] - [SP-2] |

13 | SBB | |

14 | 8BCRRY | |

15 | 16BCRRY | |

16 | 32BCRRY | |

17 | CALLI32 | [RSP++] = PC; PC = [DATA:I32] |

18 | CALL | [RSP++] = PC; PC = [SP--] |

19 | PUSHRS | [RSP++] = [SP--] |

1A | PEEKRS | [SP++] = [RSP] |

1B | POPRS | [SP++] = [RSP--] |

1C | PUSHRSP | [SP++] = RSP |

1D | POPRSP | RSP = [SP--] |

1E | ALLOCP | Request memory page from OS |

1F | MAPDEV | Map device [SP-1] to page [SP-2]. |

20 | COPY | Fast copy, provided by OS. [SP-1] = Length, [SP-2] = Source, [SP-3] = Dest |

21 | JPRELI8 | PC = PC + [SDATA:8] |

22 | JPRELI16 | PC = PC + [SDATA:16] |

23 | JPREL | PC = PC + [SP--] |

24 | RET | PC = [RSP--] |

25 | GREQ | [SP--] = [SP-1] >= [SP-2] (Signed) |

26 | LEEQ | [SP--] = [SP-1] <= [SP-2] (Signed) |

27 | GRTR | [SP--] = [SP-1] > [SP-2] (Signed) |

28 | LESS | [SP--] = [SP-1] < [SP-2] (Signed) |

29 | ABEQ | [SP--] = [SP-1] >= [SP-2] (Unsigned) |

2A | BLEQ | [SP--] = [SP-1] <= [SP-2] (Unsigned) |

2B | ABOV | [SP--] = [SP-1] > [SP-2] (Unsigned) |

2C | BELO | [SP--] = [SP-1] < [SP-2] (Unsigned) |

2D | STORI32 | MEM[[SP]:32] = [SP--] |

2E | STORI24 | MEM[[SP]:24] = [SP--] |

2F | STORI16 | MEM[[SP]:16] = [SP--] |

30 | STORI8 | MEM[[SP]:8] = [SP--] |

31 | NOT | [SP] = ![SP] |

32 | AND | [SP--] = [SP-1] & [SP-2] |

33 | OR | [SP-2] |

34 | XOR | [SP--] = [SP-1] ^ [SP-2] |

35 | MUL | [SP--] = [SP-1] * [SP-2] |

36 | DIVMOD | A = [SP-1] / [SP-2]; [SP-1] = [SP-1] % [SP-2]; [SP] = A |

37 | SHL | [SP--] = [SP-1] << [SP-2] |

38 | SHR | [SP--] = [SP-1] >> [SP-2] |

39 | SHRA | [SP--] = [SP-1] >>> [SP-2] |

3A | SHL8 | [SP] = [SP] << 8 |

3B | SHL16 | [SP] = [SP] << 16 |

3C | SHL24 | [SP] = [SP] << 24 |

3D | PUSH1 | [SP++] = 1 |

3E | SETQC | [QUICKCONST] = [DATA:32] |

3F | GETQC32 | [SP++] = [QUICKCONST:32] |

40 | GETQC16 | [SP++] = [QUICKCONST:16] |

41 | GETQC8 | [SP++] = [QUICKCONST:8] |

42 | MXCHG | swap [SP-1] MEM[[SP--]:32] |

43 | SETSP | SP = [SP] |

44 | SYSINF | Writes system info to address pointed to by [SP--]. Must be a 256 byte space. |

45 | PUSH0 | [SP++] = 0 |

46 | BITSET | |

47 | BITGET | |

48 | BITFLIP | |

49 | JMPTOASM | Execute system specific assembly code at location pointed to by [SP--] |

4A | CALLASM | Same as JMPTOASM, but provides a return value in a system dependent register. |

4B | MSET32 | Set the region specified by [SP-1] of length [SP-2] to [SP-3:32]. Undefined behavior if region length is not multiple of 4 |

4C | MSET16 | Set the region specified by [SP-1] of length [SP-2] to [SP-3:16]. Undefined behavior if region length is not multiple of 2 |

4D | MSET8 | Set the region specified by [SP-1] of length [SP-2] to [SP-3:8]. |

4E | SHL1 | [SP] = [SP] << 1 |

4F | SHR1 | [SP] = [SP] >> 1 |

50 | SHLI8 | [SP] = [SP] << [DATA:8] |

51 | SHRI8 | [SP] = [SP] >> [DATA:8] |

52 | OVER | [SP++] = [SP-1] |

53 | ROT | rotate [SP], [SP-1], [SP-2] |

FF | EXPLD | System prints "BANG!" to display, halts. May also play noise from system speaker if one is present. |