summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/megadriv.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/megadriv.c')
-rw-r--r--src/mame/drivers/megadriv.c54
1 files changed, 52 insertions, 2 deletions
diff --git a/src/mame/drivers/megadriv.c b/src/mame/drivers/megadriv.c
index bc5e8a4f8fe..ac205690a00 100644
--- a/src/mame/drivers/megadriv.c
+++ b/src/mame/drivers/megadriv.c
@@ -1484,7 +1484,7 @@ void (*megadrive_io_write_data_port_ptr)(running_machine *machine, int offset, U
*/
-static INPUT_PORTS_START( md_common )
+INPUT_PORTS_START( md_common )
PORT_START("PAD1") /* Joypad 1 (3 button + start) NOT READ DIRECTLY */
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
@@ -1920,7 +1920,6 @@ static void megadrive_io_write_sctrl_port(running_machine *machine, int portnum,
}
-
static WRITE16_HANDLER( megadriv_68k_io_write )
{
// mame_printf_debug("IO Write #%02x data %04x mem_mask %04x\n",offset,data,mem_mask);
@@ -2327,6 +2326,51 @@ static ADDRESS_MAP_START( megadriv_z80_io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x0000 , 0xff) AM_NOP
ADDRESS_MAP_END
+
+/***************************** Megaplay *****************************/
+/* Megaplay BIOS handles regs[2] at start in a different way. */
+/* other io data/ctrl regs are dealt with exactly like in megadrive */
+
+READ8_HANDLER( megaplay_bios_6402_r )
+{
+ return megadrive_io_data_regs[2];// & 0xfe;
+}
+
+WRITE8_HANDLER( megaplay_bios_6402_w )
+{
+ megadrive_io_data_regs[2] = (megadrive_io_data_regs[2] & 0x07) | ((data & 0x70) >> 1);
+// logerror("BIOS: 0x6402 write: 0x%02x\n", data);
+}
+
+READ8_HANDLER( megaplay_bios_6204_r )
+{
+ return (megadrive_io_data_regs[2]);
+// return (mplay_bios.bios_width & 0xf8) + (mplay_bios.bios_6204 & 0x07);
+}
+
+WRITE8_HANDLER( megaplay_bios_width_w )
+{
+ mplay_bios.bios_width = data;
+ megadrive_io_data_regs[2] = (megadrive_io_data_regs[2] & 0x07) | ((data & 0xf8));
+// logerror("BIOS: 0x6204 - Width write: %02x\n", data);
+}
+
+WRITE16_HANDLER( megaplay_io_write )
+{
+ if (offset == 0x03)
+ megadrive_io_data_regs[2] = (data & megadrive_io_ctrl_regs[2]) | (megadrive_io_data_regs[2] & ~megadrive_io_ctrl_regs[2]);
+ else
+ megadriv_68k_io_write(space, offset & 0x1f, data, 0xffff);
+}
+
+READ16_HANDLER( megaplay_io_read )
+{
+ if (offset == 0x03)
+ return megadrive_io_data_regs[2];
+ else
+ return megadriv_68k_io_read(space, offset & 0x1f, 0xffff);
+}
+
/****************************************** 32X related ******************************************/
/**********************************************************************************************/
@@ -6344,6 +6388,12 @@ DRIVER_INIT( megadrie )
hazemdchoice_megadriv_framerate = 50;
}
+DRIVER_INIT( mpnew )
+{
+ DRIVER_INIT_CALL(megadrij);
+ megadrive_io_read_data_port_ptr = megadrive_io_read_data_port_3button;
+ megadrive_io_write_data_port_ptr = megadrive_io_write_data_port_3button;
+}
/* used by megatech */
static READ8_HANDLER( z80_unmapped_port_r )