diff options
Diffstat (limited to 'trunk/src/mame/drivers/deco_ld.c')
-rw-r--r-- | trunk/src/mame/drivers/deco_ld.c | 689 |
1 files changed, 689 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/deco_ld.c b/trunk/src/mame/drivers/deco_ld.c new file mode 100644 index 00000000000..b9caf2d412b --- /dev/null +++ b/trunk/src/mame/drivers/deco_ld.c @@ -0,0 +1,689 @@ +/*************************************************************************** + +Bega's Battle (c) 1983 Data East Corporation + +preliminary driver by Angelo Salese + +TODO: +- laserdisc hook-ups; +- video emulation is bare bones; +- i/os + +*************************************************************************** + +There are three hardware versions of Cobra Command (LD): + +Data East single PCB, Pioneer LD-V1000 +Data East 3-boardset, same hardware as Bega's Battle & Road Blaster, Sony +LDP-1000 +MACH3 conversion kit (ROMs, disc, decals), Pioneer PR-8210 + +There are four versions of the laserdisc. + +Pioneer (08359) +Data East (Japan), LDS-301 with an orange label +Data East (USA), LDS-301A with a green label +Sony (a1090731704132a) + +The Data East labelled discs were released with the DE 3-boardset version +and MACH3 conversion. +The Pioneer Labelled disc was released with the DE single PCB version. +Not sure what version the Sony disc came from. It was given to me by the +copyright owner of Road Blaster, who also gave me a Road Blaster disc/kit +which has a similar Sony label. + +I peeled the Data East labels off an orange and a green labelled disc and +the labels underneath were identical to the Sony labelled disc (Sony Japan, +disc No.a1090731704132a). + +Physical appearances aside, the Sony and Pioneer pressed discs have +identical content. + +=========================================================================== + + +--------------------------------- +Bega's Battle by DATA EAST (1983) +--------------------------------- +malcor + + + + +Location Device File ID Checksum +---------------------------------------- +TB 14F 2764 AN00 E929 [ main program ] [ Rev.1 ] +TB 12F 2764 AN01 7B4D [ main program ] [ Rev.1 ] +TB 11F 2764 AN02 3390 [ main program ] [ Rev.1 ] +TB 9F 2764 AN03 A9E5 [ main program ] [ Rev.1 ] +TB 8F 2764 AN04 303E [ main program ] [ Rev.1 ] +TB 6F 2764 AN05 3A89 [ main program ] [ Rev.1 ] + +TB 14F 2764 AN00-3 E983 [ main program ] [ Rev.3 ] +TB 11F 2764 AN02-3 46DA [ main program ] [ Rev.3 ] +TB 9F 2764 AN03-3 B99B [ main program ] [ Rev.3 ] +TB 8F 2764 AN04-3 3A57 [ main program ] [ Rev.3 ] +TB 6F 2764 AN05-3 3A9D [ main program ] [ Rev.3 ] + +TB 15C 2764 AN06 916B [ snd program ] +TB 3A 2764 AN07 944B +TB 4A 2764 AN08 798F +TB 6A 2764 AN09 DF57 +TB 12A 2764 AN0A 5B95 +TB 14A 2764 AN0B F2C7 +TB 15A 2764 AN0C 1605 +LB 2F 82S123 AF-8.bpr 00FC [ DSP select ] +LB 14K PAL10L8 LP1-1.pld 6A1A +LB 7C PAL10L8 LP1-2.pld 6A16 +LB 8C PAL12L6 LP1-3.pld 76B3 +LB 11E PAL12L6 LP1-4.pld 769F +LB 6C PAL10L8 LP1-5.pld 6A99 +LB 12C PAL10L8 LP1-5.pld 6A99 +TB 10H PAL10L8 LP2-1.pld 6A36 +TB C10 PAL10L8 LP2-4.pld 6A05 + + +Note: TB - Top board VDO-2 DE-0139-1 + LB - Lower board VDO-1 DE-0138-1 + + Laserdisc video game + + +Brief hardware overview +----------------------- + +Main processor - 6502 + - EF68B50P communications interface + - AM2950DC I/O port to sound processor + +Sound processor - 6502 + 2x - AY-3-8910 + +***************************************************************************/ + +#include "emu.h" +#include "cpu/m6502/m6502.h" +#include "sound/ay8910.h" +#include "machine/laserdsc.h" + + +class deco_ld_state : public driver_device +{ +public: + deco_ld_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) { } + + UINT8 *m_videoram; + UINT8 m_vram_bank; + device_t *m_laserdisc; + UINT8 m_laserdisc_data; + int m_nmimask; +}; + + + +static SCREEN_UPDATE( rblaster ) +{ + deco_ld_state *state = screen->machine().driver_data<deco_ld_state>(); + UINT8 *videoram = state->m_videoram; + const gfx_element *gfx = screen->machine().gfx[0]; + int count = 0x0000; + + int y,x; + + for (y=0;y<32;y++) + { + for (x=0;x<32;x++) + { + int tile = videoram[count]; + int colour = (state->m_vram_bank & 0x7); + drawgfx_opaque(bitmap,cliprect,gfx,tile,colour,0,0,x*8,y*8); + + count++; + } + } + + return 0; +} + +#if 0 +static WRITE8_HANDLER( rblaster_sound_w ) +{ + soundlatch_w(space,0,data); + device_set_input_line(space->machine().cpu[1], 0, HOLD_LINE); +} +#endif + +static WRITE8_HANDLER( rblaster_vram_bank_w ) +{ + deco_ld_state *state = space->machine().driver_data<deco_ld_state>(); + state->m_vram_bank = data; +} + +static READ8_HANDLER( laserdisc_r ) +{ + deco_ld_state *state = space->machine().driver_data<deco_ld_state>(); + UINT8 result = laserdisc_data_r(state->m_laserdisc); +// mame_printf_debug("laserdisc_r = %02X\n", result); + return result; +} + + +static WRITE8_HANDLER( laserdisc_w ) +{ + deco_ld_state *state = space->machine().driver_data<deco_ld_state>(); + state->m_laserdisc_data = data; +} + +static READ8_HANDLER( test_r ) +{ + return space->machine().rand(); +} + +static ADDRESS_MAP_START( begas_map, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_RAM +// AM_RANGE(0x1000, 0x1007) AM_NOP + AM_RANGE(0x1000, 0x1000) AM_READ(test_r) + AM_RANGE(0x1001, 0x1001) AM_READ(test_r) + AM_RANGE(0x1002, 0x1002) AM_READ(test_r) + AM_RANGE(0x1003, 0x1003) AM_READ(test_r) + AM_RANGE(0x1001, 0x1001) AM_WRITENOP //??? +// AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN0") + AM_RANGE(0x1003, 0x1003) AM_WRITE(rblaster_vram_bank_w) //might be 1001 + AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command + AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data + AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x2000, 0x27ff) AM_RAM + AM_RANGE(0x2800, 0x2fff) AM_RAM AM_BASE_MEMBER(deco_ld_state, m_videoram) + AM_RANGE(0x3000, 0x3fff) AM_RAM + AM_RANGE(0x4000, 0xffff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( cobra_map, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_RAM + AM_RANGE(0x1000, 0x1000) AM_READ_PORT("IN1") + AM_RANGE(0x1001, 0x1001) AM_READ(test_r)//_PORT("IN2") + AM_RANGE(0x1002, 0x1002) AM_READ(test_r)//_PORT("IN3") + AM_RANGE(0x1003, 0x1003) AM_READ(test_r)//AM_READ_PORT("IN0") +// AM_RANGE(0x1004, 0x1004) AM_READ(test_r)//_PORT("IN4") +// AM_RANGE(0x1005, 0x1005) AM_READ(test_r)//_PORT("IN5") + AM_RANGE(0x1004, 0x1004) AM_WRITE(rblaster_vram_bank_w) //might be 1001 + AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command + AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data + AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x2000, 0x2fff) AM_RAM + AM_RANGE(0x3000, 0x37ff) AM_RAM //vram attr? + AM_RANGE(0x3800, 0x3fff) AM_RAM AM_BASE_MEMBER(deco_ld_state, m_videoram) + AM_RANGE(0x4000, 0xffff) AM_ROM +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( rblaster_map, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_RAM +// AM_RANGE(0x1000, 0x1007) AM_NOP + AM_RANGE(0x1001, 0x1001) AM_WRITENOP //??? + AM_RANGE(0x1003, 0x1003) AM_READ_PORT("IN0") + AM_RANGE(0x1003, 0x1003) AM_WRITE(rblaster_vram_bank_w) //might be 1001 + AM_RANGE(0x1006, 0x1006) AM_NOP //ld status / command + AM_RANGE(0x1007, 0x1007) AM_READWRITE(laserdisc_r,laserdisc_w) // ld data + AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(paletteram_RRRGGGBB_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x2800, 0x2fff) AM_RAM AM_BASE_MEMBER(deco_ld_state, m_videoram) + AM_RANGE(0x3000, 0x3fff) AM_RAM + AM_RANGE(0xc000, 0xffff) AM_ROM +ADDRESS_MAP_END + +/* sound arrangement is pratically identical to Zero Target. */ + +#ifdef UNUSED_FUNCTION +static WRITE8_HANDLER( nmimask_w ) +{ + deco_ld_state *state = space->machine().driver_data<deco_ld_state>(); + state->m_nmimask = data & 0x80; +} +#endif + +static INTERRUPT_GEN ( sound_interrupt ) +{ + deco_ld_state *state = device->machine().driver_data<deco_ld_state>(); + if (!state->m_nmimask) device_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); +} + + +static ADDRESS_MAP_START( rblaster_sound_map, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x01ff) AM_RAM + AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("ay1", ay8910_data_w) + AM_RANGE(0x4000, 0x4000) AM_DEVWRITE("ay1", ay8910_address_w) + AM_RANGE(0x6000, 0x6000) AM_DEVWRITE("ay2", ay8910_data_w) + AM_RANGE(0x8000, 0x8000) AM_DEVWRITE("ay2", ay8910_address_w) + AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) + AM_RANGE(0xe000, 0xffff) AM_ROM +ADDRESS_MAP_END + +static INPUT_PORTS_START( cobra ) + PORT_START("IN0") + PORT_DIPNAME( 0x01, 0x00, "SYS0" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) + + PORT_START("IN1") + PORT_DIPNAME( 0x01, 0x00, "SYS1" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x00, "SYS2" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN3") + PORT_DIPNAME( 0x01, 0x00, "SYS3" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN4") + PORT_DIPNAME( 0x01, 0x00, "SYS4" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN5") + PORT_DIPNAME( 0x01, 0x00, "SYS5" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( rblaster ) + PORT_START("IN0") + PORT_DIPNAME( 0x01, 0x00, "SYS0" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK ) + + PORT_START("IN1") + PORT_DIPNAME( 0x01, 0x00, "SYS1" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("IN2") + PORT_DIPNAME( 0x01, 0x00, "SYS2" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +INPUT_PORTS_END + +static const gfx_layout charlayout = +{ + 8,8, + RGN_FRAC(1,3), + 3, + { RGN_FRAC(0,3),RGN_FRAC(1,3),RGN_FRAC(2,3) }, + { 7, 6, 5, 4, 3, 2, 1, 0 }, + { 7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8 }, + 8*8 +}; + +static GFXDECODE_START( rblaster ) + GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 ) +GFXDECODE_END + +static MACHINE_START( rblaster ) +{ + deco_ld_state *state = machine.driver_data<deco_ld_state>(); + state->m_laserdisc = machine.device("laserdisc"); +} + +static MACHINE_CONFIG_START( rblaster, deco_ld_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu",M6502,8000000/2) + MCFG_CPU_PROGRAM_MAP(rblaster_map) +// MCFG_CPU_VBLANK_INT("screen",irq0_line_hold) + MCFG_CPU_VBLANK_INT("screen",nmi_line_pulse) + + MCFG_CPU_ADD("audiocpu",M6502,8000000/2) + MCFG_CPU_PROGRAM_MAP(rblaster_sound_map) +// MCFG_CPU_VBLANK_INT("screen",irq0_line_hold) //test + MCFG_CPU_PERIODIC_INT(sound_interrupt, 640) + + MCFG_LASERDISC_ADD("laserdisc", PIONEER_LDV1000, "screen", "ldsound") //Sony LDP-1000A, is it truly compatible with the Pioneer? + MCFG_LASERDISC_OVERLAY(rblaster, 256, 256, BITMAP_FORMAT_INDEXED16) + + /* video hardware */ + MCFG_LASERDISC_SCREEN_ADD_NTSC("screen", BITMAP_FORMAT_INDEXED16) + MCFG_GFXDECODE(rblaster) + MCFG_PALETTE_LENGTH(512) + MCFG_MACHINE_START(rblaster) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + MCFG_SOUND_ADD("ay1", AY8910, 1500000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) + + MCFG_SOUND_ADD("ay2", AY8910, 1500000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) + + MCFG_SOUND_ADD("ldsound", LASERDISC_SOUND, 0) + MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) + MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( begas, rblaster ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(begas_map) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( cobra, rblaster ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(cobra_map) + + MCFG_DEVICE_REMOVE("audiocpu") +MACHINE_CONFIG_END + +/*************************************************************************** + + Game driver(s) + +***************************************************************************/ + +ROM_START( begas ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "an05-3", 0x4000, 0x2000, CRC(c917a283) SHA1(b91f8cd18b8cc1189e4b69d6932d6f01d4ccfb81) ) + ROM_LOAD( "an04-3", 0x6000, 0x2000, CRC(935b2b0a) SHA1(e7c09960607569bd88e9af396aa70661f4352efb) ) + ROM_LOAD( "an03-3", 0x8000, 0x2000, CRC(79438d80) SHA1(e641336f23c6b84d84313ef3e94871ac9aa8b612) ) + ROM_LOAD( "an02-3", 0xa000, 0x2000, CRC(98ce4ca0) SHA1(e7db66b1f0f06b0a21e7450962ba70f460a24847) ) + ROM_LOAD( "an01", 0xc000, 0x2000, CRC(15f8921d) SHA1(32f945bee8f30e5896da38ac6184a11c0a8194bb) ) //ok? + ROM_LOAD( "an00-3", 0xe000, 0x2000, CRC(124a3a36) SHA1(e2f7110196cb46fcda429c613388285b46ec1a9e) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "an06", 0xe000, 0x2000, CRC(cbbcd730) SHA1(2f2e78fcf2eba71044bec60d27d8756d9b5af551) ) + + ROM_REGION( 0xc000, "gfx1", ROMREGION_INVERT ) + ROM_LOAD( "an0a", 0x0000, 0x2000, CRC(e429305d) SHA1(9a05ab7916235d028b6b05270703516581825660) ) + ROM_LOAD( "an0b", 0x4000, 0x2000, CRC(09e4b780) SHA1(0735420b8529017e507feecf8f74fecd80fbf7d5) ) + ROM_LOAD( "an0c", 0x8000, 0x2000, CRC(0c127207) SHA1(b8372b2fa20ffe5ac278f558c07fd761c86e514b) ) + + ROM_LOAD( "an07", 0x2000, 0x2000, CRC(6b8ad735) SHA1(a703523202d40e409e2345a6626b9e29b7a59cd3) ) + ROM_LOAD( "an08", 0x6000, 0x2000, CRC(b5518391) SHA1(57f6407491cff075f76a8b459cc33e8b9a91e7de) ) + ROM_LOAD( "an09", 0xa000, 0x2000, CRC(b7375fd7) SHA1(93a59e99e375bdba77199a705b5e304ece221617) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "af-8.bpr", 0x00, 0x20, CRC(20006a72) SHA1(6d0e1c6de45079f9e128186478a7e0ed3fd471d0) ) + + ROM_REGION( 0x1000, "plds", 0 ) + ROM_LOAD( "lp1-1.pld", 0x0000, 44, CRC(cc84cb09) SHA1(61620ef30dfd6c81cc517f95ab6358c619ca3298) ) + ROM_LOAD( "lp1-2.pld", 0x0100, 44, CRC(60e16fc4) SHA1(1df735f393ed0fcf1272fceada9764084ff11e07) ) + ROM_LOAD( "lp1-3.pld", 0x0200, 52, CRC(976a7c57) SHA1(202c55a236799fb44a977c074c231ed54c71a872) ) + ROM_LOAD( "lp1-4.pld", 0x0300, 52, CRC(cc9a442f) SHA1(5d08873b204b15f888d02d79e049119e05e41b45) ) + ROM_LOAD( "lp1-5.pld", 0x0400, 44, CRC(2d9f3118) SHA1(02e40a99f131bb47562d5b90fdfb11ca8cd90da6) ) + ROM_LOAD( "lp2-1.pld", 0x0500, 44, CRC(dbb05313) SHA1(fc37db24f12c4f5170945c9ec9a333e4583c1712) ) + ROM_LOAD( "lp2-4.pld", 0x0600, 44, CRC(4c72736c) SHA1(6f7521284a5d960ff05c4361095c3e89a79f7475) ) + + DISK_REGION( "laserdisc" ) + DISK_IMAGE_READONLY( "begas", 0, NO_DUMP ) +ROM_END + +ROM_START( begas1 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "an05", 0x4000, 0x2000, CRC(91a05549) SHA1(425668ee0dcf44bc011ee3649aa82df6ad3180eb) ) + ROM_LOAD( "an04", 0x6000, 0x2000, CRC(670966fe) SHA1(c179e3045ed0e46c5829fce5297ada475141e662) ) + ROM_LOAD( "an03", 0x8000, 0x2000, CRC(d2d85cdf) SHA1(da557ce5c3252297d2c073a0242e1989b0b7388b) ) + ROM_LOAD( "an02", 0xa000, 0x2000, CRC(84d13c20) SHA1(6474d90b84bca88c35cdb1d4c117ce431d6addf7) ) + ROM_LOAD( "an01", 0xc000, 0x2000, CRC(15f8921d) SHA1(32f945bee8f30e5896da38ac6184a11c0a8194bb) ) + ROM_LOAD( "an00", 0xe000, 0x2000, CRC(184297f3) SHA1(6813f076fde3eb583929506b2e65d9cd988b1b75) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "an06", 0xe000, 0x2000, CRC(cbbcd730) SHA1(2f2e78fcf2eba71044bec60d27d8756d9b5af551) ) + + ROM_REGION( 0xc000, "gfx1", ROMREGION_INVERT ) + ROM_LOAD( "an0a", 0x0000, 0x2000, CRC(e429305d) SHA1(9a05ab7916235d028b6b05270703516581825660) ) + ROM_LOAD( "an0b", 0x4000, 0x2000, CRC(09e4b780) SHA1(0735420b8529017e507feecf8f74fecd80fbf7d5) ) + ROM_LOAD( "an0c", 0x8000, 0x2000, CRC(0c127207) SHA1(b8372b2fa20ffe5ac278f558c07fd761c86e514b) ) + + ROM_LOAD( "an07", 0x2000, 0x2000, CRC(6b8ad735) SHA1(a703523202d40e409e2345a6626b9e29b7a59cd3) ) + ROM_LOAD( "an08", 0x6000, 0x2000, CRC(b5518391) SHA1(57f6407491cff075f76a8b459cc33e8b9a91e7de) ) + ROM_LOAD( "an09", 0xa000, 0x2000, CRC(b7375fd7) SHA1(93a59e99e375bdba77199a705b5e304ece221617) ) + + ROM_REGION( 0x20, "proms", 0 ) + ROM_LOAD( "af-8.bpr", 0x00, 0x20, CRC(20006a72) SHA1(6d0e1c6de45079f9e128186478a7e0ed3fd471d0) ) + + ROM_REGION( 0x1000, "plds", 0 ) + ROM_LOAD( "lp1-1.pld", 0x0000, 44, CRC(cc84cb09) SHA1(61620ef30dfd6c81cc517f95ab6358c619ca3298) ) + ROM_LOAD( "lp1-2.pld", 0x0100, 44, CRC(60e16fc4) SHA1(1df735f393ed0fcf1272fceada9764084ff11e07) ) + ROM_LOAD( "lp1-3.pld", 0x0200, 52, CRC(976a7c57) SHA1(202c55a236799fb44a977c074c231ed54c71a872) ) + ROM_LOAD( "lp1-4.pld", 0x0300, 52, CRC(cc9a442f) SHA1(5d08873b204b15f888d02d79e049119e05e41b45) ) + ROM_LOAD( "lp1-5.pld", 0x0400, 44, CRC(2d9f3118) SHA1(02e40a99f131bb47562d5b90fdfb11ca8cd90da6) ) + ROM_LOAD( "lp2-1.pld", 0x0500, 44, CRC(dbb05313) SHA1(fc37db24f12c4f5170945c9ec9a333e4583c1712) ) + ROM_LOAD( "lp2-4.pld", 0x0600, 44, CRC(4c72736c) SHA1(6f7521284a5d960ff05c4361095c3e89a79f7475) ) + + DISK_REGION( "laserdisc" ) + DISK_IMAGE_READONLY( "begas", 0, NO_DUMP ) +ROM_END + +ROM_START( rblaster ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "01.bin", 0xc000, 0x2000, CRC(e4733c49) SHA1(357f46a80273f8a365d16cddf5e2caaeeacaf4ad) ) + ROM_LOAD( "00.bin", 0xe000, 0x2000, CRC(084d6ae2) SHA1(f49eb2d53bad5af88a12535ba628c9decce690ff) ) + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "02.bin", 0xe000, 0x2000, CRC(6c20335d) SHA1(b28e80f112553af8e3fba9ebbfc10d1f56396ac1) ) + + ROM_REGION( 0xc000, "gfx1", ROMREGION_INVERT ) + ROM_LOAD( "03.bin", 0x0000, 0x2000, CRC(d1ff5ffb) SHA1(29df207e225e3b0477d5566d256198310d6ae526) ) + ROM_LOAD( "06.bin", 0x2000, 0x2000, CRC(d1ff5ffb) SHA1(29df207e225e3b0477d5566d256198310d6ae526) ) + ROM_LOAD( "04.bin", 0x4000, 0x2000, CRC(da2c84d9) SHA1(3452b0e2a45fa771e226c3a3668afbf3ceb0ec11) ) + ROM_LOAD( "07.bin", 0x6000, 0x2000, CRC(da2c84d9) SHA1(3452b0e2a45fa771e226c3a3668afbf3ceb0ec11) ) + ROM_LOAD( "05.bin", 0x8000, 0x2000, CRC(4608b516) SHA1(44af4be84a0b807ea0813ce86376a4b6fd927e5a) ) + ROM_LOAD( "08.bin", 0xa000, 0x2000, CRC(4608b516) SHA1(44af4be84a0b807ea0813ce86376a4b6fd927e5a) ) + + DISK_REGION( "laserdisc" ) + DISK_IMAGE_READONLY( "rblaster", 0, NO_DUMP ) +ROM_END + +ROM_START( cobra ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "au03-2", 0x8000, 0x2000, CRC(8f0a8fba) SHA1(8e11d2bd665a5ca6b3bb11aa2b707458c1534327) ) + ROM_LOAD( "au02-2", 0xa000, 0x2000, CRC(7db11acf) SHA1(1eebae0741f5735bc8966f3c31a9c07dac2e3916) ) + ROM_LOAD( "au01-2", 0xc000, 0x2000, CRC(523dd8f6) SHA1(47bd4c9b2272e9a710e6e97f2505075df68101ed) ) + ROM_LOAD( "au00-2", 0xe000, 0x2000, CRC(6c0f1f16) SHA1(ed05d3eaa24e84b1dfb4e1eb5f69b23e4a1494ba) ) + ROM_COPY( "maincpu", 0x8000, 0x4000, 0x4000 ) + + ROM_REGION( 0xc000, "gfx1", ROMREGION_INVERT ) + ROM_LOAD( "au0a", 0x0000, 0x2000, CRC(6aaedcf3) SHA1(52dc913eecf8a159784d500217cffd7a6d8eb45c) ) + ROM_LOAD( "au0b", 0x4000, 0x2000, CRC(92247877) SHA1(f9bb0c20212ab13caabfb5beb9b6afc807bc9555) ) + ROM_LOAD( "au0c", 0x8000, 0x2000, CRC(d00a2762) SHA1(84d4329b39b9fd30682b7efa5cb2744934c5ee5c) ) + + ROM_LOAD( "au07", 0x2000, 0x2000, CRC(d4bf12a5) SHA1(e172f69ae02ac2670b70af0cfcf3887dd99c2761) ) + ROM_LOAD( "au08", 0x6000, 0x2000, CRC(63158274) SHA1(c728e8ba0a11ea67cf508877ad74a3aab9ef26fc) ) + ROM_LOAD( "au09", 0xa000, 0x2000, CRC(74e93394) SHA1(7a1470cf2008b1bef8d950939b758707297b3655) ) + + DISK_REGION( "laserdisc" ) + DISK_IMAGE_READONLY( "cobra", 0, SHA1(8390498294aca97a5d1769032e7b115d1a42f5d3) ) +ROM_END + +GAME( 1983, begas, 0, begas, cobra, 0, ROT0, "Data East", "Bega's Battle (Revision 3)", GAME_NOT_WORKING ) +GAME( 1983, begas1, begas, rblaster, cobra, 0, ROT0, "Data East", "Bega's Battle (Revision 1)", GAME_NOT_WORKING ) +GAME( 1984, cobra, 0, cobra, cobra, 0, ROT0, "Data East", "Cobra Command (Data East LD)", GAME_NOT_WORKING ) +// Thunder Storm (Cobra Command Japanese version) +GAME( 1985, rblaster, 0, rblaster, rblaster, 0, ROT0, "Data East", "Road Blaster (Data East LD)", GAME_NOT_WORKING ) |