diff options
Diffstat (limited to 'src/devices/cpu/m68000/m68kcpu.cpp')
-rw-r--r-- | src/devices/cpu/m68000/m68kcpu.cpp | 212 |
1 files changed, 106 insertions, 106 deletions
diff --git a/src/devices/cpu/m68000/m68kcpu.cpp b/src/devices/cpu/m68000/m68kcpu.cpp index a95025507ca..5088f184e43 100644 --- a/src/devices/cpu/m68000/m68kcpu.cpp +++ b/src/devices/cpu/m68000/m68kcpu.cpp @@ -1305,16 +1305,16 @@ void m68000_base_device::init8(address_space &space, address_space &ospace) { m_space = &space; m_ospace = &ospace; - auto ocache = ospace.cache<0, 0, ENDIANNESS_BIG>(); - auto pspec = space.specific<0, 0, ENDIANNESS_BIG>(); + ospace.cache(m_oprogram8); + space.specific(m_program8); - m_readimm16 = [ocache](offs_t address) -> u16 { return ocache->read_word(address); }; - m_read8 = [pspec](offs_t address) -> u8 { return pspec->read_byte(address); }; - m_read16 = [pspec](offs_t address) -> u16 { return pspec->read_word(address); }; - m_read32 = [pspec](offs_t address) -> u32 { return pspec->read_dword(address); }; - m_write8 = [pspec](offs_t address, u8 data) { pspec->write_byte(address, data); }; - m_write16 = [pspec](offs_t address, u16 data) { pspec->write_word(address, data); }; - m_write32 = [pspec](offs_t address, u32 data) { pspec->write_dword(address, data); }; + m_readimm16 = [this](offs_t address) -> u16 { return m_oprogram8.read_word(address); }; + m_read8 = [this](offs_t address) -> u8 { return m_program8.read_byte(address); }; + m_read16 = [this](offs_t address) -> u16 { return m_program8.read_word(address); }; + m_read32 = [this](offs_t address) -> u32 { return m_program8.read_dword(address); }; + m_write8 = [this](offs_t address, u8 data) { m_program8.write_byte(address, data); }; + m_write16 = [this](offs_t address, u16 data) { m_program8.write_word(address, data); }; + m_write32 = [this](offs_t address, u32 data) { m_program8.write_dword(address, data); }; } /**************************************************************************** @@ -1325,16 +1325,16 @@ void m68000_base_device::init16(address_space &space, address_space &ospace) { m_space = &space; m_ospace = &ospace; - auto ocache = ospace.cache<1, 0, ENDIANNESS_BIG>(); - auto pspec = space.specific<1, 0, ENDIANNESS_BIG>(); + ospace.cache(m_oprogram16); + space.specific(m_program16); - m_readimm16 = [ocache](offs_t address) -> u16 { return ocache->read_word(address); }; - m_read8 = [pspec](offs_t address) -> u8 { return pspec->read_byte(address); }; - m_read16 = [pspec](offs_t address) -> u16 { return pspec->read_word(address); }; - m_read32 = [pspec](offs_t address) -> u32 { return pspec->read_dword(address); }; - m_write8 = [pspec](offs_t address, u8 data) { pspec->write_word(address & ~1, data | (data << 8), address & 1 ? 0x00ff : 0xff00); }; - m_write16 = [pspec](offs_t address, u16 data) { pspec->write_word(address, data); }; - m_write32 = [pspec](offs_t address, u32 data) { pspec->write_dword(address, data); }; + m_readimm16 = [this](offs_t address) -> u16 { return m_oprogram16.read_word(address); }; + m_read8 = [this](offs_t address) -> u8 { return m_program16.read_byte(address); }; + m_read16 = [this](offs_t address) -> u16 { return m_program16.read_word(address); }; + m_read32 = [this](offs_t address) -> u32 { return m_program16.read_dword(address); }; + m_write8 = [this](offs_t address, u8 data) { m_program16.write_word(address & ~1, data | (data << 8), address & 1 ? 0x00ff : 0xff00); }; + m_write16 = [this](offs_t address, u16 data) { m_program16.write_word(address, data); }; + m_write32 = [this](offs_t address, u32 data) { m_program16.write_dword(address, data); }; } /**************************************************************************** @@ -1350,55 +1350,55 @@ void m68000_base_device::init32(address_space &space, address_space &ospace) { m_space = &space; m_ospace = &ospace; - auto ocache = ospace.cache<2, 0, ENDIANNESS_BIG>(); - auto pspec = space.specific<2, 0, ENDIANNESS_BIG>(); - - m_readimm16 = [ocache](offs_t address) -> u16 { return ocache->read_word(address); }; - m_read8 = [pspec](offs_t address) -> u8 { return pspec->read_byte(address); }; - m_read16 = [pspec](offs_t address) -> u16 { return pspec->read_word_unaligned(address); }; - m_read32 = [pspec](offs_t address) -> u32 { return pspec->read_dword_unaligned(address); }; - m_write8 = [pspec](offs_t address, u8 data) { - pspec->write_dword(address & 0xfffffffcU, dword_from_byte(data), 0xff000000U >> 8 * (address & 3)); + ospace.cache(m_oprogram32); + space.specific(m_program32); + + m_readimm16 = [this](offs_t address) -> u16 { return m_oprogram32.read_word(address); }; + m_read8 = [this](offs_t address) -> u8 { return m_program32.read_byte(address); }; + m_read16 = [this](offs_t address) -> u16 { return m_program32.read_word_unaligned(address); }; + m_read32 = [this](offs_t address) -> u32 { return m_program32.read_dword_unaligned(address); }; + m_write8 = [this](offs_t address, u8 data) { + m_program32.write_dword(address & 0xfffffffcU, dword_from_byte(data), 0xff000000U >> 8 * (address & 3)); }; - m_write16 = [pspec](offs_t address, u16 data) { + m_write16 = [this](offs_t address, u16 data) { switch (address & 3) { case 0: - pspec->write_dword(address, dword_from_word(data), 0xffff0000U); + m_program32.write_dword(address, dword_from_word(data), 0xffff0000U); break; case 1: - pspec->write_dword(address - 1, dword_from_unaligned_word(data), 0x00ffff00); + m_program32.write_dword(address - 1, dword_from_unaligned_word(data), 0x00ffff00); break; case 2: - pspec->write_dword(address - 2, dword_from_word(data), 0x0000ffff); + m_program32.write_dword(address - 2, dword_from_word(data), 0x0000ffff); break; case 3: - pspec->write_dword(address - 3, dword_from_unaligned_word(data), 0x000000ff); - pspec->write_dword(address + 1, dword_from_byte(data & 0x00ff), 0xff000000U); + m_program32.write_dword(address - 3, dword_from_unaligned_word(data), 0x000000ff); + m_program32.write_dword(address + 1, dword_from_byte(data & 0x00ff), 0xff000000U); break; } }; - m_write32 = [pspec](offs_t address, u32 data) { + m_write32 = [this](offs_t address, u32 data) { switch (address & 3) { case 0: - pspec->write_dword(address, data, 0xffffffffU); + m_program32.write_dword(address, data, 0xffffffffU); break; case 1: - pspec->write_dword(address - 1, (data & 0xff000000U) | (data & 0xffffff00U) >> 8, 0x00ffffff); - pspec->write_dword(address + 3, dword_from_byte(data & 0x000000ff), 0xff000000U); + m_program32.write_dword(address - 1, (data & 0xff000000U) | (data & 0xffffff00U) >> 8, 0x00ffffff); + m_program32.write_dword(address + 3, dword_from_byte(data & 0x000000ff), 0xff000000U); break; case 2: - pspec->write_dword(address - 2, dword_from_word((data & 0xffff0000U) >> 16), 0x0000ffff); - pspec->write_dword(address + 2, dword_from_word(data & 0x0000ffff), 0xffff0000U); + m_program32.write_dword(address - 2, dword_from_word((data & 0xffff0000U) >> 16), 0x0000ffff); + m_program32.write_dword(address + 2, dword_from_word(data & 0x0000ffff), 0xffff0000U); break; case 3: - pspec->write_dword(address - 3, dword_from_unaligned_word((data & 0xffff0000U) >> 16), 0x000000ff); - pspec->write_dword(address + 1, (data & 0x00ffffff) << 8 | (data & 0xff000000U) >> 24, 0xffffff00U); + m_program32.write_dword(address - 3, dword_from_unaligned_word((data & 0xffff0000U) >> 16), 0x000000ff); + m_program32.write_dword(address + 1, (data & 0x00ffffff) << 8 | (data & 0xff000000U) >> 24, 0xffffff00U); break; } }; @@ -1409,45 +1409,45 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) { m_space = &space; m_ospace = &ospace; - auto ocache = ospace.cache<2, 0, ENDIANNESS_BIG>(); - auto pspec = space.specific<2, 0, ENDIANNESS_BIG>(); + ospace.cache(m_oprogram32); + space.specific(m_program32); - m_readimm16 = [this, ocache](offs_t address) -> u16 { + m_readimm16 = [this](offs_t address) -> u16 { if (m_pmmu_enabled) { address = pmmu_translate_addr(address, 1); if (m_mmu_tmp_buserror_occurred) return ~0; } - return ocache->read_word(address); + return m_oprogram32.read_word(address); }; - m_read8 = [this, pspec](offs_t address) -> u8 { + m_read8 = [this](offs_t address) -> u8 { if (m_pmmu_enabled) { address = pmmu_translate_addr(address, 1); if (m_mmu_tmp_buserror_occurred) return ~0; } - return pspec->read_byte(address); + return m_program32.read_byte(address); }; - m_read16 = [this, pspec](offs_t address) -> u16 { + m_read16 = [this](offs_t address) -> u16 { if (m_pmmu_enabled) { u32 address0 = pmmu_translate_addr(address, 1); if (m_mmu_tmp_buserror_occurred) return ~0; if (WORD_ALIGNED(address)) - return pspec->read_word(address0); + return m_program32.read_word(address0); u32 address1 = pmmu_translate_addr(address + 1, 1); if (m_mmu_tmp_buserror_occurred) return ~0; - u16 result = pspec->read_byte(address0) << 8; - return result | pspec->read_byte(address1); + u16 result = m_program32.read_byte(address0) << 8; + return result | m_program32.read_byte(address1); } - return pspec->read_word_unaligned(address); + return m_program32.read_word_unaligned(address); }; - m_read32 = [this, pspec](offs_t address) -> u32 { + m_read32 = [this](offs_t address) -> u32 { if (m_pmmu_enabled) { u32 address0 = pmmu_translate_addr(address, 1); if (m_mmu_tmp_buserror_occurred) @@ -1456,37 +1456,37 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) // not at page boundary; use default code address = address0; else if (DWORD_ALIGNED(address)) // 0 - return pspec->read_dword(address0); + return m_program32.read_dword(address0); else { u32 address2 = pmmu_translate_addr(address+2, 1); if (m_mmu_tmp_buserror_occurred) return ~0; if (WORD_ALIGNED(address)) { // 2 - u32 result = pspec->read_word(address0) << 16; - return result | pspec->read_word(address2); + u32 result = m_program32.read_word(address0) << 16; + return result | m_program32.read_word(address2); } u32 address1 = pmmu_translate_addr(address+1, 1); u32 address3 = pmmu_translate_addr(address+3, 1); if (m_mmu_tmp_buserror_occurred) return ~0; - u32 result = pspec->read_byte(address0) << 24; - result |= pspec->read_word(address1) << 8; - return result | pspec->read_byte(address3); + u32 result = m_program32.read_byte(address0) << 24; + result |= m_program32.read_word(address1) << 8; + return result | m_program32.read_byte(address3); } } - return pspec->read_dword_unaligned(address); + return m_program32.read_dword_unaligned(address); }; - m_write8 = [this, pspec](offs_t address, u8 data) { + m_write8 = [this](offs_t address, u8 data) { if (m_pmmu_enabled) { address = pmmu_translate_addr(address, 0); if (m_mmu_tmp_buserror_occurred) return; } - pspec->write_dword(address & 0xfffffffcU, dword_from_byte(data), 0xff000000U >> 8 * (address & 3)); + m_program32.write_dword(address & 0xfffffffcU, dword_from_byte(data), 0xff000000U >> 8 * (address & 3)); }; - m_write16 = [this, pspec](offs_t address, u16 data) { + m_write16 = [this](offs_t address, u16 data) { u32 address0 = address; if (m_pmmu_enabled) { address0 = pmmu_translate_addr(address0, 0); @@ -1495,15 +1495,15 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) } switch (address & 3) { case 0: - pspec->write_dword(address0, dword_from_word(data), 0xffff0000U); + m_program32.write_dword(address0, dword_from_word(data), 0xffff0000U); break; case 1: - pspec->write_dword(address0 - 1, dword_from_unaligned_word(data), 0x00ffff00); + m_program32.write_dword(address0 - 1, dword_from_unaligned_word(data), 0x00ffff00); break; case 2: - pspec->write_dword(address0 - 2, dword_from_word(data), 0x0000ffff); + m_program32.write_dword(address0 - 2, dword_from_word(data), 0x0000ffff); break; case 3: @@ -1514,14 +1514,14 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) if (m_mmu_tmp_buserror_occurred) return; } - pspec->write_dword(address0 - 3, dword_from_unaligned_word(data), 0x000000ff); - pspec->write_dword(address1, dword_from_byte(data & 0x00ff), 0xff000000U); + m_program32.write_dword(address0 - 3, dword_from_unaligned_word(data), 0x000000ff); + m_program32.write_dword(address1, dword_from_byte(data & 0x00ff), 0xff000000U); break; } } }; - m_write32 = [this, pspec](offs_t address, u32 data) { + m_write32 = [this](offs_t address, u32 data) { u32 address0 = address; if (m_pmmu_enabled) { address0 = pmmu_translate_addr(address0, 0); @@ -1530,7 +1530,7 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) } switch (address & 3) { case 0: - pspec->write_dword(address0, data, 0xffffffffU); + m_program32.write_dword(address0, data, 0xffffffffU); break; case 1: @@ -1541,8 +1541,8 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) if (m_mmu_tmp_buserror_occurred) return; } - pspec->write_dword(address0 - 1, (data & 0xff000000U) | (data & 0xffffff00U) >> 8, 0x00ffffff); - pspec->write_dword(address3, dword_from_byte(data & 0x000000ff), 0xff000000U); + m_program32.write_dword(address0 - 1, (data & 0xff000000U) | (data & 0xffffff00U) >> 8, 0x00ffffff); + m_program32.write_dword(address3, dword_from_byte(data & 0x000000ff), 0xff000000U); break; } @@ -1554,8 +1554,8 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) if (m_mmu_tmp_buserror_occurred) return; } - pspec->write_dword(address0 - 2, dword_from_word((data & 0xffff0000U) >> 16), 0x0000ffff); - pspec->write_dword(address2, dword_from_word(data & 0x0000ffff), 0xffff0000U); + m_program32.write_dword(address0 - 2, dword_from_word((data & 0xffff0000U) >> 16), 0x0000ffff); + m_program32.write_dword(address2, dword_from_word(data & 0x0000ffff), 0xffff0000U); break; } @@ -1567,8 +1567,8 @@ void m68000_base_device::init32mmu(address_space &space, address_space &ospace) if (m_mmu_tmp_buserror_occurred) return; } - pspec->write_dword(address0 - 3, dword_from_unaligned_word((data & 0xffff0000U) >> 16), 0x000000ff); - pspec->write_dword(address1, (data & 0x00ffffff) << 8 | (data & 0xff000000U) >> 24, 0xffffff00U); + m_program32.write_dword(address0 - 3, dword_from_unaligned_word((data & 0xffff0000U) >> 16), 0x000000ff); + m_program32.write_dword(address1, (data & 0x00ffffff) << 8 | (data & 0xff000000U) >> 24, 0xffffff00U); break; } } @@ -1579,78 +1579,78 @@ void m68000_base_device::init32hmmu(address_space &space, address_space &ospace) { m_space = &space; m_ospace = &ospace; - auto ocache = ospace.cache<2, 0, ENDIANNESS_BIG>(); - auto pspec = space.specific<2, 0, ENDIANNESS_BIG>(); + ospace.cache(m_oprogram32); + space.specific(m_program32); - m_readimm16 = [this, ocache](offs_t address) -> u16 { + m_readimm16 = [this](offs_t address) -> u16 { if (m_hmmu_enabled) address = hmmu_translate_addr(address); - return ocache->read_word(address); + return m_oprogram32.read_word(address); }; - m_read8 = [this, pspec](offs_t address) -> u8 { + m_read8 = [this](offs_t address) -> u8 { if (m_hmmu_enabled) address = hmmu_translate_addr(address); - return pspec->read_byte(address); + return m_program32.read_byte(address); }; - m_read16 = [this, pspec](offs_t address) -> u16 { + m_read16 = [this](offs_t address) -> u16 { if (m_hmmu_enabled) address = hmmu_translate_addr(address); if (WORD_ALIGNED(address)) - return pspec->read_word(address); - u16 result = pspec->read_byte(address) << 8; - return result | pspec->read_byte(address + 1); + return m_program32.read_word(address); + u16 result = m_program32.read_byte(address) << 8; + return result | m_program32.read_byte(address + 1); }; - m_read32 = [this, pspec](offs_t address) -> u32 { + m_read32 = [this](offs_t address) -> u32 { if (m_hmmu_enabled) address = hmmu_translate_addr(address); if (DWORD_ALIGNED(address)) - return pspec->read_dword(address); + return m_program32.read_dword(address); if (WORD_ALIGNED(address)) { - u32 result = pspec->read_word(address) << 16; - return result | pspec->read_word(address + 2); + u32 result = m_program32.read_word(address) << 16; + return result | m_program32.read_word(address + 2); } - u32 result = pspec->read_byte(address) << 24; - result |= pspec->read_word(address + 1) << 8; - return result | pspec->read_byte(address + 3); + u32 result = m_program32.read_byte(address) << 24; + result |= m_program32.read_word(address + 1) << 8; + return result | m_program32.read_byte(address + 3); }; - m_write8 = [this, pspec](offs_t address, u8 data) { + m_write8 = [this](offs_t address, u8 data) { if (m_hmmu_enabled) address = hmmu_translate_addr(address); - pspec->write_byte(address, data); + m_program32.write_byte(address, data); }; - m_write16 = [this, pspec](offs_t address, u16 data) { + m_write16 = [this](offs_t address, u16 data) { if (m_hmmu_enabled) address = hmmu_translate_addr(address); if (WORD_ALIGNED(address)) { - pspec->write_word(address, data); + m_program32.write_word(address, data); return; } - pspec->write_byte(address, data >> 8); - pspec->write_byte(address + 1, data); + m_program32.write_byte(address, data >> 8); + m_program32.write_byte(address + 1, data); }; - m_write32 = [this, pspec](offs_t address, u32 data) { + m_write32 = [this](offs_t address, u32 data) { if (m_hmmu_enabled) address = hmmu_translate_addr(address); if (DWORD_ALIGNED(address)) { - pspec->write_dword(address, data); + m_program32.write_dword(address, data); return; } if (WORD_ALIGNED(address)) { - pspec->write_word(address, data >> 16); - pspec->write_word(address + 2, data); + m_program32.write_word(address, data >> 16); + m_program32.write_word(address + 2, data); return; } - pspec->write_byte(address, data >> 24); - pspec->write_word(address + 1, data >> 8); - pspec->write_byte(address + 3, data); + m_program32.write_byte(address, data >> 24); + m_program32.write_word(address + 1, data >> 8); + m_program32.write_byte(address + 3, data); }; } |