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}