Mercurial > repos > blastem
comparison z80_to_x86.c @ 279:6be6056735a9
Fix native address lookup in bannked memory area
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 03 May 2013 20:18:28 -0700 |
parents | 765e132edd71 |
children | 7b8a49220e3b |
comparison
equal
deleted
inserted
replaced
278:9578e5dea147 | 279:6be6056735a9 |
---|---|
1419 if (address < 0x4000) { | 1419 if (address < 0x4000) { |
1420 address &= 0x1FFF; | 1420 address &= 0x1FFF; |
1421 map = context->static_code_map; | 1421 map = context->static_code_map; |
1422 } else if (address >= 0x8000) { | 1422 } else if (address >= 0x8000) { |
1423 address &= 0x7FFF; | 1423 address &= 0x7FFF; |
1424 map = context->banked_code_map + (context->bank_reg << 15); | 1424 map = context->banked_code_map + context->bank_reg; |
1425 } else { | 1425 } else { |
1426 dprintf("z80_get_native_address: %X NULL\n", address); | 1426 dprintf("z80_get_native_address: %X NULL\n", address); |
1427 return NULL; | 1427 return NULL; |
1428 } | 1428 } |
1429 if (!map->base || !map->offsets || map->offsets[address] == INVALID_OFFSET || map->offsets[address] == EXTENSION_WORD) { | 1429 if (!map->base || !map->offsets || map->offsets[address] == INVALID_OFFSET || map->offsets[address] == EXTENSION_WORD) { |
1453 opts->ram_inst_sizes[address] = native_size; | 1453 opts->ram_inst_sizes[address] = native_size; |
1454 context->ram_code_flags[(address & 0x1C00) >> 10] |= 1 << ((address & 0x380) >> 7); | 1454 context->ram_code_flags[(address & 0x1C00) >> 10] |= 1 << ((address & 0x380) >> 7); |
1455 context->ram_code_flags[((address + size) & 0x1C00) >> 10] |= 1 << (((address + size) & 0x380) >> 7); | 1455 context->ram_code_flags[((address + size) & 0x1C00) >> 10] |= 1 << (((address + size) & 0x380) >> 7); |
1456 } else if (address >= 0x8000) { | 1456 } else if (address >= 0x8000) { |
1457 address &= 0x7FFF; | 1457 address &= 0x7FFF; |
1458 map = context->banked_code_map + (context->bank_reg << 15); | 1458 map = context->banked_code_map + context->bank_reg; |
1459 if (!map->offsets) { | 1459 if (!map->offsets) { |
1460 map->offsets = malloc(sizeof(int32_t) * 0x8000); | 1460 map->offsets = malloc(sizeof(int32_t) * 0x8000); |
1461 memset(map->offsets, 0xFF, sizeof(int32_t) * 0x8000); | 1461 memset(map->offsets, 0xFF, sizeof(int32_t) * 0x8000); |
1462 } | 1462 } |
1463 } else { | 1463 } else { |
1472 if (address < 0x4000) { | 1472 if (address < 0x4000) { |
1473 address &= 0x1FFF; | 1473 address &= 0x1FFF; |
1474 map = context->static_code_map; | 1474 map = context->static_code_map; |
1475 } else if (address >= 0x8000) { | 1475 } else if (address >= 0x8000) { |
1476 address &= 0x7FFF; | 1476 address &= 0x7FFF; |
1477 map = context->banked_code_map + (context->bank_reg << 15); | 1477 map = context->banked_code_map + context->bank_reg; |
1478 } else { | 1478 } else { |
1479 return; | 1479 return; |
1480 } | 1480 } |
1481 if (!map->offsets) { | 1481 if (!map->offsets) { |
1482 map->offsets = malloc(sizeof(int32_t) * 0x8000); | 1482 map->offsets = malloc(sizeof(int32_t) * 0x8000); |