diff options
author | 2016-04-28 13:58:05 +0200 | |
---|---|---|
committer | 2016-04-28 13:58:05 +0200 | |
commit | 4a419b8d5646a4d2e5b66fbeb22fae40b6c14023 (patch) | |
tree | 1c9c0299e8bc0e9f8c8921678ff02a3ee684a0ed | |
parent | 01b454694d2e3cac82b24c1fc8589b63ea250079 (diff) |
some more cleanups + gaining back some performance
in most carts. nw.
-rw-r--r-- | src/mame/drivers/neogeo.cpp | 49 | ||||
-rw-r--r-- | src/mame/includes/neogeo.h | 16 |
2 files changed, 32 insertions, 33 deletions
diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 9ca5d047765..9b54fe2ffaf 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -856,7 +856,6 @@ WRITE8_MEMBER(neogeo_state::system_control_w) if (m_type == NEOGEO_CD) printf("NeoCD: write to regular vector change address? %d\n", bit); // what IS going on with "neocdz doubledr" and why do games write here if it's hooked up to nothing? else - //m_bank_vectors->set_entry(bit); m_use_cart_vectors = bit; break; @@ -906,7 +905,7 @@ WRITE16_MEMBER(neogeo_state::write_banksel) } UINT8 *ROM = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_rom_size() == 0) ? m_region_maincpu->base() : (UINT8 *)m_slots[m_curr_slot]->get_rom_base(); m_bank_base = (bank + 1) * 0x100000; - membank("cartridge")->set_base(ROM + m_bank_base); + m_bank_cartridge->set_base(ROM + m_bank_base); } } @@ -979,7 +978,7 @@ void neogeo_state::set_output_data( UINT8 data ) WRITE16_MEMBER(neogeo_state::write_bankprot) { m_bank_base = m_slots[m_curr_slot]->get_bank_base(data); - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } WRITE16_MEMBER(neogeo_state::write_bankprot_pvc) @@ -991,7 +990,7 @@ WRITE16_MEMBER(neogeo_state::write_bankprot_pvc) if (offset >= 0xff8) { m_bank_base = m_slots[m_curr_slot]->get_bank_base(data); - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } } @@ -1004,7 +1003,7 @@ WRITE16_MEMBER(neogeo_state::write_bankprot_kf2k3bl) if (offset == 0x1ff0/2 || offset == 0x1ff2/2) { m_bank_base = m_slots[m_curr_slot]->get_bank_base(data); - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } } @@ -1015,12 +1014,12 @@ WRITE16_MEMBER(neogeo_state::write_bankprot_ms5p) if ((offset == 0) && (data == 0xa0)) { m_bank_base = 0xa0; - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } else if (offset == 2) { m_bank_base = m_slots[m_curr_slot]->get_bank_base(data); - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } } @@ -1032,13 +1031,13 @@ WRITE16_MEMBER(neogeo_state::write_bankprot_kof10th) { // Standard bankswitch m_bank_base = m_slots[m_curr_slot]->get_bank_base(data); - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } } READ16_MEMBER(neogeo_state::read_lorom_kof10th) { - UINT16* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (UINT16*)memregion("maincpu")->base(); + UINT16* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (UINT16*)m_region_maincpu->base(); if (offset + 0x80/2 >= 0x10000/2) offset += m_slots[m_curr_slot]->get_special_bank(); return rom[offset + 0x80/2]; @@ -1056,19 +1055,19 @@ void neogeo_state::init_cpu() UINT32 len = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_rom_size() == 0) ? m_region_maincpu->bytes() : m_slots[m_curr_slot]->get_rom_size(); if (len > 0x100000) - membank("cartridge")->set_base(ROM + 0x100000); + m_bank_cartridge->set_base(ROM + 0x100000); else - membank("cartridge")->set_base(ROM); + m_bank_cartridge->set_base(ROM); } void neogeo_state::init_audio() { - UINT8 *ROM = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_audio_size() == 0) ? memregion("audiocpu")->base() : m_slots[m_curr_slot]->get_audio_base(); - UINT32 len = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_audio_size() == 0) ? memregion("audiocpu")->bytes() : m_slots[m_curr_slot]->get_audio_size(); + UINT8 *ROM = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_audio_size() == 0) ? m_region_audiocpu->base() : m_slots[m_curr_slot]->get_audio_base(); + UINT32 len = (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_audio_size() == 0) ? m_region_audiocpu->bytes() : m_slots[m_curr_slot]->get_audio_size(); UINT32 address_mask; /* audio bios/cartridge selection */ - m_bank_audio_main->configure_entry(0, (memregion("audiobios") != nullptr) ? memregion("audiobios")->base() : ROM); /* on hardware with no SM1 ROM, the cart ROM is always enabled */ + m_bank_audio_main->configure_entry(0, (m_region_audiobios != nullptr) ? m_region_audiobios->base() : ROM); /* on hardware with no SM1 ROM, the cart ROM is always enabled */ m_bank_audio_main->configure_entry(1, ROM); m_bank_audio_main->set_entry(1); @@ -1172,9 +1171,15 @@ void neogeo_state::set_slot_idx(int slot) // unmap any handler that previous carts could have installed space.unmap_readwrite(0x000080, 0x0fffff); space.unmap_readwrite(0x200000, 0x2fffff); - space.install_read_handler(0x000080, 0x0fffff, read16_delegate(FUNC(neogeo_state::low_rom),this)); + if (!m_slots[m_curr_slot] || m_slots[m_curr_slot]->get_rom_size() == 0) + space.install_rom(0x000080, 0x0fffff, 0, 0, (UINT16 *)m_region_maincpu->base() + 0x80/2); + else + space.install_rom(0x000080, 0x0fffff, 0, 0, (UINT16 *)m_slots[m_curr_slot]->get_rom_base() + 0x80/2); + + space.install_read_bank(0x200000, 0x2fffff, 0, 0, "cartridge"); space.install_write_handler(0x2ffff0, 0x2fffff, write16_delegate(FUNC(neogeo_state::write_banksel),this)); + m_bank_cartridge = membank("cartridge"); init_cpu(); @@ -1372,7 +1377,7 @@ void neogeo_state::neogeo_postload() set_outputs(); if (m_type == NEOGEO_MVS || m_type == NEOGEO_AES) if (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) - membank("cartridge")->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); + m_bank_cartridge->set_base((UINT8 *)m_slots[m_curr_slot]->get_rom_base() + m_bank_base); } @@ -1415,22 +1420,16 @@ void neogeo_state::machine_reset() *************************************/ -READ16_MEMBER(neogeo_state::low_rom) -{ - UINT16* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (UINT16*)memregion("maincpu")->base(); - return rom[offset + (0x80/2)]; -} - READ16_MEMBER(neogeo_state::banked_vectors_r) { if (!m_use_cart_vectors) { - UINT16* bios = (UINT16*)memregion("mainbios")->base(); + UINT16* bios = (UINT16*)m_region_mainbios->base(); return bios[offset]; } else { - UINT16* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (UINT16*)memregion("maincpu")->base(); + UINT16* rom = (m_slots[m_curr_slot] && m_slots[m_curr_slot]->get_rom_size() > 0) ? m_slots[m_curr_slot]->get_rom_base() : (UINT16*)m_region_maincpu->base(); return rom[offset]; } } @@ -1465,7 +1464,6 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( main_map_slot, AS_PROGRAM, 16, neogeo_state ) AM_RANGE(0x000000, 0x00007f) AM_READ(banked_vectors_r) - AM_RANGE(0x000080, 0x0fffff) AM_READ(low_rom) AM_IMPORT_FROM( neogeo_main_map ) ADDRESS_MAP_END @@ -1481,7 +1479,6 @@ READ16_MEMBER(aes_state::aes_in2_r) static ADDRESS_MAP_START( aes_main_map, AS_PROGRAM, 16, aes_state ) AM_RANGE(0x000000, 0x00007f) AM_READ(banked_vectors_r) - AM_RANGE(0x000080, 0x0fffff) AM_READ(low_rom) AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x0f0000) AM_RAM // some games have protection devices in the 0x200000 region, it appears to map to cart space, not surprising, the ROM is read here too AM_RANGE(0x300000, 0x300001) AM_MIRROR(0x01fffe) AM_DEVREAD8("ctrl1", neogeo_control_port_device, ctrl_r, 0xff00) diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index 4d066e46f56..b643736cac6 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -35,8 +35,9 @@ public: m_region_sprites(*this, "sprites"), m_region_fixed(*this, "fixed"), m_region_fixedbios(*this, "fixedbios"), - //m_bank_vectors(*this, "vectors"), - //m_bank_cartridge(*this, "cartridge"), + m_region_mainbios(*this, "mainbios"), + m_region_audiobios(*this, "audiobios"), + m_region_audiocpu(*this, "audiocpu"), m_bank_audio_main(*this, "audio_main"), m_upd4990a(*this, "upd4990a"), m_ym(*this, "ymsnd"), @@ -97,7 +98,6 @@ public: DECLARE_WRITE8_MEMBER(io_control_w); DECLARE_WRITE8_MEMBER(system_control_w); DECLARE_READ16_MEMBER(banked_vectors_r); - DECLARE_READ16_MEMBER(low_rom); DECLARE_WRITE16_MEMBER(write_banksel); DECLARE_WRITE16_MEMBER(write_bankprot); DECLARE_WRITE16_MEMBER(write_bankprot_pvc); @@ -146,11 +146,13 @@ protected: optional_memory_region m_region_sprites; optional_memory_region m_region_fixed; optional_memory_region m_region_fixedbios; - //required_memory_bank m_bank_vectors; - //optional_memory_bank m_bank_cartridge; // optional because of neocd + optional_memory_region m_region_mainbios; + optional_memory_region m_region_audiobios; + optional_memory_region m_region_audiocpu; optional_memory_bank m_bank_audio_main; // optional because of neocd memory_bank *m_bank_audio_cart[4]; - + memory_bank *m_bank_cartridge; + // MVS-specific devices optional_device<upd4990a_device> m_upd4990a; optional_device<ym2610_device> m_ym; @@ -200,7 +202,7 @@ protected: UINT8 m_raster_level; required_device<neosprite_optimized_device> m_sprgen; - UINT16 get_video_control( ); + UINT16 get_video_control(); // color/palette related std::vector<UINT16> m_paletteram; |