diff options
Diffstat (limited to 'src/devices/bus/nes/nes_slot.cpp')
-rw-r--r-- | src/devices/bus/nes/nes_slot.cpp | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/src/devices/bus/nes/nes_slot.cpp b/src/devices/bus/nes/nes_slot.cpp index c3d036b8493..ab8235ccc55 100644 --- a/src/devices/bus/nes/nes_slot.cpp +++ b/src/devices/bus/nes/nes_slot.cpp @@ -592,6 +592,12 @@ void device_nes_cart_interface::reset_cpu() m_maincpu->set_pc(0xfffc); } +void device_nes_cart_interface::poke(offs_t offset, uint8_t data) +{ + // even worse hack + m_maincpu->space(AS_PROGRAM).write_byte(offset, data); +} + //------------------------------------------------- // Other helpers //------------------------------------------------- @@ -624,7 +630,7 @@ uint8_t device_nes_cart_interface::account_bus_conflict(uint32_t offset, uint8_t // PPU accessors //------------------------------------------------- -WRITE8_MEMBER(device_nes_cart_interface::chr_w) +void device_nes_cart_interface::chr_w(offs_t offset, uint8_t data) { int bank = offset >> 10; @@ -632,14 +638,14 @@ WRITE8_MEMBER(device_nes_cart_interface::chr_w) m_chr_access[bank][offset & 0x3ff] = data; } -READ8_MEMBER(device_nes_cart_interface::chr_r) +uint8_t device_nes_cart_interface::chr_r(offs_t offset) { int bank = offset >> 10; return m_chr_access[bank][offset & 0x3ff]; } -WRITE8_MEMBER(device_nes_cart_interface::nt_w) +void device_nes_cart_interface::nt_w(offs_t offset, uint8_t data) { int page = ((offset & 0xc00) >> 10); @@ -649,7 +655,7 @@ WRITE8_MEMBER(device_nes_cart_interface::nt_w) m_nt_access[page][offset & 0x3ff] = data; } -READ8_MEMBER(device_nes_cart_interface::nt_r) +uint8_t device_nes_cart_interface::nt_r(offs_t offset) { int page = ((offset & 0xc00) >> 10); return m_nt_access[page][offset & 0x3ff]; @@ -665,26 +671,26 @@ READ8_MEMBER(device_nes_cart_interface::nt_r) // source) //------------------------------------------------- -READ8_MEMBER(device_nes_cart_interface::read_l) +uint8_t device_nes_cart_interface::read_l(offs_t offset) { - return m_open_bus; + return get_open_bus(); } -READ8_MEMBER(device_nes_cart_interface::read_m) +uint8_t device_nes_cart_interface::read_m(offs_t offset) { if (!m_battery.empty()) return m_battery[offset & (m_battery.size() - 1)]; if (!m_prgram.empty()) return m_prgram[offset & (m_prgram.size() - 1)]; - return m_open_bus; + return get_open_bus(); } -WRITE8_MEMBER(device_nes_cart_interface::write_l) +void device_nes_cart_interface::write_l(offs_t offset, uint8_t data) { } -WRITE8_MEMBER(device_nes_cart_interface::write_m) +void device_nes_cart_interface::write_m(offs_t offset, uint8_t data) { if (!m_battery.empty()) m_battery[offset & (m_battery.size() - 1)] = data; @@ -692,7 +698,7 @@ WRITE8_MEMBER(device_nes_cart_interface::write_m) m_prgram[offset & (m_prgram.size() - 1)] = data; } -WRITE8_MEMBER(device_nes_cart_interface::write_h) +void device_nes_cart_interface::write_h(offs_t offset, uint8_t data) { } @@ -740,6 +746,9 @@ void device_nes_cart_interface::pcb_start(running_machine &machine, uint8_t *cir device().save_item(NAME(m_vram)); if (!m_battery.empty()) device().save_item(NAME(m_battery)); + + // open bus + device().save_item(NAME(m_open_bus)); } void device_nes_cart_interface::pcb_reg_postload(running_machine &machine) @@ -943,11 +952,11 @@ std::string nes_cart_slot_device::get_default_card_software(get_default_card_sof read -------------------------------------------------*/ -READ8_MEMBER(nes_cart_slot_device::read_l) +uint8_t nes_cart_slot_device::read_l(offs_t offset) { if (m_cart) { - uint8_t val = m_cart->read_l(space, offset); + uint8_t val = m_cart->read_l(offset); // update open bus m_cart->set_open_bus(((offset + 0x4100) & 0xff00) >> 8); return val; @@ -956,11 +965,11 @@ READ8_MEMBER(nes_cart_slot_device::read_l) return 0xff; } -READ8_MEMBER(nes_cart_slot_device::read_m) +uint8_t nes_cart_slot_device::read_m(offs_t offset) { if (m_cart) { - uint8_t val = m_cart->read_m(space, offset); + uint8_t val = m_cart->read_m(offset); // update open bus m_cart->set_open_bus(((offset + 0x6000) & 0xff00) >> 8); return val; @@ -969,11 +978,11 @@ READ8_MEMBER(nes_cart_slot_device::read_m) return 0xff; } -READ8_MEMBER(nes_cart_slot_device::read_h) +uint8_t nes_cart_slot_device::read_h(offs_t offset) { if (m_cart) { - uint8_t val = m_cart->read_h(space, offset); + uint8_t val = m_cart->read_h(offset); // update open bus m_cart->set_open_bus(((offset + 0x8000) & 0xff00) >> 8); return val; @@ -982,11 +991,11 @@ READ8_MEMBER(nes_cart_slot_device::read_h) return 0xff; } -READ8_MEMBER(nes_cart_slot_device::read_ex) +uint8_t nes_cart_slot_device::read_ex(offs_t offset) { if (m_cart) { - uint8_t val = m_cart->read_ex(space, offset); + uint8_t val = m_cart->read_ex(offset); // update open bus m_cart->set_open_bus(((offset + 0x4020) & 0xff00) >> 8); return val; @@ -1000,41 +1009,41 @@ READ8_MEMBER(nes_cart_slot_device::read_ex) write -------------------------------------------------*/ -WRITE8_MEMBER(nes_cart_slot_device::write_l) +void nes_cart_slot_device::write_l(offs_t offset, uint8_t data) { if (m_cart) { - m_cart->write_l(space, offset, data); + m_cart->write_l(offset, data); // update open bus m_cart->set_open_bus(((offset + 0x4100) & 0xff00) >> 8); } } -WRITE8_MEMBER(nes_cart_slot_device::write_m) +void nes_cart_slot_device::write_m(offs_t offset, uint8_t data) { if (m_cart) { - m_cart->write_m(space, offset, data); + m_cart->write_m(offset, data); // update open bus m_cart->set_open_bus(((offset + 0x6000) & 0xff00) >> 8); } } -WRITE8_MEMBER(nes_cart_slot_device::write_h) +void nes_cart_slot_device::write_h(offs_t offset, uint8_t data) { if (m_cart) { - m_cart->write_h(space, offset, data); + m_cart->write_h(offset, data); // update open bus m_cart->set_open_bus(((offset + 0x8000) & 0xff00) >> 8); } } -WRITE8_MEMBER(nes_cart_slot_device::write_ex) +void nes_cart_slot_device::write_ex(offs_t offset, uint8_t data) { if (m_cart) { - m_cart->write_ex(space, offset, data); + m_cart->write_ex(offset, data); // update open bus m_cart->set_open_bus(((offset + 0x4020) & 0xff00) >> 8); } |