aboutsummaryrefslogtreecommitdiff
path: root/assembler/opcode.s
diff options
context:
space:
mode:
authorJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-05-20 01:48:22 -0500
committerJacques Comeaux <jacquesrcomeaux@protonmail.com>2024-05-20 01:48:22 -0500
commitede3b86fd1cb89f17ed99a275c731f6a58b23cfd (patch)
treeb45aaf47b8c14f5f9e645c119fe6613b338672db /assembler/opcode.s
parentc96ba2b2678e4b92e7969c683d4cb3f1648af813 (diff)
Finish and integrate opcode parser
Diffstat (limited to 'assembler/opcode.s')
-rw-r--r--assembler/opcode.s404
1 files changed, 202 insertions, 202 deletions
diff --git a/assembler/opcode.s b/assembler/opcode.s
index f6e93c4..5e72660 100644
--- a/assembler/opcode.s
+++ b/assembler/opcode.s
@@ -47,29 +47,32 @@ first_time:
LDRB R1, [R5, 1] // load parse instruction vs offset byte
TST R1, R1 // check if zero
BNE get_match // non-zero means it's an address
+get_end_char:
+ BL get_char
+ BNE get_end_char
POP {PC} // zero means it's a parse instruction
.align 4
start:
.byte 'A, 0x01 ; .hword 0x0000 ; .word A
- // .byte 'B, 0x00 ; .hword 0x0000 ; .word 0xE3E0AE88 // BICS (register) T1 01000 01110 Rm Rdn
- // .byte 'C, 0x00 ; .hword 0x0000 ; .word 0xE3E0AB88 // CMN (register) T1 01000 01011 Rm Rn
- // .byte 'D, 0x00 ; .hword 0x0000 ; .word 0x00C8E884 // MOVSI (immediate) T1 00100 Rd imm8
- // .byte 'J, 0x00 ; .hword 0x0000 ; .word 0x00C8A09A // BEQ T1 11010 000 imm8
- // .byte 'L, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08D // LDRI5 (immediate) T1 01101 imm5 Rn Rt
- // .byte 'P, 0x00 ; .hword 0x0000 ; .word 0x0000B496 // PUSHLR T1 10110 10100 000000
- // .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE3E0A788 // RORS (register) T1 01000 00111 Rm Rdn
- // .byte 'S, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08C // STRI5 (immediate) T1 01100 imm5 Rn Rt
- // .byte 'T, 0x00 ; .hword 0x0000 ; .word 0xD5E3E080 // LSLSI (immediate) T1 00000 imm5 Rm Rd
+ .byte 'B, 0x01 ; .hword 0x0000 ; .word B
+ .byte 'C, 0x01 ; .hword 0x0000 ; .word C
+ .byte 'D, 0x01 ; .hword 0x0000 ; .word D
+ .byte 'J, 0x01 ; .hword 0x0000 ; .word J
+ .byte 'L, 0x01 ; .hword 0x0000 ; .word L
+ .byte 'P, 0x01 ; .hword 0x0000 ; .word P
+ .byte 'R, 0x01 ; .hword 0x0000 ; .word R
+ .byte 'S, 0x01 ; .hword 0x0000 ; .word S
+ .byte 'T, 0x01 ; .hword 0x0000 ; .word T
.word 0x00000000, 0x00000000
A:
.byte 'A, 0x01 ; .hword 0x0000 ; .word AA
- // .byte 'H, 0x01 ; .hword 0x0000 ; .word AH
+ .byte 'H, 0x01 ; .hword 0x0000 ; .word AH
.byte 'M, 0x00 ; .hword 0x0000 ; .word 0xE3E0AD88 // MULS T1 01000 01101 Rn Rdm
.byte 'N, 0x00 ; .hword 0x0000 ; .word 0xE3E0A988 // NEG (immediate) T1 01000 01001 Rn Rd
- // .byte 'S, 0x01 ; .hword 0x0000 ; .word AS
+ .byte 'S, 0x01 ; .hword 0x0000 ; .word AS
.word 0x00000000, 0x00000000
AA:
@@ -90,194 +93,191 @@ AAR:
.byte 'L, 0x00 ; .hword 0x0000 ; .word 0xF3E0B088 // ADDRLO (register) T2 010001000 Rm4 Rdn
.word 0x00000000, 0x00000000
-// ASC SBCS (register) T1 01000 00110 Rm Rdn E3 E0 A6 88
-// ASI3 SUBSI3 (immediate) T1 0001111 imm3 Rn Rd D3 E3 E0 0F
-// ASI8 SUBSI8 (immediate) T2 00111 Rdn imm8 00 C8 E8 87
-// ASR SUBSR (register) T1 0001101 Rm Rn Rd E6 E3 E0 0D
-
-// AHI SRSI (immediate) T1 00010 imm5 Rm Rd D5 E3 E0 82
-// AHR SRSR (register) T1 01000 00100 Rm Rdn E3 E0 A4 88
-
-// Choice 2
-// AH
-// --I
-// --R
-
-// Choice 3
-// AS
-// --C
-// --I
-// --R
-
-// Choice 6
-// B
-// -A
-// -C
-// -I
-// -O
-// -T
-// -X
-
-// Choice 3
-// C
-// -I
-// -N
-// -R
-
-// Choice 2
-// CR
-// --3
-// --4
-
-// Choice 2
-// CR4
-// ---H
-// ---L
-
-// Choice 4
-// D
-// -I
-// -R
-// -S
-// -U
-
-// Choice 3
-// DR
-// --F
-// --H
-// --L
-
-// Choice 2
-// DS
-// --B
-// --H
-
-// Choice 2
-// DU
-// --B
-// --H
-
-// Choice 12
-// J
-// -A
-// -E
-// -G
-// -H
-// -I
-// -L
-// -M
-// -N
-// -P
-// -R
-// -S
-// -V
-
-// Choice 2
-// JG
-// --E
-// --T
-
-// Choice 2
-// JH
-// --I
-// --S
-
-// Choice 2
-// JI
-// --H
-// --L
-
-// Choice 5
-// JL
-// --E
-// --O
-// --R
-// --S
-// --T
-
-// Choice 2
-// JV
-// --C
-// --S
-
-// Choice 6
-// L
-// -B
-// -H
-// -I
-// -L
-// -R
-// -S
-
-// Choice 2
-// LB
-// --I
-// --R
-
-// Choice 2
-// LH
-// --I
-// --R
-
-// Choice 2
-// LI
-// --5
-// --8
-
-// Choice 2
-// LS
-// --B
-// --H
-
-// Choice 2
-// P
-// -L
-// -P
-
-// Choice 2
-// R
-// -B
-// -R
-
-// Choice 3
-// RB
-// --H
-// --S
-// --W
-
-// Choice 4
-// S
-// -B
-// -H
-// -I
-// -R
-
-// Choice 2
-// SB
-// --I
-// --R
-
-// Choice 2
-// SH
-// --I
-// --R
-
-// Choice 2
-// SI
-// --5
-// --8
-
-// Choice 2
-// T
-// -L
-// -R
-
-// Choice 2
-// TL
-// --I
-// --R
-
-// Choice 2
-// TR
-// --I
-// --R
+AH:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E082 // ASRSI (immediate) T1 00010 imm5 Rm Rd
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE3E0A488 // ASRSR (register) T1 01000 00100 Rm Rdn
+ .word 0x00000000, 0x00000000
+
+AS:
+ .byte 'C, 0x00 ; .hword 0x0000 ; .word 0xE3E0A688 // SBCS (register) T1 01000 00110 Rm Rdn
+ .byte 'I, 0x01 ; .hword 0x0000 ; .word ASI
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E00D // SUBSR (register) T1 0001101 Rm Rn Rd
+ .word 0x00000000, 0x00000000
+
+ASI:
+ .byte '3, 0x00 ; .hword 0x0000 ; .word 0xD3E3E00F // SUBSI3 (immediate) T1 0001111 imm3 Rn Rd
+ .byte '8, 0x00 ; .hword 0x0000 ; .word 0x00C8E887 // SUBSI8 (immediate) T2 00111 Rdn imm8
+ .word 0x00000000, 0x00000000
+
+B:
+ .byte 'A, 0x00 ; .hword 0x0000 ; .word 0xE3E0A088 // ANDS (register) T1 01000 00000 Rm Rdn
+ .byte 'C, 0x00 ; .hword 0x0000 ; .word 0xE3E0AE88 // BICS (register) T1 01000 01110 Rm Rdn
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xE3E0AF88 // MVNS (register) T1 01000 01111 Rm Rd
+ .byte 'O, 0x00 ; .hword 0x0000 ; .word 0xE3E0AC88 // ORRS (register) T1 01000 01100 Rm Rdn
+ .byte 'T, 0x00 ; .hword 0x0000 ; .word 0xE3E0A888 // TST (register) T1 01000 01000 Rm Rd
+ .byte 'X, 0x00 ; .hword 0x0000 ; .word 0xE3E0A188 // EORS (register) T1 01000 00001 Rm Rdn
+ .word 0x00000000, 0x00000000
+
+C:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0x00C8E885 // CMPI (immediate) T1 00101 Rn imm8
+ .byte 'N, 0x00 ; .hword 0x0000 ; .word 0xE3E0AB88 // CMN (register) T1 01000 01011 Rm Rn
+ .byte 'R, 0x01 ; .hword 0x0000 ; .word CR
+ .word 0x00000000, 0x00000000
+
+CR:
+ .byte '3, 0x00 ; .hword 0x0000 ; .word 0xE3E0AA88 // CMPR (register) T1 01000 01010 Rm Rn
+ .byte '4, 0x01 ; .hword 0x0000 ; .word CR4
+ .word 0x00000000, 0x00000000
+
+CR4:
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xF3E0B688 // CMPRHI (register) T2 010001011 Rm4 Rd
+ .byte 'L, 0x00 ; .hword 0x0000 ; .word 0xF3E0B488 // CMPRLO (register) T2 010001010 Rm4 Rd
+ .word 0x00000000, 0x00000000
+
+D:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0x00C8E884 // MOVSI (immediate) T1 00100 Rd imm8
+ .byte 'R, 0x01 ; .hword 0x0000 ; .word DR
+ .byte 'S, 0x01 ; .hword 0x0000 ; .word DS
+ .byte 'U, 0x01 ; .hword 0x0000 ; .word DU
+ .word 0x00000000, 0x00000000
+
+DR:
+ .byte 'F, 0x00 ; .hword 0x0000 ; .word 0xE3E0A080 // MOVSR (register) T2 00000 00000 Rm
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xF3E0BA88 // MOVRHI (register) T1 010001101 Rm4
+ .byte 'L, 0x00 ; .hword 0x0000 ; .word 0xF3E0B888 // MOVRLO (register) T1 010001100 Rm4
+ .word 0x00000000, 0x00000000
+
+DS:
+ .byte 'B, 0x00 ; .hword 0x0000 ; .word 0xE3E0A996 // SXTB T1 10110 01001 Rm
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xE3E0A896 // SXTH T1 10110 01000 Rm
+ .word 0x00000000, 0x00000000
+
+DU:
+ .byte 'B, 0x00 ; .hword 0x0000 ; .word 0xE3E0AB96 // UXTB T1 10110 01011 Rm
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xE3E0AA96 // UXTH T1 10110 01010 Rm
+ .word 0x00000000, 0x00000000
+
+J:
+ .byte 'A, 0x00 ; .hword 0x0000 ; .word 0x0000CB9C // B T2 11100 imm11
+ .byte 'E, 0x00 ; .hword 0x0000 ; .word 0x00C8A09A // BEQ T1 11010 000 imm8
+ .byte 'G, 0x01 ; .hword 0x0000 ; .word JG
+ .byte 'H, 0x01 ; .hword 0x0000 ; .word JH
+ .byte 'I, 0x01 ; .hword 0x0000 ; .word JI
+ .byte 'L, 0x01 ; .hword 0x0000 ; .word JL
+ .byte 'M, 0x00 ; .hword 0x0000 ; .word 0x00C8B09A // BMI T1 11010 100 imm8
+ .byte 'N, 0x00 ; .hword 0x0000 ; .word 0x00C8A49A // BNE T1 11010 001 imm8
+ .byte 'P, 0x00 ; .hword 0x0000 ; .word 0x00C8B49A // BPL T1 11010 101 imm8
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0x00E3BC88 // BX T1 01000 1110 Rm 000
+ .byte 'S, 0x00 ; .hword 0x0000 ; .word 0x00C8BC9B // SVC T1 11011 111 imm8
+ .byte 'V, 0x01 ; .hword 0x0000 ; .word JV
+ .word 0x00000000, 0x00000000
+
+JG:
+ .byte 'E, 0x00 ; .hword 0x0000 ; .word 0x00C8A89B // BGE T1 11011 010 imm8
+ .byte 'T, 0x00 ; .hword 0x0000 ; .word 0x00C8B09B // BGT T1 11011 100 imm8
+ .word 0x00000000, 0x00000000
+
+JH:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0x00C8A09B // BHI T1 11011 000 imm8
+ .byte 'S, 0x00 ; .hword 0x0000 ; .word 0x00C8A89A // BHS T1 11010 010 imm8
+ .word 0x00000000, 0x00000000
+
+JI:
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0x0000CB9E // BLHI T1 11110 imm11
+ .byte 'L, 0x00 ; .hword 0x0000 ; .word 0x0000CB9F // BLLO T1 11111 imm11
+ .word 0x00000000, 0x00000000
+
+JL:
+ .byte 'E, 0x00 ; .hword 0x0000 ; .word 0x00C8B49B // BLE T1 11011 101 imm8
+ .byte 'O, 0x00 ; .hword 0x0000 ; .word 0x00C8AC9A // BLO T1 11010 011 imm8
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0x00E3BE88 // BLX T1 01000 1111 Rm 000
+ .byte 'S, 0x00 ; .hword 0x0000 ; .word 0x00C8A49B // BLS T1 11011 001 imm8
+ .byte 'T, 0x00 ; .hword 0x0000 ; .word 0x00C8AC9B // BLT T1 11011 011 imm8
+ .word 0x00000000, 0x00000000
+
+JV:
+ .byte 'C, 0x00 ; .hword 0x0000 ; .word 0x00C8BC9A // BVC T1 11010 111 imm8
+ .byte 'S, 0x00 ; .hword 0x0000 ; .word 0x00C8B89A // BVS T1 11010 110 imm8
+ .word 0x00000000, 0x00000000
+
+L:
+ .byte 'B, 0x01 ; .hword 0x0000 ; .word LB
+ .byte 'H, 0x01 ; .hword 0x0000 ; .word LH
+ .byte 'I, 0x01 ; .hword 0x0000 ; .word LI
+ .byte 'L, 0x00 ; .hword 0x0000 ; .word 0x00C8E889 // LDRL (literal) T1 01001 Rt imm8
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02C // LDRR (register) T1 0101100 Rm Rn Rt
+ .byte 'S, 0x01 ; .hword 0x0000 ; .word LS
+ .word 0x00000000, 0x00000000
+
+LB:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08F // LDRBI (immediate) T1 01111 imm5 Rn Rt
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02E // LDRBR (register) T1 0101110 Rm Rn Rt
+ .word 0x00000000, 0x00000000
+
+LH:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E091 // LDRHI (immediate) T1 10001 imm5 Rn Rt
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02D // LDRHR (register) T1 0101101 Rm Rn Rt
+ .word 0x00000000, 0x00000000
+
+LI:
+ .byte '5, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08D // LDRI5 (immediate) T1 01101 imm5 Rn Rt
+ .byte '8, 0x00 ; .hword 0x0000 ; .word 0x00C8E893 // LDRI8 (immediate) T2 10011 Rt imm8
+ .word 0x00000000, 0x00000000
+
+LS:
+ .byte 'B, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02B // LDRSB (register) T1 0101011 Rm Rn Rt
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02F // LDRSH (register) T1 0101111 Rm Rn Rt
+ .word 0x00000000, 0x00000000
+
+P:
+ .byte 'L, 0x00 ; .hword 0x0000 ; .word 0x0000B496 // PUSHLR T1 10110 10100 000000
+ .byte 'P, 0x00 ; .hword 0x0000 ; .word 0x0000B497 // POPPC T1 10111 10100 000000
+ .word 0x00000000, 0x00000000
+
+R:
+ .byte 'B, 0x01 ; .hword 0x0000 ; .word RB
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE3E0A788 // RORS (register) T1 01000 00111 Rm Rdn
+ .word 0x00000000, 0x00000000
+
+RB:
+ .byte 'H, 0x00 ; .hword 0x0000 ; .word 0xE3E0A997 // REV16 T1 10111 01001 Rm Rd
+ .byte 'S, 0x00 ; .hword 0x0000 ; .word 0xE3E0AB97 // REVSH T1 10111 01011 Rm Rd
+ .byte 'W, 0x00 ; .hword 0x0000 ; .word 0xE3E0A897 // REV T1 10111 01000 Rm Rd
+ .word 0x00000000, 0x00000000
+
+S:
+ .byte 'B, 0x01 ; .hword 0x0000 ; .word SB
+ .byte 'H, 0x01 ; .hword 0x0000 ; .word SH
+ .byte 'I, 0x01 ; .hword 0x0000 ; .word SI
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E028 // STRR (register) T1 0101000 Rm Rn Rt
+ .word 0x00000000, 0x00000000
+
+SB:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08E // STRBI (immediate) T1 01110 imm5 Rn Rt
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E02A // STRBR (register) T1 0101010 Rm Rn Rt
+ .word 0x00000000, 0x00000000
+
+SH:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E090 // STRHI (immediate) T1 10000 imm5 Rn Rt
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE6E3E029 // STRHR (register) T1 0101001 Rm Rn R
+ .word 0x00000000, 0x00000000
+
+SI:
+ .byte '5, 0x00 ; .hword 0x0000 ; .word 0xD5E3E08C // STRI5 (immediate) T1 01100 imm5 Rn Rt
+ .byte '8, 0x00 ; .hword 0x0000 ; .word 0x00C8E892 // STRI8 (immediate) T2 10010 Rt imm8
+ .word 0x00000000, 0x00000000
+
+T:
+ .byte 'L, 0x01 ; .hword 0x0000 ; .word TL
+ .byte 'R, 0x01 ; .hword 0x0000 ; .word TR
+ .word 0x00000000, 0x00000000
+
+TL:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E080 // LSLSI (immediate) T1 00000 imm5 Rm Rd
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE3E0A288 // LSLSR (register) T1 01000 00010 Rm Rdn
+ .word 0x00000000, 0x00000000
+
+TR:
+ .byte 'I, 0x00 ; .hword 0x0000 ; .word 0xD5E3E081 // LSRSI (immediate) T1 00001 imm5 Rm Rd
+ .byte 'R, 0x00 ; .hword 0x0000 ; .word 0xE3E0A388 // LSRSR (register) T1 01000 00011 Rm Rdn
+ .word 0x00000000, 0x00000000