diff --git a/src/mame/drivers/megaphx.c b/src/mame/drivers/megaphx.c index 24891c983bd..b71465b5c6c 100644 --- a/src/mame/drivers/megaphx.c +++ b/src/mame/drivers/megaphx.c @@ -36,6 +36,8 @@ #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" #include "video/ramdac.h" +#include "machine/i8255.h" + class megaphx_state : public driver_device { @@ -56,24 +58,23 @@ public: DECLARE_MACHINE_RESET(megaphx); - - DECLARE_READ16_MEMBER(megaphx_60004_r); - DECLARE_READ16_MEMBER(megaphx_50002_r); + DECLARE_CUSTOM_INPUT_MEMBER(megaphx_rand_r); DECLARE_READ16_MEMBER(tms_host_r); DECLARE_WRITE16_MEMBER(tms_host_w); }; -READ16_MEMBER(megaphx_state::megaphx_60004_r) + + +CUSTOM_INPUT_MEMBER(megaphx_state::megaphx_rand_r) { return rand(); } -READ16_MEMBER(megaphx_state::megaphx_50002_r) -{ - return rand(); -} + + + READ16_MEMBER(megaphx_state::tms_host_r) { @@ -90,31 +91,34 @@ WRITE16_MEMBER(megaphx_state::tms_host_w) static ADDRESS_MAP_START( megaphx_68k_map, AS_PROGRAM, 16, megaphx_state ) // AM_RANGE(0x000000, 0x0000ff) AM_ROM - AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_SHARE("mainram") + AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_SHARE("mainram") // we copy the vectors from roms 6+7 to ram here, but where do the rest of those roms map? AM_RANGE(0x040000, 0x040007) AM_READWRITE(tms_host_r, tms_host_w) - AM_RANGE(0x050002, 0x050003) AM_READ(megaphx_50002_r) +// AM_RANGE(0x050000, 0x050001) AM_WRITENOP + AM_RANGE(0x050002, 0x050003) AM_READ_PORT("P3") - AM_RANGE(0x060004, 0x060005) AM_READ(megaphx_60004_r) - AM_RANGE(0x060006, 0x060007) AM_WRITENOP + AM_RANGE(0x060000, 0x060007) AM_DEVREADWRITE8("ppi8255_0", i8255_device, read, write, 0x00ff) - AM_RANGE(0x800000, 0x8fffff) AM_ROM + AM_RANGE(0x800000, 0x83ffff) AM_ROM AM_REGION("roms01", 0x00000) + AM_RANGE(0x840000, 0x87ffff) AM_ROM AM_REGION("roms23", 0x00000) + AM_RANGE(0x880000, 0x8bffff) AM_ROM AM_REGION("roms45", 0x00000) ADDRESS_MAP_END static ADDRESS_MAP_START( megaphx_tms_map, AS_PROGRAM, 16, megaphx_state ) - AM_RANGE(0x00000000, 0x001fffff) AM_RAM AM_SHARE("vram") // vram? - AM_RANGE(0x00100000, 0x002fffff) AM_RAM // vram? - AM_RANGE(0x00300000, 0x003fffff) AM_RAM + AM_RANGE(0x00000000, 0x003fffff) AM_RAM AM_SHARE("vram") // vram? +// AM_RANGE(0x00100000, 0x002fffff) AM_RAM // vram? +// AM_RANGE(0x00300000, 0x003fffff) AM_RAM // AM_RANGE(0x04000000, 0x040000ff) AM_WRITENOP AM_RANGE(0x04000000, 0x0400000f) AM_DEVWRITE8("ramdac",ramdac_device,index_w,0x00ff) AM_RANGE(0x04000010, 0x0400001f) AM_DEVREADWRITE8("ramdac",ramdac_device,pal_r,pal_w,0x00ff) AM_RANGE(0x04000030, 0x0400003f) AM_DEVWRITE8("ramdac",ramdac_device,index_r_w,0x00ff) + AM_RANGE(0x04000090, 0x0400009f) AM_WRITENOP AM_RANGE(0xc0000000, 0xc00001ff) AM_READWRITE_LEGACY(tms34010_io_register_r, tms34010_io_register_w) AM_RANGE(0xffc00000, 0xffffffff) AM_RAM @@ -155,10 +159,14 @@ static void megaphx_scanline(screen_device &screen, bitmap_rgb32 &bitmap, int sc static void megaphx_to_shiftreg(address_space &space, UINT32 address, UINT16 *shiftreg) { + megaphx_state *state = space.machine().driver_data(); + memcpy(shiftreg, &state->m_vram[TOWORD(address)/* & ~TOWORD(0x1fff)*/], TOBYTE(0x2000)); } static void megaphx_from_shiftreg(address_space &space, UINT32 address, UINT16 *shiftreg) { + megaphx_state *state = space.machine().driver_data(); + memcpy(&state->m_vram[TOWORD(address)/* & ~TOWORD(0x1fff)*/], shiftreg, TOBYTE(0x2000)); } MACHINE_RESET_MEMBER(megaphx_state,megaphx) @@ -190,6 +198,115 @@ static const tms34010_config tms_config_megaphx = static INPUT_PORTS_START( megaphx ) + PORT_START("P0") + PORT_DIPNAME( 0x0001, 0x0001, "0" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + + PORT_START("P1") + PORT_DIPNAME( 0x0001, 0x0001, "2" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + + + PORT_START("P2") + PORT_DIPNAME( 0x0001, 0x0001, "4" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Unknown ) ) // must be 'on' to boot, but is also p2 start? multiplexed? + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, megaphx_state,megaphx_rand_r, NULL) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("P3") + PORT_DIPNAME( 0x0001, 0x0001,"X") + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, megaphx_state,megaphx_rand_r, NULL) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, "Y" ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + INPUT_PORTS_END static ADDRESS_MAP_START( ramdac_map, AS_0, 8, megaphx_state ) @@ -201,6 +318,17 @@ static RAMDAC_INTERFACE( ramdac_intf ) 1 }; +static I8255A_INTERFACE( ppi8255_intf_0 ) +{ + DEVCB_INPUT_PORT("P0"), /* Port A read */ + DEVCB_NULL, /* Port A write */ + DEVCB_INPUT_PORT("P1"), /* Port B read */ + DEVCB_NULL, /* Port B write */ + DEVCB_INPUT_PORT("P2"), /* Port C read */ + DEVCB_NULL /* Port C write */ +}; + + static MACHINE_CONFIG_START( megaphx, megaphx_state ) @@ -217,6 +345,8 @@ static MACHINE_CONFIG_START( megaphx, megaphx_state ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_IO_MAP(sound_io) + MCFG_I8255A_ADD( "ppi8255_0", ppi8255_intf_0 ) + MCFG_MACHINE_RESET_OVERRIDE(megaphx_state,megaphx) @@ -234,23 +364,28 @@ MACHINE_CONFIG_END DRIVER_INIT_MEMBER(megaphx_state,megaphx) { - UINT16 *src = (UINT16*)memregion( "maincpu" )->base(); + UINT16 *src = (UINT16*)memregion( "roms67" )->base(); // copy vector table? memcpy(m_mainram, src, 0x100); } ROM_START( megaphx ) - ROM_REGION( 0x1000000, "maincpu", 0 ) + ROM_REGION16_BE( 0x40000, "roms67", 0 ) ROM_LOAD16_BYTE( "mph6.u32", 0x000001, 0x20000, CRC(b99703d4) SHA1(393b6869e71d4c61060e66e0e9e36a1e6ca345d1) ) ROM_LOAD16_BYTE( "mph7.u21", 0x000000, 0x20000, CRC(f11e7449) SHA1(1017142d10011d68e49d3ccdb1ac4e815c03b17a) ) - ROM_LOAD16_BYTE( "mph0.u38", 0x800001, 0x20000, CRC(b63dd20f) SHA1(c8ce5985a6ba49428d66a49d9d623ccdfce422c2) ) - ROM_LOAD16_BYTE( "mph1.u27", 0x800000, 0x20000, CRC(4dcbf44b) SHA1(a8fa49ecd033f1aeb323e0032ddcf5f8f9463ac0) ) - ROM_LOAD16_BYTE( "mph2.u37", 0x840001, 0x20000, CRC(a0f69c27) SHA1(d0c5c241d94a1f03f51e7e517e2f9dec6abcf75a) ) - ROM_LOAD16_BYTE( "mph3.u26", 0x840000, 0x20000, CRC(4db84cc5) SHA1(dd74acd4b32c7e7553554ac0f9ba13503358e869) ) - ROM_LOAD16_BYTE( "mph4.u36", 0x880001, 0x20000, CRC(c8e0725e) SHA1(b3af315b9a94a692e81e0dbfd4035036c2af4f50) ) - ROM_LOAD16_BYTE( "mph5.u25", 0x880000, 0x20000, CRC(c95ccb69) SHA1(9d14cbfafd943f6ff461a7f373170a35e36eb695) ) + ROM_REGION16_BE( 0x40000, "roms01", 0 ) + ROM_LOAD16_BYTE( "mph0.u38", 0x000001, 0x20000, CRC(b63dd20f) SHA1(c8ce5985a6ba49428d66a49d9d623ccdfce422c2) ) + ROM_LOAD16_BYTE( "mph1.u27", 0x000000, 0x20000, CRC(4dcbf44b) SHA1(a8fa49ecd033f1aeb323e0032ddcf5f8f9463ac0) ) + + ROM_REGION16_BE( 0x40000, "roms23", 0 ) + ROM_LOAD16_BYTE( "mph2.u37", 0x000001, 0x20000, CRC(a0f69c27) SHA1(d0c5c241d94a1f03f51e7e517e2f9dec6abcf75a) ) + ROM_LOAD16_BYTE( "mph3.u26", 0x000000, 0x20000, CRC(4db84cc5) SHA1(dd74acd4b32c7e7553554ac0f9ba13503358e869) ) + + ROM_REGION16_BE( 0x40000, "roms45", 0 ) + ROM_LOAD16_BYTE( "mph4.u36", 0x000001, 0x20000, CRC(c8e0725e) SHA1(b3af315b9a94a692e81e0dbfd4035036c2af4f50) ) + ROM_LOAD16_BYTE( "mph5.u25", 0x000000, 0x20000, CRC(c95ccb69) SHA1(9d14cbfafd943f6ff461a7f373170a35e36eb695) ) ROM_REGION( 0x200000, "user2", 0 ) ROM_LOAD( "sonido_mph1.u39", 0x000000, 0x20000, CRC(f5e65557) SHA1(5ae759c2bcef96fbda42f088c02b6dec208030f3) )