Mercurial > repos > blastem
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++) |