]> Witch of Git - jade-rose/blob - isa.txt
Update ISA spec to v0.2.2
[jade-rose] / isa.txt
1 ROSE-8 v0.2.2
2 ISA by Jordan Rose
3 https://belkadan.com/source/ROSE-8/
4
5 * Eight completely symmetric general-purpose registers (r0-7) - initially 0
6 * pc (16-bit address) - initially 0
7 * it (accumulator) - initially 0
8 * code (segment) - initially 1
9 * data1 (segment) - initially 255
10 * data2 (segment) - initially 254
11
12 7654_3210
13
14 0000_0000 STOP halts execution, like an invalid instruction
15 0001 NOPE "no operation" (with a more fun mnemonic)
16 0010 PRNT print it (for debugging or toy programs)
17 0011 WAIT spin or sleep until data1[it] > 0, then decrement data1[it] (for MMIO)
18 010x
19 0110 CABA call absolute code[it], it <- return addr, code <- return segment
20 0111 COFA call offset pc ± it, it <- return offset (-it + 1)
21
22 0000_1ooo ALU1 it <- {zero, lsl1, lsr1, asr1, incr, decr, comp, negt} it
23
24 0001_0000 GET1 it <- data1
25 0001 GET2 it <- data2
26 0010 GETC it <- code
27 0011 (reserved for another special register)
28 01xx
29 1000 SET1 data1 <- it
30 1001 SET2 data2 <- it
31 1010 SETC code <- it
32 1011 (reserved for another special register)
33 11xx
34
35 0010_0aaa GETR it <- it
36 0_1aaa SETR ra <- it
37 1_0aaa SWAP ra <- it, it <- ra
38 1_1aaa ISLT "is less than", for testing overflow / carries: it <- (it < ra) ? 1 : 0
39
40 01oo_oaaa ALUR it <- it {addr, subr, andr, iorr, xorr, lslr, lsrr, asrr} ra
41
42 1000_0aaa LD1R it <- data1[ra]
43 00_1aaa ST1R data1[ra] <- it
44 01_0aaa LD1U it <- data1[ra], then ra += 1
45 01_1aaa ST1U data1[ra] <- it, then ra += 1
46 10_0aaa LD2R it <- data2[ra]
47 10_1aaa ST2R data2[ra] <- it
48 11_0aaa LD2U it <- data2[ra], then ra += 1
49 11_1aaa ST2U data2[ra] <- it, then ra += 1
50
51 110x_xaaa (reserved w/ register)
52
53 1110_0aaa LD2D ra -= 1, then it <- data2[ra]
54 1110_1aaa ST2D ra -= 1, then data2[ra] <- it
55
56 1111_00oo iiiiiiii ALUI it <- it {andi, iori, xori, (see below)} i
57 0011 0iiiiiii ADDI it <- it + i
58 0011 10oooiii BITI it <- it {roli, lsli, lsri, asri, (clri), (insi), (togi), exti} i
59 0011 11iiiiii ADDI it <- it + (whole field, thus allowing many negative numbers)
60 0100 iiiiiiii BEZI branch pc ± i if it == 0
61 0101 iiiiiiii JOFI jump offset to pc ± i
62 0110 iiiiiiii CABI call absolute code[i], it <- return addr, code <- return segment
63 0111 iiiiiiii COFI call offset pc ± i, it <- return offset (-i + 2)
64 10xx iiiiiiii (reserved w/ immediate)
65 110x iiiiiiii (reserved w/ immediate)
66 1110 iiiiiiii GETI it <- i
67 1111 xxxxxxxx EXT1 extended encoding for "future-proofing"