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____