diff --git a/.gitattributes b/.gitattributes index 73dc9375d10..ad6f63d0662 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1152,7 +1152,6 @@ src/mame/drivers/actfancr.c svneol=native#text/plain src/mame/drivers/adp.c svneol=native#text/plain src/mame/drivers/aeroboto.c svneol=native#text/plain src/mame/drivers/aerofgt.c svneol=native#text/plain -src/mame/drivers/afega.c svneol=native#text/plain src/mame/drivers/airbustr.c svneol=native#text/plain src/mame/drivers/ajax.c svneol=native#text/plain src/mame/drivers/aladbl.c svneol=native#text/plain @@ -2552,7 +2551,6 @@ src/mame/video/88games.c svneol=native#text/plain src/mame/video/actfancr.c svneol=native#text/plain src/mame/video/aeroboto.c svneol=native#text/plain src/mame/video/aerofgt.c svneol=native#text/plain -src/mame/video/afega.c svneol=native#text/plain src/mame/video/airbustr.c svneol=native#text/plain src/mame/video/ajax.c svneol=native#text/plain src/mame/video/aliens.c svneol=native#text/plain diff --git a/src/mame/drivers/afega.c b/src/mame/drivers/afega.c deleted file mode 100644 index 3d4cbc19664..00000000000 --- a/src/mame/drivers/afega.c +++ /dev/null @@ -1,1928 +0,0 @@ -/*************************************************************************** - - NOTE: this hardware is a bootleg of the hardware in nmk16.c - twinactn is a bootleg of mustang with different graphics, different - sound hardware, and some code shifted around - - todo: either merge this with nmk16.c, or split the bootlegs / non nmk - hardware from nmk16.c into an nmk16 bootlegs driver - - understand the 'protection' it may just be some kind of mirroring. - -**************************************************************************** - - -= Afega Games =- - - driver by Luca Elia (l.elia@tin.it) - - -Main CPU : M68000 -Video Chips : AFEGA AFI-GFSK (68 Pin PLCC) - AFEGA AFI-GFLK (208 Pin PQFP) - -Sound CPU : Z80 -Sound Chips : M6295 (AD-65) + YM2151 (BS901) + YM3012 (BS902) - ---------------------------------------------------------------------------- -Year + Game Notes ---------------------------------------------------------------------------- -95 Twin Action Does not work for unknown reasons. Protection? -97 Red Hawk US Version of Stagger 1 -98 Sen Jin - Guardian Storm Some text missing (protection, see service mode) -98 Stagger I -98 Bubble 2000 By Tuning, but it seems to be the same HW -00 Spectrum 2000 By YomaTech -- NOTE sprite bugs happen on real hw!! -01 Fire Hawk By ESD with different sound hardware: 2 M6295 ---------------------------------------------------------------------------- - -Notes: - -- Afega is a Korean company. Its name is an acronym of "Art-Fiction Electronic Game". -- Sen Jin: protection supplies some 68k code seen in the 2760-29cf range. - - or service mode is just complete, these are korean hacks afterall -- Twinactn: to enter the hidden test mode press both P2 buttons during boot, then - P1 button 1 repeatedly. - -***************************************************************************/ - -#include "driver.h" -#include "sound/2151intf.h" -#include "sound/okim6295.h" - -/* Variables defined in video: */ - -extern UINT16 *afega_vram_0, *afega_scroll_0; -extern UINT16 *afega_vram_1, *afega_scroll_1; - -/* Functions defined in video: */ - -WRITE16_HANDLER( afega_vram_0_w ); -WRITE16_HANDLER( afega_vram_1_w ); -WRITE16_HANDLER( afega_palette_w ); - -PALETTE_INIT( grdnstrm ); - -VIDEO_START( afega ); -VIDEO_START( firehawk ); -VIDEO_START( twinactn ); -VIDEO_UPDATE( afega ); -VIDEO_UPDATE( redhawkb ); -VIDEO_UPDATE( bubl2000 ); -VIDEO_UPDATE( firehawk ); -VIDEO_UPDATE( twinactn ); - -static UINT16 *ram; - -/*************************************************************************** - - - Memory Maps - Main CPU - - -***************************************************************************/ - -static READ16_HANDLER( afega_unknown_r ) -{ - /* This fixes the text in Service Mode. */ - return 0x0100; -} - -static WRITE16_HANDLER( afega_soundlatch_w ) -{ - if (ACCESSING_LSB) - { - soundlatch_w(0,data&0xff); - cpunum_set_input_line(1, 0, HOLD_LINE); - } -} - -static WRITE16_HANDLER( afega_scroll0_w ) -{ - COMBINE_DATA(&afega_scroll_0[offset]); -} - -static WRITE16_HANDLER( afega_scroll1_w ) -{ - COMBINE_DATA(&afega_scroll_1[offset]); -} - -/* - Lines starting with an empty comment in the following MemoryReadAddress - arrays are there for debug (e.g. the game does not read from those ranges - AFAIK) -*/ - - -static ADDRESS_MAP_START( afega, ADDRESS_SPACE_PROGRAM, 16 ) - ADDRESS_MAP_FLAGS( AMEF_ABITS(20) ) - AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) // Buttons - AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) // P1 + P2 - AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) // 2 x DSW - AM_RANGE(0x080012, 0x080013) AM_READ(afega_unknown_r) - AM_RANGE(0x080000, 0x08001d) AM_WRITE(MWA16_RAM) // - AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w) // To Sound CPU -/**/AM_RANGE(0x084000, 0x084003) AM_RAM AM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..) -/**/AM_RANGE(0x084004, 0x084007) AM_RAM AM_WRITE(afega_scroll1_w) // Scroll on redhawkb (mirror or changed?..) - AM_RANGE(0x080020, 0x087fff) AM_WRITE(MWA16_RAM) // -/**/AM_RANGE(0x088000, 0x0885ff) AM_READWRITE(MRA16_RAM, afega_palette_w) AM_BASE(&paletteram16) // Palette - AM_RANGE(0x088600, 0x08bfff) AM_WRITE(MWA16_RAM) // -/**/AM_RANGE(0x08c000, 0x08c003) AM_RAM AM_WRITE(afega_scroll0_w) AM_BASE(&afega_scroll_0) // Scroll -/**/AM_RANGE(0x08c004, 0x08c007) AM_RAM AM_WRITE(afega_scroll1_w) AM_BASE(&afega_scroll_1) // - AM_RANGE(0x08c008, 0x08ffff) AM_WRITE(MWA16_RAM) // -/**/AM_RANGE(0x090000, 0x091fff) AM_READWRITE(MRA16_RAM, afega_vram_0_w) AM_BASE(&afega_vram_0) // Layer 0 -/**/AM_RANGE(0x092000, 0x093fff) AM_RAM // ? -/**/AM_RANGE(0x09c000, 0x09c7ff) AM_READWRITE(MRA16_RAM, afega_vram_1_w) AM_BASE(&afega_vram_1) // Layer 1 - AM_RANGE(0x0c0000, 0x0c7fff) AM_RAM // RAM - AM_RANGE(0x0c8000, 0x0c8fff) AM_RAM AM_SHARE(1) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) // Sprites - AM_RANGE(0x0c9000, 0x0cffff) AM_RAM AM_SHARE(2) AM_BASE(&ram) // RAM - AM_RANGE(0x0f8000, 0x0f8fff) AM_RAM AM_SHARE(1) // Sprites Mirror - AM_RANGE(0x0f9000, 0x0fffff) AM_RAM AM_SHARE(2) // RAM Mirror (MangChi) -ADDRESS_MAP_END - - -// The high byte of the word written is the address to write to (byte offset), the low byte is data -static WRITE16_HANDLER( twinactn_scroll0_w ) -{ - int byte = ((data >> 8) & 3) ^ 2; - int bit = ((byte & 1) ? 0 : 8); - afega_scroll_0[byte / 2] = (afega_scroll_0[byte / 2] & (0xff << (8-bit))) | ((data & 0xff) << bit); -} -static WRITE16_HANDLER( twinactn_scroll1_w ) -{ - int byte = ((data >> 8) & 3) ^ 2; - int bit = ((byte & 1) ? 0 : 8); - afega_scroll_1[byte / 2] = (afega_scroll_1[byte / 2] & (0xff << (8-bit))) | ((data & 0xff) << bit); -} - -static WRITE16_HANDLER( twinactn_flipscreen_w ) -{ - if (ACCESSING_LSB) - flip_screen_set(data & 1); - - if (data & (~1)) - logerror("%06x: unknown flip screen bit written %04x\n", activecpu_get_pc(), data); -} - -static ADDRESS_MAP_START( twinactn, ADDRESS_SPACE_PROGRAM, 16 ) -// ADDRESS_MAP_FLAGS( AMEF_ABITS(20) ) - AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) // Buttons - AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) // P1 + P2 - AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) // 2 x DSW - AM_RANGE(0x080014, 0x080015) AM_WRITE(twinactn_flipscreen_w) - AM_RANGE(0x080016, 0x080017) AM_WRITE(MWA16_NOP) - AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w) // To Sound CPU -/**/AM_RANGE(0x088000, 0x0885ff) AM_READWRITE(MRA16_RAM, afega_palette_w) AM_BASE(&paletteram16) // Palette -/**/AM_RANGE(0x08c000, 0x08c003) AM_RAM AM_WRITE(twinactn_scroll0_w) AM_BASE(&afega_scroll_0) // Scroll -/**/AM_RANGE(0x08c004, 0x08c007) AM_RAM AM_WRITE(twinactn_scroll1_w) AM_BASE(&afega_scroll_1) // - AM_RANGE(0x08c008, 0x08c087) AM_WRITE(MWA16_RAM) // -/**/AM_RANGE(0x090000, 0x091fff) AM_READWRITE(MRA16_RAM, afega_vram_0_w) AM_BASE(&afega_vram_0) // Layer 0 -/**/AM_RANGE(0x092000, 0x093fff) AM_RAM // ? -/**/AM_RANGE(0x09c000, 0x09c7ff) AM_READWRITE(MRA16_RAM, afega_vram_1_w) AM_BASE(&afega_vram_1) // Layer 1 - AM_RANGE(0x0f0000, 0x0f7fff) AM_RAM // Work RAM - AM_RANGE(0x0f8000, 0x0f8fff) AM_RAM AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) // Sprites - AM_RANGE(0x0f9000, 0x0fffff) AM_RAM AM_BASE(&ram) // Work RAM -ADDRESS_MAP_END - -/*************************************************************************** - - - Memory Maps - Sound CPU - - -***************************************************************************/ -static WRITE8_HANDLER( spec2k_oki1_banking_w ) -{ - if(data == 0xfe) - OKIM6295_set_bank_base(1, 0); - else if(data == 0xff) - OKIM6295_set_bank_base(1, 0x40000); -} - -static ADDRESS_MAP_START( afega_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0003, 0x0003) AM_WRITE(MWA8_NOP) // bug in sound prg? - AM_RANGE(0x0004, 0x0004) AM_WRITE(MWA8_NOP) // bug in sound prg? - AM_RANGE(0x0000, 0xefff) AM_ROM - AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM - AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_r) // From Main CPU - AM_RANGE(0xf808, 0xf808) AM_WRITE(YM2151_register_port_0_w) // YM2151 - AM_RANGE(0xf809, 0xf809) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w) // YM2151 - AM_RANGE(0xf80a, 0xf80a) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) // M6295 -ADDRESS_MAP_END - -static ADDRESS_MAP_START( firehawk_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xefff) AM_ROM - AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xfff0, 0xfff0) AM_READ(soundlatch_r) - AM_RANGE(0xfff2, 0xfff2) AM_WRITE(spec2k_oki1_banking_w ) - AM_RANGE(0xfff8, 0xfff8) AM_READWRITE(OKIM6295_status_1_r, OKIM6295_data_1_w) - AM_RANGE(0xfffa, 0xfffa) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) - AM_RANGE(0xf800, 0xffff) AM_RAM // not used, only tested -ADDRESS_MAP_END - - -static WRITE8_HANDLER( twinactn_oki_bank_w ) -{ - OKIM6295_set_bank_base(0, (data & 3) * 0x40000); - - if (data & (~3)) - logerror("%04x: invalid oki bank %02x\n", activecpu_get_pc(), data); - -// logerror("%04x: oki bank %02x\n", activecpu_get_pc(), data); -} - -static ADDRESS_MAP_START( twinactn_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0x9000, 0x9000) AM_WRITE(twinactn_oki_bank_w) - AM_RANGE(0x9800, 0x9800) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) - AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) // From Main CPU -ADDRESS_MAP_END - -/*************************************************************************** - - - Input Ports - - -***************************************************************************/ - -/*************************************************************************** - Stagger I -***************************************************************************/ - -static INPUT_PORTS_START( stagger1 ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0000, "1" ) - PORT_DIPSETTING( 0x0080, "2" ) - PORT_DIPSETTING( 0x00c0, "3" ) - PORT_DIPSETTING( 0x0040, "5" ) - PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x0300, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0200, "Horizontally" ) - PORT_DIPSETTING( 0x0100, "Vertically" ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - -/* everything seems active high.. not low */ -static INPUT_PORTS_START( redhawkb ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w -- probably just redhawk but inverted - PORT_SERVICE( 0x0001, IP_ACTIVE_HIGH ) /* not working */ - PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x0000, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x00c0, "1" ) - PORT_DIPSETTING( 0x0040, "2" ) - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPSETTING( 0x0080, "5" ) - PORT_DIPNAME( 0x0300, 0x0000, DEF_STR( Flip_Screen ) ) /* not supported */ - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0300, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0100, "Horizontally" ) - PORT_DIPSETTING( 0x0200, "Vertically" ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x0000, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0x0000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - -/*************************************************************************** - Sen Jin - Guardian Storm -***************************************************************************/ - -static INPUT_PORTS_START( grdnstrm ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // IN1 - $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, "Bombs" ) - PORT_DIPSETTING( 0x0008, "2" ) - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0000, "1" ) - PORT_DIPSETTING( 0x0080, "2" ) - PORT_DIPSETTING( 0x00c0, "3" ) - PORT_DIPSETTING( 0x0040, "5" ) - PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x0300, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPSETTING( 0x0200, "Horizontally" ) - PORT_DIPSETTING( 0x0100, "Vertically" ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - -/* Pop's Pop's */ - -static INPUT_PORTS_START( popspops ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // IN1 - $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - /* the dips on this are a mess.. service mode doesn't seem to be 100% trustable */ - PORT_START_TAG("IN2") // $080004.w - PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) // if ON it tells you the answers?! - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - - - -/*************************************************************************** - Bubble 2000 -***************************************************************************/ - -static INPUT_PORTS_START( bubl2000 ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x00c0, "Free Credit" ) - PORT_DIPSETTING( 0x0080, "500k" ) - PORT_DIPSETTING( 0x00c0, "800k" ) - PORT_DIPSETTING( 0x0040, "1000k" ) - PORT_DIPSETTING( 0x0000, "1500k" ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) - PORT_DIPNAME( 0x1c00, 0x1c00, DEF_STR( Coin_B ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x1c00, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0c00, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x1400, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( 1C_4C ) ) -// PORT_DIPSETTING( 0x0000, "Disabled" ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 1C_4C ) ) -// PORT_DIPSETTING( 0x0000, "Disabled" ) -INPUT_PORTS_END - -/*************************************************************************** - Mang Chi -***************************************************************************/ - -static INPUT_PORTS_START( mangchi ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_DIPNAME( 0x0001, 0x0001, "DSWS" ) /* Setting to on cuases screen issues, Flip Screen? or unfinished test mode? */ - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0018, 0x0018, "Vs Rounds" ) - PORT_DIPSETTING( 0x0018, "2" ) - PORT_DIPSETTING( 0x0010, "3" ) - PORT_DIPSETTING( 0x0008, "4" ) - PORT_DIPSETTING( 0x0000, "5" ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) /* Hard to tell levels of difficulty by play :-( */ - PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - - -/*************************************************************************** - Fire Hawk -***************************************************************************/ - -static INPUT_PORTS_START( firehawk ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_DIPNAME( 0x0001, 0x0001, "Show Dip-Switch Settings" ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0006, DEF_STR( Very_Easy) ) - PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) -// PORT_DIPSETTING( 0x000a, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x000e, DEF_STR( Normal ) ) -// PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Hardest ) ) - PORT_DIPSETTING( 0x000c, DEF_STR( Very_Hard ) ) - PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, "Number of Bombs" ) - PORT_DIPSETTING( 0x0020, "2" ) - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0000, "1" ) - PORT_DIPSETTING( 0x0080, "2" ) - PORT_DIPSETTING( 0x00c0, "3" ) - PORT_DIPSETTING( 0x0040, "4" ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Region ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( English ) ) - PORT_DIPSETTING( 0x0000, "China" ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, "Continue Coins" ) - PORT_DIPSETTING( 0x1800, "1 Coin" ) - PORT_DIPSETTING( 0x0800, "2 Coins" ) - PORT_DIPSETTING( 0x1000, "3 Coins" ) - PORT_DIPSETTING( 0x0000, "4 Coins" ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - - -/*************************************************************************** - Spectrum 2000 -***************************************************************************/ - -static INPUT_PORTS_START( spec2k ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN2") // $080004.w - PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0008, 0x0008, "Number of Bombs" ) - PORT_DIPSETTING( 0x0008, "2" ) - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPNAME( 0x0010, 0x0010, "Copyright Notice" ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) - PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0000, "1" ) - PORT_DIPSETTING( 0x0080, "2" ) - PORT_DIPSETTING( 0x00c0, "3" ) - PORT_DIPSETTING( 0x0040, "5" ) - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) - PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) -INPUT_PORTS_END - - -/*************************************************************************** - Twin Action -***************************************************************************/ - -static INPUT_PORTS_START( twinactn ) - PORT_START_TAG("IN0") // $080000.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) - PORT_SERVICE_NO_TOGGLE(0x0020, IP_ACTIVE_LOW ) // Test in service mode - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START_TAG("IN1") // $080002.w - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH,IPT_UNKNOWN ) // Tested at boot - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_HIGH,IPT_UNKNOWN ) // Tested at boot - - PORT_START_TAG("IN2") // $080004.w - PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) - PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coin_B ) ) - PORT_DIPSETTING( 0x0010, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x0018, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x0014, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Coin_A ) ) - PORT_DIPSETTING( 0x0080, DEF_STR( 4C_1C ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x00c0, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x0060, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) - - PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0c00, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x4000, "2" ) - PORT_DIPSETTING( 0xc000, "3" ) - PORT_DIPSETTING( 0x8000, "4" ) - PORT_DIPSETTING( 0x0000, "5" ) -INPUT_PORTS_END - - -/*************************************************************************** - - - Graphics Layouts - - -***************************************************************************/ - -static const gfx_layout layout_8x8x4 = -{ - 8,8, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { STEP8(0,4) }, - { STEP8(0,8*4) }, - 8*8*4 -}; - -static const gfx_layout layout_16x16x4 = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { STEP8(0,4), STEP8(8*8*4*2,4) }, - { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, - 16*16*4 -}; - -static const gfx_layout layout_16x16x8 = -{ - 16,16, - RGN_FRAC(1,2), - 8, - { STEP4(RGN_FRAC(0,2),1), STEP4(RGN_FRAC(1,2),1) }, - { STEP8(0,4), STEP8(8*8*4*2,4) }, - { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, - 16*16*4 -}; - - -static const gfx_layout layout_16x16x4_swapped = -{ - 16,16, - RGN_FRAC(1,1), - 4, - { STEP4(0,1) }, - { 4,0,12,8,20,16,28,24, 512+4,512+0,512+12,512+8,512+20,512+16,512+28,512+24}, - { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, - 16*16*4 -}; - -static GFXDECODE_START( grdnstrm ) - GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites - GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x8, 256*3, 16 ) // [1] Layer 0 - GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 -GFXDECODE_END - -static GFXDECODE_START( stagger1 ) - GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites - GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x4, 256*0, 16 ) // [1] Layer 0 - GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 -GFXDECODE_END - -static GFXDECODE_START( redhawkb ) - GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4_swapped, 256*1, 16 ) // [0] Sprites - GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x4_swapped, 256*0, 16 ) // [1] Layer 0 - GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 -GFXDECODE_END - - -/*************************************************************************** - - - Machine Drivers - - -***************************************************************************/ - -static void irq_handler(int irq) -{ - cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); -} - -static const struct YM2151interface afega_ym2151_intf = -{ - irq_handler -}; - -static INTERRUPT_GEN( interrupt_afega ) -{ - switch ( cpu_getiloops() ) - { - case 0: irq2_line_hold(); break; - case 1: irq4_line_hold(); break; - } -} - -static MACHINE_DRIVER_START( stagger1 ) - - /* basic machine hardware */ - MDRV_CPU_ADD(M68000,12000000) - MDRV_CPU_PROGRAM_MAP(afega,0) - MDRV_CPU_VBLANK_INT(interrupt_afega,2) - - MDRV_CPU_ADD(Z80, 4000000) - /* audio CPU */ /* ? */ - MDRV_CPU_PROGRAM_MAP(afega_sound_cpu,0) - - MDRV_SCREEN_REFRESH_RATE(56) - MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(256, 256) - MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0, 256-1) /* fixed */ - MDRV_GFXDECODE(stagger1) - MDRV_PALETTE_LENGTH(768) - - MDRV_VIDEO_START(afega) - MDRV_VIDEO_UPDATE(afega) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_STEREO("left", "right") - - MDRV_SOUND_ADD(YM2151, 4000000) - MDRV_SOUND_CONFIG(afega_ym2151_intf) - MDRV_SOUND_ROUTE(0, "left", 0.30) - MDRV_SOUND_ROUTE(1, "right", 0.30) - - MDRV_SOUND_ADD(OKIM6295, 1000000) - MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.70) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.70) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( redhawkb ) - /* basic machine hardware */ - MDRV_IMPORT_FROM(stagger1) - /* video hardware */ - MDRV_GFXDECODE(redhawkb) - MDRV_VIDEO_UPDATE(redhawkb) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( grdnstrm ) - - /* basic machine hardware */ - MDRV_IMPORT_FROM(stagger1) - - /* video hardware */ - MDRV_GFXDECODE(grdnstrm) - MDRV_PALETTE_LENGTH(768) - MDRV_COLORTABLE_LENGTH(768 + 16*256) - - MDRV_PALETTE_INIT(grdnstrm) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( popspops ) - - /* basic machine hardware */ - MDRV_IMPORT_FROM(stagger1) - - /* video hardware */ - MDRV_GFXDECODE(grdnstrm) - MDRV_PALETTE_LENGTH(768) - MDRV_COLORTABLE_LENGTH(768 + 16*256) - - MDRV_PALETTE_INIT(grdnstrm) - - MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) - MDRV_VIDEO_UPDATE(bubl2000) -MACHINE_DRIVER_END - - -static MACHINE_DRIVER_START( bubl2000 ) - - /* basic machine hardware */ - MDRV_IMPORT_FROM(grdnstrm) - - /* video hardware */ - MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) /* added to do not break other games */ - MDRV_VIDEO_UPDATE(bubl2000) -MACHINE_DRIVER_END - -static MACHINE_DRIVER_START( firehawk ) - - /* basic machine hardware */ - MDRV_CPU_ADD(M68000,12000000) - MDRV_CPU_PROGRAM_MAP(afega,0) - MDRV_CPU_VBLANK_INT(interrupt_afega,2) - - MDRV_CPU_ADD(Z80,4000000) - /* audio CPU */ - MDRV_CPU_PROGRAM_MAP(firehawk_sound_cpu,0) - - MDRV_SCREEN_REFRESH_RATE(56) - MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(256, 256) - MDRV_SCREEN_VISIBLE_AREA(8, 256-8-1, 16, 256-16-1) - MDRV_GFXDECODE(grdnstrm) - MDRV_PALETTE_LENGTH(768) - MDRV_COLORTABLE_LENGTH(768 + 16*256) - - MDRV_PALETTE_INIT(grdnstrm) - MDRV_VIDEO_START(firehawk) - MDRV_VIDEO_UPDATE(firehawk) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD(OKIM6295, 1000000) - MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - - MDRV_SOUND_ADD(OKIM6295, 1000000) - MDRV_SOUND_CONFIG(okim6295_interface_region_2_pin7high) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_DRIVER_END - - -static INTERRUPT_GEN( interrupt_twinactn ) -{ - switch ( cpu_getiloops() ) - { - case 0: irq1_line_hold(); break; - case 1: irq2_line_hold(); break; - case 2: irq4_line_hold(); break; - } -} - -static MACHINE_DRIVER_START( twinactn ) - - /* basic machine hardware */ - MDRV_CPU_ADD(M68000,12000000) - MDRV_CPU_PROGRAM_MAP(twinactn,0) - MDRV_CPU_VBLANK_INT(interrupt_twinactn,3) - - MDRV_CPU_ADD(Z80, 4000000) - /* audio CPU */ /* ? */ - MDRV_CPU_PROGRAM_MAP(twinactn_sound_cpu,0) - - MDRV_SCREEN_REFRESH_RATE(56) - MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(256, 256) - MDRV_SCREEN_VISIBLE_AREA(0, 256-1, 0+16, 256-16-1) - MDRV_GFXDECODE(stagger1) - MDRV_PALETTE_LENGTH(768) - - MDRV_VIDEO_START(twinactn) - MDRV_VIDEO_UPDATE(twinactn) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD(OKIM6295, 1000000) - MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_DRIVER_END - - -/*************************************************************************** - - - ROMs Loading - - -***************************************************************************/ - -/* Address lines scrambling */ - -static void decryptcode( int a23, int a22, int a21, int a20, int a19, int a18, int a17, int a16, int a15, int a14, int a13, int a12, - int a11, int a10, int a9, int a8, int a7, int a6, int a5, int a4, int a3, int a2, int a1, int a0 ) -{ - int i; - UINT8 *RAM = memory_region( REGION_CPU1 ); - size_t size = memory_region_length( REGION_CPU1 ); - UINT8 *buffer = malloc_or_die( size ); - - memcpy( buffer, RAM, size ); - for( i = 0; i < size; i++ ) - { - RAM[ i ] = buffer[ BITSWAP24( i, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, - a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0 ) ]; - } - free( buffer ); -} - -/*************************************************************************** - - Stagger I -(AFEGA 1998) - -Parts: - -1 MC68HC000P10 -1 Z80 -2 Lattice ispLSI 1032E - -***************************************************************************/ - -ROM_START( stagger1 ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x020000, CRC(8555929b) SHA1(b405d81c2a45191111b1a4458ac6b5c0a129b8f1) ) - ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x020000, CRC(5b0b63ac) SHA1(239f793b6845a88d1630da790a2762da730a450d) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) - - ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "7.bin", 0x00000, 0x80000, CRC(048f7683) SHA1(7235b7dcfbb72abf44e60b114e3f504f16d29ebf) ) - ROM_LOAD16_BYTE( "6.bin", 0x00001, 0x80000, CRC(051d4a77) SHA1(664182748e72b3e44202caa20f337d02e946ca62) ) - - ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x4 */ - ROM_LOAD( "4.bin", 0x00000, 0x80000, CRC(46463d36) SHA1(4265bc4d24ff64e39d9273965701c740d7e3fee0) ) - - ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - // Unused - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) -ROM_END - - -/*************************************************************************** - - Red Hawk (c)1997 Afega - - - - 6116 ym2151 MSM6295 5 4MHz - 1 - Z80 pLSI1032 4 - 76C88 - 6116 76C256 76C88 - 6116 76C256 - 2 76C256 76C256 - 3 76C256 76C256 - - 68000-10 6116 - 6116 - SW1 6 - SW21 pLSI1032 7 - 12MHz - -***************************************************************************/ - -ROM_START( redhawk ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "2", 0x000000, 0x020000, CRC(3ef5f326) SHA1(e89c7c24a05886a14995d7c399958dc00ad35d63) ) - ROM_LOAD16_BYTE( "3", 0x000001, 0x020000, CRC(9b3a10ef) SHA1(d03480329b23474e5a9e42a75b09d2140eed4443) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) - - ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "6", 0x000001, 0x080000, CRC(61560164) SHA1(d727ab2d037dab40745dec9c4389744534fdf07d) ) - ROM_LOAD16_BYTE( "7", 0x000000, 0x080000, CRC(66a8976d) SHA1(dd9b89cf29eb5557845599d55ef3a15f53c070a4) ) - - ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "4", 0x000000, 0x080000, CRC(d6427b8a) SHA1(556de1b5ce29d1c3c54bb315dcaa4dd0848ca462) ) - - ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - // Unused - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) -ROM_END - -static DRIVER_INIT( redhawk ) -{ - decryptcode( 23, 22, 21, 20, 19, 18, 16, 15, 14, 17, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); -} - -ROM_START( redhawkb ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "rhb-1.bin", 0x000000, 0x020000, CRC(e733ea07) SHA1(b1ffeda633d5e701f0e97c79930a54d7b89a85c5) ) - ROM_LOAD16_BYTE( "rhb-2.bin", 0x000001, 0x020000, CRC(f9fa5684) SHA1(057ea3eebbaa1a208a72beef21b9368df7032ce1) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) - - ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD( "rhb-3.bin", 0x000000, 0x080000, CRC(0318d68b) SHA1(c773de7b6f9c706e62349dc73af4339d1a3f9af6) ) - ROM_LOAD( "rhb-4.bin", 0x080000, 0x080000, CRC(ba21c1ef) SHA1(66b0dee67acb5b3a21c7dba057be4093a92e10a9) ) - - ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "rhb-5.bin", 0x000000, 0x080000, CRC(d0eaf6f2) SHA1(6e946e13b06df897a63e885c9842816ec908a709) ) - - ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) -ROM_END - - -/*************************************************************************** - - Sen Jin - Guardian Storm - -(C) Afega 1998 - -CPU: 68HC000FN10 (68000, 68 pin PLCC) -SND: Z84C000FEC (Z80, 44 pin PQFP), AD-65 (OKI M6295), - BS901 (YM2151, 24 pin DIP), BS901 (YM3012, 16 pin DIP) -OSC: 12.000MHz (near 68000), 4.000MHz (Near Z84000) -RAM: LH52B256 x 8, 6116 x 7 -DIPS: 2 x 8 position - -Other Chips: AFEGA AFI-GFSK (68 pin PLCC, located next to 68000) - AFEGA AFI-GFLK (208 pin PQFP) - -ROMS: -GST-01.U92 27C512, \ -GST-02.U95 27C2000 > Sound Related, all located near Z80 -GST-03.U4 27C512 / - -GST-04.112 27C2000 \ -GST-05.107 27C2000 /Main Program - -GST-06.C13 read as 27C160 label = AF1-SP (Sprites?) -GST-07.C08 read as 27C160 label = AF1=B2 (Backgrounds?) -GST-08.C03 read as 27C160 label = AF1=B1 (Backgrounds?) - -***************************************************************************/ - -ROM_START( grdnstrm ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "gst-04.112", 0x000000, 0x040000, CRC(922c931a) SHA1(1d1511033c8c424535a73f5c5bf58560a8b1842e) ) - ROM_LOAD16_BYTE( "gst-05.107", 0x000001, 0x040000, CRC(d22ca2dc) SHA1(fa21c8ec804570d64f4b167b7f65fd5811435e46) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "gst-01.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) - - ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD( "gst-06.c13", 0x000000, 0x200000, CRC(7d4d4985) SHA1(15c6c1aecd3f12050c1db2376f929f1a26a1d1cf) ) - - ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "gst-07.c08", 0x000000, 0x200000, CRC(d68588c2) SHA1(c5f397d74a6ecfd2e375082f82e37c5a330fba62) ) - ROM_LOAD( "gst-08.c03", 0x200000, 0x200000, CRC(f8b200a8) SHA1(a6c43dd57b752d87138d7125b47dc0df83df8987) ) - - ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "gst-03.u4", 0x00000, 0x10000, CRC(a1347297) SHA1(583f4da991eeedeb523cf4fa3b6900d40e342063) ) - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "gst-02.u95", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) -ROM_END - -static DRIVER_INIT( grdnstrm ) -{ - decryptcode( 23, 22, 21, 20, 19, 18, 16, 17, 14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); -} - -/* Pop's Pop's */ - -/* - -Pop's Pop's by Afega (1999) - -The pcb might be missing an eprom in a socket - --- i just think it uses a generic PCB but no sprites in this case,. - -1x 68k -1x z80 -1x Ad65 (oki 6295) -1x OSC 12mhz (near 68k) -1x OSC 4mhz (near z80) -1x ym2151 -1x Afega AF1-CFLK custom chip Smt -1x Afega AF1-CF5K custom chip socketed -2x dipswitch banks - -*/ - -ROM_START( popspops ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "afega4.u112", 0x000000, 0x040000, CRC(db191762) SHA1(901fdc20374473127d694513d4291e29e65eafe8) ) - ROM_LOAD16_BYTE( "afega5.u107", 0x000001, 0x040000, CRC(17e0c48b) SHA1(833c61c4b3ee293b0bcddfa86dfa9c1014375115) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "afega1.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) - - ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_ERASEFF | ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - /* no sprite roms? */ - - ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "afega6.uc8", 0x000000, 0x200000, CRC(6d506c97) SHA1(4909c0b530f9526c8bf76e502c914ef10a50d1fc) ) - ROM_LOAD( "afega7.uc3", 0x200000, 0x200000, CRC(02d7f9de) SHA1(10102ffbf37a57afa300b01cb5067b7e672f4999) ) - - ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "afega3.u4", 0x00000, 0x10000, CRC(f39dd5d2) SHA1(80d05d57a621b0063f63ce05be9314f718b3c111) ) - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "afega2.u95", 0x00000, 0x40000, CRC(ecd8eeac) SHA1(849beba8f04cc322bb8435fa4c26551a6d0dec64) ) -ROM_END - -/* -Mang-chi by Afega - -1x osc 4mhz -1x osc 12mhz -1x tmp68hc0000p-10 -1x z80c006 -1x AD65 (MSM6295) -1x CY5001 (YM2151 rebadged) -2x dipswitch -1x fpga -1x smd ASIC not marked - -Dumped by Corrado Tomaselli -*/ - -ROM_START( mangchi ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "afega9.u112", 0x00000, 0x40000, CRC(0b1517a5) SHA1(50e307641759bb2a35aff56ef9598364740803a0) ) - ROM_LOAD16_BYTE( "afega10.u107", 0x00001, 0x40000, CRC(b1d0f33d) SHA1(68b5be3f7911f7299566c5bf5801e90099433613) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "sound.u92", 0x00000, 0x10000, CRC(bec4f9aa) SHA1(18fb2ee06892983c117a62b70cd72a98f60a08b6) ) - - ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "afega6.uc11", 0x000000, 0x040000, CRC(979efc30) SHA1(227fe1e20137253aac04585d2bbf67091d032e56) ) - ROM_LOAD16_BYTE( "afega7.uc14", 0x000001, 0x040000, CRC(c5cbcc38) SHA1(86070a9598e80f90ec7892d623e1a975ccc68178) ) - - ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "afega5.uc6", 0x000000, 0x80000, CRC(c73261e0) SHA1(0bb66aa315aaecb26169812cf47a6504a74f0db5) ) - ROM_LOAD( "afega4.uc1", 0x080000, 0x80000, CRC(73940917) SHA1(070305c81de959c9d00b6cf1cc20bbafa204976a) ) - - ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "afega2.u95", 0x00000, 0x40000, CRC(78c8c1f9) SHA1(eee0d03164a0ac0ddc5186ab56090320e9d33aa7) ) -ROM_END - -/*************************************************************************** - - Bubble 2000 (c)1998 Tuning - -Bubble 2000 -Tuning, 1998 - -CPU : TMP68HC000P-10 (68000) -SOUND : Z840006 (Z80, 44 pin QFP), YM2151, OKI M6295 -OSC : 4.000MHZ, 12.000MHz -DIPSW : 8 position (x2) -RAM : 6116 (x5, gfx related?) 6116 (x1, sound program ram), 6116 (x1, near rom3) - 64256 (x4, gfx related?), 62256 (x2, main program ram), 6264 (x2, gfx related?) -PALs/PROMs: None -Custom: Unknown 208 pin QFP labelled LTC2 (Graphics generator) - Unknown 68 pin PLCC labelled LTC1 (?, near rom 2 and rom 3) -ROMs : - -Filename Type Possible Use ----------------------------------------------- -rom01.92 27C512 Sound Program -rom02.95 27C020 Oki Samples -rom03.4 27C512 ? (located near rom 1 and 2 and near LTC1) -rom04.1 27C040 \ -rom05.3 27C040 | -rom06.6 27C040 | -rom07.9 27C040 | Gfx -rom08.11 27C040 | -rom09.14 27C040 | -rom12.2 27C040 | -rom13.7 27C040 / - -rom10.112 27C040 \ Main Program -rom11.107 27C040 / - - - - -***************************************************************************/ - -ROM_START( bubl2000 ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "rom10.112", 0x00000, 0x20000, CRC(87f960d7) SHA1(d22fe1740217ac20963bd9003245850598ccecf2) ) - ROM_LOAD16_BYTE( "rom11.107", 0x00001, 0x20000, CRC(b386041a) SHA1(cac36e22a39b5be0c5cd54dce5c912ff811edb28) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "rom01.92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) /* same as the other games on this driver */ - - ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "rom08.11", 0x000000, 0x040000, CRC(519dfd82) SHA1(116b06f6e7b283a5417338f716bbaab6cfadb41d) ) - ROM_LOAD16_BYTE( "rom09.14", 0x000001, 0x040000, CRC(04fcb5c6) SHA1(7594fa6bf98fc01b8848473a222a621c7c9ff00d) ) - - ROM_REGION( 0x300000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "rom06.6", 0x000000, 0x080000, CRC(ac1aabf5) SHA1(abce6ba381b189ab3ec703a8ef74bccbe10876e0) ) - ROM_LOAD( "rom07.9", 0x080000, 0x080000, CRC(69aff769) SHA1(89b98c1023710861e622c8a186b6ec48f5109d42) ) - ROM_LOAD( "rom13.7", 0x100000, 0x080000, CRC(3a5b7226) SHA1(1127740c5bc2f830d73a77c8831e1b0db6606375) ) - ROM_LOAD( "rom04.1", 0x180000, 0x080000, CRC(46acd054) SHA1(1bd7a1b6b2ce6a3daa8c92843c546beb377af8fb) ) - ROM_LOAD( "rom05.3", 0x200000, 0x080000, CRC(37deb6a1) SHA1(3a8a3d961800bb15fd389429b92fa1e5b5f416df) ) - ROM_LOAD( "rom12.2", 0x280000, 0x080000, CRC(1fdc59dd) SHA1(d38e21c878241b4315a36e0590397211ca63f2c4) ) - - ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "rom03.4", 0x00000, 0x10000, CRC(f4c15588) SHA1(a21ae71c0a8c7c1df63f9905fd86303bc2d3991c) ) - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "rom02.95", 0x00000, 0x40000, CRC(859a86e5) SHA1(7b51964227411a40aac54b9cd9ff64f091bdf2b0) ) -ROM_END - - -/* - -Hot Bubble -Afega, 1998 - -PCB Layout ----------- - -Bottom Board - -|------------------------------------------| -| BS902 BS901 Z80 4MHz | -| | -| 6116 6295 | -| 62256 | -| 6116 62256 | -| 6116 | -|J 6116 |------------| | -|A 6116 | 68000 | | -|M |------------| | -|M DSW2 6264 | -|A 6264 | -| | -| |-------| | -| | | | -| | | | -| DSW1 | | 62256 62256 | -| |-------| | -| 6116 62256 62256 | -|12MHz 6116 | -|------------------------------------------| -Notes: - 68000 - running at 12.000MHz - Z80 - running at 4.000MHz - 62256 - 32K x8 SRAM - 6264 - 8K x8 SRAM - 6116 - 2K x8 SRAM - BS901 - YM2151, running at 4.000MHz - BS902 - YM3012 - 6295 - OKI MSM6295 running at 1.000MHz [4/4], sample rate = 1000000 / 132 - * - Unknown QFP208 - VSync - 56.2Hz (measured on 68000 IPL1) - -Top Board - -|---------------------------| -| | -| S1 S2 T1 | -| | -| CR5 CR7 C1 | -| | -| CR6 +CR8 C2 | -| | -| BR1 BR3 | -| | -| +BR2 +BR4 | -| | -| CR1 CR3 |------| | -| | * | | -| CR2 +CR4 | | | -| |------| | -|---------------------------| -Notes: - * - Unknown PLCC68 IC - + - Not populated - -*/ - -ROM_START( hotbubl ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "c1.uc1", 0x00001, 0x40000, CRC(7bb240e9) SHA1(99048fa275182c3da3bfb0dedd790f4b5858bd92) ) - ROM_LOAD16_BYTE( "c2.uc9", 0x00000, 0x40000, CRC(7917b95d) SHA1(0344bae9c373c5943e7693720e5e531bc2e0d7ee) ) - - ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "s1.uc14", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) /* same as the other games on this driver */ - - ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "br1.uc3", 0x000000, 0x080000, CRC(6fc18de4) SHA1(57b4823fc41637780f64eadd1ddf61db531a2599) ) - ROM_LOAD16_BYTE( "br3.uc10", 0x000001, 0x080000, CRC(bb677240) SHA1(d7a26bcd33d491cee441edda6d092a1d08308b0e) ) - - ROM_REGION( 0x300000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "cr6.uc16", 0x100000, 0x080000, CRC(99d6523c) SHA1(0b628585d749e175d5a4dc600af1ba9cb936bfeb) ) - ROM_LOAD( "cr7.uc19", 0x080000, 0x080000, CRC(a89d9ce4) SHA1(5965b2b4b67bc91bc0e7474e593c7e1953b75adc) ) - ROM_LOAD( "cr5.uc15", 0x000000, 0x080000, CRC(65bd5159) SHA1(627ccc0ab131e643c3c52ee9bb41c7a85153c35e) ) - - ROM_LOAD( "cr2.uc7", 0x280000, 0x080000, CRC(27ad6fc8) SHA1(00b1a5c5e1a245590b300b9baf71585d41813e3e) ) - ROM_LOAD( "cr3.uc12", 0x200000, 0x080000, CRC(c841a4f6) SHA1(9b0ee5623c87a0cfc63d3741a65d399bd6593f18) ) - ROM_LOAD( "cr1.uc6", 0x180000, 0x080000, CRC(fc9101d2) SHA1(1d5b8484264b6d73fe032946096a469226cce901) ) - - ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "t1.uc2", 0x00000, 0x10000, CRC(ce683a93) SHA1(aeee2671051f1badf2255375cd7c5fa847d1746c) ) - - ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "s2.uc18", 0x00000, 0x40000, CRC(401c980f) SHA1(e47710c47cfeecce3ccf87f845b219a9c9f21ee3) ) -ROM_END - -static DRIVER_INIT( bubl2000 ) -{ - decryptcode( 23, 22, 21, 20, 19, 18, 13, 14, 15, 16, 17, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); -} - -/* - -Fire Hawk - ESD ---------------- - -- To enter test mode, hold on button 1 at boot up - - -PCB Layout ----------- - -ESD-PROT-002 -|------------------------------------------------| -| FHAWK_S1.U40 FHAWK_S2.U36 | -| 6116 6295 FHAWK_S3.U41 | -| 6295 FHAWK_G1.UC6| -| PAL Z80 FHAWK_G2.UC5| -| 4MHz |--------| | -| | ACTEL | | -|J 6116 62256 |A54SX16A| | -|A 6116 62256 | | | -|M |(QFP208)| | -|M |--------| | -|A DSW1 FHAWK_G3.UC2 | -| DSW2 |--------| | -| DSW3 | ACTEL | | -| 6116 |A54SX16A| | -| 6116 | | | -| 62256 |(QFP208)| | -| FHAWK_P1.U59 |--------| | -| FHAWK_P2.U60 PAL 62256 62256| -| | -|12MHz 62256 68000 62256 62256| -|------------------------------------------------| -Notes: - 68000 clock: 12.000MHz - Z80 clock: 4.000MHz - 6295 clocks: 1.000MHz (both), sample rate = 1000000 / 132 (both) - VSync: 56Hz - -*/ - -ROM_START( firehawk ) - ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "fhawk_p1.u59", 0x00001, 0x80000, CRC(d6d71a50) SHA1(e947720a0600d049b7ea9486442e1ba5582536c2) ) - ROM_LOAD16_BYTE( "fhawk_p2.u60", 0x00000, 0x80000, CRC(9f35d245) SHA1(5a22146f16bff7db924550970ed2a3048bc3edab) ) - - ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "fhawk_s1.u40", 0x00000, 0x20000, CRC(c6609c39) SHA1(fe9b5f6c3ab42c48cb493fecb1181901efabdb58) ) - - ROM_REGION( 0x200000, REGION_GFX1,ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD( "fhawk_g3.uc2", 0x00000, 0x200000, CRC(cae72ff4) SHA1(7dca7164015228ea039deffd234778d0133971ab) ) - - ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "fhawk_g1.uc6", 0x000000, 0x200000, CRC(2ab0b06b) SHA1(25362f6a517f188c62bac28b1a7b7b49622b1518) ) - ROM_LOAD( "fhawk_g2.uc5", 0x200000, 0x200000, CRC(d11bfa20) SHA1(15142004ab49f7f1e666098211dff0835c61df8d) ) - - ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - // Unused - - ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "fhawk_s2.u36", 0x00000, 0x40000, CRC(d16aaaad) SHA1(96ca173ca433164ed0ae51b41b42343bd3cfb5fe) ) - - ROM_REGION( 0x040000, REGION_SOUND2, 0 ) /* Samples */ - ROM_LOAD( "fhawk_s3.u41", 0x00000, 0x40000, CRC(3fdcfac2) SHA1(c331f2ea6fd682cfb00f73f9a5b995408eaab5cf) ) -ROM_END - -/* - -CPU -1x unknown custom chip -1x FPGA -1x oscillator 4.000MHz -1x oscillator 12.000MHz -2x AD-65 - -ROMs -1x TMS27C512 (1) -1x MX27C4000 (3) -2x TMS27C010A (2,4) -2x TMS27C020 (5,6) -3x MX29F1610ML (uc1,uc2,uc3) - -Note -1x JAMMA connector -1x trimmer (volume) -2x8 dip switches - -*/ - -ROM_START( spec2k ) - ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "yonatech5.u124", 0x00000, 0x40000, CRC(72ab5c05) SHA1(182a811982b89b8cda0677547ef0625c274f5c6b) ) - ROM_LOAD16_BYTE( "yonatech6.u120", 0x00001, 0x40000, CRC(7e44bd9c) SHA1(da59685be14a09ec037743fcec34fb293f7d588d) ) - - ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "yonatech1.u103", 0x00000, 0x10000, CRC(ef5acda7) SHA1(e55b36a1598ecbbbad984997d61599dfa3958f60) ) - - ROM_REGION( 0x200000, REGION_GFX1,ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD( "u154.bin", 0x00000, 0x200000, CRC(f77b764e) SHA1(37e249bd4d7174c5232261880ce8debf42723716) ) - - ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "u153.bin", 0x000000, 0x200000, CRC(a00bbf8f) SHA1(622f52ef50d52cdd5e6b250d68439caae5c13404) ) - ROM_LOAD( "u152.bin", 0x200000, 0x200000, CRC(f6423fab) SHA1(253e0791eb58efa1df42e9c74d397e6e65c8c252) ) - - ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "yonatech4.u3", 0x00000, 0x20000, CRC(5626b08e) SHA1(63207ed6b4fc8684690bf3fe1991a4f3babd73e8) ) - - ROM_REGION( 0x020000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "yonatech2.u101", 0x00000, 0x20000, CRC(4160f172) SHA1(0478a5a4bbba115e6cfb5501aa55aa2836c963bf) ) - - ROM_REGION( 0x080000, REGION_SOUND2, 0 ) /* Samples */ - ROM_LOAD( "yonatech3.u106", 0x00000, 0x80000, CRC(6644c404) SHA1(b7ad3f9f08971432d024ef8be3fa3140f0bbae67) ) -ROM_END - -static DRIVER_INIT( spec2k ) -{ - decryptcode( 23, 22, 21, 20, - 19, 18, 17, 13, - 14, 15, 16, 12, - 11, 10, 9, 8, - 7, 6, 5, 4, - 3, 2, 1, 0 ); -} - -/* - 1995, Afega - - 1x TMP68000P-10 (main) - 1x GOLDSTAR Z8400A (sound) - 1x AD-65 (equivalent to OKI6295) - 1x LATTICE pLSI 1032 60LJ A428A48 - 1x oscillator 8.000MHz - 1x oscillator 12.000MHz - - 1x 27256 (SU6) - 1x 27C010 (SU12) - 1x 27C020 (SU13) - 2x 27c4001 (UB11, UB13) - 3x 27C010 (UJ11, UJ12, UJ13) - 1x 27C4001 (UI20) - - 1x JAMMA edge connector - 1x trimmer (volume) -*/ - -ROM_START( twinactn ) - ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */ - ROM_LOAD16_BYTE( "afega.uj13", 0x00000, 0x20000, CRC(9187701d) SHA1(1da8d1e3969f60c7b0521cd22c723cb51619df9d) ) - ROM_LOAD16_BYTE( "afega.uj12", 0x00001, 0x20000, CRC(fe8cff9c) SHA1(a1a04deff9e2cb54c69601898cf4e5133c2bc437) ) - - ROM_REGION( 0x8000, REGION_CPU2, 0 ) /* Z80 Code */ - ROM_LOAD( "afega.su6", 0x0000, 0x8000, CRC(3a52dc88) SHA1(87941987d34d93df6df9ff33ccfbd1f5d4a39c51) ) // 1111xxxxxxxxxxx = 0x00 - - ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ - ROM_LOAD16_BYTE( "afega.ub11", 0x00000, 0x80000, CRC(287f20d8) SHA1(11faa36b97593c0b5cee70343750ae1ecd2f5b71) ) - ROM_LOAD16_BYTE( "afega.ub13", 0x00001, 0x80000, CRC(f525f819) SHA1(78ffcb709a3a900d3851392630a11ab58fc0bc75) ) - - ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ - ROM_LOAD( "afega.ui20", 0x00000, 0x80000, CRC(237c8f92) SHA1(bb3131b450bd78d03b789626a465fb9e7a4604a7) ) - - ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ - ROM_LOAD( "afega.uj11", 0x00000, 0x20000, CRC(3f439e92) SHA1(27e5b1b0aa3b13fa35e3f83793037314b2942aa2) ) - - ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ - ROM_LOAD( "afega.su12", 0x000000, 0x20000, CRC(91d665f3) SHA1(10b5b07ed28ea78b6d3493afc03e003a8468c007) ) - ROM_RELOAD( 0x040000, 0x20000 ) - ROM_RELOAD( 0x080000, 0x20000 ) - ROM_RELOAD( 0x0c0000, 0x20000 ) - ROM_RELOAD( 0x020000, 0x20000 ) - ROM_RELOAD( 0x060000, 0x20000 ) - ROM_LOAD( "afega.su13", 0x0a0000, 0x20000, CRC(30e1c306) SHA1(c859f11fd329793b11e96264e91c79a557b488a4) ) - ROM_CONTINUE( 0x0e0000, 0x20000 ) -ROM_END - -static WRITE16_HANDLER ( test_2a_mustang_w ) -{ - data = data >> 8; - - ram[0x2a/2] = (data << 8) | data; - - if (data == 1 || data == 2) { - ram[0x2e/2] = 10; - ram[0x2c/2] = 0; - } - -} - -static DRIVER_INIT( twinactn ) -{ -#if 0 - UINT16 *rom = (UINT16 *) memory_region(REGION_CPU1); - rom[0x4a2a/2] = 0x4e71; // no freeze on sound test + enable hidden "object test" -#endif - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - // these are the patches for mustang from nmk16.c modified for twinactn - // we need to figure out how this _really_ works - rom[0x85c/2] = 0x4e71; // same as mustang - rom[0x85e/2] = 0x4e71; // same as mustang - rom[0x860/2] = 0x4e71; // same as mustang - rom[0x8c0/2] = 0x0300; // same as mustang - rom[0xbee/2] = 0x0300; // offset shifted.. - rom[0x30c0/2] = 0x0300; // offset shifted.. - - memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf902a, 0xf902b, 0, 0, test_2a_mustang_w ); -} - - -/*************************************************************************** - - - Game Drivers - - -***************************************************************************/ - -GAME( 1995, twinactn, 0, twinactn, twinactn, twinactn, ROT0, "Afega", "Twin Action", 0 ) -GAME( 1997, redhawk, stagger1, stagger1, stagger1, redhawk, ROT270, "Afega", "Red Hawk (US)", GAME_NOT_WORKING ) -GAME( 1997, redhawkb, stagger1, redhawkb, redhawkb, 0, ROT0, "bootleg", "Red Hawk (bootleg)", GAME_NOT_WORKING ) -GAME( 1998, stagger1, 0, stagger1, stagger1, 0, ROT270, "Afega", "Stagger I (Japan)", GAME_NOT_WORKING ) -GAME( 1998, grdnstrm, 0, grdnstrm, grdnstrm, grdnstrm, ROT270, "Afega", "Sen Jin - Guardian Storm (Korea)", GAME_NOT_WORKING ) -GAME( 1998, bubl2000, 0, bubl2000, bubl2000, bubl2000, ROT0, "Tuning", "Bubble 2000", 0 ) // on a tuning board (bootleg?) -GAME( 1998, hotbubl, bubl2000, bubl2000, bubl2000, bubl2000, ROT0, "Pandora", "Hot Bubble" , 0 ) // on an afega board .. -GAME( 1999, popspops, 0, popspops, popspops, grdnstrm, ROT0, "Afega", "Pop's Pop's", 0 ) -GAME( 2000, mangchi, 0, bubl2000, mangchi, bubl2000, ROT0, "Afega", "Mang-Chi", 0 ) -GAME( 2000, spec2k, 0, firehawk, spec2k, spec2k, ORIENTATION_FLIP_Y, "Yonatech", "Spectrum 2000 (Euro)", GAME_NOT_WORKING ) -GAME( 2001, firehawk, 0, firehawk, firehawk, 0, ORIENTATION_FLIP_Y, "ESD", "Fire Hawk", GAME_NOT_WORKING ) diff --git a/src/mame/drivers/nmk16.c b/src/mame/drivers/nmk16.c index d98730c79d7..72bb383a51e 100644 --- a/src/mame/drivers/nmk16.c +++ b/src/mame/drivers/nmk16.c @@ -16,8 +16,8 @@ Macross II 1993 Banpresto 68000 Z80 YM2203 2xOKIM6295 Thunder Dragon 2 1993 NMK 68000 Z80 YM2203 2xOKIM6295 Rapid Hero 1994 NMK 68000 tmp90c841 YM2203 2xOKIM6295 -S.S. Mission 1992 Comad 68000 Z80 OKIM6295 -Air Attack 1996 Comad 68000 Z80 OKIM6295 +S.S. Mission 1992 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon) +Air Attack 1996 Comad 68000 Z80 OKIM6295 (hack of Thunder Dragon) Mustang (bootleg) 68000 Z80 YM3812 OKIM6295 Thunder Dragon (bootleg) 68000 Z80 YM3812 OKIM6295 @@ -124,6 +124,24 @@ mustangb and tdragonb use the Seibu Raiden sound hardware and a modified Z80 program (but the music is intact and recognizable). See audio/seibu.c for more info on this. +--- + +Afega Games + +95 Twin Action this is a hack of Mustang with new graphics +97 Red Hawk US Version of Stagger 1 +98 Sen Jin - Guardian Storm +98 Stagger I + +98 Bubble 2000 By Tuning, but it seems to be the same HW + / Hot Bubble + +00 Spectrum 2000 By YomaTech -- NOTE sprite bugs happen on real hw!! + +01 Fire Hawk By ESD with different sound hardware: 2 M6295, + this doesn't have the glitches present in spec2k + + ********************************************************************/ #include "driver.h" @@ -136,9 +154,46 @@ for more info on this. #include "cpu/pic16c5x/pic16c5x.h" +/********************************************************** + Protection: Memory Scrambling + + Several NMK and Afega games (notably the ones running at + the lower resolution) require strange handling of work + RAM when performing 8-bit writes. This handling breaks + some of the later games if used, but is essential for + Mustang, Black Heart, Task Force Harrier, and the Afega + shooters to work correctly without ROM patches. Tests + on the board would help verify this as correct. + + I'm not sure if this is actually protection, or just + poor board design. + +**********************************************************/ + +UINT16* nmk16_mainram; + +static WRITE16_HANDLER( nmk16_mainram_strange_w ) +{ + UINT16* dstram; + + dstram = nmk16_mainram; + + if (!ACCESSING_MSB) + { + dstram[offset] = (data & 0x00ff) | ((data & 0x00ff)<<8); + } + else if (!ACCESSING_LSB) + { + dstram[offset] = (data & 0xff00) | ((data & 0xff00)>>8); + } + else + { + dstram[offset] = data; + } +} + extern UINT16 *nmk_bgvideoram,*nmk_fgvideoram,*nmk_txvideoram; extern UINT16 *gunnail_scrollram; -extern UINT16 tharrier_scroll; READ16_HANDLER( nmk_bgvideoram_r ); WRITE16_HANDLER( nmk_bgvideoram_w ); @@ -178,6 +233,27 @@ VIDEO_UPDATE( hachamf ); VIDEO_UPDATE( tdragon ); VIDEO_EOF( nmk ); +/* Variables defined in video: */ + +extern UINT16 *afega_vram_0, *afega_scroll_0; +extern UINT16 *afega_vram_1, *afega_scroll_1; + +/* Functions defined in video: */ + +WRITE16_HANDLER( afega_vram_0_w ); +WRITE16_HANDLER( afega_vram_1_w ); +//WRITE16_HANDLER( afega_palette_w ); + +PALETTE_INIT( grdnstrm ); + +VIDEO_START( afega ); +VIDEO_START( firehawk ); +VIDEO_UPDATE( afega ); +VIDEO_UPDATE( redhawkb ); +VIDEO_UPDATE( bubl2000 ); +VIDEO_UPDATE( firehawk ); + + static MACHINE_RESET( nmk16 ) { @@ -215,23 +291,9 @@ static WRITE8_HANDLER ( ssmissin_soundbank_w ) } -static UINT16 *ram; -static WRITE16_HANDLER( tharrier_shared_w ) -{ - if(offset==0xf00/2) - COMBINE_DATA(&tharrier_scroll); - COMBINE_DATA(&ram[offset]); -} -static READ16_HANDLER( tharrier_shared_r ) -{ - if (ACCESSING_MSB && ACCESSING_LSB && (offset==0 || offset==0x6c/2 )) - return (ram[offset]>>8)|(ram[offset]&0xff00); - - return ram[offset]; -} static WRITE16_HANDLER( tharrier_mcu_control_w ) { @@ -252,8 +314,8 @@ static READ16_HANDLER( tharrier_mcu_r ) int res; - if (activecpu_get_pc()==0x8aa) res = (ram[0x064/2])|0x20; /* Task Force Harrier */ - else if (activecpu_get_pc()==0x8ce) res = (ram[0x064/2])|0x60; /* Task Force Harrier */ + if (activecpu_get_pc()==0x8aa) res = (nmk16_mainram[0x9064/2])|0x20; /* Task Force Harrier */ + else if (activecpu_get_pc()==0x8ce) res = (nmk16_mainram[0x9064/2])|0x60; /* Task Force Harrier */ else { res = to_main[prot_count++]; @@ -303,6 +365,15 @@ static WRITE8_HANDLER( tharrier_oki6295_bankswitch_1_w ) memcpy(rom + 0x20000,rom + 0x40000 + data * 0x20000,0x20000); } +static WRITE16_HANDLER( afega_soundlatch_w ) +{ + if (ACCESSING_LSB) + { + soundlatch_w(0,data&0xff); + cpunum_set_input_line(1, 0, HOLD_LINE); + } +} + /***************************************************************************/ static ADDRESS_MAP_START( vandyke_readmem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -315,9 +386,7 @@ static ADDRESS_MAP_START( vandyke_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09d000, 0x09d7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( vandyke_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -330,16 +399,8 @@ static ADDRESS_MAP_START( vandyke_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x094000, 0x097fff) AM_WRITE(MWA16_RAM) /* what is this */ AM_RANGE(0x09d000, 0x09d7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) /* not tested in tests .. hardly used probably some registers not ram */ ADDRESS_MAP_END -static READ16_HANDLER(logr) -{ -//logerror("Read input port 1 %05x\n",activecpu_get_pc()); -return ~input_port_0_word_r(0,0); -} static ADDRESS_MAP_START( manybloc_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) @@ -351,9 +412,7 @@ static ADDRESS_MAP_START( manybloc_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09c000, 0x09cfff) AM_READ(MRA16_RAM) AM_RANGE(0x09d000, 0x09d7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( manybloc_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -367,9 +426,6 @@ static ADDRESS_MAP_START( manybloc_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09c000, 0x09cfff) AM_WRITE(manybloc_scroll_w) AM_BASE(&gunnail_scrollram) AM_RANGE(0x09d000, 0x09d7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) ADDRESS_MAP_END static ADDRESS_MAP_START( tharrier_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 ) @@ -404,16 +460,16 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tharrier_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) - AM_RANGE(0x080000, 0x080001) AM_READ(logr)//input_port_0_word_r }, + AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) AM_RANGE(0x080002, 0x080003) AM_READ(tharrier_mcu_r) //input_port_1_word_r }, AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) AM_RANGE(0x08000e, 0x08000f) AM_READ(soundlatch2_word_r) /* from Z80 */ + AM_RANGE(0x080202, 0x080203) AM_READ(input_port_3_word_r ) + AM_RANGE(0x088000, 0x0883ff) AM_READ(MRA16_RAM) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09d000, 0x09d7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(tharrier_shared_r)//MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( tharrier_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -424,66 +480,78 @@ static ADDRESS_MAP_START( tharrier_writemem, ADDRESS_SPACE_PROGRAM, 16 ) // AM_RANGE(0x080018, 0x080019) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x08001e, 0x08001f) AM_WRITE(soundlatch_word_w) AM_RANGE(0x088000, 0x0883ff) AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) - AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) +// AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(MWA16_NOP) /* Unused txvideoram area? */ AM_RANGE(0x09d000, 0x09d7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(tharrier_shared_w) AM_BASE(&ram) /* Work RAM again (fe000-fefff is shared with the sound CPU) */ ADDRESS_MAP_END //Read input port 1 030c8/ BAD //3478 GOOD -static ADDRESS_MAP_START( mustang_readmem, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) +static ADDRESS_MAP_START( mustang_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) - AM_RANGE(0x08000e, 0x08000f) AM_READ(NMK004_r) -// AM_RANGE(0x08000e, 0x08000f) AM_READ(soundlatch2_word_r) /* from Z80 bootleg only? */ - AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) - AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) - AM_RANGE(0x09c000, 0x09c7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( mustang_writemem, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) - AM_RANGE(0x08000e, 0x08000f) AM_WRITE(MWA16_NOP) + AM_RANGE(0x08000e, 0x08000f) AM_READWRITE(NMK004_r, MWA16_NOP) AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x080016, 0x080017) AM_WRITE(MWA16_NOP) // frame number? AM_RANGE(0x08001e, 0x08001f) AM_WRITE(NMK004_w) - AM_RANGE(0x088000, 0x0887ff) AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x088000, 0x0887ff) AM_RAM AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) AM_RANGE(0x08c002, 0x08c087) AM_WRITE(MWA16_NOP) // ?? - AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) - AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM */ + AM_RANGE(0x090000, 0x093fff) AM_RAM AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x09c000, 0x09c7ff) AM_RAM AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END -static ADDRESS_MAP_START( mustangb_writemem, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) +static ADDRESS_MAP_START( mustangb_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM + AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) + AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) + AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) + AM_RANGE(0x08000e, 0x08000f) AM_READWRITE(MRA16_NOP, MWA16_NOP) AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x080016, 0x080017) AM_WRITE(MWA16_NOP) // frame number? AM_RANGE(0x08001e, 0x08001f) AM_WRITE(seibu_main_mustb_w) - AM_RANGE(0x088000, 0x0887ff) AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x088000, 0x0887ff) AM_RAM AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) - AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM */ + AM_RANGE(0x08c002, 0x08c087) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0x090000, 0x093fff) AM_RAM AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x09c000, 0x09c7ff) AM_RAM AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END + +static ADDRESS_MAP_START( twinactn_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM + AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) + AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) + AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) + AM_RANGE(0x08000e, 0x08000f) AM_READWRITE(MRA16_NOP, MWA16_NOP) + AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) + AM_RANGE(0x080016, 0x080017) AM_WRITE(MWA16_NOP) // frame number? + AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w) + AM_RANGE(0x088000, 0x0887ff) AM_RAM AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) + AM_RANGE(0x08c000, 0x08c001) AM_WRITE(mustang_scroll_w) + AM_RANGE(0x08c002, 0x08c087) AM_WRITE(MWA16_NOP) // ?? + AM_RANGE(0x090000, 0x093fff) AM_RAM AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x09c000, 0x09c7ff) AM_RAM AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) +ADDRESS_MAP_END + + + + + + + static ADDRESS_MAP_START( acrobatm_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x3ffff) AM_READ(MRA16_ROM) - AM_RANGE(0x80000, 0x8ffff) AM_READ(MRA16_RAM) + + AM_RANGE(0x80000, 0x8ffff) AM_RAM AM_BASE(&nmk16_mainram) + AM_RANGE(0xc0000, 0xc0001) AM_READ(input_port_0_word_r) AM_RANGE(0xc0002, 0xc0003) AM_READ(input_port_1_word_r) AM_RANGE(0xc0008, 0xc0009) AM_READ(input_port_2_word_r) @@ -496,8 +564,6 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( acrobatm_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x3ffff) AM_WRITE(MWA16_ROM) - AM_RANGE(0x88000, 0x88fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x80000, 0x8ffff) AM_WRITE(MWA16_RAM) AM_RANGE(0xc0014, 0xc0015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0xc0016, 0xc0017) AM_WRITENOP AM_RANGE(0xc0018, 0xc0019) AM_WRITE(nmk_tilebank_w) @@ -518,9 +584,7 @@ static ADDRESS_MAP_START( bioship_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09c000, 0x09c7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( bioship_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -533,9 +597,6 @@ static ADDRESS_MAP_START( bioship_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08c010, 0x08c017) AM_WRITE(bioship_scroll_w) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) /* Work RAM again (fe000-fefff is shared with the sound CPU) */ ADDRESS_MAP_END /****************************************************************************************** @@ -554,29 +615,29 @@ anything to compare,infact ******************************************************************************************/ -UINT16 *nmk16_mcu_shared_ram; -UINT16 *nmk16_mcu_work_ram; #define PROT_JSR(_offs_,_protvalue_,_pc_) \ - if(nmk16_mcu_shared_ram[(_offs_)/2] == _protvalue_) \ + if(nmk16_mainram[(_offs_)/2] == _protvalue_) \ { \ - nmk16_mcu_shared_ram[(_offs_)/2] = 0xffff; /*(MCU job done)*/ \ - nmk16_mcu_shared_ram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\ - nmk16_mcu_shared_ram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\ - nmk16_mcu_shared_ram[(_offs_+6-0x10)/2] = _pc_; /*LO-DWORD*/\ + nmk16_mainram[(_offs_)/2] = 0xffff; /*(MCU job done)*/ \ + nmk16_mainram[(_offs_+2-0x10)/2] = 0x4ef9;/*JMP*/\ + nmk16_mainram[(_offs_+4-0x10)/2] = 0x0000;/*HI-DWORD*/\ + nmk16_mainram[(_offs_+6-0x10)/2] = _pc_; /*LO-DWORD*/\ } \ #define PROT_INPUT(_offs_,_protvalue_,_protinput_,_input_) \ - if(nmk16_mcu_shared_ram[_offs_] == _protvalue_) \ + if(nmk16_mainram[_offs_] == _protvalue_) \ {\ - nmk16_mcu_shared_ram[_protinput_] = ((_input_ & 0xffff0000)>>16);\ - nmk16_mcu_shared_ram[_protinput_+1] = (_input_ & 0x0000ffff);\ + nmk16_mainram[_protinput_] = ((_input_ & 0xffff0000)>>16);\ + nmk16_mainram[_protinput_+1] = (_input_ & 0x0000ffff);\ } +/* static READ16_HANDLER( mcu_shared_r ) { return nmk16_mcu_shared_ram[offset]; } +*/ //td - hmf //008D9E - 00796e @@ -642,158 +703,151 @@ f0 - player bombs (8c36) */ -static WRITE16_HANDLER( hachamf_mcu_shared_w ) +static WRITE16_HANDLER( hachamf_mainram_w ) { - COMBINE_DATA(&nmk16_mcu_shared_ram[offset]); + COMBINE_DATA(&nmk16_mainram[offset]); switch(offset) { - case 0x058/2: PROT_INPUT(0x058/2,0xc71f,0x000/2,0x00080000); break; - case 0x182/2: PROT_INPUT(0x182/2,0x865d,0x004/2,0x00080002); break; - case 0x51e/2: PROT_INPUT(0x51e/2,0x0f82,0x008/2,0x00080008); break; - case 0x6b4/2: PROT_INPUT(0x6b4/2,0x79be,0x00c/2,0x0008000a); break; - case 0x10e/2: PROT_JSR(0x10e,0x8007,0x870a);//870a not 9d66 - PROT_JSR(0x10e,0x8000,0xd9c6); break; - case 0x11e/2: PROT_JSR(0x11e,0x8038,0x972a);//972a - PROT_JSR(0x11e,0x8031,0xd1f8); break; - case 0x12e/2: PROT_JSR(0x12e,0x8019,0x9642);//OK-9642 - PROT_JSR(0x12e,0x8022,0xda06); break; - case 0x13e/2: PROT_JSR(0x13e,0x802a,0x9d66);//9d66 not 9400 - OK - PROT_JSR(0x13e,0x8013,0x81aa); break; - case 0x14e/2: PROT_JSR(0x14e,0x800b,0xb3f2);//b3f2 - OK - PROT_JSR(0x14e,0x8004,0x8994); break; - case 0x15e/2: PROT_JSR(0x15e,0x803c,0xb59e);//b59e - OK - PROT_JSR(0x15e,0x8035,0x8d0c); break; - case 0x16e/2: PROT_JSR(0x16e,0x801d,0x9ac2);//9ac2 - OK - PROT_JSR(0x16e,0x8026,0x8c36); break; - case 0x17e/2: PROT_JSR(0x17e,0x802e,0xc366);//c366 - OK - PROT_JSR(0x17e,0x8017,0x870a); break; - case 0x18e/2: PROT_JSR(0x18e,0x8004,0xd620); //unused - PROT_JSR(0x18e,0x8008,0x972a); break; //unused - case 0x19e/2: PROT_JSR(0x19e,0x8030,0xd9c6);//OK-d9c6 - PROT_JSR(0x19e,0x8039,0x9642); break; - case 0x1ae/2: PROT_JSR(0x1ae,0x8011,0xd1f8);//d1f8 not c67e - PROT_JSR(0x1ae,0x802a,0x9d66); break; - case 0x1be/2: PROT_JSR(0x1be,0x8022,0xda06);//da06 - PROT_JSR(0x1be,0x801b,0xb3f2); break; - case 0x1ce/2: PROT_JSR(0x1ce,0x8003,0x81aa);//81aa - PROT_JSR(0x1ce,0x800c,0xb59e); break; - case 0x1de/2: PROT_JSR(0x1de,0x8034,0x8994);//8994 - OK - PROT_JSR(0x1de,0x803d,0x9ac2); break; - case 0x1ee/2: PROT_JSR(0x1ee,0x8015,0x8d0c);//8d0c not 82f6 - PROT_JSR(0x1ee,0x802e,0xc366); break; - case 0x1fe/2: PROT_JSR(0x1fe,0x8026,0x8c36);//8c36 - PROT_JSR(0x1fe,0x8016,0xd620); break; //unused - case 0xf00/2: - if(nmk16_mcu_shared_ram[0xf00/2] == 0x60fe) + case 0xe058/2: PROT_INPUT(0xe058/2,0xc71f,0xe000/2,0x00080000); break; + case 0xe182/2: PROT_INPUT(0xe182/2,0x865d,0xe004/2,0x00080002); break; + case 0xe51e/2: PROT_INPUT(0xe51e/2,0x0f82,0xe008/2,0x00080008); break; + case 0xe6b4/2: PROT_INPUT(0xe6b4/2,0x79be,0xe00c/2,0x0008000a); break; + case 0xe10e/2: PROT_JSR(0xe10e,0x8007,0x870a);//870a not 9d66 + PROT_JSR(0xe10e,0x8000,0xd9c6); break; + case 0xe11e/2: PROT_JSR(0xe11e,0x8038,0x972a);//972a + PROT_JSR(0xe11e,0x8031,0xd1f8); break; + case 0xe12e/2: PROT_JSR(0xe12e,0x8019,0x9642);//OK-9642 + PROT_JSR(0xe12e,0x8022,0xda06); break; + case 0xe13e/2: PROT_JSR(0xe13e,0x802a,0x9d66);//9d66 not 9400 - OK + PROT_JSR(0xe13e,0x8013,0x81aa); break; + case 0xe14e/2: PROT_JSR(0xe14e,0x800b,0xb3f2);//b3f2 - OK + PROT_JSR(0xe14e,0x8004,0x8994); break; + case 0xe15e/2: PROT_JSR(0xe15e,0x803c,0xb59e);//b59e - OK + PROT_JSR(0xe15e,0x8035,0x8d0c); break; + case 0xe16e/2: PROT_JSR(0xe16e,0x801d,0x9ac2);//9ac2 - OK + PROT_JSR(0xe16e,0x8026,0x8c36); break; + case 0xe17e/2: PROT_JSR(0xe17e,0x802e,0xc366);//c366 - OK + PROT_JSR(0xe17e,0x8017,0x870a); break; + case 0xe18e/2: PROT_JSR(0xe18e,0x8004,0xd620); //unused + PROT_JSR(0xe18e,0x8008,0x972a); break; //unused + case 0xe19e/2: PROT_JSR(0xe19e,0x8030,0xd9c6);//OK-d9c6 + PROT_JSR(0xe19e,0x8039,0x9642); break; + case 0xe1ae/2: PROT_JSR(0xe1ae,0x8011,0xd1f8);//d1f8 not c67e + PROT_JSR(0xe1ae,0x802a,0x9d66); break; + case 0xe1be/2: PROT_JSR(0xe1be,0x8022,0xda06);//da06 + PROT_JSR(0xe1be,0x801b,0xb3f2); break; + case 0xe1ce/2: PROT_JSR(0xe1ce,0x8003,0x81aa);//81aa + PROT_JSR(0xe1ce,0x800c,0xb59e); break; + case 0xe1de/2: PROT_JSR(0xe1de,0x8034,0x8994);//8994 - OK + PROT_JSR(0xe1de,0x803d,0x9ac2); break; + case 0xe1ee/2: PROT_JSR(0xe1ee,0x8015,0x8d0c);//8d0c not 82f6 + PROT_JSR(0xe1ee,0x802e,0xc366); break; + case 0xe1fe/2: PROT_JSR(0xe1fe,0x8026,0x8c36);//8c36 + PROT_JSR(0xe1fe,0x8016,0xd620); break; //unused + case 0xef00/2: + if(nmk16_mainram[0xef00/2] == 0x60fe) { - nmk16_mcu_shared_ram[0xf00/2] = 0x0000; //this is the coin counter - nmk16_mcu_shared_ram[0xf02/2] = 0x0000; - nmk16_mcu_shared_ram[0xf04/2] = 0x4ef9; - nmk16_mcu_shared_ram[0xf06/2] = 0x0000; - nmk16_mcu_shared_ram[0xf08/2] = 0x7dc2; + nmk16_mainram[0xef00/2] = 0x0000; //this is the coin counter + nmk16_mainram[0xef02/2] = 0x0000; + nmk16_mainram[0xef04/2] = 0x4ef9; + nmk16_mainram[0xef06/2] = 0x0000; + nmk16_mainram[0xef08/2] = 0x7dc2; } break; } } -static ADDRESS_MAP_START( hachamf_readmem, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) + +static ADDRESS_MAP_START( hachamf_map, ADDRESS_SPACE_PROGRAM, 16 ) + AM_RANGE(0x000000, 0x03ffff) AM_ROM + /* I/O Region */ AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) AM_RANGE(0x080008, 0x080009) AM_READ(input_port_2_word_r) AM_RANGE(0x08000a, 0x08000b) AM_READ(input_port_3_word_r) AM_RANGE(0x08000e, 0x08000f) AM_READ(NMK004_r) - AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) - AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) - AM_RANGE(0x09c000, 0x09c7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - //AM_RANGE(0x0fe000, 0x0fe00b) AM_READ(hachamf_protection_hack_r) - AM_RANGE(0x0f9000, 0x0fdfff) AM_READ(MRA16_RAM) - AM_RANGE(0x0fe000, 0x0fefff) AM_READ(MRA16_RAM) - AM_RANGE(0x0ff000, 0x0fffff) AM_READ(MRA16_RAM) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( hachamf_writemem, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w) AM_RANGE(0x080018, 0x080019) AM_WRITE(nmk_tilebank_w) AM_RANGE(0x08001e, 0x08001f) AM_WRITE(NMK004_w) - AM_RANGE(0x088000, 0x0887ff) AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) + /* Video Region */ + AM_RANGE(0x088000, 0x0887ff) AM_RAM AM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) - AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) - AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fdfff) AM_WRITE(MWA16_RAM) AM_BASE(&nmk16_mcu_work_ram) /* Work RAM */ - AM_RANGE(0x0fe000, 0x0fefff) AM_RAM AM_READWRITE(mcu_shared_r,hachamf_mcu_shared_w) AM_BASE(&nmk16_mcu_shared_ram) /* Work RAM */ - AM_RANGE(0x0ff000, 0x0fffff) AM_WRITE(MWA16_RAM) /* Work RAM */ + AM_RANGE(0x090000, 0x093fff) AM_RAM AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) + AM_RANGE(0x09c000, 0x09c7ff) AM_RAM AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) + /* Main RAM, inc sprites, shared with MCU */ + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(hachamf_mainram_w) AM_BASE(&nmk16_mainram) // ram is shared with MCU ADDRESS_MAP_END -static WRITE16_HANDLER( tdragon_mcu_shared_w ) + + +static WRITE16_HANDLER( tdragon_mainram_w ) { - COMBINE_DATA(&nmk16_mcu_shared_ram[offset]); + COMBINE_DATA(&nmk16_mainram[offset]); switch(offset) { - case 0x066/2: PROT_INPUT(0x066/2,0xe23e,0x000/2,0x000c0000); break; - case 0x144/2: PROT_INPUT(0x144/2,0xf54d,0x004/2,0x000c0002); break; - case 0x60e/2: PROT_INPUT(0x60e/2,0x067c,0x008/2,0x000c0008); break; - case 0x714/2: PROT_INPUT(0x714/2,0x198b,0x00c/2,0x000c000a); break; - case 0x70e/2: PROT_JSR(0x70e,0x8007,0x9e22); - PROT_JSR(0x70e,0x8000,0xd518); break; - case 0x71e/2: PROT_JSR(0x71e,0x8038,0xaa0a); - PROT_JSR(0x71e,0x8031,0x8e7c); break; - case 0x72e/2: PROT_JSR(0x72e,0x8019,0xac48); - PROT_JSR(0x72e,0x8022,0xd558); break; - case 0x73e/2: PROT_JSR(0x73e,0x802a,0xb110); - PROT_JSR(0x73e,0x8013,0x96da); break; - case 0x74e/2: PROT_JSR(0x74e,0x800b,0xb9b2); - PROT_JSR(0x74e,0x8004,0xa062); break; - case 0x75e/2: PROT_JSR(0x75e,0x803c,0xbb4c); - PROT_JSR(0x75e,0x8035,0xa154); break; - case 0x76e/2: PROT_JSR(0x76e,0x801d,0xafa6); - PROT_JSR(0x76e,0x8026,0xa57a); break; - case 0x77e/2: PROT_JSR(0x77e,0x802e,0xc6a4); - PROT_JSR(0x77e,0x8017,0x9e22); break; - case 0x78e/2: PROT_JSR(0x78e,0x8004,0xaa0a); - PROT_JSR(0x78e,0x8008,0xaa0a); break; - case 0x79e/2: PROT_JSR(0x79e,0x8030,0xd518); - PROT_JSR(0x79e,0x8039,0xac48); break; - case 0x7ae/2: PROT_JSR(0x7ae,0x8011,0x8e7c); - PROT_JSR(0x7ae,0x802a,0xb110); break; - case 0x7be/2: PROT_JSR(0x7be,0x8022,0xd558); - PROT_JSR(0x7be,0x801b,0xb9b2); break; - case 0x7ce/2: PROT_JSR(0x7ce,0x8003,0x96da); - PROT_JSR(0x7ce,0x800c,0xbb4c); break; - case 0x7de/2: PROT_JSR(0x7de,0x8034,0xa062); - PROT_JSR(0x7de,0x803d,0xafa6); break; - case 0x7ee/2: PROT_JSR(0x7ee,0x8015,0xa154); - PROT_JSR(0x7ee,0x802e,0xc6a4); break; - case 0x7fe/2: PROT_JSR(0x7fe,0x8026,0xa57a); - PROT_JSR(0x7fe,0x8016,0xa57a); break; - case 0xf00/2: - if(nmk16_mcu_shared_ram[0xf00/2] == 0x60fe) + case 0xe066/2: PROT_INPUT(0xe066/2,0xe23e,0xe000/2,0x000c0000); break; + case 0xe144/2: PROT_INPUT(0xe144/2,0xf54d,0xe004/2,0x000c0002); break; + case 0xe60e/2: PROT_INPUT(0xe60e/2,0x067c,0xe008/2,0x000c0008); break; + case 0xe714/2: PROT_INPUT(0xe714/2,0x198b,0xe00c/2,0x000c000a); break; + case 0xe70e/2: PROT_JSR(0xe70e,0x8007,0x9e22); + PROT_JSR(0xe70e,0x8000,0xd518); break; + case 0xe71e/2: PROT_JSR(0xe71e,0x8038,0xaa0a); + PROT_JSR(0xe71e,0x8031,0x8e7c); break; + case 0xe72e/2: PROT_JSR(0xe72e,0x8019,0xac48); + PROT_JSR(0xe72e,0x8022,0xd558); break; + case 0xe73e/2: PROT_JSR(0xe73e,0x802a,0xb110); + PROT_JSR(0xe73e,0x8013,0x96da); break; + case 0xe74e/2: PROT_JSR(0xe74e,0x800b,0xb9b2); + PROT_JSR(0xe74e,0x8004,0xa062); break; + case 0xe75e/2: PROT_JSR(0xe75e,0x803c,0xbb4c); + PROT_JSR(0xe75e,0x8035,0xa154); break; + case 0xe76e/2: PROT_JSR(0xe76e,0x801d,0xafa6); + PROT_JSR(0xe76e,0x8026,0xa57a); break; + case 0xe77e/2: PROT_JSR(0xe77e,0x802e,0xc6a4); + PROT_JSR(0xe77e,0x8017,0x9e22); break; + case 0xe78e/2: PROT_JSR(0xe78e,0x8004,0xaa0a); + PROT_JSR(0xe78e,0x8008,0xaa0a); break; + case 0xe79e/2: PROT_JSR(0xe79e,0x8030,0xd518); + PROT_JSR(0xe79e,0x8039,0xac48); break; + case 0xe7ae/2: PROT_JSR(0xe7ae,0x8011,0x8e7c); + PROT_JSR(0xe7ae,0x802a,0xb110); break; + case 0xe7be/2: PROT_JSR(0xe7be,0x8022,0xd558); + PROT_JSR(0xe7be,0x801b,0xb9b2); break; + case 0xe7ce/2: PROT_JSR(0xe7ce,0x8003,0x96da); + PROT_JSR(0xe7ce,0x800c,0xbb4c); break; + case 0xe7de/2: PROT_JSR(0xe7de,0x8034,0xa062); + PROT_JSR(0xe7de,0x803d,0xafa6); break; + case 0xe7ee/2: PROT_JSR(0xe7ee,0x8015,0xa154); + PROT_JSR(0xe7ee,0x802e,0xc6a4); break; + case 0xe7fe/2: PROT_JSR(0xe7fe,0x8026,0xa57a); + PROT_JSR(0xe7fe,0x8016,0xa57a); break; + case 0xef00/2: + if(nmk16_mainram[0xef00/2] == 0x60fe) { - nmk16_mcu_shared_ram[0xf00/2] = 0x0000; //this is the coin counter - nmk16_mcu_shared_ram[0xf02/2] = 0x0000; - nmk16_mcu_shared_ram[0xf04/2] = 0x4ef9; - nmk16_mcu_shared_ram[0xf06/2] = 0x0000; - nmk16_mcu_shared_ram[0xf08/2] = 0x92f4; + nmk16_mainram[0xef00/2] = 0x0000; //this is the coin counter + nmk16_mainram[0xef02/2] = 0x0000; + nmk16_mainram[0xef04/2] = 0x4ef9; + nmk16_mainram[0xef06/2] = 0x0000; + nmk16_mainram[0xef08/2] = 0x92f4; } break; } } + static ADDRESS_MAP_START( tdragon_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) AM_RANGE(0x044022, 0x044023) AM_READ(MRA16_NOP) /* No Idea */ - AM_RANGE(0x0b0000, 0x0b7fff) AM_READ(MRA16_RAM) /* Work RAM */ - AM_RANGE(0x0b8000, 0x0b8fff) AM_READ(MRA16_RAM) /* Sprite RAM */ - AM_RANGE(0x0b9000, 0x0bdfff) AM_READ(MRA16_RAM) /* Work RAM */ - AM_RANGE(0x0be000, 0x0befff) AM_READ(MRA16_RAM) /* Work RAM */ - AM_RANGE(0x0bf000, 0x0bffff) AM_READ(MRA16_RAM) /* Work RAM */ +// AM_RANGE(0x0b0000, 0x0b7fff) AM_READ(MRA16_RAM) /* Work RAM */ +// AM_RANGE(0x0b8000, 0x0b8fff) AM_READ(MRA16_RAM) /* Sprite RAM */ +// AM_RANGE(0x0b9000, 0x0bdfff) AM_READ(MRA16_RAM) /* Work RAM */ +// AM_RANGE(0x0be000, 0x0befff) AM_READ(MRA16_RAM) /* Work RAM */ +// AM_RANGE(0x0bf000, 0x0bffff) AM_READ(MRA16_RAM) /* Work RAM */ + AM_RANGE(0x0b0000, 0x0bffff) AM_RAM AM_WRITE( tdragon_mainram_w ) AM_BASE(&nmk16_mainram) + + AM_RANGE(0x0c8000, 0x0c87ff) AM_READ(MRA16_RAM) /* Palette RAM */ AM_RANGE(0x0c0000, 0x0c0001) AM_READ(input_port_0_word_r) AM_RANGE(0x0c0002, 0x0c0003) AM_READ(input_port_1_word_r) @@ -806,11 +860,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tdragon_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) - AM_RANGE(0x0b0000, 0x0b7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0b8000, 0x0b8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Sprite RAM */ - AM_RANGE(0x0b9000, 0x0bdfff) AM_WRITE(MWA16_RAM) AM_BASE(&nmk16_mcu_work_ram) /* Work RAM */ - AM_RANGE(0x0be000, 0x0befff) AM_RAM AM_READWRITE(mcu_shared_r,tdragon_mcu_shared_w) AM_BASE(&nmk16_mcu_shared_ram) /* Work RAM */ - AM_RANGE(0x0bf000, 0x0bffff) AM_WRITE(MWA16_RAM) /* Work RAM */ +// AM_RANGE(0x0b0000, 0x0b7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ +// AM_RANGE(0x0b8000, 0x0b8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Sprite RAM */ +// AM_RANGE(0x0b9000, 0x0bdfff) AM_WRITE(MWA16_RAM) AM_BASE(&nmk16_mcu_work_ram) /* Work RAM */ +// AM_RANGE(0x0be000, 0x0befff) AM_RAM AM_READWRITE(mcu_shared_r,tdragon_mcu_shared_w) AM_BASE(&nmk16_mcu_shared_ram) /* Work RAM */ +// AM_RANGE(0x0bf000, 0x0bffff) AM_WRITE(MWA16_RAM) /* Work RAM */ AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */ AM_RANGE(0x0c0018, 0x0c0019) AM_WRITE(nmk_tilebank_w) /* Tile Bank ? */ AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(NMK004_w) @@ -822,9 +876,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( tdragonb_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) - AM_RANGE(0x0b0000, 0x0b7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0b8000, 0x0b8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Sprite RAM */ - AM_RANGE(0x0b9000, 0x0bffff) AM_WRITE(MWA16_RAM) /* Work RAM */ + AM_RANGE(0x0b0000, 0x0bffff) AM_RAM AM_BASE(&nmk16_mainram) AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */ AM_RANGE(0x0c0018, 0x0c0019) AM_WRITE(nmk_tilebank_w) /* Tile Bank ? */ AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(seibu_main_mustb_w) @@ -836,9 +888,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ssmissin_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM) - AM_RANGE(0x0b0000, 0x0b7fff) AM_READ(MRA16_RAM) /* Work RAM */ - AM_RANGE(0x0b8000, 0x0b8fff) AM_READ(MRA16_RAM) /* Sprite RAM */ - AM_RANGE(0x0b9000, 0x0bffff) AM_READ(MRA16_RAM) /* Work RAM */ + AM_RANGE(0x0b0000, 0x0bffff) AM_RAM AM_BASE(&nmk16_mainram) AM_RANGE(0x0c8000, 0x0c87ff) AM_READ(MRA16_RAM) /* Palette RAM */ AM_RANGE(0x0c0000, 0x0c0001) AM_READ(input_port_0_word_r) AM_RANGE(0x0c0004, 0x0c0005) AM_READ(input_port_1_word_r) @@ -852,9 +902,6 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ssmissin_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM) - AM_RANGE(0x0b0000, 0x0b7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0b8000, 0x0b8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) /* Sprite RAM */ - AM_RANGE(0x0b9000, 0x0bffff) AM_WRITE(MWA16_RAM) /* Work RAM */ AM_RANGE(0x0c0014, 0x0c0015) AM_WRITE(nmk_flipscreen_w) /* Maybe */ AM_RANGE(0x0c0018, 0x0c0019) AM_WRITE(nmk_tilebank_w) /* Tile Bank ? */ AM_RANGE(0x0c001e, 0x0c001f) AM_WRITE(ssmissin_sound_w) @@ -894,9 +941,7 @@ static ADDRESS_MAP_START( strahl_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x90000, 0x93fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x94000, 0x97fff) AM_READ(nmk_fgvideoram_r) AM_RANGE(0x9c000, 0x9c7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0xf0000, 0xf7fff) AM_READ(MRA16_RAM) - AM_RANGE(0xf8000, 0xfefff) AM_READ(MRA16_RAM) - AM_RANGE(0xff000, 0xfffff) AM_READ(MRA16_RAM) + AM_RANGE(0xf0000, 0xfffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( strahl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -910,9 +955,6 @@ static ADDRESS_MAP_START( strahl_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x90000, 0x93fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x94000, 0x97fff) AM_WRITE(nmk_fgvideoram_w) AM_BASE(&nmk_fgvideoram) AM_RANGE(0x9c000, 0x9c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0xf0000, 0xf7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0xf8000, 0xfefff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM again */ - AM_RANGE(0xff000, 0xfffff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) ADDRESS_MAP_END static ADDRESS_MAP_START( macross_readmem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -925,9 +967,7 @@ static ADDRESS_MAP_START( macross_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09c000, 0x09c7ff) AM_READ(nmk_txvideoram_r) - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( macross_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -940,9 +980,6 @@ static ADDRESS_MAP_START( macross_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x08c000, 0x08c007) AM_WRITE(nmk_scroll_w) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09c000, 0x09c7ff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM again */ ADDRESS_MAP_END static ADDRESS_MAP_START( gunnail_readmem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -956,9 +993,7 @@ static ADDRESS_MAP_START( gunnail_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x093fff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09c000, 0x09cfff) AM_READ(nmk_txvideoram_r) AM_RANGE(0x09d000, 0x09dfff) AM_READ(nmk_txvideoram_r) /* mirror */ - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( gunnail_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -974,9 +1009,6 @@ static ADDRESS_MAP_START( gunnail_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x090000, 0x093fff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09c000, 0x09cfff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x09d000, 0x09dfff) AM_WRITE(nmk_txvideoram_w) /* mirror */ - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM again */ ADDRESS_MAP_END static ADDRESS_MAP_START( macross2_readmem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -990,9 +1022,7 @@ static ADDRESS_MAP_START( macross2_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x140000, 0x14ffff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x170000, 0x170fff) AM_READ(nmk_txvideoram_r) AM_RANGE(0x171000, 0x171fff) AM_READ(nmk_txvideoram_r) /* mirror */ - AM_RANGE(0x1f0000, 0x1f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x1f8000, 0x1f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x1f9000, 0x1fffff) AM_READ(MRA16_RAM) + AM_RANGE(0x1f0000, 0x1fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END static ADDRESS_MAP_START( macross2_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -1007,9 +1037,6 @@ static ADDRESS_MAP_START( macross2_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x140000, 0x14ffff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x170000, 0x170fff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x171000, 0x171fff) AM_WRITE(nmk_txvideoram_w) /* mirror */ - AM_RANGE(0x1f0000, 0x1f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x1f8000, 0x1f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x1f9000, 0x1fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM again */ ADDRESS_MAP_END static ADDRESS_MAP_START( raphero_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -1023,9 +1050,6 @@ static ADDRESS_MAP_START( raphero_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x140000, 0x14ffff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x170000, 0x170fff) AM_WRITE(nmk_txvideoram_w) AM_BASE(&nmk_txvideoram) AM_RANGE(0x171000, 0x171fff) AM_WRITE(nmk_txvideoram_w) /* mirror */ - AM_RANGE(0x1f0000, 0x1f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x1f8000, 0x1f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x1f9000, 0x1fffff) AM_WRITE(MWA16_RAM) AM_BASE(&ram) /* Work RAM again */ ADDRESS_MAP_END #if 0 @@ -1105,9 +1129,6 @@ static ADDRESS_MAP_START( bjtwin_readmem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x088000, 0x0887ff) AM_READ(MRA16_RAM) AM_RANGE(0x09c000, 0x09cfff) AM_READ(nmk_bgvideoram_r) AM_RANGE(0x09d000, 0x09dfff) AM_READ(nmk_bgvideoram_r) /* mirror */ - AM_RANGE(0x0f0000, 0x0f7fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f8000, 0x0f8fff) AM_READ(MRA16_RAM) - AM_RANGE(0x0f9000, 0x0fffff) AM_READ(MRA16_RAM) ADDRESS_MAP_END static ADDRESS_MAP_START( bjtwin_writemem, ADDRESS_SPACE_PROGRAM, 16 ) @@ -1121,9 +1142,7 @@ static ADDRESS_MAP_START( bjtwin_writemem, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x094002, 0x094003) AM_WRITE(MWA16_NOP) /* IRQ enable? */ AM_RANGE(0x09c000, 0x09cfff) AM_WRITE(nmk_bgvideoram_w) AM_BASE(&nmk_bgvideoram) AM_RANGE(0x09d000, 0x09dfff) AM_WRITE(nmk_bgvideoram_w) /* mirror */ - AM_RANGE(0x0f0000, 0x0f7fff) AM_WRITE(MWA16_RAM) /* Work RAM */ - AM_RANGE(0x0f8000, 0x0f8fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size) - AM_RANGE(0x0f9000, 0x0fffff) AM_WRITE(MWA16_RAM) /* Work RAM again */ + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_BASE(&nmk16_mainram) ADDRESS_MAP_END @@ -1354,42 +1373,42 @@ static INPUT_PORTS_START( manybloc ) PORT_DIPSETTING( 0x8000, "Best" ) INPUT_PORTS_END +/********************************************************** + Input Ports: Task Force Harrier + + this is a little strange compared to the other games, the + protection might be more involved here than it first + appears, however, this works. +**********************************************************/ + + static INPUT_PORTS_START( tharrier ) PORT_START /* IN0 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* Mcu status? */ + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x7fe0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SPECIAL ) /* Mcu status? */ PORT_START /* IN1 */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1)//IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2)//IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN) //IPT_COIN1 ) + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_START2) //title + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 )//COIN ? SERVICE ? - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 )//BUTTON3 ) PORT_PLAYER(1) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START2 ) //in game + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START /* DSW */ PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) @@ -1437,8 +1456,28 @@ static INPUT_PORTS_START( tharrier ) PORT_DIPSETTING( 0xc000, "3" ) PORT_DIPSETTING( 0x8000, "4" ) PORT_DIPSETTING( 0x0000, "5" ) + + PORT_START /* IN2 ? */ + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 )PORT_PLAYER(1) + + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_UNKNOWN )//coin ? + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) //coin ? INPUT_PORTS_END + static INPUT_PORTS_START( mustang ) PORT_START /* IN0 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -2814,6 +2853,754 @@ INPUT_PORTS_END + +/*************************************************************************** + + + Input Ports + + +***************************************************************************/ + +/*************************************************************************** + Stagger I +***************************************************************************/ + +static INPUT_PORTS_START( stagger1 ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0080, "2" ) + PORT_DIPSETTING( 0x00c0, "3" ) + PORT_DIPSETTING( 0x0040, "5" ) + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x0200, "Horizontally" ) + PORT_DIPSETTING( 0x0100, "Vertically" ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + +/* everything seems active high.. not low */ +static INPUT_PORTS_START( redhawkb ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w -- probably just redhawk but inverted + PORT_SERVICE( 0x0001, IP_ACTIVE_HIGH ) /* not working */ + PORT_DIPNAME( 0x0002, 0x0000, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x0000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x00c0, "1" ) + PORT_DIPSETTING( 0x0040, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPSETTING( 0x0080, "5" ) + PORT_DIPNAME( 0x0300, 0x0000, DEF_STR( Flip_Screen ) ) /* not supported */ + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( On ) ) + PORT_DIPSETTING( 0x0100, "Horizontally" ) + PORT_DIPSETTING( 0x0200, "Vertically" ) + PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x0000, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0x0000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + +/*************************************************************************** + Sen Jin - Guardian Storm +***************************************************************************/ + +static INPUT_PORTS_START( grdnstrm ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // IN1 - $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Bombs" ) + PORT_DIPSETTING( 0x0008, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0080, "2" ) + PORT_DIPSETTING( 0x00c0, "3" ) + PORT_DIPSETTING( 0x0040, "5" ) + PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0300, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPSETTING( 0x0200, "Horizontally" ) + PORT_DIPSETTING( 0x0100, "Vertically" ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + +/* Pop's Pop's */ + +static INPUT_PORTS_START( popspops ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // IN1 - $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + /* the dips on this are a mess.. service mode doesn't seem to be 100% trustable */ + PORT_START_TAG("IN2") // $080004.w + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0000, DEF_STR( Unknown ) ) // if ON it tells you the answers?! + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + + + +/*************************************************************************** + Bubble 2000 +***************************************************************************/ + +static INPUT_PORTS_START( bubl2000 ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x000c, 0x000c, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, "Free Credit" ) + PORT_DIPSETTING( 0x0080, "500k" ) + PORT_DIPSETTING( 0x00c0, "800k" ) + PORT_DIPSETTING( 0x0040, "1000k" ) + PORT_DIPSETTING( 0x0000, "1500k" ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) + PORT_DIPNAME( 0x1c00, 0x1c00, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x1c00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x1400, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( 1C_4C ) ) +// PORT_DIPSETTING( 0x0000, "Disabled" ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 1C_4C ) ) +// PORT_DIPSETTING( 0x0000, "Disabled" ) +INPUT_PORTS_END + +/*************************************************************************** + Mang Chi +***************************************************************************/ + +static INPUT_PORTS_START( mangchi ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_DIPNAME( 0x0001, 0x0001, "DSWS" ) /* Setting to on cuases screen issues, Flip Screen? or unfinished test mode? */ + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0018, 0x0018, "Vs Rounds" ) + PORT_DIPSETTING( 0x0018, "2" ) + PORT_DIPSETTING( 0x0010, "3" ) + PORT_DIPSETTING( 0x0008, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) /* Hard to tell levels of difficulty by play :-( */ + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Fire Hawk +***************************************************************************/ + +static INPUT_PORTS_START( firehawk ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_DIPNAME( 0x0001, 0x0001, "Show Dip-Switch Settings" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x000e, 0x000e, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0006, DEF_STR( Very_Easy) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Easy ) ) +// PORT_DIPSETTING( 0x000a, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x000e, DEF_STR( Normal ) ) +// PORT_DIPSETTING( 0x0000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Hardest ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, "Number of Bombs" ) + PORT_DIPSETTING( 0x0020, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0080, "2" ) + PORT_DIPSETTING( 0x00c0, "3" ) + PORT_DIPSETTING( 0x0040, "4" ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Region ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( English ) ) + PORT_DIPSETTING( 0x0000, "China" ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, "Continue Coins" ) + PORT_DIPSETTING( 0x1800, "1 Coin" ) + PORT_DIPSETTING( 0x0800, "2 Coins" ) + PORT_DIPSETTING( 0x1000, "3 Coins" ) + PORT_DIPSETTING( 0x0000, "4 Coins" ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Spectrum 2000 +***************************************************************************/ + +static INPUT_PORTS_START( spec2k ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN2") // $080004.w + PORT_SERVICE( 0x0001, IP_ACTIVE_LOW ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Free_Play ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, "Number of Bombs" ) + PORT_DIPSETTING( 0x0008, "2" ) + PORT_DIPSETTING( 0x0000, "3" ) + PORT_DIPNAME( 0x0010, 0x0010, "Copyright Notice" ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x00c0, 0x00c0, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0000, "1" ) + PORT_DIPSETTING( 0x0080, "2" ) + PORT_DIPSETTING( 0x00c0, "3" ) + PORT_DIPSETTING( 0x0040, "5" ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1800, 0x1800, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x1800, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0xe000, 0xe000, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0xc000, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0xe000, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x6000, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0xa000, DEF_STR( 1C_3C ) ) +INPUT_PORTS_END + + +/*************************************************************************** + Twin Action +***************************************************************************/ + +static INPUT_PORTS_START( twinactn ) + PORT_START_TAG("IN0") // $080000.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 ) + PORT_SERVICE_NO_TOGGLE(0x0020, IP_ACTIVE_LOW ) // Test in service mode + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START_TAG("IN1") // $080002.w + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_HIGH,IPT_UNKNOWN ) // Tested at boot + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_HIGH,IPT_UNKNOWN ) // Tested at boot + + PORT_START_TAG("IN2") // $080004.w + PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( On ) ) + PORT_DIPNAME( 0x001c, 0x001c, DEF_STR( Coin_B ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x0018, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x001c, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x000c, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x0014, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x00e0, 0x00e0, DEF_STR( Coin_A ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( 4C_1C ) ) + PORT_DIPSETTING( 0x0040, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x00c0, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00e0, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x0060, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x00a0, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) ) + + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Flip_Screen ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x0c00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x4000, "2" ) + PORT_DIPSETTING( 0xc000, "3" ) + PORT_DIPSETTING( 0x8000, "4" ) + PORT_DIPSETTING( 0x0000, "5" ) +INPUT_PORTS_END + + + static const gfx_layout charlayout = { 8,8, @@ -2917,15 +3704,17 @@ static MACHINE_DRIVER_START( tharrier ) MDRV_CPU_PROGRAM_MAP(tharrier_sound_readmem,tharrier_sound_writemem) MDRV_CPU_IO_MAP(tharrier_sound_readport,tharrier_sound_writeport) - MDRV_SCREEN_REFRESH_RATE(60) - MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(mustang_sound) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_REFRESH_RATE(56) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_SIZE(256, 256) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(tharrier) MDRV_PALETTE_LENGTH(512) @@ -2958,14 +3747,14 @@ static MACHINE_DRIVER_START( manybloc ) MDRV_CPU_ADD(M68000, 10000000) /* 10? MHz - check */ MDRV_CPU_PROGRAM_MAP(manybloc_readmem,manybloc_writemem) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) - MDRV_CPU_PERIODIC_INT(irq1_line_hold,60)/* is this is too high it breaks the game on this one, too low sprites flicker */ + MDRV_CPU_PERIODIC_INT(irq1_line_hold,56)/* this needs to equal the framerate on this, rather than being double it .. */ MDRV_CPU_ADD(Z80, 3000000) /* audio CPU */ MDRV_CPU_PROGRAM_MAP(tharrier_sound_readmem,tharrier_sound_writemem) MDRV_CPU_IO_MAP(tharrier_sound_readport,tharrier_sound_writeport) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) /* video hardware */ @@ -2977,7 +3766,7 @@ static MACHINE_DRIVER_START( manybloc ) MDRV_PALETTE_LENGTH(512) MDRV_VIDEO_START(macross) -// MDRV_VIDEO_EOF(nmk) + MDRV_VIDEO_EOF(nmk) MDRV_VIDEO_UPDATE(manybloc) /* sound hardware */ @@ -3003,11 +3792,11 @@ static MACHINE_DRIVER_START( mustang ) /* basic machine hardware */ MDRV_CPU_ADD(M68000, 10000000) /* 10 MHz ? */ - MDRV_CPU_PROGRAM_MAP(mustang_readmem,mustang_writemem) + MDRV_CPU_PROGRAM_MAP(mustang_map,0) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3047,13 +3836,13 @@ static MACHINE_DRIVER_START( mustangb ) /* basic machine hardware */ MDRV_CPU_ADD(M68000, 10000000) /* 10 MHz ? */ - MDRV_CPU_PROGRAM_MAP(mustang_readmem,mustangb_writemem) + MDRV_CPU_PROGRAM_MAP(mustangb_map,0) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ SEIBU_SOUND_SYSTEM_CPU(14318180/4) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(mustang_sound) @@ -3132,7 +3921,7 @@ static MACHINE_DRIVER_START( bioship ) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3175,7 +3964,7 @@ static MACHINE_DRIVER_START( vandyke ) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3221,7 +4010,7 @@ static MACHINE_DRIVER_START( vandykeb ) MDRV_CPU_ADD(PIC16C57, (12000000/PIC16C5x_CLOCK_DIVIDER)) /* 3MHz */ MDRV_CPU_FLAGS(CPU_DISABLE) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) //MDRV_MACHINE_RESET(NMK004) // no NMK004 @@ -3253,7 +4042,7 @@ static MACHINE_DRIVER_START( acrobatm ) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3295,12 +4084,13 @@ static MACHINE_DRIVER_START( tdragonb ) /* basic machine hardware */ MDRV_CPU_ADD(M68000, 10000000) MDRV_CPU_PROGRAM_MAP(tdragon_readmem,tdragonb_writemem) - MDRV_CPU_VBLANK_INT(irq4_line_hold,1) + //MDRV_CPU_VBLANK_INT(irq4_line_hold,1) + MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */ SEIBU_SOUND_SYSTEM_CPU(14318180/4) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(mustang_sound) @@ -3325,10 +4115,11 @@ static MACHINE_DRIVER_START( tdragon ) /* basic machine hardware */ MDRV_CPU_ADD(M68000, 10000000) MDRV_CPU_PROGRAM_MAP(tdragon_readmem,tdragon_writemem) - MDRV_CPU_VBLANK_INT(irq4_line_hold,1) + MDRV_CPU_VBLANK_INT(nmk_interrupt,2) + //MDRV_CPU_VBLANK_INT(irq4_line_hold,1) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3374,7 +4165,7 @@ static MACHINE_DRIVER_START( ssmissin ) MDRV_CPU_ADD(Z80, 8000000/2) /* 4 Mhz */ MDRV_CPU_PROGRAM_MAP(ssmissin_sound_readmem,ssmissin_sound_writemem) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(nmk16) @@ -3407,7 +4198,7 @@ static MACHINE_DRIVER_START( strahl ) MDRV_CPU_VBLANK_INT(nmk_interrupt,2) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3447,11 +4238,11 @@ static MACHINE_DRIVER_START( hachamf ) /* basic machine hardware */ MDRV_CPU_ADD(M68000, 10000000) /* 10 MHz ? */ - MDRV_CPU_PROGRAM_MAP(hachamf_readmem,hachamf_writemem) + MDRV_CPU_PROGRAM_MAP(hachamf_map,0) MDRV_CPU_VBLANK_INT(irq4_line_hold,1) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3495,7 +4286,7 @@ static MACHINE_DRIVER_START( macross ) MDRV_CPU_VBLANK_INT(irq4_line_hold,1) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3539,7 +4330,7 @@ static MACHINE_DRIVER_START( gunnail ) MDRV_CPU_VBLANK_INT(irq4_line_hold,1) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112) - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(NMK004) @@ -3588,7 +4379,7 @@ static MACHINE_DRIVER_START( macross2 ) MDRV_CPU_PROGRAM_MAP(macross2_sound_readmem,macross2_sound_writemem) MDRV_CPU_IO_MAP(macross2_sound_readport,macross2_sound_writeport) - MDRV_SCREEN_REFRESH_RATE(57) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(nmk16) @@ -3633,7 +4424,7 @@ static MACHINE_DRIVER_START( tdragon2 ) MDRV_CPU_PROGRAM_MAP(macross2_sound_readmem,macross2_sound_writemem) MDRV_CPU_IO_MAP(macross2_sound_readport,macross2_sound_writeport) - MDRV_SCREEN_REFRESH_RATE(57) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(nmk16) @@ -3716,7 +4507,7 @@ static MACHINE_DRIVER_START( bjtwin ) MDRV_CPU_VBLANK_INT(irq4_line_hold,1) MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */ - MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_REFRESH_RATE(56) MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) MDRV_MACHINE_RESET(nmk16) @@ -3744,6 +4535,669 @@ static MACHINE_DRIVER_START( bjtwin ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20) MACHINE_DRIVER_END + +static UINT8 decode_byte(UINT8 src, const UINT8 *bitp) +{ + UINT8 ret, i; + + ret = 0; + for (i=0; i<8; i++) + ret |= (((src >> bitp[i]) & 1) << (7-i)); + + return ret; +} + +static UINT32 bjtwin_address_map_bg0(UINT32 addr) +{ + return ((addr&0x00004)>> 2) | ((addr&0x00800)>> 10) | ((addr&0x40000)>>16); +} + + +static UINT16 decode_word(UINT16 src, const UINT8 *bitp) +{ + UINT16 ret, i; + + ret=0; + for (i=0; i<16; i++) + ret |= (((src >> bitp[i]) & 1) << (15-i)); + + return ret; +} + + +static UINT32 bjtwin_address_map_sprites(UINT32 addr) +{ + return ((addr&0x00010)>> 4) | ((addr&0x20000)>>16) | ((addr&0x100000)>>18); +} + + +static void decode_gfx(void) +{ + /* GFX are scrambled. We decode them here. (BIG Thanks to Antiriad for descrambling info) */ + UINT8 *rom; + int A; + + static const UINT8 decode_data_bg[8][8] = + { + {0x3,0x0,0x7,0x2,0x5,0x1,0x4,0x6}, + {0x1,0x2,0x6,0x5,0x4,0x0,0x3,0x7}, + {0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0}, + {0x7,0x6,0x5,0x0,0x1,0x4,0x3,0x2}, + {0x2,0x0,0x1,0x4,0x3,0x5,0x7,0x6}, + {0x5,0x3,0x7,0x0,0x4,0x6,0x2,0x1}, + {0x2,0x7,0x0,0x6,0x5,0x3,0x1,0x4}, + {0x3,0x4,0x7,0x6,0x2,0x0,0x5,0x1}, + }; + + static const UINT8 decode_data_sprite[8][16] = + { + {0x9,0x3,0x4,0x5,0x7,0x1,0xb,0x8,0x0,0xd,0x2,0xc,0xe,0x6,0xf,0xa}, + {0x1,0x3,0xc,0x4,0x0,0xf,0xb,0xa,0x8,0x5,0xe,0x6,0xd,0x2,0x7,0x9}, + {0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0}, + {0xf,0xe,0xc,0x6,0xa,0xb,0x7,0x8,0x9,0x2,0x3,0x4,0x5,0xd,0x1,0x0}, + + {0x1,0x6,0x2,0x5,0xf,0x7,0xb,0x9,0xa,0x3,0xd,0xe,0xc,0x4,0x0,0x8}, /* Haze 20/07/00 */ + {0x7,0x5,0xd,0xe,0xb,0xa,0x0,0x1,0x9,0x6,0xc,0x2,0x3,0x4,0x8,0xf}, /* Haze 20/07/00 */ + {0x0,0x5,0x6,0x3,0x9,0xb,0xa,0x7,0x1,0xd,0x2,0xe,0x4,0xc,0x8,0xf}, /* Antiriad, Corrected by Haze 20/07/00 */ + {0x9,0xc,0x4,0x2,0xf,0x0,0xb,0x8,0xa,0xd,0x3,0x6,0x5,0xe,0x1,0x7}, /* Antiriad, Corrected by Haze 20/07/00 */ + }; + + + /* background */ + rom = memory_region(REGION_GFX2); + for (A = 0;A < memory_region_length(REGION_GFX2);A++) + { + rom[A] = decode_byte( rom[A], decode_data_bg[bjtwin_address_map_bg0(A)]); + } + + /* sprites */ + rom = memory_region(REGION_GFX3); + for (A = 0;A < memory_region_length(REGION_GFX3);A += 2) + { + UINT16 tmp = decode_word( rom[A+1]*256 + rom[A], decode_data_sprite[bjtwin_address_map_sprites(A)]); + rom[A+1] = tmp >> 8; + rom[A] = tmp & 0xff; + } +} + +static void decode_tdragonb(void) +{ + /* Descrambling Info Again Taken from Raine, Huge Thanks to Antiriad and the Raine Team for + going Open Source, best of luck in future development. */ + + UINT8 *rom; + int A; + + /* The Main 68k Program of the Bootleg is Bitswapped */ + static const UINT8 decode_data_tdragonb[1][16] = + { + {0xe,0xc,0xa,0x8,0x7,0x5,0x3,0x1,0xf,0xd,0xb,0x9,0x6,0x4,0x2,0x0}, + }; + + /* Graphic Roms Could Also Do With Rearranging to make things simpler */ + static const UINT8 decode_data_tdragonbgfx[1][8] = + { + {0x7,0x6,0x5,0x3,0x4,0x2,0x1,0x0}, + }; + + rom = memory_region(REGION_CPU1); + for (A = 0;A < memory_region_length(REGION_CPU1);A += 2) + { +#ifdef LSB_FIRST + UINT16 tmp = decode_word( rom[A+1]*256 + rom[A], decode_data_tdragonb[0]); + rom[A+1] = tmp >> 8; + rom[A] = tmp & 0xff; +#else + UINT16 tmp = decode_word( rom[A]*256 + rom[A+1], decode_data_tdragonb[0]); + rom[A] = tmp >> 8; + rom[A+1] = tmp & 0xff; +#endif + } + + rom = memory_region(REGION_GFX2); + for (A = 0;A < memory_region_length(REGION_GFX2);A++) + { + rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); + } + + rom = memory_region(REGION_GFX3); + for (A = 0;A < memory_region_length(REGION_GFX3);A++) + { + rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); + } +} + +static void decode_ssmissin(void) +{ + /* Like Thunder Dragon Bootleg without the Program Rom Swapping */ + UINT8 *rom; + int A; + + /* Graphic Roms Could Also Do With Rearranging to make things simpler */ + static const UINT8 decode_data_tdragonbgfx[1][8] = + { + {0x7,0x6,0x5,0x3,0x4,0x2,0x1,0x0}, + }; + + rom = memory_region(REGION_GFX2); + for (A = 0;A < memory_region_length(REGION_GFX2);A++) + { + rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); + } + + rom = memory_region(REGION_GFX3); + for (A = 0;A < memory_region_length(REGION_GFX3);A++) + { + rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); + } +} + + +static DRIVER_INIT( nmk ) +{ + decode_gfx(); +} + +static DRIVER_INIT( hachamf ) +{ + UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); + + //rom[0x0006/2] = 0x7dc2; /* replace reset vector with the "real" one */ + + // kludge the sound communication to let commands go through. + rom[0x048a/2] = 0x4e71; + rom[0x04aa/2] = 0x4e71; +} + +static DRIVER_INIT( tdragonb ) +{ + UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); + + decode_tdragonb(); + + /* The Following Patch is taken from Raine, Otherwise the game has no Sprites in Attract Mode or After Level 1 + which is rather odd considering its a bootleg.. */ + rom[0x00308/2] = 0x4e71; /* Sprite Problem */ +} + +static DRIVER_INIT( tdragon ) +{ + UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); + + //rom[0x94b0/2] = 0; /* Patch out JMP to shared memory (protection) */ + //rom[0x94b2/2] = 0x92f4; + + // kludge the sound communication to let commands go through. + rom[0x048a/2] = 0x4e71; + rom[0x04aa/2] = 0x4e71; +} + +static DRIVER_INIT( ssmissin ) +{ + decode_ssmissin(); +} + + +int is_blkheart; + + +static DRIVER_INIT( bjtwin ) +{ + driver_init_nmk(machine); + + /* Patch rom to enable test mode */ + +/* 008F54: 33F9 0008 0000 000F FFFC move.w $80000.l, $ffffc.l + * 008F5E: 3639 0008 0002 move.w $80002.l, D3 + * 008F64: 3003 move.w D3, D0 \ + * 008F66: 3203 move.w D3, D1 | This code remaps + * 008F68: 0041 BFBF ori.w #-$4041, D1 | buttons 2 and 3 to + * 008F6C: E441 asr.w #2, D1 | button 1, so + * 008F6E: 0040 DFDF ori.w #-$2021, D0 | you can't enter + * 008F72: E240 asr.w #1, D0 | service mode + * 008F74: C640 and.w D0, D3 | + * 008F76: C641 and.w D1, D3 / + * 008F78: 33C3 000F FFFE move.w D3, $ffffe.l + * 008F7E: 207C 000F 9000 movea.l #$f9000, A0 + */ + +// data 16_t *rom = (UINT16 *)memory_region(REGION_CPU1); +// rom[0x09172/2] = 0x6006; /* patch checksum error */ +// rom[0x08f74/2] = 0x4e71); +} + +/* NO NMK004, it has a PIC instead */ +static READ16_HANDLER( vandykeb_r ) { return 0x0000; }; +static DRIVER_INIT (vandykeb) +{ + memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x08000e, 0x08000f, 0, 0, vandykeb_r ); + memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x08001e, 0x08001f, 0, 0, MWA16_NOP ); +} + + +/*************************************************************************** + + + Memory Maps - Main CPU + + +***************************************************************************/ + +static READ16_HANDLER( afega_unknown_r ) +{ + /* This fixes the text in Service Mode. */ + return 0x0100; +} + + + +static WRITE16_HANDLER( afega_scroll0_w ) +{ + COMBINE_DATA(&afega_scroll_0[offset]); +} + +static WRITE16_HANDLER( afega_scroll1_w ) +{ + COMBINE_DATA(&afega_scroll_1[offset]); +} + +/* + Lines starting with an empty comment in the following MemoryReadAddress + arrays are there for debug (e.g. the game does not read from those ranges + AFAIK) +*/ + + +static ADDRESS_MAP_START( afega, ADDRESS_SPACE_PROGRAM, 16 ) + ADDRESS_MAP_FLAGS( AMEF_ABITS(20) ) + AM_RANGE(0x000000, 0x07ffff) AM_ROM + AM_RANGE(0x080000, 0x080001) AM_READ(input_port_0_word_r) // Buttons + AM_RANGE(0x080002, 0x080003) AM_READ(input_port_1_word_r) // P1 + P2 + AM_RANGE(0x080004, 0x080005) AM_READ(input_port_2_word_r) // 2 x DSW + AM_RANGE(0x080012, 0x080013) AM_READ(afega_unknown_r) + AM_RANGE(0x080000, 0x08001d) AM_WRITE(MWA16_RAM) // + AM_RANGE(0x08001e, 0x08001f) AM_WRITE(afega_soundlatch_w) // To Sound CPU +/**/AM_RANGE(0x084000, 0x084003) AM_RAM AM_WRITE(afega_scroll0_w) // Scroll on redhawkb (mirror or changed?..) +/**/AM_RANGE(0x084004, 0x084007) AM_RAM AM_WRITE(afega_scroll1_w) // Scroll on redhawkb (mirror or changed?..) + AM_RANGE(0x080020, 0x087fff) AM_WRITE(MWA16_RAM) // +/**/AM_RANGE(0x088000, 0x0885ff) AM_READWRITE(MRA16_RAM, paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE(&paletteram16) // Palette + AM_RANGE(0x088600, 0x08bfff) AM_WRITE(MWA16_RAM) // +/**/AM_RANGE(0x08c000, 0x08c003) AM_RAM AM_WRITE(afega_scroll0_w) AM_BASE(&afega_scroll_0) // Scroll +/**/AM_RANGE(0x08c004, 0x08c007) AM_RAM AM_WRITE(afega_scroll1_w) AM_BASE(&afega_scroll_1) // + AM_RANGE(0x08c008, 0x08ffff) AM_WRITE(MWA16_RAM) // +/**/AM_RANGE(0x090000, 0x091fff) AM_READWRITE(MRA16_RAM, afega_vram_0_w) AM_BASE(&afega_vram_0) // Layer 0 +/**/AM_RANGE(0x092000, 0x093fff) AM_RAM // ? +/**/AM_RANGE(0x09c000, 0x09c7ff) AM_READWRITE(MRA16_RAM, afega_vram_1_w) AM_BASE(&afega_vram_1) // Layer 1 + + AM_RANGE(0x0c0000, 0x0cffff) AM_RAM AM_SHARE(1) AM_WRITE(nmk16_mainram_strange_w) AM_BASE(&nmk16_mainram) + AM_RANGE(0x0f0000, 0x0fffff) AM_RAM AM_SHARE(1) AM_WRITE(nmk16_mainram_strange_w) +ADDRESS_MAP_END + +#if 0 +// The high byte of the word written is the address to write to (byte offset), the low byte is data +static WRITE16_HANDLER( twinactn_scroll0_w ) +{ + int byte = ((data >> 8) & 3) ^ 2; + int bit = ((byte & 1) ? 0 : 8); + afega_scroll_0[byte / 2] = (afega_scroll_0[byte / 2] & (0xff << (8-bit))) | ((data & 0xff) << bit); +} +static WRITE16_HANDLER( twinactn_scroll1_w ) +{ + int byte = ((data >> 8) & 3) ^ 2; + int bit = ((byte & 1) ? 0 : 8); + afega_scroll_1[byte / 2] = (afega_scroll_1[byte / 2] & (0xff << (8-bit))) | ((data & 0xff) << bit); +} + +static WRITE16_HANDLER( twinactn_flipscreen_w ) +{ + if (ACCESSING_LSB) + flip_screen_set(data & 1); + + if (data & (~1)) + logerror("%06x: unknown flip screen bit written %04x\n", activecpu_get_pc(), data); +} +#endif + +/*************************************************************************** + + + Memory Maps - Sound CPU + + +***************************************************************************/ +static WRITE8_HANDLER( spec2k_oki1_banking_w ) +{ + if(data == 0xfe) + OKIM6295_set_bank_base(1, 0); + else if(data == 0xff) + OKIM6295_set_bank_base(1, 0x40000); +} + +static ADDRESS_MAP_START( afega_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0003, 0x0003) AM_WRITE(MWA8_NOP) // bug in sound prg? + AM_RANGE(0x0004, 0x0004) AM_WRITE(MWA8_NOP) // bug in sound prg? + AM_RANGE(0x0000, 0xefff) AM_ROM + AM_RANGE(0xf000, 0xf7ff) AM_RAM // RAM + AM_RANGE(0xf800, 0xf800) AM_READ(soundlatch_r) // From Main CPU + AM_RANGE(0xf808, 0xf808) AM_WRITE(YM2151_register_port_0_w) // YM2151 + AM_RANGE(0xf809, 0xf809) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w) // YM2151 + AM_RANGE(0xf80a, 0xf80a) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) // M6295 +ADDRESS_MAP_END + +static ADDRESS_MAP_START( firehawk_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xefff) AM_ROM + AM_RANGE(0xf000, 0xf7ff) AM_RAM + AM_RANGE(0xfff0, 0xfff0) AM_READ(soundlatch_r) + AM_RANGE(0xfff2, 0xfff2) AM_WRITE(spec2k_oki1_banking_w ) + AM_RANGE(0xfff8, 0xfff8) AM_READWRITE(OKIM6295_status_1_r, OKIM6295_data_1_w) + AM_RANGE(0xfffa, 0xfffa) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) + AM_RANGE(0xf800, 0xffff) AM_RAM // not used, only tested +ADDRESS_MAP_END + + +static WRITE8_HANDLER( twinactn_oki_bank_w ) +{ + OKIM6295_set_bank_base(0, (data & 3) * 0x40000); + + if (data & (~3)) + logerror("%04x: invalid oki bank %02x\n", activecpu_get_pc(), data); + +// logerror("%04x: oki bank %02x\n", activecpu_get_pc(), data); +} + +static ADDRESS_MAP_START( twinactn_sound_cpu, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x87ff) AM_RAM + AM_RANGE(0x9000, 0x9000) AM_WRITE(twinactn_oki_bank_w) + AM_RANGE(0x9800, 0x9800) AM_READWRITE(OKIM6295_status_0_r, OKIM6295_data_0_w) + AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) // From Main CPU +ADDRESS_MAP_END + +/*************************************************************************** + + + Graphics Layouts + + +***************************************************************************/ + +static const gfx_layout layout_8x8x4 = +{ + 8,8, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(0,4) }, + { STEP8(0,8*4) }, + 8*8*4 +}; + +static const gfx_layout layout_16x16x4 = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { STEP8(0,4), STEP8(8*8*4*2,4) }, + { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, + 16*16*4 +}; + +static const gfx_layout layout_16x16x8 = +{ + 16,16, + RGN_FRAC(1,2), + 8, + { STEP4(RGN_FRAC(0,2),1), STEP4(RGN_FRAC(1,2),1) }, + { STEP8(0,4), STEP8(8*8*4*2,4) }, + { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, + 16*16*4 +}; + + +static const gfx_layout layout_16x16x4_swapped = +{ + 16,16, + RGN_FRAC(1,1), + 4, + { STEP4(0,1) }, + { 4,0,12,8,20,16,28,24, 512+4,512+0,512+12,512+8,512+20,512+16,512+28,512+24}, + { STEP8(0,8*4), STEP8(8*8*4*1,8*4) }, + 16*16*4 +}; + +static GFXDECODE_START( grdnstrm ) + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x8, 256*3, 16 ) // [1] Layer 0 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites +GFXDECODE_END + +static GFXDECODE_START( stagger1 ) + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x4, 256*0, 16 ) // [1] Layer 0 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4, 256*1, 16 ) // [0] Sprites +GFXDECODE_END + +static GFXDECODE_START( redhawkb ) + GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x4_swapped, 256*0, 16 ) // [1] Layer 0 + GFXDECODE_ENTRY( REGION_GFX3, 0, layout_8x8x4, 256*2, 16 ) // [2] Layer 1 + GFXDECODE_ENTRY( REGION_GFX1, 0, layout_16x16x4_swapped, 256*1, 16 ) // [0] Sprites +GFXDECODE_END + + +/*************************************************************************** + + + Machine Drivers + + +***************************************************************************/ + +static void irq_handler(int irq) +{ + cpunum_set_input_line(1,0,irq ? ASSERT_LINE : CLEAR_LINE); +} + +static const struct YM2151interface afega_ym2151_intf = +{ + irq_handler +}; + + + +static MACHINE_DRIVER_START( stagger1 ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000,12000000) + MDRV_CPU_PROGRAM_MAP(afega,0) + MDRV_CPU_VBLANK_INT(nmk_interrupt,2) + + MDRV_CPU_ADD(Z80, 4000000) + /* audio CPU */ /* ? */ + MDRV_CPU_PROGRAM_MAP(afega_sound_cpu,0) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_REFRESH_RATE(56) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(stagger1) + MDRV_PALETTE_LENGTH(768) + + MDRV_VIDEO_START(afega) + MDRV_VIDEO_UPDATE(afega) + MDRV_VIDEO_EOF(nmk) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_STEREO("left", "right") + + MDRV_SOUND_ADD(YM2151, 4000000) + MDRV_SOUND_CONFIG(afega_ym2151_intf) + MDRV_SOUND_ROUTE(0, "left", 0.30) + MDRV_SOUND_ROUTE(1, "right", 0.30) + + MDRV_SOUND_ADD(OKIM6295, 1000000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.70) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.70) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( redhawkb ) + /* basic machine hardware */ + MDRV_IMPORT_FROM(stagger1) + /* video hardware */ + MDRV_GFXDECODE(redhawkb) + MDRV_VIDEO_UPDATE(redhawkb) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( grdnstrm ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(stagger1) + + /* video hardware */ + MDRV_GFXDECODE(grdnstrm) + MDRV_PALETTE_LENGTH(768) + MDRV_COLORTABLE_LENGTH(768 + 16*256) + + MDRV_PALETTE_INIT(grdnstrm) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( popspops ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(stagger1) + + /* video hardware */ + MDRV_GFXDECODE(grdnstrm) + MDRV_PALETTE_LENGTH(768) + MDRV_COLORTABLE_LENGTH(768 + 16*256) + + MDRV_PALETTE_INIT(grdnstrm) + + MDRV_VIDEO_UPDATE(bubl2000) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( bubl2000 ) + + /* basic machine hardware */ + MDRV_IMPORT_FROM(grdnstrm) + + /* video hardware */ + MDRV_VIDEO_UPDATE(bubl2000) +MACHINE_DRIVER_END + +static MACHINE_DRIVER_START( firehawk ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000,12000000) + MDRV_CPU_PROGRAM_MAP(afega,0) + MDRV_CPU_VBLANK_INT(nmk_interrupt,2) + + MDRV_CPU_ADD(Z80,4000000) + /* audio CPU */ + MDRV_CPU_PROGRAM_MAP(firehawk_sound_cpu,0) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_REFRESH_RATE(56) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + + MDRV_GFXDECODE(grdnstrm) + MDRV_PALETTE_LENGTH(768) + MDRV_COLORTABLE_LENGTH(768 + 16*256) + + MDRV_PALETTE_INIT(grdnstrm) + MDRV_VIDEO_START(firehawk) + MDRV_VIDEO_UPDATE(firehawk) + MDRV_VIDEO_EOF(nmk) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 1000000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) + + MDRV_SOUND_ADD(OKIM6295, 1000000) + MDRV_SOUND_CONFIG(okim6295_interface_region_2_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + + +static MACHINE_DRIVER_START( twinactn ) + + /* basic machine hardware */ + MDRV_CPU_ADD(M68000,12000000) + MDRV_CPU_PROGRAM_MAP(twinactn_map,0) + MDRV_CPU_VBLANK_INT(nmk_interrupt,2) + MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ???????? */ + + MDRV_CPU_ADD(Z80, 4000000) + MDRV_CPU_PROGRAM_MAP(twinactn_sound_cpu,0) + + MDRV_SCREEN_REFRESH_RATE(56) + MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(256, 256) + MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) + MDRV_GFXDECODE(macross) + MDRV_PALETTE_LENGTH(1024) + + MDRV_VIDEO_START(macross) + MDRV_VIDEO_EOF(nmk) + MDRV_VIDEO_UPDATE(macross) + + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD(OKIM6295, 1000000) + MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high) + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) +MACHINE_DRIVER_END + + +/*************************************************************************** + + + ROMs Loading + + +***************************************************************************/ + +/* Address lines scrambling */ + +static void decryptcode( int a23, int a22, int a21, int a20, int a19, int a18, int a17, int a16, int a15, int a14, int a13, int a12, + int a11, int a10, int a9, int a8, int a7, int a6, int a5, int a4, int a3, int a2, int a1, int a0 ) +{ + int i; + UINT8 *RAM = memory_region( REGION_CPU1 ); + size_t size = memory_region_length( REGION_CPU1 ); + UINT8 *buffer = malloc_or_die( size ); + + memcpy( buffer, RAM, size ); + for( i = 0; i < size; i++ ) + { + RAM[ i ] = buffer[ BITSWAP24( i, a23, a22, a21, a20, a19, a18, a17, a16, a15, a14, a13, a12, + a11, a10, a9, a8, a7, a6, a5, a4, a3, a2, a1, a0 ) ]; + } + free( buffer ); +} + + + ROM_START( vandyke ) ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 code */ ROM_LOAD16_BYTE( "vdk-1.16", 0x00000, 0x20000, CRC(c1d01c59) SHA1(04a7fd31ca4d87d078070390660edf08bf1d96b5) ) @@ -4850,317 +6304,619 @@ ROM_END -static UINT8 decode_byte(UINT8 src, const UINT8 *bitp) +/*************************************************************************** + + Stagger I +(AFEGA 1998) + +Parts: + +1 MC68HC000P10 +1 Z80 +2 Lattice ispLSI 1032E + +***************************************************************************/ + +ROM_START( stagger1 ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "2.bin", 0x000000, 0x020000, CRC(8555929b) SHA1(b405d81c2a45191111b1a4458ac6b5c0a129b8f1) ) + ROM_LOAD16_BYTE( "3.bin", 0x000001, 0x020000, CRC(5b0b63ac) SHA1(239f793b6845a88d1630da790a2762da730a450d) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "7.bin", 0x00000, 0x80000, CRC(048f7683) SHA1(7235b7dcfbb72abf44e60b114e3f504f16d29ebf) ) + ROM_LOAD16_BYTE( "6.bin", 0x00001, 0x80000, CRC(051d4a77) SHA1(664182748e72b3e44202caa20f337d02e946ca62) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x4 */ + ROM_LOAD( "4.bin", 0x00000, 0x80000, CRC(46463d36) SHA1(4265bc4d24ff64e39d9273965701c740d7e3fee0) ) + + ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + // Unused + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) +ROM_END + + +/*************************************************************************** + + Red Hawk (c)1997 Afega + + + + 6116 ym2151 MSM6295 5 4MHz + 1 + Z80 pLSI1032 4 + 76C88 + 6116 76C256 76C88 + 6116 76C256 + 2 76C256 76C256 + 3 76C256 76C256 + + 68000-10 6116 + 6116 + SW1 6 + SW21 pLSI1032 7 + 12MHz + +***************************************************************************/ + +ROM_START( redhawk ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "2", 0x000000, 0x020000, CRC(3ef5f326) SHA1(e89c7c24a05886a14995d7c399958dc00ad35d63) ) + ROM_LOAD16_BYTE( "3", 0x000001, 0x020000, CRC(9b3a10ef) SHA1(d03480329b23474e5a9e42a75b09d2140eed4443) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "6", 0x000001, 0x080000, CRC(61560164) SHA1(d727ab2d037dab40745dec9c4389744534fdf07d) ) + ROM_LOAD16_BYTE( "7", 0x000000, 0x080000, CRC(66a8976d) SHA1(dd9b89cf29eb5557845599d55ef3a15f53c070a4) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "4", 0x000000, 0x080000, CRC(d6427b8a) SHA1(556de1b5ce29d1c3c54bb315dcaa4dd0848ca462) ) + + ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + // Unused + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) +ROM_END + +static DRIVER_INIT( redhawk ) { - UINT8 ret, i; - - ret = 0; - for (i=0; i<8; i++) - ret |= (((src >> bitp[i]) & 1) << (7-i)); - - return ret; + decryptcode( 23, 22, 21, 20, 19, 18, 16, 15, 14, 17, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); } -static UINT32 bjtwin_address_map_bg0(UINT32 addr) +ROM_START( redhawkb ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "rhb-1.bin", 0x000000, 0x020000, CRC(e733ea07) SHA1(b1ffeda633d5e701f0e97c79930a54d7b89a85c5) ) + ROM_LOAD16_BYTE( "rhb-2.bin", 0x000001, 0x020000, CRC(f9fa5684) SHA1(057ea3eebbaa1a208a72beef21b9368df7032ce1) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD( "rhb-3.bin", 0x000000, 0x080000, CRC(0318d68b) SHA1(c773de7b6f9c706e62349dc73af4339d1a3f9af6) ) + ROM_LOAD( "rhb-4.bin", 0x080000, 0x080000, CRC(ba21c1ef) SHA1(66b0dee67acb5b3a21c7dba057be4093a92e10a9) ) + + ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "rhb-5.bin", 0x000000, 0x080000, CRC(d0eaf6f2) SHA1(6e946e13b06df897a63e885c9842816ec908a709) ) + + ROM_REGION( 0x080000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "5", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) +ROM_END + + +/*************************************************************************** + + Sen Jin - Guardian Storm + +(C) Afega 1998 + +CPU: 68HC000FN10 (68000, 68 pin PLCC) +SND: Z84C000FEC (Z80, 44 pin PQFP), AD-65 (OKI M6295), + BS901 (YM2151, 24 pin DIP), BS901 (YM3012, 16 pin DIP) +OSC: 12.000MHz (near 68000), 4.000MHz (Near Z84000) +RAM: LH52B256 x 8, 6116 x 7 +DIPS: 2 x 8 position + +Other Chips: AFEGA AFI-GFSK (68 pin PLCC, located next to 68000) + AFEGA AFI-GFLK (208 pin PQFP) + +ROMS: +GST-01.U92 27C512, \ +GST-02.U95 27C2000 > Sound Related, all located near Z80 +GST-03.U4 27C512 / + +GST-04.112 27C2000 \ +GST-05.107 27C2000 /Main Program + +GST-06.C13 read as 27C160 label = AF1-SP (Sprites?) +GST-07.C08 read as 27C160 label = AF1=B2 (Backgrounds?) +GST-08.C03 read as 27C160 label = AF1=B1 (Backgrounds?) + +***************************************************************************/ + +ROM_START( grdnstrm ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "gst-04.112", 0x000000, 0x040000, CRC(922c931a) SHA1(1d1511033c8c424535a73f5c5bf58560a8b1842e) ) + ROM_LOAD16_BYTE( "gst-05.107", 0x000001, 0x040000, CRC(d22ca2dc) SHA1(fa21c8ec804570d64f4b167b7f65fd5811435e46) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "gst-01.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) + + ROM_REGION( 0x200000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD( "gst-06.c13", 0x000000, 0x200000, CRC(7d4d4985) SHA1(15c6c1aecd3f12050c1db2376f929f1a26a1d1cf) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "gst-07.c08", 0x000000, 0x200000, CRC(d68588c2) SHA1(c5f397d74a6ecfd2e375082f82e37c5a330fba62) ) + ROM_LOAD( "gst-08.c03", 0x200000, 0x200000, CRC(f8b200a8) SHA1(a6c43dd57b752d87138d7125b47dc0df83df8987) ) + + ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "gst-03.u4", 0x00000, 0x10000, CRC(a1347297) SHA1(583f4da991eeedeb523cf4fa3b6900d40e342063) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "gst-02.u95", 0x00000, 0x40000, CRC(e911ce33) SHA1(a29c4dea98a22235122303325c63c15fadd3431d) ) +ROM_END + +static DRIVER_INIT( grdnstrm ) { - return ((addr&0x00004)>> 2) | ((addr&0x00800)>> 10) | ((addr&0x40000)>>16); + decryptcode( 23, 22, 21, 20, 19, 18, 16, 17, 14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); } +/* Pop's Pop's */ -static UINT16 decode_word(UINT16 src, const UINT8 *bitp) +/* + +Pop's Pop's by Afega (1999) + +The pcb might be missing an eprom in a socket + --- i just think it uses a generic PCB but no sprites in this case,. + +1x 68k +1x z80 +1x Ad65 (oki 6295) +1x OSC 12mhz (near 68k) +1x OSC 4mhz (near z80) +1x ym2151 +1x Afega AF1-CFLK custom chip Smt +1x Afega AF1-CF5K custom chip socketed +2x dipswitch banks + +*/ + +ROM_START( popspops ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "afega4.u112", 0x000000, 0x040000, CRC(db191762) SHA1(901fdc20374473127d694513d4291e29e65eafe8) ) + ROM_LOAD16_BYTE( "afega5.u107", 0x000001, 0x040000, CRC(17e0c48b) SHA1(833c61c4b3ee293b0bcddfa86dfa9c1014375115) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "afega1.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) + + ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_ERASEFF | ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + /* no sprite roms? */ + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "afega6.uc8", 0x000000, 0x200000, CRC(6d506c97) SHA1(4909c0b530f9526c8bf76e502c914ef10a50d1fc) ) + ROM_LOAD( "afega7.uc3", 0x200000, 0x200000, CRC(02d7f9de) SHA1(10102ffbf37a57afa300b01cb5067b7e672f4999) ) + + ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "afega3.u4", 0x00000, 0x10000, CRC(f39dd5d2) SHA1(80d05d57a621b0063f63ce05be9314f718b3c111) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "afega2.u95", 0x00000, 0x40000, CRC(ecd8eeac) SHA1(849beba8f04cc322bb8435fa4c26551a6d0dec64) ) +ROM_END + +/* +Mang-chi by Afega + +1x osc 4mhz +1x osc 12mhz +1x tmp68hc0000p-10 +1x z80c006 +1x AD65 (MSM6295) +1x CY5001 (YM2151 rebadged) +2x dipswitch +1x fpga +1x smd ASIC not marked + +Dumped by Corrado Tomaselli +*/ + +ROM_START( mangchi ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "afega9.u112", 0x00000, 0x40000, CRC(0b1517a5) SHA1(50e307641759bb2a35aff56ef9598364740803a0) ) + ROM_LOAD16_BYTE( "afega10.u107", 0x00001, 0x40000, CRC(b1d0f33d) SHA1(68b5be3f7911f7299566c5bf5801e90099433613) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "sound.u92", 0x00000, 0x10000, CRC(bec4f9aa) SHA1(18fb2ee06892983c117a62b70cd72a98f60a08b6) ) + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "afega6.uc11", 0x000000, 0x040000, CRC(979efc30) SHA1(227fe1e20137253aac04585d2bbf67091d032e56) ) + ROM_LOAD16_BYTE( "afega7.uc14", 0x000001, 0x040000, CRC(c5cbcc38) SHA1(86070a9598e80f90ec7892d623e1a975ccc68178) ) + + ROM_REGION( 0x100000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "afega5.uc6", 0x000000, 0x80000, CRC(c73261e0) SHA1(0bb66aa315aaecb26169812cf47a6504a74f0db5) ) + ROM_LOAD( "afega4.uc1", 0x080000, 0x80000, CRC(73940917) SHA1(070305c81de959c9d00b6cf1cc20bbafa204976a) ) + + ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "afega2.u95", 0x00000, 0x40000, CRC(78c8c1f9) SHA1(eee0d03164a0ac0ddc5186ab56090320e9d33aa7) ) +ROM_END + +/*************************************************************************** + + Bubble 2000 (c)1998 Tuning + +Bubble 2000 +Tuning, 1998 + +CPU : TMP68HC000P-10 (68000) +SOUND : Z840006 (Z80, 44 pin QFP), YM2151, OKI M6295 +OSC : 4.000MHZ, 12.000MHz +DIPSW : 8 position (x2) +RAM : 6116 (x5, gfx related?) 6116 (x1, sound program ram), 6116 (x1, near rom3) + 64256 (x4, gfx related?), 62256 (x2, main program ram), 6264 (x2, gfx related?) +PALs/PROMs: None +Custom: Unknown 208 pin QFP labelled LTC2 (Graphics generator) + Unknown 68 pin PLCC labelled LTC1 (?, near rom 2 and rom 3) +ROMs : + +Filename Type Possible Use +---------------------------------------------- +rom01.92 27C512 Sound Program +rom02.95 27C020 Oki Samples +rom03.4 27C512 ? (located near rom 1 and 2 and near LTC1) +rom04.1 27C040 \ +rom05.3 27C040 | +rom06.6 27C040 | +rom07.9 27C040 | Gfx +rom08.11 27C040 | +rom09.14 27C040 | +rom12.2 27C040 | +rom13.7 27C040 / + +rom10.112 27C040 \ Main Program +rom11.107 27C040 / + + + + +***************************************************************************/ + +ROM_START( bubl2000 ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "rom10.112", 0x00000, 0x20000, CRC(87f960d7) SHA1(d22fe1740217ac20963bd9003245850598ccecf2) ) + ROM_LOAD16_BYTE( "rom11.107", 0x00001, 0x20000, CRC(b386041a) SHA1(cac36e22a39b5be0c5cd54dce5c912ff811edb28) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "rom01.92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) /* same as the other games on this driver */ + + ROM_REGION( 0x080000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "rom08.11", 0x000000, 0x040000, CRC(519dfd82) SHA1(116b06f6e7b283a5417338f716bbaab6cfadb41d) ) + ROM_LOAD16_BYTE( "rom09.14", 0x000001, 0x040000, CRC(04fcb5c6) SHA1(7594fa6bf98fc01b8848473a222a621c7c9ff00d) ) + + ROM_REGION( 0x300000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "rom06.6", 0x000000, 0x080000, CRC(ac1aabf5) SHA1(abce6ba381b189ab3ec703a8ef74bccbe10876e0) ) + ROM_LOAD( "rom07.9", 0x080000, 0x080000, CRC(69aff769) SHA1(89b98c1023710861e622c8a186b6ec48f5109d42) ) + ROM_LOAD( "rom13.7", 0x100000, 0x080000, CRC(3a5b7226) SHA1(1127740c5bc2f830d73a77c8831e1b0db6606375) ) + ROM_LOAD( "rom04.1", 0x180000, 0x080000, CRC(46acd054) SHA1(1bd7a1b6b2ce6a3daa8c92843c546beb377af8fb) ) + ROM_LOAD( "rom05.3", 0x200000, 0x080000, CRC(37deb6a1) SHA1(3a8a3d961800bb15fd389429b92fa1e5b5f416df) ) + ROM_LOAD( "rom12.2", 0x280000, 0x080000, CRC(1fdc59dd) SHA1(d38e21c878241b4315a36e0590397211ca63f2c4) ) + + ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "rom03.4", 0x00000, 0x10000, CRC(f4c15588) SHA1(a21ae71c0a8c7c1df63f9905fd86303bc2d3991c) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "rom02.95", 0x00000, 0x40000, CRC(859a86e5) SHA1(7b51964227411a40aac54b9cd9ff64f091bdf2b0) ) +ROM_END + + +/* + +Hot Bubble +Afega, 1998 + +PCB Layout +---------- + +Bottom Board + +|------------------------------------------| +| BS902 BS901 Z80 4MHz | +| | +| 6116 6295 | +| 62256 | +| 6116 62256 | +| 6116 | +|J 6116 |------------| | +|A 6116 | 68000 | | +|M |------------| | +|M DSW2 6264 | +|A 6264 | +| | +| |-------| | +| | | | +| | | | +| DSW1 | | 62256 62256 | +| |-------| | +| 6116 62256 62256 | +|12MHz 6116 | +|------------------------------------------| +Notes: + 68000 - running at 12.000MHz + Z80 - running at 4.000MHz + 62256 - 32K x8 SRAM + 6264 - 8K x8 SRAM + 6116 - 2K x8 SRAM + BS901 - YM2151, running at 4.000MHz + BS902 - YM3012 + 6295 - OKI MSM6295 running at 1.000MHz [4/4], sample rate = 1000000 / 132 + * - Unknown QFP208 + VSync - 56.2Hz (measured on 68000 IPL1) + +Top Board + +|---------------------------| +| | +| S1 S2 T1 | +| | +| CR5 CR7 C1 | +| | +| CR6 +CR8 C2 | +| | +| BR1 BR3 | +| | +| +BR2 +BR4 | +| | +| CR1 CR3 |------| | +| | * | | +| CR2 +CR4 | | | +| |------| | +|---------------------------| +Notes: + * - Unknown PLCC68 IC + + - Not populated + +*/ + +ROM_START( hotbubl ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "c1.uc1", 0x00001, 0x40000, CRC(7bb240e9) SHA1(99048fa275182c3da3bfb0dedd790f4b5858bd92) ) + ROM_LOAD16_BYTE( "c2.uc9", 0x00000, 0x40000, CRC(7917b95d) SHA1(0344bae9c373c5943e7693720e5e531bc2e0d7ee) ) + + ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "s1.uc14", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) ) /* same as the other games on this driver */ + + ROM_REGION( 0x100000, REGION_GFX1, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "br1.uc3", 0x000000, 0x080000, CRC(6fc18de4) SHA1(57b4823fc41637780f64eadd1ddf61db531a2599) ) + ROM_LOAD16_BYTE( "br3.uc10", 0x000001, 0x080000, CRC(bb677240) SHA1(d7a26bcd33d491cee441edda6d092a1d08308b0e) ) + + ROM_REGION( 0x300000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "cr6.uc16", 0x100000, 0x080000, CRC(99d6523c) SHA1(0b628585d749e175d5a4dc600af1ba9cb936bfeb) ) + ROM_LOAD( "cr7.uc19", 0x080000, 0x080000, CRC(a89d9ce4) SHA1(5965b2b4b67bc91bc0e7474e593c7e1953b75adc) ) + ROM_LOAD( "cr5.uc15", 0x000000, 0x080000, CRC(65bd5159) SHA1(627ccc0ab131e643c3c52ee9bb41c7a85153c35e) ) + + ROM_LOAD( "cr2.uc7", 0x280000, 0x080000, CRC(27ad6fc8) SHA1(00b1a5c5e1a245590b300b9baf71585d41813e3e) ) + ROM_LOAD( "cr3.uc12", 0x200000, 0x080000, CRC(c841a4f6) SHA1(9b0ee5623c87a0cfc63d3741a65d399bd6593f18) ) + ROM_LOAD( "cr1.uc6", 0x180000, 0x080000, CRC(fc9101d2) SHA1(1d5b8484264b6d73fe032946096a469226cce901) ) + + ROM_REGION( 0x10000, REGION_GFX3, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "t1.uc2", 0x00000, 0x10000, CRC(ce683a93) SHA1(aeee2671051f1badf2255375cd7c5fa847d1746c) ) + + ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "s2.uc18", 0x00000, 0x40000, CRC(401c980f) SHA1(e47710c47cfeecce3ccf87f845b219a9c9f21ee3) ) +ROM_END + +static DRIVER_INIT( bubl2000 ) { - UINT16 ret, i; - - ret=0; - for (i=0; i<16; i++) - ret |= (((src >> bitp[i]) & 1) << (15-i)); - - return ret; + decryptcode( 23, 22, 21, 20, 19, 18, 13, 14, 15, 16, 17, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ); } +/* -static UINT32 bjtwin_address_map_sprites(UINT32 addr) +Fire Hawk - ESD +--------------- + +- To enter test mode, hold on button 1 at boot up + + +PCB Layout +---------- + +ESD-PROT-002 +|------------------------------------------------| +| FHAWK_S1.U40 FHAWK_S2.U36 | +| 6116 6295 FHAWK_S3.U41 | +| 6295 FHAWK_G1.UC6| +| PAL Z80 FHAWK_G2.UC5| +| 4MHz |--------| | +| | ACTEL | | +|J 6116 62256 |A54SX16A| | +|A 6116 62256 | | | +|M |(QFP208)| | +|M |--------| | +|A DSW1 FHAWK_G3.UC2 | +| DSW2 |--------| | +| DSW3 | ACTEL | | +| 6116 |A54SX16A| | +| 6116 | | | +| 62256 |(QFP208)| | +| FHAWK_P1.U59 |--------| | +| FHAWK_P2.U60 PAL 62256 62256| +| | +|12MHz 62256 68000 62256 62256| +|------------------------------------------------| +Notes: + 68000 clock: 12.000MHz + Z80 clock: 4.000MHz + 6295 clocks: 1.000MHz (both), sample rate = 1000000 / 132 (both) + VSync: 56Hz + +*/ + +ROM_START( firehawk ) + ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "fhawk_p1.u59", 0x00001, 0x80000, CRC(d6d71a50) SHA1(e947720a0600d049b7ea9486442e1ba5582536c2) ) + ROM_LOAD16_BYTE( "fhawk_p2.u60", 0x00000, 0x80000, CRC(9f35d245) SHA1(5a22146f16bff7db924550970ed2a3048bc3edab) ) + + ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "fhawk_s1.u40", 0x00000, 0x20000, CRC(c6609c39) SHA1(fe9b5f6c3ab42c48cb493fecb1181901efabdb58) ) + + ROM_REGION( 0x200000, REGION_GFX1,ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD( "fhawk_g3.uc2", 0x00000, 0x200000, CRC(cae72ff4) SHA1(7dca7164015228ea039deffd234778d0133971ab) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "fhawk_g1.uc6", 0x000000, 0x200000, CRC(2ab0b06b) SHA1(25362f6a517f188c62bac28b1a7b7b49622b1518) ) + ROM_LOAD( "fhawk_g2.uc5", 0x200000, 0x200000, CRC(d11bfa20) SHA1(15142004ab49f7f1e666098211dff0835c61df8d) ) + + ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + // Unused + + ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "fhawk_s2.u36", 0x00000, 0x40000, CRC(d16aaaad) SHA1(96ca173ca433164ed0ae51b41b42343bd3cfb5fe) ) + + ROM_REGION( 0x040000, REGION_SOUND2, 0 ) /* Samples */ + ROM_LOAD( "fhawk_s3.u41", 0x00000, 0x40000, CRC(3fdcfac2) SHA1(c331f2ea6fd682cfb00f73f9a5b995408eaab5cf) ) +ROM_END + +/* + +CPU +1x unknown custom chip +1x FPGA +1x oscillator 4.000MHz +1x oscillator 12.000MHz +2x AD-65 + +ROMs +1x TMS27C512 (1) +1x MX27C4000 (3) +2x TMS27C010A (2,4) +2x TMS27C020 (5,6) +3x MX29F1610ML (uc1,uc2,uc3) + +Note +1x JAMMA connector +1x trimmer (volume) +2x8 dip switches + +*/ + +ROM_START( spec2k ) + ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "yonatech5.u124", 0x00000, 0x40000, CRC(72ab5c05) SHA1(182a811982b89b8cda0677547ef0625c274f5c6b) ) + ROM_LOAD16_BYTE( "yonatech6.u120", 0x00001, 0x40000, CRC(7e44bd9c) SHA1(da59685be14a09ec037743fcec34fb293f7d588d) ) + + ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "yonatech1.u103", 0x00000, 0x10000, CRC(ef5acda7) SHA1(e55b36a1598ecbbbad984997d61599dfa3958f60) ) + + ROM_REGION( 0x200000, REGION_GFX1,ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD( "u154.bin", 0x00000, 0x200000, CRC(f77b764e) SHA1(37e249bd4d7174c5232261880ce8debf42723716) ) + + ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "u153.bin", 0x000000, 0x200000, CRC(a00bbf8f) SHA1(622f52ef50d52cdd5e6b250d68439caae5c13404) ) + ROM_LOAD( "u152.bin", 0x200000, 0x200000, CRC(f6423fab) SHA1(253e0791eb58efa1df42e9c74d397e6e65c8c252) ) + + ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "yonatech4.u3", 0x00000, 0x20000, CRC(5626b08e) SHA1(63207ed6b4fc8684690bf3fe1991a4f3babd73e8) ) + + ROM_REGION( 0x020000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "yonatech2.u101", 0x00000, 0x20000, CRC(4160f172) SHA1(0478a5a4bbba115e6cfb5501aa55aa2836c963bf) ) + + ROM_REGION( 0x080000, REGION_SOUND2, 0 ) /* Samples */ + ROM_LOAD( "yonatech3.u106", 0x00000, 0x80000, CRC(6644c404) SHA1(b7ad3f9f08971432d024ef8be3fa3140f0bbae67) ) +ROM_END + +static DRIVER_INIT( spec2k ) { - return ((addr&0x00010)>> 4) | ((addr&0x20000)>>16) | ((addr&0x100000)>>18); + decryptcode( 23, 22, 21, 20, + 19, 18, 17, 13, + 14, 15, 16, 12, + 11, 10, 9, 8, + 7, 6, 5, 4, + 3, 2, 1, 0 ); } +/* + 1995, Afega -static void decode_gfx(void) -{ - /* GFX are scrambled. We decode them here. (BIG Thanks to Antiriad for descrambling info) */ - UINT8 *rom; - int A; + 1x TMP68000P-10 (main) + 1x GOLDSTAR Z8400A (sound) + 1x AD-65 (equivalent to OKI6295) + 1x LATTICE pLSI 1032 60LJ A428A48 + 1x oscillator 8.000MHz + 1x oscillator 12.000MHz - static const UINT8 decode_data_bg[8][8] = - { - {0x3,0x0,0x7,0x2,0x5,0x1,0x4,0x6}, - {0x1,0x2,0x6,0x5,0x4,0x0,0x3,0x7}, - {0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0}, - {0x7,0x6,0x5,0x0,0x1,0x4,0x3,0x2}, - {0x2,0x0,0x1,0x4,0x3,0x5,0x7,0x6}, - {0x5,0x3,0x7,0x0,0x4,0x6,0x2,0x1}, - {0x2,0x7,0x0,0x6,0x5,0x3,0x1,0x4}, - {0x3,0x4,0x7,0x6,0x2,0x0,0x5,0x1}, - }; + 1x 27256 (SU6) + 1x 27C010 (SU12) + 1x 27C020 (SU13) + 2x 27c4001 (UB11, UB13) + 3x 27C010 (UJ11, UJ12, UJ13) + 1x 27C4001 (UI20) - static const UINT8 decode_data_sprite[8][16] = - { - {0x9,0x3,0x4,0x5,0x7,0x1,0xb,0x8,0x0,0xd,0x2,0xc,0xe,0x6,0xf,0xa}, - {0x1,0x3,0xc,0x4,0x0,0xf,0xb,0xa,0x8,0x5,0xe,0x6,0xd,0x2,0x7,0x9}, - {0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0}, - {0xf,0xe,0xc,0x6,0xa,0xb,0x7,0x8,0x9,0x2,0x3,0x4,0x5,0xd,0x1,0x0}, + 1x JAMMA edge connector + 1x trimmer (volume) +*/ - {0x1,0x6,0x2,0x5,0xf,0x7,0xb,0x9,0xa,0x3,0xd,0xe,0xc,0x4,0x0,0x8}, /* Haze 20/07/00 */ - {0x7,0x5,0xd,0xe,0xb,0xa,0x0,0x1,0x9,0x6,0xc,0x2,0x3,0x4,0x8,0xf}, /* Haze 20/07/00 */ - {0x0,0x5,0x6,0x3,0x9,0xb,0xa,0x7,0x1,0xd,0x2,0xe,0x4,0xc,0x8,0xf}, /* Antiriad, Corrected by Haze 20/07/00 */ - {0x9,0xc,0x4,0x2,0xf,0x0,0xb,0x8,0xa,0xd,0x3,0x6,0x5,0xe,0x1,0x7}, /* Antiriad, Corrected by Haze 20/07/00 */ - }; +ROM_START( twinactn ) + ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 Code */ + ROM_LOAD16_BYTE( "afega.uj13", 0x00000, 0x20000, CRC(9187701d) SHA1(1da8d1e3969f60c7b0521cd22c723cb51619df9d) ) + ROM_LOAD16_BYTE( "afega.uj12", 0x00001, 0x20000, CRC(fe8cff9c) SHA1(a1a04deff9e2cb54c69601898cf4e5133c2bc437) ) + + ROM_REGION( 0x8000, REGION_CPU2, 0 ) /* Z80 Code */ + ROM_LOAD( "afega.su6", 0x0000, 0x8000, CRC(3a52dc88) SHA1(87941987d34d93df6df9ff33ccfbd1f5d4a39c51) ) // 1111xxxxxxxxxxx = 0x00 + + ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */ + ROM_LOAD16_BYTE( "afega.ub11", 0x00000, 0x80000, CRC(287f20d8) SHA1(11faa36b97593c0b5cee70343750ae1ecd2f5b71) ) + ROM_LOAD16_BYTE( "afega.ub13", 0x00001, 0x80000, CRC(f525f819) SHA1(78ffcb709a3a900d3851392630a11ab58fc0bc75) ) + + ROM_REGION( 0x80000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */ + ROM_LOAD( "afega.ui20", 0x00000, 0x80000, CRC(237c8f92) SHA1(bb3131b450bd78d03b789626a465fb9e7a4604a7) ) + + ROM_REGION( 0x20000, REGION_GFX1, ROMREGION_DISPOSE ) /* Layer 1, 8x8x4 */ + ROM_LOAD( "afega.uj11", 0x00000, 0x20000, CRC(3f439e92) SHA1(27e5b1b0aa3b13fa35e3f83793037314b2942aa2) ) + + ROM_REGION( 0x100000, REGION_SOUND1, 0 ) /* Samples */ + ROM_LOAD( "afega.su12", 0x000000, 0x20000, CRC(91d665f3) SHA1(10b5b07ed28ea78b6d3493afc03e003a8468c007) ) + ROM_RELOAD( 0x040000, 0x20000 ) + ROM_RELOAD( 0x080000, 0x20000 ) + ROM_RELOAD( 0x0c0000, 0x20000 ) + ROM_RELOAD( 0x020000, 0x20000 ) + ROM_RELOAD( 0x060000, 0x20000 ) + ROM_LOAD( "afega.su13", 0x0a0000, 0x20000, CRC(30e1c306) SHA1(c859f11fd329793b11e96264e91c79a557b488a4) ) + ROM_CONTINUE( 0x0e0000, 0x20000 ) +ROM_END - /* background */ - rom = memory_region(REGION_GFX2); - for (A = 0;A < memory_region_length(REGION_GFX2);A++) - { - rom[A] = decode_byte( rom[A], decode_data_bg[bjtwin_address_map_bg0(A)]); - } - /* sprites */ - rom = memory_region(REGION_GFX3); - for (A = 0;A < memory_region_length(REGION_GFX3);A += 2) - { - UINT16 tmp = decode_word( rom[A+1]*256 + rom[A], decode_data_sprite[bjtwin_address_map_sprites(A)]); - rom[A+1] = tmp >> 8; - rom[A] = tmp & 0xff; - } -} - -static void decode_tdragonb(void) -{ - /* Descrambling Info Again Taken from Raine, Huge Thanks to Antiriad and the Raine Team for - going Open Source, best of luck in future development. */ - - UINT8 *rom; - int A; - - /* The Main 68k Program of the Bootleg is Bitswapped */ - static const UINT8 decode_data_tdragonb[1][16] = - { - {0xe,0xc,0xa,0x8,0x7,0x5,0x3,0x1,0xf,0xd,0xb,0x9,0x6,0x4,0x2,0x0}, - }; - - /* Graphic Roms Could Also Do With Rearranging to make things simpler */ - static const UINT8 decode_data_tdragonbgfx[1][8] = - { - {0x7,0x6,0x5,0x3,0x4,0x2,0x1,0x0}, - }; - - rom = memory_region(REGION_CPU1); - for (A = 0;A < memory_region_length(REGION_CPU1);A += 2) - { -#ifdef LSB_FIRST - UINT16 tmp = decode_word( rom[A+1]*256 + rom[A], decode_data_tdragonb[0]); - rom[A+1] = tmp >> 8; - rom[A] = tmp & 0xff; -#else - UINT16 tmp = decode_word( rom[A]*256 + rom[A+1], decode_data_tdragonb[0]); - rom[A] = tmp >> 8; - rom[A+1] = tmp & 0xff; -#endif - } - - rom = memory_region(REGION_GFX2); - for (A = 0;A < memory_region_length(REGION_GFX2);A++) - { - rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); - } - - rom = memory_region(REGION_GFX3); - for (A = 0;A < memory_region_length(REGION_GFX3);A++) - { - rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); - } -} - -static void decode_ssmissin(void) -{ - /* Like Thunder Dragon Bootleg without the Program Rom Swapping */ - UINT8 *rom; - int A; - - /* Graphic Roms Could Also Do With Rearranging to make things simpler */ - static const UINT8 decode_data_tdragonbgfx[1][8] = - { - {0x7,0x6,0x5,0x3,0x4,0x2,0x1,0x0}, - }; - - rom = memory_region(REGION_GFX2); - for (A = 0;A < memory_region_length(REGION_GFX2);A++) - { - rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); - } - - rom = memory_region(REGION_GFX3); - for (A = 0;A < memory_region_length(REGION_GFX3);A++) - { - rom[A] = decode_byte( rom[A], decode_data_tdragonbgfx[0]); - } -} +/*************************************************************************** -static DRIVER_INIT( nmk ) -{ - decode_gfx(); -} - -static DRIVER_INIT( hachamf ) -{ - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - //rom[0x0006/2] = 0x7dc2; /* replace reset vector with the "real" one */ - - // kludge the sound communication to let commands go through. - rom[0x048a/2] = 0x4e71; - rom[0x04aa/2] = 0x4e71; -} - -static DRIVER_INIT( tdragonb ) -{ - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - decode_tdragonb(); - - /* The Following Patch is taken from Raine, Otherwise the game has no Sprites in Attract Mode or After Level 1 - which is rather odd considering its a bootleg.. */ - rom[0x00308/2] = 0x4e71; /* Sprite Problem */ -} - -static DRIVER_INIT( tdragon ) -{ - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - //rom[0x94b0/2] = 0; /* Patch out JMP to shared memory (protection) */ - //rom[0x94b2/2] = 0x92f4; - - // kludge the sound communication to let commands go through. - rom[0x048a/2] = 0x4e71; - rom[0x04aa/2] = 0x4e71; -} - -static DRIVER_INIT( ssmissin ) -{ - decode_ssmissin(); -} + Game Drivers -int is_blkheart; +***************************************************************************/ -// see raine's games/nmk.c -static WRITE16_HANDLER ( test_2a_w ) -{ - data = data >> 8; - - ram[0x2a/2] = (data << 8) | data; - - if (data == 1 || data == 2) { - ram[0x68/2] = 11; - ram[0x6a/2] = 0; - } -} - -static WRITE16_HANDLER ( test_2a_mustang_w ) -{ - data = data >> 8; - - ram[0x2a/2] = (data << 8) | data; - - if (data == 1 || data == 2) { - ram[0x2e/2] = 10; - ram[0x2c/2] = 0; - } - -} - -static DRIVER_INIT( blkheart ) -{ - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - is_blkheart = 1; // sprite enable is different? - - // see raine's games/nmk.c - rom[0x872/2] = 0x4e71; - rom[0x874/2] = 0x4e71; - rom[0x876/2] = 0x4e71; - rom[0x8d6/2] = 0x0300; - rom[0xe1c/2] = 0x0300; - rom[0x23dc/2] = 0x0300; - rom[0x3dea/2] = 0x0300; - - memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf902a, 0xf902b, 0, 0, test_2a_w ); -} - -static DRIVER_INIT( mustang ) -{ - UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1); - - is_blkheart = 1; // sprite enable is different? - - // see raine's games/nmk.c - rom[0x85c/2] = 0x4e71; - rom[0x85e/2] = 0x4e71; - rom[0x860/2] = 0x4e71; - rom[0x8c0/2] = 0x0300; - rom[0xc00/2] = 0x0300; - rom[0x30b2/2] = 0x0300; - - memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf902a, 0xf902b, 0, 0, test_2a_mustang_w ); -} - -static DRIVER_INIT( bjtwin ) -{ - driver_init_nmk(machine); - - /* Patch rom to enable test mode */ - -/* 008F54: 33F9 0008 0000 000F FFFC move.w $80000.l, $ffffc.l - * 008F5E: 3639 0008 0002 move.w $80002.l, D3 - * 008F64: 3003 move.w D3, D0 \ - * 008F66: 3203 move.w D3, D1 | This code remaps - * 008F68: 0041 BFBF ori.w #-$4041, D1 | buttons 2 and 3 to - * 008F6C: E441 asr.w #2, D1 | button 1, so - * 008F6E: 0040 DFDF ori.w #-$2021, D0 | you can't enter - * 008F72: E240 asr.w #1, D0 | service mode - * 008F74: C640 and.w D0, D3 | - * 008F76: C641 and.w D1, D3 / - * 008F78: 33C3 000F FFFE move.w D3, $ffffe.l - * 008F7E: 207C 000F 9000 movea.l #$f9000, A0 - */ - -// data 16_t *rom = (UINT16 *)memory_region(REGION_CPU1); -// rom[0x09172/2] = 0x6006; /* patch checksum error */ -// rom[0x08f74/2] = 0x4e71); -} - -/* NO NMK004, it has a PIC instead */ -static READ16_HANDLER( vandykeb_r ) { return 0x0000; }; -static DRIVER_INIT (vandykeb) -{ - memory_install_read16_handler(0, ADDRESS_SPACE_PROGRAM, 0x08000e, 0x08000f, 0, 0, vandykeb_r ); - memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0x08001e, 0x08001f, 0, 0, MWA16_NOP ); -} - -GAME( 1989, tharrier, 0, tharrier, tharrier, 0, ROT270, "UPL (American Sammy license)", "Task Force Harrier", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) -GAME( 1989, tharierj, tharrier,tharrier, tharrier, 0, ROT270, "UPL", "Task Force Harrier (Japan)", GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING ) -GAME( 1990, mustang, 0, mustang, mustang, mustang, ROT0, "UPL", "US AAF Mustang (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND) // Playable but there are Still Protection Problems -GAME( 1990, mustangs, mustang, mustang, mustang, mustang, ROT0, "UPL (Seoul Trading license)", "US AAF Mustang (Seoul Trading)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) // Playable but there are Still Protection Problems +GAME( 1989, tharrier, 0, tharrier, tharrier, 0, ROT270, "UPL (American Sammy license)", "Task Force Harrier", 0 ) +GAME( 1989, tharierj, tharrier,tharrier, tharrier, 0, ROT270, "UPL", "Task Force Harrier (Japan)", 0 ) +GAME( 1990, mustang, 0, mustang, mustang, 0, ROT0, "UPL", "US AAF Mustang (Japan)", GAME_IMPERFECT_SOUND) +GAME( 1990, mustangs, mustang, mustang, mustang, 0, ROT0, "UPL (Seoul Trading license)", "US AAF Mustang (Seoul Trading)", GAME_IMPERFECT_SOUND ) GAME( 1990, bioship, 0, bioship, bioship, 0, ROT0, "UPL (American Sammy license)", "Bio-ship Paladin", GAME_IMPERFECT_SOUND ) GAME( 1990, sbsgomo, bioship, bioship, bioship, 0, ROT0, "UPL", "Space Battle Ship Gomorrah", GAME_IMPERFECT_SOUND ) GAME( 1990, vandyke, 0, vandyke, vandyke, 0, ROT270, "UPL", "Vandyke (Japan)", GAME_IMPERFECT_SOUND ) GAME( 1990, vandyjal, vandyke, vandyke, vandyke, 0, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, Set 1)", GAME_IMPERFECT_SOUND ) GAME( 1990, vandyja2, vandyke, vandyke, vandyke, 0, ROT270, "UPL (Jaleco license)", "Vandyke (Jaleco, Set 2)", GAME_IMPERFECT_SOUND ) GAME( 1990, vandykeb, vandyke, vandykeb, vandyke, vandykeb, ROT270, "[UPL] (bootleg)", "Vandyke (bootleg with PIC16c57)", GAME_NOT_WORKING ) -GAME( 1991, blkheart, 0, macross, blkheart, blkheart, ROT0, "UPL", "Black Heart", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) // Playable but there are Still Protection Problems -GAME( 1991, blkhearj, blkheart,macross, blkheart, blkheart, ROT0, "UPL", "Black Heart (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) // Playable but there are Still Protection Problems +GAME( 1991, blkheart, 0, macross, blkheart, 0, ROT0, "UPL", "Black Heart", GAME_IMPERFECT_SOUND ) +GAME( 1991, blkhearj, blkheart,macross, blkheart, 0, ROT0, "UPL", "Black Heart (Japan)", GAME_IMPERFECT_SOUND ) GAME( 1991, acrobatm, 0, acrobatm, acrobatm, 0, ROT270, "UPL (Taito license)", "Acrobat Mission", GAME_IMPERFECT_SOUND ) GAME( 1992, strahl, 0, strahl, strahl, 0, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 1)", GAME_IMPERFECT_SOUND ) GAME( 1992, strahla, strahl, strahl, strahl, 0, ROT0, "UPL", "Koutetsu Yousai Strahl (Japan set 2)", GAME_IMPERFECT_SOUND ) @@ -5183,7 +6939,7 @@ GAME( 1995, nouryoku, 0, bjtwin, nouryoku, nmk, ROT0, "Tecmo", /* Non NMK boards */ // these use the seibu sound system (sound / music stolen from Raiden) rather than the bootleggers copying the nmk004 -GAME( 1990, mustangb, mustang, mustangb, mustang, mustang, ROT0, "bootleg", "US AAF Mustang (bootleg)", GAME_UNEMULATED_PROTECTION ) // Playable but there are Still Protection Problems +GAME( 1990, mustangb, mustang, mustangb, mustang, 0, ROT0, "bootleg", "US AAF Mustang (bootleg)", GAME_UNEMULATED_PROTECTION ) // Playable but there are Still Protection Problems GAME( 1991, tdragonb, tdragon, tdragonb, tdragonb, tdragonb, ROT270, "NMK / Tecmo", "Thunder Dragon (Bootleg)", 0 ) // these are from Comad, based on the Thunder Dragon code? @@ -5191,5 +6947,19 @@ GAME( 1992, ssmissin, 0, ssmissin, ssmissin, ssmissin, ROT270, "Comad", GAME( 1996, airattck, 0, ssmissin, airattck, ssmissin, ROT270, "Comad", "Air Attack (set 1)", GAME_NO_COCKTAIL ) GAME( 1996, airattca, airattck,ssmissin, airattck, ssmissin, ROT270, "Comad", "Air Attack (set 2)", GAME_NO_COCKTAIL ) -// bee-oh board? +// afega & clones +GAME( 1995, twinactn, 0, twinactn, twinactn, 0, ROT0, "Afega", "Twin Action", 0 ) +GAME( 1997, redhawk, stagger1, stagger1, stagger1, redhawk, ROT270, "Afega", "Red Hawk (US)", 0 ) +GAME( 1997, redhawkb, stagger1, redhawkb, redhawkb, 0, ROT0, "bootleg", "Red Hawk (bootleg)", 0 ) +GAME( 1998, stagger1, 0, stagger1, stagger1, 0, ROT270, "Afega", "Stagger I (Japan)", 0 ) +GAME( 1998, grdnstrm, 0, grdnstrm, grdnstrm, grdnstrm, ROT270, "Afega", "Sen Jin - Guardian Storm (Korea)", 0 ) +GAME( 1998, bubl2000, 0, bubl2000, bubl2000, bubl2000, ROT0, "Tuning", "Bubble 2000", 0 ) // on a tuning board (bootleg?) +GAME( 1998, hotbubl, bubl2000, bubl2000, bubl2000, bubl2000, ROT0, "Pandora", "Hot Bubble" , 0 ) // on an afega board .. +GAME( 1999, popspops, 0, popspops, popspops, grdnstrm, ROT0, "Afega", "Pop's Pop's", 0 ) +GAME( 2000, mangchi, 0, bubl2000, mangchi, bubl2000, ROT0, "Afega", "Mang-Chi", 0 ) +GAME( 2000, spec2k, 0, firehawk, spec2k, spec2k, ORIENTATION_FLIP_Y, "Yonatech", "Spectrum 2000 (Euro)", 0 ) +GAME( 2001, firehawk, 0, firehawk, firehawk, 0, ORIENTATION_FLIP_Y, "ESD", "Fire Hawk", 0 ) + +// bee-oh board - different display / interrupt timing to others? GAME( 1991, manybloc, 0, manybloc, manybloc, 0, ROT270, "Bee-Oh", "Many Block", GAME_NO_COCKTAIL | GAME_IMPERFECT_SOUND ) + diff --git a/src/mame/mame.mak b/src/mame/mame.mak index c43ed934c27..54a091cc0d6 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -1488,7 +1488,6 @@ $(MAMEOBJ)/misc.a: \ $(DRIVERS)/4enraya.o $(VIDEO)/4enraya.o \ $(DRIVERS)/acefruit.o \ $(DRIVERS)/adp.o \ - $(DRIVERS)/afega.o $(VIDEO)/afega.o \ $(DRIVERS)/ambush.o $(VIDEO)/ambush.o \ $(DRIVERS)/ampoker.o $(VIDEO)/ampoker.o \ $(DRIVERS)/amspdwy.o $(VIDEO)/amspdwy.o \ diff --git a/src/mame/video/afega.c b/src/mame/video/afega.c deleted file mode 100644 index d4962550984..00000000000 --- a/src/mame/video/afega.c +++ /dev/null @@ -1,381 +0,0 @@ -/*************************************************************************** - - -= Afega Games =- - - driver by Luca Elia (l.elia@tin.it) - - -Note: if MAME_DEBUG is defined, pressing Z with: - - Q / W Shows Layer 0 / 1 - A Shows Sprites - - Keys can be used together! - - [ 2 Layers ] - [ Layer 0 ] [ Layer 1 ] - - Tile Size: 16 x 16 x 4/8 8 x 8 x 4 - Layer Size (pixels): 1024 x 1024 256 x 256 - Layer Size (tiles): 64 x 64 32 x 32 - Scrolling: Yes No - - The layout is a bit weird. 16 consecutive tile codes define a - vertical column. 16 columns form a page (256 x 256). - Layer 0 is made of 4 x 4 pages. Layer 1 of just 1 page. - - [ 256 Sprites ] - - Sprites are made of 16 x 16 x 4 tiles. Size can vary from 1 to 16 - tiles both horizontally and vertically. - Is there zooming ? - - [ Priorities ] - - The game only uses this scheme: - - Back -> Front: Layer 0, Sprites, Layer 1 - -***************************************************************************/ - -#include "driver.h" -#ifdef MAME_DEBUG -#include "ui.h" -#endif - -/* Variables needed by drivers: */ - -UINT16 *afega_vram_0, *afega_scroll_0; -UINT16 *afega_vram_1, *afega_scroll_1; - - -/*************************************************************************** - - - Palette - RRRRGGGGBBBB???? - - -***************************************************************************/ - -WRITE16_HANDLER( afega_palette_w ) -{ - int r,g,b; - data = COMBINE_DATA(&paletteram16[offset]); - b = ((data & 0x00F0) >> 3 ) + ((data & 0x0002) >> 1); - g = ((data & 0x0F00) >> 7 ) + ((data & 0x0004) >> 2); - r = ((data & 0xF000) >> 11) + ((data & 0x0008) >> 3); - palette_set_color_rgb( Machine, offset, pal5bit(r) , pal5bit(g) , pal5bit(b) ); -} - -/* This game uses 8 bit tiles, so it ignores the color codes and just - uses the same 256 colors for every tile */ -PALETTE_INIT( grdnstrm ) -{ - int color, pen; - for( color = 0; color < 16; color++ ) - for( pen = 0; pen < 256; pen++ ) - colortable[color * 256 + pen + 256*3] = 256*0 + pen; -} - - -/*************************************************************************** - - Tilemaps - - Offset: Bits: Value: - - 2.w fedc ---- ---- ---- Color - ---- ba98 7654 3210 Code - -***************************************************************************/ - -#define TILES_PER_PAGE_X (0x10) -#define TILES_PER_PAGE_Y (0x10) -#define PAGES_PER_TMAP_X (0x4) -#define PAGES_PER_TMAP_Y (0x4) -#define FIREHAWK_PAGES_PER_TMAP_X (0x1) -#define FIREHAWK_PAGES_PER_TMAP_Y (0x1) -#define TWINACTN_TILES_PER_PAGE_X (0x100) -#define TWINACTN_TILES_PER_PAGE_Y (0x10) -#define TWINACTN_PAGES_PER_TMAP_X (0x1) -#define TWINACTN_PAGES_PER_TMAP_Y (0x1) - - -static TILEMAP_MAPPER( afega_tilemap_scan_pages ) -{ - return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X + - (row % TILES_PER_PAGE_Y) + - - (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + - (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; -} - -static TILEMAP_MAPPER( twinactn_tilemap_scan_pages ) -{ - return (row / TWINACTN_TILES_PER_PAGE_Y) * TWINACTN_TILES_PER_PAGE_X * TWINACTN_TILES_PER_PAGE_Y * TWINACTN_PAGES_PER_TMAP_X + - (row % TWINACTN_TILES_PER_PAGE_Y) + - - (col / TWINACTN_TILES_PER_PAGE_X) * TWINACTN_TILES_PER_PAGE_X * TWINACTN_TILES_PER_PAGE_Y + - (col % TWINACTN_TILES_PER_PAGE_X) * TWINACTN_TILES_PER_PAGE_Y; -} - -static TILEMAP_MAPPER( firehawk_tilemap_scan_pages ) -{ - return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * FIREHAWK_PAGES_PER_TMAP_X + - (row % TILES_PER_PAGE_Y) + - - (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + - (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; -} - -static tilemap *tilemap_0, *tilemap_1; - -static TILE_GET_INFO( get_tile_info_0 ) -{ - UINT16 code = afega_vram_0[tile_index]; - SET_TILE_INFO( - 1, - code, - (code & 0xf000) >> 12, - 0); -} -static TILE_GET_INFO( get_tile_info_1 ) -{ - UINT16 code = afega_vram_1[tile_index]; - SET_TILE_INFO( - 2, - code, - (code & 0xf000) >> 12, - 0); -} - -WRITE16_HANDLER( afega_vram_0_w ) -{ - COMBINE_DATA(&afega_vram_0[offset]); - tilemap_mark_tile_dirty(tilemap_0,offset); -} -WRITE16_HANDLER( afega_vram_1_w ) -{ - COMBINE_DATA(&afega_vram_1[offset]); - tilemap_mark_tile_dirty(tilemap_1,offset); -} - - -/*************************************************************************** - - - Video Hardware Init - - -***************************************************************************/ - -VIDEO_START( afega ) -{ - tilemap_0 = tilemap_create( get_tile_info_0, afega_tilemap_scan_pages, - TILEMAP_TYPE_PEN, - 16,16, - TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); - - tilemap_1 = tilemap_create( get_tile_info_1, tilemap_scan_cols, - TILEMAP_TYPE_PEN, - 8,8, - 32,32); - - tilemap_set_transparent_pen(tilemap_1,0xf); -} - -VIDEO_START( twinactn ) -{ - tilemap_0 = tilemap_create( get_tile_info_0, twinactn_tilemap_scan_pages, - TILEMAP_TYPE_PEN, - 16,16, - TWINACTN_TILES_PER_PAGE_X*TWINACTN_PAGES_PER_TMAP_X,TWINACTN_TILES_PER_PAGE_Y*TWINACTN_PAGES_PER_TMAP_Y); - - tilemap_1 = tilemap_create( get_tile_info_1, tilemap_scan_cols, - TILEMAP_TYPE_PEN, - 8,8, - 32,32); - - tilemap_set_transparent_pen(tilemap_1,0xf); -} - -VIDEO_START( firehawk ) -{ - tilemap_0 = tilemap_create( get_tile_info_0, firehawk_tilemap_scan_pages, - TILEMAP_TYPE_PEN, - 16,16, - TILES_PER_PAGE_X*FIREHAWK_PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*FIREHAWK_PAGES_PER_TMAP_Y); - - tilemap_1 = tilemap_create( get_tile_info_1, tilemap_scan_cols, - TILEMAP_TYPE_PEN, - 8,8, - 32,32); - - tilemap_set_transparent_pen(tilemap_1,0xf); -} - - -/*************************************************************************** - - Sprites Drawing - - Offset: Bits: Value: - - 0.w fedc ba-- ---- ---- - ---- --9- ---- ---- Flip Y? - ---- ---8 7654 3--- - ---- --------- -21- Priority? - ---- ---- ---- ---0 1 = Draw This Sprite - - 2.w fedc ba98 ---- ---- - ---- ---- 7654 ---- Number Of Tiles Along Y - 1 - ---- ---- ---- 3210 Number Of Tiles Along X - 1 - - 4.w - - 6.w Code - - 8.w fedc ba98 ---- ---- - ---- ---- 7654 3210 X (Signed) - - A.w - - C.w fedc ba98 ---- ---- - ---- ---- 7654 3210 Y (Signed) - - E.w fedc ba98 7654 ---- - ---- ---- ---- 3210 Color - - -***************************************************************************/ - -static void draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect, UINT16 attr_mask) -{ - int offs; - - int max_x = machine->screen[0].width; - int max_y = machine->screen[0].height; - - for ( offs = 0; offs < spriteram_size/2; offs += 16/2 ) - { - int attr, dim, code, sx, sy, color, flipx, flipy; - - int x, xnum, xstart, xend, xinc; - int y, ynum, ystart, yend, yinc; - - attr = spriteram16[offs + 0x0/2]; - if (!(attr & attr_mask)) continue; - dim = spriteram16[offs + 0x2/2]; - code = spriteram16[offs + 0x6/2]; - sx = spriteram16[offs + 0x8/2]; - sy = spriteram16[offs + 0xc/2]; - color = spriteram16[offs + 0xe/2]; - - flipx = attr & 0x000; // ? - flipy = attr & 0x000; // ? - - xnum = ((dim >> 0) & 0xf) + 1; - ynum = ((dim >> 4) & 0xf) + 1; - - sx = (sx & 0xff) - (sx & 0x100); - sy = (sy & 0xff) - (sy & 0x100); - - if (flip_screen_x) { flipx = !flipx; sx = max_x - sx - xnum * 16; } - if (flip_screen_y) { flipy = !flipy; sy = max_y - sy - ynum * 16; } - - if (flipx) { xstart = xnum-1; xend = -1; xinc = -1; } - else { xstart = 0; xend = xnum; xinc = +1; } - - if (flipy) { ystart = ynum-1; yend = -1; yinc = -1; } - else { ystart = 0; yend = ynum; yinc = +1; } - - for (y = ystart; y != yend; y += yinc) - { - for (x = xstart; x != xend; x += xinc) - { - drawgfx( bitmap,machine->gfx[0], - code++, - color, - flipx, flipy, - sx + x * 16, sy + y * 16, - cliprect,TRANSPARENCY_PEN,15 ); - } - } - -#ifdef MAME_DEBUG -#if 1 -if (input_code_pressed(KEYCODE_X)) -{ /* Display some info on each sprite */ - char buf[10]; - sprintf(buf, "%X",(spriteram16[offs + 0x0/2]&6)/2); - ui_draw_text(buf, sy, sx); -} -#endif -#endif - } -} - - - -/*************************************************************************** - - - Screen Drawing - - -***************************************************************************/ - -static void video_update(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, - int dsw_flipscreen, // 1 = Horizontal and vertical screen flip are hardwired to 2 dip switches - int xoffset, int yoffset, // tilemap_0 offsets - int attr_mask // "sprite active" mask - ) -{ - int layers_ctrl = -1; - - if (dsw_flipscreen) - { - - flip_screen_x_set(~readinputport(2) & 0x0100); - flip_screen_y_set(~readinputport(2) & 0x0200); - } - - tilemap_set_scrollx(tilemap_0, 0, afega_scroll_0[1] + xoffset); - tilemap_set_scrolly(tilemap_0, 0, afega_scroll_0[0] + yoffset); - - tilemap_set_scrollx(tilemap_1, 0, afega_scroll_1[1]); - tilemap_set_scrolly(tilemap_1, 0, afega_scroll_1[0]); - -#ifdef MAME_DEBUG -if ( input_code_pressed(KEYCODE_Z) ) -{ int msk = 0; - if (input_code_pressed(KEYCODE_Q)) msk |= 1; - if (input_code_pressed(KEYCODE_W)) msk |= 2; - if (input_code_pressed(KEYCODE_A)) msk |= 4; - if (msk != 0) layers_ctrl &= msk; } -#endif - - if (layers_ctrl & 1) tilemap_draw(bitmap,cliprect,tilemap_0,0,0); - else fillbitmap(bitmap,get_black_pen(machine),cliprect); - - if (layers_ctrl & 4) draw_sprites(machine,bitmap,cliprect, attr_mask); - - if (layers_ctrl & 2) tilemap_draw(bitmap,cliprect,tilemap_1,0,0); -} - -VIDEO_UPDATE( afega ) { video_update(machine,bitmap,cliprect, 1, -0x100,+0x000, 0x0001); return 0; } -VIDEO_UPDATE( bubl2000 ) { video_update(machine,bitmap,cliprect, 0, -0x100,+0x000, 0x0001); return 0; } // no flipscreen support, I really would confirmation from the schematics -VIDEO_UPDATE( redhawkb ) { video_update(machine,bitmap,cliprect, 0, +0x000,+0x100, 0x0001); return 0; } -VIDEO_UPDATE( twinactn ) { video_update(machine,bitmap,cliprect, 0, +0x000,+0x000, 0x0100); return 0; } - -VIDEO_UPDATE( firehawk ) -{ - tilemap_set_scrolly(tilemap_0, 0, afega_scroll_1[1] + 0x100); - tilemap_set_scrollx(tilemap_0, 0, afega_scroll_1[0]); - - tilemap_draw(bitmap,cliprect,tilemap_0,0,0); - draw_sprites(machine,bitmap,cliprect,1); - - tilemap_draw(bitmap,cliprect,tilemap_1,0,0); - return 0; -} diff --git a/src/mame/video/nmk16.c b/src/mame/video/nmk16.c index bd8260466ec..72035bdb66c 100644 --- a/src/mame/video/nmk16.c +++ b/src/mame/video/nmk16.c @@ -1,3 +1,12 @@ +/* notes... + + drawing sprites in a single pass with pdrawgfx breaks Thunder Dragon 2, + which seems to expect the sprite priority values to affect sprite-sprite + priority. Thunder Dragon 2 also breaks if you support sprite flipping, + the collectable point score / power up names appear flipped.. + +*/ + #include "driver.h" UINT16 *nmk_bgvideoram,*nmk_fgvideoram,*nmk_txvideoram; @@ -15,6 +24,7 @@ static UINT8 bioship_scroll[4]; static tilemap *bg_tilemap,*fg_tilemap,*tx_tilemap; static mame_bitmap *background_bitmap; +extern UINT16* nmk16_mainram; /*************************************************************************** @@ -92,8 +102,8 @@ VIDEO_START( bioship ) { bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,256,32); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,32,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); background_bitmap = auto_bitmap_alloc(8192,512,machine->screen[0].format); tilemap_set_transparent_pen(bg_tilemap,15); @@ -101,8 +111,8 @@ VIDEO_START( bioship ) bioship_background_bank=0; redraw_bitmap = 1; - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 0; /* 256x224 screen, no shift */ } @@ -112,14 +122,14 @@ VIDEO_START( strahl ) bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,256,32); fg_tilemap = tilemap_create(strahl_get_fg_tile_info, bg_scan,TILEMAP_TYPE_PEN,16,16,256,32); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,32,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); tilemap_set_transparent_pen(fg_tilemap,15); tilemap_set_transparent_pen(tx_tilemap,15); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 0; /* 256x224 screen, no shift */ background_bitmap = NULL; @@ -129,13 +139,13 @@ VIDEO_START( macross ) { bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,256,32); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,32,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); tilemap_set_transparent_pen(tx_tilemap,15); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 0; /* 256x224 screen, no shift */ background_bitmap = NULL; @@ -145,14 +155,14 @@ VIDEO_START( gunnail ) { bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,256,32); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,64,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); tilemap_set_transparent_pen(tx_tilemap,15); tilemap_set_scroll_rows(bg_tilemap,512); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ @@ -163,13 +173,13 @@ VIDEO_START( macross2 ) { bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,1024,128); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,64,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); tilemap_set_transparent_pen(tx_tilemap,15); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ @@ -180,13 +190,13 @@ VIDEO_START( tdragon2 ) { bg_tilemap = tilemap_create(macross_get_bg_tile_info,bg_scan_td2,TILEMAP_TYPE_PEN,16,16,1024,32); tx_tilemap = tilemap_create(macross_get_tx_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,64,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); tilemap_set_transparent_pen(tx_tilemap,15); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ @@ -196,11 +206,11 @@ VIDEO_START( tdragon2 ) VIDEO_START( bjtwin ) { bg_tilemap = tilemap_create(bjtwin_get_bg_tile_info,tilemap_scan_cols,TILEMAP_TYPE_PEN,8,8,64,32); - spriteram_old = auto_malloc(spriteram_size); - spriteram_old2 = auto_malloc(spriteram_size); + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); - memset(spriteram_old,0,spriteram_size); - memset(spriteram_old2,0,spriteram_size); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); videoshift = 64; /* 384x224 screen, leftmost 64 pixels have to be retrieved */ /* from the other side of the tilemap (!) */ @@ -410,7 +420,7 @@ WRITE16_HANDLER( gunnail_scrolly_w ) ***************************************************************************/ -extern int is_blkheart; + // manybloc uses extra flip bits on the sprites, but these break other games @@ -418,9 +428,9 @@ static void nmk16_draw_sprites(running_machine *machine, mame_bitmap *bitmap, co { int offs; - for (offs = 0;offs < spriteram_size/2;offs += 8) + for (offs = 0;offs < 0x1000/2;offs += 8) { - if ((spriteram_old2[offs] & 0x0001) || (spriteram_old2[offs] && is_blkheart)) + if ((spriteram_old2[offs] & 0x0001)) { int sx = (spriteram_old2[offs+4] & 0x1ff) + videoshift; int sy = (spriteram_old2[offs+6] & 0x1ff); @@ -465,83 +475,23 @@ static void nmk16_draw_sprites(running_machine *machine, mame_bitmap *bitmap, co } } -/* sprites have flipping and are not delayed 2 frames */ -static void manybloc_draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int priority) +static void nmk16_draw_sprites_flipsupported(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int priority) { int offs; - for (offs = 0;offs < spriteram_size/2;offs += 8) + for (offs = 0;offs < 0x1000/2;offs += 8) { - if ((spriteram16[offs] & 0x0001) || (spriteram16[offs] && is_blkheart)) + if (spriteram_old2[offs] & 0x0001) { - int sx = (spriteram16[offs+4] & 0x1ff) + videoshift; - int sy = (spriteram16[offs+6] & 0x1ff); - int code = spriteram16[offs+3]; - int color = spriteram16[offs+7]; - int w = (spriteram16[offs+1] & 0x0f); - int h = ((spriteram16[offs+1] & 0xf0) >> 4); - int pri = (spriteram16[offs] & 0xc0) >> 6; - /* these would break some of the nmk games ... */ - int flipy= ((spriteram16[offs+1] & 0x0200) >> 9); - int flipx = ((spriteram16[offs+1] & 0x0100) >> 8); - - int xx,yy,x; - int delta = 16; - - if(pri != priority) - continue; - - flipx ^= flip_screen; - flipy ^= flip_screen; - - if (flip_screen) - { - sx = 368 - sx; - sy = 240 - sy; - delta = -16; - } - - yy = h; - do - { - x = sx; - xx = w; - do - { - drawgfx(bitmap,machine->gfx[2], - code, - color, - flipx, flipy, - ((x + 16) & 0x1ff) - 16,sy & 0x1ff, - cliprect,TRANSPARENCY_PEN,15); - - code++; - x += delta; - } while (--xx >= 0); - - sy += delta; - } while (--yy >= 0); - } - } -} - -static void tharrier_draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int priority) -{ - int offs; - - for (offs = 0;offs < spriteram_size/2;offs += 8) - { - if ((spriteram16[offs] & 0x0001) || (spriteram16[offs] && is_blkheart)) - { - int sx = (spriteram16[offs+4] & 0x1ff) + videoshift; - int sy = (spriteram16[offs+6] & 0x1ff); - int code = spriteram16[offs+3]; - int color = spriteram16[offs+7]; - int w = (spriteram16[offs+1] & 0x0f); - int h = ((spriteram16[offs+1] & 0xf0) >> 4); - int pri = (spriteram16[offs] & 0xc0) >> 6; - int flipy= ((spriteram16[offs+1] & 0x0200) >> 9); - int flipx = ((spriteram16[offs+1] & 0x0100) >> 8); + int sx = (spriteram_old2[offs+4] & 0x1ff) + videoshift; + int sy = (spriteram_old2[offs+6] & 0x1ff); + int code = spriteram_old2[offs+3]; + int color = spriteram_old2[offs+7]; + int w = (spriteram_old2[offs+1] & 0x0f); + int h = ((spriteram_old2[offs+1] & 0xf0) >> 4); + int pri = (spriteram_old2[offs] & 0xc0) >> 6; + int flipy= ((spriteram_old2[offs+1] & 0x0200) >> 9); + int flipx = ((spriteram_old2[offs+1] & 0x0100) >> 8); int xx,yy,x; int delta = 16; @@ -588,22 +538,22 @@ static void tharrier_draw_sprites(running_machine *machine, mame_bitmap *bitmap, } } + VIDEO_UPDATE( macross ) { tilemap_set_scrollx(tx_tilemap,0,-videoshift); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } -extern UINT16 *nmk16_mcu_shared_ram; -extern UINT16 *nmk16_mcu_work_ram; - /*coin setting MCU simulation*/ static void mcu_run(UINT8 dsw_setting) { @@ -627,7 +577,7 @@ static void mcu_run(UINT8 dsw_setting) old_value = readinputport(0); if(dsw_a == 0 || dsw_b == 0) - nmk16_mcu_work_ram[0x000/2]|=0x4000; //free_play + nmk16_mainram[0x9000/2]|=0x4000; //free_play if(read_coin != old_value) { @@ -635,15 +585,15 @@ static void mcu_run(UINT8 dsw_setting) { switch(dsw_a & 7) { - case 1: nmk16_mcu_shared_ram[0xf00/2]+=4; break; - case 2: nmk16_mcu_shared_ram[0xf00/2]+=3; break; - case 3: nmk16_mcu_shared_ram[0xf00/2]+=2; break; + case 1: nmk16_mainram[0xef00/2]+=4; break; + case 2: nmk16_mainram[0xef00/2]+=3; break; + case 3: nmk16_mainram[0xef00/2]+=2; break; case 4: coina++; if(coina >= 4) { coina = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; case 5: @@ -651,7 +601,7 @@ static void mcu_run(UINT8 dsw_setting) if(coina >= 3) { coina = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; case 6: @@ -659,10 +609,10 @@ static void mcu_run(UINT8 dsw_setting) if(coina >= 2) { coina = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; - case 7: nmk16_mcu_shared_ram[0xf00/2]++; break; + case 7: nmk16_mainram[0xef00/2]++; break; } } @@ -670,15 +620,15 @@ static void mcu_run(UINT8 dsw_setting) { switch(dsw_b & 7) { - case 1: nmk16_mcu_shared_ram[0xf00/2]+=4; break; - case 2: nmk16_mcu_shared_ram[0xf00/2]+=3; break; - case 3: nmk16_mcu_shared_ram[0xf00/2]+=2; break; + case 1: nmk16_mainram[0xef00/2]+=4; break; + case 2: nmk16_mainram[0xef00/2]+=3; break; + case 3: nmk16_mainram[0xef00/2]+=2; break; case 4: coinb++; if(coinb >= 4) { coinb = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; case 5: @@ -686,7 +636,7 @@ static void mcu_run(UINT8 dsw_setting) if(coinb >= 3) { coinb = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; case 6: @@ -694,37 +644,37 @@ static void mcu_run(UINT8 dsw_setting) if(coinb >= 2) { coinb = 0; - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; } break; - case 7: nmk16_mcu_shared_ram[0xf00/2]++; break; + case 7: nmk16_mainram[0xef00/2]++; break; } } if(!(readinputport(0) & 0x04))//SERVICE_COIN - nmk16_mcu_shared_ram[0xf00/2]++; + nmk16_mainram[0xef00/2]++; - if(nmk16_mcu_shared_ram[0xf00/2] >= 1 && (nmk16_mcu_work_ram[0x000/2] & 0x8000))/*enable start button*/ + if(nmk16_mainram[0xef00/2] >= 1 && (nmk16_mainram[0x9000/2] & 0x8000))/*enable start button*/ { /*Start a 1-player game,but don't decrement if the player 1 is already playing*/ if((!(readinputport(0) & 0x08)) /*START1*/ - && (!(nmk16_mcu_work_ram[0x000/2] & 0x0200)) /*PLAYER-1 playing*/ + && (!(nmk16_mainram[0x9000/2] & 0x0200)) /*PLAYER-1 playing*/ ) - nmk16_mcu_shared_ram[0xf00/2]--; + nmk16_mainram[0xef00/2]--; /*Start a 2-players game,but don't decrement if the player 2 is already playing*/ if((!(readinputport(0) & 0x10)) - && (!(nmk16_mcu_work_ram[0x000/2] & 0x0100)) + && (!(nmk16_mainram[0x9000/2] & 0x0100)) ) { - if(!(nmk16_mcu_work_ram[0x000/2] & 0x0200) && nmk16_mcu_shared_ram[0xf00/2] >= 2) - nmk16_mcu_shared_ram[0xf00/2]-=2; + if(!(nmk16_mainram[0x9000/2] & 0x0200) && nmk16_mainram[0xef00/2] >= 2) + nmk16_mainram[0xef00/2]-=2; else - nmk16_mcu_shared_ram[0xf00/2]--; + nmk16_mainram[0xef00/2]--; } } - if(nmk16_mcu_shared_ram[0xf00/2] > 99) nmk16_mcu_shared_ram[0xf00/2] = 99; + if(nmk16_mainram[0xef00/2] > 99) nmk16_mainram[0xef00/2] = 99; } } @@ -735,10 +685,12 @@ VIDEO_UPDATE( tdragon ) tilemap_set_scrollx(tx_tilemap,0,-videoshift); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } @@ -750,10 +702,12 @@ VIDEO_UPDATE( hachamf ) tilemap_set_scrollx(tx_tilemap,0,-videoshift); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } @@ -763,23 +717,30 @@ VIDEO_UPDATE( manybloc ) tilemap_set_scrollx(tx_tilemap,0,-videoshift); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - manybloc_draw_sprites(machine, bitmap,cliprect,3); - manybloc_draw_sprites(machine, bitmap,cliprect,2); - manybloc_draw_sprites(machine, bitmap,cliprect,1); - manybloc_draw_sprites(machine, bitmap,cliprect,0); + + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,1); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } VIDEO_UPDATE( tharrier ) { + /* I think the protection device probably copies this to the regs... */ + UINT16 tharrier_scroll = nmk16_mainram[0x9f00/2]; + tilemap_set_scrollx(tx_tilemap,0,-videoshift); tilemap_set_scrollx(bg_tilemap,0,tharrier_scroll); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - tharrier_draw_sprites(machine, bitmap,cliprect,3); - tharrier_draw_sprites(machine, bitmap,cliprect,2); - tharrier_draw_sprites(machine, bitmap,cliprect,1); - tharrier_draw_sprites(machine, bitmap,cliprect,0); + + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,1); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } @@ -842,10 +803,12 @@ VIDEO_UPDATE( bioship ) copyscrollbitmap(bitmap,background_bitmap,1,&scrollx,1,&scrolly,cliprect,TRANSPARENCY_NONE,0); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } @@ -856,10 +819,12 @@ VIDEO_UPDATE( strahl ) tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); return 0; } @@ -869,16 +834,251 @@ VIDEO_UPDATE( bjtwin ) tilemap_set_scrollx(bg_tilemap,0,-videoshift); tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + nmk16_draw_sprites(machine, bitmap,cliprect,3); nmk16_draw_sprites(machine, bitmap,cliprect,2); nmk16_draw_sprites(machine, bitmap,cliprect,1); nmk16_draw_sprites(machine, bitmap,cliprect,0); + return 0; } VIDEO_EOF( nmk ) { - /* looks like sprites are *two* frames ahead */ - memcpy(spriteram_old2,spriteram_old,spriteram_size); - memcpy(spriteram_old,spriteram16,spriteram_size); + /* sprites are DMA'd from Main RAM to a private buffer automatically + (or at least this is how I interpret the datasheet) */ + + /* -- I actually see little evidence to support this, sprite lag + in some games should be checked on real boards */ + +// memcpy(spriteram_old2,spriteram_old,0x1000); + memcpy(spriteram_old2,nmk16_mainram+0x8000/2,0x1000); } + + + +/* Variables needed by drivers: */ + +UINT16 *afega_vram_0, *afega_scroll_0; +UINT16 *afega_vram_1, *afega_scroll_1; + + +/*************************************************************************** + + + Palette - RRRRGGGGBBBB???? + + +***************************************************************************/ + +WRITE16_HANDLER( afega_palette_w ) +{ + int r,g,b; + data = COMBINE_DATA(&paletteram16[offset]); + b = ((data & 0x00F0) >> 3 ) + ((data & 0x0002) >> 1); + g = ((data & 0x0F00) >> 7 ) + ((data & 0x0004) >> 2); + r = ((data & 0xF000) >> 11) + ((data & 0x0008) >> 3); + palette_set_color_rgb( Machine, offset, pal5bit(r) , pal5bit(g) , pal5bit(b) ); +} + +/* This game uses 8 bit tiles, so it ignores the color codes and just + uses the same 256 colors for every tile */ +PALETTE_INIT( grdnstrm ) +{ + int color, pen; + for( color = 0; color < 16; color++ ) + for( pen = 0; pen < 256; pen++ ) + colortable[color * 256 + pen + 256*3] = 256*0 + pen; +} + + +/*************************************************************************** + + Tilemaps + + Offset: Bits: Value: + + 2.w fedc ---- ---- ---- Color + ---- ba98 7654 3210 Code + +***************************************************************************/ + +#define TILES_PER_PAGE_X (0x10) +#define TILES_PER_PAGE_Y (0x10) +#define PAGES_PER_TMAP_X (0x4) +#define PAGES_PER_TMAP_Y (0x4) +#define FIREHAWK_PAGES_PER_TMAP_X (0x1) +#define FIREHAWK_PAGES_PER_TMAP_Y (0x1) +#define TWINACTN_TILES_PER_PAGE_X (0x100) +#define TWINACTN_TILES_PER_PAGE_Y (0x10) +#define TWINACTN_PAGES_PER_TMAP_X (0x1) +#define TWINACTN_PAGES_PER_TMAP_Y (0x1) + + +static TILEMAP_MAPPER( afega_tilemap_scan_pages ) +{ + return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X + + (row % TILES_PER_PAGE_Y) + + + (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + + (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; +} + +static TILEMAP_MAPPER( firehawk_tilemap_scan_pages ) +{ + return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * FIREHAWK_PAGES_PER_TMAP_X + + (row % TILES_PER_PAGE_Y) + + + (col / TILES_PER_PAGE_X) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y + + (col % TILES_PER_PAGE_X) * TILES_PER_PAGE_Y; +} + +static tilemap *tilemap_0, *tilemap_1; + +static TILE_GET_INFO( get_tile_info_0 ) +{ + UINT16 code = afega_vram_0[tile_index]; + SET_TILE_INFO( + 0, + code, + (code & 0xf000) >> 12, + 0); +} +static TILE_GET_INFO( get_tile_info_1 ) +{ + UINT16 code = afega_vram_1[tile_index]; + SET_TILE_INFO( + 1, + code, + (code & 0xf000) >> 12, + 0); +} + +WRITE16_HANDLER( afega_vram_0_w ) +{ + COMBINE_DATA(&afega_vram_0[offset]); + tilemap_mark_tile_dirty(tilemap_0,offset); +} +WRITE16_HANDLER( afega_vram_1_w ) +{ + COMBINE_DATA(&afega_vram_1[offset]); + tilemap_mark_tile_dirty(tilemap_1,offset); +} + + +/*************************************************************************** + + + Video Hardware Init + + +***************************************************************************/ + +VIDEO_START( afega ) +{ + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); + + + tilemap_0 = tilemap_create( get_tile_info_0, afega_tilemap_scan_pages, + TILEMAP_TYPE_PEN, + 16,16, + TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y); + + tilemap_1 = tilemap_create( get_tile_info_1, tilemap_scan_cols, + TILEMAP_TYPE_PEN, + 8,8, + 32,32); + + tilemap_set_transparent_pen(tilemap_1,0xf); +} + + + +VIDEO_START( firehawk ) +{ + spriteram_old = auto_malloc(0x1000); + spriteram_old2 = auto_malloc(0x1000); + memset(spriteram_old,0,0x1000); + memset(spriteram_old2,0,0x1000); + + + tilemap_0 = tilemap_create( get_tile_info_0, firehawk_tilemap_scan_pages, + TILEMAP_TYPE_PEN, + 16,16, + TILES_PER_PAGE_X*FIREHAWK_PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*FIREHAWK_PAGES_PER_TMAP_Y); + + tilemap_1 = tilemap_create( get_tile_info_1, tilemap_scan_cols, + TILEMAP_TYPE_PEN, + 8,8, + 32,32); + + tilemap_set_transparent_pen(tilemap_1,0xf); +} + + +/*************************************************************************** + + + Screen Drawing + + +***************************************************************************/ + +static void video_update(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, + int dsw_flipscreen, // 1 = Horizontal and vertical screen flip are hardwired to 2 dip switches + int xoffset, int yoffset, // tilemap_0 offsets + int attr_mask // "sprite active" mask + ) +{ + + + + if (dsw_flipscreen) + { + + flip_screen_x_set(~readinputport(2) & 0x0100); + flip_screen_y_set(~readinputport(2) & 0x0200); + } + + tilemap_set_scrollx(tilemap_0, 0, afega_scroll_0[1] + xoffset); + tilemap_set_scrolly(tilemap_0, 0, afega_scroll_0[0] + yoffset); + + tilemap_set_scrollx(tilemap_1, 0, afega_scroll_1[1]); + tilemap_set_scrolly(tilemap_1, 0, afega_scroll_1[0]); + + + tilemap_draw(bitmap,cliprect,tilemap_0,0,0); + + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,1); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,0); + + tilemap_draw(bitmap,cliprect,tilemap_1,0,0); +} + +VIDEO_UPDATE( afega ) { video_update(machine,bitmap,cliprect, 1, -0x100,+0x000, 0x0001); return 0; } +VIDEO_UPDATE( bubl2000 ) { video_update(machine,bitmap,cliprect, 0, -0x100,+0x000, 0x0001); return 0; } // no flipscreen support, I really would confirmation from the schematics +VIDEO_UPDATE( redhawkb ) { video_update(machine,bitmap,cliprect, 0, +0x000,+0x100, 0x0001); return 0; } + +VIDEO_UPDATE( firehawk ) +{ + + + tilemap_set_scrolly(tilemap_0, 0, afega_scroll_1[1] + 0x100); + tilemap_set_scrollx(tilemap_0, 0, afega_scroll_1[0]); + + tilemap_draw(bitmap,cliprect,tilemap_0,0,0); + + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,3); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,2); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,1); + nmk16_draw_sprites_flipsupported(machine, bitmap,cliprect,0); + + tilemap_draw(bitmap,cliprect,tilemap_1,0,0); + return 0; +} +