summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/se3208/se3208.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/se3208/se3208.cpp')
-rw-r--r--src/devices/cpu/se3208/se3208.cpp32
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);