diff options
Diffstat (limited to 'src/mame/drivers/lordgun.cpp')
-rw-r--r-- | src/mame/drivers/lordgun.cpp | 1089 |
1 files changed, 0 insertions, 1089 deletions
diff --git a/src/mame/drivers/lordgun.cpp b/src/mame/drivers/lordgun.cpp deleted file mode 100644 index b565385ae0b..00000000000 --- a/src/mame/drivers/lordgun.cpp +++ /dev/null @@ -1,1089 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia -/************************************************************************************************************* - - -= 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: - -- 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 "includes/lordgun.h" - -#include "cpu/m68000/m68000.h" -#include "cpu/z80/z80.h" -#include "machine/i8255.h" -#include "sound/ym3812.h" -#include "sound/ymf278b.h" -#include "speaker.h" - - -/*************************************************************************** - - Memory Maps - Main - -***************************************************************************/ - -void lordgun_state::lordgun_protection_w(offs_t offset, uint16_t data) -{ - switch (offset & 0x60) - { - case 0x00/2: // increment counter - { - m_protection_data++; - m_protection_data &= 0x1f; - - return; - } - - case 0xc0/2: // reset protection device - { - m_protection_data = 0; - - return; - } - } -} - -uint16_t lordgun_state::lordgun_protection_r(offs_t offset) -{ - switch (offset & 0x60) - { - case 0x40/2: // bitswap and xor counter - { - uint8_t x = m_protection_data; - - m_protection_data = ((( x >> 0) | ( x >> 1)) & 1) << 4; - m_protection_data |= ((~x >> 2) & 1) << 3; - m_protection_data |= (((~x >> 4) | ( x >> 0)) & 1) << 2; - m_protection_data |= (( x >> 3) & 1) << 1; - m_protection_data |= (((~x >> 0) | ( x >> 2)) & 1) << 0; - - return 0; - } - - case 0x80/2: // return value if conditions are met - { - if ((m_protection_data & 0x11) == 0x01) return 0x10; - if ((m_protection_data & 0x06) == 0x02) return 0x10; - if ((m_protection_data & 0x09) == 0x08) return 0x10; - - return 0; - } - } - - return 0; -} - -void lordgun_state::aliencha_protection_w(offs_t offset, uint16_t data) -{ - switch (offset & 0x60) - { - case 0xc0/2: // reset protection device - { - m_protection_data = 0; - - return; - } - } -} - -uint16_t lordgun_state::aliencha_protection_r(offs_t offset) -{ - switch (offset & 0x60) - { - case 0x00/2: // de-increment counter - { - m_protection_data--; - m_protection_data &= 0x1f; - - return 0; - } - - case 0x40/2: // bitswap and xor counter - { - uint8_t x = m_protection_data; - - m_protection_data = (((x >> 3) ^ (x >> 2)) & 1) << 4; - m_protection_data |= (((x >> 2) ^ (x >> 1)) & 1) << 3; - m_protection_data |= (((x >> 1) ^ (x >> 0)) & 1) << 2; - m_protection_data |= (((x >> 4) ^ (x >> 0)) & 1) << 1; - m_protection_data |= (((x >> 4) ^ (x >> 3)) & 1) << 0; - - return 0; - } - - case 0x80/2: // return value if conditions are met - { - if ((m_protection_data & 0x11) == 0x00) return 0x20; - if ((m_protection_data & 0x06) != 0x06) return 0x20; - if ((m_protection_data & 0x18) == 0x00) return 0x20; - - return 0; - } - } - - return 0; -} - -void lordgun_state::fake_w(uint8_t data) -{ -// popmessage("%02x",data); -} - -void lordgun_state::fake2_w(uint8_t data) -{ -// popmessage("%02x",data); -} - -void lordgun_state::lordgun_eeprom_w(uint8_t data) -{ - int i; - - if (data & 2) - { -// popmessage("EE: %02x", data); - logerror("%s: Unknown EEPROM bit written %02X\n",machine().describe_context(),data); - } - - machine().bookkeeping().coin_counter_w(0, data & 0x01); - - // Update light guns positions - for (i = 0; i < 2; i++) - if ( (data & (0x04 << i)) && !(m_old & (0x04 << i)) ) - lordgun_update_gun(i); - - // latch the bit - m_eeprom->di_write(BIT(data, 6)); - - // reset line asserted: reset. - m_eeprom->cs_write((data & 0x10) ? ASSERT_LINE : CLEAR_LINE ); - - // clock line asserted: write latch or select next bit to read - m_eeprom->clk_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE ); - - m_whitescreen = data & 0x80; - - m_old = data; -} - -void lordgun_state::aliencha_eeprom_w(uint8_t data) -{ - if (~data & 7) - { -// popmessage("EE: %02x", data); - logerror("%s: Unknown EEPROM bit written %02X\n",machine().describe_context(),data); - } - - // bit 1? cleared during screen transitions - m_whitescreen = !(data & 0x02); - - machine().bookkeeping().coin_counter_w(0, data & 0x08); - machine().bookkeeping().coin_counter_w(1, data & 0x10); - - // latch the bit - m_eeprom->di_write(BIT(data, 7)); - - // reset line asserted: reset. - m_eeprom->cs_write((data & 0x20) ? ASSERT_LINE : CLEAR_LINE ); - - // clock line asserted: write latch or select next bit to read - m_eeprom->clk_write((data & 0x40) ? ASSERT_LINE : CLEAR_LINE ); -} - - -uint8_t lordgun_state::aliencha_dip_r() -{ - switch (m_aliencha_dip_sel & 0x70) - { - case 0x30: return ioport("DIP1")->read(); - case 0x60: return ioport("DIP2")->read(); - case 0x50: return ioport("DIP3")->read(); - - default: - logerror("%s: dip_r with unknown dip_sel = %02X\n",machine().describe_context(),m_aliencha_dip_sel); - return 0xff; - } -} - -void lordgun_state::aliencha_dip_w(uint8_t data) -{ - m_aliencha_dip_sel = data; -} - -// Unknown, always equal to 7 in lordgun, aliencha. -void lordgun_state::priority_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_priority); -} - - -uint16_t lordgun_state::lordgun_gun_0_x_r() -{ - return m_gun[0].hw_x; -} - -uint16_t lordgun_state::lordgun_gun_0_y_r() -{ - return m_gun[0].hw_y; -} - -uint16_t lordgun_state::lordgun_gun_1_x_r() -{ - return m_gun[1].hw_x; -} - -uint16_t lordgun_state::lordgun_gun_1_y_r() -{ - return m_gun[1].hw_y; -} - -void lordgun_state::soundlatch_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - if (ACCESSING_BITS_0_7) m_soundlatch->write((data >> 0) & 0xff); - if (ACCESSING_BITS_8_15) m_soundlatch2->write((data >> 8) & 0xff); - - m_soundcpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - -template<int Layer> -void lordgun_state::vram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_vram[Layer][offset]); - m_tilemap[Layer]->mark_tile_dirty(offset/2); -} - -void lordgun_state::common_map(address_map &map) -{ - map(0x200000, 0x20ffff).ram(); - map(0x210000, 0x21ffff).ram().share("priority_ram"); // PRIORITY - map(0x300000, 0x30ffff).ram().w(FUNC(lordgun_state::vram_w<0>)).share("vram.0"); // DISPLAY (BACKGROUND 1 for aliencha) - map(0x310000, 0x313fff).ram().w(FUNC(lordgun_state::vram_w<1>)).share("vram.1"); // DISPLAY (BACKGROUND 2 for aliencha) - map(0x314000, 0x314fff).ram().w(FUNC(lordgun_state::vram_w<2>)).share("vram.2"); // DISPLAY (BACKGROUND 3 for aliencha) - map(0x315000, 0x317fff).ram(); // - map(0x318000, 0x319fff).ram().w(FUNC(lordgun_state::vram_w<3>)).share("vram.3"); // DISPLAY (TEXT for aliencha) - map(0x31c000, 0x31c7ff).ram().share("scrollram"); // LINE (LINE OFFSET for aliencha) - map(0x400000, 0x4007ff).ram().share("spriteram"); // ANIMATOR (ANIMATE for aliencha) - map(0x500000, 0x500fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); - map(0x502000, 0x502001).writeonly().share("scroll_x.0"); - map(0x502200, 0x502201).writeonly().share("scroll_x.1"); - map(0x502400, 0x502401).writeonly().share("scroll_x.2"); - map(0x502600, 0x502601).writeonly().share("scroll_x.3"); - map(0x502800, 0x502801).writeonly().share("scroll_y.0"); - map(0x502a00, 0x502a01).writeonly().share("scroll_y.1"); - map(0x502c00, 0x502c01).writeonly().share("scroll_y.2"); - map(0x502e00, 0x502e01).writeonly().share("scroll_y.3"); - map(0x503000, 0x503001).w(FUNC(lordgun_state::priority_w)); - map(0x504000, 0x504001).w(FUNC(lordgun_state::soundlatch_w)); - map(0x506000, 0x506007).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); - map(0x508000, 0x508007).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)).umask16(0x00ff); -} - -void lordgun_state::lordgun_map(address_map &map) -{ - common_map(map); - map(0x000000, 0x0fffff).rom(); - map(0x503800, 0x503801).r(FUNC(lordgun_state::lordgun_gun_0_x_r)); - map(0x503a00, 0x503a01).r(FUNC(lordgun_state::lordgun_gun_1_x_r)); - map(0x503c00, 0x503c01).r(FUNC(lordgun_state::lordgun_gun_0_y_r)); - map(0x503e00, 0x503e01).r(FUNC(lordgun_state::lordgun_gun_1_y_r)); - map(0x50a900, 0x50a9ff).rw(FUNC(lordgun_state::lordgun_protection_r), FUNC(lordgun_state::lordgun_protection_w)); -} - - -void lordgun_state::aliencha_map(address_map &map) -{ - common_map(map); - map(0x000000, 0x1fffff).rom(); - map(0x50b900, 0x50b9ff).rw(FUNC(lordgun_state::aliencha_protection_r), FUNC(lordgun_state::aliencha_protection_w)); -} - -void lordgun_state::ymf278_map(address_map &map) -{ - map(0x000000, 0x1fffff).rom(); -} - -/*************************************************************************** - - Memory Maps - Sound - -***************************************************************************/ - -void lordgun_state::soundmem_map(address_map &map) -{ - map(0x0000, 0xefff).rom(); - map(0xf000, 0xffff).ram(); -} - -void lordgun_state::lordgun_okibank_w(uint8_t data) -{ - m_oki->set_rom_bank((data >> 1) & 1); - if (data & ~3) logerror("%s: unknown okibank bits %02x\n", machine().describe_context(), data); -// popmessage("OKI %x", data); -} - -void lordgun_state::lordgun_soundio_map(address_map &map) -{ - map(0x1000, 0x1001).w("ymsnd", FUNC(ym3812_device::write)); - map(0x2000, 0x2000).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x3000, 0x3000).r(m_soundlatch2, FUNC(generic_latch_8_device::read)); - map(0x4000, 0x4000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x5000, 0x5000).nopr(); - map(0x6000, 0x6000).w(FUNC(lordgun_state::lordgun_okibank_w)); -} - - -void lordgun_state::aliencha_soundio_map(address_map &map) -{ - map(0x3000, 0x3000).r(m_soundlatch2, FUNC(generic_latch_8_device::read)); - map(0x4000, 0x4000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); - map(0x5000, 0x5000).nopw(); // writes 03 then 07 at end of NMI - map(0x7000, 0x7000).r("ymf", FUNC(ymf278b_device::read)); - map(0x7000, 0x7005).w("ymf", FUNC(ymf278b_device::write)); - map(0x7400, 0x7400).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0x7800, 0x7800).rw("oki2", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); -} - - -/*************************************************************************** - - 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( gfx_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_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - - 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_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - 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 - -***************************************************************************/ - -void lordgun_state::machine_start() -{ - save_item(NAME(m_protection_data)); - save_item(NAME(m_priority)); - save_item(NAME(m_whitescreen)); -} - -void lordgun_state::lordgun(machine_config &config) -{ - M68000(config, m_maincpu, XTAL(20'000'000) / 2); - m_maincpu->set_addrmap(AS_PROGRAM, &lordgun_state::lordgun_map); - m_maincpu->set_vblank_int("screen", FUNC(lordgun_state::irq4_line_hold)); - - Z80(config, m_soundcpu, XTAL(20'000'000) / 4); - m_soundcpu->set_addrmap(AS_PROGRAM, &lordgun_state::soundmem_map); - m_soundcpu->set_addrmap(AS_IO, &lordgun_state::lordgun_soundio_map); - - i8255_device &ppi0(I8255A(config, "ppi8255_0")); - ppi0.in_pa_callback().set_ioport("DIP"); - ppi0.out_pa_callback().set(FUNC(lordgun_state::fake_w)); - ppi0.out_pb_callback().set(FUNC(lordgun_state::lordgun_eeprom_w)); - ppi0.in_pc_callback().set_ioport("SERVICE"); - ppi0.out_pc_callback().set(FUNC(lordgun_state::fake2_w)); - - i8255_device &ppi1(I8255A(config, "ppi8255_1")); - ppi1.in_pa_callback().set_ioport("START1"); - ppi1.out_pa_callback().set(FUNC(lordgun_state::fake_w)); - ppi1.in_pb_callback().set_ioport("START2"); - ppi1.out_pb_callback().set(FUNC(lordgun_state::fake_w)); - ppi1.in_pc_callback().set_ioport("COIN"); - ppi1.out_pc_callback().set(FUNC(lordgun_state::fake_w)); - - EEPROM_93C46_16BIT(config, m_eeprom); - - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(0x200, 0x100); - m_screen->set_visarea(0,0x1c0-1, 0,0xe0-1); - m_screen->set_screen_update(FUNC(lordgun_state::screen_update)); - m_screen->set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_lordgun); - - // 0x800 real colors, repeated per priority level - PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x800 * 8); - - // sound hardware - SPEAKER(config, "mono").front_center(); - - GENERIC_LATCH_8(config, m_soundlatch); - GENERIC_LATCH_8(config, m_soundlatch2); - - ym3812_device &ymsnd(YM3812(config, "ymsnd", XTAL(3'579'545))); - ymsnd.irq_handler().set_inputline("soundcpu", 0); - ymsnd.add_route(ALL_OUTPUTS, "mono", 1.0); - - OKIM6295(config, m_oki, XTAL(20'000'000) / 20, okim6295_device::PIN7_HIGH); // ? 5MHz can't be right! - m_oki->add_route(ALL_OUTPUTS, "mono", 1.0); -} - -void lordgun_state::aliencha(machine_config &config) -{ - M68000(config, m_maincpu, XTAL(20'000'000) / 2); - m_maincpu->set_addrmap(AS_PROGRAM, &lordgun_state::aliencha_map); - m_maincpu->set_vblank_int("screen", FUNC(lordgun_state::irq4_line_hold)); - - Z80(config, m_soundcpu, XTAL(20'000'000) / 4); - m_soundcpu->set_addrmap(AS_PROGRAM, &lordgun_state::soundmem_map); - m_soundcpu->set_addrmap(AS_IO, &lordgun_state::aliencha_soundio_map); - - i8255_device &ppi0(I8255A(config, "ppi8255_0")); - ppi0.in_pa_callback().set(FUNC(lordgun_state::aliencha_dip_r)); - ppi0.out_pa_callback().set(FUNC(lordgun_state::fake2_w)); - ppi0.out_pb_callback().set(FUNC(lordgun_state::aliencha_eeprom_w)); - ppi0.in_pc_callback().set_ioport("SERVICE"); - ppi0.out_pc_callback().set(FUNC(lordgun_state::aliencha_dip_w)); - - i8255_device &ppi1(I8255A(config, "ppi8255_1")); - ppi1.in_pa_callback().set_ioport("P1"); - ppi1.out_pa_callback().set(FUNC(lordgun_state::fake_w)); - ppi1.in_pb_callback().set_ioport("P2"); - ppi1.out_pb_callback().set(FUNC(lordgun_state::fake_w)); - ppi1.in_pc_callback().set_ioport("COIN"); - ppi1.out_pc_callback().set(FUNC(lordgun_state::fake_w)); - - EEPROM_93C46_16BIT(config, m_eeprom); - - SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); - m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); - m_screen->set_size(0x200, 0x100); - m_screen->set_visarea(0,0x1c0-1, 0,0xe0-1); - m_screen->set_screen_update(FUNC(lordgun_state::screen_update)); - m_screen->set_palette(m_palette); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_lordgun); - - // 0x800 real colors, repeated per priority level - PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x800 * 8); - - // sound hardware - SPEAKER(config, "mono").front_center(); - - GENERIC_LATCH_8(config, m_soundlatch); - GENERIC_LATCH_8(config, m_soundlatch2); - - ymf278b_device &ymf(YMF278B(config, "ymf", XTAL(33'868'800))); // ? 33.8688MHz matches video (decrease for faster music tempo) - ymf.set_addrmap(0, &lordgun_state::ymf278_map); - ymf.irq_handler().set_inputline("soundcpu", 0); - ymf.add_route(ALL_OUTPUTS, "mono", 0.5); - - OKIM6295(config, m_oki, XTAL(20'000'000) / 20, okim6295_device::PIN7_HIGH); // ? 5MHz can't be right - m_oki->add_route(ALL_OUTPUTS, "mono", 1.0); - - OKIM6295(config, "oki2", XTAL(20'000'000) / 20, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // ? 5MHz can't be right -} - - -/*************************************************************************** - - 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_REGION( 0x80, "eeprom", ROMREGION_LE|ROMREGION_16BIT ) // Default eeprom - ROM_LOAD( "eeprom", 0x00, 0x80, CRC(0dad0e43) SHA1(c216d1f19228e103b78e5acb30a66dab3804ac70) ) -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 - - -/*************************************************************************** - - Code Decryption - -***************************************************************************/ - -void lordgun_state::init_lordgun() -{ - uint16_t *rom = (uint16_t *)memregion("maincpu")->base(); - int rom_size = 0x100000; - - for(int i = 0; i < rom_size/2; i++) - { - uint16_t x = rom[i]; - - if((i & 0x0120) == 0x0100 || (i & 0x0a00) == 0x0800) - x ^= 0x0010; - - rom[i] = x; - } - - save_item(NAME(m_old)); - - for (int i = 0; i < 2; i++) - { - save_item(NAME(m_gun[i].scr_x), i); - save_item(NAME(m_gun[i].scr_y), i); - save_item(NAME(m_gun[i].hw_x), i); - save_item(NAME(m_gun[i].hw_y), i); - } -} - -void lordgun_state::init_aliencha() -{ - save_item(NAME(m_aliencha_dip_sel)); -} - -/*************************************************************************** - - Game Drivers - -***************************************************************************/ - -GAME( 1994, lordgun, 0, lordgun, lordgun, lordgun_state, init_lordgun, ROT0, "IGS", "Lord of Gun (USA)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) -GAME( 1994, aliencha, 0, aliencha, aliencha, lordgun_state, init_aliencha, ROT0, "IGS", "Alien Challenge (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, alienchac, aliencha, aliencha, aliencha, lordgun_state, init_aliencha, ROT0, "IGS", "Alien Challenge (China)", MACHINE_SUPPORTS_SAVE ) |