diff options
Diffstat (limited to 'trunk/src/mame/drivers/lordgun.c')
-rw-r--r-- | trunk/src/mame/drivers/lordgun.c | 1056 |
1 files changed, 1056 insertions, 0 deletions
diff --git a/trunk/src/mame/drivers/lordgun.c b/trunk/src/mame/drivers/lordgun.c new file mode 100644 index 00000000000..2580d0c7615 --- /dev/null +++ b/trunk/src/mame/drivers/lordgun.c @@ -0,0 +1,1056 @@ +/************************************************************************************************************* + + -= IGS Lord Of Gun =- + + driver by Luca Elia (l.elia@tin.it) + skeleton driver by David Haywood + code decrypted by unknown + + +CPU : 68000 + Z80 +Custom : IGS005, IGS006, IGS007, IGS008 +Sound : M6295 [+ M6295] + YM3812 or YMF278B +NVRAM : 93C46 + +----------------------------------------------------------------------------------- +Year + Game PCB FM Sound Chips Notes +----------------------------------------------------------------------------------- +1994 Lord Of Gun T0076 YM3812 IGS005? IGS006 IGS007 IGS008 Lightguns +1994 Alien Challenge ? YMF278B ? Not encrypted +----------------------------------------------------------------------------------- + +To do: + +- Protection emulation instead of patching the roms +- lordgun: in the 3rd leg of the ship stage, sometimes part of a far jetboat is drawn above a nearer sub (both sprites). + But this is correct considering both priorities and sprite list positions. Original game bug? +- lordgun: wrong colors for tilemap 0 in the 2nd leg of the last stage (where some sprite priority bugs happen too) +- lordgun: in the jungle level, final enemy, tilemap 0 does not scroll. It may have wrong priority, or may need to be + disabled, even though it is used by enemies to hide, so it's probably just odd but right after all. +- aliencha: no info on the PCB (clocks, chips etc.) + +Notes: + +- aliencha: when booting into service mode, keep buttons 1, 2 and 3 pressed to show more options +- aliencha: original videos at http://www.youtube.com/watch?v=TRHb3WTGuvk, http://www.youtube.com/watch?v=_RaCpHwyS78. + The latter shows English text and a 1995 copyright (instead of 1994) in a different font. +- aliencha: routine at A34 - english/chinese text, A38 - english/chinese names, A3C - Alien Challenge/Round House Rumble title + +*************************************************************************************************************/ + +#include "emu.h" +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "machine/8255ppi.h" +#include "machine/eeprom.h" +#include "sound/3812intf.h" +#include "sound/okim6295.h" +#include "sound/ymf278b.h" +#include "includes/lordgun.h" + +/*************************************************************************** + + Code Decryption / Protection patches + +***************************************************************************/ + +static DRIVER_INIT( lordgun ) +{ + int i; + UINT16 *rom = (UINT16 *)machine.region("maincpu")->base(); + + // Decryption + + int rom_size = 0x100000; + for(i = 0; i < rom_size/2; i++) + { + UINT16 x = rom[i]; + + if((i & 0x0120) == 0x0100 || (i & 0x0a00) == 0x0800) + x ^= 0x0010; + + rom[i] = x; + } + + // Protection + + rom[0x14832/2] = 0x6000; // 014832: 6700 0006 beq $1483a (protection) + rom[0x1587e/2] = 0x6010; // 01587E: 6710 beq $15890 (rom check) +} + + +// From XingXing: +static DRIVER_INIT( aliencha ) +{ + UINT16 *rom = (UINT16 *)machine.region("maincpu")->base(); + + // Protection + + rom[0x0A558/2] = 0x6012; // 0A558 beq.s $A56C + rom[0x0A8DC/2] = 0x6012; // 0A8DC beq.s $A8F0 + rom[0x0AC92/2] = 0x6012; // 0AC92 beq.s $ACA6 + rom[0x124CC/2] = 0x6012; // 124CC beq.s $124E0 + rom[0x12850/2] = 0x6012; // 12850 beq.s $12864 + rom[0x12C06/2] = 0x6012; // 12C06 beq.s $12C1A + rom[0x1862A/2] = 0x6012; // 1862A beq.s $1863E + rom[0x189AE/2] = 0x6012; // 189AE beq.s $189C2 + rom[0x18D64/2] = 0x6012; // 18D64 beq.s $18D78 + rom[0x230FC/2] = 0x6012; // 230FC beq.s $23110 + rom[0x23480/2] = 0x6012; // 23480 beq.s $23494 + rom[0x23836/2] = 0x6012; // 23836 beq.s $2384A + rom[0x2BD0E/2] = 0x6012; // 2BD0E beq.s $2BD22 + rom[0x2C092/2] = 0x6012; // 2C092 beq.s $2C0A6 + rom[0x2C448/2] = 0x6012; // 2C448 beq.s $2C45C +} + + +static DRIVER_INIT( alienchac ) +{ + UINT16 *rom = (UINT16 *)machine.region("maincpu")->base(); + + // Protection + + rom[0x0A550/2] = 0x6012; // 0A558 beq.s $A564 + rom[0x0A8D4/2] = 0x6012; // 0A8D4 beq.s $A8E8 + rom[0x0AC8A/2] = 0x6012; // 0AC8A beq.s $AC9E + rom[0x124B8/2] = 0x6012; // 124B8 beq.s $124CC + rom[0x1283C/2] = 0x6012; // 1283C beq.s $12850 + rom[0x12BF2/2] = 0x6012; // 12BF2 beq.s $12C06 + rom[0x18616/2] = 0x6012; // 18616 beq.s $1862A + rom[0x1899A/2] = 0x6012; // 1899A beq.s $189AE + rom[0x18D50/2] = 0x6012; // 18D50 beq.s $18D64 + rom[0x230E8/2] = 0x6012; // 230E8 beq.s $230FC + rom[0x2346C/2] = 0x6012; // 2346C beq.s $23480 + rom[0x23822/2] = 0x6012; // 23822 beq.s $23822 + rom[0x2BCFA/2] = 0x6012; // 2BCFA beq.s $2BD0E + rom[0x2C07E/2] = 0x6012; // 2C07E beq.s $2C092 + rom[0x2C434/2] = 0x6012; // 2C434 beq.s $2C448 +} + + +/*************************************************************************** + + Memory Maps - Main + +***************************************************************************/ + +static WRITE8_DEVICE_HANDLER(fake_w) +{ +} +static WRITE8_DEVICE_HANDLER(fake2_w) +{ +// popmessage("%02x",data); +} + +static WRITE8_DEVICE_HANDLER( lordgun_eeprom_w ) +{ + lordgun_state *state = device->machine().driver_data<lordgun_state>(); + eeprom_device *eeprom = device->machine().device<eeprom_device>("eeprom"); + int i; + + if (data & ~0xfd) + { +// popmessage("EE: %02x", data); + logerror("%s: Unknown EEPROM bit written %02X\n",device->machine().describe_context(),data); + } + + coin_counter_w(device->machine(), 0, data & 0x01); + + // Update light guns positions + for (i = 0; i < 2; i++) + if ( (data & (0x04 << i)) && !(state->m_old & (0x04 << i)) ) + lordgun_update_gun(device->machine(), i); + + // latch the bit + eeprom->write_bit(data & 0x40); + + // reset line asserted: reset. + eeprom->set_cs_line((data & 0x10) ? CLEAR_LINE : ASSERT_LINE ); + + // clock line asserted: write latch or select next bit to read + eeprom->set_clock_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE ); + + state->m_whitescreen = data & 0x80; + + state->m_old = data; +} + +static WRITE8_DEVICE_HANDLER( aliencha_eeprom_w ) +{ + lordgun_state *state = device->machine().driver_data<lordgun_state>(); + eeprom_device *eeprom = device->machine().device<eeprom_device>("eeprom"); + + if (~data & ~0xf8) + { +// popmessage("EE: %02x", data); + logerror("%s: Unknown EEPROM bit written %02X\n",device->machine().describe_context(),data); + } + + // bit 1? cleared during screen transitions + state->m_whitescreen = !(data & 0x02); + + coin_counter_w(device->machine(), 0, data & 0x08); + coin_counter_w(device->machine(), 1, data & 0x10); + + // latch the bit + eeprom->write_bit(data & 0x80); + + // reset line asserted: reset. + eeprom->set_cs_line((data & 0x20) ? CLEAR_LINE : ASSERT_LINE ); + + // clock line asserted: write latch or select next bit to read + eeprom->set_clock_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE ); +} + + +static READ8_DEVICE_HANDLER( aliencha_dip_r ) +{ + lordgun_state *state = device->machine().driver_data<lordgun_state>(); + switch (state->m_aliencha_dip_sel & 0x70) + { + case 0x30: return input_port_read(device->machine(), "DIP1"); + case 0x60: return input_port_read(device->machine(), "DIP2"); + case 0x50: return input_port_read(device->machine(), "DIP3"); + + default: + logerror("%s: dip_r with unknown dip_sel = %02X\n",device->machine().describe_context(),state->m_aliencha_dip_sel); + return 0xff; + } +} + +static WRITE8_DEVICE_HANDLER( aliencha_dip_w ) +{ + lordgun_state *state = device->machine().driver_data<lordgun_state>(); + state->m_aliencha_dip_sel = data; +} + + +// Unknown, always equal to 7 in lordgun, aliencha. +static WRITE16_HANDLER( lordgun_priority_w ) +{ + lordgun_state *state = space->machine().driver_data<lordgun_state>(); + COMBINE_DATA(&state->m_priority); +// popmessage("PR: %04x", data); +} + + +static READ16_HANDLER( lordgun_gun_0_x_r ) +{ + lordgun_state *state = space->machine().driver_data<lordgun_state>(); + return state->m_gun[0].hw_x; +} + +static READ16_HANDLER( lordgun_gun_0_y_r ) +{ + lordgun_state *state = space->machine().driver_data<lordgun_state>(); + return state->m_gun[0].hw_y; +} + +static READ16_HANDLER( lordgun_gun_1_x_r ) +{ + lordgun_state *state = space->machine().driver_data<lordgun_state>(); + return state->m_gun[1].hw_x; +} + +static READ16_HANDLER( lordgun_gun_1_y_r ) +{ + lordgun_state *state = space->machine().driver_data<lordgun_state>(); + return state->m_gun[1].hw_y; +} + + +static WRITE16_HANDLER( lordgun_soundlatch_w ) +{ + if (ACCESSING_BITS_0_7) soundlatch_w (space, 0, (data >> 0) & 0xff); + if (ACCESSING_BITS_8_15) soundlatch2_w(space, 0, (data >> 8) & 0xff); + + cputag_set_input_line(space->machine(), "soundcpu", INPUT_LINE_NMI, PULSE_LINE); +} + +static ADDRESS_MAP_START( lordgun_map, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x0fffff) AM_ROM + AM_RANGE(0x200000, 0x20ffff) AM_RAM + AM_RANGE(0x210000, 0x21ffff) AM_RAM AM_BASE_MEMBER(lordgun_state, m_priority_ram) // PRIORITY + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(lordgun_vram_0_w) AM_BASE_MEMBER(lordgun_state, m_vram[0]) // DISPLAY + AM_RANGE(0x310000, 0x313fff) AM_RAM_WRITE(lordgun_vram_1_w) AM_BASE_MEMBER(lordgun_state, m_vram[1]) // DISPLAY + AM_RANGE(0x314000, 0x314fff) AM_RAM_WRITE(lordgun_vram_2_w) AM_BASE_MEMBER(lordgun_state, m_vram[2]) // DISPLAY + AM_RANGE(0x315000, 0x317fff) AM_RAM // + AM_RANGE(0x318000, 0x319fff) AM_RAM_WRITE(lordgun_vram_3_w) AM_BASE_MEMBER(lordgun_state, m_vram[3]) // DISPLAY + AM_RANGE(0x31c000, 0x31c7ff) AM_RAM AM_BASE_MEMBER(lordgun_state, m_scrollram) // LINE + AM_RANGE(0x400000, 0x4007ff) AM_RAM AM_BASE_SIZE_MEMBER(lordgun_state, m_spriteram, m_spriteram_size) // ANIMATOR + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(lordgun_paletteram_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x502000, 0x502001) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[0]) + AM_RANGE(0x502200, 0x502201) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[1]) + AM_RANGE(0x502400, 0x502401) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[2]) + AM_RANGE(0x502600, 0x502601) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[3]) + AM_RANGE(0x502800, 0x502801) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[0]) + AM_RANGE(0x502a00, 0x502a01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[1]) + AM_RANGE(0x502c00, 0x502c01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[2]) + AM_RANGE(0x502e00, 0x502e01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[3]) + AM_RANGE(0x503000, 0x503001) AM_WRITE(lordgun_priority_w) + AM_RANGE(0x503800, 0x503801) AM_READ(lordgun_gun_0_x_r) + AM_RANGE(0x503a00, 0x503a01) AM_READ(lordgun_gun_1_x_r) + AM_RANGE(0x503c00, 0x503c01) AM_READ(lordgun_gun_0_y_r) + AM_RANGE(0x503e00, 0x503e01) AM_READ(lordgun_gun_1_y_r) + AM_RANGE(0x504000, 0x504001) AM_WRITE(lordgun_soundlatch_w) + AM_RANGE(0x506000, 0x506007) AM_DEVREADWRITE8("ppi8255_0", ppi8255_r, ppi8255_w, 0x00ff) + AM_RANGE(0x508000, 0x508007) AM_DEVREADWRITE8("ppi8255_1", ppi8255_r, ppi8255_w, 0x00ff) + AM_RANGE(0x50a900, 0x50a9ff) AM_RAM // protection +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( aliencha_map, AS_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x1fffff) AM_ROM + AM_RANGE(0x200000, 0x20ffff) AM_RAM + AM_RANGE(0x210000, 0x21ffff) AM_RAM AM_BASE_MEMBER(lordgun_state, m_priority_ram) // PRIORITY + AM_RANGE(0x300000, 0x30ffff) AM_RAM_WRITE(lordgun_vram_0_w) AM_BASE_MEMBER(lordgun_state, m_vram[0]) // BACKGROUND 1 + AM_RANGE(0x310000, 0x313fff) AM_RAM_WRITE(lordgun_vram_1_w) AM_BASE_MEMBER(lordgun_state, m_vram[1]) // BACKGROUND 2 + AM_RANGE(0x314000, 0x314fff) AM_RAM_WRITE(lordgun_vram_2_w) AM_BASE_MEMBER(lordgun_state, m_vram[2]) // BACKGROUND 3 + AM_RANGE(0x315000, 0x317fff) AM_RAM // + AM_RANGE(0x318000, 0x319fff) AM_RAM_WRITE(lordgun_vram_3_w) AM_BASE_MEMBER(lordgun_state, m_vram[3]) // TEXT + AM_RANGE(0x31c000, 0x31c7ff) AM_RAM AM_BASE_MEMBER(lordgun_state, m_scrollram) // LINE OFFSET + AM_RANGE(0x400000, 0x4007ff) AM_RAM AM_BASE_SIZE_MEMBER(lordgun_state, m_spriteram, m_spriteram_size) // ANIMATE + AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(lordgun_paletteram_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x502000, 0x502001) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[0]) + AM_RANGE(0x502200, 0x502201) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[1]) + AM_RANGE(0x502400, 0x502401) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[2]) + AM_RANGE(0x502600, 0x502601) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_x[3]) + AM_RANGE(0x502800, 0x502801) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[0]) + AM_RANGE(0x502a00, 0x502a01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[1]) + AM_RANGE(0x502c00, 0x502c01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[2]) + AM_RANGE(0x502e00, 0x502e01) AM_WRITEONLY AM_BASE_MEMBER(lordgun_state, m_scroll_y[3]) + AM_RANGE(0x503000, 0x503001) AM_WRITE(lordgun_priority_w) + AM_RANGE(0x504000, 0x504001) AM_WRITE(lordgun_soundlatch_w) + AM_RANGE(0x506000, 0x506007) AM_DEVREADWRITE8("ppi8255_0", ppi8255_r, ppi8255_w, 0x00ff) + AM_RANGE(0x508000, 0x508007) AM_DEVREADWRITE8("ppi8255_1", ppi8255_r, ppi8255_w, 0x00ff) + AM_RANGE(0x50b900, 0x50b9ff) AM_RAM // protection +ADDRESS_MAP_END + + +/*************************************************************************** + + Memory Maps - Sound + +***************************************************************************/ + +static ADDRESS_MAP_START( lordgun_soundmem_map, AS_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xefff) AM_ROM + AM_RANGE(0xf000, 0xffff) AM_RAM +ADDRESS_MAP_END + +static WRITE8_DEVICE_HANDLER( lordgun_okibank_w ) +{ + downcast<okim6295_device *>(device)->set_bank_base((data & 2) ? 0x40000 : 0); + if (data & ~3) logerror("%s: unknown okibank bits %02x\n", device->machine().describe_context(), data); +// popmessage("OKI %x", data); +} + +static ADDRESS_MAP_START( lordgun_soundio_map, AS_IO, 8 ) + AM_RANGE(0x1000, 0x1001) AM_DEVWRITE( "ymsnd", ym3812_w ) + AM_RANGE(0x2000, 0x2000) AM_DEVREADWRITE_MODERN("oki", okim6295_device, read, write) + AM_RANGE(0x3000, 0x3000) AM_READ( soundlatch2_r ) + AM_RANGE(0x4000, 0x4000) AM_READ( soundlatch_r ) + AM_RANGE(0x5000, 0x5000) AM_READNOP + AM_RANGE(0x6000, 0x6000) AM_DEVWRITE( "oki", lordgun_okibank_w ) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( aliencha_soundio_map, AS_IO, 8 ) + AM_RANGE(0x3000, 0x3000) AM_READ( soundlatch2_r ) + AM_RANGE(0x4000, 0x4000) AM_READ( soundlatch_r ) + AM_RANGE(0x5000, 0x5000) AM_WRITENOP // writes 03 then 07 at end of NMI + AM_RANGE(0x7000, 0x7000) AM_DEVREAD("ymf", ymf278b_r) + AM_RANGE(0x7000, 0x7005) AM_DEVWRITE("ymf", ymf278b_w) + AM_RANGE(0x7400, 0x7400) AM_DEVREADWRITE_MODERN("oki", okim6295_device, read, write) + AM_RANGE(0x7800, 0x7800) AM_DEVREADWRITE_MODERN("oki2", okim6295_device, read, write) +ADDRESS_MAP_END + + +/*************************************************************************** + + Graphics Layout + +***************************************************************************/ + +static const gfx_layout lordgun_8x8x6_layout = +{ + 8,8, + RGN_FRAC(1,3), + 6, + { RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0, + RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0, + RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0 }, + { STEP8(0,1) }, + { STEP8(0,8*2) }, + 8*8*2 +}; + +static const gfx_layout lordgun_16x16x6_layout = +{ + 16,16, + RGN_FRAC(1,3), + 6, + { RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0, + RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0, + RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0 }, + { STEP8(0,1),STEP8(8*16*2,1) }, + { STEP16(0,8*2) }, + 16*16*2 +}; + +static const gfx_layout lordgun_32x32x6_layout = +{ + 32,32, + RGN_FRAC(1,3), + 6, + { RGN_FRAC(2,3)+8, RGN_FRAC(2,3)+0, + RGN_FRAC(1,3)+8, RGN_FRAC(1,3)+0, + RGN_FRAC(0,3)+8, RGN_FRAC(0,3)+0 }, + { STEP8(0,1),STEP8(8*32*2,1),STEP8(8*32*2*2,1),STEP8(8*32*2*3,1) }, + { STEP16(0,8*2),STEP16(16*8*2,8*2) }, + 32*32*2 +}; + +static GFXDECODE_START( lordgun ) + GFXDECODE_ENTRY( "tiles0", 0, lordgun_8x8x6_layout, 0x000, 0x800/0x40*8 ) // [0] Tilemap 0 + GFXDECODE_ENTRY( "tiles1", 0, lordgun_16x16x6_layout, 0x000, 0x800/0x40*8 ) // [1] Tilemap 1 + GFXDECODE_ENTRY( "tiles1", 0, lordgun_32x32x6_layout, 0x000, 0x800/0x40*8 ) // [2] Tilemap 2 + GFXDECODE_ENTRY( "tiles0", 0, lordgun_8x8x6_layout, 0x000, 0x800/0x40*8 ) // [3] Tilemap 3 + GFXDECODE_ENTRY( "sprites", 0, lordgun_16x16x6_layout, 0x000, 0x800/0x40*8 ) // [4] Sprites +GFXDECODE_END + + +/*************************************************************************** + + Input Ports + +***************************************************************************/ + +static INPUT_PORTS_START( lordgun ) + PORT_START("DIP") + PORT_DIPNAME( 0x01, 0x01, "Stage Select" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Guns" ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x02, "IGS" ) // x table offset = 0x25 + PORT_DIPSETTING( 0x00, "Konami" ) // "" = 0x2c + PORT_DIPNAME( 0x04, 0x04, "Ranking Music" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x04, "Exciting" ) + PORT_DIPSETTING( 0x00, "Tender" ) + PORT_DIPNAME( 0x08, 0x08, "Coin Slots" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x08, "2" ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_SERVICE_NO_TOGGLE( 0x40, IP_ACTIVE_LOW ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit) + + PORT_START("START1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE2 ) // game cheat: skip stage + + PORT_START("START2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("LIGHT0_X") + PORT_BIT( 0x1ff, 0x100, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(0x3c,0x1d8) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("LIGHT1_X") + PORT_BIT( 0x1ff, 0x100, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_MINMAX(0x3c,0x1d8) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2) + + PORT_START("LIGHT0_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(0,224) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(1) + + PORT_START("LIGHT1_Y") + PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(0,224) PORT_SENSITIVITY(35) PORT_KEYDELTA(10) PORT_PLAYER(2) +INPUT_PORTS_END + + +static INPUT_PORTS_START( aliencha ) + PORT_START("DIP1") + PORT_DIPNAME( 0x01, 0x01, "Credits To Start" ) PORT_DIPLOCATION("SW1:1") + PORT_DIPSETTING( 0x01, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:2,3,4") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x0e, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0a, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x70, 0x70, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:5,6,7") + PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x60, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x50, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) ) + PORT_DIPNAME( 0x80, 0x80, "Coin Slots" ) PORT_DIPLOCATION("SW1:8") + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + + PORT_START("DIP2") + PORT_DIPNAME( 0x03, 0x02, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") + PORT_DIPSETTING( 0x03, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" ) + PORT_DIPNAME( 0x08, 0x08, "Round Time" ) PORT_DIPLOCATION("SW2:4") + PORT_DIPSETTING( 0x00, "32 s" ) // 40 s (measured) AKA "Short" + PORT_DIPSETTING( 0x08, "40 s" ) // 50 s (measured) AKA "Normal" + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:5") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Allow Join" ) PORT_DIPLOCATION("SW2:7") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:8") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) + + PORT_START("DIP3") + PORT_DIPNAME( 0x03, 0x03, "Buttons" ) PORT_DIPLOCATION("SW3:1,2") + PORT_DIPSETTING( 0x01, "3" ) + PORT_DIPSETTING( 0x02, "4" ) + PORT_DIPSETTING( 0x03, "6" ) +// PORT_DIPSETTING( 0x00, "6" ) + PORT_DIPNAME( 0x04, 0x04, "Vs. Rounds" ) PORT_DIPLOCATION("SW3:3") + PORT_DIPSETTING( 0x00, "3" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPUNUSED_DIPLOC( 0x0008, 0x0008, "SW3:4" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0010, 0x0010, "SW3:5" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0020, 0x0020, "SW3:6" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0040, 0x0040, "SW3:7" ) /* Listed as "Unused" */ + PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "SW3:8" ) /* Listed as "Unused" */ + + PORT_START("SERVICE") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_device, read_bit) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("P1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) + + PORT_START("P2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + + PORT_START("COIN") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(2) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(2) +INPUT_PORTS_END + + +/*************************************************************************** + + Machine Drivers + +***************************************************************************/ + +static const ppi8255_interface lordgun_ppi8255_intf[2] = +{ + { + DEVCB_INPUT_PORT("DIP"), // Port A read + DEVCB_NULL, // Port B read + DEVCB_INPUT_PORT("SERVICE"), // Port C read + DEVCB_HANDLER(fake_w), // Port A write + DEVCB_HANDLER(lordgun_eeprom_w),// Port B write + DEVCB_HANDLER(fake2_w) // Port C write + }, + { + DEVCB_INPUT_PORT("START1"), // Port A read + DEVCB_INPUT_PORT("START2"), // Port B read + DEVCB_INPUT_PORT("COIN"), // Port C read + DEVCB_HANDLER(fake_w), // Port A write + DEVCB_HANDLER(fake_w), // Port B write + DEVCB_HANDLER(fake_w) // Port C write + } +}; + + +static const ppi8255_interface aliencha_ppi8255_intf[2] = +{ + { + DEVCB_HANDLER(aliencha_dip_r), // Port A read + DEVCB_NULL, // Port B read + DEVCB_INPUT_PORT("SERVICE"), // Port C read + DEVCB_HANDLER(fake2_w), // Port A write + DEVCB_HANDLER(aliencha_eeprom_w), // Port B write + DEVCB_HANDLER(aliencha_dip_w) // Port C write + }, + { + DEVCB_INPUT_PORT("P1"), // Port A read + DEVCB_INPUT_PORT("P2"), // Port B read + DEVCB_INPUT_PORT("COIN"), // Port C read + DEVCB_HANDLER(fake_w), // Port A write + DEVCB_HANDLER(fake_w), // Port B write + DEVCB_HANDLER(fake_w) // Port C write + } +}; + +static void soundirq(device_t *device, int state) +{ + cputag_set_input_line(device->machine(), "soundcpu", INPUT_LINE_IRQ0, state); +} + +static const ym3812_interface lordgun_ym3812_interface = +{ + soundirq +}; + +static MACHINE_CONFIG_START( lordgun, lordgun_state ) + MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz / 2) + MCFG_CPU_PROGRAM_MAP(lordgun_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) + + MCFG_CPU_ADD("soundcpu", Z80, XTAL_20MHz / 4) + MCFG_CPU_PROGRAM_MAP(lordgun_soundmem_map) + MCFG_CPU_IO_MAP(lordgun_soundio_map) + + MCFG_PPI8255_ADD( "ppi8255_0", lordgun_ppi8255_intf[0] ) + MCFG_PPI8255_ADD( "ppi8255_1", lordgun_ppi8255_intf[1] ) + + MCFG_EEPROM_93C46_ADD("eeprom") + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(0x200, 0x100) + MCFG_SCREEN_VISIBLE_AREA(0,0x1c0-1, 0,0xe0-1) + MCFG_SCREEN_UPDATE(lordgun) + + MCFG_GFXDECODE(lordgun) + MCFG_PALETTE_LENGTH(0x800 * 8) // 0x800 real colors, repeated per priority level + + MCFG_VIDEO_START(lordgun) + + // sound hardware + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_3_579545MHz) + MCFG_SOUND_CONFIG(lordgun_ym3812_interface) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki", XTAL_20MHz / 20, OKIM6295_PIN7_HIGH) // ? 5MHz can't be right! + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + +static const ymf278b_interface ymf278b_config = +{ + soundirq +}; + +static MACHINE_CONFIG_START( aliencha, lordgun_state ) + MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz / 2) + MCFG_CPU_PROGRAM_MAP(aliencha_map) + MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) + + MCFG_CPU_ADD("soundcpu", Z80, XTAL_20MHz / 4) + MCFG_CPU_PROGRAM_MAP(lordgun_soundmem_map) + MCFG_CPU_IO_MAP(aliencha_soundio_map) + + MCFG_PPI8255_ADD( "ppi8255_0", aliencha_ppi8255_intf[0] ) + MCFG_PPI8255_ADD( "ppi8255_1", aliencha_ppi8255_intf[1] ) + + MCFG_EEPROM_93C46_ADD("eeprom") + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MCFG_SCREEN_SIZE(0x200, 0x100) + MCFG_SCREEN_VISIBLE_AREA(0,0x1c0-1, 0,0xe0-1) + MCFG_SCREEN_UPDATE(lordgun) + + MCFG_GFXDECODE(lordgun) + MCFG_PALETTE_LENGTH(0x800 * 8) // 0x800 real colors, repeated per priority level + + MCFG_VIDEO_START(lordgun) + + // sound hardware + MCFG_SPEAKER_STANDARD_MONO("mono") + + MCFG_SOUND_ADD("ymf", YMF278B, 26000000) // ? 26MHz matches video (decrease for faster music tempo) + MCFG_SOUND_CONFIG(ymf278b_config) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) + + MCFG_OKIM6295_ADD("oki", XTAL_20MHz / 20, OKIM6295_PIN7_HIGH) // ? 5MHz can't be right + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MCFG_OKIM6295_ADD("oki2", XTAL_20MHz / 20, OKIM6295_PIN7_HIGH) // ? 5MHz can't be right + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_CONFIG_END + + +/*************************************************************************** + + ROMs Loading + +***************************************************************************/ + +/*************************************************************************** + +Lord of Gun +IGS, 1994 + +PCB Layout +---------- + +IGSPCB NO. T0076 +-------------------------------------------------------- +| YM3014 62256 IGS008 IGS006 IGST003 | +| YM3812 6295 62256 IGST002 | +| 3.57945MHz 62256 IGST001 | +| 62256 | +|6116 LORDGUN.100 IGSB003 | +| Z80 62256 IGSB002 | +|LORDGUN.90 IGSB001 | +|J PAL 6116 | +|A PAL 6116 6116 | +|M IGS003 6116 | +|M 68000P10 PAL 6116 | +|A PAL PAL 6116 | +| PAL 6116 | +| PAL 6116 IGS007 | +| PAL 6116 20MHz | +| DSW1(4) 6116 PAL | +| 62256 62256 IGSA001 IGSA004 | +| 8255 LORDGUN.10 IGSA002 IGSA005 | +|93C46 8255 LORDGUN.4 IGSA003 IGSA006 | +-------------------------------------------------------- + +HW Notes: + 68k clock: 10.000MHz + Z80 clock: 5.000MHz + VSync: 60Hz + HSync: 15.15kHz + YM3812 clock: 3.57945MHz + OKI 6295 clock: 5.000MHz + OKI 6295 pin7: HI + + All frequencies are checked with my frequency counter (i.e. they are not guessed) + + IGST* are 8M devices + IGSA* and IGSB* are 16M devices + LORDGUN.90 is 27C512 + LORDGUN.100 \ + LORDGUN.10 | 27C040 + LORDGUN.4 / + +----- + +Lord of Gun (c) 1994 IGS + +PCB: IGSPCB NO.T0076 + + Main: MC68000P10 10MHz + Sub: Zilog Z0840006PCS (Z80 6MHz) + Sound: OKI M6295, Yamaha YM3812-F + Y3014B-F + OSC: 20.000 MHz, Unmarked OSC for sound chips +EEPROM: NMC 9346N + +1 Push Button - Test/Setup Mode + +Custom chips: +IGS 005 (144 Pin PQFP) +IGS 006 (144 Pin PQFP) +IGS 007 (144 Pin PQFP) +IGS 008 (160 Pin PQFP) + +lg_u122.m3 - Labelled as "LORD GUN U122-M3" MX 27C4000 +lg_u144.m3 - Labelled as "LORD GUN U144-M3" MX 27C4000 + +lordgun.u90 - Labelled as "LORD GUN U90" 27C512 +lordgunu.100 - Labelled as "LORD GUN U100" MX 27C4000 + +Surface mounted ROMs (42 pin DIP) + +2 Unmarked ROM(?) chips + +IGS A001 +IGS A002 +IGS A003 +IGS A004 +IGS A005 +IGS A006 + +IGS B001 +IGS B002 +IGS B003 + +IGS T001 +IGS T002 +IGS T003 + +DIP Switch-1 (4 Position DIP) +-------------------------------------------------- + DipSwitch Title | Function | 1 | 2 | 3 | 4 | +-------------------------------------------------- + Game Mode | Arcade |off| | + | Street |on | | +-------------------------------------------------- + Selection | IGS | |off| | + of Guns | Konami | |on | | +-------------------------------------------------- + Ranking | Exciting | |off| | + Background | Tender | |on | | +-------------------------------------------------- + Coin Slots | Separate | |off| + | Common | |on | +-------------------------------------------------- + Settings Upon Shipping |off|off|off|off| +-------------------------------------------------- + +Game modes explained: + In "Arcade Mode" players could play this game by entering each scene in a + pre-defined order. + In "Street Mode" this game now presents 10 selectable scenes for players, + not 4 any more. After all scenes are passed (except training courses), + players can enter the last scene; the Headquarters + + Lord of Gun JAMMA Pinout + + Main Jamma Connector + Solder Side | Parts Side +------------------------------------------------------------------ + GND | A | 1 | GND + GND | B | 2 | GND + +5 | C | 3 | +5 + +5 | D | 4 | +5 + | E | 5 | + +12 | F | 6 | +12 +------------ KEY ------------| H | 7 |------------ KEY ----------- + | J | 8 | Coin Counter + | K | 9 | + Speaker (-) | L | 10| Speaker (+) + | M | 11| + Video Green | N | 12| Video Red + Video Sync | P | 13| Video Blue + | R | 14| Video GND + | S | 15| Test Switch + Coin Switch 2 | T | 16| Coin Switch 1 + Start Player 2 | U | 17| Start Player 1 + | V | 18| + | W | 19| + | X | 20| + | Y | 21| + | Z | 22| + | a | 23| + | b | 24| + | c | 25| + | d | 26| + GND | e | 27| GND + GND | f | 28| GND + + +NOTE: Speakers should be connected serially to Speaker (+) and Speaker (-). + You must avoid connecting speakers parallelly or connecting speakers + to Speaker (+) and GND, to keep the amplifier from being damaged or + from malfunctioning. + + JP1: Player 1 Gun Connector Pinout + + 1| +5 Volts - RED Wire (Manual says "VCC") + 2| Trigger - White Wire + 3| Ground - Black Wire + 4| Gun OPTO - Blue Wire (Manual says "HIT") + + JP2: Player 2 Gun Connector Pinout + + 1| +5 Volts - RED Wire (Manual says "VCC") + 2| Trigger - White Wire + 3| Ground - Black Wire + 4| Gun OPTO - Blue Wire (Manual says "HIT") + +***************************************************************************/ + +ROM_START( lordgun ) + ROM_REGION( 0x100000, "maincpu", 0 ) // 68000 + ROM_LOAD16_BYTE( "lordgun.10", 0x00000, 0x80000, CRC(acda77ef) SHA1(7cd8580419e2f62a3b5a1e4a6020a3ef978ff1e8) ) + ROM_LOAD16_BYTE( "lordgun.4", 0x00001, 0x80000, CRC(a1a61254) SHA1(b0c5aa656024cfb9be28a11061656159e7b72d00) ) + + ROM_REGION( 0x010000, "soundcpu", 0 ) // Z80 + ROM_LOAD( "lordgun.90", 0x00000, 0x10000, CRC(d59b5e28) SHA1(36696058684d69306f463ed543c8b0195bafa21e) ) // 1xxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x300000, "tiles0", 0 ) // Tilemaps 0 & 3 + ROM_LOAD( "igst001.108", 0x000000, 0x100000, CRC(36dd96f3) SHA1(4e70eb807160e7ed1b19d7f38df3a38021f42d9b) ) + ROM_LOAD( "igst002.114", 0x100000, 0x100000, CRC(816a7665) SHA1(f2f2624ab262c957f84c657cfc432d14c61b19e8) ) + ROM_LOAD( "igst003.119", 0x200000, 0x100000, CRC(cbfee543) SHA1(6fad8ef8d683f709f6ff2b16319447516c372fc8) ) + + ROM_REGION( 0x600000, "tiles1", 0 ) // Tilemaps 1 & 2 + ROM_LOAD( "igsb001.82", 0x000000, 0x200000, CRC(3096de1c) SHA1(d010990d21cfda9cb8ab5b4bc0e329c23b7719f5) ) + ROM_LOAD( "igsb002.91", 0x200000, 0x200000, CRC(2234531e) SHA1(58a82e31a1c0c1a4dd026576319f4e7ecffd140e) ) + ROM_LOAD( "igsb003.97", 0x400000, 0x200000, CRC(6cbf21ac) SHA1(ad25090a00f291aa48929ffa01347cc53e0051f8) ) + + ROM_REGION( 0xc00000, "sprites", 0 ) // Sprites + ROM_LOAD( "igsa001.14", 0x000000, 0x200000, CRC(400abe33) SHA1(20de1eb626424ea41bd55eb3cecd6b50be744ee0) ) + ROM_LOAD( "igsa004.13", 0x200000, 0x200000, CRC(52687264) SHA1(28444cf6b5662054e283992857e0827a2ca15b83) ) + ROM_LOAD( "igsa002.9", 0x400000, 0x200000, CRC(a4810e38) SHA1(c31fe641feab2c93795fc35bf71d4f37af1056d4) ) + ROM_LOAD( "igsa005.8", 0x600000, 0x200000, CRC(e32e79e3) SHA1(419f9b501e5a37d763ece9322271e61035b50217) ) + ROM_LOAD( "igsa003.3", 0x800000, 0x200000, CRC(649e48d9) SHA1(ce346154024cf13f3e40000ceeb4c2003cd35894) ) + ROM_LOAD( "igsa006.2", 0xa00000, 0x200000, CRC(39288eb6) SHA1(54d157f0e151f6665f4288b4d09bd65571005132) ) + + ROM_REGION( 0x080000, "oki", 0 ) // Samples + ROM_LOAD( "lordgun.100", 0x00000, 0x80000, CRC(b4e0fa07) SHA1(f5f33fe3f3a124f4737751fda3ea409fceeec0be) ) +ROM_END + + +/*************************************************************************** + + Alien Challenge (World) + (C) 1994 IGS + 01/16/95 21:51:28 in test mode + +***************************************************************************/ + +ROM_START( aliencha ) + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 + ROM_LOAD( "igsc0102.u81", 0x00000, 0x200000, CRC(e3432be3) SHA1(d3597c885571d4a996afaaf29c78da123798371e) ) + + ROM_REGION( 0x010000, "soundcpu", 0 ) // Z80 + ROM_LOAD( "hfh_s.u86", 0x00000, 0x10000, CRC(5728a9ed) SHA1(e5a9e4a1a2cc6c848b08608bc8727bc739270873) ) + + ROM_REGION( 0x300000, "tiles0", 0 ) // Tilemaps 0 & 3 + ROM_LOAD( "igst0101.u9", 0x000000, 0x100000, CRC(2ce12d7b) SHA1(aa93a82e5f4015c46bb705efb2051b62cd5d7e04) ) + ROM_LOAD( "igst0102.u10", 0x100000, 0x100000, CRC(542a76a0) SHA1(6947b50a024d0053c1eaf9da8c90652bab875142) ) + ROM_LOAD( "igst0103.u11", 0x200000, 0x100000, CRC(adf5698a) SHA1(4b798f8acc5d7581c7e0989260863ae0ca654acd) ) + + ROM_REGION( 0x600000, "tiles1", 0 ) // Tilemaps 1 & 2 + ROM_LOAD( "igsb0101.u8", 0x000000, 0x200000, CRC(5c995f7e) SHA1(4f08cf13e313c6802c924b914c73cab4b450da61) ) + ROM_LOAD( "igsb0102.u7", 0x200000, 0x200000, CRC(a2ae9baf) SHA1(338ee260c33448568f138ca00e1d4edda4da018f) ) + ROM_LOAD( "igsb0103.u6", 0x400000, 0x200000, CRC(11b927af) SHA1(2f15e5cea1b86cde3b679bdd0f3d79672d0ddd3e) ) + + ROM_REGION( 0xc00000, "sprites", 0 ) // Sprites + ROM_LOAD( "igsa0101.u3", 0x000000, 0x400000, CRC(374d07c4) SHA1(87e9bfe32cbfe9964ba7253847fbd14aa3c8ed20) ) + ROM_LOAD( "igsa0102.u2", 0x400000, 0x400000, CRC(dbeee7ac) SHA1(e0eb0d73d9230aa6f69f5ac25d44fa19affebe88) ) + ROM_LOAD( "igsa0103.u1", 0x800000, 0x400000, CRC(e5f19041) SHA1(c92a29bbbcb9a1f63364c665e3e0f9679add4389) ) + + ROM_REGION( 0x40000, "oki", 0 ) // Samples + ROM_LOAD( "hfh_g.u65", 0x00000, 0x40000, CRC(ec469b57) SHA1(ba1668078987ad51f47bcd3e61c51a0cf2545350) ) + + ROM_REGION( 0x40000, "oki2", 0 ) // Samples + ROM_LOAD( "hfh_g.u66", 0x00000, 0x40000, CRC(7cfcd98e) SHA1(3b03123160adfd3404a9e0c4c68420930e80ae48) ) + + ROM_REGION( 0x200000, "ymf", 0 ) // Samples (Standard Yamaha YRW801 2MB samples ROM) + ROM_LOAD( "yrw801-m", 0x000000, 0x200000, CRC(2a9d8d43) SHA1(32760893ce06dbe3930627755ba065cc3d8ec6ca) ) /* Not dumped from PCB, but is a standard samples rom */ +ROM_END + +/*************************************************************************** + + Alien Challenge (China) + (C) 1994 IGS + 12/13/94 13:55:47 in test mode + +***************************************************************************/ + +ROM_START( alienchac ) + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 + // load the world version code in the top half, or it does not work. Are these program roms half size? + ROM_LOAD( "igsc0102.u81", 0x00000, 0x200000, BAD_DUMP CRC(e3432be3) SHA1(d3597c885571d4a996afaaf29c78da123798371e) ) + ROM_LOAD16_BYTE( "hfh_p.u80", 0x00000, 0x080000, BAD_DUMP CRC(5175ebdc) SHA1(4a0bdda0f8291f895f888bfd45328b2b124b9051) ) + ROM_LOAD16_BYTE( "hfh_p.u79", 0x00001, 0x080000, BAD_DUMP CRC(42ad978c) SHA1(eccb96e7170902b37989c8f207e1a821f29b2475) ) + + ROM_REGION( 0x010000, "soundcpu", 0 ) // Z80 + ROM_LOAD( "hfh_s.u86", 0x00000, 0x10000, CRC(5728a9ed) SHA1(e5a9e4a1a2cc6c848b08608bc8727bc739270873) ) + + ROM_REGION( 0x300000, "tiles0", 0 ) // Tilemaps 0 & 3 + ROM_LOAD( "igst0101.u9", 0x000000, 0x100000, BAD_DUMP CRC(2ce12d7b) SHA1(aa93a82e5f4015c46bb705efb2051b62cd5d7e04) ) /* Graphics ROMs not confirmed to be the same */ + ROM_LOAD( "igst0102.u10", 0x100000, 0x100000, BAD_DUMP CRC(542a76a0) SHA1(6947b50a024d0053c1eaf9da8c90652bab875142) ) /* Use these until roms are dumped / verified */ + ROM_LOAD( "igst0103.u11", 0x200000, 0x100000, BAD_DUMP CRC(adf5698a) SHA1(4b798f8acc5d7581c7e0989260863ae0ca654acd) ) + + ROM_REGION( 0x600000, "tiles1", 0 ) // Tilemaps 1 & 2 + ROM_LOAD( "igsb0101.u8", 0x000000, 0x200000, BAD_DUMP CRC(5c995f7e) SHA1(4f08cf13e313c6802c924b914c73cab4b450da61) ) /* Graphics ROMs not confirmed to be the same */ + ROM_LOAD( "igsb0102.u7", 0x200000, 0x200000, BAD_DUMP CRC(a2ae9baf) SHA1(338ee260c33448568f138ca00e1d4edda4da018f) ) /* Use these until roms are dumped / verified */ + ROM_LOAD( "igsb0103.u6", 0x400000, 0x200000, BAD_DUMP CRC(11b927af) SHA1(2f15e5cea1b86cde3b679bdd0f3d79672d0ddd3e) ) + + ROM_REGION( 0xc00000, "sprites", 0 ) // Sprites + ROM_LOAD( "igsa0101.u3", 0x000000, 0x400000, BAD_DUMP CRC(374d07c4) SHA1(87e9bfe32cbfe9964ba7253847fbd14aa3c8ed20) ) /* Graphics ROMs not confirmed to be the same */ + ROM_LOAD( "igsa0102.u2", 0x400000, 0x400000, BAD_DUMP CRC(dbeee7ac) SHA1(e0eb0d73d9230aa6f69f5ac25d44fa19affebe88) ) /* Use these until roms are dumped / verified */ + ROM_LOAD( "igsa0103.u1", 0x800000, 0x400000, BAD_DUMP CRC(e5f19041) SHA1(c92a29bbbcb9a1f63364c665e3e0f9679add4389) ) + + ROM_REGION( 0x40000, "oki", 0 ) // Samples + ROM_LOAD( "hfh_g.u65", 0x00000, 0x40000, CRC(ec469b57) SHA1(ba1668078987ad51f47bcd3e61c51a0cf2545350) ) + + ROM_REGION( 0x40000, "oki2", 0 ) // Samples + ROM_LOAD( "hfh_g.u66", 0x00000, 0x40000, CRC(7cfcd98e) SHA1(3b03123160adfd3404a9e0c4c68420930e80ae48) ) + + ROM_REGION( 0x200000, "ymf", 0 ) // Samples (Standard Yamaha YRW801 2MB samples ROM) + ROM_LOAD( "yrw801-m", 0x000000, 0x200000, CRC(2a9d8d43) SHA1(32760893ce06dbe3930627755ba065cc3d8ec6ca) ) /* Not dumped from PCB, but is a standard samples rom */ +ROM_END + + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +GAME( 1994, lordgun, 0, lordgun, lordgun, lordgun, ROT0, "IGS", "Lord of Gun (USA)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS ) +GAME( 1994, aliencha, 0, aliencha, aliencha, aliencha, ROT0, "IGS", "Alien Challenge (World)", GAME_UNEMULATED_PROTECTION ) +GAME( 1994, alienchac, aliencha, aliencha, aliencha, alienchac, ROT0, "IGS", "Alien Challenge (China)", GAME_UNEMULATED_PROTECTION ) |