comparison lwasm/instab.c @ 333:507f442dc71e

Add support for 6800 compatibility instructions. The occasional program uses the 6800 compatibility instructions since they are actually specified by Motorola in at least some documentation. They advertised the 6809 as source compatible with the 6800. This mode is not enabled by default, however. It is my belief that receiving an error when using a non-6809 instruction is more useful since it is unlikely that much 6800 source code is being assembled for the 6809 these days. Nevertheless, the --6809compat option is present for just those purposes so one does not have to resort to using macros (which would work equally well in most cases).
author William Astle <lost@l-w.ca>
date Tue, 15 Apr 2014 10:57:34 -0600
parents b0c9df865b25
children af78bad4922c
comparison
equal deleted inserted replaced
332:26bfe8d557e2 333:507f442dc71e
26 26
27 // inherent 27 // inherent
28 extern PARSEFUNC(insn_parse_inh); 28 extern PARSEFUNC(insn_parse_inh);
29 #define insn_resolve_inh NULL 29 #define insn_resolve_inh NULL
30 extern EMITFUNC(insn_emit_inh); 30 extern EMITFUNC(insn_emit_inh);
31
32 // inherent 6800 mode
33 extern PARSEFUNC(insn_parse_inh6800);
34 #define insn_resolve_inh6800 NULL
35 extern EMITFUNC(insn_emit_inh6800);
31 36
32 // register to register 37 // register to register
33 extern PARSEFUNC(insn_parse_rtor); 38 extern PARSEFUNC(insn_parse_rtor);
34 #define insn_resolve_rtor NULL 39 #define insn_resolve_rtor NULL
35 extern EMITFUNC(insn_emit_rtor); 40 extern EMITFUNC(insn_emit_rtor);
720 { "opt", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal}, 725 { "opt", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal},
721 { "spc", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal}, 726 { "spc", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal},
722 { "ttl", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal}, 727 { "ttl", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal},
723 { ".bank", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal}, 728 { ".bank", { -1, -1, -1, -1 }, pseudo_parse_noop, pseudo_resolve_noop, pseudo_emit_noop, lwasm_insn_normal},
724 729
730 // for 6800 compatibility
731 { "aba", { 0x3404, 0xabe0, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
732 { "cba", { 0x3404, 0xa1e0, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
733 { "clc", { 0x1cfe, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
734 { "clf", { 0x1cbf, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
735 { "cli", { 0x1cef, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
736 { "clif", { 0x1caf, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
737 { "clv", { 0x1cfd, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
738 { "des", { 0x327f, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
739 { "dex", { 0x301f, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
740 { "dey", { 0x313f, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
741 { "ins", { 0x3261, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
742 { "inx", { 0x3001, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
743 { "iny", { 0x3121, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
744 { "sba", { 0x3404, 0xa0e0, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
745 { "sec", { 0x1a01, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
746 { "sef", { 0x1a40, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
747 { "sei", { 0x1a10, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
748 { "seif", { 0x1a50, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
749 { "sev", { 0x1a02, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
750 { "tab", { 0x1f89, 0x4d, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
751 { "tap", { 0x1f8a, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
752 { "tba", { 0x1f98, 0x4d, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
753 { "tpa", { 0x1fa8, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
754 { "tsx", { 0x1f41, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
755 { "txs", { 0x1f14, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
756 { "wai", { 0x3cff, -1, -1, -1 }, insn_parse_inh6800, insn_resolve_inh6800, insn_emit_inh6800, lwasm_insn_is6800 },
757
725 // flag end of table 758 // flag end of table
726 { NULL, { -1, -1, -1, -1 }, NULL, NULL, lwasm_insn_normal} 759 { NULL, { -1, -1, -1, -1 }, NULL, NULL, lwasm_insn_normal}
727 }; 760 };