| Previous | 199869 Revisions | Next |
| r30715 Friday 30th May, 2014 at 04:05:49 UTC by Alex Jackson |
|---|
| m68000: Do what the real M68K does on byte writes. Fix the debugger so watchpoints continue to work as expected [Alex Jackson] |
| [src/emu/cpu/m68000] | m68000.h m68kcpu.c |
| [src/emu/debug] | debugcpu.c |
| r30714 | r30715 | |
|---|---|---|
| 1289 | 1289 | return m_direct->read_decrypted_word(address); |
| 1290 | 1290 | } |
| 1291 | 1291 | |
| 1292 | void m68000_base_device::m68000_write_byte(offs_t address, UINT8 data) | |
| 1293 | { | |
| 1294 | static const UINT16 masks[] = {0xff00, 0x00ff}; | |
| 1295 | ||
| 1296 | m_space->write_word(address & ~1, data | (data << 8), masks[address & 1]); | |
| 1297 | } | |
| 1298 | ||
| 1292 | 1299 | void m68000_base_device::init16(address_space &space) |
| 1293 | 1300 | { |
| 1294 | 1301 | m_space = &space; |
| r30714 | r30715 | |
| 1299 | 1306 | read8 = m68k_read8_delegate(FUNC(address_space::read_byte), &space); |
| 1300 | 1307 | read16 = m68k_read16_delegate(FUNC(address_space::read_word), &space); |
| 1301 | 1308 | read32 = m68k_read32_delegate(FUNC(address_space::read_dword), &space); |
| 1302 | write8 = m68k_write8_delegate(FUNC(a | |
| 1309 | write8 = m68k_write8_delegate(FUNC(m68000_base_device::m68000_write_byte), this); | |
| 1303 | 1310 | write16 = m68k_write16_delegate(FUNC(address_space::write_word), &space); |
| 1304 | 1311 | write32 = m68k_write32_delegate(FUNC(address_space::write_dword), &space); |
| 1305 | 1312 | } |
| r30714 | r30715 | |
|---|---|---|
| 296 | 296 | UINT16 read_immediate_16(offs_t address); |
| 297 | 297 | UINT16 simple_read_immediate_16(offs_t address); |
| 298 | 298 | |
| 299 | void m68000_write_byte(offs_t address, UINT8 data); | |
| 299 | 300 | |
| 300 | 301 | UINT8 read_byte_32_mmu(offs_t address); |
| 301 | 302 | void write_byte_32_mmu(offs_t address, UINT8 data); |
| r30714 | r30715 | |
|---|---|---|
| 3006 | 3006 | mem_mask >>= 8; |
| 3007 | 3007 | } |
| 3008 | 3008 | |
| 3009 | // (1<<(size*8))-1 won't work when size is 8; let's just use a lut | |
| 3010 | static const UINT64 masks[] = {0, | |
| 3011 | 0xff, | |
| 3012 | 0xffff, | |
| 3013 | 0xffffff, | |
| 3014 | 0xffffffff, | |
| 3015 | U64(0xffffffffff), | |
| 3016 | U64(0xffffffffffff), | |
| 3017 | U64(0xffffffffffffff), | |
| 3018 | U64(0xffffffffffffffff)}; | |
| 3019 | value_to_write &= masks[size]; | |
| 3020 | ||
| 3009 | 3021 | if (space.endianness() == ENDIANNESS_LITTLE) |
| 3010 | 3022 | address += address_offset; |
| 3011 | 3023 | else |
| Previous | 199869 Revisions | Next |