Changed ticket.c into a device, updated all users.

This commit is contained in:
Aaron Giles 2009-12-15 08:10:30 +00:00
parent c3916b36c9
commit fdcfa2a467
12 changed files with 258 additions and 332 deletions

View File

@ -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 )

View File

@ -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 )

View File

@ -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

View File

@ -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:

View File

@ -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)

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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"

View File

@ -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 );

View File

@ -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