mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
add a genesis model which runs the bios code as a clone (nw)
This commit is contained in:
parent
2e9fa84503
commit
ed7632f99d
@ -274,6 +274,46 @@ MACHINE_START_MEMBER(md_cons_state, md_common)
|
||||
m_cart->save_nvram();
|
||||
}
|
||||
|
||||
void md_cons_state::install_cartslot()
|
||||
{
|
||||
// for now m_cartslot is only in MD and not 32x and SegaCD
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)m_cart));
|
||||
// m_maincpu->space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)m_cart));
|
||||
}
|
||||
|
||||
READ16_MEMBER( md_cons_state::tmss_r )
|
||||
{
|
||||
if (offset < 0x4000 / 2)
|
||||
return m_tmss[offset];
|
||||
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( md_cons_state::tmss_swap_w )
|
||||
{
|
||||
if (data & 0x0001)
|
||||
{
|
||||
install_cartslot();
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xa14100, 0xa14101, write16_delegate(FUNC(md_cons_state::tmss_swap_w),this));
|
||||
}
|
||||
else
|
||||
{
|
||||
install_tmss();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void md_cons_state::install_tmss()
|
||||
{
|
||||
m_maincpu->space(AS_PROGRAM).unmap_readwrite(0x000000, 0x7fffff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x000000, 0x7fffff, read16_delegate(FUNC(md_cons_state::tmss_r),this));
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xa14100, 0xa14101, write16_delegate(FUNC(md_cons_state::tmss_swap_w),this));
|
||||
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(md_cons_state, ms_megadriv)
|
||||
{
|
||||
MACHINE_START_CALL_MEMBER( md_common );
|
||||
@ -282,11 +322,16 @@ MACHINE_START_MEMBER(md_cons_state, ms_megadriv)
|
||||
if (m_cart->get_type() == SEGA_SVP)
|
||||
m_vdp->set_dma_delay(2);
|
||||
|
||||
// for now m_cartslot is only in MD and not 32x and SegaCD
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7fffff, read16_delegate(FUNC(base_md_cart_slot_device::read),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write),(base_md_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa13000, 0xa130ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a13),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write_a13),(base_md_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xa15000, 0xa150ff, read16_delegate(FUNC(base_md_cart_slot_device::read_a15),(base_md_cart_slot_device*)m_cart), write16_delegate(FUNC(base_md_cart_slot_device::write_a15),(base_md_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xa14000, 0xa14003, write16_delegate(FUNC(base_md_cart_slot_device::write_tmss_bank),(base_md_cart_slot_device*)m_cart));
|
||||
if (m_tmss)
|
||||
{
|
||||
install_tmss();
|
||||
}
|
||||
else
|
||||
{
|
||||
install_cartslot();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
MACHINE_START_MEMBER(md_cons_state, ms_megacd)
|
||||
@ -388,6 +433,13 @@ ROM_START(megadrij)
|
||||
ROM_REGION( 0x10000, "soundcpu", ROMREGION_ERASEFF)
|
||||
ROM_END
|
||||
|
||||
ROM_START(genesis_tmss)
|
||||
ROM_REGION(MD_CPU_REGION_SIZE, "maincpu", ROMREGION_ERASEFF)
|
||||
ROM_REGION( 0x10000, "soundcpu", ROMREGION_ERASEFF)
|
||||
|
||||
ROM_REGION16_BE(0x4000, "tmss", ROMREGION_ERASEFF)
|
||||
ROM_LOAD( "tmss_usa.bin", 0x0000, 0x4000, CRC(5f5e64eb) SHA1(453fca4e1db6fae4a10657c4451bccbb71955628) )
|
||||
ROM_END
|
||||
|
||||
/*************************************
|
||||
*
|
||||
@ -1005,6 +1057,10 @@ CONS( 1989, genesis, 0, 0, ms_megadriv, md, md_cons_state,
|
||||
CONS( 1990, megadriv, genesis, 0, ms_megadpal, md, md_cons_state, md_eur, "Sega", "Mega Drive (Europe, PAL)", MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1988, megadrij, genesis, 0, ms_megadriv, md, md_cons_state, md_jpn, "Sega", "Mega Drive (Japan, NTSC)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
// 1990+ models had the TMSS security chip, leave this as a clone, it reduces compatibility and nothing more.
|
||||
CONS( 1990, genesis_tmss, genesis, 0, ms_megadriv, md, md_cons_state, genesis, "Sega", "Genesis (USA, NTSC, with TMSS chip)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
||||
// the 32X plugged in the cart slot, games plugged into the 32x. Maybe it should be handled as an expansion device?
|
||||
CONS( 1994, 32x, 0, 0, genesis_32x, md, md_cons_state, genesis, "Sega", "Genesis with 32X (USA, NTSC)", MACHINE_NOT_WORKING )
|
||||
CONS( 1994, 32xe, 32x, 0, md_32x, md, md_cons_state, md_eur, "Sega", "Mega Drive with 32X (Europe, PAL)", MACHINE_NOT_WORKING )
|
||||
|
@ -15,7 +15,8 @@ public:
|
||||
: md_base_state(mconfig, type, tag),
|
||||
m_32x(*this,"sega32x"),
|
||||
m_segacd(*this,"segacd"),
|
||||
m_cart(*this, "mdslot")
|
||||
m_cart(*this, "mdslot"),
|
||||
m_tmss(*this, "tmss")
|
||||
{ }
|
||||
|
||||
ioport_port *m_io_ctrlr;
|
||||
@ -25,6 +26,7 @@ public:
|
||||
optional_device<sega_32x_device> m_32x;
|
||||
optional_device<sega_segacd_device> m_segacd;
|
||||
optional_device<md_cart_slot_device> m_cart;
|
||||
optional_region_ptr<UINT16> m_tmss;
|
||||
|
||||
DECLARE_DRIVER_INIT(mess_md_common);
|
||||
DECLARE_DRIVER_INIT(genesis);
|
||||
@ -46,4 +48,9 @@ public:
|
||||
void _32x_scanline_callback(int x, UINT32 priority, UINT16 &lineptr);
|
||||
void _32x_interrupt_callback(int scanline, int irq6);
|
||||
void _32x_scanline_helper_callback(int scanline);
|
||||
|
||||
void install_cartslot();
|
||||
void install_tmss();
|
||||
DECLARE_READ16_MEMBER(tmss_r);
|
||||
DECLARE_WRITE16_MEMBER(tmss_swap_w);
|
||||
};
|
||||
|
@ -56,6 +56,7 @@ public:
|
||||
required_device<sn76496_base_device> m_snsnd;
|
||||
optional_shared_ptr<UINT16> m_megadrive_ram;
|
||||
|
||||
|
||||
ioport_port *m_io_reset;
|
||||
ioport_port *m_io_pad_3b[4];
|
||||
ioport_port *m_io_pad_6b[4];
|
||||
|
@ -77,6 +77,7 @@ smssdisp // Sega Master System Store Display Unit
|
||||
megadrij // 1988 Sega Mega Drive (Japan)
|
||||
genesis // 1989 Sega Genesis (USA)
|
||||
megadriv // 1990 Sega Mega Drive (Europe)
|
||||
genesis_tmss //
|
||||
pico // 1994 Sega Pico (Europe)
|
||||
picou // 1994 Sega Pico (USA)
|
||||
picoj // 1993 Sega Pico (Japan)
|
||||
|
Loading…
Reference in New Issue
Block a user