summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes2
-rw-r--r--src/mame/drivers/afega.c1928
-rw-r--r--src/mame/drivers/nmk16.c2866
-rw-r--r--src/mame/mame.mak1
-rw-r--r--src/mame/video/afega.c381
-rw-r--r--src/mame/video/nmk16.c482
6 files changed, 2659 insertions, 3001 deletions
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)
-{
- UINT8 ret, i;
+/***************************************************************************
- ret = 0;
- for (i=0; i<8; i++)
- ret |= (((src >> bitp[i]) & 1) << (7-i));
+ Stagger I
+(AFEGA 1998)
- return ret;
-}
+Parts:
-static UINT32 bjtwin_address_map_bg0(UINT32 addr)
-{
- return ((addr&0x00004)>> 2) | ((addr&0x00800)>> 10) | ((addr&0x40000)>>16);
-}
+1 MC68HC000P10
+1 Z80
+2 Lattice ispLSI 1032E
+***************************************************************************/
-static UINT16 decode_word(UINT16 src, const UINT8 *bitp)
-{
- UINT16 ret, i;
+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) )
- ret=0;
- for (i=0; i<16; i++)
- ret |= (((src >> bitp[i]) & 1) << (15-i));
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
+ ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
- return ret;
-}
+ 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) )
-static UINT32 bjtwin_address_map_sprites(UINT32 addr)
+ 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 )
{
- return ((addr&0x00010)>> 4) | ((addr&0x20000)>>16) | ((addr&0x100000)>>18);
+ 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) )
-static void decode_gfx(void)
-{
- /* GFX are scrambled. We decode them here. (BIG Thanks to Antiriad for descrambling info) */
- UINT8 *rom;
- int A;
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
+ ROM_LOAD( "1.bin", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
- 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},
- };
+ 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) )
- 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},
+ ROM_REGION( 0x080000, REGION_GFX2, ROMREGION_DISPOSE ) /* Layer 0, 16x16x8 */
+ ROM_LOAD( "rhb-5.bin", 0x000000, 0x080000, CRC(d0eaf6f2) SHA1(6e946e13b06df897a63e885c9842816ec908a709) )
- {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_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
- /* 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. */
+ Sen Jin - Guardian Storm
- UINT8 *rom;
- int A;
+(C) Afega 1998
- /* 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},
- };
+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
- /* 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},
- };
+Other Chips: AFEGA AFI-GFSK (68 pin PLCC, located next to 68000)
+ AFEGA AFI-GFLK (208 pin PQFP)
- 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
- }
+ROMS:
+GST-01.U92 27C512, \
+GST-02.U95 27C2000 > Sound Related, all located near Z80
+GST-03.U4 27C512 /
- 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]);
- }
+GST-04.112 27C2000 \
+GST-05.107 27C2000 /Main Program
- 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]);
- }
-}
+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?)
-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_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 = 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_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
+ ROM_LOAD( "gst-01.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
- 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]);
- }
-}
+ 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) )
-static DRIVER_INIT( nmk )
+ 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 )
{
- decode_gfx();
+ 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 );
}
-static DRIVER_INIT( hachamf )
-{
- UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
+/* Pop's Pop's */
- //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;
-}
+Pop's Pop's by Afega (1999)
-static DRIVER_INIT( tdragonb )
-{
- UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
+The pcb might be missing an eprom in a socket
+ --- i just think it uses a generic PCB but no sprites in this case,.
- decode_tdragonb();
+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
- /* 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_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[0x94b0/2] = 0; /* Patch out JMP to shared memory (protection) */
- //rom[0x94b2/2] = 0x92f4;
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* Z80 Code */
+ ROM_LOAD( "afega1.u92", 0x00000, 0x10000, CRC(5d8cf28e) SHA1(2a440bf5136f95af137b6688e566a14e65be94b1) )
- // kludge the sound communication to let commands go through.
- rom[0x048a/2] = 0x4e71;
- rom[0x04aa/2] = 0x4e71;
-}
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_ERASEFF | ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */
+ /* no sprite roms? */
-static DRIVER_INIT( ssmissin )
+ 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 )
{
- decode_ssmissin();
+ 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 );
}
+/*
-int is_blkheart;
+Fire Hawk - ESD
+---------------
-// see raine's games/nmk.c
+- To enter test mode, hold on button 1 at boot up
-static WRITE16_HANDLER ( test_2a_w )
-{
- data = data >> 8;
- ram[0x2a/2] = (data << 8) | data;
+PCB Layout
+----------
- if (data == 1 || data == 2) {
- ram[0x68/2] = 11;
- ram[0x6a/2] = 0;
- }
-}
+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
-static WRITE16_HANDLER ( test_2a_mustang_w )
-{
- data = data >> 8;
+*/
- ram[0x2a/2] = (data << 8) | data;
+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) )
- if (data == 1 || data == 2) {
- ram[0x2e/2] = 10;
- ram[0x2c/2] = 0;
- }
+ 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) )
-static DRIVER_INIT( blkheart )
-{
- UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
+ 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) )
- is_blkheart = 1; // sprite enable is different?
+ ROM_REGION( 0x00100, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */
+ // Unused
- // 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;
+ ROM_REGION( 0x040000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "fhawk_s2.u36", 0x00000, 0x40000, CRC(d16aaaad) SHA1(96ca173ca433164ed0ae51b41b42343bd3cfb5fe) )
- memory_install_write16_handler(0, ADDRESS_SPACE_PROGRAM, 0xf902a, 0xf902b, 0, 0, test_2a_w );
-}
+ ROM_REGION( 0x040000, REGION_SOUND2, 0 ) /* Samples */
+ ROM_LOAD( "fhawk_s3.u41", 0x00000, 0x40000, CRC(3fdcfac2) SHA1(c331f2ea6fd682cfb00f73f9a5b995408eaab5cf) )
+ROM_END
-static DRIVER_INIT( mustang )
-{
- UINT16 *rom = (UINT16 *)memory_region(REGION_CPU1);
+/*
- is_blkheart = 1; // sprite enable is different?
+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
- // 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 );
-}
+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) )
-static DRIVER_INIT( bjtwin )
-{
- driver_init_nmk(machine);
+ ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* Z80 Code */
+ ROM_LOAD( "yonatech1.u103", 0x00000, 0x10000, CRC(ef5acda7) SHA1(e55b36a1598ecbbbad984997d61599dfa3958f60) )
- /* Patch rom to enable test mode */
+ ROM_REGION( 0x200000, REGION_GFX1,ROMREGION_DISPOSE ) /* Sprites, 16x16x4 */
+ ROM_LOAD( "u154.bin", 0x00000, 0x200000, CRC(f77b764e) SHA1(37e249bd4d7174c5232261880ce8debf42723716) )
-/* 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
- */
+ 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) )
-// data 16_t *rom = (UINT16 *)memory_region(REGION_CPU1);
-// rom[0x09172/2] = 0x6006; /* patch checksum error */
-// rom[0x08f74/2] = 0x4e71);
-}
+ ROM_REGION( 0x20000, REGION_GFX3, ROMREGION_DISPOSE | ROMREGION_ERASEFF ) /* Layer 1, 8x8x4 */
+ ROM_LOAD( "yonatech4.u3", 0x00000, 0x20000, CRC(5626b08e) SHA1(63207ed6b4fc8684690bf3fe1991a4f3babd73e8) )
-/* NO NMK004, it has a PIC instead */
-static READ16_HANDLER( vandykeb_r ) { return 0x0000; };
-static DRIVER_INIT (vandykeb)
+ 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 )
{
- 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 );
+ 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 );
}
-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
+/*
+ 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_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
+
+
+
+/***************************************************************************
+
+
+ Game Drivers
+
+
+***************************************************************************/
+
+
+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;
+}
+