Mercurial > repos > blastem
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; |