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);