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

trunk/src/emu/cpu/m68000/m68kcpu.c
r30714r30715
12891289   return m_direct->read_decrypted_word(address);
12901290}
12911291
1292void 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
12921299void m68000_base_device::init16(address_space &space)
12931300{
12941301   m_space = &space;
r30714r30715
12991306   read8 = m68k_read8_delegate(FUNC(address_space::read_byte), &space);
13001307   read16 = m68k_read16_delegate(FUNC(address_space::read_word), &space);
13011308   read32 = m68k_read32_delegate(FUNC(address_space::read_dword), &space);
1302   write8 = m68k_write8_delegate(FUNC(address_space::write_byte), &space);
1309   write8 = m68k_write8_delegate(FUNC(m68000_base_device::m68000_write_byte), this);
13031310   write16 = m68k_write16_delegate(FUNC(address_space::write_word), &space);
13041311   write32 = m68k_write32_delegate(FUNC(address_space::write_dword), &space);
13051312}
trunk/src/emu/cpu/m68000/m68000.h
r30714r30715
296296      UINT16 read_immediate_16(offs_t address);
297297      UINT16 simple_read_immediate_16(offs_t address);
298298
299      void m68000_write_byte(offs_t address, UINT8 data);
299300
300301      UINT8 read_byte_32_mmu(offs_t address);
301302      void write_byte_32_mmu(offs_t address, UINT8 data);
trunk/src/emu/debug/debugcpu.c
r30714r30715
30063006         mem_mask >>= 8;
30073007      }
30083008
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
30093021      if (space.endianness() == ENDIANNESS_LITTLE)
30103022         address += address_offset;
30113023      else

Previous 199869 Revisions Next


© 1997-2024 The MAME Team