comparison dis.c @ 634:4a6ec64acd79

Better support for labels sourced from VOS program module header
author Michael Pavone <pavone@retrodev.com>
date Sat, 11 Oct 2014 22:18:49 -0700
parents a759f4e38488
children 6992a1b07714
comparison
equal deleted inserted replaced
633:a759f4e38488 634:4a6ec64acd79
94 break; 94 break;
95 case MODE_ABSOLUTE: 95 case MODE_ABSOLUTE:
96 case MODE_ABSOLUTE_SHORT: 96 case MODE_ABSOLUTE_SHORT:
97 reference(op->params.immed); 97 reference(op->params.immed);
98 break; 98 break;
99 }
100 }
101
102 int label_fun(char *dst, uint32_t address, void * data)
103 {
104 tern_node * labels = data;
105 char key[MAX_INT_KEY_SIZE];
106 label_names * names = tern_find_ptr(labels, tern_int_key(address & 0xFFFFFF, key));
107 if (names)
108 {
109 return sprintf(dst, "%s", names->labels[0]);
110 } else {
111 return m68k_default_label_fun(dst, address, NULL);
99 } 112 }
100 } 113 }
101 114
102 int main(int argc, char ** argv) 115 int main(int argc, char ** argv)
103 { 116 {
308 for (address = address_off; address < address_end; address+=2) { 321 for (address = address_off; address < address_end; address+=2) {
309 if (is_visited(address)) { 322 if (is_visited(address)) {
310 encoded = filebuf + (address-address_off)/2; 323 encoded = filebuf + (address-address_off)/2;
311 m68k_decode(encoded, &instbuf, address); 324 m68k_decode(encoded, &instbuf, address);
312 if (labels) { 325 if (labels) {
313 m68k_disasm_labels(&instbuf, disbuf); 326 m68k_disasm_labels(&instbuf, disbuf, label_fun, named_labels);
314 char keybuf[MAX_INT_KEY_SIZE]; 327 char keybuf[MAX_INT_KEY_SIZE];
315 label_names * names = tern_find_ptr(named_labels, tern_int_key(address, keybuf)); 328 label_names * names = tern_find_ptr(named_labels, tern_int_key(address, keybuf));
316 if (names) 329 if (names)
317 { 330 {
318 for (int i = 0; i < names->num_labels; i++) 331 for (int i = 0; i < names->num_labels; i++)