This commit is contained in:
Miodrag Milanovic 2015-03-28 11:03:37 +01:00
commit d3e72c5e01
4 changed files with 143 additions and 123 deletions

View File

@ -170,13 +170,17 @@ Player 2 and Player 1 share the same controls !
#define VBEND (16) #define VBEND (16)
#define VBSTART (224+16) #define VBSTART (224+16)
void thepit_state::machine_start()
{
save_item(NAME(m_nmi_mask));
}
READ8_MEMBER(thepit_state::thepit_colorram_r) READ8_MEMBER(thepit_state::intrepid_colorram_mirror_r)
{ {
return m_colorram[offset]; return m_colorram[offset];
} }
WRITE8_MEMBER(thepit_state::thepit_sound_enable_w) WRITE8_MEMBER(thepit_state::sound_enable_w)
{ {
machine().sound().system_enable(data); machine().sound().system_enable(data);
} }
@ -190,62 +194,62 @@ WRITE8_MEMBER(thepit_state::nmi_mask_w)
static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8, thepit_state ) static ADDRESS_MAP_START( thepit_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x0000, 0x4fff) AM_ROM AM_RANGE(0x0000, 0x4fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8800, 0x8bff) AM_MIRROR(0x0400) AM_RAM_WRITE(thepit_colorram_w) AM_SHARE("colorram") AM_RANGE(0x8800, 0x8bff) AM_MIRROR(0x0400) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(thepit_videoram_w) AM_SHARE("videoram") AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram") AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram")
AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(thepit_input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
AM_RANGE(0xb003, 0xb003) AM_WRITE(thepit_sound_enable_w) AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb006, 0xb006) AM_WRITE(thepit_flip_screen_x_w) AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(thepit_flip_screen_y_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w) AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state ) static ADDRESS_MAP_START( desertdan_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8800, 0x8bff) AM_MIRROR(0x0400) AM_RAM_WRITE(thepit_colorram_w) AM_SHARE("colorram") AM_RANGE(0x8800, 0x8bff) AM_MIRROR(0x0400) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(thepit_videoram_w) AM_SHARE("videoram") AM_RANGE(0x9000, 0x93ff) AM_MIRROR(0x0400) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram") AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram")
AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(thepit_input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r) AM_WRITENOP // Not hooked up according to the schematics
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
AM_RANGE(0xb003, 0xb003) AM_WRITE(thepit_sound_enable_w) AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb004, 0xb005) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb006, 0xb006) AM_WRITE(thepit_flip_screen_x_w) AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(thepit_flip_screen_y_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w) AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state ) static ADDRESS_MAP_START( intrepid_main_map, AS_PROGRAM, 8, thepit_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8c00, 0x8fff) AM_READ(thepit_colorram_r) AM_WRITE(thepit_colorram_w) /* mirror for intrepi2 */ AM_RANGE(0x8c00, 0x8fff) AM_READ(intrepid_colorram_mirror_r) AM_WRITE(colorram_w) /* mirror for intrepi2 */
AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(thepit_videoram_w) AM_SHARE("videoram") AM_RANGE(0x9000, 0x93ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE(thepit_colorram_w) AM_SHARE("colorram") AM_RANGE(0x9400, 0x97ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram") AM_RANGE(0x9800, 0x983f) AM_MIRROR(0x0700) AM_RAM AM_SHARE("attributesram")
AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9840, 0x985f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9860, 0x98ff) AM_RAM AM_RANGE(0x9860, 0x98ff) AM_RAM
AM_RANGE(0xa000, 0xa000) AM_READ(thepit_input_port_0_r) AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN1")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_mask_w)
AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb001, 0xb001) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w AM_RANGE(0xb002, 0xb002) AM_WRITENOP // coin_lockout_w
AM_RANGE(0xb003, 0xb003) AM_WRITE(thepit_sound_enable_w) AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_enable_w)
AM_RANGE(0xb004, 0xb004) AM_WRITENOP // Unused, but initialized AM_RANGE(0xb004, 0xb004) AM_WRITENOP // Unused, but initialized
AM_RANGE(0xb005, 0xb005) AM_WRITE(intrepid_graphics_bank_w) AM_RANGE(0xb005, 0xb005) AM_WRITE(intrepid_graphics_bank_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(thepit_flip_screen_x_w) AM_RANGE(0xb006, 0xb006) AM_WRITE(flip_screen_x_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(thepit_flip_screen_y_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flip_screen_y_w)
AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w) AM_RANGE(0xb800, 0xb800) AM_READWRITE(watchdog_reset_r, soundlatch_byte_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -266,32 +270,32 @@ static ADDRESS_MAP_START( audio_io_map, AS_IO, 8, thepit_state )
ADDRESS_MAP_END ADDRESS_MAP_END
#define IN0_REAL\ static INPUT_PORTS_START( in0_real)
PORT_START("IN0")\ PORT_START("IN0")\
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY\ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY\ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY\ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY\ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )\ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )\ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )\ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( in2_fake )
#define IN2_FAKE\
PORT_START("IN2")\ PORT_START("IN2")\
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL\ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL\ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )\ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )\ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( thepit ) static INPUT_PORTS_START( thepit )
IN0_REAL PORT_INCLUDE(in0_real)
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -330,12 +334,12 @@ static INPUT_PORTS_START( thepit )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( desertdn ) static INPUT_PORTS_START( desertdn )
IN0_REAL PORT_INCLUDE(in0_real)
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -373,12 +377,12 @@ static INPUT_PORTS_START( desertdn )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( roundup ) static INPUT_PORTS_START( roundup )
IN0_REAL PORT_INCLUDE(in0_real)
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -416,7 +420,7 @@ static INPUT_PORTS_START( roundup )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
@ -431,7 +435,7 @@ INPUT_PORTS_END
static INPUT_PORTS_START( intrepid ) static INPUT_PORTS_START( intrepid )
IN0_REAL PORT_INCLUDE(in0_real)
/* The bit at 0x80 in IN0 Starts a timer, which, after it runs down, doesn't seem to do anything. See $0105 */ /* The bit at 0x80 in IN0 Starts a timer, which, after it runs down, doesn't seem to do anything. See $0105 */
PORT_START("IN1") PORT_START("IN1")
@ -471,12 +475,12 @@ static INPUT_PORTS_START( intrepid )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( dockman ) static INPUT_PORTS_START( dockman )
IN0_REAL PORT_INCLUDE(in0_real)
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -514,12 +518,12 @@ static INPUT_PORTS_START( dockman )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( suprmous ) static INPUT_PORTS_START( suprmous )
IN0_REAL PORT_INCLUDE(in0_real)
PORT_START("IN1") PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -558,7 +562,7 @@ static INPUT_PORTS_START( suprmous )
/* Since the real inputs are multiplexed, we used this fake port /* Since the real inputs are multiplexed, we used this fake port
to read the 2nd player controls when the screen is flipped */ to read the 2nd player controls when the screen is flipped */
IN2_FAKE PORT_INCLUDE(in2_fake)
INPUT_PORTS_END INPUT_PORTS_END
@ -626,7 +630,7 @@ static INPUT_PORTS_START( rtriv )
INPUT_PORTS_END INPUT_PORTS_END
static const gfx_layout thepit_charlayout = static const gfx_layout charlayout =
{ {
8,8, 8,8,
256, 256,
@ -638,7 +642,7 @@ static const gfx_layout thepit_charlayout =
}; };
static const gfx_layout thepit_spritelayout = static const gfx_layout spritelayout =
{ {
16,16, 16,16,
64, 64,
@ -675,15 +679,15 @@ static const gfx_layout suprmous_spritelayout =
static GFXDECODE_START( thepit ) static GFXDECODE_START( thepit )
GFXDECODE_ENTRY( "gfx1", 0, thepit_charlayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 )
GFXDECODE_ENTRY( "gfx1", 0, thepit_spritelayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 8 )
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( intrepid ) static GFXDECODE_START( intrepid )
GFXDECODE_ENTRY( "gfx1", 0x0000, thepit_charlayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 8 )
GFXDECODE_ENTRY( "gfx1", 0x0000, thepit_spritelayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0x0000, spritelayout, 0, 8 )
GFXDECODE_ENTRY( "gfx1", 0x0800, thepit_charlayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0x0800, charlayout, 0, 8 )
GFXDECODE_ENTRY( "gfx1", 0x0800, thepit_spritelayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0x0800, spritelayout, 0, 8 )
GFXDECODE_END GFXDECODE_END
static GFXDECODE_START( suprmous ) static GFXDECODE_START( suprmous )
@ -717,7 +721,7 @@ static MACHINE_CONFIG_START( thepit, thepit_state )
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(thepit_state, screen_update_thepit) MCFG_SCREEN_UPDATE_DRIVER(thepit_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
/* sound hardware */ /* sound hardware */
@ -1246,35 +1250,39 @@ DRIVER_INIT_MEMBER(thepit_state,rtriv)
{ {
// Set-up the weirdest questions read ever done // Set-up the weirdest questions read ever done
m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x4fff, read8_delegate(FUNC(thepit_state::rtriv_question_r),this)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0x4fff, read8_delegate(FUNC(thepit_state::rtriv_question_r),this));
save_item(NAME(m_question_address));
save_item(NAME(m_question_rom));
save_item(NAME(m_remap_address));
} }
GAME( 1981, roundup, 0, thepit, roundup, driver_device, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", 0 ) GAME( 1981, roundup, 0, thepit, roundup, driver_device, 0, ROT90, "Taito Corporation (Amenip/Centuri license)", "Round-Up", GAME_SUPPORTS_SAVE )
GAME( 1981, fitter, roundup, thepit, fitter, driver_device, 0, ROT90, "Taito Corporation", "Fitter", 0 ) GAME( 1981, fitter, roundup, thepit, fitter, driver_device, 0, ROT90, "Taito Corporation", "Fitter", GAME_SUPPORTS_SAVE )
GAME( 1981, fitterbl, roundup, thepit, fitter, driver_device, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", 0 ) GAME( 1981, fitterbl, roundup, thepit, fitter, driver_device, 0, ROT90, "bootleg", "Fitter (bootleg of Round-Up)", GAME_SUPPORTS_SAVE )
GAME( 1981, ttfitter, roundup, thepit, fitter, driver_device, 0, ROT90, "Taito Corporation", "T.T. Fitter (Japan)", 0 ) GAME( 1981, ttfitter, roundup, thepit, fitter, driver_device, 0, ROT90, "Taito Corporation", "T.T. Fitter (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1982, thepit, 0, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics", "The Pit", 0 ) // AW == Andy Walker GAME( 1982, thepit, 0, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics", "The Pit", GAME_SUPPORTS_SAVE ) // AW == Andy Walker
GAME( 1982, thepitu1, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 1)", 0 ) GAME( 1982, thepitu1, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 1)", GAME_SUPPORTS_SAVE )
GAME( 1982, thepitu2, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 2)", 0 ) // Bally PCB GAME( 1982, thepitu2, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Centuri license)", "The Pit (US set 2)", GAME_SUPPORTS_SAVE ) // Bally PCB
GAME( 1982, thepitj, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Taito license)", "The Pit (Japan)", 0 ) GAME( 1982, thepitj, thepit, thepit, thepit, driver_device, 0, ROT90, "Zilec Electronics (Taito license)", "The Pit (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1982, dockman, 0, intrepid, dockman, driver_device, 0, ROT90, "Taito Corporation", "Dock Man", 0 ) GAME( 1982, dockman, 0, intrepid, dockman, driver_device, 0, ROT90, "Taito Corporation", "Dock Man", GAME_SUPPORTS_SAVE )
GAME( 1982, portman, dockman, intrepid, dockman, driver_device, 0, ROT90, "Taito Corporation (Nova Games Ltd. license)", "Port Man", 0 ) GAME( 1982, portman, dockman, intrepid, dockman, driver_device, 0, ROT90, "Taito Corporation (Nova Games Ltd. license)", "Port Man", GAME_SUPPORTS_SAVE )
GAME( 1982, suprmous, 0, suprmous, suprmous, driver_device, 0, ROT90, "Taito Corporation", "Super Mouse", 0 ) GAME( 1982, suprmous, 0, suprmous, suprmous, driver_device, 0, ROT90, "Taito Corporation", "Super Mouse", GAME_SUPPORTS_SAVE )
GAME( 1982, funnymou, suprmous, suprmous, suprmous, driver_device, 0, ROT90, "Taito Corporation (Chuo Co. Ltd license)", "Funny Mouse (Japan)", 0 ) // Taito PCB GAME( 1982, funnymou, suprmous, suprmous, suprmous, driver_device, 0, ROT90, "Taito Corporation (Chuo Co. Ltd license)", "Funny Mouse (Japan)", GAME_SUPPORTS_SAVE ) // Taito PCB
GAME( 1982, machomou, 0, suprmous, suprmous, driver_device, 0, ROT90, "Techstar", "Macho Mouse", 0 ) GAME( 1982, machomou, 0, suprmous, suprmous, driver_device, 0, ROT90, "Techstar", "Macho Mouse", GAME_SUPPORTS_SAVE )
GAME( 1982, desertdn, 0, desertdn, desertdn, driver_device, 0, ROT0, "Video Optics", "Desert Dan", 0 ) GAME( 1982, desertdn, 0, desertdn, desertdn, driver_device, 0, ROT0, "Video Optics", "Desert Dan", GAME_SUPPORTS_SAVE )
GAME( 1983, intrepid, 0, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games Ltd.", "Intrepid (set 1)", 0 ) GAME( 1983, intrepid, 0, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games Ltd.", "Intrepid (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1983, intrepid2,intrepid, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games Ltd.", "Intrepid (set 2)", 0 ) GAME( 1983, intrepid2,intrepid, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games Ltd.", "Intrepid (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, intrepidb,intrepid, intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Elsys)", "Intrepid (Elsys bootleg, set 1)", 0 ) GAME( 1984, intrepidb,intrepid, intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Elsys)", "Intrepid (Elsys bootleg, set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, intrepidb3,intrepid,intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Elsys)", "Intrepid (Elsys bootleg, set 2)", 0 ) GAME( 1984, intrepidb3,intrepid,intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Elsys)", "Intrepid (Elsys bootleg, set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, intrepidb2,intrepid,intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Loris)", "Intrepid (Loris bootleg)", 0 ) GAME( 1984, intrepidb2,intrepid,intrepid, intrepid, driver_device, 0, ROT90, "bootleg (Loris)", "Intrepid (Loris bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1984, zaryavos, 0, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games of Canada", "Zarya Vostoka", GAME_NOT_WORKING ) GAME( 1984, zaryavos, 0, intrepid, intrepid, driver_device, 0, ROT90, "Nova Games of Canada", "Zarya Vostoka", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 198?, rtriv, 0, intrepid, rtriv, thepit_state, rtriv, ROT90, "Romar", "Romar Triv", GAME_WRONG_COLORS ) GAME( 198?, rtriv, 0, intrepid, rtriv, thepit_state, rtriv, ROT90, "Romar", "Romar Triv", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )

View File

@ -20,34 +20,43 @@ public:
required_shared_ptr<UINT8> m_attributesram; required_shared_ptr<UINT8> m_attributesram;
required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_spriteram;
int m_question_address;
int m_question_rom;
int m_remap_address[16];
UINT8 m_graphics_bank; UINT8 m_graphics_bank;
UINT8 m_flip_screen_x; UINT8 m_flip_x;
UINT8 m_flip_screen_y; UINT8 m_flip_y;
tilemap_t *m_solid_tilemap; tilemap_t *m_solid_tilemap;
tilemap_t *m_tilemap; tilemap_t *m_tilemap;
UINT8 *m_dummy_tile; UINT8 *m_dummy_tile;
UINT8 m_nmi_mask; UINT8 m_nmi_mask;
DECLARE_READ8_MEMBER(thepit_colorram_r);
DECLARE_WRITE8_MEMBER(thepit_sound_enable_w); int m_question_address;
int m_question_rom;
int m_remap_address[16];
DECLARE_WRITE8_MEMBER(sound_enable_w);
DECLARE_WRITE8_MEMBER(nmi_mask_w); DECLARE_WRITE8_MEMBER(nmi_mask_w);
DECLARE_READ8_MEMBER(rtriv_question_r); DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(thepit_videoram_w); DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(thepit_colorram_w); DECLARE_WRITE8_MEMBER(flip_screen_x_w);
DECLARE_WRITE8_MEMBER(thepit_flip_screen_x_w); DECLARE_WRITE8_MEMBER(flip_screen_y_w);
DECLARE_WRITE8_MEMBER(thepit_flip_screen_y_w); DECLARE_READ8_MEMBER(input_port_0_r);
DECLARE_READ8_MEMBER(intrepid_colorram_mirror_r);
DECLARE_WRITE8_MEMBER(intrepid_graphics_bank_w); DECLARE_WRITE8_MEMBER(intrepid_graphics_bank_w);
DECLARE_READ8_MEMBER(thepit_input_port_0_r);
DECLARE_DRIVER_INIT(rtriv); DECLARE_READ8_MEMBER(rtriv_question_r);
TILE_GET_INFO_MEMBER(solid_get_tile_info); TILE_GET_INFO_MEMBER(solid_get_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(get_tile_info);
DECLARE_DRIVER_INIT(rtriv);
virtual void machine_start();
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(thepit); DECLARE_PALETTE_INIT(thepit);
DECLARE_PALETTE_INIT(suprmous); DECLARE_PALETTE_INIT(suprmous);
UINT32 screen_update_thepit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_desertdan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_desertdan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority_to_draw); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority_to_draw);
INTERRUPT_GEN_MEMBER(vblank_irq);
}; };

