summary refs log tree commit diff
path: root/pc-thing/shit-instruction-set-2
blob: 08864fbdab8ed4b846dc5d79f31435de6feca7dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# the SHIT PC(R) INSTRUCTION SET(TM) 2 #

> format:
>
> OPCODE[ARGS] -> (OUT/VOID)

## Math ##
```
ADD[REG1, REG2, REG3] -> (REG1) Add
SUB[REG1, REG2, REG3] -> (REG1) Subtract
MUL[REG1, REG2, REG3] -> (REG1) Multiply
DIV[REG1, REG2, REG3] -> (REG1) Divide
MOD[REG1, REG2, REG3] -> (REG1) Modulo
SHL[REG1, REG2]       -> (REG1) Shift left
SHR[REG1, REG2]       -> (REG1) Shift right
CMP[REG1, REG2]       -> (VOID) Compare
CMR[REG1, REG2, REG3] -> (REG1) Compare Register
AND[REG1, REG2, REG3] -> (REG1) Logical AND
OR[REG1, REG2, REG3]  -> (REG1) Logical OR
XOR[REG1, REG2, REG3] -> (REG1) Logical XOR
NOT[REG1, REG2]       -> (REG1) Logical NOT
```
## Registers ##
```
MOV[REG, VAL]          -> (REG) Move
SWP[REG1, REG2] -> (REG1, REG2) Swap register
```
## Memory ##
```
LD[REG1, REG2]   -> (REG1) Load from address
STR[REG1, REG2] -> ($REG1) Set address
```
## Jumping & stuff ##
```
JMP[REG] -> (VOID) Jump to address
JNZ[REG] -> (VOID) Jump if flag is non-zero
JZ[REG]  -> (VOID) Jump if flag is zero
JMR[REG] -> (VOID) Jump with return
RET[]    -> (VOID) Return
```
## Stack ##
> [!NOTE]
> The stack limit is 256, and it is only enabled once $7000h is set to a stack address
>
> $7001h has the pointer
> 
> Keep in mind that the stack pointer goes **down** from that address
```
PUSH[REG] -> (VOID) Push to stack
POP[REG]  -> (REG)  Pop from stack
```
## System ##
```
HALT[] -> (VOID) Halt the processor
```

#### extra ####

this might get replaced with a thing yin the ram in the future possibly
```
SYS[TYPE, ...] -> (VOID) Systemcall
```