comparison lwdisasm/instab.c @ 408:2a94b2e64621

Started creation of lwdisasm
author lost@l-w.ca
date Mon, 02 Aug 2010 13:24:07 -0600
parents
children cba03436c720
comparison
equal deleted inserted replaced
407:b2e007c28b8f 408:2a94b2e64621
1 /*
2 instab.c
3
4 Copyright © 2010 William Astle
5
6 This file is part of LWTOOLS.
7
8 LWTOOLS is free software: you can redistribute it and/or modify it under the
9 terms of the GNU General Public License as published by the Free Software
10 Foundation, either version 3 of the License, or (at your option) any later
11 version.
12
13 This program is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
16 more details.
17
18 You should have received a copy of the GNU General Public License along with
19 this program. If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #include <config.h>
23
24 #include <stdlib.h>
25
26 #include "lwdisasm.h"
27
28 /* 6809 instruction table */
29
30 /* base page */
31 instab_t page0_6809[] =
32 {
33 { "neg", ADDR_DIR },
34 { NULL },
35 { NULL },
36 { "com", ADDR_DIR },
37 { "lsr", ADDR_DIR },
38 { NULL },
39 { "ror", ADDR_DIR },
40 { "asr", ADDR_DIR },
41 { "lsl", ADDR_DIR },
42 { "rol", ADDR_DIR },
43 { "dec", ADDR_DIR },
44 { NULL },
45 { "inc", ADDR_DIR },
46 { "tst", ADDR_DIR },
47 { "jmp", ADDR_DIR },
48 { "clr", ADDR_DIR },
49
50 /* $10 */
51 { "", ADDR_PAGE1 },
52 { "", ADDR_PAGE2 },
53 { "nop", ADDR_INH },
54 { "sync", ADDR_INH },
55 { NULL },
56 { NULL },
57 { "lbra", ADDR_REL16 },
58 { "lbsr", ADDR_REL16 },
59 { NULL },
60 { "daa", ADDR_INH },
61 { "orcc", ADDR_IMM8 },
62 { NULL },
63 { "andcc", ADDR_IMM8 },
64 { "sex", ADDR_INH },
65 { "exg", ADDR_RTOR },
66 { "tfr", ADDR_RTOR },
67
68 /* $20 */
69 { "bra", ADDR_REL8 },
70 { "brn", ADDR_REL8 },
71 { "bhi", ADDR_REL8 },
72 { "bls", ADDR_REL8 },
73 { "bcc", ADDR_REL8 },
74 { "bcs", ADDR_REL8 },
75 { "bne", ADDR_REL8 },
76 { "beq", ADDR_REL8 },
77 { "bvc", ADDR_REL8 },
78 { "bvs", ADDR_REL8 },
79 { "bpl", ADDR_REL8 },
80 { "bmi", ADDR_REL8 },
81 { "bge", ADDR_REL8 },
82 { "blt", ADDR_REL8 },
83 { "bgt", ADDR_REL8 },
84 { "ble", ADDR_REL8 },
85
86 /* $30 */
87 { "leax", ADDR_IND },
88 { "leay", ADDR_IND },
89 { "leas", ADDR_IND },
90 { "leau", ADDR_IND },
91 { "pshs", ADDR_PSHPUL },
92 { "puls", ADDR_PSHPUL },
93 { "pshu", ADDR_PSHPUL },
94 { "pulu", ADDR_PSHPUL },
95 { NULL },
96 { "rts", ADDR_INH },
97 { "abx", ADDR_INH },
98 { "rti", ADDR_INH },
99 { "cwai", ADDR_IMM8 },
100 { "mul", ADDR_INH },
101 { NULL },
102 { "swi", ADDR_INH },
103
104 /* $40 */
105 { "nega", ADDR_INH },
106 { NULL },
107 { NULL },
108 { "coma", ADDR_INH },
109 { "lsra", ADDR_INH },
110 { NULL },
111 { "rora", ADDR_INH },
112 { "asra", ADDR_INH },
113 { "lsla", ADDR_INH },
114 { "rola", ADDR_INH },
115 { "deca", ADDR_INH },
116 { NULL },
117 { "inca", ADDR_INH },
118 { "tsta", ADDR_INH },
119 { NULL },
120 { "clra", ADDR_INH },
121
122 /* $50 */
123 { "negb", ADDR_INH },
124 { NULL },
125 { NULL },
126 { "comb", ADDR_INH },
127 { "lsrb", ADDR_INH },
128 { NULL },
129 { "rorb", ADDR_INH },
130 { "asrb", ADDR_INH },
131 { "lslb", ADDR_INH },
132 { "rolb", ADDR_INH },
133 { "decb", ADDR_INH },
134 { NULL },
135 { "incb", ADDR_INH },
136 { "tstb", ADDR_INH },
137 { NULL },
138 { "clrb", ADDR_INH },
139
140 /* $60 */
141 { "neg", ADDR_IND },
142 { NULL },
143 { NULL },
144 { "com", ADDR_IND },
145 { "lsr", ADDR_IND },
146 { NULL },
147 { "ror", ADDR_IND },
148 { "asr", ADDR_IND },
149 { "lsl", ADDR_IND },
150 { "rol", ADDR_IND },
151 { "dec", ADDR_IND },
152 { NULL },
153 { "inc", ADDR_IND },
154 { "tst", ADDR_IND },
155 { "jmp", ADDR_IND },
156 { "clr", ADDR_IND },
157
158 /* $70 */
159 { "neg", ADDR_EXT },
160 { NULL },
161 { NULL },
162 { "com", ADDR_EXT },
163 { "lsr", ADDR_EXT },
164 { NULL },
165 { "ror", ADDR_EXT },
166 { "asr", ADDR_EXT },
167 { "lsl", ADDR_EXT },
168 { "rol", ADDR_EXT },
169 { "dec", ADDR_EXT },
170 { NULL },
171 { "inc", ADDR_EXT },
172 { "tst", ADDR_EXT },
173 { "jmp", ADDR_EXT },
174 { "clr", ADDR_EXT },
175
176 /* $80 */
177 { "suba", ADDR_IMM8 },
178 { "cmpa", ADDR_IMM8 },
179 { "sbca", ADDR_IMM8 },
180 { "subd", ADDR_IMM16 },
181 { "anda", ADDR_IMM8 },
182 { "bita", ADDR_IMM8 },
183 { "lda", ADDR_IMM8 },
184 { NULL },
185 { "eora", ADDR_IMM8 },
186 { "adca", ADDR_IMM8 },
187 { "ora", ADDR_IMM8 },
188 { "adda", ADDR_IMM8 },
189 { "cmpx", ADDR_IMM16 },
190 { "bsr", ADDR_REL8 },
191 { "ldx", ADDR_IMM16 },
192 { NULL },
193
194 /* $90 */
195 { "suba", ADDR_DIR },
196 { "cmpa", ADDR_DIR },
197 { "sbca", ADDR_DIR },
198 { "subd", ADDR_DIR },
199 { "anda", ADDR_DIR },
200 { "bita", ADDR_DIR },
201 { "lda", ADDR_DIR },
202 { "sta", ADDR_DIR },
203 { "eora", ADDR_DIR },
204 { "adca", ADDR_DIR },
205 { "ora", ADDR_DIR },
206 { "adda", ADDR_DIR },
207 { "cmpx", ADDR_DIR },
208 { "jsr", ADDR_DIR },
209 { "ldx", ADDR_DIR },
210 { "stx", ADDR_DIR },
211
212 /* $A0 */
213 { "suba", ADDR_IND },
214 { "cmpa", ADDR_IND },
215 { "sbca", ADDR_IND },
216 { "subd", ADDR_IND },
217 { "anda", ADDR_IND },
218 { "bita", ADDR_IND },
219 { "lda", ADDR_IND },
220 { "sta", ADDR_IND },
221 { "eora", ADDR_IND },
222 { "adca", ADDR_IND },
223 { "ora", ADDR_IND },
224 { "adda", ADDR_IND },
225 { "cmpx", ADDR_IND },
226 { "jsr", ADDR_IND },
227 { "ldx", ADDR_IND },
228 { "stx", ADDR_IND },
229
230 /* $B0 */
231 { "suba", ADDR_EXT },
232 { "cmpa", ADDR_EXT },
233 { "sbca", ADDR_EXT },
234 { "subd", ADDR_EXT },
235 { "anda", ADDR_EXT },
236 { "bita", ADDR_EXT },
237 { "lda", ADDR_EXT },
238 { "sta", ADDR_EXT },
239 { "eora", ADDR_EXT },
240 { "adca", ADDR_EXT },
241 { "ora", ADDR_EXT },
242 { "adda", ADDR_EXT },
243 { "cmpx", ADDR_EXT },
244 { "jsr", ADDR_EXT },
245 { "ldx", ADDR_EXT },
246 { "stx", ADDR_EXT },
247
248 /* $C0 */
249 { "subb", ADDR_IMM8 },
250 { "cmpb", ADDR_IMM8 },
251 { "sbcb", ADDR_IMM8 },
252 { "addd", ADDR_IMM16 },
253 { "andb", ADDR_IMM8 },
254 { "bitb", ADDR_IMM8 },
255 { "ldb", ADDR_IMM8 },
256 { NULL },
257 { "eorb", ADDR_IMM8 },
258 { "adcb", ADDR_IMM8 },
259 { "orb", ADDR_IMM8 },
260 { "addb", ADDR_IMM8 },
261 { "ldd", ADDR_IMM16 },
262 { NULL },
263 { "ldu", ADDR_IMM16 },
264 { NULL },
265
266 /* $D0 */
267 { "subb", ADDR_DIR },
268 { "cmpb", ADDR_DIR },
269 { "sbcb", ADDR_DIR },
270 { "addd", ADDR_DIR },
271 { "andb", ADDR_DIR },
272 { "bitb", ADDR_DIR },
273 { "ldb", ADDR_DIR },
274 { "stb", ADDR_DIR },
275 { "eorb", ADDR_DIR },
276 { "adcb", ADDR_DIR },
277 { "orb", ADDR_DIR },
278 { "addb", ADDR_DIR },
279 { "ldd", ADDR_DIR },
280 { "std", ADDR_DIR },
281 { "ldu", ADDR_DIR },
282 { "stu", ADDR_DIR },
283
284 /* $E0 */
285 { "subb", ADDR_IND },
286 { "cmpb", ADDR_IND },
287 { "sbcb", ADDR_IND },
288 { "addd", ADDR_IND },
289 { "andb", ADDR_IND },
290 { "bitb", ADDR_IND },
291 { "ldb", ADDR_IND },
292 { "stb", ADDR_IND },
293 { "eorb", ADDR_IND },
294 { "adcb", ADDR_IND },
295 { "orb", ADDR_IND },
296 { "addb", ADDR_IND },
297 { "ldd", ADDR_IND },
298 { "std", ADDR_IND },
299 { "ldu", ADDR_IND },
300 { "stu", ADDR_IND },
301
302 /* $F0 */
303 { "subb", ADDR_EXT },
304 { "cmpb", ADDR_EXT },
305 { "sbcb", ADDR_EXT },
306 { "addd", ADDR_EXT },
307 { "andb", ADDR_EXT },
308 { "bitb", ADDR_EXT },
309 { "ldb", ADDR_EXT },
310 { "stb", ADDR_EXT },
311 { "eorb", ADDR_EXT },
312 { "adcb", ADDR_EXT },
313 { "orb", ADDR_EXT },
314 { "addb", ADDR_EXT },
315 { "ldd", ADDR_EXT },
316 { "std", ADDR_EXT },
317 { "ldu", ADDR_EXT },
318 { "stu", ADDR_EXT }
319 };
320
321 /* $10 prefix */
322 instab_t page1_6809[] =
323 {
324 { NULL },
325 { NULL },
326 { NULL },
327 { NULL },
328 { NULL },
329 { NULL },
330 { NULL },
331 { NULL },
332 { NULL },
333 { NULL },
334 { NULL },
335 { NULL },
336 { NULL },
337 { NULL },
338 { NULL },
339 { NULL },
340
341 /* $10 */
342 { NULL },
343 { NULL },
344 { NULL },
345 { NULL },
346 { NULL },
347 { NULL },
348 { NULL },
349 { NULL },
350 { NULL },
351 { NULL },
352 { NULL },
353 { NULL },
354 { NULL },
355 { NULL },
356 { NULL },
357 { NULL },
358
359 /* $20 */
360 { NULL },
361 { "lbrn", ADDR_REL16 },
362 { "lbhi", ADDR_REL16 },
363 { "lbls", ADDR_REL16 },
364 { "lbcc", ADDR_REL16 },
365 { "lbcs", ADDR_REL16 },
366 { "lbne", ADDR_REL16 },
367 { "lbeq", ADDR_REL16 },
368 { "lbvc", ADDR_REL16 },
369 { "lbvs", ADDR_REL16 },
370 { "lbpl", ADDR_REL16 },
371 { "lbmi", ADDR_REL16 },
372 { "lbge", ADDR_REL16 },
373 { "lblt", ADDR_REL16 },
374 { "lbgt", ADDR_REL16 },
375 { "lble", ADDR_REL16 },
376
377 /* $30 */
378 { NULL },
379 { NULL },
380 { NULL },
381 { NULL },
382 { NULL },
383 { NULL },
384 { NULL },
385 { NULL },
386 { NULL },
387 { NULL },
388 { NULL },
389 { NULL },
390 { NULL },
391 { NULL },
392 { NULL },
393 { "swi2", ADDR_INH },
394
395 /* $40 */
396 { NULL },
397 { NULL },
398 { NULL },
399 { NULL },
400 { NULL },
401 { NULL },
402 { NULL },
403 { NULL },
404 { NULL },
405 { NULL },
406 { NULL },
407 { NULL },
408 { NULL },
409 { NULL },
410 { NULL },
411 { NULL },
412
413 /* $50 */
414 { NULL },
415 { NULL },
416 { NULL },
417 { NULL },
418 { NULL },
419 { NULL },
420 { NULL },
421 { NULL },
422 { NULL },
423 { NULL },
424 { NULL },
425 { NULL },
426 { NULL },
427 { NULL },
428 { NULL },
429 { NULL },
430
431 /* $60 */
432 { NULL },
433 { NULL },
434 { NULL },
435 { NULL },
436 { NULL },
437 { NULL },
438 { NULL },
439 { NULL },
440 { NULL },
441 { NULL },
442 { NULL },
443 { NULL },
444 { NULL },
445 { NULL },
446 { NULL },
447 { NULL },
448
449 /* $70 */
450 { NULL },
451 { NULL },
452 { NULL },
453 { NULL },
454 { NULL },
455 { NULL },
456 { NULL },
457 { NULL },
458 { NULL },
459 { NULL },
460 { NULL },
461 { NULL },
462 { NULL },
463 { NULL },
464 { NULL },
465 { NULL },
466
467 /* $80 */
468 { NULL },
469 { NULL },
470 { NULL },
471 { "cmpd", ADDR_IMM16 },
472 { NULL },
473 { NULL },
474 { NULL },
475 { NULL },
476 { NULL },
477 { NULL },
478 { NULL },
479 { NULL },
480 { "cmpy", ADDR_IMM16 },
481 { NULL },
482 { "ldy", ADDR_IMM16 },
483 { NULL },
484
485 /* $90 */
486 { NULL },
487 { NULL },
488 { NULL },
489 { "cmpd", ADDR_DIR },
490 { NULL },
491 { NULL },
492 { NULL },
493 { NULL },
494 { NULL },
495 { NULL },
496 { NULL },
497 { NULL },
498 { "cmpy", ADDR_DIR },
499 { NULL },
500 { "ldy", ADDR_DIR },
501 { "sty", ADDR_DIR },
502
503 /* $A0 */
504 { NULL },
505 { NULL },
506 { NULL },
507 { "cmpd", ADDR_IND },
508 { NULL },
509 { NULL },
510 { NULL },
511 { NULL },
512 { NULL },
513 { NULL },
514 { NULL },
515 { NULL },
516 { "cmpy", ADDR_IND },
517 { NULL },
518 { "ldy", ADDR_IND },
519 { "sty", ADDR_IND },
520
521 /* $B0 */
522 { NULL },
523 { NULL },
524 { NULL },
525 { "cmpd", ADDR_EXT },
526 { NULL },
527 { NULL },
528 { NULL },
529 { NULL },
530 { NULL },
531 { NULL },
532 { NULL },
533 { NULL },
534 { "cmpy", ADDR_EXT },
535 { NULL },
536 { "ldy", ADDR_EXT },
537 { "sty", ADDR_EXT },
538
539 /* $C0 */
540 { NULL },
541 { NULL },
542 { NULL },
543 { NULL },
544 { NULL },
545 { NULL },
546 { NULL },
547 { NULL },
548 { NULL },
549 { NULL },
550 { NULL },
551 { NULL },
552 { NULL },
553 { NULL },
554 { "lds", ADDR_IMM16 },
555 { NULL },
556
557 /* $D0 */
558 { NULL },
559 { NULL },
560 { NULL },
561 { NULL },
562 { NULL },
563 { NULL },
564 { NULL },
565 { NULL },
566 { NULL },
567 { NULL },
568 { NULL },
569 { NULL },
570 { NULL },
571 { NULL },
572 { "lds", ADDR_DIR },
573 { "sts", ADDR_DIR },
574
575 /* $E0 */
576 { NULL },
577 { NULL },
578 { NULL },
579 { NULL },
580 { NULL },
581 { NULL },
582 { NULL },
583 { NULL },
584 { NULL },
585 { NULL },
586 { NULL },
587 { NULL },
588 { NULL },
589 { NULL },
590 { "lds", ADDR_IND },
591 { "sts", ADDR_IND },
592
593 /* $F0 */
594 { NULL },
595 { NULL },
596 { NULL },
597 { NULL },
598 { NULL },
599 { NULL },
600 { NULL },
601 { NULL },
602 { NULL },
603 { NULL },
604 { NULL },
605 { NULL },
606 { NULL },
607 { NULL },
608 { "lds", ADDR_EXT },
609 { "sts", ADDR_EXT }
610 };
611
612 /* $11 prefix */
613 instab_t page2_6809[] =
614 {
615 { NULL },
616 { NULL },
617 { NULL },
618 { NULL },
619 { NULL },
620 { NULL },
621 { NULL },
622 { NULL },
623 { NULL },
624 { NULL },
625 { NULL },
626 { NULL },
627 { NULL },
628 { NULL },
629 { NULL },
630 { NULL },
631
632 /* $10 */
633 { NULL },
634 { NULL },
635 { NULL },
636 { NULL },
637 { NULL },
638 { NULL },
639 { NULL },
640 { NULL },
641 { NULL },
642 { NULL },
643 { NULL },
644 { NULL },
645 { NULL },
646 { NULL },
647 { NULL },
648 { NULL },
649
650 /* $20 */
651 { NULL },
652 { NULL },
653 { NULL },
654 { NULL },
655 { NULL },
656 { NULL },
657 { NULL },
658 { NULL },
659 { NULL },
660 { NULL },
661 { NULL },
662 { NULL },
663 { NULL },
664 { NULL },
665 { NULL },
666 { NULL },
667
668 /* $30 */
669 { NULL },
670 { NULL },
671 { NULL },
672 { NULL },
673 { NULL },
674 { NULL },
675 { NULL },
676 { NULL },
677 { NULL },
678 { NULL },
679 { NULL },
680 { NULL },
681 { NULL },
682 { NULL },
683 { NULL },
684 { "swi3", ADDR_INH },
685
686 /* $40 */
687 { NULL },
688 { NULL },
689 { NULL },
690 { NULL },
691 { NULL },
692 { NULL },
693 { NULL },
694 { NULL },
695 { NULL },
696 { NULL },
697 { NULL },
698 { NULL },
699 { NULL },
700 { NULL },
701 { NULL },
702 { NULL },
703
704 /* $50 */
705 { NULL },
706 { NULL },
707 { NULL },
708 { NULL },
709 { NULL },
710 { NULL },
711 { NULL },
712 { NULL },
713 { NULL },
714 { NULL },
715 { NULL },
716 { NULL },
717 { NULL },
718 { NULL },
719 { NULL },
720 { NULL },
721
722 /* $60 */
723 { NULL },
724 { NULL },
725 { NULL },
726 { NULL },
727 { NULL },
728 { NULL },
729 { NULL },
730 { NULL },
731 { NULL },
732 { NULL },
733 { NULL },
734 { NULL },
735 { NULL },
736 { NULL },
737 { NULL },
738 { NULL },
739
740 /* $70 */
741 { NULL },
742 { NULL },
743 { NULL },
744 { NULL },
745 { NULL },
746 { NULL },
747 { NULL },
748 { NULL },
749 { NULL },
750 { NULL },
751 { NULL },
752 { NULL },
753 { NULL },
754 { NULL },
755 { NULL },
756 { NULL },
757
758 /* $80 */
759 { NULL },
760 { NULL },
761 { NULL },
762 { "cmpu", ADDR_IMM16 },
763 { NULL },
764 { NULL },
765 { NULL },
766 { NULL },
767 { NULL },
768 { NULL },
769 { NULL },
770 { NULL },
771 { "cmps", ADDR_IMM16 },
772 { NULL },
773 { NULL },
774 { NULL },
775
776 /* $90 */
777 { NULL },
778 { NULL },
779 { NULL },
780 { "cmpu", ADDR_DIR },
781 { NULL },
782 { NULL },
783 { NULL },
784 { NULL },
785 { NULL },
786 { NULL },
787 { NULL },
788 { NULL },
789 { "cmps", ADDR_DIR },
790 { NULL },
791 { NULL },
792 { NULL },
793
794 /* $A0 */
795 { NULL },
796 { NULL },
797 { NULL },
798 { "cmpu", ADDR_IND },
799 { NULL },
800 { NULL },
801 { NULL },
802 { NULL },
803 { NULL },
804 { NULL },
805 { NULL },
806 { NULL },
807 { "cmps", ADDR_IND },
808 { NULL },
809 { NULL },
810 { NULL },
811
812 /* $B0 */
813 { NULL },
814 { NULL },
815 { NULL },
816 { "cmpu", ADDR_EXT },
817 { NULL },
818 { NULL },
819 { NULL },
820 { NULL },
821 { NULL },
822 { NULL },
823 { NULL },
824 { NULL },
825 { "cmps", ADDR_EXT },
826 { NULL },
827 { NULL },
828 { NULL },
829
830 /* $C0 */
831 { NULL },
832 { NULL },
833 { NULL },
834 { NULL },
835 { NULL },
836 { NULL },
837 { NULL },
838 { NULL },
839 { NULL },
840 { NULL },
841 { NULL },
842 { NULL },
843 { NULL },
844 { NULL },
845 { NULL },
846 { NULL },
847
848 /* $D0 */
849 { NULL },
850 { NULL },
851 { NULL },
852 { NULL },
853 { NULL },
854 { NULL },
855 { NULL },
856 { NULL },
857 { NULL },
858 { NULL },
859 { NULL },
860 { NULL },
861 { NULL },
862 { NULL },
863 { NULL },
864 { NULL },
865
866 /* $E0 */
867 { NULL },
868 { NULL },
869 { NULL },
870 { NULL },
871 { NULL },
872 { NULL },
873 { NULL },
874 { NULL },
875 { NULL },
876 { NULL },
877 { NULL },
878 { NULL },
879 { NULL },
880 { NULL },
881 { NULL },
882 { NULL },
883
884 /* $F0 */
885 { NULL },
886 { NULL },
887 { NULL },
888 { NULL },
889 { NULL },
890 { NULL },
891 { NULL },
892 { NULL },
893 { NULL },
894 { NULL },
895 { NULL },
896 { NULL },
897 { NULL },
898 { NULL },
899 { NULL },
900 { NULL }
901 };