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