comparison dis.c @ 2053:3414a4423de1 segacd

Merge from default
author Michael Pavone <pavone@retrodev.com>
date Sat, 15 Jan 2022 13:15:21 -0800
parents 460e14497120
children 1ff67ce37085
comparison
equal deleted inserted replaced
1692:5dacaef602a7 2053:3414a4423de1
267 fclose(f); 267 fclose(f);
268 for(cur = filebuf; cur - filebuf < (filesize/2); ++cur) 268 for(cur = filebuf; cur - filebuf < (filesize/2); ++cur)
269 { 269 {
270 *cur = (*cur >> 8) | (*cur << 8); 270 *cur = (*cur >> 8) | (*cur << 8);
271 } 271 }
272 uint32_t start = filebuf[2] << 16 | filebuf[3]; 272 if (!address_off) {
273 uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2]; 273 uint32_t start = filebuf[2] << 16 | filebuf[3];
274 uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2]; 274 uint32_t int_2 = filebuf[0x68/2] << 16 | filebuf[0x6A/2];
275 uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2]; 275 uint32_t int_4 = filebuf[0x70/2] << 16 | filebuf[0x72/2];
276 named_labels = add_label(named_labels, "start", start); 276 uint32_t int_6 = filebuf[0x78/2] << 16 | filebuf[0x7A/2];
277 named_labels = add_label(named_labels, "int_2", int_2); 277 named_labels = add_label(named_labels, "start", start);
278 named_labels = add_label(named_labels, "int_4", int_4); 278 named_labels = add_label(named_labels, "int_2", int_2);
279 named_labels = add_label(named_labels, "int_6", int_6); 279 named_labels = add_label(named_labels, "int_4", int_4);
280 if (!def || !only) { 280 named_labels = add_label(named_labels, "int_6", int_6);
281 def = defer(start, def); 281 if (!def || !only) {
282 def = defer(int_2, def); 282 def = defer(start, def);
283 def = defer(int_4, def); 283 def = defer(int_2, def);
284 def = defer(int_6, def); 284 def = defer(int_4, def);
285 def = defer(int_6, def);
286 }
285 } 287 }
286 } 288 }
287 uint16_t *encoded, *next; 289 uint16_t *encoded, *next;
288 uint32_t size, tmp_addr; 290 uint32_t size, tmp_addr;
289 uint32_t address; 291 uint32_t address;
290 while(def) { 292 while(def) {
291 do { 293 do {
292 encoded = NULL; 294 encoded = NULL;
293 address = def->address; 295 address = def->address;
294 if (!is_visited(address)) { 296 if (!is_visited(address)) {
295 encoded = filebuf + (address - address_off)/2; 297 encoded = filebuf + ((address & 0xFFFFFF) - address_off)/2;
296 } 298 }
297 tmpd = def; 299 tmpd = def;
298 def = def->next; 300 def = def->next;
299 free(tmpd); 301 free(tmpd);
300 } while(def && encoded == NULL); 302 } while(def && encoded == NULL);
301 if (!encoded) { 303 if (!encoded) {
302 break; 304 break;
303 } 305 }
304 for(;;) { 306 for(;;) {
305 if (address > address_end || address < address_off) { 307 if ((address & 0xFFFFFF) > address_end || address < address_off) {
306 break; 308 break;
307 } 309 }
308 visit(address); 310 visit(address);
309 next = m68k_decode(encoded, &instbuf, address); 311 next = m68k_decode(encoded, &instbuf, address);
310 address += (next-encoded)*2; 312 address += (next-encoded)*2;