source: branches/AVR/UInstructionDefinition.pas

Last change on this file was 1, checked in by george, 15 years ago
  • Přidáno: Větve AVR a Z80.
File size: 14.9 KB
Line 
1unit UInstructionDefinition;
2
3interface
4
5type
6 TOperandType = (otNone, otRegister, otConstant, otIOAddress, otDisplacement,
7 otIndirectAddressRegister, otBit, otAddress);
8
9 TOperand = record
10 OpType: TOperandType;
11 Mask: Word;
12 end;
13
14 TInstructionIndex = (iiADC, iiADD, iiADIW, iiAND, iiANDI, iiASR, iiBCLR, iiBLD,
15 iiBRBC, iiBRBS, iiBRCC, iiBRCS, iiBREAK, iiBREQ, iiBRGE, iiBRHC, iiBRHS,
16 iiBRID, iiBRIE, iiBRLO, iiBRLT, iiBRMI, iiBRNE, iiBRPL, iiBRSH, iiBRTC,
17 iiBRTS, iiBRVC, iiBRVS, iiBSET, iiBST, iiCALL, iiCBI, iiCBR, iiCLC, iiCLH,
18 iiCLI, iiCLN, iiCLR, iiCLS, iiCLT, iiCLV, iiCLZ, iiCOM, iiCP, iiCPC, iiCPI,
19 iiCPSE, iiDEC, iiEICALL, iiEIJMP, iiELPM, iiEOR, iiFMUL, iiFMULS, iiFMULSU,
20 iiICALL, iiIJMP, iiIN, iiINC, iiJMP, iiLD, iiLDI, iiLDS, iiLPM, iiLSL,
21 iiLSR, iiMOV, iiMOVW, iiMUL, iiMULS, iiMULSU, iiNEG, iiNOP, iiOR, iiORI,
22 iiOUT, iiPOP, iiPUSH, iiRCALL, iiRET, iiRETI, iiRJMP, iiROL, iiROR, iiSBC,
23 iiSBCI, iiSBI, iiSBIC, iiSBIS, iiSBIW, iiSBR, iiSBRC, iiSBRS, iiSEC, iiSEH,
24 iiSEI, iiSEN, iiSER, iiSES, iiSET, iiSEV, iiSEZ, iiSLEEP, iiSPM, iiST,
25 iiSTS, iiSUB, iiSUBI, iiSWAP, iiTST, iiWDR);
26
27 TInstructionDefinition = record
28 Name: string;
29 Cycles: Byte;
30 Opcode: Word;
31 OpcodeMask: Word;
32 Operands: array [0..1] of TOperand;
33 end;
34
35const
36 Instructions: array[TInstructionIndex] of TInstructionDefinition = (
37 (Name: 'ADC'; Cycles: 1; Opcode: $1c00; OpcodeMask: $fc00;
38 Operands: (
39 (OpType: otRegister; Mask: $01f0),
40 (OpType: otRegister; Mask: $020f)
41 )
42 ),
43 (Name: 'ADD'; Cycles: 1; Opcode: $0c00; OpcodeMask: $fc00;
44 Operands: (
45 (OpType: otRegister; Mask: $01f0),
46 (OpType: otRegister; Mask: $020f)
47 )
48 ),
49 (Name: 'ADIW'; Cycles: 2; Opcode: $9600; OpcodeMask: $ff00;
50 Operands: (
51 (OpType: otIndirectAddressRegister; Mask: $0030),
52 (OpType: otConstant; Mask: $00cf)
53 )
54 ),
55 (Name: 'AND'; Cycles: 1; Opcode: $2000; OpcodeMask: $fc00;
56 Operands: (
57 (OpType: otRegister; Mask: $01f0),
58 (OpType: otRegister; Mask: $020f)
59 )
60 ),
61 (Name: 'ANDI'; Cycles: 1; Opcode: $7000; OpcodeMask: $f000;
62 Operands: (
63 (OpType: otRegister; Mask: $00f0),
64 (OpType: otConstant; Mask: $0f0f)
65 )
66 ),
67 (Name: 'ASR'; Cycles: 1; Opcode: $9405; OpcodeMask: $fe0f;
68 Operands: (
69 (OpType: otRegister; Mask: $01f0),
70 (OpType: otNone; Mask: $0000)
71 )
72 ),
73 (Name: 'BCLR'; Cycles: 1; Opcode: $9488; OpcodeMask: $ff8f;
74 Operands: (
75 (OpType: otBit; Mask: $0070),
76 (OpType: otNone; Mask: $0000)
77 )
78 ),
79 (Name: 'BLD'; Cycles: 1; Opcode: $f800; OpcodeMask: $fe08;
80 Operands: (
81 (OpType: otRegister; Mask: $01f0),
82 (OpType: otBit; Mask: $0007)
83 )
84 ),
85 (Name: 'BRBC'; Cycles: 1; Opcode: $f400; OpcodeMask: $fc00;
86 Operands: (
87 (OpType: otBit; Mask: $0007),
88 (OpType: otConstant; Mask: $03f8)
89 )
90 ),
91 (Name: 'BRBS'; Cycles: 1; Opcode: $f000; OpcodeMask: $fc00;
92 Operands: (
93 (OpType: otBit; Mask: $0007),
94 (OpType: otConstant; Mask: $03f8)
95 )
96 ),
97 (Name: 'BRCC'; Cycles: 1; Opcode: $f400; OpcodeMask: $fc07;
98 Operands: (
99 (OpType: otConstant; Mask: $0cf8),
100 (OpType: otNone; Mask: $0000)
101 )
102 ),
103 (Name: 'BRCS'; Cycles: 1; Opcode: $f000; OpcodeMask: $fc07;
104 Operands: (
105 (OpType: otConstant; Mask: $0cf8),
106 (OpType: otNone; Mask: $0000)
107 )
108 ),
109 (Name: 'BREAK'; Cycles: 1; Opcode: $9598; OpcodeMask: $ffff;
110 Operands: (
111 (OpType: otNone; Mask: $0000),
112 (OpType: otNone; Mask: $0000)
113 )
114 ),
115 (Name: 'BREQ'; Cycles: 1; Opcode: $f001; OpcodeMask: $fc07;
116 Operands: (
117 (OpType: otConstant; Mask: $0cf8),
118 (OpType: otNone; Mask: $0000)
119 )
120 ),
121 (Name: 'BRGE'; Cycles: 1; Opcode: $f404; OpcodeMask: $fc07;
122 Operands: (
123 (OpType: otConstant; Mask: $0cf8),
124 (OpType: otNone; Mask: $0000)
125 )
126 ),
127 (Name: 'BRHC'; Cycles: 1; Opcode: $f405; OpcodeMask: $fc07;
128 Operands: (
129 (OpType: otConstant; Mask: $0cf8),
130 (OpType: otNone; Mask: $0000)
131 )
132 ),
133 (Name: 'BRHS'; Cycles: 1; Opcode: $f005; OpcodeMask: $fc07;
134 Operands: (
135 (OpType: otConstant; Mask: $0cf8),
136 (OpType: otNone; Mask: $0000)
137 )
138 ),
139 (Name: 'BRID'; Cycles: 1; Opcode: $f407; OpcodeMask: $fc07;
140 Operands: (
141 (OpType: otConstant; Mask: $0cf8),
142 (OpType: otNone; Mask: $0000)
143 )
144 ),
145 (Name: 'BRIE'; Cycles: 1; Opcode: $f007; OpcodeMask: $fc07;
146 Operands: (
147 (OpType: otConstant; Mask: $0cf8),
148 (OpType: otNone; Mask: $0000)
149 )
150 ),
151 (Name: 'BRLO'; Cycles: 1; Opcode: $f000; OpcodeMask: $fc07;
152 Operands: (
153 (OpType: otConstant; Mask: $0cf8),
154 (OpType: otNone; Mask: $0000)
155 )
156 ),
157 (Name: 'BRLT'; Cycles: 1; Opcode: $f004; OpcodeMask: $fc07;
158 Operands: (
159 (OpType: otConstant; Mask: $0cf8),
160 (OpType: otNone; Mask: $0000)
161 )
162 ),
163 (Name: 'BRMI'; Cycles: 1; Opcode: $f002; OpcodeMask: $fc07;
164 Operands: (
165 (OpType: otConstant; Mask: $0cf8),
166 (OpType: otNone; Mask: $0000)
167 )
168 ),
169 (Name: 'BRNE'; Cycles: 1; Opcode: $f401; OpcodeMask: $fc07;
170 Operands: (
171 (OpType: otConstant; Mask: $0cf8),
172 (OpType: otNone; Mask: $0000)
173 )
174 ),
175 (Name: 'BRPL'; Cycles: 1; Opcode: $f402; OpcodeMask: $fc07;
176 Operands: (
177 (OpType: otConstant; Mask: $0cf8),
178 (OpType: otNone; Mask: $0000)
179 )
180 ),
181 (Name: 'BRSH'; Cycles: 1; Opcode: $f400; OpcodeMask: $fc07;
182 Operands: (
183 (OpType: otConstant; Mask: $0cf8),
184 (OpType: otNone; Mask: $0000)
185 )
186 ),
187 (Name: 'BRTC'; Cycles: 1; Opcode: $f405; OpcodeMask: $fc07;
188 Operands: (
189 (OpType: otConstant; Mask: $0cf8),
190 (OpType: otNone; Mask: $0000)
191 )
192 ),
193 (Name: 'BRTS'; Cycles: 1; Opcode: $f005; OpcodeMask: $fc07;
194 Operands: (
195 (OpType: otConstant; Mask: $0cf8),
196 (OpType: otNone; Mask: $0000)
197 )
198 ),
199 (Name: 'BRVC'; Cycles: 1; Opcode: $f403; OpcodeMask: $fc07;
200 Operands: (
201 (OpType: otConstant; Mask: $0cf8),
202 (OpType: otNone; Mask: $0000)
203 )
204 ),
205 (Name: 'BRVS'; Cycles: 1; Opcode: $f003; OpcodeMask: $fc07;
206 Operands: (
207 (OpType: otConstant; Mask: $0cf8),
208 (OpType: otNone; Mask: $0000)
209 )
210 ),
211 (Name: 'BSET'; Cycles: 1; Opcode: $9408; OpcodeMask: $ff8f;
212 Operands: (
213 (OpType: otBit; Mask: $0070),
214 (OpType: otNone; Mask: $0000)
215 )
216 ),
217 (Name: 'BST'; Cycles: 1; Opcode: $fa00; OpcodeMask: $fe08;
218 Operands: (
219 (OpType: otRegister; Mask: $01f0),
220 (OpType: otBit; Mask: $0007)
221 )
222 ),
223 (Name: 'CALL'; Cycles: 4; Opcode: $940e; OpcodeMask: $fe0e;
224 Operands: (
225 (OpType: otAddress; Mask: $01f1),
226 (OpType: otNone; Mask: $0000)
227 )
228 ),
229 (Name: 'CBI'; Cycles: 1; Opcode: $9800; OpcodeMask: $ff00;
230 Operands: (
231 (OpType: otIOAddress; Mask: $00f8),
232 (OpType: otBit; Mask: $0007)
233 )
234 ),
235 (Name: 'CBR'; Cycles: 1; Opcode: $9800; OpcodeMask: $ff00;
236 Operands: (
237 (OpType: otIOAddress; Mask: $00f8),
238 (OpType: otBit; Mask: $0007)
239 )
240 ),
241 (Name: 'CLC'; Cycles: 1; Opcode: $9488; OpcodeMask: $ffff;
242 Operands: (
243 (OpType: otNone; Mask: $0000),
244 (OpType: otNone; Mask: $0000)
245 )
246 ),
247 (Name: 'CLH'; Cycles: 1; Opcode: $94d8; OpcodeMask: $ffff;
248 Operands: (
249 (OpType: otNone; Mask: $0000),
250 (OpType: otNone; Mask: $0000)
251 )
252 ),
253 (Name: 'CLI'; Cycles: 1; Opcode: $94f8; OpcodeMask: $ffff;
254 Operands: (
255 (OpType: otNone; Mask: $0000),
256 (OpType: otNone; Mask: $0000)
257 )
258 ),
259 (Name: 'CLN'; Cycles: 1; Opcode: $94a8; OpcodeMask: $ffff;
260 Operands: (
261 (OpType: otNone; Mask: $0000),
262 (OpType: otNone; Mask: $0000)
263 )
264 ),
265 (Name: 'CLR'; Cycles: 1; Opcode: $2400; OpcodeMask: $fc00;
266 Operands: (
267 (OpType: otNone; Mask: $0000),
268 (OpType: otNone; Mask: $0000)
269 )
270 ),
271 (Name: 'CLS'; Cycles: 1; Opcode: $94c8; OpcodeMask: $ffff;
272 Operands: (
273 (OpType: otNone; Mask: $0000),
274 (OpType: otNone; Mask: $0000)
275 )
276 ),
277 (Name: 'CLT'; Cycles: 1; Opcode: $94e8; OpcodeMask: $ffff;
278 Operands: (
279 (OpType: otNone; Mask: $0000),
280 (OpType: otNone; Mask: $0000)
281 )
282 ),
283 (Name: 'CLV'; Cycles: 1; Opcode: $94b8; OpcodeMask: $ffff;
284 Operands: (
285 (OpType: otNone; Mask: $0000),
286 (OpType: otNone; Mask: $0000)
287 )
288 ),
289 (Name: 'CLZ'; Cycles: 1; Opcode: $9498; OpcodeMask: $ffff;
290 Operands: (
291 (OpType: otNone; Mask: $0000),
292 (OpType: otNone; Mask: $0000)
293 )
294 ),
295 (Name: 'COM'; Cycles: 1; Opcode: $9400; OpcodeMask: $fe0f;
296 Operands: (
297 (OpType: otRegister; Mask: $01f0),
298 (OpType: otNone; Mask: $0000)
299 )
300 ),
301 (Name: 'CP'; Cycles: 1; Opcode: $1400; OpcodeMask: $fc00;
302 Operands: (
303 (OpType: otRegister; Mask: $01f0),
304 (OpType: otRegister; Mask: $020f)
305 )
306 ),
307 (Name: 'CPC'; Cycles: 1; Opcode: $0400; OpcodeMask: $fc00;
308 Operands: (
309 (OpType: otRegister; Mask: $01f0),
310 (OpType: otRegister; Mask: $020f)
311 )
312 ),
313 (Name: 'CPI'; Cycles: 1; Opcode: $3000; OpcodeMask: $f000;
314 Operands: (
315 (OpType: otRegister; Mask: $00f0),
316 (OpType: otConstant; Mask: $0f0f)
317 )
318 ),
319 (Name: 'CPSE'; Cycles: 1; Opcode: $1000; OpcodeMask: $fc00;
320 Operands: (
321 (OpType: otRegister; Mask: $01f0),
322 (OpType: otRegister; Mask: $020f)
323 )
324 ),
325 (Name: 'DEC'; Cycles: 1; Opcode: $940a; OpcodeMask: $fe0f;
326 Operands: (
327 (OpType: otRegister; Mask: $01f0),
328 (OpType: otNone; Mask: $0000)
329 )
330 ),
331 (Name: 'EICALL'; Cycles: 1; Opcode: $9519; OpcodeMask: $ffff;
332 Operands: (
333 (OpType: otNone; Mask: $01f0),
334 (OpType: otNone; Mask: $020f)
335 )
336 ),
337 (Name: 'EIJUMP'; Cycles: 1; Opcode: $9419; OpcodeMask: $ffff;
338 Operands: (
339 (OpType: otNone; Mask: $01f0),
340 (OpType: otNone; Mask: $020f)
341 )
342 ),
343 (Name: 'ELPM'; Cycles: 1; Opcode: $95d8; OpcodeMask: $ffff;
344 Operands: (
345 (OpType: otNone; Mask: $01f0),
346 (OpType: otNone; Mask: $020f)
347 )
348 ),
349 (Name: 'ELPM'; Cycles: 1; Opcode: $9006; OpcodeMask: $fe0f;
350 Operands: (
351 (OpType: otRegister; Mask: $01f0),
352 (OpType: otNone; Mask: $020f)
353 )
354 ),
355 (Name: 'ELPM'; Cycles: 1; Opcode: $9007; OpcodeMask: $fe0f;
356 Operands: (
357 (OpType: otRegister; Mask: $01f0),
358 (OpType: otNone; Mask: $020f)
359 )
360 ),
361 (Name: 'EOR'; Cycles: 1; Opcode: $2400; OpcodeMask: $fc00;
362 Operands: (
363 (OpType: otRegister; Mask: $01f0),
364 (OpType: otRegister; Mask: $020f)
365 )
366 ),
367 (Name: 'FMUL'; Cycles: 1; Opcode: $0308; OpcodeMask: $ff88;
368 Operands: (
369 (OpType: otRegister; Mask: $0070),
370 (OpType: otRegister; Mask: $0007)
371 )
372 ),
373 (Name: 'FMULS'; Cycles: 1; Opcode: $0380; OpcodeMask: $ff88;
374 Operands: (
375 (OpType: otRegister; Mask: $0070),
376 (OpType: otRegister; Mask: $0007)
377 )
378 ),
379 (Name: 'FMULSU'; Cycles: 1; Opcode: $0388; OpcodeMask: $fc88;
380 Operands: (
381 (OpType: otRegister; Mask: $0070),
382 (OpType: otRegister; Mask: $0007)
383 )
384 ),
385 (Name: 'ICALL'; Cycles: 1; Opcode: $9509; OpcodeMask: $ffff;
386 Operands: (
387 (OpType: otNone; Mask: $01f0),
388 (OpType: otNone; Mask: $020f)
389 )
390 ),
391 (Name: 'JMP'; Cycles: 1; Opcode: $9409; OpcodeMask: $ffff;
392 Operands: (
393 (OpType: otNone; Mask: $01f0),
394 (OpType: otNone; Mask: $020f)
395 )
396 ),
397 (Name: 'IN'; Cycles: 1; Opcode: $b000; OpcodeMask: $f800;
398 Operands: (
399 (OpType: otRegister; Mask: $01f0),
400 (OpType: otIOAddress; Mask: $060f)
401 )
402 ),
403 (Name: 'INC'; Cycles: 1; Opcode: $9403; OpcodeMask: $fe0f;
404 Operands: (
405 (OpType: otRegister; Mask: $01f0),
406 (OpType: otNone; Mask: $020f)
407 )
408 ),
409 (Name: 'JMP'; Cycles: 1; Opcode: $940c; OpcodeMask: $fe0e;
410 Operands: (
411 (OpType: otRegister; Mask: $01f0),
412 (OpType: otRegister; Mask: $020f)
413 )
414 ),
415 (Name: 'LD'; Cycles: 1; Opcode: $900c; OpcodeMask: $fe0f;
416 Operands: (
417 (OpType: otRegister; Mask: $01f0),
418 (OpType: otNone; Mask: $020f)
419 )
420 ),
421 (Name: 'LD'; Cycles: 1; Opcode: $900d; OpcodeMask: $fe0f;
422 Operands: (
423 (OpType: otRegister; Mask: $01f0),
424 (OpType: otNone; Mask: $020f)
425 )
426 ),
427 (Name: 'LD'; Cycles: 1; Opcode: $900e; OpcodeMask: $fe0f;
428 Operands: (
429 (OpType: otRegister; Mask: $01f0),
430 (OpType: otNone; Mask: $020f)
431 )
432 ),
433 (Name: 'LD'; Cycles: 1; Opcode: $8008; OpcodeMask: $fe0f;
434 Operands: (
435 (OpType: otRegister; Mask: $01f0),
436 (OpType: otNone; Mask: $020f)
437 )
438 ),
439 (Name: 'LD'; Cycles: 1; Opcode: $9009; OpcodeMask: $fe0f;
440 Operands: (
441 (OpType: otRegister; Mask: $01f0),
442 (OpType: otNone; Mask: $020f)
443 )
444 ),
445 (Name: 'LD'; Cycles: 1; Opcode: $900a; OpcodeMask: $fe0f;
446 Operands: (
447 (OpType: otRegister; Mask: $01f0),
448 (OpType: otNone; Mask: $020f)
449 )
450 ),
451 (Name: 'LDD'; Cycles: 1; Opcode: $8008; OpcodeMask: $d208;
452 Operands: (
453 (OpType: otRegister; Mask: $01f0),
454 (OpType: otDisplacement; Mask: $2c07)
455 )
456 ),
457 (Name: 'LD'; Cycles: 1; Opcode: $8000; OpcodeMask: $fe0f;
458 Operands: (
459 (OpType: otRegister; Mask: $01f0),
460 (OpType: otNone; Mask: $020f)
461 )
462 ),
463 (Name: 'LD'; Cycles: 1; Opcode: $9001; OpcodeMask: $fe0f;
464 Operands: (
465 (OpType: otRegister; Mask: $01f0),
466 (OpType: otNone; Mask: $020f)
467 )
468 ),
469 (Name: 'LD'; Cycles: 1; Opcode: $9002; OpcodeMask: $fe0f;
470 Operands: (
471 (OpType: otRegister; Mask: $01f0),
472 (OpType: otNone; Mask: $020f)
473 )
474 ),
475 (Name: 'LDD'; Cycles: 1; Opcode: $8000; OpcodeMask: $d208;
476 Operands: (
477 (OpType: otRegister; Mask: $01f0),
478 (OpType: otDisplacement; Mask: $2c07)
479 )
480 ),
481 (Name: 'LDI'; Cycles: 1; Opcode: $e000; OpcodeMask: $f000;
482 Operands: (
483 (OpType: otRegister; Mask: $00f0),
484 (OpType: otConstant; Mask: $0f0f)
485 )
486 ),
487 );
488
489
490implementation
491
492end.
Note: See TracBrowser for help on using the repository browser.