mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
debugcpu: Eliminate direct() from read_opcode [O. Galibert]
This commit is contained in:
parent
d34051484d
commit
8d2a1d4268
@ -705,7 +705,7 @@ u64 debugger_cpu::read_opcode(address_space &space, offs_t address, int size)
|
||||
{
|
||||
device_memory_interface &memory = space.device().memory();
|
||||
|
||||
u64 result = ~u64(0) & (~u64(0) >> (64 - 8*size)), result2;
|
||||
u64 result = ~u64(0) & (~u64(0) >> (64 - 8*size));
|
||||
|
||||
/* keep in logical range */
|
||||
address &= space.logbytemask();
|
||||
@ -729,104 +729,25 @@ u64 debugger_cpu::read_opcode(address_space &space, offs_t address, int size)
|
||||
|
||||
/* keep in physical range */
|
||||
address &= space.bytemask();
|
||||
offs_t addrxor = 0;
|
||||
switch (space.data_width() / 8 * 10 + size)
|
||||
{
|
||||
/* dump opcodes in bytes from a byte-sized bus */
|
||||
case 11:
|
||||
break;
|
||||
|
||||
/* dump opcodes in bytes from a word-sized bus */
|
||||
case 21:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? BYTE_XOR_LE(0) : BYTE_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in words from a word-sized bus */
|
||||
case 22:
|
||||
break;
|
||||
|
||||
/* dump opcodes in bytes from a dword-sized bus */
|
||||
case 41:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? BYTE4_XOR_LE(0) : BYTE4_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in words from a dword-sized bus */
|
||||
case 42:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? WORD_XOR_LE(0) : WORD_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in dwords from a dword-sized bus */
|
||||
case 44:
|
||||
break;
|
||||
|
||||
/* dump opcodes in bytes from a qword-sized bus */
|
||||
case 81:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? BYTE8_XOR_LE(0) : BYTE8_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in words from a qword-sized bus */
|
||||
case 82:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? WORD2_XOR_LE(0) : WORD2_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in dwords from a qword-sized bus */
|
||||
case 84:
|
||||
addrxor = (space.endianness() == ENDIANNESS_LITTLE) ? DWORD_XOR_LE(0) : DWORD_XOR_BE(0);
|
||||
break;
|
||||
|
||||
/* dump opcodes in qwords from a qword-sized bus */
|
||||
case 88:
|
||||
case 86: // sharc case, 48-bits opcodes
|
||||
break;
|
||||
|
||||
default:
|
||||
fatalerror("read_opcode: unknown type = %d\n", space.data_width() / 8 * 10 + size);
|
||||
}
|
||||
|
||||
/* switch off the size and handle unaligned accesses */
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
result = space.direct().read_byte(address, addrxor);
|
||||
result = space.read_byte(address);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
result = space.direct().read_word(address & ~1, addrxor);
|
||||
if (!WORD_ALIGNED(address))
|
||||
{
|
||||
result2 = space.direct().read_word((address & ~1) + 2, addrxor);
|
||||
if (space.endianness() == ENDIANNESS_LITTLE)
|
||||
result = (result >> (8 * (address & 1))) | (result2 << (16 - 8 * (address & 1)));
|
||||
else
|
||||
result = (result << (8 * (address & 1))) | (result2 >> (16 - 8 * (address & 1)));
|
||||
result &= 0xffff;
|
||||
}
|
||||
result = space.read_word_unaligned(address);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
result = space.direct().read_dword(address & ~3, addrxor);
|
||||
if (!DWORD_ALIGNED(address))
|
||||
{
|
||||
result2 = space.direct().read_dword((address & ~3) + 4, addrxor);
|
||||
if (space.endianness() == ENDIANNESS_LITTLE)
|
||||
result = (result >> (8 * (address & 3))) | (result2 << (32 - 8 * (address & 3)));
|
||||
else
|
||||
result = (result << (8 * (address & 3))) | (result2 >> (32 - 8 * (address & 3)));
|
||||
result &= 0xffffffff;
|
||||
}
|
||||
result = space.read_dword_unaligned(address);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
case 6:
|
||||
result = space.direct().read_qword(address & ~7, addrxor);
|
||||
if (!QWORD_ALIGNED(address))
|
||||
{
|
||||
result2 = space.direct().read_qword((address & ~7) + 8, addrxor);
|
||||
if (space.endianness() == ENDIANNESS_LITTLE)
|
||||
result = (result >> (8 * (address & 7))) | (result2 << (64 - 8 * (address & 7)));
|
||||
else
|
||||
result = (result << (8 * (address & 7))) | (result2 >> (64 - 8 * (address & 7)));
|
||||
}
|
||||
case 8:
|
||||
result = space.read_qword_unaligned(address);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user