- Fixed invalid memory_install_*_handler calls in drivers/williams.c

- Emulated external OR circuit for all drivers using the PIA chip.  This used to be internal to the PIA emulation, but, in fact, this is external logic.  The PIA has two seperate INTA and INTB out lines.  This fixes at least PlayBall
This commit is contained in:
Zsolt Vasvari 2008-01-20 14:59:04 +00:00
parent bef6265307
commit cb6dbf5369
11 changed files with 233 additions and 90 deletions

View File

@ -527,7 +527,9 @@ static WRITE8_HANDLER( csdeluxe_portb_w )
static void csdeluxe_irq(int state)
{
cpunum_set_input_line(csdeluxe_sound_cpu, 4, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0);
cpunum_set_input_line(csdeluxe_sound_cpu, 4, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static TIMER_CALLBACK( csdeluxe_delayed_data_w )
@ -647,7 +649,9 @@ static WRITE8_HANDLER( soundsgood_portb_w )
static void soundsgood_irq(int state)
{
cpunum_set_input_line(soundsgood_sound_cpu, 4, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(1) | pia_get_irq_b(1);
cpunum_set_input_line(soundsgood_sound_cpu, 4, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static TIMER_CALLBACK( soundsgood_delayed_data_w )
@ -738,7 +742,9 @@ static WRITE8_HANDLER( turbocs_portb_w )
static void turbocs_irq(int state)
{
cpunum_set_input_line(turbocs_sound_cpu, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0);
cpunum_set_input_line(turbocs_sound_cpu, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static TIMER_CALLBACK( turbocs_delayed_data_w )
@ -869,7 +875,9 @@ static WRITE8_HANDLER( squawkntalk_portb2_w )
static void squawkntalk_irq(int state)
{
cpunum_set_input_line(squawkntalk_sound_cpu, M6808_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0) | pia_get_irq_a(1) | pia_get_irq_b(1);
cpunum_set_input_line(squawkntalk_sound_cpu, M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static TIMER_CALLBACK( squawkntalk_delayed_data_w )

View File

@ -441,20 +441,43 @@ static MACHINE_RESET( mpu4 )
///////////////////////////////////////////////////////////////////////////
static void cpu0_irq(int state)
static void pia_cpu0_irq(int state)
{
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0) |
pia_get_irq_a(1) | pia_get_irq_b(1) |
pia_get_irq_a(2) | pia_get_irq_b(2) |
pia_get_irq_a(3) | pia_get_irq_b(3) |
pia_get_irq_a(4) | pia_get_irq_b(4) |
pia_get_irq_a(5) | pia_get_irq_b(5);
if (!serial_card_connected)
{
cpunum_set_input_line(0, M6809_IRQ_LINE, state?ASSERT_LINE:CLEAR_LINE);
LOG(("6809 int%d \n",state));
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 int%d \n", combined_state));
}
else
{
cpunum_set_input_line(0, M6809_FIRQ_LINE, state?ASSERT_LINE:CLEAR_LINE);
LOG(("6809 fint%d \n",state));
cpunum_set_input_line(0, M6809_FIRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 fint%d \n", combined_state));
}
}
static void ptm_cpu0_irq(int state)
{
if (!serial_card_connected)
{
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 int%d \n", state));
}
else
{
cpunum_set_input_line(0, M6809_FIRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
LOG(("6809 fint%d \n", state));
}
}
///////////////////////////////////////////////////////////////////////////
static WRITE8_HANDLER( bankswitch_w )
{
@ -490,7 +513,7 @@ static const ptm6840_interface ptm_ic2_intf =
MPU4_MASTER_CLOCK/4,
{ 0,0,0 },
{ ic2_o1_callback, ic2_o2_callback, ic2_o3_callback },
cpu0_irq
ptm_cpu0_irq
};
/***************************************************************************
@ -542,7 +565,7 @@ static const pia6821_interface pia_ic3_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ pia_ic3_porta_w, pia_ic3_portb_w, pia_ic3_ca2_w, pia_ic3_cb2_w,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};
/*---------------------------------------
@ -672,7 +695,7 @@ static const pia6821_interface pia_ic4_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ 0, pia_ic4_portb_r, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ pia_ic4_porta_w, 0, pia_ic4_ca2_w, 0,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};
//IC5
@ -768,7 +791,7 @@ static const pia6821_interface pia_ic5_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ pia_ic5_porta_r, pia_ic5_portb_r, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, 0, pia_ic5_ca2_w, pia_ic5_cb2_w,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};
//IC6
@ -826,7 +849,7 @@ static const pia6821_interface pia_ic6_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ pia_ic6_porta_w, pia_ic6_portb_w, pia_ic6_ca2_w, pia_ic6_cb2_w,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};
//IC7
@ -902,7 +925,7 @@ static const pia6821_interface pia_ic7_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ 0, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ pia_ic7_porta_w, pia_ic7_portb_w, pia_ic7_ca2_w, pia_ic7_cb2_w,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};
static READ8_HANDLER( pia_ic8_porta_r )
@ -950,7 +973,7 @@ static const pia6821_interface pia_ic8_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ pia_ic8_porta_r, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, pia_ic8_portb_w, pia_ic8_ca2_w, pia_ic8_cb2_w,
/*irqs : A/B */ cpu0_irq, cpu0_irq
/*irqs : A/B */ pia_cpu0_irq, pia_cpu0_irq
};

View File

@ -113,7 +113,9 @@ static WRITE8_HANDLER( audio_2_command_w );
static void main_cpu_irq(int state)
{
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(1) | pia_get_irq_b(1) | pia_get_irq_b(2);
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}

View File

@ -73,7 +73,10 @@ static WRITE8_HANDLER( flipscreen_w );
static void main_cpu_irq(int state)
{
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0) |
pia_get_irq_a(1) | pia_get_irq_b(1);
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}

View File

@ -231,7 +231,11 @@ static READ8_HANDLER( gfx_rom_r );
static void main_cpu_irq(int state)
{
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(1) | pia_get_irq_b(1) |
pia_get_irq_b(2) |
pia_get_irq_a(3) | pia_get_irq_b(3);
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}

View File

@ -118,8 +118,10 @@ static WRITE8_HANDLER( port_b_u1_w )
static void main_cpu_irq(int state)
{
logerror("GEN IRQ: %x\n", state);
cpunum_set_input_line(0, 0, state ? ASSERT_LINE : CLEAR_LINE);
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0);
logerror("GEN IRQ: %x\n", combined_state);
cpunum_set_input_line(0, 0, combined_state ? ASSERT_LINE : CLEAR_LINE);
}

View File

@ -559,6 +559,22 @@ static ADDRESS_MAP_START( williams_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END
static ADDRESS_MAP_START( williams_extra_ram_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x8fff) AM_READWRITE(MRA8_BANK1, MWA8_RAM) AM_BASE(&williams_videoram)
AM_RANGE(0x9000, 0xbfff) AM_RAM
AM_RANGE(0xc000, 0xc00f) AM_MIRROR(0x03f0) AM_WRITE(williams_paletteram_w) AM_BASE(&paletteram)
AM_RANGE(0xc804, 0xc807) AM_MIRROR(0x00f0) AM_READWRITE(pia_0_r, pia_0_w)
AM_RANGE(0xc80c, 0xc80f) AM_MIRROR(0x00f0) AM_READWRITE(pia_1_r, pia_1_w)
AM_RANGE(0xc900, 0xc9ff) AM_WRITE(sinistar_vram_select_w)
AM_RANGE(0xca00, 0xca07) AM_MIRROR(0x00f8) AM_WRITE(williams_blitter_w)
AM_RANGE(0xcb00, 0xcbff) AM_READ(williams_video_counter_r)
AM_RANGE(0xcbff, 0xcbff) AM_WRITE(williams_watchdog_reset_w)
AM_RANGE(0xcc00, 0xcfff) AM_READWRITE(MRA8_RAM, williams_cmos_w) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
/*************************************
*
@ -616,6 +632,29 @@ static ADDRESS_MAP_START( williams2_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END
static ADDRESS_MAP_START( williams2_extra_ram_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_READWRITE(MRA8_BANK1, MWA8_RAM) AM_BASE(&williams_videoram)
AM_RANGE(0x8000, 0xbfff) AM_RAM
AM_RANGE(0xc000, 0xc7ff) AM_READWRITE(MRA8_RAM, williams2_tileram_w) AM_BASE(&williams2_tileram)
AM_RANGE(0xc800, 0xc87f) AM_WRITE(williams2_bank_select_w)
AM_RANGE(0xc880, 0xc887) AM_MIRROR(0x0078) AM_WRITE(williams_blitter_w)
AM_RANGE(0xc900, 0xc97f) AM_WRITE(williams2_watchdog_reset_w)
AM_RANGE(0xc980, 0xc983) AM_MIRROR(0x0070) AM_READWRITE(pia_1_r, pia_1_w)
AM_RANGE(0xc984, 0xc987) AM_MIRROR(0x0070) AM_READWRITE(pia_0_r, pia_0_w)
AM_RANGE(0xc98c, 0xc98f) AM_MIRROR(0x0070) AM_WRITE(williams2_7segment_w)
AM_RANGE(0xcb00, 0xcb1f) AM_WRITE(williams2_fg_select_w)
AM_RANGE(0xcb20, 0xcb3f) AM_WRITE(williams2_bg_select_w)
AM_RANGE(0xcb40, 0xcb5f) AM_WRITE(williams2_xscroll_low_w)
AM_RANGE(0xcb60, 0xcb7f) AM_WRITE(williams2_xscroll_high_w)
AM_RANGE(0xcb80, 0xcb9f) AM_WRITE(defender_video_control_w)
AM_RANGE(0xcba0, 0xcbbf) AM_WRITE(williams2_blit_window_enable_w)
AM_RANGE(0xcbe0, 0xcbef) AM_READ(williams2_video_counter_r)
AM_RANGE(0xcc00, 0xcfff) AM_READWRITE(MRA8_RAM, williams_cmos_w) AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
/*************************************
*
@ -1418,6 +1457,16 @@ static MACHINE_DRIVER_START( williams )
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( williams_extra_ram )
/* basic machine hardware */
MDRV_IMPORT_FROM(williams)
MDRV_CPU_MODIFY("main")
MDRV_CPU_PROGRAM_MAP(williams_extra_ram_map,0)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( alienar )
/* basic machine hardware */
@ -1434,7 +1483,7 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( sinistar )
/* basic machine hardware */
MDRV_IMPORT_FROM(williams)
MDRV_IMPORT_FROM(williams_extra_ram)
/* sound hardware */
MDRV_SOUND_ADD(HC55516, 0)
@ -1445,10 +1494,14 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( playball )
/* basic machine hardware */
MDRV_IMPORT_FROM(sinistar)
MDRV_IMPORT_FROM(williams)
/* video hardware */
MDRV_SCREEN_VISIBLE_AREA(6, 298-1, 8, 239-1)
/* sound hardware */
MDRV_SOUND_ADD(HC55516, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
MACHINE_DRIVER_END
@ -1502,6 +1555,16 @@ static MACHINE_DRIVER_START( williams2 )
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( williams2_extra_ram )
/* basic machine hardware */
MDRV_IMPORT_FROM(williams2)
MDRV_CPU_MODIFY("main")
MDRV_CPU_PROGRAM_MAP(williams2_extra_ram_map,0)
MACHINE_DRIVER_END
static MACHINE_DRIVER_START( joust2 )
/* basic machine hardware */
@ -2593,13 +2656,6 @@ static DRIVER_INIT( sinistar )
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0x7400);
CONFIGURE_PIAS(williams_49way_pia_0_intf, williams_pia_1_intf, sinistar_snd_pia_intf);
/* install clipping circuit control */
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xc900, 0xc9ff, 0, 0, sinistar_vram_select_w);
/* install RAM instead of ROM in the Dxxx slot */
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MRA8_RAM);
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MWA8_RAM);
}
@ -2676,11 +2732,7 @@ static DRIVER_INIT( mysticm )
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_MYSTICM);
CONFIGURE_PIAS(mysticm_pia_0_intf, williams2_pia_1_intf, williams2_snd_pia_intf);
/* install RAM instead of ROM in the Dxxx slot */
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MRA8_RAM);
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MWA8_RAM);
CONFIGURE_PIAS(mysticm_pia_0_intf, mysticm_pia_1_intf, williams2_snd_pia_intf);
}
@ -2688,7 +2740,7 @@ static DRIVER_INIT( tshoot )
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_TSHOOT);
CONFIGURE_PIAS(tshoot_pia_0_intf, williams2_pia_1_intf, tshoot_snd_pia_intf);
CONFIGURE_PIAS(tshoot_pia_0_intf, tshoot_pia_1_intf, tshoot_snd_pia_intf);
}
@ -2697,10 +2749,6 @@ static DRIVER_INIT( inferno )
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_TSHOOT);
CONFIGURE_PIAS(williams2_muxed_pia_0_intf, williams2_pia_1_intf, williams2_snd_pia_intf);
/* install RAM instead of ROM in the Dxxx slot */
memory_install_read8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MRA8_RAM);
memory_install_write8_handler(0, ADDRESS_SPACE_PROGRAM, 0xd000, 0xdfff, 0, 0, MWA8_RAM);
}
@ -2720,49 +2768,49 @@ static DRIVER_INIT( joust2 )
*************************************/
/* Defender hardware games */
GAME( 1980, defender, 0, defender, defender, defender, ROT0, "Williams", "Defender (Red label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defendg, defender, defender, defender, defender, ROT0, "Williams", "Defender (Green label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defendw, defender, defender, defender, defender, ROT0, "Williams", "Defender (White label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defndjeu, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Defender (bootleg)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1980, tornado1, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Tornado (bootleg set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, tornado2, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Tornado (bootleg set 2)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // bad dump?
GAME( 1980, zero, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Zero", GAME_SUPPORTS_SAVE )
GAME( 1980, zero2, defender, defender, defender, defndjeu, ROT0, "Amtec", "Zero (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1980, defcmnd, defender, defender, defender, defender, ROT0, "bootleg", "Defense Command (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, defence, defender, defender, defender, defender, ROT0, "Outer Limits", "Defence Command", GAME_SUPPORTS_SAVE )
GAME( 1981, startrkd, defender, defender, defender, defender, ROT0, "bootleg", "Star Trek (Defender bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1980, mayday, 0, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, maydaya, mayday, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1980, maydayb, mayday, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 3)", GAME_SUPPORTS_SAVE )
GAME( 1981, colony7, 0, defender, colony7, defender, ROT270, "Taito", "Colony 7 (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, colony7a, colony7, defender, colony7, defender, ROT270, "Taito", "Colony 7 (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, jin, 0, jin, jin, defender, ROT90, "Falcon", "Jin", GAME_SUPPORTS_SAVE )
GAME( 1980, defender, 0, defender, defender, defender, ROT0, "Williams", "Defender (Red label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defendg, defender, defender, defender, defender, ROT0, "Williams", "Defender (Green label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defendw, defender, defender, defender, defender, ROT0, "Williams", "Defender (White label)", GAME_SUPPORTS_SAVE )
GAME( 1980, defndjeu, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Defender (bootleg)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1980, tornado1, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Tornado (bootleg set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, tornado2, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Tornado (bootleg set 2)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // bad dump?
GAME( 1980, zero, defender, defender, defender, defndjeu, ROT0, "Jeutel", "Zero", GAME_SUPPORTS_SAVE )
GAME( 1980, zero2, defender, defender, defender, defndjeu, ROT0, "Amtec", "Zero (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1980, defcmnd, defender, defender, defender, defender, ROT0, "bootleg", "Defense Command (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, defence, defender, defender, defender, defender, ROT0, "Outer Limits", "Defence Command", GAME_SUPPORTS_SAVE )
GAME( 1981, startrkd, defender, defender, defender, defender, ROT0, "bootleg", "Star Trek (Defender bootleg)", GAME_SUPPORTS_SAVE )
GAME( 1980, mayday, 0, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1980, maydaya, mayday, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1980, maydayb, mayday, defender, mayday, mayday, ROT0, "<unknown>", "Mayday (set 3)", GAME_SUPPORTS_SAVE )
GAME( 1981, colony7, 0, defender, colony7, defender, ROT270, "Taito", "Colony 7 (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1981, colony7a, colony7, defender, colony7, defender, ROT270, "Taito", "Colony 7 (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, jin, 0, jin, jin, defender, ROT90, "Falcon", "Jin", GAME_SUPPORTS_SAVE )
/* Standard Williams hardware */
GAME( 1981, stargate, 0, williams, stargate, stargate, ROT0, "Williams", "Stargate", GAME_SUPPORTS_SAVE )
GAME( 1982, robotron, 0, williams, robotron, robotron, ROT0, "Williams", "Robotron (Solid Blue label)", GAME_SUPPORTS_SAVE )
GAME( 1982, robotryo, robotron, williams, robotron, robotron, ROT0, "Williams", "Robotron (Yellow/Orange label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joust, 0, williams, joust, joust, ROT0, "Williams", "Joust (White/Green label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joustr, joust, williams, joust, joust, ROT0, "Williams", "Joust (Solid Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joustwr, joust, williams, joust, joust, ROT0, "Williams", "Joust (White/Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, bubbles, 0, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles", GAME_SUPPORTS_SAVE )
GAME( 1982, bubblesr, bubbles, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles (Solid Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, bubblesp, bubbles, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles (prototype version)", GAME_SUPPORTS_SAVE )
GAME( 1982, splat, 0, williams, splat, splat, ROT0, "Williams", "Splat!", GAME_SUPPORTS_SAVE )
GAME( 1982, sinistar, 0, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (revision 3)", GAME_SUPPORTS_SAVE )
GAME( 1982, sinista1, sinistar, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (prototype version)", GAME_SUPPORTS_SAVE )
GAME( 1982, sinista2, sinistar, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (revision 2)", GAME_SUPPORTS_SAVE )
GAME( 1983, playball, 0, playball, playball, playball, ROT270, "Williams", "PlayBall! (prototype)", GAME_SUPPORTS_SAVE )
GAME( 1983, blaster, 0, blaster, blaster, blaster, ROT0, "Williams", "Blaster", GAME_SUPPORTS_SAVE )
GAME( 1983, blast30, blaster, blaster, blaster, blaster, ROT0, "Williams", "Blaster (early 30 wave version)", GAME_SUPPORTS_SAVE )
GAME( 1983, blastkit, blaster, blaster, blastkit, blastkit, ROT0, "Williams", "Blaster (kit)", GAME_SUPPORTS_SAVE )
GAME( 1985, spdball, 0, williams, spdball, spdball, ROT0, "Williams", "Speed Ball (prototype)", GAME_SUPPORTS_SAVE )
GAME( 1985, alienar, 0, alienar, alienar, alienar, ROT0, "Duncan Brown", "Alien Arena", GAME_SUPPORTS_SAVE )
GAME( 1985, alienaru, alienar, alienar, alienar, alienaru, ROT0, "Duncan Brown", "Alien Arena (Stargate Upgrade)", GAME_SUPPORTS_SAVE )
GAME( 1987, lottofun, 0, williams, lottofun, lottofun, ROT0, "H.A.R. Management", "Lotto Fun", GAME_SUPPORTS_SAVE )
GAME( 1981, stargate, 0, williams, stargate, stargate, ROT0, "Williams", "Stargate", GAME_SUPPORTS_SAVE )
GAME( 1982, robotron, 0, williams, robotron, robotron, ROT0, "Williams", "Robotron (Solid Blue label)", GAME_SUPPORTS_SAVE )
GAME( 1982, robotryo, robotron, williams, robotron, robotron, ROT0, "Williams", "Robotron (Yellow/Orange label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joust, 0, williams, joust, joust, ROT0, "Williams", "Joust (White/Green label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joustr, joust, williams, joust, joust, ROT0, "Williams", "Joust (Solid Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, joustwr, joust, williams, joust, joust, ROT0, "Williams", "Joust (White/Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, bubbles, 0, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles", GAME_SUPPORTS_SAVE )
GAME( 1982, bubblesr, bubbles, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles (Solid Red label)", GAME_SUPPORTS_SAVE )
GAME( 1982, bubblesp, bubbles, williams, bubbles, bubbles, ROT0, "Williams", "Bubbles (prototype version)", GAME_SUPPORTS_SAVE )
GAME( 1982, splat, 0, williams, splat, splat, ROT0, "Williams", "Splat!", GAME_SUPPORTS_SAVE )
GAME( 1982, sinistar, 0, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (revision 3)", GAME_SUPPORTS_SAVE )
GAME( 1982, sinista1, sinistar, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (prototype version)", GAME_SUPPORTS_SAVE )
GAME( 1982, sinista2, sinistar, sinistar, sinistar, sinistar, ROT270, "Williams", "Sinistar (revision 2)", GAME_SUPPORTS_SAVE )
GAME( 1983, playball, 0, playball, playball, playball, ROT270, "Williams", "PlayBall! (prototype)", GAME_SUPPORTS_SAVE )
GAME( 1983, blaster, 0, blaster, blaster, blaster, ROT0, "Williams", "Blaster", GAME_SUPPORTS_SAVE )
GAME( 1983, blast30, blaster, blaster, blaster, blaster, ROT0, "Williams", "Blaster (early 30 wave version)", GAME_SUPPORTS_SAVE )
GAME( 1983, blastkit, blaster, blaster, blastkit, blastkit, ROT0, "Williams", "Blaster (kit)", GAME_SUPPORTS_SAVE )
GAME( 1985, spdball, 0, williams, spdball, spdball, ROT0, "Williams", "Speed Ball (prototype)", GAME_SUPPORTS_SAVE )
GAME( 1985, alienar, 0, alienar, alienar, alienar, ROT0, "Duncan Brown", "Alien Arena", GAME_SUPPORTS_SAVE )
GAME( 1985, alienaru, alienar, alienar, alienar, alienaru, ROT0, "Duncan Brown", "Alien Arena (Stargate Upgrade)", GAME_SUPPORTS_SAVE )
GAME( 1987, lottofun, 0, williams, lottofun, lottofun, ROT0, "H.A.R. Management", "Lotto Fun", GAME_SUPPORTS_SAVE )
/* 2nd Generation Williams hardware with tilemaps */
GAME( 1983, mysticm, 0, williams2,mysticm, mysticm, ROT0, "Williams", "Mystic Marathon", GAME_SUPPORTS_SAVE )
GAME( 1984, tshoot, 0, williams2,tshoot, tshoot, ROT0, "Williams", "Turkey Shoot", GAME_SUPPORTS_SAVE )
GAME( 1984, inferno, 0, williams2,inferno, inferno, ROT0, "Williams", "Inferno", GAME_SUPPORTS_SAVE )
GAME( 1986, joust2, 0, joust2, joust2, joust2, ROT270, "Williams", "Joust 2 - Survival of the Fittest (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1983, mysticm, 0, williams2_extra_ram, mysticm, mysticm, ROT0, "Williams", "Mystic Marathon", GAME_SUPPORTS_SAVE )
GAME( 1984, tshoot, 0, williams2, tshoot, tshoot, ROT0, "Williams", "Turkey Shoot", GAME_SUPPORTS_SAVE )
GAME( 1984, inferno, 0, williams2_extra_ram, inferno, inferno, ROT0, "Williams", "Inferno", GAME_SUPPORTS_SAVE )
GAME( 1986, joust2, 0, joust2, joust2, joust2, ROT270, "Williams", "Joust 2 - Survival of the Fittest (set 1)", GAME_SUPPORTS_SAVE )

View File

@ -36,7 +36,9 @@ extern const pia6821_interface williams2_snd_pia_intf;
/* Game-specific later-Williams PIA interfaces */
extern const pia6821_interface mysticm_pia_0_intf;
extern const pia6821_interface mysticm_pia_1_intf;
extern const pia6821_interface tshoot_pia_0_intf;
extern const pia6821_interface tshoot_pia_1_intf;
extern const pia6821_interface tshoot_snd_pia_intf;
extern const pia6821_interface joust2_pia_1_intf;

View File

@ -604,9 +604,9 @@ WRITE8_HANDLER( zwackery_ca2_w )
}
void zwackery_pia_irq(int state)
static void zwackery_pia_irq(int state)
{
v493_irq_state = state;
v493_irq_state = pia_get_irq_a(2) | pia_get_irq_b(2);
update_mcr68_interrupts();
}

View File

@ -385,15 +385,19 @@ static WRITE8_HANDLER( sync_pia_4_porta_w )
static void qix_pia_dint(int state)
{
int combined_state = pia_get_irq_a(3) | pia_get_irq_b(3);
/* DINT is connected to the data CPU's IRQ line */
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static void qix_pia_sint(int state)
{
int combined_state = pia_get_irq_a(4) | pia_get_irq_b(4);
/* SINT is connected to the sound CPU's IRQ line */
cpunum_set_input_line(2, M6802_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
cpunum_set_input_line(2, M6802_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}

View File

@ -47,6 +47,8 @@ static READ8_HANDLER( williams_49way_port_0_r );
/* newer-Williams routines */
static WRITE8_HANDLER( williams2_snd_cmd_w );
static void mysticm_main_irq(int state);
static void tshoot_main_irq(int state);
/* Lotto Fun-specific code */
static READ8_HANDLER( lottofun_input_port_0_r );
@ -209,7 +211,15 @@ const pia6821_interface mysticm_pia_0_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ input_port_0_r, input_port_1_r, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, 0, 0, 0,
/*irqs : A/B */ williams_main_firq, williams_main_irq
/*irqs : A/B */ williams_main_firq, mysticm_main_irq
};
/* Mystic Marathon PIA 1 */
const pia6821_interface mysticm_pia_1_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ input_port_2_r, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, williams2_snd_cmd_w, 0, pia_2_ca1_w,
/*irqs : A/B */ mysticm_main_irq, mysticm_main_irq
};
/* Turkey Shoot PIA 0 */
@ -217,7 +227,15 @@ const pia6821_interface tshoot_pia_0_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ tshoot_input_port_0_3_r, input_port_1_r, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, tshoot_lamp_w, williams_port_select_w, 0,
/*irqs : A/B */ williams_main_irq, williams_main_irq
/*irqs : A/B */ tshoot_main_irq, tshoot_main_irq
};
/* Turkey Shoot PIA 1 */
const pia6821_interface tshoot_pia_1_intf =
{
/*inputs : A/B,CA/B1,CA/B2 */ input_port_2_r, 0, 0, 0, 0, 0,
/*outputs: A/B,CA/B2 */ 0, williams2_snd_cmd_w, 0, pia_2_ca1_w,
/*irqs : A/B */ tshoot_main_irq, tshoot_main_irq
};
/* Turkey Shoot PIA 2 */
@ -283,8 +301,10 @@ static TIMER_CALLBACK( williams_count240_callback )
static void williams_main_irq(int state)
{
int combined_state = pia_get_irq_a(1) | pia_get_irq_b(1);
/* IRQ to the main CPU */
cpunum_set_input_line(0, M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
@ -297,8 +317,35 @@ static void williams_main_firq(int state)
static void williams_snd_irq(int state)
{
int combined_state = pia_get_irq_a(2) | pia_get_irq_b(2);
/* IRQ to the sound CPU */
cpunum_set_input_line(1, M6800_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE);
cpunum_set_input_line(1, M6800_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
/*************************************
*
* Newer Williams interrupts
*
*************************************/
static void mysticm_main_irq(int state)
{
int combined_state = pia_get_irq_b(0) | pia_get_irq_a(1) | pia_get_irq_b(1);
/* IRQ to the main CPU */
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}
static void tshoot_main_irq(int state)
{
int combined_state = pia_get_irq_a(0) | pia_get_irq_b(0) | pia_get_irq_a(1) | pia_get_irq_b(1);
/* IRQ to the main CPU */
cpunum_set_input_line(0, M6809_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
}