diff --git a/src/mame/drivers/capbowl.c b/src/mame/drivers/capbowl.c index 46c905b0e14..c6690f7b41d 100644 --- a/src/mame/drivers/capbowl.c +++ b/src/mame/drivers/capbowl.c @@ -329,10 +329,10 @@ static const ym2203_interface ym2203_config = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, ticket_dispenser_r), + DEVCB_DEVICE_HANDLER("ticket", ticket_dispenser_r), DEVCB_NULL, DEVCB_NULL, - DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, ticket_dispenser_w), /* Also a status LED. See memory map above */ + DEVCB_DEVICE_HANDLER("ticket", ticket_dispenser_w), /* Also a status LED. See memory map above */ }, firqhandler }; @@ -385,6 +385,8 @@ static MACHINE_DRIVER_START( capbowl ) MDRV_MACHINE_START(capbowl) MDRV_MACHINE_RESET(capbowl) MDRV_NVRAM_HANDLER(capbowl) + + MDRV_TICKET_DISPENSER_ADD("ticket", 100, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) /* video hardware */ MDRV_VIDEO_START(capbowl) @@ -511,21 +513,12 @@ ROM_END * *************************************/ -static DRIVER_INIT( bowlrama ) -{ - /* Initialize the ticket dispenser to 100 milliseconds */ - /* (I'm not sure what the correct value really is) */ - ticket_dispenser_init(machine, 100, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); -} - static DRIVER_INIT( capbowl ) { UINT8 *ROM = memory_region(machine, "maincpu"); /* configure ROM banks in 0x0000-0x3fff */ memory_configure_bank(machine, "bank1", 0, 6, &ROM[0x10000], 0x4000); - - DRIVER_INIT_CALL(bowlrama); } @@ -540,4 +533,4 @@ GAME( 1988, capbowl2, capbowl, capbowl, capbowl, capbowl, ROT270, "Incredible GAME( 1988, capbowl3, capbowl, capbowl, capbowl, capbowl, ROT270, "Incredible Technologies", "Capcom Bowling (set 3)", 0 ) GAME( 1988, capbowl4, capbowl, capbowl, capbowl, capbowl, ROT270, "Incredible Technologies", "Capcom Bowling (set 4)", 0 ) GAME( 1989, clbowl, capbowl, capbowl, capbowl, capbowl, ROT270, "Incredible Technologies", "Coors Light Bowling", 0 ) -GAME( 1991, bowlrama, 0, bowlrama, capbowl, bowlrama, ROT270, "P&P Marketing", "Bowl-O-Rama", 0 ) +GAME( 1991, bowlrama, 0, bowlrama, capbowl, 0, ROT270, "P&P Marketing", "Bowl-O-Rama", 0 ) diff --git a/src/mame/drivers/dcheese.c b/src/mame/drivers/dcheese.c index 28fd6b8674c..4b863425c88 100644 --- a/src/mame/drivers/dcheese.c +++ b/src/mame/drivers/dcheese.c @@ -131,7 +131,7 @@ static WRITE16_HANDLER( eeprom_control_w ) if (ACCESSING_BITS_0_7) { input_port_write(space->machine, "EEPROMOUT", data, 0xff); - ticket_dispenser_w(space, 0, (data & 1) << 7); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, (data & 1) << 7); } } @@ -270,7 +270,7 @@ static INPUT_PORTS_START( dcheese ) PORT_START("240000") PORT_BIT( 0x001f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* low 5 bits read as a unit */ - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, NULL) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* sound->main buffer status (0=empty) */ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(sound_latch_state_r, NULL) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -319,7 +319,7 @@ static INPUT_PORTS_START( lottof2 ) PORT_START("240000") PORT_BIT( 0x001f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* low 5 bits read as a unit */ - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, NULL) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* sound->main buffer status (0=empty) */ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(sound_latch_state_r, NULL) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -366,7 +366,7 @@ static INPUT_PORTS_START( fredmem ) PORT_START("240000") PORT_BIT( 0x001f, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* low 5 bits read as a unit */ - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, NULL) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* sound->main buffer status (0=empty) */ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(sound_latch_state_r, NULL) PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -422,6 +422,7 @@ static MACHINE_DRIVER_START( dcheese ) MDRV_MACHINE_START(dcheese) MDRV_EEPROM_93C46_NODEFAULT_ADD("eeprom") + MDRV_TICKET_DISPENSER_ADD("ticket", 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -799,31 +800,18 @@ ROM_END -/************************************* - * - * Driver configuration - * - *************************************/ - -static DRIVER_INIT( dcheese ) -{ - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); -} - - - /************************************* * * Game driver(s) * *************************************/ -GAME( 1993, dcheese, 0, dcheese, dcheese, dcheese, ROT90, "HAR", "Double Cheese", GAME_SUPPORTS_SAVE ) -GAME( 1993, lottof2, 0, dcheese, lottof2, dcheese, ROT0, "HAR", "Lotto Fun 2", GAME_SUPPORTS_SAVE ) -GAME( 1993, cecmatch, 0, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "ChuckECheese's Match Game", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmem, 0, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95)", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmemus,fredmem, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (US, High Score version, 3/10/95)", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmemuk,fredmem, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (UK, 3/17/95)", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmemj, fredmem, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95)", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmemc, fredmem, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95)", GAME_SUPPORTS_SAVE ) -GAME( 1994, fredmesp, fredmem, fredmem, fredmem, dcheese, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Spanish, 3/17/95)", GAME_SUPPORTS_SAVE ) +GAME( 1993, dcheese, 0, dcheese, dcheese, 0, ROT90, "HAR", "Double Cheese", GAME_SUPPORTS_SAVE ) +GAME( 1993, lottof2, 0, dcheese, lottof2, 0, ROT0, "HAR", "Lotto Fun 2", GAME_SUPPORTS_SAVE ) +GAME( 1993, cecmatch, 0, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "ChuckECheese's Match Game", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmem, 0, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (World?, Ticket version, 3/17/95)", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmemus, fredmem, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (US, High Score version, 3/10/95)", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmemuk, fredmem, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (UK, 3/17/95)", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmemj, fredmem, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Japan, High Score version, 3/20/95)", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmemc, fredmem, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Mandarin Chinese, 3/17/95)", GAME_SUPPORTS_SAVE ) +GAME( 1994, fredmesp, fredmem, fredmem, fredmem, 0, ROT0, "Coastal Amusements", "Fred Flintstones' Memory Match (Spanish, 3/17/95)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/gei.c b/src/mame/drivers/gei.c index 5ab77af9ddd..4e06f3ce16a 100644 --- a/src/mame/drivers/gei.c +++ b/src/mame/drivers/gei.c @@ -140,7 +140,7 @@ static WRITE8_DEVICE_HANDLER( sound_w ) set_led_status(device->machine, 9,data & 0x08); /* bit 5 - ticket out in trivia games */ - ticket_dispenser_w(space, 0, (data & 0x20)<< 2); + ticket_dispenser_w(devtag_get_device(device->machine, "ticket"), 0, (data & 0x20)<< 2); /* bit 6 enables NMI */ interrupt_enable_w(space, 0, data & 0x40); @@ -501,7 +501,7 @@ static INPUT_PORTS_START(trivia_standard) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, 0) /* ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) /* ticket status */ PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -609,7 +609,7 @@ static INPUT_PORTS_START( getrivia ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_IMPULSE(2) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x00) PORT_NAME ("Start in no coins mode") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x40) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x00) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, 0) /* ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) /* ticket status */ PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -786,7 +786,7 @@ static INPUT_PORTS_START( gt103a ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_IMPULSE(2) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x00) PORT_NAME ("Start in no coins mode") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x40) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_CONDITION("DSWA", 0x40, PORTCOND_EQUALS, 0x00) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, 0) /* ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) /* ticket status */ PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -892,7 +892,7 @@ static INPUT_PORTS_START(sprtauth) PORT_MODIFY("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(ticket_dispenser_0_port_r, 0) /* ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) /* ticket status */ PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -992,15 +992,6 @@ static const ppi8255_interface findout_ppi8255_intf[2] = } }; -static MACHINE_RESET( getrivia ) -{ - ticket_dispenser_init(machine, 100, 1, 1); -} - -static MACHINE_RESET( gselect ) -{ -} - static MACHINE_DRIVER_START( getrivia ) MDRV_CPU_ADD("maincpu",Z80,4000000) /* 4 MHz */ MDRV_CPU_PROGRAM_MAP(getrivia_map) @@ -1017,7 +1008,6 @@ static MACHINE_DRIVER_START( getrivia ) MDRV_PALETTE_LENGTH(8) MDRV_PALETTE_INIT(gei) - MDRV_MACHINE_RESET(getrivia) MDRV_NVRAM_HANDLER(generic_0fill) MDRV_VIDEO_START(generic_bitmapped) @@ -1025,6 +1015,7 @@ static MACHINE_DRIVER_START( getrivia ) MDRV_PPI8255_ADD( "ppi8255_0", getrivia_ppi8255_intf[0] ) MDRV_PPI8255_ADD( "ppi8255_1", getrivia_ppi8255_intf[1] ) + MDRV_TICKET_DISPENSER_ADD("ticket", 100, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") @@ -1047,12 +1038,12 @@ static MACHINE_DRIVER_START( gselect ) /* basic machine hardware */ MDRV_IMPORT_FROM(getrivia) + + MDRV_DEVICE_REMOVE("ticket") MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(gselect_map) - MDRV_MACHINE_RESET(gselect) - MDRV_PPI8255_RECONFIG( "ppi8255_0", gselect_ppi8255_intf[0] ) MDRV_PPI8255_RECONFIG( "ppi8255_1", gselect_ppi8255_intf[1] ) MACHINE_DRIVER_END @@ -1062,10 +1053,11 @@ static MACHINE_DRIVER_START( jokpokera ) /* basic machine hardware */ MDRV_IMPORT_FROM(getrivia) + MDRV_DEVICE_REMOVE("ticket") + MDRV_CPU_MODIFY("maincpu") MDRV_CPU_PROGRAM_MAP(gselect_map) - MDRV_MACHINE_RESET(gselect) MDRV_PPI8255_RECONFIG( "ppi8255_0", gselect_ppi8255_intf[0] ) MACHINE_DRIVER_END diff --git a/src/mame/drivers/itech32.c b/src/mame/drivers/itech32.c index b56f8479ee0..4a93ffb1bdf 100644 --- a/src/mame/drivers/itech32.c +++ b/src/mame/drivers/itech32.c @@ -468,9 +468,6 @@ static MACHINE_RESET( itech32 ) sound_data = 0; sound_return = 0; sound_int_state = 0; - - /* reset the ticket dispenser */ - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); } @@ -735,7 +732,7 @@ static WRITE8_DEVICE_HANDLER( drivedge_portb_out ) set_led_status(space->machine, 1, data & 0x01); set_led_status(space->machine, 2, data & 0x02); set_led_status(space->machine, 3, data & 0x04); - ticket_dispenser_w(space, 0, (data & 0x10) << 3); + ticket_dispenser_w(devtag_get_device(device->machine, "ticket"), 0, (data & 0x10) << 3); coin_counter_w(space->machine, 0, (data & 0x20) >> 5); } @@ -754,7 +751,7 @@ static WRITE8_DEVICE_HANDLER( pia_portb_out ) /* bit 4 controls the ticket dispenser */ /* bit 5 controls the coin counter */ /* bit 6 controls the diagnostic sound LED */ - ticket_dispenser_w(space, 0, (data & 0x10) << 3); + ticket_dispenser_w(devtag_get_device(device->machine, "ticket"), 0, (data & 0x10) << 3); coin_counter_w(space->machine, 0, (data & 0x20) >> 5); } @@ -1737,6 +1734,8 @@ static MACHINE_DRIVER_START( timekill ) MDRV_MACHINE_RESET(itech32) MDRV_NVRAM_HANDLER(itech32) + + MDRV_TICKET_DISPENSER_ADD("ticket", 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) @@ -4123,34 +4122,34 @@ Label1 bne.s Label1 ; Infinite loop if result isn't 0x80 * *************************************/ -GAME( 1992, timekill, 0, timekill, timekill, timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32)", 0 ) +GAME( 1992, timekill, 0, timekill, timekill, timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.32)", 0 ) GAME( 1992, timekill131, timekill, timekill, timekill, timekill, ROT0, "Strata/Incredible Technologies", "Time Killers (v1.31)", 0 ) -GAME( 1993, hardyard, 0, bloodstm, hardyard, hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.20)", 0 ) -GAME( 1993, hardyard10, hardyard, bloodstm, hardyard, hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.00)", 0 ) -GAME( 1994, bloodstm, 0, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.22)", 0 ) -GAME( 1994, bloodstm22, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.20)", 0 ) -GAME( 1994, bloodstm21, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.10)", 0 ) -GAME( 1994, bloodstm11, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.10)", 0 ) -GAME( 1994, pairs, 0, bloodstm, pairs, bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1.2, 09/30/94)", 0 ) -GAME( 1994, pairsa, pairs, bloodstm, pairs, bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (09/07/94)", 0 ) -GAME( 1994, hotmemry, pairs, bloodstm, pairs, bloodstm, ROT0, "Tuning/Incredible Technologies", "Hot Memory (V1.2, Germany)", 0 ) -GAME( 1994, drivedge, 0, drivedge, drivedge, drivedge, ROT0, "Strata/Incredible Technologies", "Driver's Edge", GAME_IMPERFECT_GRAPHICS ) -GAME( 1995, wcbowl, 0, sftm, wcbowln, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.66)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ -GAME( 1995, wcbowl165, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.65)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ -GAME( 1995, wcbowl161, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.61)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ -GAME( 1995, wcbowl16, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.6)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ -GAME( 1995, wcbowl15, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.5)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ -GAME( 1995, wcbowl13, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.3)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ -GAME( 1995, wcbowl12, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.2)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ -GAME( 1995, sftm, 0, sftm, sftm, sftm, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.12)" , 0) /* PIC 16C54 labeled as ITSF-1 */ -GAME( 1995, sftm111, sftm, sftm, sftm, sftm110, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.11)" , 0) /* PIC 16C54 labeled as ITSF-1 */ -GAME( 1995, sftm110, sftm, sftm, sftm, sftm110, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.10)" , 0) /* PIC 16C54 labeled as ITSF-1 */ -GAME( 1995, sftmj, sftm, sftm, sftm, sftm, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , 0) /* PIC 16C54 labeled as ITSF-1 */ -GAME( 1997, shufshot, 0, sftm, shufshot, shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.40)" , 0) /* PIC 16C54 labeled as ITSHF-1 */ +GAME( 1993, hardyard, 0, bloodstm, hardyard, hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.20)", 0 ) +GAME( 1993, hardyard10, hardyard, bloodstm, hardyard, hardyard, ROT0, "Strata/Incredible Technologies", "Hard Yardage (v1.00)", 0 ) +GAME( 1994, bloodstm, 0, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.22)", 0 ) +GAME( 1994, bloodstm22, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.20)", 0 ) +GAME( 1994, bloodstm21, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v2.10)", 0 ) +GAME( 1994, bloodstm11, bloodstm, bloodstm, bloodstm, bloodstm, ROT0, "Strata/Incredible Technologies", "Blood Storm (v1.10)", 0 ) +GAME( 1994, pairs, 0, bloodstm, pairs, bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (V1.2, 09/30/94)", 0 ) +GAME( 1994, pairsa, pairs, bloodstm, pairs, bloodstm, ROT0, "Strata/Incredible Technologies", "Pairs (09/07/94)", 0 ) +GAME( 1994, hotmemry, pairs, bloodstm, pairs, bloodstm, ROT0, "Tuning/Incredible Technologies", "Hot Memory (V1.2, Germany)", 0 ) +GAME( 1994, drivedge, 0, drivedge, drivedge, drivedge, ROT0, "Strata/Incredible Technologies", "Driver's Edge", GAME_IMPERFECT_GRAPHICS ) +GAME( 1995, wcbowl, 0, sftm, wcbowln, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.66)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ +GAME( 1995, wcbowl165, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.65)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ +GAME( 1995, wcbowl161, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.61)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ +GAME( 1995, wcbowl16, wcbowl, sftm, shufbowl, wcbowln, ROT0, "Incredible Technologies", "World Class Bowling (v1.6)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ +GAME( 1995, wcbowl15, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.5)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ +GAME( 1995, wcbowl13, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.3)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ +GAME( 1995, wcbowl12, wcbowl, bloodstm, wcbowl, wcbowl, ROT0, "Incredible Technologies", "World Class Bowling (v1.2)" , 0) /* PIC 16C54 labeled as ITBWL-1 */ +GAME( 1995, sftm, 0, sftm, sftm, sftm, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.12)" , 0) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1995, sftm111, sftm, sftm, sftm, sftm110, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.11)" , 0) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1995, sftm110, sftm, sftm, sftm, sftm110, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.10)" , 0) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1995, sftmj, sftm, sftm, sftm, sftm, ROT0, "Capcom/Incredible Technologies", "Street Fighter: The Movie (v1.12N, Japan)" , 0) /* PIC 16C54 labeled as ITSF-1 */ +GAME( 1997, shufshot, 0, sftm, shufshot, shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.40)" , 0) /* PIC 16C54 labeled as ITSHF-1 */ GAME( 1997, shufshot139, shufshot, sftm, shufshot, shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.39)" , 0) /* PIC 16C54 labeled as ITSHF-1 */ GAME( 1997, shufshot137, shufshot, sftm, shufbowl, shufshot, ROT0, "Strata/Incredible Technologies", "Shuffleshot (v1.37)" , 0) /* PIC 16C54 labeled as ITSHF-1 */ -GAME( 1997, wcbowl140, wcbowldx, tourny, wcbowldx, wcbowlt, ROT0, "Incredible Technologies", "World Class Bowling Tournament (v1.40)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ -GAME( 1999, wcbowldx, 0, sftm, wcbowldx, shufshot, ROT0, "Incredible Technologies", "World Class Bowling Deluxe (v2.00)" , 0) /* PIC 16C54 labeled as ITBWL-4 */ +GAME( 1997, wcbowl140, wcbowldx, tourny, wcbowldx, wcbowlt, ROT0, "Incredible Technologies", "World Class Bowling Tournament (v1.40)" , 0) /* PIC 16C54 labeled as ITBWL-3 */ +GAME( 1999, wcbowldx, 0, sftm, wcbowldx, shufshot, ROT0, "Incredible Technologies", "World Class Bowling Deluxe (v2.00)" , 0) /* PIC 16C54 labeled as ITBWL-4 */ /* The following naming conventions are used: diff --git a/src/mame/drivers/itech8.c b/src/mame/drivers/itech8.c index 7f5f4027421..c254d3196b4 100644 --- a/src/mame/drivers/itech8.c +++ b/src/mame/drivers/itech8.c @@ -552,7 +552,7 @@ static WRITE8_HANDLER( pia_portb_out ); static const pia6821_interface pia_interface = { DEVCB_NULL, /* port A in */ - DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, ticket_dispenser_r), /* port B in */ + DEVCB_DEVICE_LINE("ticket", ticket_dispenser_line_r), /* port B in */ DEVCB_NULL, /* line CA1 in */ DEVCB_NULL, /* line CB1 in */ DEVCB_NULL, /* line CA2 in */ @@ -680,9 +680,6 @@ static MACHINE_RESET( itech8 ) device_reset(cputag_get_cpu(machine, "maincpu")); } - /* reset the ticket dispenser */ - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW); - /* reset the palette chip */ tlc34076_reset(6); @@ -779,7 +776,7 @@ static WRITE8_HANDLER( pia_portb_out ) /* bit 5 controls the coin counter */ /* bit 6 controls the diagnostic sound LED */ pia_portb_data = data; - ticket_dispenser_w(space, 0, (data & 0x10) << 3); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, (data & 0x10) << 3); coin_counter_w(space->machine, 0, (data & 0x20) >> 5); } @@ -793,7 +790,7 @@ static WRITE8_DEVICE_HANDLER( ym2203_portb_out ) /* bit 6 controls the diagnostic sound LED */ /* bit 7 controls the ticket dispenser */ pia_portb_data = data; - ticket_dispenser_w(cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0, data & 0x80); + ticket_dispenser_w(devtag_get_device(device->machine, "ticket"), 0, data & 0x80); coin_counter_w(device->machine, 0, (data & 0x20) >> 5); } @@ -1729,6 +1726,8 @@ static MACHINE_DRIVER_START( itech8_core_lo ) MDRV_MACHINE_RESET(itech8) MDRV_NVRAM_HANDLER(itech8) + + MDRV_TICKET_DISPENSER_ADD("ticket", 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) diff --git a/src/mame/drivers/lethalj.c b/src/mame/drivers/lethalj.c index 9b3dd8d1a32..f4d8a7bb89c 100644 --- a/src/mame/drivers/lethalj.c +++ b/src/mame/drivers/lethalj.c @@ -159,13 +159,6 @@ Pin #11(+) | | R | * *************************************/ -static CUSTOM_INPUT( ticket_status ) -{ - const address_space *space = cputag_get_address_space(field->port->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - return ticket_dispenser_0_r(space, 0) >> 7; -} - - static CUSTOM_INPUT( cclownz_paddle ) { int value = input_port_read(field->port->machine, "PADDLE"); @@ -183,14 +176,14 @@ static CUSTOM_INPUT( cclownz_paddle ) static WRITE16_HANDLER( ripribit_control_w ) { coin_counter_w(space->machine, 0, data & 1); - ticket_dispenser_0_w(space, 0, ((data >> 1) & 1) << 7); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, ((data >> 1) & 1) << 7); output_set_lamp_value(0, (data >> 2) & 1); } static WRITE16_HANDLER( cfarm_control_w ) { - ticket_dispenser_0_w(space, 0, ((data >> 0) & 1) << 7); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, ((data >> 0) & 1) << 7); output_set_lamp_value(0, (data >> 2) & 1); output_set_lamp_value(1, (data >> 3) & 1); output_set_lamp_value(2, (data >> 4) & 1); @@ -200,7 +193,7 @@ static WRITE16_HANDLER( cfarm_control_w ) static WRITE16_HANDLER( cclownz_control_w ) { - ticket_dispenser_0_w(space, 0, ((data >> 0) & 1) << 7); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, ((data >> 0) & 1) << 7); output_set_lamp_value(0, (data >> 2) & 1); output_set_lamp_value(1, (data >> 4) & 1); output_set_lamp_value(2, (data >> 5) & 1); @@ -411,7 +404,7 @@ static INPUT_PORTS_START( ripribit ) PORT_START("IN0") PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(ticket_status, NULL) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0xffc0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") @@ -498,7 +491,7 @@ static INPUT_PORTS_START( cfarm ) PORT_DIPSETTING( 0x0000, "10" ) PORT_START("IN1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(ticket_status, NULL) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0x0006, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) @@ -549,7 +542,7 @@ static INPUT_PORTS_START( cclownz ) PORT_START("IN1") PORT_BIT( 0x0f0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(cclownz_paddle, NULL) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(ticket_status, NULL) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_BIT( 0x0060, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -604,6 +597,8 @@ static MACHINE_DRIVER_START( gameroom ) MDRV_CPU_ADD("maincpu", TMS34010, MASTER_CLOCK) MDRV_CPU_CONFIG(tms_config) MDRV_CPU_PROGRAM_MAP(lethalj_map) + + MDRV_TICKET_DISPENSER_ADD("ticket", 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -906,21 +901,18 @@ ROM_END static DRIVER_INIT( ripribit ) { - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x04100010, 0x0410001f, 0, 0, ripribit_control_w); } static DRIVER_INIT( cfarm ) { - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x04100010, 0x0410001f, 0, 0, cfarm_control_w); } static DRIVER_INIT( cclownz ) { - ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH); memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x04100010, 0x0410001f, 0, 0, cclownz_control_w); } diff --git a/src/mame/drivers/tickee.c b/src/mame/drivers/tickee.c index 65bbcb200a0..e09dbab1c6b 100644 --- a/src/mame/drivers/tickee.c +++ b/src/mame/drivers/tickee.c @@ -38,6 +38,8 @@ static int beamyadd; static int palette_bank; static UINT8 gunx[2]; + + /************************************* * * Compute X/Y coordinates @@ -73,9 +75,6 @@ static TIMER_CALLBACK( trigger_gun_interrupt ) } - - - static TIMER_CALLBACK( clear_gun_interrupt ) { /* clear the IRQ on the next scanline? */ @@ -108,7 +107,6 @@ static TIMER_CALLBACK( setup_gun_interrupts ) - /************************************* * * Video startup @@ -123,6 +121,7 @@ static VIDEO_START( tickee ) } + /************************************* * * Video update @@ -173,7 +172,6 @@ static void rapidfir_scanline_update(const device_config *screen, bitmap_t *bitm } else { - /* copy the non-blanked portions of this scanline */ for (x = params->heblnk; x < params->hsblnk; x += 2) { @@ -181,7 +179,6 @@ static void rapidfir_scanline_update(const device_config *screen, bitmap_t *bitm dest[x + 0] = pens[pixels & 0xff]; dest[x + 1] = pens[pixels >> 8]; } - } } @@ -196,7 +193,6 @@ static MACHINE_RESET( tickee ) { beamxadd = 50; beamyadd = 0; - ticket_dispenser_init(machine, 100, 0, 1); tlc34076_reset(6); } @@ -227,6 +223,7 @@ static READ16_HANDLER( rapidfir_transparent_r ) return tickee_vram[offset]; } + void rapidfir_to_shiftreg(const address_space *space, UINT32 address, UINT16 *shiftreg) { if (address < 0x800000) @@ -240,24 +237,6 @@ void rapidfir_from_shiftreg(const address_space *space, UINT32 address, UINT16 * memcpy(&tickee_vram[TOWORD(address)], shiftreg, TOBYTE(0x2000)); } -/************************************* - * - * Miscellaneous control bits - * - *************************************/ - -static READ8_DEVICE_HANDLER( port1_r ) -{ - const address_space *space = cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - return input_port_read(device->machine, "IN0") | (ticket_dispenser_0_r(space, 0) >> 5) | (ticket_dispenser_1_r(space, 0) >> 6); -} - -static READ8_DEVICE_HANDLER( port2_r ) -{ - const address_space *space = cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - return input_port_read(device->machine, "IN2") | (ticket_dispenser_0_r(space, 0) >> 5) | (ticket_dispenser_1_r(space, 0) >> 6); -} - /************************************* @@ -281,8 +260,8 @@ static WRITE16_HANDLER( tickee_control_w ) if (offset == 3) { - ticket_dispenser_0_w(space, 0, (data & 8) << 4); - ticket_dispenser_1_w(space, 0, (data & 4) << 5); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket1"), 0, (data & 8) << 4); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket2"), 0, (data & 4) << 5); } if (olddata != tickee_control[offset]) @@ -291,7 +270,6 @@ static WRITE16_HANDLER( tickee_control_w ) - /************************************* * * Unknowns @@ -303,6 +281,7 @@ static READ16_HANDLER( ffff_r ) return 0xffff; } + static READ16_HANDLER( rapidfir_gun1_r ) { return gunx[0]; @@ -320,6 +299,7 @@ static READ16_HANDLER( ff7f_r ) return 0xff7f; } + static WRITE16_HANDLER( rapidfir_control_w ) { /* other bits like control on tickee? */ @@ -327,6 +307,8 @@ static WRITE16_HANDLER( rapidfir_control_w ) palette_bank = data & 1; } + + /************************************* * * Sound @@ -342,7 +324,7 @@ static WRITE16_DEVICE_HANDLER( sound_bank_w ) break; case 0x2d: - okim6295_set_bank_base(device, 0x50000); + okim6295_set_bank_base(device, 0x40000); break; case 0x1c: @@ -359,6 +341,8 @@ static WRITE16_DEVICE_HANDLER( sound_bank_w ) } } + + /************************************* * * Memory maps @@ -398,6 +382,7 @@ static ADDRESS_MAP_START( ghoshunt_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("user1", 0) ADDRESS_MAP_END + /* newer hardware */ static ADDRESS_MAP_START( rapidfir_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000000, 0x007fffff) AM_RAM AM_BASE(&tickee_vram) @@ -423,6 +408,7 @@ static ADDRESS_MAP_START( rapidfir_map, ADDRESS_SPACE_PROGRAM, 16 ) ADDRESS_MAP_END + /************************************* * * Input ports @@ -455,8 +441,8 @@ static INPUT_PORTS_START( tickee ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket2", ticket_dispenser_line_r) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket1", ticket_dispenser_line_r) /* left ticket status */ PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN1") @@ -485,6 +471,7 @@ static INPUT_PORTS_START( tickee ) PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) INPUT_PORTS_END + static INPUT_PORTS_START( ghoshunt ) PORT_START("DSW") PORT_DIPNAME( 0x01, 0x01, "Messages in Play") @@ -512,8 +499,8 @@ static INPUT_PORTS_START( ghoshunt ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket2", ticket_dispenser_line_r) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket1", ticket_dispenser_line_r) /* left ticket status */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -528,8 +515,8 @@ static INPUT_PORTS_START( ghoshunt ) PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* right ticket status */ - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* left ticket status */ + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket2", ticket_dispenser_line_r) /* right ticket status */ + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket1", ticket_dispenser_line_r) /* left ticket status */ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0xd8, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -546,6 +533,7 @@ static INPUT_PORTS_START( ghoshunt ) PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(10) PORT_PLAYER(2) INPUT_PORTS_END + static INPUT_PORTS_START( rapidfir ) PORT_START("IN0") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -627,8 +615,8 @@ static const ay8910_interface ay8910_interface_2 = { AY8910_LEGACY_OUTPUT, AY8910_DEFAULT_LOADS, - DEVCB_HANDLER(port1_r), - DEVCB_HANDLER(port2_r), + DEVCB_INPUT_PORT("IN0"), + DEVCB_INPUT_PORT("IN2"), DEVCB_NULL, DEVCB_NULL }; @@ -667,6 +655,7 @@ static const tms34010_config rapidfir_tms_config = }; + /************************************* * * Machine drivers @@ -682,6 +671,9 @@ static MACHINE_DRIVER_START( tickee ) MDRV_MACHINE_RESET(tickee) MDRV_NVRAM_HANDLER(generic_1fill) + + MDRV_TICKET_DISPENSER_ADD("ticket1", 100, TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) + MDRV_TICKET_DISPENSER_ADD("ticket2", 100, TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ MDRV_VIDEO_START(tickee) @@ -703,6 +695,7 @@ static MACHINE_DRIVER_START( tickee ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_DRIVER_END + static MACHINE_DRIVER_START( ghoshunt ) MDRV_IMPORT_FROM(tickee) @@ -711,6 +704,7 @@ static MACHINE_DRIVER_START( ghoshunt ) MDRV_CPU_PROGRAM_MAP(ghoshunt_map) MACHINE_DRIVER_END + static MACHINE_DRIVER_START( rapidfir ) /* basic machine hardware */ @@ -737,6 +731,8 @@ static MACHINE_DRIVER_START( rapidfir ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) MACHINE_DRIVER_END + + /************************************* * * ROM definitions @@ -941,6 +937,7 @@ ROM_START( rapidfire ) /* Version 1.0, test menu shows "Build 236" */ ROM_END + /************************************* * * Game drivers diff --git a/src/mame/drivers/williams.c b/src/mame/drivers/williams.c index 6c1dd998324..81e013e2c60 100644 --- a/src/mame/drivers/williams.c +++ b/src/mame/drivers/williams.c @@ -497,6 +497,7 @@ #include "sound/dac.h" #include "sound/hc55516.h" #include "machine/6821pia.h" +#include "machine/ticket.h" #include "audio/williams.h" #include "williams.h" @@ -504,6 +505,8 @@ #define MASTER_CLOCK (12000000) #define SOUND_CLOCK (3579000) + + /************************************* * * Defender memory handlers @@ -1237,7 +1240,7 @@ static INPUT_PORTS_START( lottofun ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START1 ) PORT_BIT( 0x60, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* Used by ticket dispenser */ + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) PORT_START("IN1") PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) @@ -1520,6 +1523,7 @@ static MACHINE_DRIVER_START( lottofun ) /* pia */ MDRV_PIA6821_MODIFY("pia_0", lottofun_pia_0_intf) + MDRV_TICKET_DISPENSER_ADD("ticket", 70, TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH) MACHINE_DRIVER_END diff --git a/src/mame/drivers/xtheball.c b/src/mame/drivers/xtheball.c index 327d724af1b..9fc0b6d3bef 100644 --- a/src/mame/drivers/xtheball.c +++ b/src/mame/drivers/xtheball.c @@ -34,7 +34,6 @@ static UINT8 bitvals[32]; static MACHINE_RESET( xtheball ) { tlc34076_reset(6); - ticket_dispenser_init(machine, 100, 1, 1); } @@ -134,7 +133,7 @@ static WRITE16_HANDLER( bit_controls_w ) switch (offset) { case 7: - ticket_dispenser_w(space, 0, data << 7); + ticket_dispenser_w(devtag_get_device(space->machine, "ticket"), 0, data << 7); break; case 8: @@ -191,14 +190,6 @@ static WRITE16_HANDLER( bit_controls_w ) * *************************************/ -static READ16_HANDLER( port0_r ) -{ - int result = input_port_read(space->machine, "DSW"); - result ^= ticket_dispenser_r(space,0) >> 3; - return result; -} - - static READ16_HANDLER( analogx_r ) { return (input_port_read(space->machine, "ANALOGX") << 8) | 0x00ff; @@ -226,7 +217,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x02000000, 0x020fffff) AM_RAM AM_BASE(&vram_fg) AM_RANGE(0x03000000, 0x030000ff) AM_READWRITE(tlc34076_lsb_r, tlc34076_lsb_w) AM_RANGE(0x03040000, 0x030401ff) AM_WRITE(bit_controls_w) - AM_RANGE(0x03040080, 0x0304008f) AM_READ(port0_r) + AM_RANGE(0x03040080, 0x0304008f) AM_READ_PORT("DSW") AM_RANGE(0x03040100, 0x0304010f) AM_READ(analogx_r) AM_RANGE(0x03040110, 0x0304011f) AM_READ_PORT("COIN1") AM_RANGE(0x03040130, 0x0304013f) AM_READ_PORT("SERVICE2") @@ -251,7 +242,9 @@ ADDRESS_MAP_END static INPUT_PORTS_START( xtheball ) PORT_START("DSW") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_READ_LINE_DEVICE("ticket", ticket_dispenser_line_r) + PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_DIPNAME( 0x0700, 0x0000, "Target Tickets") PORT_DIPSETTING( 0x0000, "3" ) PORT_DIPSETTING( 0x0100, "4" ) @@ -349,6 +342,8 @@ static MACHINE_DRIVER_START( xtheball ) MDRV_MACHINE_RESET(xtheball) MDRV_NVRAM_HANDLER(generic_1fill) + + MDRV_TICKET_DISPENSER_ADD("ticket", 100, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH) /* video hardware */ MDRV_VIDEO_UPDATE(tms340x0) diff --git a/src/mame/machine/ticket.c b/src/mame/machine/ticket.c index 7df6e1d5d66..88c8591634c 100644 --- a/src/mame/machine/ticket.c +++ b/src/mame/machine/ticket.c @@ -16,161 +16,44 @@ #define DEBUG_TICKET 0 #define LOG(x) do { if (DEBUG_TICKET) logerror x; } while (0) -#define MAX_DISPENSERS 2 -struct ticket_state +typedef struct _ticket_state ticket_state; +struct _ticket_state { + int active_bit; + int time_msec; + int motoron; + int ticketdispensed; + int ticketnotdispensed; + UINT8 status; UINT8 power; emu_timer *timer; }; -static int active_bit = 0x80; -static int time_msec; -static int motoron; -static int ticketdispensed; -static int ticketnotdispensed; - -static struct ticket_state dispenser[MAX_DISPENSERS]; - -static TIMER_CALLBACK( ticket_dispenser_toggle ); - - -/*************************************************************************** - ticket_dispenser_init - -***************************************************************************/ -void ticket_dispenser_init(running_machine *machine, int msec, int motoronhigh, int statusactivehigh) +INLINE ticket_state *get_safe_token(const device_config *device) { - int i; + assert(device != NULL); + assert(device->token != NULL); + assert(device->type == TICKET_DISPENSER); - time_msec = msec; - motoron = motoronhigh ? active_bit : 0; - ticketdispensed = statusactivehigh ? active_bit : 0; - ticketnotdispensed = ticketdispensed ^ active_bit; - - for (i = 0; i < MAX_DISPENSERS; i++) - { - dispenser[i].status = ticketnotdispensed; - dispenser[i].power = 0x00; - dispenser[i].timer = timer_alloc(machine, ticket_dispenser_toggle, &dispenser[i]); - - state_save_register_item(machine, "ticket", NULL, i, dispenser[i].status); - state_save_register_item(machine, "ticket", NULL, i, dispenser[i].power); - } -} - -/*************************************************************************** - ticket_dispenser_r -***************************************************************************/ -READ8_HANDLER( ticket_dispenser_r ) -{ - return ticket_dispenser_0_r(space, offset); -} - -READ8_HANDLER( ticket_dispenser_0_r ) -{ - LOG(("PC: %04X Ticket Status Read = %02X\n", cpu_get_pc(space->cpu), dispenser[0].status)); - return dispenser[0].status; -} - -READ8_HANDLER( ticket_dispenser_1_r ) -{ - LOG(("PC: %04X Ticket Status Read = %02X\n", cpu_get_pc(space->cpu), dispenser[1].status)); - return dispenser[1].status; -} - -CUSTOM_INPUT( ticket_dispenser_0_port_r ) -{ - return dispenser[0].status ? 1 : 0; -} - -CUSTOM_INPUT( ticket_dispenser_1_port_r ) -{ - return dispenser[1].status ? 1 : 0; -} - -/*************************************************************************** - ticket_dispenser_w -***************************************************************************/ -WRITE8_HANDLER( ticket_dispenser_w ) -{ - ticket_dispenser_0_w(space, offset, data); -} - -WRITE8_HANDLER( ticket_dispenser_0_w ) -{ - /* On an activate signal, start dispensing! */ - if ((data & active_bit) == motoron) - { - if (!dispenser[0].power) - { - LOG(("PC: %04X Ticket Power On\n", cpu_get_pc(space->cpu))); - timer_adjust_oneshot(dispenser[0].timer, ATTOTIME_IN_MSEC(time_msec), 0); - dispenser[0].power = 1; - - dispenser[0].status = ticketnotdispensed; - } - } - else - { - if (dispenser[0].power) - { - LOG(("PC: %04X Ticket Power Off\n", cpu_get_pc(space->cpu))); - timer_adjust_oneshot(dispenser[0].timer, attotime_never, 0); - set_led_status(space->machine, 2,0); - dispenser[0].power = 0; - } - } -} - -WRITE8_HANDLER( ticket_dispenser_1_w ) -{ - /* On an activate signal, start dispensing! */ - if ((data & active_bit) == motoron) - { - if (!dispenser[1].power) - { - LOG(("PC: %04X Ticket Power On\n", cpu_get_pc(space->cpu))); - timer_adjust_oneshot(dispenser[1].timer, ATTOTIME_IN_MSEC(time_msec), 0); - dispenser[1].power = 1; - - dispenser[1].status = ticketnotdispensed; - } - } - else - { - if (dispenser[1].power) - { - LOG(("PC: %04X Ticket Power Off\n", cpu_get_pc(space->cpu))); - timer_adjust_oneshot(dispenser[1].timer, attotime_never, 0); - set_led_status(space->machine, 2,0); - dispenser[1].power = 0; - } - } + return (ticket_state *)device->token; } -/*************************************************************************** - ticket_dispenser_toggle - - How I think this works: - When a ticket dispenses, there is N milliseconds of status = high, - and N milliseconds of status = low (a wait cycle?). -***************************************************************************/ static TIMER_CALLBACK( ticket_dispenser_toggle ) { - struct ticket_state *dispenser = (struct ticket_state *)ptr; + ticket_state *state = get_safe_token((const device_config *)ptr); /* If we still have power, keep toggling ticket states. */ - if (dispenser->power) + if (state->power) { - dispenser->status ^= active_bit; - LOG(("Ticket Status Changed to %02X\n", dispenser->status)); - timer_adjust_oneshot(dispenser->timer, ATTOTIME_IN_MSEC(time_msec), 0); + state->status ^= state->active_bit; + LOG(("Ticket Status Changed to %02X\n", state->status)); + timer_adjust_oneshot(state->timer, ATTOTIME_IN_MSEC(state->time_msec), 0); } - if (dispenser->status == ticketdispensed) + if (state->status == state->ticketdispensed) { set_led_status(machine, 2,1); increment_dispensed_tickets(machine, 1); @@ -182,3 +65,102 @@ static TIMER_CALLBACK( ticket_dispenser_toggle ) set_led_status(machine, 2,0); } } + + +READ8_DEVICE_HANDLER( ticket_dispenser_r ) +{ + ticket_state *state = get_safe_token(device); + LOG(("%s: Ticket Status Read = %02X\n", cpuexec_describe_context(device->machine), state->status)); + return state->status; +} + + +READ_LINE_DEVICE_HANDLER( ticket_dispenser_line_r ) +{ + ticket_state *state = get_safe_token(device); + return state->status ? 1 : 0; +} + + +WRITE8_DEVICE_HANDLER( ticket_dispenser_w ) +{ + ticket_state *state = get_safe_token(device); + + /* On an activate signal, start dispensing! */ + if ((data & state->active_bit) == state->motoron) + { + if (!state->power) + { + LOG(("%s: Ticket Power On\n", cpuexec_describe_context(device->machine))); + timer_adjust_oneshot(state->timer, ATTOTIME_IN_MSEC(state->time_msec), 0); + state->power = 1; + + state->status = state->ticketnotdispensed; + } + } + else + { + if (state->power) + { + LOG(("%s: Ticket Power Off\n", cpuexec_describe_context(device->machine))); + timer_adjust_oneshot(state->timer, attotime_never, 0); + set_led_status(device->machine, 2,0); + state->power = 0; + } + } +} + + + +/*************************************************************************** + DEVICE INTERFACE +***************************************************************************/ + +/*------------------------------------------------- + device start callback +-------------------------------------------------*/ + +static DEVICE_START( ticket ) +{ + const ticket_config *config = (const ticket_config *)device->inline_config; + ticket_state *state = get_safe_token(device); + + assert(config != NULL); + + /* initialize the state */ + state->active_bit = 0x80; + state->time_msec = device->clock; + state->motoron = config->motorhigh ? state->active_bit : 0; + state->ticketdispensed = config->statushigh ? state->active_bit : 0; + state->ticketnotdispensed = state->ticketdispensed ^ state->active_bit; + + state->timer = timer_alloc(device->machine, ticket_dispenser_toggle, (void *)device); + + state_save_register_device_item(device, 0, state->status); + state_save_register_device_item(device, 0, state->power); +} + + +/*------------------------------------------------- + device reset callback +-------------------------------------------------*/ + +static DEVICE_RESET( ticket ) +{ + ticket_state *state = get_safe_token(device); + state->status = state->ticketnotdispensed; + state->power = 0x00; +} + + +/*------------------------------------------------- + device definition +-------------------------------------------------*/ + +static const char DEVTEMPLATE_SOURCE[] = __FILE__; + +#define DEVTEMPLATE_ID(p,s) p##ticket##s +#define DEVTEMPLATE_FEATURES DT_HAS_START | DT_HAS_RESET | DT_HAS_INLINE_CONFIG +#define DEVTEMPLATE_NAME "Ticket Dispenser" +#define DEVTEMPLATE_FAMILY "Generic" +#include "devtempl.h" diff --git a/src/mame/machine/ticket.h b/src/mame/machine/ticket.h index 51ddcb998a3..128d2258533 100644 --- a/src/mame/machine/ticket.h +++ b/src/mame/machine/ticket.h @@ -4,38 +4,33 @@ ***************************************************************************/ - #define TICKET_MOTOR_ACTIVE_LOW 0 /* Ticket motor is triggered by D7=0 */ #define TICKET_MOTOR_ACTIVE_HIGH 1 /* Ticket motor is triggered by D7=1 */ #define TICKET_STATUS_ACTIVE_LOW 0 /* Ticket is done dispensing when D7=0 */ #define TICKET_STATUS_ACTIVE_HIGH 1 /* Ticket is done dispensing when D7=1 */ -/*************************************************************************** - ticket_dispenser_init - - msec = how many milliseconds it takes to dispense a ticket - activehigh = see constants above - -***************************************************************************/ -void ticket_dispenser_init(running_machine *machine, int msec, int motoractivehigh, int statusactivehigh); -/*************************************************************************** - ticket_dispenser_r -***************************************************************************/ -READ8_HANDLER( ticket_dispenser_r ); -READ8_HANDLER( ticket_dispenser_0_r ); -READ8_HANDLER( ticket_dispenser_1_r ); - -CUSTOM_INPUT( ticket_dispenser_0_port_r ); -CUSTOM_INPUT( ticket_dispenser_1_port_r ); +typedef struct _ticket_config ticket_config; +struct _ticket_config +{ + UINT8 motorhigh; + UINT8 statushigh; +}; -/*************************************************************************** - ticket_dispenser_w -***************************************************************************/ -WRITE8_HANDLER( ticket_dispenser_w ); -WRITE8_HANDLER( ticket_dispenser_0_w ); -WRITE8_HANDLER( ticket_dispenser_1_w ); +#define MDRV_TICKET_DISPENSER_ADD(_tag, _clock, _motorhigh, _statushigh) \ + MDRV_DEVICE_ADD(_tag, TICKET_DISPENSER, _clock) \ + MDRV_DEVICE_CONFIG_DATA32(ticket_config, motorhigh, _motorhigh) \ + MDRV_DEVICE_CONFIG_DATA32(ticket_config, statushigh, _statushigh) + +READ8_DEVICE_HANDLER( ticket_dispenser_r ); +WRITE8_DEVICE_HANDLER( ticket_dispenser_w ); + +READ_LINE_DEVICE_HANDLER( ticket_dispenser_line_r ); + +/* device interface */ +#define TICKET_DISPENSER DEVICE_GET_INFO_NAME(ticket) +DEVICE_GET_INFO( ticket ); diff --git a/src/mame/machine/williams.c b/src/mame/machine/williams.c index 6b682ae4629..1ae947351a2 100644 --- a/src/mame/machine/williams.c +++ b/src/mame/machine/williams.c @@ -49,7 +49,6 @@ static void mysticm_main_irq(const device_config *device, int state); static void tshoot_main_irq(const device_config *device, int state); /* Lotto Fun-specific code */ -static READ8_DEVICE_HANDLER( lottofun_input_port_0_r ); static WRITE8_DEVICE_HANDLER( lottofun_coin_lock_w ); /* Turkey Shoot-specific code */ @@ -129,8 +128,8 @@ const pia6821_interface williams_snd_pia_intf = /* Special PIA 0 for Lotto Fun, to handle the controls and ticket dispenser */ const pia6821_interface lottofun_pia_0_intf = { - /*inputs : A/B,CA/B1,CA/B2 */ DEVCB_HANDLER(lottofun_input_port_0_r), DEVCB_INPUT_PORT("IN1"), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, - /*outputs: A/B,CA/B2 */ DEVCB_NULL, DEVCB_MEMORY_HANDLER("maincpu", PROGRAM, ticket_dispenser_w), DEVCB_HANDLER(lottofun_coin_lock_w), DEVCB_NULL, + /*inputs : A/B,CA/B1,CA/B2 */ DEVCB_INPUT_PORT("IN0"), DEVCB_INPUT_PORT("IN1"), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, + /*outputs: A/B,CA/B2 */ DEVCB_NULL, DEVCB_DEVICE_HANDLER("ticket", ticket_dispenser_w), DEVCB_HANDLER(lottofun_coin_lock_w), DEVCB_NULL, /*irqs : A/B */ DEVCB_NULL, DEVCB_NULL }; @@ -358,9 +357,6 @@ static void tshoot_main_irq(const device_config *device, int state) static MACHINE_RESET( williams_common ) { - /* reset the ticket dispenser (Lotto Fun) */ - ticket_dispenser_init(machine, 70, TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_HIGH); - /* set a timer to go off every 16 scanlines, to toggle the VA11 line and update the screen */ scanline_timer = timer_alloc(machine, williams_va11_callback, NULL); timer_adjust_oneshot(scanline_timer, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), 0); @@ -871,19 +867,13 @@ WRITE8_HANDLER( blaster_bank_select_w ) * *************************************/ -static READ8_DEVICE_HANDLER( lottofun_input_port_0_r ) -{ - const address_space *space = cputag_get_address_space(device->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - - /* merge in the ticket dispenser status */ - return input_port_read(device->machine, "IN0") | ticket_dispenser_r(space, offset); -} - static WRITE8_DEVICE_HANDLER( lottofun_coin_lock_w ) { coin_lockout_global_w(device->machine, data & 1); /* bit 5 of PIC control port A */ } + + /************************************* * * Turkey Shoot-specific routines