diff options
Diffstat (limited to 'src/mame/drivers/cliffhgr.c')
-rw-r--r-- | src/mame/drivers/cliffhgr.c | 842 |
1 files changed, 842 insertions, 0 deletions
diff --git a/src/mame/drivers/cliffhgr.c b/src/mame/drivers/cliffhgr.c new file mode 100644 index 00000000000..01d77fbc052 --- /dev/null +++ b/src/mame/drivers/cliffhgr.c @@ -0,0 +1,842 @@ +/********************************************************* + + Stern Cliffhanger Laserdisc Hardware + + Driver by Ernesto Corvi + +Hardware description: +- Laserdisc Player is a Pioneer PR-8210 +- Optionally, you can use a Pioneer LD-V1100 through the Infrared Port +- Main Processor is a Z80 at 4 MHz +- Video chip is a TMS9128NL with 16KB of VRAM + +Serial protocol: +- General information: +0's and 1's are transmitted by signal space differential. +A short space between ACTIVE signals means a 0, and a long space means a 1. +- Wired: Each 'Active' pulse is sent by pulsing the wire. +- Infrared: Each 'Active' pulse is sent by toggling the Infrared LED 10 times on and off. + +More info on the PR-8210: +http://www.laserdiscarchive.co.uk/laserdisc_archive/pioneer/pioneer_pr-8210/pioneer_pr-8210.htm + +More info on the LD-V1100: +http://www.laserdiscarchive.co.uk/laserdisc_archive/pioneer/pioneer_ld-1100/pioneer_ld-1100.htm + +Interrupts: +The frame decoder reads in the Phillips code from the composite signal into +3x8 bit flip flops. If bit 7 of the code is set, then an IRQ is generated. +Phillips codes come in scanline 17 and 18 of the composite signal for each +field, so if we have valid codes, we would have 4 irq's per frame. +NMIs are triggered by the TMS9128NL chip. The TMS9128NL SYNC signal is hooked +up to the composite SYNC signal from the frame decoder. + +Goal To Go Side detection: +The side detection code expects to read a chapter Phillips code of 0x881DDD +for Side 1, or 0x8F7DDD for Side 2. That would be chapter 1 for Side 1, or +chapter number 119 for Side 2. + +Audio: +The lower two bits on Port $46 enable each two fixed-tone generators that +use a 555 to generate the waveform for the 'blip' sounds. + +IO Ports: +0x39: R ???????? +0x44: W TMS9128NL VRAM Port +0x45: R TMS9128NL VRAM Port +0x46: W Sound/Overlay +0x50: R Reads lower byte of Phillips code +0x51: R Reads middle byte of Phillips code +0x52: R Reads high byte of Phillips code +0x53: R Clears the flip flop that generated the IRQ +0x54: W TMS9128NL REG Port +0x55: R TMS9128NL REG Port +0x57: W Clears the serial->parallel chips of the Phillips code reader. +0x60: W Input Port/Dipswitch selector +0x62: R Input Port/Dipswitch data read +0x64: - Unused in the schematics, but used in the code (maybe as delay?) +0x66: LD Data Port (D0 is serial line) +0x68: W Coin Counter(D6) +0x6A: W /LAMP0 (Infrared?) (D4/D5) +0x6C: - Unused +0x6E: W CPU Board Test LED ON +0x6F: W CPU Board Test LED OFF + +Sound/Overlay: +bit 0: Enable tone generator 1 +bit 1: Enable tone generator 2 +bit 4: Enable/Disable video overlay + +GTG Side select codes: +Side 1 = 0x881DDD (or 0x880000 | ( 0x01 << 12 ) | 0x0DDD) +Side 2 = 0x8F7DDD (or 0x880000 | ( 0x77 << 12 ) | 0x0DDD) + +*********************************************************/ + +#include "driver.h" +#include "render.h" +#include "machine/laserdsc.h" +#include "video/tms9928a.h" +#include "sound/discrete.h" + +#define CLIFF_ENABLE_SND_1 NODE_01 +#define CLIFF_ENABLE_SND_2 NODE_02 + +static laserdisc_info *discinfo = NULL; + +static int port_bank = 0; +static int phillips_code = 0; + +static render_texture *video_texture; +static render_texture *overlay_texture; +static mame_bitmap *last_video_bitmap; + +static emu_timer *irq_timer; + +/********************************************************/ + +static void video_cleanup(running_machine *machine) +{ + if (video_texture != NULL) + render_texture_free(video_texture); + if (overlay_texture != NULL) + render_texture_free(overlay_texture); + laserdisc_exit(discinfo); +} + +static VIDEO_UPDATE( cliff ) +{ + /* update the TMS9928A video */ + video_update_tms9928a( machine, screen, bitmap, cliprect ); + + if (discinfo != NULL) + { + mame_bitmap *vidbitmap; + rectangle fixedvis = *TMS9928A_get_visarea(); + fixedvis.max_x++; + fixedvis.max_y++; + + laserdisc_get_video(discinfo, &vidbitmap); + + /* first lay down the video data */ + if (video_texture == NULL) + video_texture = render_texture_alloc(NULL, NULL); + if (vidbitmap != last_video_bitmap) + render_texture_set_bitmap(video_texture, vidbitmap, NULL, 0, TEXFORMAT_YUY16); + + last_video_bitmap = vidbitmap; + + /* then overlay the TMS9928A video */ + if (overlay_texture == NULL) + overlay_texture = render_texture_alloc(NULL, NULL); + render_texture_set_bitmap(overlay_texture, bitmap, &fixedvis, 0, TEXFORMAT_PALETTEA16); + + /* add both quads to the screen */ + render_container_empty(render_container_get_screen(screen)); + render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), video_texture, PRIMFLAG_BLENDMODE(BLENDMODE_NONE) | PRIMFLAG_SCREENTEX(1)); + render_screen_add_quad(screen, 0.0f, 0.0f, 1.0f, 1.0f, MAKE_ARGB(0xff,0xff,0xff,0xff), overlay_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA) | PRIMFLAG_SCREENTEX(1)); + } + + /* display disc information */ + if (discinfo != NULL) + popmessage("%s", laserdisc_describe_state(discinfo)); + + return 0; +} + +/********************************************************/ + +static WRITE8_HANDLER( cliff_test_led_w ) +{ + set_led_status( 0, offset ^ 1 ); +} + +static WRITE8_HANDLER( cliff_port_bank_w ) +{ + /* writing 0x0f clears the LS174 flip flop */ + if ( data == 0x0f ) + port_bank = 0; + else + port_bank = data & 0x0f; /* only D3-D0 are connected */ +} + +static READ8_HANDLER( cliff_port_r ) +{ + if ( port_bank < 7 ) + { + return readinputport( port_bank ); + } + + /* output is pulled up for non-mapped ports */ + return 0xff; +} + +static READ8_HANDLER( cliff_phillips_code_r ) +{ + if ( discinfo != NULL ) + { + return ( phillips_code >> (8*offset) ) & 0xff; + } + + return 0x00; +} + +static WRITE8_HANDLER( cliff_coin_counter_w ) +{ + coin_counter_w(0, (data & 0x40) ? 1 : 0 ); +} + +static READ8_HANDLER( cliff_irq_ack_r ) +{ + /* deassert IRQ on the CPU */ + cpunum_set_input_line(0, 0, CLEAR_LINE); + + return 0x00; +} + +static WRITE8_HANDLER( cliff_sound_overlay_w ) +{ + int sound = data & 3; + int overlay = ( data & 0x10 ) ? 1 : 0; + + /* configure pen 0 and 1 as transparent in the renderer and use it as the compositing color */ + render_container_set_palette_alpha(render_container_get_screen(0), 0, overlay ? 0x00 : 0xff ); + render_container_set_palette_alpha(render_container_get_screen(0), 1, overlay ? 0x00 : 0xff ); + + /* audio */ + discrete_sound_w(CLIFF_ENABLE_SND_1, sound&1); + discrete_sound_w(CLIFF_ENABLE_SND_2, (sound>>1)&1); +} + +#ifdef UNUSED_FUNCTION +static WRITE8_HANDLER( cliff_irqack_w ) +{ + phillips_code = 0; +} +#endif + +static WRITE8_HANDLER( cliff_ldwire_w ) +{ + laserdisc_line_w(discinfo,LASERDISC_LINE_CONTROL,(data&1) ? ASSERT_LINE : CLEAR_LINE ); +} + + +/********************************************************/ + +static INTERRUPT_GEN( cliff_vsync ) +{ + /* clock the laserdisc and video chip every 60Hz */ + laserdisc_vsync(discinfo); + TMS9928A_interrupt(); +} + +static TIMER_CALLBACK( cliff_irq_callback ) +{ + phillips_code = 0; + + switch (param) + { + case 17: + phillips_code = laserdisc_get_field_code(discinfo, LASERDISC_CODE_LINE17); + param = 18; + break; + + case 18: + phillips_code = laserdisc_get_field_code(discinfo, LASERDISC_CODE_LINE18); + param = 17; + break; + } + + /* if we have a valid code, trigger an IRQ */ + if ( phillips_code & 0x800000 ) + cpunum_set_input_line(0, 0, ASSERT_LINE); + + timer_adjust(irq_timer, video_screen_get_time_until_pos(0, param, 0), param, attotime_zero); +} + +static void vdp_interrupt (int state) +{ + cpunum_set_input_line(0, INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE ); +} + + + +static MACHINE_START( cliffhgr ) +{ + discinfo = laserdisc_init(LASERDISC_TYPE_PR8210, get_disk_handle(0), 0); + irq_timer = timer_alloc(cliff_irq_callback); +} + +static MACHINE_RESET( cliffhgr ) +{ + port_bank = 0; + phillips_code = 0; + timer_adjust(irq_timer, video_screen_get_time_until_pos(0, 17, 0), 17, attotime_zero); +} + +/********************************************************/ + +static ADDRESS_MAP_START( mainmem, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xbfff) AM_ROM /* ROM */ + AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) /* NVRAM */ + AM_RANGE(0xe800, 0xefff) AM_RAM /* RAM */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mainport, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(8) ) + AM_RANGE(0x44, 0x44) AM_WRITE(TMS9928A_vram_w) + AM_RANGE(0x45, 0x45) AM_READ(TMS9928A_vram_r) + AM_RANGE(0x46, 0x46) AM_WRITE(cliff_sound_overlay_w) + AM_RANGE(0x50, 0x52) AM_READ(cliff_phillips_code_r) + AM_RANGE(0x53, 0x53) AM_READ(cliff_irq_ack_r) + AM_RANGE(0x54, 0x54) AM_WRITE(TMS9928A_register_w) + AM_RANGE(0x55, 0x55) AM_READ(TMS9928A_register_r) + AM_RANGE(0x57, 0x57) AM_WRITENOP /* clears the serial->parallel chips of the Phillips code reader. */ + AM_RANGE(0x60, 0x60) AM_WRITE(cliff_port_bank_w) + AM_RANGE(0x62, 0x62) AM_READ(cliff_port_r) + AM_RANGE(0x64, 0x64) AM_WRITENOP /* unused in schematics, may be used as timing delay for IR interface */ + AM_RANGE(0x66, 0x66) AM_WRITE(cliff_ldwire_w) + AM_RANGE(0x68, 0x68) AM_WRITE(cliff_coin_counter_w) + AM_RANGE(0x6A, 0x6A) AM_WRITENOP /* /LAMP0 (Infrared?) */ + AM_RANGE(0x6E, 0x6F) AM_WRITE(cliff_test_led_w) +ADDRESS_MAP_END + + +/************************************* + * + * Input ports + * + *************************************/ + +static INPUT_PORTS_START( cliffhgr ) + PORT_START_TAG("BANK0") + PORT_BIT ( 0x3F, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) /* SW2 on CPU PCB */ + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* SW1 on CPU PCB */ + + PORT_START_TAG("BANK1") + PORT_DIPNAME( 0xc0, 0xc0, "Should Have Hint" ) PORT_DIPLOCATION("E11:7,8") + PORT_DIPSETTING( 0xc0, "Never" ) + PORT_DIPSETTING( 0x80, "After 1st Player Mistake" ) + PORT_DIPSETTING( 0x40, "After 2nd Player Mistake" ) + PORT_DIPSETTING( 0x00, "After 3rd Player Mistake" ) + PORT_DIPNAME( 0x20, 0x00, "Action/Stick Hints" ) PORT_DIPLOCATION("E11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, "Display Score and Lives During Animation" ) PORT_DIPLOCATION("E11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Regular Length Scenes" ) PORT_DIPLOCATION("E11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "No Hanging Scene" ) PORT_DIPLOCATION("E11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("E11:1,2") + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "6" ) + + PORT_START_TAG("BANK2") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("F11:5,6") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) + + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("F11:1,2") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + + PORT_START_TAG("BANK3") + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("G11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Short Scenes" ) PORT_DIPLOCATION("G11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("G11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Disc Test" ) PORT_DIPLOCATION("G11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Player Immortality" ) PORT_DIPLOCATION("G11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("G11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Switch Test" ) PORT_DIPLOCATION("G11:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "Service Index" ) PORT_DIPLOCATION("G11:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("BANK4") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x0f, 0x0f, "Move Difficulty" ) PORT_DIPLOCATION("H11:1,2,3,4") + PORT_DIPSETTING( 0x0f, "0 (Easiest)" ) + PORT_DIPSETTING( 0x0e, "1" ) + PORT_DIPSETTING( 0x0d, "2" ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x0b, "4" ) + PORT_DIPSETTING( 0x0a, "5" ) + PORT_DIPSETTING( 0x09, "6" ) + PORT_DIPSETTING( 0x08, "7" ) + PORT_DIPSETTING( 0x07, "8" ) + PORT_DIPSETTING( 0x06, "9" ) + PORT_DIPSETTING( 0x05, "10" ) + PORT_DIPSETTING( 0x04, "11" ) + PORT_DIPSETTING( 0x03, "12" ) + PORT_DIPSETTING( 0x02, "13" ) + PORT_DIPSETTING( 0x01, "14" ) + PORT_DIPSETTING( 0x00, "15 (Hardest)" ) + + PORT_START_TAG("BANK5") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_TILT ) + + PORT_START_TAG("BANK6") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( cliffhga ) + PORT_START_TAG("BANK0") + PORT_BIT ( 0x3F, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) /* SW2 on CPU PCB */ + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* SW1 on CPU PCB */ + + PORT_START_TAG("BANK1") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) ) PORT_DIPLOCATION("E11:1,2") + PORT_DIPSETTING( 0x03, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x01, "5" ) + PORT_DIPSETTING( 0x00, "6" ) + + PORT_START_TAG("BANK2") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("F11:5,6") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) +// PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("F11:1,2") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) +// PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + + PORT_START_TAG("BANK3") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("G11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Play Thru/Random" ) PORT_DIPLOCATION("G11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("G11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Scene Jump/Disc Test" ) PORT_DIPLOCATION("G11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Immortality" ) PORT_DIPLOCATION("G11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("G11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Switch Test" ) PORT_DIPLOCATION("G11:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "Service Index" ) PORT_DIPLOCATION("G11:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("BANK4") + PORT_DIPNAME( 0xf0, 0xf0, "Hint Difficulty" ) PORT_DIPLOCATION("H11:5,6,7,8") + PORT_DIPSETTING( 0xf0, "0 (Most Hints)" ) + PORT_DIPSETTING( 0xe0, "1" ) + PORT_DIPSETTING( 0xd0, "2" ) + PORT_DIPSETTING( 0xc0, "3" ) + PORT_DIPSETTING( 0xb0, "4" ) + PORT_DIPSETTING( 0xa0, "5" ) + PORT_DIPSETTING( 0x90, "6" ) + PORT_DIPSETTING( 0x80, "7" ) + PORT_DIPSETTING( 0x70, "8" ) + PORT_DIPSETTING( 0x60, "9" ) + PORT_DIPSETTING( 0x50, "10" ) + PORT_DIPSETTING( 0x40, "11" ) + PORT_DIPSETTING( 0x30, "12" ) + PORT_DIPSETTING( 0x20, "13" ) + PORT_DIPSETTING( 0x10, "14" ) + PORT_DIPSETTING( 0x00, "15 (Least Hints)" ) + PORT_DIPNAME( 0x0f, 0x0f, "Move Difficulty" ) PORT_DIPLOCATION("H11:1,2,3,4") + PORT_DIPSETTING( 0x0f, "0 (Easiest)" ) + PORT_DIPSETTING( 0x0e, "1" ) + PORT_DIPSETTING( 0x0d, "2" ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x0b, "4" ) + PORT_DIPSETTING( 0x0a, "5" ) + PORT_DIPSETTING( 0x09, "6" ) + PORT_DIPSETTING( 0x08, "7" ) + PORT_DIPSETTING( 0x07, "8" ) + PORT_DIPSETTING( 0x06, "9" ) + PORT_DIPSETTING( 0x05, "10" ) + PORT_DIPSETTING( 0x04, "11" ) + PORT_DIPSETTING( 0x03, "12" ) + PORT_DIPSETTING( 0x02, "13" ) + PORT_DIPSETTING( 0x01, "14" ) + PORT_DIPSETTING( 0x00, "15 (Hardest)" ) + + PORT_START_TAG("BANK5") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_TILT ) + + PORT_START_TAG("BANK6") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + +static INPUT_PORTS_START( goaltogo ) + PORT_START_TAG("BANK0") + PORT_BIT ( 0x3F, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_SERVICE2 ) /* SW2 on CPU PCB */ + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_SERVICE1 ) /* SW1 on CPU PCB */ + + PORT_START_TAG("BANK1") + PORT_DIPNAME( 0x80, 0x80, "Should Have Hint" ) PORT_DIPLOCATION("E11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Max. Game Time Timer" ) PORT_DIPLOCATION("E11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Action/Stick Hints" ) PORT_DIPLOCATION("E11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("E11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Single Coin Continue" ) PORT_DIPLOCATION("E11:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_CONDITION("BANK1",0x01,PORTCOND_EQUALS,0x00) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_CONDITION("BANK1",0x01,PORTCOND_EQUALS,0x00) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("E11:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("BANK2") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("F11:5,6") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) ) + + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("F11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("F11:1,2") + PORT_DIPSETTING( 0x00, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + + PORT_START_TAG("BANK3") + PORT_DIPNAME( 0x80, 0x00, "Display Diagram Before Play" ) PORT_DIPLOCATION("G11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, "Display Score During Game" ) PORT_DIPLOCATION("G11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("G11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Scene Jump/Disc Test" ) PORT_DIPLOCATION("G11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, "Immortality" ) PORT_DIPLOCATION("G11:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("G11:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Switch Test" ) PORT_DIPLOCATION("G11:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x01, 0x01, "Service Index" ) PORT_DIPLOCATION("G11:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START_TAG("BANK4") + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("H11:5") + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x0f, 0x0f, "Move Difficulty" ) PORT_DIPLOCATION("H11:1,2,3,4") + PORT_DIPSETTING( 0x0f, "0 (Easiest)" ) + PORT_DIPSETTING( 0x0e, "1" ) + PORT_DIPSETTING( 0x0d, "2" ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x0b, "4" ) + PORT_DIPSETTING( 0x0a, "5" ) + PORT_DIPSETTING( 0x09, "6" ) + PORT_DIPSETTING( 0x08, "7" ) + PORT_DIPSETTING( 0x07, "8" ) + PORT_DIPSETTING( 0x06, "9" ) + PORT_DIPSETTING( 0x05, "10" ) + PORT_DIPSETTING( 0x04, "11" ) + PORT_DIPSETTING( 0x03, "12" ) + PORT_DIPSETTING( 0x02, "13" ) + PORT_DIPSETTING( 0x01, "14" ) + PORT_DIPSETTING( 0x00, "15 (Hardest)" ) + + PORT_START_TAG("BANK5") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_TILT ) + + PORT_START_TAG("BANK6") + PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + + +/************************************* + * + * Video/sound interfaces + * + *************************************/ + +static const TMS9928a_interface tms9928a_interface = +{ + TMS99x8A, /* TMS9128NL on the board */ + 0x4000, + 0,0, + vdp_interrupt +}; + +extern const discrete_sound_block cliffhgr_discrete_interface[]; + + + +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_DRIVER_START( cliffhgr ) + + MDRV_CPU_ADD(Z80, 4000000) /* 4MHz */ + MDRV_CPU_PROGRAM_MAP(mainmem,0) + MDRV_CPU_IO_MAP(mainport,0) + MDRV_CPU_VBLANK_INT(cliff_vsync,1) + + MDRV_MACHINE_START(cliffhgr) + MDRV_MACHINE_RESET(cliffhgr) + + MDRV_NVRAM_HANDLER(generic_0fill) + + /* start with the TMS9928a video configuration */ + MDRV_IMPORT_FROM(tms9928a) + + /* override video rendering and raw screen info */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER | VIDEO_SELF_RENDER) + MDRV_VIDEO_UPDATE(cliff) + MDRV_SCREEN_RAW_PARAMS(13500000, 858, 0, 720, 262.5, 21, 262.5) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + /* laserdisc audio */ + MDRV_SOUND_ADD(CUSTOM, 0) + MDRV_SOUND_CONFIG(laserdisc_custom_interface) + MDRV_SOUND_ROUTE(0, "left", 1.0) + MDRV_SOUND_ROUTE(1, "right", 1.0) + + /* discrete sounds */ + MDRV_SOUND_ADD_TAG("discrete", DISCRETE, 0) + MDRV_SOUND_CONFIG_DISCRETE(cliffhgr) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0) +MACHINE_DRIVER_END + + + +/************************************* +* +* ROM definitions +* +*************************************/ + +ROM_START( cliffhgr ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "cliff_u1.bin", 0x0000, 0x2000, CRC(a86ec38f) SHA1(bfca1b1c084f5b7b1e0ccb2f3616ecea1340f04c) ) + ROM_LOAD( "cliff_u2.bin", 0x2000, 0x2000, CRC(b8d33b6b) SHA1(02778f87a78199129c758a8fb0629b9ba74cab99) ) + ROM_LOAD( "cliff_u3.bin", 0x4000, 0x2000, CRC(75a64cd2) SHA1(18fe4d8885b59ec8b8c28b5d7141a27164c982ac) ) + ROM_LOAD( "cliff_u4.bin", 0x6000, 0x2000, CRC(906b2af1) SHA1(65fadd2fec90f47c91ac4928f342c79ab8bc6ef0) ) + ROM_LOAD( "cliff_u5.bin", 0x8000, 0x2000, CRC(5922e710) SHA1(10637baba4d16dc333aeb0ab88ee251f44e1a115) ) + + DISK_REGION( REGION_DISKS ) + DISK_IMAGE_READONLY( "cliffhgr", 0, NO_DUMP ) +ROM_END + +ROM_START( cliffhga ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "cliff_alt_0.bin", 0x0000, 0x2000, CRC(27caa67c) SHA1(70d8270766b8712d4250b1a23489007d59eb262f) ) + ROM_LOAD( "cliff_alt_1.bin", 0x2000, 0x2000, CRC(6e5f1515) SHA1(1c4116f4f5910857408826d73c630abbf1434119) ) + ROM_LOAD( "cliff_alt_2.bin", 0x4000, 0x2000, CRC(045f895d) SHA1(364e259a9630d87ca917c7a9dc1a94d6f0d0eba5) ) + ROM_LOAD( "cliff_alt_3.bin", 0x6000, 0x2000, CRC(54cdb4a1) SHA1(6b1d73aec029af4a88ca2f883b4ed706d153592d) ) + + DISK_REGION( REGION_DISKS ) + DISK_IMAGE_READONLY( "cliffhgr", 0, NO_DUMP ) +ROM_END + +ROM_START( goaltogo ) + ROM_REGION( 0x10000, REGION_CPU1, 0 ) + ROM_LOAD( "gtg.rm0", 0x0000, 0x2000, CRC(d8efddea) SHA1(69a076fed60ebabad3032d8c10804f57a0904327) ) + ROM_LOAD( "gtg.rm1", 0x2000, 0x2000, CRC(69953d38) SHA1(2a51aa785a4576db8b046e128bbfc1b3949d7bf7) ) + ROM_LOAD( "gtg.rm2", 0x4000, 0x2000, CRC(b043e205) SHA1(8992c0e294f59bd9331fb3a50a0dfd8d5c194fa3) ) + ROM_LOAD( "gtg.rm3", 0x6000, 0x2000, CRC(ec305f5e) SHA1(e205fac699db4ca28a87f56f89cc6cf185ad540d) ) + ROM_LOAD( "gtg.rm4", 0x8000, 0x2000, CRC(9e4c8aa2) SHA1(002c0940d3890141f85f98f854fd30cc1e340d45) ) + + DISK_REGION( REGION_DISKS ) + DISK_IMAGE_READONLY( "goaltog1", 0, NO_DUMP ) +ROM_END + + + +/************************************* + * + * Driver initialization + * + *************************************/ + +static DRIVER_INIT( cliff ) +{ + video_texture = NULL; + overlay_texture = NULL; + last_video_bitmap = NULL; + + TMS9928A_configure(&tms9928a_interface); + + add_exit_callback(machine, video_cleanup); +} + + + +/************************************* + * + * Game drivers + * + *************************************/ + +GAME( 1983, cliffhgr, 0, cliffhgr, cliffhgr, cliff, ROT0, "Stern Electronics", "Cliff Hanger", GAME_NO_SOUND | GAME_NOT_WORKING) +GAME( 1983, cliffhga, 0, cliffhgr, cliffhga, cliff, ROT0, "Stern Electronics", "Cliff Hanger (Alt)", GAME_NO_SOUND | GAME_NOT_WORKING) +GAME( 1983, goaltogo, 0, cliffhgr, goaltogo, cliff, ROT0, "Stern Electronics", "Goal To Go", GAME_NO_SOUND | GAME_NOT_WORKING) |