comparison z80_to_x86.c @ 313:a13329645ea3

Fix terminal instruction detection in disassembler
author Mike Pavone <pavone@retrodev.com>
date Thu, 09 May 2013 19:24:18 -0700
parents cf7ecda060c7
children 54c0e5f22198
comparison
equal deleted inserted replaced
312:cf7ecda060c7 313:a13329645ea3
13 #define ZLIMIT RDI 13 #define ZLIMIT RDI
14 #define SCRATCH1 R13 14 #define SCRATCH1 R13
15 #define SCRATCH2 R14 15 #define SCRATCH2 R14
16 #define CONTEXT RSI 16 #define CONTEXT RSI
17 17
18 //#define DO_DEBUG_PRINT 18 #define DO_DEBUG_PRINT
19 19
20 #ifdef DO_DEBUG_PRINT 20 #ifdef DO_DEBUG_PRINT
21 #define dprintf printf 21 #define dprintf printf
22 #else 22 #else
23 #define dprintf 23 #define dprintf
1631 } 1631 }
1632 } 1632 }
1633 return dst; 1633 return dst;
1634 } 1634 }
1635 1635
1636 uint8_t z80_is_terminal(z80inst * inst)
1637 {
1638 return inst->op == Z80_RET || inst->op == Z80_RETI || inst->op == Z80_RETN || inst->op == Z80_JP
1639 || inst->op == Z80_JR || inst->op == Z80_HALT || (inst->op == Z80_NOP && inst->immed == 42);
1640 }
1641
1642 uint8_t * z80_get_native_address(z80_context * context, uint32_t address) 1636 uint8_t * z80_get_native_address(z80_context * context, uint32_t address)
1643 { 1637 {
1644 native_map_slot *map; 1638 native_map_slot *map;
1645 if (address < 0x4000) { 1639 if (address < 0x4000) {
1646 address &= 0x1FFF; 1640 address &= 0x1FFF;
1647 map = context->static_code_map; 1641 map = context->static_code_map;
1648 } else if (address >= 0x8000) { 1642 } else if (address >= 0x8000) {
1649 address &= 0x7FFF; 1643 address &= 0x7FFF;
1650 map = context->banked_code_map + context->bank_reg; 1644 map = context->banked_code_map + context->bank_reg;
1651 } else { 1645 } else {
1652 dprintf("z80_get_native_address: %X NULL\n", address); 1646 //dprintf("z80_get_native_address: %X NULL\n", address);
1653 return NULL; 1647 return NULL;
1654 } 1648 }
1655 if (!map->base || !map->offsets || map->offsets[address] == INVALID_OFFSET || map->offsets[address] == EXTENSION_WORD) { 1649 if (!map->base || !map->offsets || map->offsets[address] == INVALID_OFFSET || map->offsets[address] == EXTENSION_WORD) {
1656 dprintf("z80_get_native_address: %X NULL\n", address); 1650 //dprintf("z80_get_native_address: %X NULL\n", address);
1657 return NULL; 1651 return NULL;
1658 } 1652 }
1659 dprintf("z80_get_native_address: %X %p\n", address, map->base + map->offsets[address]); 1653 //dprintf("z80_get_native_address: %X %p\n", address, map->base + map->offsets[address]);
1660 return map->base + map->offsets[address]; 1654 return map->base + map->offsets[address];
1661 } 1655 }
1662 1656
1663 uint8_t z80_get_native_inst_size(x86_z80_options * opts, uint32_t address) 1657 uint8_t z80_get_native_inst_size(x86_z80_options * opts, uint32_t address)
1664 { 1658 {