Mercurial > hg-old > index.cgi
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lwdisasm/instab.c Mon Aug 02 13:24:07 2010 -0600 @@ -0,0 +1,901 @@ +/* +instab.c + +Copyright © 2010 William Astle + +This file is part of LWTOOLS. + +LWTOOLS is free software: you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <config.h> + +#include <stdlib.h> + +#include "lwdisasm.h" + +/* 6809 instruction table */ + +/* base page */ +instab_t page0_6809[] = +{ + { "neg", ADDR_DIR }, + { NULL }, + { NULL }, + { "com", ADDR_DIR }, + { "lsr", ADDR_DIR }, + { NULL }, + { "ror", ADDR_DIR }, + { "asr", ADDR_DIR }, + { "lsl", ADDR_DIR }, + { "rol", ADDR_DIR }, + { "dec", ADDR_DIR }, + { NULL }, + { "inc", ADDR_DIR }, + { "tst", ADDR_DIR }, + { "jmp", ADDR_DIR }, + { "clr", ADDR_DIR }, + + /* $10 */ + { "", ADDR_PAGE1 }, + { "", ADDR_PAGE2 }, + { "nop", ADDR_INH }, + { "sync", ADDR_INH }, + { NULL }, + { NULL }, + { "lbra", ADDR_REL16 }, + { "lbsr", ADDR_REL16 }, + { NULL }, + { "daa", ADDR_INH }, + { "orcc", ADDR_IMM8 }, + { NULL }, + { "andcc", ADDR_IMM8 }, + { "sex", ADDR_INH }, + { "exg", ADDR_RTOR }, + { "tfr", ADDR_RTOR }, + + /* $20 */ + { "bra", ADDR_REL8 }, + { "brn", ADDR_REL8 }, + { "bhi", ADDR_REL8 }, + { "bls", ADDR_REL8 }, + { "bcc", ADDR_REL8 }, + { "bcs", ADDR_REL8 }, + { "bne", ADDR_REL8 }, + { "beq", ADDR_REL8 }, + { "bvc", ADDR_REL8 }, + { "bvs", ADDR_REL8 }, + { "bpl", ADDR_REL8 }, + { "bmi", ADDR_REL8 }, + { "bge", ADDR_REL8 }, + { "blt", ADDR_REL8 }, + { "bgt", ADDR_REL8 }, + { "ble", ADDR_REL8 }, + + /* $30 */ + { "leax", ADDR_IND }, + { "leay", ADDR_IND }, + { "leas", ADDR_IND }, + { "leau", ADDR_IND }, + { "pshs", ADDR_PSHPUL }, + { "puls", ADDR_PSHPUL }, + { "pshu", ADDR_PSHPUL }, + { "pulu", ADDR_PSHPUL }, + { NULL }, + { "rts", ADDR_INH }, + { "abx", ADDR_INH }, + { "rti", ADDR_INH }, + { "cwai", ADDR_IMM8 }, + { "mul", ADDR_INH }, + { NULL }, + { "swi", ADDR_INH }, + + /* $40 */ + { "nega", ADDR_INH }, + { NULL }, + { NULL }, + { "coma", ADDR_INH }, + { "lsra", ADDR_INH }, + { NULL }, + { "rora", ADDR_INH }, + { "asra", ADDR_INH }, + { "lsla", ADDR_INH }, + { "rola", ADDR_INH }, + { "deca", ADDR_INH }, + { NULL }, + { "inca", ADDR_INH }, + { "tsta", ADDR_INH }, + { NULL }, + { "clra", ADDR_INH }, + + /* $50 */ + { "negb", ADDR_INH }, + { NULL }, + { NULL }, + { "comb", ADDR_INH }, + { "lsrb", ADDR_INH }, + { NULL }, + { "rorb", ADDR_INH }, + { "asrb", ADDR_INH }, + { "lslb", ADDR_INH }, + { "rolb", ADDR_INH }, + { "decb", ADDR_INH }, + { NULL }, + { "incb", ADDR_INH }, + { "tstb", ADDR_INH }, + { NULL }, + { "clrb", ADDR_INH }, + + /* $60 */ + { "neg", ADDR_IND }, + { NULL }, + { NULL }, + { "com", ADDR_IND }, + { "lsr", ADDR_IND }, + { NULL }, + { "ror", ADDR_IND }, + { "asr", ADDR_IND }, + { "lsl", ADDR_IND }, + { "rol", ADDR_IND }, + { "dec", ADDR_IND }, + { NULL }, + { "inc", ADDR_IND }, + { "tst", ADDR_IND }, + { "jmp", ADDR_IND }, + { "clr", ADDR_IND }, + + /* $70 */ + { "neg", ADDR_EXT }, + { NULL }, + { NULL }, + { "com", ADDR_EXT }, + { "lsr", ADDR_EXT }, + { NULL }, + { "ror", ADDR_EXT }, + { "asr", ADDR_EXT }, + { "lsl", ADDR_EXT }, + { "rol", ADDR_EXT }, + { "dec", ADDR_EXT }, + { NULL }, + { "inc", ADDR_EXT }, + { "tst", ADDR_EXT }, + { "jmp", ADDR_EXT }, + { "clr", ADDR_EXT }, + + /* $80 */ + { "suba", ADDR_IMM8 }, + { "cmpa", ADDR_IMM8 }, + { "sbca", ADDR_IMM8 }, + { "subd", ADDR_IMM16 }, + { "anda", ADDR_IMM8 }, + { "bita", ADDR_IMM8 }, + { "lda", ADDR_IMM8 }, + { NULL }, + { "eora", ADDR_IMM8 }, + { "adca", ADDR_IMM8 }, + { "ora", ADDR_IMM8 }, + { "adda", ADDR_IMM8 }, + { "cmpx", ADDR_IMM16 }, + { "bsr", ADDR_REL8 }, + { "ldx", ADDR_IMM16 }, + { NULL }, + + /* $90 */ + { "suba", ADDR_DIR }, + { "cmpa", ADDR_DIR }, + { "sbca", ADDR_DIR }, + { "subd", ADDR_DIR }, + { "anda", ADDR_DIR }, + { "bita", ADDR_DIR }, + { "lda", ADDR_DIR }, + { "sta", ADDR_DIR }, + { "eora", ADDR_DIR }, + { "adca", ADDR_DIR }, + { "ora", ADDR_DIR }, + { "adda", ADDR_DIR }, + { "cmpx", ADDR_DIR }, + { "jsr", ADDR_DIR }, + { "ldx", ADDR_DIR }, + { "stx", ADDR_DIR }, + + /* $A0 */ + { "suba", ADDR_IND }, + { "cmpa", ADDR_IND }, + { "sbca", ADDR_IND }, + { "subd", ADDR_IND }, + { "anda", ADDR_IND }, + { "bita", ADDR_IND }, + { "lda", ADDR_IND }, + { "sta", ADDR_IND }, + { "eora", ADDR_IND }, + { "adca", ADDR_IND }, + { "ora", ADDR_IND }, + { "adda", ADDR_IND }, + { "cmpx", ADDR_IND }, + { "jsr", ADDR_IND }, + { "ldx", ADDR_IND }, + { "stx", ADDR_IND }, + + /* $B0 */ + { "suba", ADDR_EXT }, + { "cmpa", ADDR_EXT }, + { "sbca", ADDR_EXT }, + { "subd", ADDR_EXT }, + { "anda", ADDR_EXT }, + { "bita", ADDR_EXT }, + { "lda", ADDR_EXT }, + { "sta", ADDR_EXT }, + { "eora", ADDR_EXT }, + { "adca", ADDR_EXT }, + { "ora", ADDR_EXT }, + { "adda", ADDR_EXT }, + { "cmpx", ADDR_EXT }, + { "jsr", ADDR_EXT }, + { "ldx", ADDR_EXT }, + { "stx", ADDR_EXT }, + + /* $C0 */ + { "subb", ADDR_IMM8 }, + { "cmpb", ADDR_IMM8 }, + { "sbcb", ADDR_IMM8 }, + { "addd", ADDR_IMM16 }, + { "andb", ADDR_IMM8 }, + { "bitb", ADDR_IMM8 }, + { "ldb", ADDR_IMM8 }, + { NULL }, + { "eorb", ADDR_IMM8 }, + { "adcb", ADDR_IMM8 }, + { "orb", ADDR_IMM8 }, + { "addb", ADDR_IMM8 }, + { "ldd", ADDR_IMM16 }, + { NULL }, + { "ldu", ADDR_IMM16 }, + { NULL }, + + /* $D0 */ + { "subb", ADDR_DIR }, + { "cmpb", ADDR_DIR }, + { "sbcb", ADDR_DIR }, + { "addd", ADDR_DIR }, + { "andb", ADDR_DIR }, + { "bitb", ADDR_DIR }, + { "ldb", ADDR_DIR }, + { "stb", ADDR_DIR }, + { "eorb", ADDR_DIR }, + { "adcb", ADDR_DIR }, + { "orb", ADDR_DIR }, + { "addb", ADDR_DIR }, + { "ldd", ADDR_DIR }, + { "std", ADDR_DIR }, + { "ldu", ADDR_DIR }, + { "stu", ADDR_DIR }, + + /* $E0 */ + { "subb", ADDR_IND }, + { "cmpb", ADDR_IND }, + { "sbcb", ADDR_IND }, + { "addd", ADDR_IND }, + { "andb", ADDR_IND }, + { "bitb", ADDR_IND }, + { "ldb", ADDR_IND }, + { "stb", ADDR_IND }, + { "eorb", ADDR_IND }, + { "adcb", ADDR_IND }, + { "orb", ADDR_IND }, + { "addb", ADDR_IND }, + { "ldd", ADDR_IND }, + { "std", ADDR_IND }, + { "ldu", ADDR_IND }, + { "stu", ADDR_IND }, + + /* $F0 */ + { "subb", ADDR_EXT }, + { "cmpb", ADDR_EXT }, + { "sbcb", ADDR_EXT }, + { "addd", ADDR_EXT }, + { "andb", ADDR_EXT }, + { "bitb", ADDR_EXT }, + { "ldb", ADDR_EXT }, + { "stb", ADDR_EXT }, + { "eorb", ADDR_EXT }, + { "adcb", ADDR_EXT }, + { "orb", ADDR_EXT }, + { "addb", ADDR_EXT }, + { "ldd", ADDR_EXT }, + { "std", ADDR_EXT }, + { "ldu", ADDR_EXT }, + { "stu", ADDR_EXT } +}; + +/* $10 prefix */ +instab_t page1_6809[] = +{ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $10 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $20 */ + { NULL }, + { "lbrn", ADDR_REL16 }, + { "lbhi", ADDR_REL16 }, + { "lbls", ADDR_REL16 }, + { "lbcc", ADDR_REL16 }, + { "lbcs", ADDR_REL16 }, + { "lbne", ADDR_REL16 }, + { "lbeq", ADDR_REL16 }, + { "lbvc", ADDR_REL16 }, + { "lbvs", ADDR_REL16 }, + { "lbpl", ADDR_REL16 }, + { "lbmi", ADDR_REL16 }, + { "lbge", ADDR_REL16 }, + { "lblt", ADDR_REL16 }, + { "lbgt", ADDR_REL16 }, + { "lble", ADDR_REL16 }, + + /* $30 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "swi2", ADDR_INH }, + + /* $40 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $50 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $60 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $70 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $80 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpd", ADDR_IMM16 }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmpy", ADDR_IMM16 }, + { NULL }, + { "ldy", ADDR_IMM16 }, + { NULL }, + + /* $90 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpd", ADDR_DIR }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmpy", ADDR_DIR }, + { NULL }, + { "ldy", ADDR_DIR }, + { "sty", ADDR_DIR }, + + /* $A0 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpd", ADDR_IND }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmpy", ADDR_IND }, + { NULL }, + { "ldy", ADDR_IND }, + { "sty", ADDR_IND }, + + /* $B0 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpd", ADDR_EXT }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmpy", ADDR_EXT }, + { NULL }, + { "ldy", ADDR_EXT }, + { "sty", ADDR_EXT }, + + /* $C0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "lds", ADDR_IMM16 }, + { NULL }, + + /* $D0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "lds", ADDR_DIR }, + { "sts", ADDR_DIR }, + + /* $E0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "lds", ADDR_IND }, + { "sts", ADDR_IND }, + + /* $F0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "lds", ADDR_EXT }, + { "sts", ADDR_EXT } +}; + +/* $11 prefix */ +instab_t page2_6809[] = +{ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $10 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $20 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $30 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "swi3", ADDR_INH }, + + /* $40 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $50 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $60 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $70 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $80 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpu", ADDR_IMM16 }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmps", ADDR_IMM16 }, + { NULL }, + { NULL }, + { NULL }, + + /* $90 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpu", ADDR_DIR }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmps", ADDR_DIR }, + { NULL }, + { NULL }, + { NULL }, + + /* $A0 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpu", ADDR_IND }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmps", ADDR_IND }, + { NULL }, + { NULL }, + { NULL }, + + /* $B0 */ + { NULL }, + { NULL }, + { NULL }, + { "cmpu", ADDR_EXT }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { "cmps", ADDR_EXT }, + { NULL }, + { NULL }, + { NULL }, + + /* $C0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $D0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $E0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + + /* $F0 */ + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL }, + { NULL } +};