mirror of
https://github.com/holub/mame
synced 2025-06-07 21:33:45 +03:00
(MESS) vboy uses no bankswitch, so we can gain back most
speed with the same direct rom mapping used for gba. nw.
This commit is contained in:
parent
0210f1ea04
commit
fa3c75a7b3
@ -171,8 +171,10 @@ bool vboy_cart_slot_device::call_load()
|
|||||||
seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
|
seterror(IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size");
|
||||||
return IMAGE_INIT_FAIL;
|
return IMAGE_INIT_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_cart->rom_alloc(len, tag());
|
// always alloc 0x200000 so to be able to directly map the region
|
||||||
|
// to the address map (speeding up emulation a bit)
|
||||||
|
m_cart->rom_alloc(0x200000, tag());
|
||||||
if (has_eeprom)
|
if (has_eeprom)
|
||||||
m_cart->eeprom_alloc(get_software_region_length("eeprom"));
|
m_cart->eeprom_alloc(get_software_region_length("eeprom"));
|
||||||
|
|
||||||
@ -183,6 +185,10 @@ bool vboy_cart_slot_device::call_load()
|
|||||||
else
|
else
|
||||||
memcpy(ROM, get_software_region("rom"), len);
|
memcpy(ROM, get_software_region("rom"), len);
|
||||||
|
|
||||||
|
if (len < 0x080000) { memcpy(ROM + 0x040000, ROM, 0x040000); }
|
||||||
|
if (len < 0x100000) { memcpy(ROM + 0x080000, ROM, 0x080000); }
|
||||||
|
if (len < 0x200000) { memcpy(ROM + 0x100000, ROM, 0x100000); }
|
||||||
|
|
||||||
if (software_entry() == NULL)
|
if (software_entry() == NULL)
|
||||||
m_type = vboy_get_pcb_id("vb_rom");
|
m_type = vboy_get_pcb_id("vb_rom");
|
||||||
else
|
else
|
||||||
|
@ -157,6 +157,7 @@ public:
|
|||||||
required_device<vboy_cart_slot_device> m_cart;
|
required_device<vboy_cart_slot_device> m_cart;
|
||||||
required_device<timer_device> m_maintimer;
|
required_device<timer_device> m_maintimer;
|
||||||
required_device<palette_device> m_palette;
|
required_device<palette_device> m_palette;
|
||||||
|
memory_region *m_cart_rom;
|
||||||
|
|
||||||
DECLARE_READ32_MEMBER(io_r);
|
DECLARE_READ32_MEMBER(io_r);
|
||||||
DECLARE_WRITE32_MEMBER(io_w);
|
DECLARE_WRITE32_MEMBER(io_w);
|
||||||
@ -1111,7 +1112,7 @@ static ADDRESS_MAP_START( vboy_mem, AS_PROGRAM, 32, vboy_state )
|
|||||||
//AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
|
//AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
|
||||||
AM_RANGE( 0x05000000, 0x0500ffff ) AM_MIRROR(0x0ff0000) AM_RAM AM_SHARE("wram")// Main RAM - 64K mask 0xffff
|
AM_RANGE( 0x05000000, 0x0500ffff ) AM_MIRROR(0x0ff0000) AM_RAM AM_SHARE("wram")// Main RAM - 64K mask 0xffff
|
||||||
AM_RANGE( 0x06000000, 0x06003fff ) AM_DEVREADWRITE("cartslot", vboy_cart_slot_device, read_eeprom, write_eeprom) // Cart RAM - 8K NVRAM
|
AM_RANGE( 0x06000000, 0x06003fff ) AM_DEVREADWRITE("cartslot", vboy_cart_slot_device, read_eeprom, write_eeprom) // Cart RAM - 8K NVRAM
|
||||||
AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
|
// AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( vboy_io, AS_IO, 32, vboy_state )
|
static ADDRESS_MAP_START( vboy_io, AS_IO, 32, vboy_state )
|
||||||
@ -1140,7 +1141,7 @@ static ADDRESS_MAP_START( vboy_io, AS_IO, 32, vboy_state )
|
|||||||
// AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
|
// AM_RANGE( 0x04000000, 0x04ffffff ) // Expansion area
|
||||||
AM_RANGE( 0x05000000, 0x0500ffff ) AM_MIRROR(0x0ff0000) AM_RAM AM_SHARE("wram") // Main RAM - 64K mask 0xffff
|
AM_RANGE( 0x05000000, 0x0500ffff ) AM_MIRROR(0x0ff0000) AM_RAM AM_SHARE("wram") // Main RAM - 64K mask 0xffff
|
||||||
AM_RANGE( 0x06000000, 0x06003fff ) AM_NOP // Cart RAM - 8K NVRAM ?
|
AM_RANGE( 0x06000000, 0x06003fff ) AM_NOP // Cart RAM - 8K NVRAM ?
|
||||||
AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
|
// AM_RANGE( 0x07000000, 0x071fffff ) AM_MIRROR(0x0e00000) AM_DEVREAD("cartslot", vboy_cart_slot_device, read_cart) /* ROM */
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
/* Input ports */
|
/* Input ports */
|
||||||
@ -1167,8 +1168,21 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void vboy_state::machine_start()
|
void vboy_state::machine_start()
|
||||||
{
|
{
|
||||||
|
// install the cart ROM as a bank into the address map.
|
||||||
|
// this speeds up the rom access, by skipping the m_cart->read_rom
|
||||||
|
// trampoline (but forces us to alloc always a 0x200000-wide region)
|
||||||
if (m_cart->exists())
|
if (m_cart->exists())
|
||||||
|
{
|
||||||
|
astring region_tag;
|
||||||
|
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(VBOYSLOT_ROM_REGION_TAG));
|
||||||
|
|
||||||
|
m_maincpu->space(AS_PROGRAM).install_read_bank(0x07000000, 0x071fffff, 0, 0x0e00000, "prog_cart_bank");
|
||||||
|
m_maincpu->space(AS_IO).install_read_bank(0x07000000, 0x071fffff, 0, 0x0e00000, "io_cart_bank");
|
||||||
|
membank("prog_cart_bank")->set_base(m_cart_rom->base());
|
||||||
|
membank("io_cart_bank")->set_base(m_cart_rom->base());
|
||||||
|
|
||||||
m_cart->save_eeprom();
|
m_cart->save_eeprom();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vboy_state::machine_reset()
|
void vboy_state::machine_reset()
|
||||||
|
Loading…
Reference in New Issue
Block a user