summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/megaplay.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/megaplay.c')
-rw-r--r--src/mame/drivers/megaplay.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/mame/drivers/megaplay.c b/src/mame/drivers/megaplay.c
index 5f33a2b066a..d9127cc6b31 100644
--- a/src/mame/drivers/megaplay.c
+++ b/src/mame/drivers/megaplay.c
@@ -90,7 +90,7 @@ public:
DECLARE_READ8_MEMBER(bios_6600_r);
DECLARE_WRITE8_MEMBER(bios_6600_w);
DECLARE_WRITE8_MEMBER(game_w);
- DECLARE_READ8_MEMBER(vdp_count_r);
+ DECLARE_READ8_MEMBER(vdp1_count_r);
DECLARE_WRITE_LINE_MEMBER(bios_int_callback);
DECLARE_DRIVER_INIT(megaplay);
@@ -593,22 +593,23 @@ static ADDRESS_MAP_START( megaplay_bios_map, AS_PROGRAM, 8, mplay_state )
ADDRESS_MAP_END
-READ8_MEMBER(mplay_state::vdp_count_r)
+
+READ8_MEMBER(mplay_state::vdp1_count_r)
{
address_space &prg = m_bioscpu->space(AS_PROGRAM);
if (offset & 0x01)
- return m_vdp->hcount_read(prg, offset);
+ return m_vdp1->hcount_read(prg, offset);
else
- return m_vdp->vcount_read(prg, offset);
+ return m_vdp1->vcount_read(prg, offset);
}
static ADDRESS_MAP_START( megaplay_bios_io_map, AS_IO, 8, mplay_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x7f, 0x7f) AM_DEVWRITE("sn2", sn76496_device, write)
- AM_RANGE(0x40, 0x41) AM_MIRROR(0x3e) AM_READ(vdp_count_r)
- AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("gen_vdp", sega315_5124_device, vram_read, vram_write)
- AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("gen_vdp", sega315_5124_device, register_read, register_write)
+ AM_RANGE(0x40, 0x41) AM_MIRROR(0x3e) AM_READ(vdp1_count_r)
+ AM_RANGE(0x80, 0x80) AM_MIRROR(0x3e) AM_DEVREADWRITE("vdp1", sega315_5124_device, vram_read, vram_write)
+ AM_RANGE(0x81, 0x81) AM_MIRROR(0x3e) AM_DEVREADWRITE("vdp1", sega315_5124_device, register_read, register_write)
ADDRESS_MAP_END
@@ -616,22 +617,30 @@ UINT32 mplay_state::screen_update_megplay(screen_device &screen, bitmap_rgb32 &b
{
//printf("megplay vu\n");
screen_update_megadriv(screen, bitmap, cliprect);
-// m_vdp->screen_update(screen, bitmap, cliprect);
+ m_vdp1->screen_update(screen, bitmap, cliprect);
+
+ // i'm not sure if the overlay (256 pixels wide) is meant to be stretched over the 320 resolution genesis output, or centered.
+ // if it's meant to be stretched we'll have to multiply the entire outut x4 for the Genesis VDP and x5 for the SMS VDP to get a common 1280 pixel wide image
// overlay, only drawn for pixels != 0
for (int y = 0; y < 224; y++)
{
UINT32* lineptr = &bitmap.pix32(y);
- UINT32* srcptr = &m_vdp->get_bitmap().pix32(y + SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT);
+ UINT32* srcptr = &m_vdp1->get_bitmap().pix32(y + SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT);
for (int x = 0; x < SEGA315_5124_WIDTH; x++)
{
UINT32 src = srcptr[x] & 0xffffff;
if (src)
- lineptr[x] = src;
+ {
+ if (x>=16)
+ lineptr[x-16] = src;
+
+ }
}
}
+
return 0;
}
@@ -671,8 +680,13 @@ static MACHINE_CONFIG_START( megaplay, mplay_state )
SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT + 224)
MCFG_SCREEN_UPDATE_DRIVER(mplay_state, screen_update_megplay)
- MCFG_DEVICE_MODIFY("gen_vdp")
- MCFG_SEGA315_5313_INT_CB(WRITELINE(mplay_state, bios_int_callback))
+ // Megaplay has an additional SMS VDP as an overlay
+ MCFG_DEVICE_ADD("vdp1", SEGA315_5246, 0)
+ MCFG_SEGA315_5246_SET_SCREEN("megadriv")
+ MCFG_SEGA315_5246_IS_PAL(false)
+ MCFG_SEGA315_5246_INT_CB(WRITELINE(mplay_state, bios_int_callback))
+ MCFG_SEGA315_5124_SET_MANUAL_MIX
+
MACHINE_CONFIG_END