Mercurial > hg-old > index.cgi
diff lwdisasm/lwdisasm.h @ 409:cba03436c720
Checkpoint disassembler
author | lost@l-w.ca |
---|---|
date | Mon, 02 Aug 2010 18:07:04 -0600 |
parents | 2a94b2e64621 |
children |
line wrap: on
line diff
--- a/lwdisasm/lwdisasm.h Mon Aug 02 13:24:07 2010 -0600 +++ b/lwdisasm/lwdisasm.h Mon Aug 02 18:07:04 2010 -0600 @@ -48,7 +48,8 @@ ADDR_IMM32, ADDR_INH, ADDR_RTOR, - ADDR_PSHPUL, + ADDR_PSHPULS, + ADDR_PSHPULU, ADDR_IMM8DIR, ADDR_IMM8IND, ADDR_IMM8EXT, @@ -63,6 +64,47 @@ ADDR_TFMCP }; + +typedef struct rangedata_s rangedata_t; +struct rangedata_s +{ + int min; + int max; + int type; + rangedata_t *next; + rangedata_t *prev; +}; + +typedef struct symbol_s symbol_t; +struct symbol_s +{ + int address; + int section; + char *symbol; + symbol_t *next; +}; + +typedef struct linedata_s linedata_t; +struct linedata_s +{ + int address; + int sectionref; + int length; + int type; + int target; + char *disasm; + uint8_t *bytes; + int isref; + symbol_t *symbol; + linedata_t *next; + linedata_t *prev; +}; +typedef struct instab_s +{ + char *op; // mneumonic + int addrmode; // addressing mode +} instab_t; + typedef struct disasmstate_s { int input_type; @@ -74,16 +116,24 @@ long filelen; // length of the file data int base; // base address (raw) int entry; // entry address + int dpval; // DP value + linedata_t *lhead; // start of lines table + linedata_t *ltail; // end of lines table + rangedata_t *rhead; // start of range table + rangedata_t *rtail; // end of range table + + instab_t *page0; // instruction table 0 + instab_t *page1; // instruction table 1 + instab_t *page2; // instruction table 2 + + int curoff; // current disassembly point + rangedata_t *crange; // current range + + symbol_t *symbols; // symbol tables } disasmstate_t; -typedef struct instab_s -{ - char *op; // mneumonic - int addrmode; // addressing mode -} instab_t; - extern instab_t page0_6809[]; extern instab_t page1_6809[]; extern instab_t page2_6809[]; @@ -92,4 +142,18 @@ extern instab_t page1_6309[]; extern instab_t page2_6309[]; +enum +{ + type_code = 0, + type_data = 1 +}; + +extern void register_range(disasmstate_t *as, int min, int max, int type); +extern rangedata_t *lookup_range(disasmstate_t *as, int addr); +extern int fetch_byte(disasmstate_t *as); +extern linedata_t *disasm_insn(disasmstate_t *as); +extern symbol_t *register_symbol(disasmstate_t *as, int addr, int section, char *symbol); +extern void attach_symbols(disasmstate_t *as); +extern void redisasm_insn(disasmstate_t *as, linedata_t *l); +extern symbol_t *find_symbol(disasmstate_t *as, int addr, int section); #endif // ____lwdisasm_h_seen____