some more cleanups + gaining back some performance

in most carts. nw.
This commit is contained in:
etabeta78 2016-04-28 13:58:05 +02:00
parent 01b454694d
commit 4a419b8d56
2 changed files with 32 additions and 33 deletions

View File

@ -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)

View File

@ -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;