Skip to main content

rs_asm6805/
opcodes.rs

1use std::collections::HashMap;
2
3pub const CAT_INH: u16 = 1 << 8;
4pub const CAT_REL: u16 = 2 << 8;
5pub const CAT_BSC: u16 = 3 << 8;
6pub const CAT_BSCX: u16 = 4 << 8;
7pub const CAT_BTB: u16 = 5 << 8;
8pub const CAT_BTBX: u16 = 6 << 8;
9pub const CAT_IMM_DIR_EXT_IX1_IX1_IX: u16 = 7 << 8;
10pub const CAT_DIR_EXT_IX1_IX1_IX: u16 = 8 << 8;
11pub const CAT_DIR_IX1_IX: u16 = 9 << 8;
12pub const CAT_ALIGN: u16 = 10 << 8;
13pub const CAT_DB: u16 = 11 << 8;
14pub const CAT_DS: u16 = 12 << 8;
15pub const CAT_DW: u16 = 13 << 8;
16pub const CAT_EQU: u16 = 14 << 8;
17pub const CAT_INCLUDE: u16 = 15 << 8;
18pub const CAT_TIMEX: u16 = 16 << 8;
19pub const CAT_TIMEX6: u16 = 17 << 8;
20pub const CAT_IF: u16 = 18 << 8;
21pub const CAT_ELSE: u16 = 19 << 8;
22pub const CAT_ENDIF: u16 = 20 << 8;
23pub const CAT_ORIGIN: u16 = 21 << 8;
24pub const CAT_ASCII: u16 = 22 << 8;
25
26#[derive(Debug, Clone)]
27pub struct KeywordDefinition {
28    pub name: &'static str,
29    pub value: u16,
30}
31
32pub const KEYWORDS: &[KeywordDefinition] = &[
33    KeywordDefinition { name: "ADC", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa9 },
34    KeywordDefinition { name: "ADD", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xab },
35    KeywordDefinition { name: "ALIGN", value: CAT_ALIGN | 0 },
36    KeywordDefinition { name: "AND", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa4 },
37    KeywordDefinition { name: "ASCII", value: CAT_ASCII | 0 },
38    KeywordDefinition { name: "ASL", value: CAT_DIR_IX1_IX | 0x38 },
39    KeywordDefinition { name: "ASLA", value: CAT_INH | 0x48 },
40    KeywordDefinition { name: "ASLX", value: CAT_INH | 0x58 },
41    KeywordDefinition { name: "ASR", value: CAT_DIR_IX1_IX | 0x37 },
42    KeywordDefinition { name: "ASRA", value: CAT_INH | 0x47 },
43    KeywordDefinition { name: "ASRX", value: CAT_INH | 0x57 },
44    KeywordDefinition { name: "BCC", value: CAT_REL | 0x24 },
45    KeywordDefinition { name: "BCLR", value: CAT_BSCX | 0x11 },
46    KeywordDefinition { name: "BCLR0", value: CAT_BSC | 0x11 },
47    KeywordDefinition { name: "BCLR1", value: CAT_BSC | 0x13 },
48    KeywordDefinition { name: "BCLR2", value: CAT_BSC | 0x15 },
49    KeywordDefinition { name: "BCLR3", value: CAT_BSC | 0x17 },
50    KeywordDefinition { name: "BCLR4", value: CAT_BSC | 0x19 },
51    KeywordDefinition { name: "BCLR5", value: CAT_BSC | 0x1b },
52    KeywordDefinition { name: "BCLR6", value: CAT_BSC | 0x1d },
53    KeywordDefinition { name: "BCLR7", value: CAT_BSC | 0x1f },
54    KeywordDefinition { name: "BCS", value: CAT_REL | 0x25 },
55    KeywordDefinition { name: "BEQ", value: CAT_REL | 0x27 },
56    KeywordDefinition { name: "BHCC", value: CAT_REL | 0x28 },
57    KeywordDefinition { name: "BHCS", value: CAT_REL | 0x29 },
58    KeywordDefinition { name: "BHI", value: CAT_REL | 0x22 },
59    KeywordDefinition { name: "BHS", value: CAT_REL | 0x24 },
60    KeywordDefinition { name: "BIH", value: CAT_REL | 0x2f },
61    KeywordDefinition { name: "BIL", value: CAT_REL | 0x2e },
62    KeywordDefinition { name: "BIT", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa5 },
63    KeywordDefinition { name: "BLO", value: CAT_REL | 0x25 },
64    KeywordDefinition { name: "BLS", value: CAT_REL | 0x23 },
65    KeywordDefinition { name: "BMC", value: CAT_REL | 0x2c },
66    KeywordDefinition { name: "BMI", value: CAT_REL | 0x2b },
67    KeywordDefinition { name: "BMS", value: CAT_REL | 0x2d },
68    KeywordDefinition { name: "BNE", value: CAT_REL | 0x26 },
69    KeywordDefinition { name: "BPL", value: CAT_REL | 0x2a },
70    KeywordDefinition { name: "BRA", value: CAT_REL | 0x20 },
71    KeywordDefinition { name: "BRSKIP", value: CAT_INH | 0x21 },
72    KeywordDefinition { name: "BRSKIP2", value: CAT_INH | 0xc5 },
73    KeywordDefinition { name: "BRCLR", value: CAT_BTBX | 0x01 },
74    KeywordDefinition { name: "BRCLR0", value: CAT_BTB | 0x01 },
75    KeywordDefinition { name: "BRCLR1", value: CAT_BTB | 0x03 },
76    KeywordDefinition { name: "BRCLR2", value: CAT_BTB | 0x05 },
77    KeywordDefinition { name: "BRCLR3", value: CAT_BTB | 0x07 },
78    KeywordDefinition { name: "BRCLR4", value: CAT_BTB | 0x09 },
79    KeywordDefinition { name: "BRCLR5", value: CAT_BTB | 0x0b },
80    KeywordDefinition { name: "BRCLR6", value: CAT_BTB | 0x0d },
81    KeywordDefinition { name: "BRCLR7", value: CAT_BTB | 0x0f },
82    KeywordDefinition { name: "BRN", value: CAT_REL | 0x21 },
83    KeywordDefinition { name: "BRSET", value: CAT_BTBX | 0x00 },
84    KeywordDefinition { name: "BRSET0", value: CAT_BTB | 0x00 },
85    KeywordDefinition { name: "BRSET1", value: CAT_BTB | 0x02 },
86    KeywordDefinition { name: "BRSET2", value: CAT_BTB | 0x04 },
87    KeywordDefinition { name: "BRSET3", value: CAT_BTB | 0x06 },
88    KeywordDefinition { name: "BRSET4", value: CAT_BTB | 0x08 },
89    KeywordDefinition { name: "BRSET5", value: CAT_BTB | 0x0a },
90    KeywordDefinition { name: "BRSET6", value: CAT_BTB | 0x0c },
91    KeywordDefinition { name: "BRSET7", value: CAT_BTB | 0x0e },
92    KeywordDefinition { name: "BSET", value: CAT_BSCX | 0x10 },
93    KeywordDefinition { name: "BSET0", value: CAT_BSC | 0x10 },
94    KeywordDefinition { name: "BSET1", value: CAT_BSC | 0x12 },
95    KeywordDefinition { name: "BSET2", value: CAT_BSC | 0x14 },
96    KeywordDefinition { name: "BSET3", value: CAT_BSC | 0x16 },
97    KeywordDefinition { name: "BSET4", value: CAT_BSC | 0x18 },
98    KeywordDefinition { name: "BSET5", value: CAT_BSC | 0x1a },
99    KeywordDefinition { name: "BSET6", value: CAT_BSC | 0x1c },
100    KeywordDefinition { name: "BSET7", value: CAT_BSC | 0x1e },
101    KeywordDefinition { name: "BSR", value: CAT_REL | 0xad },
102    KeywordDefinition { name: "CLC", value: CAT_INH | 0x98 },
103    KeywordDefinition { name: "CLI", value: CAT_INH | 0x9a },
104    KeywordDefinition { name: "CLR", value: CAT_DIR_IX1_IX | 0x3f },
105    KeywordDefinition { name: "CLRA", value: CAT_INH | 0x4f },
106    KeywordDefinition { name: "CLRX", value: CAT_INH | 0x5f },
107    KeywordDefinition { name: "CMP", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa1 },
108    KeywordDefinition { name: "COM", value: CAT_DIR_IX1_IX | 0x33 },
109    KeywordDefinition { name: "COMA", value: CAT_INH | 0x43 },
110    KeywordDefinition { name: "COMX", value: CAT_INH | 0x53 },
111    KeywordDefinition { name: "CPX", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa3 },
112    KeywordDefinition { name: "DB", value: CAT_DB | 0 },
113    KeywordDefinition { name: "DEC", value: CAT_DIR_IX1_IX | 0x3a },
114    KeywordDefinition { name: "DECA", value: CAT_INH | 0x4a },
115    KeywordDefinition { name: "DECX", value: CAT_INH | 0x5a },
116    KeywordDefinition { name: "DS", value: CAT_DS | 0 },
117    KeywordDefinition { name: "DW", value: CAT_DW | 0 },
118    KeywordDefinition { name: "ELSE", value: CAT_ELSE | 0 },
119    KeywordDefinition { name: "ENDIF", value: CAT_ENDIF | 0 },
120    KeywordDefinition { name: "EOR", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa8 },
121    KeywordDefinition { name: "EQU", value: CAT_EQU | 0 },
122    KeywordDefinition { name: "IF", value: CAT_IF | 0 },
123    KeywordDefinition { name: "INC", value: CAT_DIR_IX1_IX | 0x3c },
124    KeywordDefinition { name: "INCA", value: CAT_INH | 0x4c },
125    KeywordDefinition { name: "INCLUDE", value: CAT_INCLUDE | 0 },
126    KeywordDefinition { name: "INCX", value: CAT_INH | 0x5c },
127    KeywordDefinition { name: "JMP", value: CAT_DIR_EXT_IX1_IX1_IX | 0xac },
128    KeywordDefinition { name: "JSR", value: CAT_DIR_EXT_IX1_IX1_IX | 0xad },
129    KeywordDefinition { name: "LDA", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa6 },
130    KeywordDefinition { name: "LDX", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xae },
131    KeywordDefinition { name: "LSL", value: CAT_DIR_IX1_IX | 0x38 },
132    KeywordDefinition { name: "LSLA", value: CAT_INH | 0x48 },
133    KeywordDefinition { name: "LSLX", value: CAT_INH | 0x58 },
134    KeywordDefinition { name: "LSR", value: CAT_DIR_IX1_IX | 0x34 },
135    KeywordDefinition { name: "LSRA", value: CAT_INH | 0x44 },
136    KeywordDefinition { name: "LSRX", value: CAT_INH | 0x54 },
137    KeywordDefinition { name: "MUL", value: CAT_INH | 0x42 },
138    KeywordDefinition { name: "NEG", value: CAT_DIR_IX1_IX | 0x30 },
139    KeywordDefinition { name: "NEGA", value: CAT_INH | 0x40 },
140    KeywordDefinition { name: "NEGX", value: CAT_INH | 0x50 },
141    KeywordDefinition { name: "NOP", value: CAT_INH | 0x9d },
142    KeywordDefinition { name: "ORIGIN", value: CAT_ORIGIN | 0 },
143    KeywordDefinition { name: "ORA", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xaa },
144    KeywordDefinition { name: "ROL", value: CAT_DIR_IX1_IX | 0x39 },
145    KeywordDefinition { name: "ROLA", value: CAT_INH | 0x49 },
146    KeywordDefinition { name: "ROLX", value: CAT_INH | 0x59 },
147    KeywordDefinition { name: "ROR", value: CAT_DIR_IX1_IX | 0x36 },
148    KeywordDefinition { name: "RORA", value: CAT_INH | 0x46 },
149    KeywordDefinition { name: "RORX", value: CAT_INH | 0x56 },
150    KeywordDefinition { name: "RSP", value: CAT_INH | 0x9c },
151    KeywordDefinition { name: "RTI", value: CAT_INH | 0x80 },
152    KeywordDefinition { name: "RTS", value: CAT_INH | 0x81 },
153    KeywordDefinition { name: "SBC", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa2 },
154    KeywordDefinition { name: "SEC", value: CAT_INH | 0x99 },
155    KeywordDefinition { name: "SEI", value: CAT_INH | 0x9b },
156    KeywordDefinition { name: "STA", value: CAT_DIR_EXT_IX1_IX1_IX | 0xa7 },
157    KeywordDefinition { name: "STOP", value: CAT_INH | 0x8e },
158    KeywordDefinition { name: "STX", value: CAT_DIR_EXT_IX1_IX1_IX | 0xaf },
159    KeywordDefinition { name: "SUB", value: CAT_IMM_DIR_EXT_IX1_IX1_IX | 0xa0 },
160    KeywordDefinition { name: "SWI", value: CAT_INH | 0x83 },
161    KeywordDefinition { name: "TAX", value: CAT_INH | 0x97 },
162    KeywordDefinition { name: "TIMEX", value: CAT_TIMEX | 0 },
163    KeywordDefinition { name: "TIMEX6", value: CAT_TIMEX6 | 0 },
164    KeywordDefinition { name: "TST", value: CAT_DIR_IX1_IX | 0x3d },
165    KeywordDefinition { name: "TSTA", value: CAT_INH | 0x4d },
166    KeywordDefinition { name: "TSTX", value: CAT_INH | 0x5d },
167    KeywordDefinition { name: "TXA", value: CAT_INH | 0x9f },
168    KeywordDefinition { name: "WAIT", value: CAT_INH | 0x8f },
169];
170
171pub fn build_keyword_map() -> HashMap<String, u16> {
172    let mut map = HashMap::new();
173    for kw in KEYWORDS {
174        map.insert(kw.name.to_uppercase(), kw.value);
175    }
176    map
177}