summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2017-06-24 10:02:45 +0200
committer Olivier Galibert <galibert@pobox.com>2017-06-25 11:15:00 +0200
commit8d2a1d4268e86fc20d9807df9dfe00ea1fb66b37 (patch)
tree48119971790bd78e62f822ee581e7864dc3b1c50
parentd34051484dc39c1911d2b4e96c7a4530f5cb12cd (diff)
debugcpu: Eliminate direct() from read_opcode [O. Galibert]
-rw-r--r--src/emu/debug/debugcpu.cpp91
1 files changed, 6 insertions, 85 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index 084372a4b25..012dd917a40 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -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;
}