Mercurial > hg-old > index.cgi
view lwdisasm/instab.c @ 448:5cccf90bf838 3.0 tip
Fixed bug with complex external references generating invalid relocations in the object file
author | lost@l-w.ca |
---|---|
date | Fri, 05 Nov 2010 22:27:00 -0600 |
parents | cba03436c720 |
children |
line wrap: on
line source
/* 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_PSHPULS }, { "puls", ADDR_PSHPULS }, { "pshu", ADDR_PSHPULU }, { "pulu", ADDR_PSHPULU }, { 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 } };