diff options
Diffstat (limited to 'src/devices/cpu/se3208/se3208.cpp')
-rw-r--r-- | src/devices/cpu/se3208/se3208.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/devices/cpu/se3208/se3208.cpp b/src/devices/cpu/se3208/se3208.cpp index 45c4c38cc86..011cc103909 100644 --- a/src/devices/cpu/se3208/se3208.cpp +++ b/src/devices/cpu/se3208/se3208.cpp @@ -54,22 +54,27 @@ se3208_device::se3208_device(const machine_config &mconfig, const char *tag, dev UINT32 se3208_device::read_dword_unaligned(address_space &space, UINT32 address) { - if (DWORD_ALIGNED(address)) - return space.read_dword(address); - else + switch (address & 3) { - osd_printf_debug("%08x: dword READ unaligned %08x\n", m_PC, address); + case 0: + return space.read_dword(address); + case 1: + case 2: + case 3: + printf("%08x: dword READ unaligned %08x\n", m_PC, address); #if ALLOW_UNALIGNED_DWORD_ACCESS return space.read_byte(address) | space.read_byte(address + 1) << 8 | space.read_byte(address + 2) << 16 | space.read_byte(address + 3) << 24; #else return 0; #endif } + + return 0; } UINT16 se3208_device::read_word_unaligned(address_space &space, UINT32 address) { - if (!WORD_ALIGNED(address)) + if (address & 1) return space.read_byte(address) | space.read_byte(address+1)<<8; else return space.read_word(address); @@ -77,24 +82,31 @@ UINT16 se3208_device::read_word_unaligned(address_space &space, UINT32 address) void se3208_device::write_dword_unaligned(address_space &space, UINT32 address, UINT32 data) { - if (DWORD_ALIGNED(address)) - space.write_dword(address, data); - else + switch (address & 3) { + case 0: + space.write_dword(address, data); + break; + + case 1: + case 2: + case 3: #if ALLOW_UNALIGNED_DWORD_ACCESS space.write_byte(address, data & 0xff); space.write_byte(address + 1, (data >> 8) & 0xff); space.write_byte(address + 2, (data >> 16) & 0xff); space.write_byte(address + 3, (data >> 24) & 0xff); #endif - osd_printf_debug("%08x: dword WRITE unaligned %08x\n", m_PC, address); + printf("%08x: dword WRITE unaligned %08x\n", m_PC, address); + + break; } } void se3208_device::write_word_unaligned(address_space &space, UINT32 address, UINT16 data) { - if (!WORD_ALIGNED(address)) + if (address & 1) { space.write_byte(address, data & 0xff); space.write_byte(address+1, (data>>8)&0xff); |