View File

@ -1,6 +1,6 @@
/*************************************************************************** /***************************************************************************
video.c thepit.c
Functions to emulate the video hardware of the machine. Functions to emulate the video hardware of the machine.
@ -136,6 +136,10 @@ void thepit_state::video_start()
m_dummy_tile = auto_alloc_array_clear(machine(), UINT8, 8*8); m_dummy_tile = auto_alloc_array_clear(machine(), UINT8, 8*8);
m_graphics_bank = 0; /* only used in intrepid */ m_graphics_bank = 0; /* only used in intrepid */
save_item(NAME(m_graphics_bank));
save_item(NAME(m_flip_x));
save_item(NAME(m_flip_y));
} }
@ -146,14 +150,14 @@ void thepit_state::video_start()
* *
*************************************/ *************************************/
WRITE8_MEMBER(thepit_state::thepit_videoram_w) WRITE8_MEMBER(thepit_state::videoram_w)
{ {
m_videoram[offset] = data; m_videoram[offset] = data;
m_tilemap->mark_tile_dirty(offset); m_tilemap->mark_tile_dirty(offset);
} }
WRITE8_MEMBER(thepit_state::thepit_colorram_w) WRITE8_MEMBER(thepit_state::colorram_w)
{ {
m_colorram[offset] = data; m_colorram[offset] = data;
m_tilemap->mark_tile_dirty(offset); m_tilemap->mark_tile_dirty(offset);
@ -161,14 +165,14 @@ WRITE8_MEMBER(thepit_state::thepit_colorram_w)
} }
WRITE8_MEMBER(thepit_state::thepit_flip_screen_x_w) WRITE8_MEMBER(thepit_state::flip_screen_x_w)
{ {
int flip; int flip;
m_flip_screen_x = data & 0x01; m_flip_x = data & 0x01;
flip = m_flip_screen_x ? TILEMAP_FLIPX : 0; flip = m_flip_x ? TILEMAP_FLIPX : 0;
if (m_flip_screen_y) if (m_flip_y)
flip |= TILEMAP_FLIPY ; flip |= TILEMAP_FLIPY ;
m_tilemap->set_flip(flip); m_tilemap->set_flip(flip);
@ -177,14 +181,14 @@ WRITE8_MEMBER(thepit_state::thepit_flip_screen_x_w)
} }
WRITE8_MEMBER(thepit_state::thepit_flip_screen_y_w) WRITE8_MEMBER(thepit_state::flip_screen_y_w)
{ {
int flip; int flip;
m_flip_screen_y = data & 0x01; m_flip_y = data & 0x01;
flip = m_flip_screen_x ? TILEMAP_FLIPX : 0; flip = m_flip_x ? TILEMAP_FLIPX : 0;
if (m_flip_screen_y) if (m_flip_y)
flip |= TILEMAP_FLIPY ; flip |= TILEMAP_FLIPY ;
m_tilemap->set_flip(flip); m_tilemap->set_flip(flip);
@ -204,11 +208,11 @@ WRITE8_MEMBER(thepit_state::intrepid_graphics_bank_w)
} }
READ8_MEMBER(thepit_state::thepit_input_port_0_r) READ8_MEMBER(thepit_state::input_port_0_r)
{ {
/* Read either the real or the fake input ports depending on the /* Read either the real or the fake input ports depending on the
horizontal flip switch. (This is how the real PCB does it) */ horizontal flip switch. (This is how the real PCB does it) */
if (m_flip_screen_x) if (m_flip_x)
{ {
return ioport("IN2")->read(); return ioport("IN2")->read();
} }
@ -245,13 +249,13 @@ void thepit_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect,
flipx = m_spriteram[offs + 1] & 0x40; flipx = m_spriteram[offs + 1] & 0x40;
flipy = m_spriteram[offs + 1] & 0x80; flipy = m_spriteram[offs + 1] & 0x80;
if (m_flip_screen_y) if (m_flip_y)
{ {
y = 240 - y; y = 240 - y;
flipy = !flipy; flipy = !flipy;
} }
if (m_flip_screen_x) if (m_flip_x)
{ {
x = 242 - x; x = 242 - x;
flipx = !flipx; flipx = !flipx;
@ -277,7 +281,7 @@ void thepit_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect,
} }
UINT32 thepit_state::screen_update_thepit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 thepit_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
const rectangle spritevisiblearea(2*8+1, 32*8-1, 2*8, 30*8-1); const rectangle spritevisiblearea(2*8+1, 32*8-1, 2*8, 30*8-1);
const rectangle spritevisibleareaflipx(0*8, 30*8-2, 2*8, 30*8-1); const rectangle spritevisibleareaflipx(0*8, 30*8-2, 2*8, 30*8-1);
@ -286,8 +290,8 @@ UINT32 thepit_state::screen_update_thepit(screen_device &screen, bitmap_ind16 &b
for (offs = 0; offs < 32; offs++) for (offs = 0; offs < 32; offs++)
{ {
int xshift = m_flip_screen_x ? 128 : 0; int xshift = m_flip_x ? 128 : 0;
int yshift = m_flip_screen_y ? -8 : 0; int yshift = m_flip_y ? -8 : 0;
m_tilemap->set_scrollx(offs, xshift); m_tilemap->set_scrollx(offs, xshift);
m_solid_tilemap->set_scrollx(offs, xshift); m_solid_tilemap->set_scrollx(offs, xshift);
@ -301,13 +305,13 @@ UINT32 thepit_state::screen_update_thepit(screen_device &screen, bitmap_ind16 &b
m_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_tilemap->draw(screen, bitmap, cliprect, 0, 0);
/* low priority sprites */ /* low priority sprites */
draw_sprites(bitmap, m_flip_screen_x ? spritevisibleareaflipx : spritevisiblearea, 0); draw_sprites(bitmap, m_flip_x ? spritevisibleareaflipx : spritevisiblearea, 0);
/* high priority tiles */ /* high priority tiles */
m_solid_tilemap->draw(screen, bitmap, cliprect, 1, 1); m_solid_tilemap->draw(screen, bitmap, cliprect, 1, 1);
/* high priority sprites */ /* high priority sprites */
draw_sprites(bitmap, m_flip_screen_x ? spritevisibleareaflipx : spritevisiblearea, 1); draw_sprites(bitmap, m_flip_x ? spritevisibleareaflipx : spritevisiblearea, 1);
return 0; return 0;
} }
@ -320,8 +324,8 @@ UINT32 thepit_state::screen_update_desertdan(screen_device &screen, bitmap_ind16
for (offs = 0; offs < 32; offs++) for (offs = 0; offs < 32; offs++)
{ {
int xshift = m_flip_screen_x ? 128 : 0; int xshift = m_flip_x ? 128 : 0;
int yshift = m_flip_screen_y ? -8 : 0; int yshift = m_flip_y ? -8 : 0;
m_tilemap->set_scrollx(offs, xshift); m_tilemap->set_scrollx(offs, xshift);
m_solid_tilemap->set_scrollx(offs, xshift); m_solid_tilemap->set_scrollx(offs, xshift);
@ -337,7 +341,7 @@ UINT32 thepit_state::screen_update_desertdan(screen_device &screen, bitmap_ind16
/* low priority sprites */ /* low priority sprites */
m_graphics_bank = 1; m_graphics_bank = 1;
draw_sprites(bitmap, m_flip_screen_y ? spritevisibleareaflipx : spritevisiblearea, 0); draw_sprites(bitmap, m_flip_y ? spritevisibleareaflipx : spritevisiblearea, 0);
/* high priority tiles */ // not sure about this, draws a white block over the title logo sprite, looks like it should be behind? /* high priority tiles */ // not sure about this, draws a white block over the title logo sprite, looks like it should be behind?
m_graphics_bank = 0; m_graphics_bank = 0;
@ -345,7 +349,7 @@ UINT32 thepit_state::screen_update_desertdan(screen_device &screen, bitmap_ind16
/* high priority sprites */ /* high priority sprites */
m_graphics_bank = 1; m_graphics_bank = 1;
draw_sprites(bitmap, m_flip_screen_y ? spritevisibleareaflipx : spritevisiblearea, 1); draw_sprites(bitmap, m_flip_y ? spritevisibleareaflipx : spritevisiblearea, 1);
return 0; return 0;
} }

View File

@ -33,7 +33,6 @@ static ADDRESS_MAP_START( mpf1_map, AS_PROGRAM, 8, mpf1_state )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x0fff) AM_ROM AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x1800, 0x1fff) AM_RAM AM_RANGE(0x1800, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x2fff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( mpf1b_map, AS_PROGRAM, 8, mpf1_state ) static ADDRESS_MAP_START( mpf1b_map, AS_PROGRAM, 8, mpf1_state )
@ -438,7 +437,7 @@ DIRECT_UPDATE_MEMBER(mpf1_state::mpf1_direct_update_handler)
} }
} }
return 0; return address;
} }
DRIVER_INIT_MEMBER(mpf1_state,mpf1) DRIVER_INIT_MEMBER(mpf1_state,mpf1)