summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/system16.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/system16.c')
-rw-r--r--src/mame/drivers/system16.c2807
1 files changed, 2807 insertions, 0 deletions
diff --git a/src/mame/drivers/system16.c b/src/mame/drivers/system16.c
new file mode 100644
index 00000000000..eda7ae2bcb4
--- /dev/null
+++ b/src/mame/drivers/system16.c
@@ -0,0 +1,2807 @@
+/*
+ Sega System16 Hardware
+ major cleanup in progress - still a lot to do!
+
+ see video/system16.c for more information
+
+Changes:
+
+04/28/04 Charles MacDonald
+- Added MSM5205 sample playback to tturfbl.
+
+03/17/04
+- Added correctly dumped ROM set for eswat to replace the old one. Game is encrypted and unplayable.
+- Moved Ace Attacker here from System 18 driver. Game is encrypted and unplayable.
+- Added sound support for tturf, tturfu, tturfbl (no samples), fpointbl, fpointbj
+- Fixed toryumon RAM test
+- Cleaned up timscannr, toryumon drivers
+03/11/04
+- Cleaned up riotcity, aurail, altbeast, bayroute drivers
+- Added missing coin control to sys16_coinctrl_w
+- Removed 'extra' RAM in some drivers and replaced with sys16_tilebank_w
+
+To do:
+- tturf and tturfu have some invalid data written to the UPD7759. I think this causes the 'pop' sound when level 1 starts.
+- tturfbl has some serious problems with tilemap scrolling
+- bayroute has a bad sprite in the door of the level 1 boss
+- altbeast writes to mirrored sprite RAM at $441000
+- tturfu has bad single sprite frame when main character walks
+- dduxbl has some 'stuck' sprites
+
+Notes:
+- toryumon RAM test accesses mirrored work RAM. Maybe there's a better way to support this than using AM_MASK.
+- I separated the fpoint and fpointbl,fpointbj machine drivers as the latter two have different sound hardware,
+ but the original does not. I think this creates a dependancy where fpointbl.zip needs flpoint.001 from fpointbj.zip,
+ as fpointbl uses fpoint ROMs (it's parent), it's own, and the sound ROM from fpointbj.
+ So add fpoint.001 to fpointbl.zip for it to work.
+ I made fpointbl the parent of fpointbj so it would use the proper memory map for the sound hardware.
+*/
+
+/***************************************************************************/
+/*
+ ASTORMBL
+ 3. In the ending, the 3 heroes are floating into a half bubble. (see picture).
+ Also colour problems during ending as well.
+ 4. In the later Shooting gallery stage (like inside the car shop and the factory (mission 3)),
+ there is some garbage graphics (sprite of death monsters that appear where they should not)
+
+ working:
+ Alex Kidd
+ Alien Storm (bootleg)
+ Alien Syndrome
+ Altered Beast (Ver 1)
+ Altered Beast (Ver 2) (No Sound)
+ Atomic Point (No Sound)
+ Aurail (Speech quality sounds poor)
+ Aurail (317-0168)
+ Bay Route
+ Body Slam
+ Dump Matsumoto (Japan, Body Slam)
+ Dynamite Dux (bootleg)
+ Enduro Racer (bootleg)
+ Enduro Racer (custom bootleg)
+ E-Swat (bootleg)
+ Fantasy Zone (Old Ver.)
+ Fantasy Zone (New Ver.)
+ Flash Point (bootleg)
+ Golden Axe (Ver 1)
+ Golden Axe (Ver 2)
+ Hang-on
+ Heavyweight Champ: some minor graphics glitches
+ Major League: No game over.
+ Moonwalker (bootleg): Music Speed varies
+ Outrun (set 1)
+ Outrun (set 2)
+ Outrun (custom bootleg)
+ Passing Shot (bootleg)
+ Passing Shot (4 player bootleg)
+ Quartet: Glitch on highscore list
+ Quartet (Japan): Glitch on highscore list
+ Quartet 2: Glitch on highscore list
+ Riot City
+ SDI
+ Shadow Dancer
+ Shadow Dancer (Japan)
+ Shinobi
+ Shinobi (Sys16A Bootleg?)
+ Space Harrier
+ Super Hangon (bootleg)
+ Tetris (bootleg)
+ Time Scanner
+ Toryumon
+ Tough Turf (Japan) (No Sound)
+ Tough Turf (US) (No Sound)
+ Tough Turf (bootleg) (No Speech Roms)
+ Wonderboy 3 - Monster Lair
+ Wonderboy 3 - Monster Lair (bootleg)
+ Wrestle War
+
+ not really working:
+ Shadow Dancer (bootleg)
+
+ protected:
+ Alex Kidd (jpn?)
+ Alien Syndrome
+ Alien Syndrome
+ Alien Syndrome (Japan)
+ Alien Storm
+ Alien Storm (2 Player)
+ Bay Route (317-0116)
+ Bay Route (protected bootleg 1)
+ Bay Route (protected bootleg 2)
+ Enduro Racer
+ E-Swat
+ Flash Point
+ Golden Axe (Ver 1 317-0121 Japan)
+ Golden Axe (Ver 2 317-0110)
+ Golden Axe (Ver 2 317-0122)
+ Golden Axe (protected bootleg)
+ Jyuohki (Japan, altered beast)
+ Moonwalker (317-0158)
+ Moonwalker (317-0159)
+ Passing Shot (317-0080)
+ Shinobi (Sys16B 317-0049)
+ Shinobi (Sys16A 317-0050)
+ SDI (Japan, old version)
+ Super Hangon
+ Tetris (Type A)
+ Tetris (Type B 317-0092)
+ Wonderboy 3 - Monster Lair (317-0089)
+
+ protected (No driver):
+ Ace Attacker
+ Action Fighter
+ Bloxeed
+ Clutch Hitter
+ Cotton (Japan)
+ Cotton
+ DD Crew
+ Dunk Shot
+ Excite League
+ Laser Ghost
+ MVP
+ Ryukyu
+ Super Leagu
+ Turbo Outrun
+ Turbo Outrun (Set 2)
+*/
+
+#include "driver.h"
+#include "cpu/z80/z80.h"
+#include "cpu/i8039/i8039.h"
+#include "system16.h"
+#include "cpu/m68000/m68000.h"
+#include "machine/fd1094.h"
+#include "sound/msm5205.h"
+#include "sound/2151intf.h"
+#include "sound/upd7759.h"
+
+void fd1094_machine_init(void);
+void fd1094_driver_init(void (*set_decrypted)(UINT8 *));
+
+static void sys16_video_config(void (*update)(void), int sprxoffs, int *bank)
+{
+ static int bank_default[16] =
+ {
+ 0x0,0x1,0x2,0x3,
+ 0x4,0x5,0x6,0x7,
+ 0x8,0x9,0xa,0xb,
+ 0xc,0xd,0xe,0xf
+ };
+
+ sys16_update_proc = update;
+ sys16_sprxoffset = sprxoffs;
+ sys16_obj_bank = bank ? bank : bank_default;
+}
+
+/***************************************************************************/
+
+// 7751 emulation
+WRITE8_HANDLER( sys16_7751_audio_8255_w );
+ READ8_HANDLER( sys16_7751_audio_8255_r );
+ READ8_HANDLER( sys16_7751_sh_rom_r );
+ READ8_HANDLER( sys16_7751_sh_t1_r );
+ READ8_HANDLER( sys16_7751_sh_command_r );
+WRITE8_HANDLER( sys16_7751_sh_dac_w );
+WRITE8_HANDLER( sys16_7751_sh_busy_w );
+WRITE8_HANDLER( sys16_7751_sh_offset_a0_a3_w );
+WRITE8_HANDLER( sys16_7751_sh_offset_a4_a7_w );
+WRITE8_HANDLER( sys16_7751_sh_offset_a8_a11_w );
+WRITE8_HANDLER( sys16_7751_sh_rom_select_w );
+
+/***************************************************************************/
+
+static UINT16 coinctrl;
+
+static WRITE16_HANDLER( sys16_3d_coinctrl_w )
+{
+ if( ACCESSING_LSB )
+{
+ coinctrl = data&0xff;
+ sys16_refreshenable = coinctrl & 0x10;
+ coin_counter_w(0,coinctrl & 0x01);
+ /* bit 6 is also used (0 in fantzone) */
+
+ /* Hang-On, Super Hang-On, Space Harrier, Enduro Racer */
+ set_led_status(0,coinctrl & 0x04);
+
+ /* Space Harrier */
+ set_led_status(1,coinctrl & 0x08);
+ }
+}
+
+static INTERRUPT_GEN( sys16_interrupt )
+{
+ cpunum_set_input_line(0, 4, HOLD_LINE); /* Interrupt vector 4, used by VBlank */
+}
+
+
+
+/***************************************************************************/
+/*
+ Tough Turf (Datsu bootleg) sound emulation
+
+ Memory map
+
+ 0000-7fff : ROM (fixed, tt014d68 0000-7fff)
+ 8000-bfff : ROM (banked)
+ e000 : Bank control
+ e800 : Sound command latch
+ f000 : MSM5205 sample data buffer
+ f800-ffff : Work RAM
+
+ Interrupts
+
+ IRQ = Read sound command from $E800
+ NMI = Copy data from fixed/banked ROM to $F000
+
+ Bank control values
+
+ 00 = tt014d68 8000-bfff
+ 01 = tt014d68 c000-ffff
+ 02 = tt0246ff 0000-3fff
+ 03 = tt0246ff 4000-7fff
+ 04 = tt0246ff 8000-bfff
+
+ The sample sound codes in the sound test are OK, but in-game sample playback is bad.
+ There seems to be more data in the high bits of the ROM bank control word which may be related.
+*/
+
+static int sample_buffer = 0;
+static int sample_select = 0;
+
+static WRITE8_HANDLER( tturfbl_msm5205_data_w )
+{
+ sample_buffer = data;
+}
+
+static void tturfbl_msm5205_callback(int data)
+{
+ MSM5205_data_w(0, (sample_buffer >> 4) & 0x0F);
+ sample_buffer <<= 4;
+ sample_select ^= 1;
+ if(sample_select == 0)
+ cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE);
+}
+
+static struct MSM5205interface tturfbl_msm5205_interface =
+{
+ tturfbl_msm5205_callback,
+ MSM5205_S48_4B
+};
+
+
+UINT8 *tturfbl_soundbank_ptr = NULL; /* Pointer to currently selected portion of ROM */
+
+static READ8_HANDLER( tturfbl_soundbank_r )
+{
+ if(tturfbl_soundbank_ptr) return tturfbl_soundbank_ptr[offset & 0x3fff];
+ return 0x80;
+}
+
+static WRITE8_HANDLER( tturfbl_soundbank_w )
+{
+ UINT8 *mem = memory_region(REGION_CPU2);
+
+ switch(data)
+ {
+ case 0:
+ tturfbl_soundbank_ptr = &mem[0x18000]; /* tt014d68 8000-bfff */
+ break;
+ case 1:
+ tturfbl_soundbank_ptr = &mem[0x1C000]; /* tt014d68 c000-ffff */
+ break;
+ case 2:
+ tturfbl_soundbank_ptr = &mem[0x20000]; /* tt0246ff 0000-3fff */
+ break;
+ case 3:
+ tturfbl_soundbank_ptr = &mem[0x24000]; /* tt0246ff 4000-7fff */
+ break;
+ case 4:
+ tturfbl_soundbank_ptr = &mem[0x28000]; /* tt0246ff 8000-bfff */
+ break;
+ case 8:
+ tturfbl_soundbank_ptr = mem;
+ break;
+ default:
+ tturfbl_soundbank_ptr = NULL;
+ logerror("Invalid bank setting %02X (%04X)\n", data, activecpu_get_pc());
+ break;
+ }
+}
+
+static ADDRESS_MAP_START( tturfbl_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0x8000, 0xbfff) AM_READ(tturfbl_soundbank_r)
+ AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_r)
+ AM_RANGE(0xf800, 0xffff) AM_READ(MRA8_RAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(tturfbl_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM)
+ AM_RANGE(0x8000, 0xbfff) AM_WRITE(MWA8_NOP) /* ROM bank */
+ AM_RANGE(0xe000, 0xe000) AM_WRITE(tturfbl_soundbank_w)
+ AM_RANGE(0xf000, 0xf000) AM_WRITE(tturfbl_msm5205_data_w)
+ AM_RANGE(0xf800, 0xffff) AM_WRITE(MWA8_RAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tturfbl_sound_readport, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x01, 0x01) AM_READ(YM2151_status_port_0_r)
+ AM_RANGE(0x80, 0x80) AM_READ(MRA8_NOP)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tturfbl_sound_writeport, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_WRITE(YM2151_data_port_0_w)
+ AM_RANGE(0x40, 0x40) AM_WRITE(MWA8_NOP)
+ AM_RANGE(0x80, 0x80) AM_WRITE(MWA8_NOP)
+ADDRESS_MAP_END
+
+/*******************************************************************************/
+
+static ADDRESS_MAP_START( sound_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_r)
+ AM_RANGE(0xf800, 0xffff) AM_READ(MRA8_RAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_WRITE(MWA8_ROM)
+ AM_RANGE(0xf800, 0xffff) AM_WRITE(MWA8_RAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_readport, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x01, 0x01) AM_READ(YM2151_status_port_0_r)
+ AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_r)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_WRITE(YM2151_data_port_0_w)
+ADDRESS_MAP_END
+
+
+// 7759
+static ADDRESS_MAP_START( sound_readmem_7759, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0x8000, 0xdfff) AM_READ(MRA8_BANK1)
+ AM_RANGE(0xe800, 0xe800) AM_READ(soundlatch_r)
+ AM_RANGE(0xf800, 0xffff) AM_READ(MRA8_RAM)
+ADDRESS_MAP_END
+
+
+static WRITE8_HANDLER( upd7759_bank_w ) //*
+{
+ int offs, size = memory_region_length(REGION_CPU2) - 0x10000;
+
+ upd7759_reset_w(0, data & 0x40);
+ offs = 0x10000 + (data * 0x4000) % size;
+ memory_set_bankptr(1, memory_region(REGION_CPU2) + offs);
+}
+
+
+static ADDRESS_MAP_START( sound_writeport_7759, ADDRESS_SPACE_IO, 8 )
+ ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
+ AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
+ AM_RANGE(0x01, 0x01) AM_WRITE(YM2151_data_port_0_w)
+ AM_RANGE(0x40, 0x40) AM_WRITE(upd7759_bank_w)
+ AM_RANGE(0x80, 0x80) AM_WRITE(upd7759_0_port_w)
+ADDRESS_MAP_END
+
+
+static WRITE16_HANDLER( sound_command_w )
+{
+ if( ACCESSING_LSB )
+{
+ soundlatch_w( 0,data&0xff );
+ cpunum_set_input_line( 1, 0, HOLD_LINE );
+ }
+}
+
+static WRITE16_HANDLER( sound_command_nmi_w )
+{
+ if( ACCESSING_LSB )
+{
+ soundlatch_w( 0,data&0xff );
+ cpunum_set_input_line(1, INPUT_LINE_NMI, PULSE_LINE);
+ }
+}
+
+//static UINT16 coinctrl;
+
+
+static WRITE16_HANDLER( sys16_coinctrl_w )
+{
+ if( ACCESSING_LSB )
+{
+ coinctrl = data&0xff;
+ sys16_refreshenable = coinctrl & 0x20;
+ set_led_status(1,coinctrl & 0x08);
+ set_led_status(0,coinctrl & 0x04);
+ coin_counter_w(1,coinctrl & 0x02);
+ coin_counter_w(0,coinctrl & 0x01);
+ /* bit 6 is also used (1 most of the time; 0 in dduxbl, sdi, wb3;
+ tturf has it normally 1 but 0 after coin insertion) */
+ /* eswat sets bit 4 */
+ }
+}
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( system16 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD_TAG("main", M68000, 10000000)
+ MDRV_CPU_VBLANK_INT(sys16_interrupt,1)
+
+ MDRV_CPU_ADD_TAG("sound", Z80, 4000000)
+ /* audio CPU */
+ MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem)
+ MDRV_CPU_IO_MAP(sound_readport,sound_writeport)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ 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(40*8, 28*8)
+ MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
+ MDRV_GFXDECODE(sys16)
+ MDRV_PALETTE_LENGTH(2048*ShadowColorsMultiplier)
+
+ MDRV_VIDEO_START(system16)
+ MDRV_VIDEO_UPDATE(system16)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD_TAG("2151", YM2151, 4000000)
+ MDRV_SOUND_ROUTE(0, "left", 0.32)
+ MDRV_SOUND_ROUTE(1, "right", 0.32)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( system16_7759 )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+
+ MDRV_CPU_MODIFY("sound")
+ MDRV_CPU_PROGRAM_MAP(sound_readmem_7759,sound_writemem)
+ MDRV_CPU_IO_MAP(sound_readport,sound_writeport_7759)
+
+ /* sound hardware */
+ MDRV_SOUND_ADD_TAG("7759", UPD7759, UPD7759_STANDARD_CLOCK)
+ MDRV_SOUND_CONFIG(sys16_upd7759_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.48)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.48)
+MACHINE_DRIVER_END
+
+
+
+/***************************************************************************/
+
+static WRITE16_HANDLER( sys16_tilebank_w )
+{
+ if(ACCESSING_LSB)
+ {
+ switch(offset & 1)
+ {
+ case 0:
+ sys16_tile_bank0 = data & 0x0F;
+ break;
+ case 1:
+ sys16_tile_bank1 = data & 0x0F;
+ break;
+ }
+ }
+}
+
+static void set_tile_bank( int data )
+{
+ sys16_tile_bank1 = data&0xf;
+ sys16_tile_bank0 = (data>>4)&0xf;
+}
+
+#if 0
+static void set_tile_bank18( int data )
+{
+ sys16_tile_bank0 = data&0xf;
+ sys16_tile_bank1 = (data>>4)&0xf;
+}
+#endif
+
+static void set_fg_page( int data )
+{
+ sys16_fg_page[0] = data>>12;
+ sys16_fg_page[1] = (data>>8)&0xf;
+ sys16_fg_page[2] = (data>>4)&0xf;
+ sys16_fg_page[3] = data&0xf;
+}
+
+static void set_bg_page( int data )
+{
+ sys16_bg_page[0] = data>>12;
+ sys16_bg_page[1] = (data>>8)&0xf;
+ sys16_bg_page[2] = (data>>4)&0xf;
+ sys16_bg_page[3] = data&0xf;
+}
+
+
+
+
+
+/***************************************************************************/
+/***************************************************************************/
+/***************************************************************************/
+
+
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( aliensyn )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x08, "2" )
+ PORT_DIPSETTING( 0x0c, "3" )
+ PORT_DIPSETTING( 0x04, "4" )
+ PORT_DIPSETTING( 0x00, "127 (Cheat)")
+ PORT_DIPNAME( 0x30, 0x30, "Timer" )
+ PORT_DIPSETTING( 0x00, "120" )
+ PORT_DIPSETTING( 0x10, "130" )
+ PORT_DIPSETTING( 0x20, "140" )
+ PORT_DIPSETTING( 0x30, "150" )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+INPUT_PORTS_END
+
+/****************************************************************************/
+
+
+/***************************************************************************/
+
+
+static ADDRESS_MAP_START( bayroute_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x500000, 0x503fff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ AM_RANGE(0x600000, 0x600fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x700000, 0x70ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x710000, 0x710fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x800000, 0x800fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0x901002, 0x901003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0x901006, 0x901007) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0x901000, 0x901001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0x902002, 0x902003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0x902000, 0x902001) AM_READ(input_port_4_word_r) // dip2
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( bayroute_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x100000, 0x100003) AM_WRITE(MWA16_NOP) // tilebank control?
+ AM_RANGE(0x500000, 0x503fff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ AM_RANGE(0x600000, 0x600fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x700000, 0x70ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x710000, 0x710fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x800000, 0x800fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0x900000, 0x900001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xff0006, 0xff0007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xff0020, 0xff003f) AM_WRITE(MWA16_NOP) // config regs
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void bayroute_update_proc( void )
+{
+ set_fg_page( sys16_textram[0x740] );
+ set_bg_page( sys16_textram[0x741] );
+ sys16_fg_scrolly = sys16_textram[0x748];
+ sys16_bg_scrolly = sys16_textram[0x749];
+ sys16_fg_scrollx = sys16_textram[0x74c];
+ sys16_bg_scrollx = sys16_textram[0x74d];
+}
+
+static MACHINE_RESET( bayroute )
+{
+ static int bank[16] = {
+ 0,0,0,0,
+ 0,0,0,3,
+ 0,0,0,2,
+ 0,1,0,0
+ };
+ sys16_obj_bank = bank;
+ sys16_update_proc = bayroute_update_proc;
+ sys16_spritesystem = sys16_sprite_shinobi;
+}
+
+static DRIVER_INIT( bayrtbl1 )
+{
+ machine_reset_sys16_onetime(machine);
+}
+/***************************************************************************/
+
+static INPUT_PORTS_START( bayroute )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x04, "1" )
+ PORT_DIPSETTING( 0x0c, "3" )
+ PORT_DIPSETTING( 0x08, "5" )
+ PORT_DIPSETTING( 0x00, "Unlimited (Cheat)")
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x30, "10000" )
+ PORT_DIPSETTING( 0x20, "15000" )
+ PORT_DIPSETTING( 0x10, "20000" )
+ PORT_DIPSETTING( 0x00, DEF_STR( None ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0xc0, "A" )
+ PORT_DIPSETTING( 0x80, "B" )
+ PORT_DIPSETTING( 0x40, "C" )
+ PORT_DIPSETTING( 0x00, "D" )
+
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( bayroute )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(bayroute_readmem,bayroute_writemem)
+
+ MDRV_MACHINE_RESET(bayroute)
+MACHINE_DRIVER_END
+
+/***************************************************************************
+
+ Body Slam
+
+***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( dduxbl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41004, 0xc41005) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( dduxbl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(sys16_tilebank_w)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xc40006, 0xc40007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc46000, 0xc4603f) AM_WRITE(SYS16_MWA16_EXTRAM2) AM_BASE(&sys16_extraram2)
+ AM_RANGE(0xfe0020, 0xfe003f) AM_WRITE(MWA16_NOP) // config regs
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void dduxbl_update_proc( void )
+{
+ sys16_fg_scrollx = (sys16_extraram2[0x0018/2] ^ 0xffff) & 0x01ff;
+ sys16_bg_scrollx = (sys16_extraram2[0x0008/2] ^ 0xffff) & 0x01ff;
+ sys16_fg_scrolly = sys16_extraram2[0x0010/2] & 0x00ff;
+ sys16_bg_scrolly = sys16_extraram2[0x0000/2];
+
+ {
+ UINT8 lu = sys16_extraram2[0x0020/2] & 0xff;
+ UINT8 ru = sys16_extraram2[0x0022/2] & 0xff;
+ UINT8 ld = sys16_extraram2[0x0024/2] & 0xff;
+ UINT8 rd = sys16_extraram2[0x0026/2] & 0xff;
+
+ if (lu==4 && ld==4 && ru==5 && rd==5)
+ { // fix a bug in chicago round (un-tested in MAME)
+ int vs=(*(UINT16 *)(&sys16_workingram[0x36ec]));
+ sys16_bg_scrolly = vs & 0xff;
+ sys16_fg_scrolly = vs & 0xff;
+ if (vs >= 0x100)
+ {
+ lu=0x26; ru=0x37;
+ ld=0x04; rd=0x15;
+ } else {
+ ld=0x26; rd=0x37;
+ lu=0x04; ru=0x15;
+ }
+ }
+ sys16_fg_page[0] = ld&0xf;
+ sys16_fg_page[1] = rd&0xf;
+ sys16_fg_page[2] = lu&0xf;
+ sys16_fg_page[3] = ru&0xf;
+
+ sys16_bg_page[0] = ld>>4;
+ sys16_bg_page[1] = rd>>4;
+ sys16_bg_page[2] = lu>>4;
+ sys16_bg_page[3] = ru>>4;
+ }
+}
+
+static MACHINE_RESET( dduxbl )
+{
+ sys16_patch_code( 0x1eb2e, 0x01 );
+ sys16_patch_code( 0x1eb2f, 0x01 );
+ sys16_patch_code( 0x1eb3c, 0x00 );
+ sys16_patch_code( 0x1eb3d, 0x00 );
+ sys16_patch_code( 0x23132, 0x01 );
+ sys16_patch_code( 0x23133, 0x01 );
+ sys16_patch_code( 0x23140, 0x00 );
+ sys16_patch_code( 0x23141, 0x00 );
+ sys16_patch_code( 0x24a9a, 0x01 );
+ sys16_patch_code( 0x24a9b, 0x01 );
+ sys16_patch_code( 0x24aa8, 0x00 );
+ sys16_patch_code( 0x24aa9, 0x00 );
+}
+
+static DRIVER_INIT( dduxbl )
+{
+ static int bank[16] = { //*
+ 0,0,0,0,
+ 0,0,0,4,
+ 0,0,0,3,
+ 0,2,0,0
+ };
+
+ machine_reset_sys16_onetime(machine);
+ sys16_video_config(dduxbl_update_proc, -0x48, bank);
+}
+/***************************************************************************/
+
+static INPUT_PORTS_START( ddux )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x06, 0x06, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x06, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x18, 0x18, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x10, "2" )
+ PORT_DIPSETTING( 0x18, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x60, 0x60, DEF_STR( Bonus_Life ) )
+ PORT_DIPSETTING( 0x40, "150000" )
+ PORT_DIPSETTING( 0x60, "200000" )
+ PORT_DIPSETTING( 0x20, "300000" )
+ PORT_DIPSETTING( 0x00, "400000" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( dduxbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(dduxbl_readmem,dduxbl_writemem)
+
+ MDRV_MACHINE_RESET(dduxbl)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+
+
+static ADDRESS_MAP_START( eswat_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x07ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x418fff) AM_READ(SYS16_MRA16_TEXTRAM) //*
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41006, 0xc41007) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static int eswat_tilebank0;
+
+static WRITE16_HANDLER( eswat_tilebank0_w )
+{
+ if( ACCESSING_LSB )
+ {
+ eswat_tilebank0 = data&0xff;
+ }
+}
+
+
+
+static ADDRESS_MAP_START( eswatbl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x07ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x3e2000, 0x3e2001) AM_WRITE(eswat_tilebank0_w)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x418fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xc80000, 0xc80001) AM_WRITE(MWA16_NOP)
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+
+/***************************************************************************/
+
+static void eswatbl_update_proc( void )
+{
+ sys16_fg_scrollx = sys16_textram[0x8008/2] ^ 0xffff;
+ sys16_bg_scrollx = sys16_textram[0x8018/2] ^ 0xffff;
+ sys16_fg_scrolly = sys16_textram[0x8000/2];
+ sys16_bg_scrolly = sys16_textram[0x8010/2];
+
+ set_fg_page( sys16_textram[0x8020/2] );
+ set_bg_page( sys16_textram[0x8028/2] );
+
+ sys16_tile_bank1 = (sys16_textram[0x8030/2])&0xf;
+ sys16_tile_bank0 = eswat_tilebank0;
+}
+
+static MACHINE_RESET( eswatbl )
+{
+ static int bank[] = {
+ 0,1, 4,5,
+ 8,9, 12,13,
+ 2,3, 6,7,
+ 10,11, 14,15
+ };
+ sys16_obj_bank = bank;
+ sys16_sprxoffset = -0x23c;
+
+ sys16_patch_code( 0x3897, 0x11 );
+
+ sys16_update_proc = eswatbl_update_proc;
+}
+
+
+static DRIVER_INIT( eswatbl )
+{
+ machine_reset_sys16_onetime(machine);
+ sys16_rowscroll_scroll=0x8000;
+ sys18_splittab_fg_x=&sys16_textram[0x0f80];
+}
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( eswat )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, "2 Credits to Start" )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, "Display Flip" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, "Time" )
+ PORT_DIPSETTING( 0x08, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x40, "2" )
+ PORT_DIPSETTING( 0xc0, "3" )
+ PORT_DIPSETTING( 0x80, "4" )
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( eswatbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(eswat_readmem,eswatbl_writemem)
+
+ MDRV_MACHINE_RESET(eswatbl)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+static ADDRESS_MAP_START( fpointbl_map, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x01ffff) AM_ROM
+// AM_RANGE(0x02002e, 0x020049) AM_READ(fp_io_service_dummy_r)
+ AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_w)
+ AM_RANGE(0x601000, 0x601001) AM_READ(input_port_0_word_r) // service
+ AM_RANGE(0x601002, 0x601003) AM_READ(input_port_1_word_r) // player1
+ AM_RANGE(0x601004, 0x601005) AM_READ(input_port_2_word_r) // player2
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0x400000, 0x40ffff) AM_READWRITE(SYS16_MRA16_TILERAM, SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_READWRITE(SYS16_MRA16_TEXTRAM, SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_READWRITE(SYS16_MRA16_SPRITERAM, SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+// AM_RANGE(0x44302a, 0x44304d) AM_READ(fp_io_service_dummy_r)
+ AM_RANGE(0x840000, 0x840fff) AM_READWRITE(SYS16_MRA16_PALETTERAM, SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+// AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE(sound_command_w) // original
+// AM_RANGE(0xfe003e, 0xfe003f) AM_READ(fp_io_service_dummy_r)
+ AM_RANGE(0xffc000, 0xffffff) AM_READWRITE(SYS16_MRA16_WORKINGRAM, SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void fpoint_update_proc( void )
+{
+ set_fg_page( sys16_textram[0x740] );
+ set_bg_page( sys16_textram[0x741] );
+ sys16_fg_scrolly = sys16_textram[0x748];
+ sys16_bg_scrolly = sys16_textram[0x749];
+ sys16_fg_scrollx = sys16_textram[0x74c];
+ sys16_bg_scrollx = sys16_textram[0x74d];
+}
+
+static MACHINE_RESET( fpointbl )
+{
+ sys16_patch_code( 0x454, 0x33 );
+ sys16_patch_code( 0x455, 0xf8 );
+ sys16_patch_code( 0x456, 0xe0 );
+ sys16_patch_code( 0x457, 0xe2 );
+ sys16_patch_code( 0x8ce8, 0x16 );
+ sys16_patch_code( 0x8ce9, 0x66 );
+ sys16_patch_code( 0x17687, 0x00 );
+ sys16_patch_code( 0x7bed, 0x04 );
+
+ sys16_patch_code( 0x7ea8, 0x61 );
+ sys16_patch_code( 0x7ea9, 0x00 );
+ sys16_patch_code( 0x7eaa, 0x84 );
+ sys16_patch_code( 0x7eab, 0x16 );
+ sys16_patch_code( 0x2c0, 0xe7 );
+ sys16_patch_code( 0x2c1, 0x48 );
+ sys16_patch_code( 0x2c2, 0xe7 );
+ sys16_patch_code( 0x2c3, 0x49 );
+ sys16_patch_code( 0x2c4, 0x04 );
+ sys16_patch_code( 0x2c5, 0x40 );
+ sys16_patch_code( 0x2c6, 0x00 );
+ sys16_patch_code( 0x2c7, 0x10 );
+ sys16_patch_code( 0x2c8, 0x4e );
+ sys16_patch_code( 0x2c9, 0x75 );
+
+ sys16_update_proc = fpoint_update_proc;
+}
+
+static DRIVER_INIT( fpointbl )
+{
+ machine_reset_sys16_onetime(machine);
+ sys16_video_config(fpoint_update_proc, -0xb8, NULL);
+}
+/***************************************************************************/
+
+static INPUT_PORTS_START( fpoint )
+ SYS16_SERVICE
+
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, "Clear round allowed" ) /* Use button 3 */
+ PORT_DIPSETTING( 0x00, "1" )
+ PORT_DIPSETTING( 0x40, "2" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+
+ SYS16_COINAGE
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( fpointbj )
+ SYS16_SERVICE
+
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) /* not used according to manual */
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) /* not used according to manual */
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) /* not used according to manual */
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) /* not used according to manual */
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, "2 Cell Move Mode" )
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+
+ SYS16_COINAGE
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+/*
+ Flash Point (Datsu bootlegs = fpointbl, fpointbj)
+ Has sound latch at $E000 instead of I/O ports $C0-FF
+*/
+static ADDRESS_MAP_START( fpointbl_sound_readmem, ADDRESS_SPACE_PROGRAM, 8 )
+ AM_RANGE(0x0000, 0x7fff) AM_READ(MRA8_ROM)
+ AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_r)
+ AM_RANGE(0xf800, 0xffff) AM_READ(MRA8_RAM)
+ADDRESS_MAP_END
+
+static MACHINE_DRIVER_START( fpointbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(fpointbl_map,0)
+
+ MDRV_CPU_MODIFY("sound")
+ MDRV_CPU_PROGRAM_MAP(fpointbl_sound_readmem,sound_writemem)
+
+ MDRV_MACHINE_RESET(fpointbl)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+static READ16_HANDLER( ga_io_players_r ) {
+ return (readinputport(0) << 8) | readinputport(1);
+}
+static READ16_HANDLER( ga_io_service_r )
+{
+ return (input_port_2_word_r(0,0) << 8) | (sys16_workingram[0x2c96/2] & 0x00ff);
+}
+
+static ADDRESS_MAP_START( goldnaxe_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x100000, 0x10ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x110000, 0x110fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x140000, 0x140fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0x1f0000, 0x1f0003) AM_READ(SYS16_MRA16_EXTRAM)
+ AM_RANGE(0x200000, 0x200fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41006, 0xc41007) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xffecd0, 0xffecd1) AM_READ(ga_io_players_r)
+ AM_RANGE(0xffec96, 0xffec97) AM_READ(ga_io_service_r)
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static WRITE16_HANDLER( ga_sound_command_w )
+{
+ COMBINE_DATA( &sys16_workingram[(0xecfc-0xc000)/2] );
+ if( ACCESSING_MSB )
+{
+ soundlatch_w( 0,data>>8 );
+ cpunum_set_input_line( 1, 0, HOLD_LINE );
+ }
+}
+
+static WRITE16_HANDLER( goldnaxe_prot_w )
+{
+ sys16_workingram[(0xecd8 - 0xc000)/2] = 0x048c;
+ sys16_workingram[(0xecda - 0xc000)/2] = 0x159d;
+ sys16_workingram[(0xecdc - 0xc000)/2] = 0x26ae;
+ sys16_workingram[(0xecde - 0xc000)/2] = 0x37bf;
+ COMBINE_DATA( &sys16_workingram[(0xec1c-0xc000)/2] );
+}
+
+static ADDRESS_MAP_START( goldnaxe_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0bffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x110000, 0x110fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x140000, 0x140fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0x1f0000, 0x1f0003) AM_WRITE(SYS16_MWA16_EXTRAM) AM_BASE(&sys16_extraram)
+ AM_RANGE(0x200000, 0x200fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xc43000, 0xc43001) AM_WRITE(MWA16_NOP) // ?
+// AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE(MWA16_NOP) I think this is the real sound out
+ AM_RANGE(0xffec1c, 0xffec1d) AM_WRITE(goldnaxe_prot_w)// how does this really work?
+ AM_RANGE(0xffecfc, 0xffecfd) AM_WRITE(ga_sound_command_w)// probably just a buffer
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram) /* fails SCRATCH RAM test because of hacks */
+// AM_RANGE(0xfffc00, 0xffffff) AM_WRITE(MWA15_NOP) /* 0x400 bytes; battery backed up */
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void goldnaxe_update_proc( void )
+{
+ set_fg_page( sys16_textram[0x740] );
+ set_bg_page( sys16_textram[0x741] );
+ sys16_fg_scrolly = sys16_textram[0x748];
+ sys16_bg_scrolly = sys16_textram[0x749];
+ sys16_fg_scrollx = sys16_textram[0x74c];
+ sys16_bg_scrollx = sys16_textram[0x74d];
+
+ set_tile_bank( sys16_workingram[0x2c94/2] );
+}
+
+static MACHINE_RESET( goldnaxe )
+{
+ static int bank[16] = {
+ 0,1,4,5,
+ 8,9,0,0,
+ 2,3,6,7,
+ 10,11,0,0
+ };
+ sys16_obj_bank = bank;
+
+// protection patch; no longer needed
+// sys16_patch_code( 0x3CB2, 0x60 );
+// sys16_patch_code( 0x3CB3, 0x1e );
+
+ sys16_sprxoffset = -0xb8;
+ sys16_update_proc = goldnaxe_update_proc;
+}
+
+
+
+static DRIVER_INIT( goldnabl )
+{
+ machine_reset_sys16_onetime(machine);
+}
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( goldnaxe )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, "Credits needed" )
+ PORT_DIPSETTING( 0x01, "1 to start, 1 to continue" )
+ PORT_DIPSETTING( 0x00, "2 to start, 1 to continue" )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x08, "1" )
+ PORT_DIPSETTING( 0x0c, "2" )
+ PORT_DIPSETTING( 0x04, "3" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x30, 0x30, "Energy Meter" )
+ PORT_DIPSETTING( 0x20, "2" )
+ PORT_DIPSETTING( 0x30, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x00, "5" )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( goldnaxe )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(goldnaxe_readmem,goldnaxe_writemem)
+
+ MDRV_MACHINE_RESET(goldnaxe)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( passsht_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x01ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41004, 0xc41005) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( passsht_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x01ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+static int passht4b_io1_val;
+static int passht4b_io2_val;
+static int passht4b_io3_val;
+
+static READ16_HANDLER( passht4b_service_r )
+{
+ UINT16 val=input_port_2_word_r(offset,0);
+ if(!(readinputport(0) & 0x40)) val&=0xef;
+ if(!(readinputport(1) & 0x40)) val&=0xdf;
+ if(!(readinputport(5) & 0x40)) val&=0xbf;
+ if(!(readinputport(6) & 0x40)) val&=0x7f;
+
+ passht4b_io3_val=(readinputport(0)<<4) | (readinputport(5)&0xf);
+ passht4b_io2_val=(readinputport(1)<<4) | (readinputport(6)&0xf);
+
+ passht4b_io1_val=0xff;
+
+ // player 1 buttons
+ if(!(readinputport(0) & 0x10)) passht4b_io1_val &=0xfe;
+ if(!(readinputport(0) & 0x20)) passht4b_io1_val &=0xfd;
+ if(!(readinputport(0) & 0x80)) passht4b_io1_val &=0xfc;
+
+ // player 2 buttons
+ if(!(readinputport(1) & 0x10)) passht4b_io1_val &=0xfb;
+ if(!(readinputport(1) & 0x20)) passht4b_io1_val &=0xf7;
+ if(!(readinputport(1) & 0x80)) passht4b_io1_val &=0xf3;
+
+ // player 3 buttons
+ if(!(readinputport(5) & 0x10)) passht4b_io1_val &=0xef;
+ if(!(readinputport(5) & 0x20)) passht4b_io1_val &=0xdf;
+ if(!(readinputport(5) & 0x80)) passht4b_io1_val &=0xcf;
+
+ // player 4 buttons
+ if(!(readinputport(6) & 0x10)) passht4b_io1_val &=0xbf;
+ if(!(readinputport(6) & 0x20)) passht4b_io1_val &=0x7f;
+ if(!(readinputport(6) & 0x80)) passht4b_io1_val &=0x3f;
+
+ return val;
+}
+
+static READ16_HANDLER( passht4b_io1_r ) { return passht4b_io1_val;}
+static READ16_HANDLER( passht4b_io2_r ) { return passht4b_io2_val;}
+static READ16_HANDLER( passht4b_io3_r ) { return passht4b_io3_val;}
+
+static ADDRESS_MAP_START( passht4b_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x01ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(passht4b_service_r)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(passht4b_io1_r)
+ AM_RANGE(0xc41004, 0xc41005) AM_READ(passht4b_io2_r)
+ AM_RANGE(0xc41006, 0xc41007) AM_READ(passht4b_io3_r)
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xc43000, 0xc43001) AM_READ(input_port_0_word_r) // player1 // test mode only
+ AM_RANGE(0xc43002, 0xc43003) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc43004, 0xc43005) AM_READ(input_port_5_word_r) // player3
+ AM_RANGE(0xc43006, 0xc43007) AM_READ(input_port_6_word_r) // player4
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( passht4b_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x01ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc4600a, 0xc4600b) AM_WRITE(sys16_coinctrl_w) /* coin counter doesn't work */
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void passsht_update_proc( void )
+{
+ sys16_fg_scrollx = sys16_workingram[0x34be/2];
+ sys16_bg_scrollx = sys16_workingram[0x34c2/2];
+ sys16_fg_scrolly = sys16_workingram[0x34bc/2];
+ sys16_bg_scrolly = sys16_workingram[0x34c0/2];
+
+ set_fg_page( sys16_textram[0x0ff6/2] );
+ set_bg_page( sys16_textram[0x0ff4/2] );
+}
+
+static void passht4b_update_proc( void )
+{
+ sys16_fg_scrollx = sys16_workingram[0x34ce/2];
+ sys16_bg_scrollx = sys16_workingram[0x34d2/2];
+ sys16_fg_scrolly = sys16_workingram[0x34cc/2];
+ sys16_bg_scrolly = sys16_workingram[0x34d0/2];
+
+ set_fg_page( sys16_textram[0x0ff6/2] );
+ set_bg_page( sys16_textram[0x0ff4/2] );
+}
+
+static MACHINE_RESET( passsht )
+{
+ sys16_sprxoffset = -0x48;
+ sys16_spritesystem = sys16_sprite_passshot;
+
+ // fix name entry
+ sys16_patch_code( 0x13a8,0xc0);
+
+ sys16_update_proc = passsht_update_proc;
+}
+
+static MACHINE_RESET( passht4b )
+{
+ sys16_sprxoffset = -0xb8;
+ sys16_spritesystem = sys16_sprite_passshot;
+
+ // fix name entry
+ sys16_patch_code( 0x138a,0xc0);
+
+ sys16_update_proc = passht4b_update_proc;
+}
+
+static DRIVER_INIT( passsht )
+{
+ machine_reset_sys16_onetime(machine);
+}
+
+static DRIVER_INIT( passht4b )
+{
+ machine_reset_sys16_onetime(machine);
+}
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( passsht )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0e, 0x0e, "Initial Point" )
+ PORT_DIPSETTING( 0x06, "2000" )
+ PORT_DIPSETTING( 0x0a, "3000" )
+ PORT_DIPSETTING( 0x0c, "4000" )
+ PORT_DIPSETTING( 0x0e, "5000" )
+ PORT_DIPSETTING( 0x08, "6000" )
+ PORT_DIPSETTING( 0x04, "7000" )
+ PORT_DIPSETTING( 0x02, "8000" )
+ PORT_DIPSETTING( 0x00, "9000" )
+ PORT_DIPNAME( 0x30, 0x30, "Point Table" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( passht4b )
+ PORT_START_TAG("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 )
+
+ PORT_START_TAG("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_COCKTAIL
+
+ PORT_START_TAG("IN2")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_SERVICE_NO_TOGGLE(0x04, IP_ACTIVE_LOW)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
+
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0e, 0x0e, "Initial Point" )
+ PORT_DIPSETTING( 0x06, "2000" )
+ PORT_DIPSETTING( 0x0a, "3000" )
+ PORT_DIPSETTING( 0x0c, "4000" )
+ PORT_DIPSETTING( 0x0e, "5000" )
+ PORT_DIPSETTING( 0x08, "6000" )
+ PORT_DIPSETTING( 0x04, "7000" )
+ PORT_DIPSETTING( 0x02, "8000" )
+ PORT_DIPSETTING( 0x00, "9000" )
+ PORT_DIPNAME( 0x30, 0x30, "Point Table" )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0xc0, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+
+ PORT_START_TAG("IN5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
+
+ PORT_START_TAG("IN6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4)
+
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( passsht )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(passsht_readmem,passsht_writemem)
+
+ MDRV_MACHINE_RESET(passsht)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( passht4b )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(passht4b_readmem,passht4b_writemem)
+
+ MDRV_MACHINE_RESET(passht4b)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( shinobi )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x08, "2" )
+ PORT_DIPSETTING( 0x0c, "3" )
+ PORT_DIPSETTING( 0x04, "5" )
+ PORT_DIPSETTING( 0x00, "240 (Cheat)")
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, "Enemy's Bullet Speed" )
+ PORT_DIPSETTING( 0x40, "Slow" )
+ PORT_DIPSETTING( 0x00, "Fast" )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Language ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Japanese ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( English ) )
+
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( shinobl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41006, 0xc41007) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( shinobl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sound_command_nmi_w)
+ AM_RANGE(0xc40002, 0xc40003) AM_WRITE(sys16_3d_coinctrl_w)
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void shinobl_update_proc( void )
+{
+ set_bg_page( sys16_textram[0x74e] );
+ set_fg_page( sys16_textram[0x74f] );
+ sys16_fg_scrolly = sys16_textram[0x792] & 0x00ff;
+ sys16_bg_scrolly = sys16_textram[0x793] & 0x01ff;
+ sys16_fg_scrollx = sys16_textram[0x7fc] & 0x01ff;
+ sys16_bg_scrollx = sys16_textram[0x7fd] & 0x01ff;
+}
+
+static MACHINE_RESET( shinobl )
+{
+ static int bank[] = {
+ 0,2,4,6,
+ 1,3,5,7
+ };
+ sys16_obj_bank = bank;
+ sys16_spritesystem = sys16_sprite_quartet2;
+ sys16_sprxoffset = -0xbc;
+ sys16_fgxoffset = sys16_bgxoffset = 7;
+ sys16_tilebank_switch=0x2000;
+
+ sys16_update_proc = shinobl_update_proc;
+}
+
+static DRIVER_INIT( shinobl )
+{
+ shinobl_kludge = 1;
+ machine_reset_sys16_onetime(machine);
+}
+
+
+/***************************************************************************/
+
+
+
+static MACHINE_DRIVER_START( shinob2 )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(shinobl_readmem,shinobl_writemem)
+
+ MDRV_MACHINE_RESET(shinobl)
+MACHINE_DRIVER_END
+
+
+/***************************************************************************/
+
+
+
+/* bootleg has extra ram for regs? */
+
+static ADDRESS_MAP_START( tetrisbl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x418000, 0x41803f) AM_READ(SYS16_MRA16_EXTRAM2)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41006, 0xc41007) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xc80000, 0xc80001) AM_READ(MRA16_NOP)
+ AM_RANGE(0xffc000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tetrisbl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x418000, 0x41803f) AM_WRITE(SYS16_MWA16_EXTRAM2) AM_BASE(&sys16_extraram2)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc43034, 0xc43035) AM_WRITE(MWA16_NOP)
+ AM_RANGE(0xc80000, 0xc80001) AM_WRITE(MWA16_NOP)
+ AM_RANGE(0xffc000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+
+
+static void tetris_bootleg_update_proc( void )
+{
+ sys16_fg_scrolly = sys16_textram[0x748];
+ sys16_bg_scrolly = sys16_textram[0x749];
+ sys16_fg_scrollx = sys16_textram[0x74c];
+ sys16_bg_scrollx = sys16_textram[0x74d];
+
+ set_fg_page( sys16_extraram2[0x38/2] );
+ set_bg_page( sys16_extraram2[0x28/2] );
+}
+
+
+static MACHINE_RESET( tetrisbl )
+{
+// sys16_patch_code( 0xba6, 0x4e );
+// sys16_patch_code( 0xba7, 0x71 );
+
+ sys16_sprxoffset = -0x40;
+ sys16_update_proc = tetris_bootleg_update_proc;
+}
+
+
+static DRIVER_INIT( tetrisbl )
+{
+ machine_reset_sys16_onetime(machine);
+}
+
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( tetris )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE /* unconfirmed */
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Unknown ) ) // from the code it looks like some kind of difficulty
+ PORT_DIPSETTING( 0x0c, "A" ) // level, but all 4 levels points to the same place
+ PORT_DIPSETTING( 0x08, "B" ) // so it doesn't actually change anything!!
+ PORT_DIPSETTING( 0x04, "C" )
+ PORT_DIPSETTING( 0x00, "D" )
+ PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x30, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+
+static MACHINE_DRIVER_START( tetrisbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(tetrisbl_readmem,tetrisbl_writemem)
+
+ MDRV_MACHINE_RESET(tetrisbl)
+MACHINE_DRIVER_END
+
+/***************************************************************************/
+
+static READ16_HANDLER( tt_io_player1_r )
+{ return input_port_0_r( offset ) << 8; }
+static READ16_HANDLER( tt_io_player2_r )
+{ return input_port_1_r( offset ) << 8; }
+static READ16_HANDLER( tt_io_service_r )
+{ return input_port_2_r( offset ) << 8; }
+
+
+
+/***************************************************************************/
+
+/*
+ This game has a MCU which does the following:
+ - Get Z80 sound command out of work RAM and write to Z80 sound command register
+ - Read input ports and store to work RAM
+
+ The routine which stores the sound code in RAM looks like this:
+
+ ; D0 = sound command
+ movem.l d0-d1/a0, -(a7)
+ lea $2001d6, a0 ; base of 16-byte circular buffer
+ move.w $2001d4, d1 ; get buffer index
+ move.b d0, (a0, d1.w) ; write sound command to buffer
+ addq.w #1, d1 ; next buffer index
+ andi.w #$000f, d1 ; wrap buffer index
+ move.w d1, $2001d4 ; save buffer index
+ addq.w #1, $2001d2 ; bump 'sound code written' flag
+ movem.l (a7)+, d0-d1/a0
+ rts
+
+ Most likely the MCU reads $2001D2 and copies the sound byte from $2001D6+$2001D4 to the sound command register.
+ In tturfbl, a JSR is inserted over the first LEA instruction to a subroutine which copies D0 to the sound command
+ register at $600007, and restores a0 to $2001D6 before returning.
+
+ If the circular buffer is to prioritize sound requests, then this effect is lost in tturfbl. If it's just to
+ be tricky, tturfbl handles it correctly.
+*/
+
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( tturf )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Continues ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( None ) )
+ PORT_DIPSETTING( 0x01, "3" )
+ PORT_DIPSETTING( 0x02, "Unlimited" )
+ PORT_DIPSETTING( 0x03, "Unlimited" )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x08, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0c, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x04, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x30, 0x20, "Starting Energy" )
+ PORT_DIPSETTING( 0x00, "3" )
+ PORT_DIPSETTING( 0x10, "4" )
+ PORT_DIPSETTING( 0x20, "6" )
+ PORT_DIPSETTING( 0x30, "8" )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x80, 0x00, "Bonus Energy" )
+ PORT_DIPSETTING( 0x80, "1" )
+ PORT_DIPSETTING( 0x00, "2" )
+INPUT_PORTS_END
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( tturfbl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x2001e6, 0x2001e7) AM_READ(tt_io_service_r)
+ AM_RANGE(0x2001e8, 0x2001e9) AM_READ(tt_io_player1_r)
+ AM_RANGE(0x2001ea, 0x2001eb) AM_READ(tt_io_player2_r)
+ AM_RANGE(0x200000, 0x203fff) AM_READ(SYS16_MRA16_EXTRAM)
+ AM_RANGE(0x300000, 0x300fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x500000, 0x500fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0x600002, 0x600003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0x600000, 0x600001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0x601002, 0x601003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0x601004, 0x601005) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0x601000, 0x601001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0x602002, 0x602003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0x602000, 0x602001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xc46000, 0xc4601f) AM_READ(SYS16_MRA16_EXTRAM3)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tturfbl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x200000, 0x203fff) AM_WRITE(SYS16_MWA16_EXTRAM) AM_BASE(&sys16_extraram)
+ AM_RANGE(0x300000, 0x300fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x500000, 0x500fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0x600000, 0x600001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0x600006, 0x600007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc44000, 0xc44001) AM_WRITE(MWA16_NOP)
+ AM_RANGE(0xc46000, 0xc4601f) AM_WRITE(SYS16_MWA16_EXTRAM3) AM_BASE(&sys16_extraram3)
+ AM_RANGE(0xff0020, 0xff003f) AM_WRITE(MWA16_NOP) // config regs
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void tturfbl_update_proc( void )
+{
+ sys16_fg_scrollx = sys16_textram[0x74c] & 0x01ff;
+ sys16_bg_scrollx = sys16_textram[0x74d/2] & 0x01ff;
+ sys16_fg_scrolly = sys16_textram[0x748];
+ sys16_bg_scrolly = sys16_textram[0x749];
+
+
+ {
+ int data1,data2;
+
+ data1 = sys16_textram[0x740];
+ data2 = sys16_textram[0x741];
+
+ sys16_fg_page[3] = data1>>12;
+ sys16_bg_page[3] = (data1>>8)&0xf;
+ sys16_fg_page[1] = (data1>>4)&0xf;
+ sys16_bg_page[1] = data1&0xf;
+
+ sys16_fg_page[2] = data2>>12;
+ sys16_bg_page[2] = (data2>>8)&0xf;
+ sys16_fg_page[0] = (data2>>4)&0xf;
+ sys16_bg_page[0] = data2&0xf;
+ }
+}
+
+static MACHINE_RESET( tturfbl )
+{
+ static int bank[16] = {
+ 0,0,0,0,
+ 0,0,0,3,
+ 0,0,0,2,
+ 0,1,0,0
+ };
+ sys16_obj_bank = bank;
+ sys16_sprxoffset = -0x48;
+
+ sys16_update_proc = tturfbl_update_proc;
+}
+
+static DRIVER_INIT( tturfbl )
+{
+ UINT8 *mem;
+
+ machine_reset_sys16_onetime(machine);
+
+ mem = memory_region(REGION_CPU2);
+ memcpy(mem, mem+0x10000, 0x8000);
+
+}
+/***************************************************************************/
+// sound ??
+static MACHINE_DRIVER_START( tturfbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16_7759)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(tturfbl_readmem,tturfbl_writemem)
+
+ MDRV_CPU_MODIFY("sound")
+ /* audio CPU */
+ MDRV_CPU_PROGRAM_MAP(tturfbl_sound_readmem,tturfbl_sound_writemem)
+ MDRV_CPU_IO_MAP(tturfbl_sound_readport,tturfbl_sound_writeport)
+
+ MDRV_SOUND_REMOVE("7759")
+ MDRV_SOUND_ADD_TAG("5205", MSM5205, 220000)
+ MDRV_SOUND_CONFIG(tturfbl_msm5205_interface)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.80)
+ MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.80)
+
+ MDRV_MACHINE_RESET(tturfbl)
+MACHINE_DRIVER_END
+
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+
+
+
+
+/***************************************************************************/
+
+static INPUT_PORTS_START( wb3b )
+ SYS16_JOY1
+ SYS16_JOY2
+ SYS16_SERVICE
+ SYS16_COINAGE
+
+ PORT_START_TAG("DSW1")
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) )
+ PORT_DIPSETTING( 0x00, "2" )
+ PORT_DIPSETTING( 0x0c, "3" )
+ PORT_DIPSETTING( 0x08, "4" )
+ PORT_DIPSETTING( 0x04, "5" )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Bonus_Life ) ) //??
+ PORT_DIPSETTING( 0x10, "5000/10000/18000/30000" )
+ PORT_DIPSETTING( 0x00, "5000/15000/30000" )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, "Allow Round Select" )
+ PORT_DIPSETTING( 0x40, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // no collision though
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+INPUT_PORTS_END
+
+/***************************************************************************/
+
+
+/***************************************************************************/
+
+static ADDRESS_MAP_START( wb3bbl_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_READ(MRA16_ROM)
+ AM_RANGE(0x400000, 0x40ffff) AM_READ(SYS16_MRA16_TILERAM)
+ AM_RANGE(0x410000, 0x410fff) AM_READ(SYS16_MRA16_TEXTRAM)
+ AM_RANGE(0x440000, 0x440fff) AM_READ(SYS16_MRA16_SPRITERAM)
+ AM_RANGE(0x840000, 0x840fff) AM_READ(SYS16_MRA16_PALETTERAM)
+ AM_RANGE(0xc41002, 0xc41003) AM_READ(input_port_0_word_r) // player1
+ AM_RANGE(0xc41004, 0xc41005) AM_READ(input_port_1_word_r) // player2
+ AM_RANGE(0xc41000, 0xc41001) AM_READ(input_port_2_word_r) // service
+ AM_RANGE(0xc42002, 0xc42003) AM_READ(input_port_3_word_r) // dip1
+ AM_RANGE(0xc42000, 0xc42001) AM_READ(input_port_4_word_r) // dip2
+ AM_RANGE(0xc46000, 0xc4601f) AM_READ(SYS16_MRA16_EXTRAM3)
+ AM_RANGE(0xff0000, 0xffffff) AM_READ(SYS16_MRA16_WORKINGRAM)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( wb3bbl_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x03ffff) AM_WRITE(MWA16_ROM)
+ AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(sys16_tilebank_w)
+ AM_RANGE(0x400000, 0x40ffff) AM_WRITE(SYS16_MWA16_TILERAM) AM_BASE(&sys16_tileram)
+ AM_RANGE(0x410000, 0x410fff) AM_WRITE(SYS16_MWA16_TEXTRAM) AM_BASE(&sys16_textram)
+ AM_RANGE(0x440000, 0x440fff) AM_WRITE(SYS16_MWA16_SPRITERAM) AM_BASE(&sys16_spriteram)
+ AM_RANGE(0x840000, 0x840fff) AM_WRITE(SYS16_MWA16_PALETTERAM) AM_BASE(&paletteram16)
+ AM_RANGE(0xc40000, 0xc40001) AM_WRITE(sys16_coinctrl_w)
+ AM_RANGE(0xc42006, 0xc42007) AM_WRITE(sound_command_w)
+ AM_RANGE(0xc44000, 0xc44001) AM_WRITE(MWA16_NOP)
+ AM_RANGE(0xc46000, 0xc4601f) AM_WRITE(SYS16_MWA16_EXTRAM3) AM_BASE(&sys16_extraram3)
+ AM_RANGE(0xff0000, 0xffffff) AM_WRITE(SYS16_MWA16_WORKINGRAM) AM_BASE(&sys16_workingram)
+ADDRESS_MAP_END
+
+/***************************************************************************/
+
+static void wb3bbl_update_proc( void )
+{
+
+ sys16_fg_scrollx = sys16_workingram[0xc030/2];
+ sys16_bg_scrollx = sys16_workingram[0xc038/2];
+ sys16_fg_scrolly = sys16_workingram[0xc032/2];
+ sys16_bg_scrolly = sys16_workingram[0xc03c/2];
+
+ set_fg_page( sys16_textram[0x0ff6/2] );
+ set_bg_page( sys16_textram[0x0ff4/2] );
+}
+
+static MACHINE_RESET( wb3bbl )
+{
+ static int bank[16] = {
+ 2,0,
+ 1,0,
+ 3,0,
+ 0,3,
+ 0,0,
+ 0,2,
+ 0,1,
+ 0,0
+ };
+ sys16_obj_bank = bank;
+#if 1
+ sys16_patch_code( 0x17058, 0x4e );
+ sys16_patch_code( 0x17059, 0xb9 );
+ sys16_patch_code( 0x1705a, 0x00 );
+ sys16_patch_code( 0x1705b, 0x00 );
+ sys16_patch_code( 0x1705c, 0x09 );
+ sys16_patch_code( 0x1705d, 0xdc );
+ sys16_patch_code( 0x1705e, 0x4e );
+ sys16_patch_code( 0x1705f, 0xf9 );
+ sys16_patch_code( 0x17060, 0x00 );
+ sys16_patch_code( 0x17061, 0x01 );
+ sys16_patch_code( 0x17062, 0x70 );
+ sys16_patch_code( 0x17063, 0xe0 );
+ sys16_patch_code( 0x1a3a, 0x31 );
+ sys16_patch_code( 0x1a3b, 0x7c );
+ sys16_patch_code( 0x1a3c, 0x80 );
+ sys16_patch_code( 0x1a3d, 0x00 );
+ sys16_patch_code( 0x23df8, 0x14 );
+ sys16_patch_code( 0x23df9, 0x41 );
+ sys16_patch_code( 0x23dfa, 0x10 );
+ sys16_patch_code( 0x23dfd, 0x14 );
+ sys16_patch_code( 0x23dff, 0x1c );
+#endif
+ sys16_update_proc = wb3bbl_update_proc;
+}
+
+static DRIVER_INIT( wb3bbl )
+{
+ machine_reset_sys16_onetime(machine);
+}
+
+/***************************************************************************/
+
+static MACHINE_DRIVER_START( wb3bbl )
+
+ /* basic machine hardware */
+ MDRV_IMPORT_FROM(system16)
+ MDRV_CPU_MODIFY("main")
+ MDRV_CPU_PROGRAM_MAP(wb3bbl_readmem,wb3bbl_writemem)
+
+ MDRV_MACHINE_RESET(wb3bbl)
+MACHINE_DRIVER_END
+
+
+
+/*****************************************************************************/
+
+
+ROM_START( bayrtbl1 )
+ ROM_REGION( 0xc0000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "b4.bin", 0x000000, 0x10000, CRC(eb6646ae) SHA1(073bc0a3868e70785f44e497a949cd9e3b591a33) )
+ ROM_LOAD16_BYTE( "b2.bin", 0x000001, 0x10000, CRC(ecd9cd0e) SHA1(177c38ca02c4e87d6adcae77ce4e9237938d23a9) )
+ /* empty 0x20000-0x80000*/
+ ROM_LOAD16_BYTE( "br.5a", 0x080000, 0x10000, CRC(9d6fd183) SHA1(5ae78d33c0e929886d84a25c0fbd62ab45dcbff4) )
+ ROM_LOAD16_BYTE( "br.2a", 0x080001, 0x10000, CRC(5ca1e3d2) SHA1(51ce67ed0a0054f9c9c4ac56c5775716c44d74b1) )
+ ROM_LOAD16_BYTE( "b8.bin", 0x0a0000, 0x10000, CRC(e7ca0331) SHA1(b255939576a84f4d266f31a7fde818e04ff35b24) )
+ ROM_LOAD16_BYTE( "b6.bin", 0x0a0001, 0x10000, CRC(2bc748a6) SHA1(9ab760377fde24cecb703726ee3e59ee23d60a3a) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "bs16.bin", 0x00000, 0x10000, CRC(a8a5b310) SHA1(8883e1ed48a3e0f7b4c36d83579f93e84e28568c) )
+ ROM_LOAD( "bs14.bin", 0x10000, 0x10000, CRC(6bc4d0a8) SHA1(90b9a61c7a140291d72554857ce26d54ebf03fc2) )
+ ROM_LOAD( "bs12.bin", 0x20000, 0x10000, CRC(c1f967a6) SHA1(8eb6bbd9e17dc531830bc798b8485c8ea999e56e) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "br_obj0o.1b", 0x00001, 0x10000, CRC(098a5e82) SHA1(c5922f418773bc3629071e584457839d67a370e9) )
+ ROM_LOAD16_BYTE( "br_obj0e.5b", 0x00000, 0x10000, CRC(85238af9) SHA1(39989a8d9b60c6d55272b5e2c213341a563dd993) )
+ ROM_LOAD16_BYTE( "br_obj1o.2b", 0x20001, 0x10000, CRC(cc641da1) SHA1(28f8a6502702cb9e2cc7f3e98f6c5d201f462fa3) )
+ ROM_LOAD16_BYTE( "br_obj1e.6b", 0x20000, 0x10000, CRC(d3123315) SHA1(16a87caed1cabb080d4f35935910b38797344ca5) )
+ ROM_LOAD16_BYTE( "br_obj2o.3b", 0x40001, 0x10000, CRC(84efac1f) SHA1(41c43d70dc7ae7e361d6fa12c5790ea7ebf13ca8) )
+ ROM_LOAD16_BYTE( "br_obj2e.7b", 0x40000, 0x10000, CRC(b73b12cb) SHA1(e8265ae90aabf1ee0522dbc6541a0f82fec97c7a) )
+ ROM_LOAD16_BYTE( "br_obj3o.4b", 0x60001, 0x10000, CRC(a2e238ac) SHA1(c854774c0ffd1ccf6e46591a8fa3c80a4630e007) )
+ ROM_LOAD16_BYTE( "bs7.bin", 0x60000, 0x10000, CRC(0c91abcc) SHA1(d25608f3cbacd1bd169f1a2247f007ac8bc8dda0) )
+
+ ROM_REGION( 0x50000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr12459.a10", 0x00000, 0x08000, CRC(3e1d29d0) SHA1(fe3d985983e5132e8a26a02a3f2d8d420cbf1a49) )
+ ROM_LOAD( "mpr12460.a11", 0x10000, 0x20000, CRC(0bae570d) SHA1(05fa4a3405666342ab66e696a7344cca97569f19) )
+ ROM_LOAD( "mpr12461.a12", 0x30000, 0x20000, CRC(b03b8b46) SHA1(b0283ac377d464f3d9374a992192ec6c515a3c2f) )
+ROM_END
+
+ROM_START( bayrtbl2 )
+ ROM_REGION( 0xc0000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "br_04", 0x000000, 0x10000, CRC(2e33ebfc) SHA1(f6b5a4bd28d302abd6b1e5a9ec6f2a8b57ff213e) )
+ ROM_LOAD16_BYTE( "br_06", 0x000001, 0x10000, CRC(3db42313) SHA1(e1c874ebf83e1a458cefaa038fbe89a9804ca30d) )
+ /* empty 0x20000-0x80000*/
+ ROM_LOAD16_BYTE( "br_03", 0x080000, 0x20000, CRC(285d256b) SHA1(73eac0131d14f0d7fe2a06cb2e0e57dcf4779cf9) )
+ ROM_LOAD16_BYTE( "br_05", 0x080001, 0x20000, CRC(552e6384) SHA1(2770b0c9d961671576e09ada2ebd7bb486f24547) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "br_15", 0x00000, 0x10000, CRC(050079a9) SHA1(4b356eddec2f500fb0dcc20af6b7aed2f9ef0c02) )
+ ROM_LOAD( "br_16", 0x10000, 0x10000, CRC(fc371928) SHA1(b36866c95bdc440aae999a90ecf3bbaed11d4351) )
+ ROM_LOAD( "bs12.bin", 0x20000, 0x10000, CRC(c1f967a6) SHA1(8eb6bbd9e17dc531830bc798b8485c8ea999e56e) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "br_11", 0x00001, 0x10000, CRC(65232905) SHA1(cb195a0ce8bff9d1d3e31678060b3aaccfefcd2d) )
+ ROM_LOAD16_BYTE( "br_obj0e.5b", 0x00000, 0x10000, CRC(85238af9) SHA1(39989a8d9b60c6d55272b5e2c213341a563dd993) )
+ ROM_LOAD16_BYTE( "br_obj1o.2b", 0x20001, 0x10000, CRC(cc641da1) SHA1(28f8a6502702cb9e2cc7f3e98f6c5d201f462fa3) )
+ ROM_LOAD16_BYTE( "br_obj1e.6b", 0x20000, 0x10000, CRC(d3123315) SHA1(16a87caed1cabb080d4f35935910b38797344ca5) )
+ ROM_LOAD16_BYTE( "br_obj2o.3b", 0x40001, 0x10000, CRC(84efac1f) SHA1(41c43d70dc7ae7e361d6fa12c5790ea7ebf13ca8) )
+ ROM_LOAD16_BYTE( "br_09", 0x40000, 0x10000, CRC(05e9b840) SHA1(7cc1c9ac7b85f1e1bdb68215b5e83eae3ee5ba2a) )
+ ROM_LOAD16_BYTE( "br_14", 0x60001, 0x10000, CRC(4c4a177b) SHA1(a9dfd7e56b0a21a0f7750d8ec4631901ad182609) )
+ ROM_LOAD16_BYTE( "bs7.bin", 0x60000, 0x10000, CRC(0c91abcc) SHA1(d25608f3cbacd1bd169f1a2247f007ac8bc8dda0) )
+
+ ROM_REGION( 0x50000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "br_01", 0x00000, 0x10000, CRC(b87156ec) SHA1(bdfef2ab5a4d3cac4077c92ce1ef4604b4c11cf8) )
+ ROM_LOAD( "br_02", 0x10000, 0x10000, CRC(ef63991b) SHA1(4221741780f88c80b3213ddca949bee7d4c1469a) )
+ROM_END
+
+// sys16B
+
+ROM_START( dduxbl )
+ ROM_REGION( 0x0c0000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "dduxb03.bin", 0x000000, 0x20000, CRC(e7526012) SHA1(a1798008bfa1ce9b87dc330f3817b1978052fcfd) )
+ ROM_LOAD16_BYTE( "dduxb05.bin", 0x000001, 0x20000, CRC(459d1237) SHA1(55e9c0dc341c919d58cc789203642c397d7ac65e) )
+ /* empty 0x40000 - 0x80000 */
+ ROM_LOAD16_BYTE( "dduxb02.bin", 0x080000, 0x20000, CRC(d8ed3132) SHA1(a9d5ad8f79fb635cc234a99fad398688a5f15926) )
+ ROM_LOAD16_BYTE( "dduxb04.bin", 0x080001, 0x20000, CRC(30c6cb92) SHA1(2e17c74eeb37c9731fc2e365cc0114f7383c0106) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "dduxb14.bin", 0x00000, 0x10000, CRC(664bd135) SHA1(674b06e01c2c8f5b8057dd24d470330c3f140473) )
+ ROM_LOAD( "dduxb15.bin", 0x10000, 0x10000, CRC(ce0d2b30) SHA1(e60521c46f1650c9bdc76f2ceb91a6d61aaa0a09) )
+ ROM_LOAD( "dduxb16.bin", 0x20000, 0x10000, CRC(6de95434) SHA1(7bed2a0261cf6c2fbb3756633f05f0bb2173977c) )
+
+ ROM_REGION( 0xa0000, REGION_GFX2, 0 ) //* sprites */
+ ROM_LOAD16_BYTE( "dduxb10.bin", 0x00001, 0x010000, CRC(0be3aee5) SHA1(48fc779b7398abbb82cd0d0d28705ece75b3c4e3) )
+ ROM_RELOAD( 0x20001, 0x010000 )
+ ROM_LOAD16_BYTE( "dduxb06.bin", 0x00000, 0x010000, CRC(b0079e99) SHA1(9bb4d3fa804a3d05a6e06b45a1280d7064e96ac6) )
+ ROM_RELOAD( 0x20000, 0x010000 )
+ ROM_LOAD16_BYTE( "dduxb11.bin", 0x40001, 0x010000, CRC(cfb2af18) SHA1(1ad18f933a7b797f0364d1f4a6c8549351b4c9a6) )
+ ROM_LOAD16_BYTE( "dduxb07.bin", 0x40000, 0x010000, CRC(0217369c) SHA1(b6ec2fa1279a27a602d79e1073c54193745ea816) )
+ ROM_LOAD16_BYTE( "dduxb12.bin", 0x60001, 0x010000, CRC(28ce9b15) SHA1(1640df9c8f21893c0647ad2f4210c714a06e6f37) )
+ ROM_LOAD16_BYTE( "dduxb08.bin", 0x60000, 0x010000, CRC(8844f336) SHA1(18c1baaad3bcc658d4a6d03de8c97378b5284e88) )
+ ROM_LOAD16_BYTE( "dduxb13.bin", 0x80001, 0x010000, CRC(efe57759) SHA1(69b8969b20ab9480df2735bd2bcd527069196bd7) )
+ ROM_LOAD16_BYTE( "dduxb09.bin", 0x80000, 0x010000, CRC(6b64f665) SHA1(df07fcf2bbec6fa78f89b95272762aebd6f3ec0e) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "dduxb01.bin", 0x0000, 0x8000, CRC(0dbef0d7) SHA1(8b9afb2fcb946cec467b1e691c267194b503f841) )
+ROM_END
+
+// sys16B
+
+
+ROM_START( eswatbl )
+ ROM_REGION( 0x080000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "eswat_c.rom", 0x000000, 0x10000, CRC(1028cc81) SHA1(24b4cd182419a44f3d6afa1c4273353024eb278f) )
+ ROM_LOAD16_BYTE( "eswat_f.rom", 0x000001, 0x10000, CRC(f7b2d388) SHA1(8131ba8f4fa01751b9993c3c6c218c9bd3adb328) )
+ ROM_LOAD16_BYTE( "eswat_b.rom", 0x020000, 0x10000, CRC(87c6b1b5) SHA1(a9f29e29a9c0e3daf272dce263a5fd7866642c77) )
+ ROM_LOAD16_BYTE( "eswat_e.rom", 0x020001, 0x10000, CRC(937ddf9a) SHA1(9fc73f93e9c4221a4dc778593edc02cb405b2f78) )
+ ROM_LOAD16_BYTE( "eswat_a.rom", 0x040000, 0x08000, CRC(2af4fc62) SHA1(f7b1539a5ab9560bd49dfecf44699abccfb649be) )
+ ROM_LOAD16_BYTE( "eswat_d.rom", 0x040001, 0x08000, CRC(b4751e19) SHA1(57c9687dc864c163d13dbb89057cd42684a199cd) )
+
+ ROM_REGION( 0xc0000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "mpr12624.b11", 0x00000, 0x40000, CRC(375a5ec4) SHA1(42b9116bdc0e0a5b1dd667ac1856b4c2252829ba) ) // ic19
+ ROM_LOAD( "mpr12625.b12", 0x40000, 0x40000, CRC(3b8c757e) SHA1(0b66e8446d059a12e47e2a6fe8f0a333245bb95c) ) // ic20
+ ROM_LOAD( "mpr12626.b13", 0x80000, 0x40000, CRC(3efca25c) SHA1(0d866bf53a16b52719f73081e933f4db27d72ece) ) // ic21
+
+ ROM_REGION( 0x180000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "mpr12618.b1", 0x000001, 0x40000, CRC(0d1530bf) SHA1(bb8626cd98761c1c20cee117d00315c85621ba6a) ) // ic9
+ ROM_LOAD16_BYTE( "mpr12621.b4", 0x000000, 0x40000, CRC(18ff0799) SHA1(5417223378aef16ee2b4f438d1f8f11a23fe7265) ) // ic12
+ ROM_LOAD16_BYTE( "mpr12619.b2", 0x080001, 0x40000, CRC(32069246) SHA1(4913009bc72bf4f8b171b14fe06457f5784cab15) ) // ic10
+ ROM_LOAD16_BYTE( "mpr12622.b5", 0x080000, 0x40000, CRC(a3dfe436) SHA1(640ccc552114d403f35d441574d2f3e4f1d4a8f9) ) // ic13
+ ROM_LOAD16_BYTE( "mpr12620.b3", 0x100001, 0x40000, CRC(f6b096e0) SHA1(695ad1adbdc29f4d614645867e16de038cf92709) ) // ic11
+ ROM_LOAD16_BYTE( "mpr12623.b6", 0x100000, 0x40000, CRC(6773fef6) SHA1(91e646ea447be02254d060daf255d26afe0cc79e) ) // ic14
+
+ ROM_REGION( 0x50000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr12617.a13", 0x00000, 0x08000, CRC(7efecf23) SHA1(2b87af7cfaab5942a3f7b38c987fcba01d3475ab) ) // ic8
+ ROM_LOAD( "mpr12616.a11", 0x10000, 0x40000, CRC(254347c2) SHA1(bf2d83a69a5be375c7e42e9f7d6e65c1095a354c) ) // ic6
+ROM_END
+
+// sys16B
+
+
+ROM_START( fpointbl )
+ ROM_REGION( 0x020000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "flpoint.003", 0x000000, 0x10000, CRC(4d6df514) SHA1(168aa1629ab7152ba1984605155406b236954a2c) )
+ ROM_LOAD16_BYTE( "flpoint.002", 0x000001, 0x10000, CRC(4dff2ee8) SHA1(bd157d8c168d45e7490a05d5e1e901d9bdda9599) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
+ ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
+ ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
+ ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct!
+ROM_END
+
+ROM_START( fpointbj )
+ ROM_REGION( 0x020000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "boot2.003", 0x000000, 0x10000, CRC(6c00d1b0) SHA1(fd0c47b8ca010a64d3ef91980f93854ebc98fbda) )
+ ROM_LOAD16_BYTE( "boot2.002", 0x000001, 0x10000, CRC(c1fcd704) SHA1(697bef464e53fb9891ed15ee2d6210107b693b20) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "flpoint.006", 0x00000, 0x10000, CRC(c539727d) SHA1(56674effe1d273128dddd2ff9e02974ec10f3fff) )
+ ROM_LOAD( "flpoint.005", 0x10000, 0x10000, CRC(82c0b8b0) SHA1(e1e2e721cb8ad53df33065582dc90edeba9c3cab) )
+ ROM_LOAD( "flpoint.004", 0x20000, 0x10000, CRC(522426ae) SHA1(90fd0a19b30a8a61dc4cfa66a64115596333dcc6) )
+
+ ROM_REGION( 0x20000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "12596.bin", 0x00001, 0x010000, CRC(4a4041f3) SHA1(4c52b30223d8aa80ccdbb196098cb17e64ad6583) )
+ ROM_LOAD16_BYTE( "12597.bin", 0x00000, 0x010000, CRC(6961e676) SHA1(7639d2da086b57a9a8d6100fdacf40d97d7c4772) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "flpoint.001", 0x0000, 0x8000, CRC(c5b8e0fe) SHA1(6cf8c67151d8604326fc6dbf976c0635b452a844) ) // bootleg rom doesn't work, but should be correct!
+
+ /* stuff below isn't used but loaded because it was on the board .. */
+ ROM_REGION( 0x0120, REGION_PROMS, 0 )
+ ROM_LOAD( "82s129.1", 0x0000, 0x0100, CRC(a7c22d96) SHA1(160deae8053b09c09328325246598b3518c7e20b) )
+ ROM_LOAD( "82s123.2", 0x0100, 0x0020, CRC(58bcf8bd) SHA1(e4d3d179b08c0f3424a6bec0f15058fb1b56f8d8) )
+
+ ROM_REGION( 0x0600, REGION_PLDS, ROMREGION_DISPOSE )
+ ROM_LOAD( "fpointbj_gal16v8_1.bin", 0x0000, 0x0117, CRC(ba7f292c) SHA1(c383700d05663c9c5f29d5d04d16b05cd6adceb8) )
+ ROM_LOAD( "fpointbj_gal16v8_3.bin", 0x0200, 0x0117, CRC(ce1ab1e1) SHA1(dcfc0015d8595ee6cb6bb02c95655161a7f3b017) )
+ ROM_LOAD( "fpointbj_gal20v8.bin", 0x0400, 0x019d, NO_DUMP ) /* Protected */
+ROM_END
+
+/* This is a frankenset, it has original and bootleg roms of different sizes and names mixed together, it's
+ highly unlikely that the original bootleg PCB was like this */
+ROM_START( goldnabl )
+ ROM_REGION( 0x0c0000, REGION_CPU1, 0 ) /* 68000 code */
+// protected code
+ ROM_LOAD16_BYTE( "ga6.a22", 0x00000, 0x10000, CRC(f95b459f) SHA1(dadf66d63454ed62fefa521d4fed249d28c63778) )
+ ROM_LOAD16_BYTE( "ga4.a20", 0x00001, 0x10000, CRC(83eabdf5) SHA1(1effef966f513fbdec2026d535658e17ef7dea51) )
+ ROM_LOAD16_BYTE( "ga11.a27",0x20000, 0x10000, CRC(f4ef9349) SHA1(3ffa335e74ffbc10f80387268da659643c566897) )
+ ROM_LOAD16_BYTE( "ga8.a24", 0x20001, 0x10000, CRC(37a65839) SHA1(6e8055d91b840afd8526041d3752c0a55eaebe0c) )
+ /* emtpy 0x40000 - 0x80000 */
+ ROM_LOAD16_BYTE( "epr12521.a8", 0x80000, 0x20000, CRC(5001d713) SHA1(68cf3f48d6e440e5b800503a211adda02107d956) )
+ ROM_LOAD16_BYTE( "epr12519.a6", 0x80001, 0x20000, CRC(4438ca8e) SHA1(0af53d64f06abf41f4c46540d28d5f008a4835a3) )
+
+ ROM_REGION( 0x60000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "ga33.b16", 0x00000, 0x10000, CRC(84587263) SHA1(3a88c8578a477a487a0a214a367042b9739f39eb) )
+ ROM_LOAD( "ga32.b15", 0x10000, 0x10000, CRC(63d72388) SHA1(ba0a582b1daf3a1e316237efbad17fcc0381643f) )
+ ROM_LOAD( "ga31.b14", 0x20000, 0x10000, CRC(f8b6ae4f) SHA1(55132c98955107e4b247992f7917a6ce588460a7) )
+ ROM_LOAD( "ga30.b13", 0x30000, 0x10000, CRC(e29baf4f) SHA1(3761cb2217599fe3f2f860f9395930b96ec52f47) )
+ ROM_LOAD( "ga29.b12", 0x40000, 0x10000, CRC(22f0667e) SHA1(2d11b2ce105a3db9c914942cace85aff17deded9) )
+ ROM_LOAD( "ga28.b11", 0x50000, 0x10000, CRC(afb1a7e4) SHA1(726fded9db72a881128b43f449d2baf450131f63) )
+
+ ROM_REGION( 0x1c0000, REGION_GFX2, 0 ) /* sprites */
+ /* wrong! */
+ ROM_LOAD16_BYTE( "ga34.b17", 0x000001, 0x10000, CRC(28ba70c8) SHA1(a6f33e1404928b6d1006943494646d6cfbd60a4b) )
+ ROM_LOAD16_BYTE( "ga35.b18", 0x010000, 0x10000, CRC(2ed96a26) SHA1(edcf915243e6f92d31cdfc53965438f6b6bff51d) )
+ ROM_LOAD16_BYTE( "ga23.a14", 0x020001, 0x10000, CRC(84dccc5b) SHA1(10263d98d663f1170c3203066f391075a1d64ff5) )
+ ROM_LOAD16_BYTE( "ga18.a9", 0x030000, 0x10000, CRC(de346006) SHA1(65aa489373b6d2cccbb024f13fc190a7cae86274) )
+ ROM_LOAD16_BYTE( "mpr12379.b4", 0x040001, 0x40000, CRC(1a0e8c57) SHA1(674f1ae7db632876fff346e76786801ae19d9799) )
+ ROM_LOAD16_BYTE( "ga36.b19", 0x080000, 0x10000, CRC(101d2fff) SHA1(1de1390c5f55f192491053c8aac31be3389aab2b) )
+ ROM_LOAD16_BYTE( "ga37.b20", 0x090001, 0x10000, CRC(677e64a6) SHA1(e3d0d31097017c6cb1a7f41292783f18ce13b41c) )
+ ROM_LOAD16_BYTE( "ga19.a10", 0x0a0000, 0x10000, CRC(11794d05) SHA1(eef52d7a644dbcc5f983222f163445a725286a32) )
+ ROM_LOAD16_BYTE( "ga20.a11", 0x0b0001, 0x10000, CRC(ad1c1c90) SHA1(155f17593cfab1a117bb755b1edd0c473d455f91) )
+ ROM_LOAD16_BYTE( "mpr12381.b5", 0x0c0000, 0x40000, CRC(81ba6ecc) SHA1(7f59e4d86a192b97e92729371b78c3f1c784a0b5) )
+ ROM_LOAD16_BYTE( "mpr12382.b3", 0x100001, 0x40000, CRC(81601c6f) SHA1(604bc5613c6c734a06860303ba36d61bb54508a0) )
+ ROM_LOAD16_BYTE( "mpr12383.b6", 0x140000, 0x40000, CRC(5dbacf7a) SHA1(236866fb94672b13cbb2cb479324e61de87eeb34) )
+
+ ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr12390", 0x00000, 0x08000, CRC(399fc5f5) SHA1(6f290b36dc71ff4759598e2a9c185a8945a3c9e7) )
+ ROM_LOAD( "mpr12384.a11", 0x10000, 0x20000, CRC(6218d8e7) SHA1(5a745c750efb4a61716f99befb7ed14cc84e9973) )
+ROM_END
+
+/* Golden Axe (bootleg) made in Italy?
+ PCB: GENSYS-1/I
+
+ CPUs
+
+ 1x SCN68000CAN64-KGQ7551-8931KE (main - upper board)(IC40)
+ 1x oscillator 20.000MHz (upper board - near main CPU)(XL2)
+ 1x STZ8400BB1-Z80BCPU-28911 (sound - upper board)(IC44)
+ 2x YAMAHA YM2203C (sound - upper board)IC27, IC28)
+ 1x OKI M5205 (sound - upper board)(IC16)
+ 2x YAMAHA Y3014B (DAC - sound - upper board)(IC19, IC20)
+ 1x crystal resonator CSB398P (upper board - near sound CPUs)(XL1)
+ 1x oscillator 24MHz (lower board near connectors to upper board)(XL1)
+
+ ROMs
+ 8x TMS27C512-20JL (from 1 to 8 - upper board) (CPU)
+ 26x ST M27512FI (from 9 to 34 - upper board) (Sound + Tilemap)
+ 6x ST M27512FI (from 35 to 40 - lower board) (Sprites)
+
+*/
+
+
+ROM_START( goldnab2 )
+ ROM_REGION( 0x0c0000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "ic39.1", 0x00000, 0x10000, CRC(71489c9a) SHA1(ec25463a2c63027d2635f0e27f5a971d68938fe3) )
+ ROM_LOAD16_BYTE( "ic53.5", 0x00001, 0x10000, CRC(7a98512d) SHA1(f022a047d23051211e2de761b6c2289438b8f3cc) )
+ ROM_LOAD16_BYTE( "ic38.2", 0x20000, 0x10000, CRC(8c8c95b1) SHA1(2b3897b8af587e6397dca0f3409a803432be07aa) )
+ ROM_LOAD16_BYTE( "ic52.6", 0x20001, 0x10000, CRC(4f58f15b) SHA1(4dcd7e8cfd8fe5fe9f9259abf53fd0d4c64b5abd) )
+ /* emtpy 0x40000 - 0x80000 */
+ ROM_LOAD16_BYTE( "ic37.3", 0x80000, 0x10000, CRC(056879fd) SHA1(fc0a910c1dc4cf535ad589f482f57379798b5524) )
+ ROM_LOAD16_BYTE( "ic51.7", 0x80001, 0x10000, CRC(8c77d958) SHA1(f7c5abfec2a9d1724c83b1de2cd994bb4c42857c) )
+ ROM_LOAD16_BYTE( "ic36.4", 0xa0000, 0x10000, CRC(b69ab892) SHA1(9b426058a80abb8dd3d6c0c55574fdc841889a72) )
+ ROM_LOAD16_BYTE( "ic50.8", 0xa0001, 0x10000, CRC(3cf2f725) SHA1(1f620fcebe8533cba50736ae1d97c095abf1bc25) )
+
+ ROM_REGION( 0x60000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "ic4.35", 0x00000, 0x10000, CRC(84587263) SHA1(3a88c8578a477a487a0a214a367042b9739f39eb) )
+ ROM_LOAD( "ic18.38", 0x10000, 0x10000, CRC(63d72388) SHA1(ba0a582b1daf3a1e316237efbad17fcc0381643f) )
+ ROM_LOAD( "ic3.36", 0x20000, 0x10000, CRC(f8b6ae4f) SHA1(55132c98955107e4b247992f7917a6ce588460a7) )
+ ROM_LOAD( "ic17.39", 0x30000, 0x10000, CRC(e29baf4f) SHA1(3761cb2217599fe3f2f860f9395930b96ec52f47) )
+ ROM_LOAD( "ic2.37", 0x40000, 0x10000, CRC(22f0667e) SHA1(2d11b2ce105a3db9c914942cace85aff17deded9) )
+ ROM_LOAD( "ic16.40", 0x50000, 0x10000, CRC(afb1a7e4) SHA1(726fded9db72a881128b43f449d2baf450131f63) )
+
+ ROM_REGION( 0x1c0000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "ic73.34", 0x000001, 0x10000, CRC(28ba70c8) SHA1(a6f33e1404928b6d1006943494646d6cfbd60a4b) ) // mpr12378.b1 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic74.33", 0x020001, 0x10000, CRC(2ed96a26) SHA1(edcf915243e6f92d31cdfc53965438f6b6bff51d) ) // mpr12378.b1 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic79.28", 0x100001, 0x10000, CRC(84dccc5b) SHA1(10263d98d663f1170c3203066f391075a1d64ff5) ) // mpr12378.b1 [3/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic80.27", 0x120001, 0x10000, CRC(3d41b995) SHA1(913d2a0c9a2ac6d36589966d7eb5537120ea6ff0) ) // mpr12378.b1 [4/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic58.22", 0x000000, 0x10000, CRC(ede51fe0) SHA1(c05a2b51095a322bac5a67ee8886aecc186cbdfe) ) // mpr12379.b4 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic59.21", 0x020000, 0x10000, CRC(30989141) SHA1(f6e7ae258deedec11b1f80c19575c884aac26c56) ) // mpr12379.b4 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic64.16", 0x100000, 0x10000, CRC(38e4c92a) SHA1(8b8a596da0726bc02c412a68e5163770fe3e62e4) ) // mpr12379.b4 [3/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic65.15", 0x120000, 0x10000, CRC(9fb1f9b6) SHA1(a193ff48f2bfbb4afbc322ae33cdf360afcb681e) ) // mpr12379.b4 [4/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic75.32", 0x040001, 0x10000, CRC(101d2fff) SHA1(1de1390c5f55f192491053c8aac31be3389aab2b) ) // mpr12380.b2 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic76.31", 0x060001, 0x10000, CRC(677e64a6) SHA1(e3d0d31097017c6cb1a7f41292783f18ce13b41c) ) // mpr12380.b2 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic81.26", 0x140001, 0x10000, CRC(a34e84d1) SHA1(5aa8836ef1bdf97e399899c911967840e9873bfb) ) // mpr12380.b2 [3/4] 99.992371%
+ ROM_LOAD16_BYTE( "ic82.25", 0x160001, 0x10000, CRC(ad1c1c90) SHA1(155f17593cfab1a117bb755b1edd0c473d455f91) ) // mpr12380.b2 [4/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic60.20", 0x040000, 0x10000, CRC(5853000d) SHA1(db7adf1de74c66f667ea7ccc41702576de081ff5) ) // mpr12381.b5 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic61.19", 0x060000, 0x10000, CRC(697b3276) SHA1(a8aeb2cfaca9368d5bfa14a67de36dbadd4a0585) ) // mpr12381.b5 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic66.14", 0x140000, 0x10000, CRC(753b01e8) SHA1(0180cf893d63e60e14e2fb0f5836b302f08f0228) ) // mpr12381.b5 [3/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic67.13", 0x160000, 0x10000, CRC(5dd6d8db) SHA1(270886aebf4549c5cf456b1e90927b759a53e2e1) ) // mpr12381.b5 [4/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic77.30", 0x080001, 0x10000, CRC(a9519afe) SHA1(0550f596ef080db25241d88242d57edb3c7fb685) ) // mpr12382.b3 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic78.29", 0x0a0001, 0x10000, CRC(74df9232) SHA1(61286c83eb6f31983c0ed24ca2151c58a95238f1) ) // mpr12382.b3 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic83.24", 0x180001, 0x10000, CRC(a8c8c784) SHA1(8e998019b4dbf509179d41eb2b446647db3d00a6) ) // mpr12382.b3 [3/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic84.23", 0x1a0001, 0x10000, CRC(cc3a922c) SHA1(3c96459d95961d463909b6b0e8c77916c3a018e3) ) // mpr12382.b3 [4/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic62.18", 0x080000, 0x10000, CRC(ac6ad195) SHA1(3c3fe38047698e28cae9193438fe0b85941476c5) ) // mpr12383.b6 [1/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic63.17", 0x0a0000, 0x10000, CRC(03a905c4) SHA1(c526a744021a392c860ded37afd54a78e9f47778) ) // mpr12383.b6 [2/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic68.12", 0x180000, 0x10000, CRC(cba013c7) SHA1(a0658aaf7893bc9fb8f0435cab9f77ceb1fb4e1d) ) // mpr12383.b6 [3/4] IDENTICAL
+ ROM_LOAD16_BYTE( "ic69.11", 0x1a0000, 0x10000, CRC(bea4d237) SHA1(46e51e89b4ee1e2701da1004758d7da547a2e4c2) ) // mpr12383.b6 [4/4] IDENTICAL
+
+ ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* sound CPU + samples */
+ ROM_LOAD( "ic45.10", 0x00000, 0x10000, CRC(804dfba8) SHA1(650ca61f78eb4d0aa256b554fb1570330166cc24) )
+ ROM_LOAD( "ic46.9", 0x10000, 0x10000, CRC(634dd54e) SHA1(ac4ab0ad9c1ac634ff4dfb83232b0fa5cfb26fdd) )
+ROM_END
+
+
+// pre16
+ROM_START( mjleague )
+ ROM_REGION( 0x030000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "epr-7404.09b", 0x000000, 0x8000, CRC(ec1655b5) SHA1(5c1df364fa9733daa4478c5f88298089e4963c33) )
+ ROM_LOAD16_BYTE( "epr-7401.06b", 0x000001, 0x8000, CRC(2befa5e0) SHA1(0a1681a4c7d62a5754ba6f3845436b4d08324246) )
+ ROM_LOAD16_BYTE( "epr-7405.10b", 0x010000, 0x8000, CRC(7a4f4e38) SHA1(65a22097dd933e83f326bd64b3863915897780a6) )
+ ROM_LOAD16_BYTE( "epr-7402.07b", 0x010001, 0x8000, CRC(b7bef762) SHA1(214450e0b094f99ef38dec2a3e5cbdb0b30e917d) )
+ ROM_LOAD16_BYTE( "epra7406.11b", 0x020000, 0x8000, CRC(bb743639) SHA1(5d99638a79f02ce14374d3b1f3d9fbfc5c13c6e1) )
+ ROM_LOAD16_BYTE( "epra7403.08b", 0x020001, 0x8000, CRC(d86250cf) SHA1(fb5dabb7b9b9fe0bbe93e28c60311c7b3256107a) ) // Fails memory test. Bad rom?
+
+ ROM_REGION( 0x18000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "epr-7051.09a", 0x00000, 0x08000, CRC(10ca255a) SHA1(ccf58ffcac2f7fbdbfbdf32601a1b97f359cbd91) )
+ ROM_LOAD( "epr-7052.10a", 0x08000, 0x08000, CRC(2550db0e) SHA1(28f8d68f43d26f12793fe295c205cc86adc4e96a) )
+ ROM_LOAD( "epr-7053.11a", 0x10000, 0x08000, CRC(5bfea038) SHA1(01dc6e14cc7bba9f7930e68573c441fa2841f49a) )
+
+ ROM_REGION( 0x50000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "epr-7055.05a", 0x000001, 0x8000, CRC(1fb860bd) SHA1(4a4155d0352dfae9e402a2b2f1558ef17b1303b4) )
+ ROM_LOAD16_BYTE( "epr-7059.02b", 0x000000, 0x8000, CRC(3d14091d) SHA1(36208415b2012b6e948fefa15b0f7041748066be) )
+ ROM_LOAD16_BYTE( "epr-7056.06a", 0x010001, 0x8000, CRC(b35dd968) SHA1(e306b5e38acf583d7b2089302622ad25ae5564b0) )
+ ROM_LOAD16_BYTE( "epr-7060.03b", 0x010000, 0x8000, CRC(61bb3757) SHA1(5c87cf23be22b84e3dae746527ca057d870d6397) )
+ ROM_LOAD16_BYTE( "epr-7057.07a", 0x020001, 0x8000, CRC(3e5a2b6f) SHA1(d3dbafb4acb916e02c978a156008bd75ba122fb7) )
+ ROM_LOAD16_BYTE( "epr-7061.04b", 0x020000, 0x8000, CRC(c808dad5) SHA1(9b65acc8dc23b16e56327298188d1a6ab48b2b5d) )
+ ROM_LOAD16_BYTE( "epr-7058.08a", 0x030001, 0x8000, CRC(b543675f) SHA1(35ffc9295a8849a18fabe156fdbc9801ea2179cd) )
+ ROM_LOAD16_BYTE( "epr-7062.05b", 0x030000, 0x8000, CRC(9168eb47) SHA1(daaa7836e627a0679e65373d8f20a9383ba4c905) )
+// ROM_LOAD16_BYTE( "epr-7055.05a", 0x040001, 0x8000, CRC(1fb860bd) SHA1(4a4155d0352dfae9e402a2b2f1558ef17b1303b4) ) loaded twice??
+// ROM_LOAD16_BYTE( "epr-7059.02b", 0x040000, 0x8000, CRC(3d14091d) SHA1(36208415b2012b6e948fefa15b0f7041748066be) ) loaded twice??
+
+ ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "eprc7054.01b", 0x00000, 0x8000, CRC(4443b744) SHA1(73359a6e9d62b382dee47fea31b9e17eb26a0321) )
+
+ ROM_REGION( 0x1000, REGION_CPU3, 0 ) /* 4k for 7751 onboard ROM */
+ ROM_LOAD( "7751.bin", 0x0000, 0x0400, CRC(6a9534fc) SHA1(67ad94674db5c2aab75785668f610f6f4eccd158) ) /* 7751 - U34 */
+
+ ROM_REGION( 0x20000, REGION_SOUND1, 0 ) /* 7751 sound data */
+ ROM_LOAD( "epr-7063.01a", 0x00000, 0x8000, CRC(45d8908a) SHA1(e61f81f953c1a744ded36fed3b55774e4747af29) )
+ ROM_LOAD( "epr-7065.02a", 0x08000, 0x8000, CRC(8c8f8cff) SHA1(fca5a916a8b25800ee5e8771e2ced0ed9bd737f4) )
+ ROM_LOAD( "epr-7064.03a", 0x10000, 0x8000, CRC(159f6636) SHA1(66fa3f3e95a6ef3d3ff4ded09c05ab1131d9fbbb) )
+ ROM_LOAD( "epr-7066.04a", 0x18000, 0x8000, CRC(f5cfa91f) SHA1(c85d68cbcd03fe1436bed12235c033610acc11ee) )
+ROM_END
+
+ROM_START( passht4b )
+ ROM_REGION( 0x20000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "pas4p.3", 0x000000, 0x10000, CRC(2d8bc946) SHA1(35d3e529d4815543d9876fd0545c3d686467abaa) )
+ ROM_LOAD16_BYTE( "pas4p.4", 0x000001, 0x10000, CRC(e759e831) SHA1(dd5727dc28010cb988e4951723171171eb645ce8) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "pas4p.11", 0x00000, 0x10000, CRC(da20fbc9) SHA1(21dc8143f4d1cebae4f86e83495fa84e5293ba48) )
+ ROM_LOAD( "pas4p.12", 0x10000, 0x10000, CRC(bebb9211) SHA1(4f56048f6f70b63f74a4c0d64456213d36ce5b26) )
+ ROM_LOAD( "pas4p.13", 0x20000, 0x10000, CRC(e37506c3) SHA1(e6fbf15d58f321a3d052fefbe5a1901e4a1734ae) )
+
+ ROM_REGION( 0x60000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "opr11862.b1", 0x00001, 0x10000, CRC(b6e94727) SHA1(0838e034f1f10d9cd1312c8c94b5c57387c0c271) )
+ ROM_LOAD16_BYTE( "opr11865.b5", 0x00000, 0x10000, CRC(17e8d5d5) SHA1(ac1074b0a705be13c6e3391441e6cfec1d2b3f8a) )
+ ROM_LOAD16_BYTE( "opr11863.b2", 0x20001, 0x10000, CRC(3e670098) SHA1(2cfc83f4294be30cd868738886ac546bd8489962) )
+ ROM_LOAD16_BYTE( "opr11866.b6", 0x20000, 0x10000, CRC(50eb71cc) SHA1(463b4917ca19c7f4ad2c2845caa104d5e4a2dda3) )
+ ROM_LOAD16_BYTE( "opr11864.b3", 0x40001, 0x10000, CRC(05733ca8) SHA1(1dbc7c99450ebe6a9fd8c0244fd3cb38b74984ef) )
+ ROM_LOAD16_BYTE( "opr11867.b7", 0x40000, 0x10000, CRC(81e49697) SHA1(a70fa409e3555ad6c8f28930a7026fdf2deb8c65) )
+
+ ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "pas4p.1", 0x00000, 0x08000, CRC(e60fb017) SHA1(21298036eab55c74427f1c2e3a9623d41bca4849) )
+ ROM_LOAD( "pas4p.2", 0x10000, 0x10000, CRC(092e016e) SHA1(713638749efa9dce19c547b84308236110bc85fe) )
+ROM_END
+
+ROM_START( passshtb )
+ ROM_REGION( 0x020000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "pass3_2p.bin", 0x000000, 0x10000, CRC(26bb9299) SHA1(11bacf86dfdd8bcfbfb61f0ebc59890325c48adc) )
+ ROM_LOAD16_BYTE( "pass4_2p.bin", 0x000001, 0x10000, CRC(06ac6d5d) SHA1(2dd71a8a956404326797de8beed7bca016c9919e) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "opr11854.b9", 0x00000, 0x10000, CRC(d31c0b6c) SHA1(610d04988da70c30300cc5614817eda9d2204f39) )
+ ROM_LOAD( "opr11855.b10", 0x10000, 0x10000, CRC(b78762b4) SHA1(d594ef846bd7fed8da91a89906b39c1a2867a1fe) )
+ ROM_LOAD( "opr11856.b11", 0x20000, 0x10000, CRC(ea49f666) SHA1(36ccd32cdcbb7fcc300628bb59c220ec3c324d82) )
+
+ ROM_REGION( 0x60000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "opr11862.b1", 0x00001, 0x10000, CRC(b6e94727) SHA1(0838e034f1f10d9cd1312c8c94b5c57387c0c271) )
+ ROM_LOAD16_BYTE( "opr11865.b5", 0x00000, 0x10000, CRC(17e8d5d5) SHA1(ac1074b0a705be13c6e3391441e6cfec1d2b3f8a) )
+ ROM_LOAD16_BYTE( "opr11863.b2", 0x20001, 0x10000, CRC(3e670098) SHA1(2cfc83f4294be30cd868738886ac546bd8489962) )
+ ROM_LOAD16_BYTE( "opr11866.b6", 0x20000, 0x10000, CRC(50eb71cc) SHA1(463b4917ca19c7f4ad2c2845caa104d5e4a2dda3) )
+ ROM_LOAD16_BYTE( "opr11864.b3", 0x40001, 0x10000, CRC(05733ca8) SHA1(1dbc7c99450ebe6a9fd8c0244fd3cb38b74984ef) )
+ ROM_LOAD16_BYTE( "opr11867.b7", 0x40000, 0x10000, CRC(81e49697) SHA1(a70fa409e3555ad6c8f28930a7026fdf2deb8c65) )
+
+ ROM_REGION( 0x30000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr11857.a7", 0x00000, 0x08000, CRC(789edc06) SHA1(8c89c94e503513c287807d187de78a7fbd75a7cf) )
+ ROM_LOAD( "epr11858.a8", 0x10000, 0x08000, CRC(08ab0018) SHA1(0685f80a7d403208c9cfffea3f2035324f3924fe) )
+ ROM_LOAD( "epr11859.a9", 0x18000, 0x08000, CRC(8673e01b) SHA1(e79183ab30e683fdf61ced2e9dbe010567c324cb) )
+ ROM_LOAD( "epr11860.a10", 0x20000, 0x08000, CRC(10263746) SHA1(1f981fb185c6a9795208ecdcfba36cf892a99ed5) )
+ ROM_LOAD( "epr11861.a11", 0x28000, 0x08000, CRC(38b54a71) SHA1(68ec4ef5b115844214ff2213be1ce6678904fbd2) )
+ROM_END
+
+/* Shinobi bootleg by 'Beta' (7751 replaced by what? Sample rom is different, but no extra sound CPU rom present, missing?) */
+/* otherwise it seems to run fine on System 16A */
+ROM_START( shinoblb )
+ ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "4.3k", 0x000000, 0x10000, CRC(c178a39c) SHA1(05ff1679cdfc3618df8b3fabdeab64b1f2299aa3) )
+ ROM_LOAD16_BYTE( "2.3n", 0x000001, 0x10000, CRC(5ad8ebf2) SHA1(b22e0c8d4b27c553abface17c625e207d19417ab) )
+ ROM_LOAD16_BYTE( "5.2k", 0x020000, 0x10000, CRC(a2a620bd) SHA1(f8b135ce14d6c5eac5e40ddfd5ad2f1e6f2bc7a6) )
+ ROM_LOAD16_BYTE( "3.2n", 0x020001, 0x10000, CRC(a3ceda52) SHA1(97a1c52a162fb1d43b3f8f16613b70ce582a8d26) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "8.3b", 0x00000, 0x10000, CRC(46627e7d) SHA1(66bb5b22a2100e7b9df303007a837bc2d52cf7ba) )
+ ROM_LOAD( "7.4b", 0x10000, 0x10000, CRC(87d0f321) SHA1(885b38eaff2dcaeab4eeaa20cc8a2885d520abd6) )
+ ROM_LOAD( "6.5b", 0x20000, 0x10000, CRC(efb4af87) SHA1(0b8a905023e1bc808fd2b1c3cfa3778cde79e659) )
+
+ ROM_REGION16_BE( 0x080000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "9.6r", 0x00001, 0x08000, CRC(611f413a) SHA1(180f83216e2dfbfd77b0fb3be83c3042954d12df) )
+ ROM_CONTINUE( 0x40001, 0x08000 )
+ ROM_LOAD16_BYTE( "13.8r", 0x00000, 0x08000, CRC(5eb00fc1) SHA1(97e02eee74f61fabcad2a9e24f1868cafaac1d51) )
+ ROM_CONTINUE( 0x40000, 0x08000 )
+ ROM_LOAD16_BYTE( "10.6q", 0x10001, 0x08000, CRC(3c0797c0) SHA1(df18c7987281bd9379026c6cf7f96f6ae49fd7f9) )
+ ROM_CONTINUE( 0x50001, 0x08000 )
+ ROM_LOAD16_BYTE( "14.8q", 0x10000, 0x08000, CRC(25307ef8) SHA1(91ffbe436f80d583524ee113a8b7c0cf5d8ab286) )
+ ROM_CONTINUE( 0x50000, 0x08000 )
+ ROM_LOAD16_BYTE( "11.6p", 0x20001, 0x08000, CRC(c29ac34e) SHA1(b5e9b8c3233a7d6797f91531a0d9123febcf1660) )
+ ROM_CONTINUE( 0x60001, 0x08000 )
+ ROM_LOAD16_BYTE( "15.8p", 0x20000, 0x08000, CRC(04a437f8) SHA1(ea5fed64443236e3404fab243761e60e2e48c84c) )
+ ROM_CONTINUE( 0x60000, 0x08000 )
+ ROM_LOAD16_BYTE( "12.6n", 0x30001, 0x08000, CRC(41f41063) SHA1(5cc461e9738dddf9eea06831fce3702d94674163) )
+ ROM_CONTINUE( 0x70001, 0x08000 )
+ ROM_LOAD16_BYTE( "16.8n", 0x30000, 0x08000, CRC(b6e1fd72) SHA1(eb86e4bf880bd1a1d9bcab3f2f2e917bcaa06172) )
+ ROM_CONTINUE( 0x70000, 0x08000 )
+
+ ROM_REGION( 0x20000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "1.5s", 0x0000, 0x8000, CRC(dd50b745) SHA1(52e1977569d3713ad864d607170c9a61cd059a65) )
+
+ ROM_REGION( 0x08000, REGION_SOUND1, 0 ) /* sound samples (played by what?, not the same as the original) */
+ ROM_LOAD( "17.6u", 0x0000, 0x8000, CRC(b7a6890c) SHA1(6431df82c7dbe454cabc6084c1a677ebb42ae4b3) )
+ROM_END
+
+/* Shinobi bootleg by 'Datsu' - Sound hardware is different */
+ROM_START( shinobld )
+ ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "12.bin", 0x000001, 0x10000, CRC(757a0c71) SHA1(8f476b0fd5f5dd480489af09b99585c58a4801fc) )
+ ROM_LOAD16_BYTE( "14.bin", 0x000000, 0x10000, CRC(a65870b2) SHA1(3e9b4aa694bf86ef9db4756ebaa3d8d87d7f269a) )
+ ROM_LOAD16_BYTE( "13.bin", 0x020001, 0x10000, CRC(c4334bcd) SHA1(ea1dd23ca6fbf632d8e10bbb9ced6515a69bd14a) )
+ ROM_LOAD16_BYTE( "15.bin", 0x020000, 0x10000, CRC(b70a6ec1) SHA1(79db41c36d6a053bcdc355b46b19ae938a7755a9) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_INVERT | ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "9.bin", 0x10000, 0x10000, CRC(565e11c6) SHA1(e063400b3d0470b932d75da0be9cd4b446189dea) )
+ ROM_LOAD( "10.bin", 0x20000, 0x10000, CRC(7cc40b6c) SHA1(ffad7eef7ab2ff9a2e49a8d71b5785a61fa3c675) )
+ ROM_LOAD( "11.bin", 0x00000, 0x10000, CRC(0f6c7b1c) SHA1(defc76592c285b3396e89a3cff7a73f3a948117f) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "5.bin", 0x00001, 0x08000, CRC(611f413a) SHA1(180f83216e2dfbfd77b0fb3be83c3042954d12df) )
+ ROM_CONTINUE( 0x40001, 0x08000 )
+ ROM_LOAD16_BYTE( "3.bin", 0x00000, 0x08000, CRC(5eb00fc1) SHA1(97e02eee74f61fabcad2a9e24f1868cafaac1d51) )
+ ROM_CONTINUE( 0x40000, 0x08000 )
+ ROM_LOAD16_BYTE( "8.bin", 0x10001, 0x08000, CRC(3c0797c0) SHA1(df18c7987281bd9379026c6cf7f96f6ae49fd7f9) )
+ ROM_CONTINUE( 0x50001, 0x08000 )
+ ROM_LOAD16_BYTE( "2.bin", 0x10000, 0x08000, CRC(25307ef8) SHA1(91ffbe436f80d583524ee113a8b7c0cf5d8ab286) )
+ ROM_CONTINUE( 0x50000, 0x08000 )
+ ROM_LOAD16_BYTE( "6.bin", 0x30001, 0x08000, CRC(c29ac34e) SHA1(b5e9b8c3233a7d6797f91531a0d9123febcf1660) )
+ ROM_CONTINUE( 0x60001, 0x08000 )
+ ROM_LOAD16_BYTE( "4.bin", 0x30000, 0x08000, CRC(04a437f8) SHA1(ea5fed64443236e3404fab243761e60e2e48c84c) )
+ ROM_CONTINUE( 0x60000, 0x08000 )
+ ROM_LOAD16_BYTE( "7.bin", 0x40001, 0x08000, CRC(41f41063) SHA1(5cc461e9738dddf9eea06831fce3702d94674163) )
+ ROM_CONTINUE( 0x70001, 0x08000 )
+ ROM_LOAD16_BYTE( "1.bin", 0x40000, 0x08000, CRC(b6e1fd72) SHA1(eb86e4bf880bd1a1d9bcab3f2f2e917bcaa06172) )
+ ROM_CONTINUE( 0x70000, 0x08000 )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU + data */
+ ROM_LOAD( "16.bin", 0x0000, 0x10000, CRC(52c8364e) SHA1(01d30b82f92498d155d2e31d43d58dff0285cce3) )
+ROM_END
+
+
+// sys16B
+
+// sys16A custom
+
+/*
+
+
+*/
+
+// sys16B
+ROM_START( tetrisbl )
+ ROM_REGION( 0x040000, REGION_CPU1, ROMREGION_ERASEFF ) /* 68000 code */
+ ROM_LOAD16_BYTE( "rom2.bin", 0x000000, 0x10000, CRC(4d165c38) SHA1(04706b1977ae18bd09bafaf8ea65f8e5f32e04b8) )
+ ROM_LOAD16_BYTE( "rom1.bin", 0x000001, 0x10000, CRC(1e912131) SHA1(8f53504ac08942ee340489d84eab825e654d0a2c) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE ) /* tiles */
+ ROM_LOAD( "epr12165.b9", 0x00000, 0x10000, CRC(62640221) SHA1(c311d3847a981d0e1609f9b3d80481565d32d78c) )
+ ROM_LOAD( "epr12166.b10", 0x10000, 0x10000, CRC(9abd183b) SHA1(621b017cb34973f9227be383e26b5cd41aea9422) )
+ ROM_LOAD( "epr12167.b11", 0x20000, 0x10000, CRC(2495fd4e) SHA1(2db94ead9223a67238a97e724668076fc43e5534) )
+
+ ROM_REGION( 0x020000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "obj0-o.rom", 0x00001, 0x10000, CRC(2fb38880) SHA1(0e1b601bbda78d1887951c1f7e752531c281bc83) )
+ ROM_LOAD16_BYTE( "obj0-e.rom", 0x00000, 0x10000, CRC(d6a02cba) SHA1(d80000f92e754e89c6ca7b7273feab448fc9a061) )
+
+ ROM_REGION( 0x40000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr12168.a7", 0x0000, 0x8000, CRC(bd9ba01b) SHA1(fafa7dc36cc057a50ae4cdf7a35f3594292336f4) )
+ROM_END
+
+// sys16B
+ROM_START( tturfbl )
+ ROM_REGION( 0x40000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "tt042197.rom", 0x00000, 0x10000, CRC(deee5af1) SHA1(0caba775021dc7e28ac6b7af8eac4f49d3102c83) )
+ ROM_LOAD16_BYTE( "tt06c794.rom", 0x00001, 0x10000, CRC(90e6a95a) SHA1(014a0ae5cebcba9cc99e6ccde4ad5d938fab915c) )
+ ROM_LOAD16_BYTE( "tt030be3.rom", 0x20000, 0x10000, CRC(100264a2) SHA1(d1ea4bf93f5472901ce95200f546ce9b58936aea) )
+ ROM_LOAD16_BYTE( "tt05ef8a.rom", 0x20001, 0x10000, CRC(f787a948) SHA1(512b8cb2f5e9795171951e02c07cae957db41334) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "tt1574b3.rom", 0x00000, 0x10000, CRC(e9e630da) SHA1(e8471dedbb25475e4814d78b56f579fe9110461e) )
+ ROM_LOAD( "tt16cf44.rom", 0x10000, 0x10000, CRC(4c467735) SHA1(8338b6605cbe2e076da0b3e3a47630409a79f002) )
+ ROM_LOAD( "tt17d59e.rom", 0x20000, 0x10000, CRC(60c0f2fe) SHA1(3fea4ed757d47628f59ff940e40cb86b3b5b443b) )
+
+ ROM_REGION( 0x80000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "12279.1b", 0x00001, 0x10000, CRC(7a169fb1) SHA1(1ec6da0d2cfcf727e61f61c847fd8b975b64f944) )
+ ROM_LOAD16_BYTE( "12283.5b", 0x00000, 0x10000, CRC(ae0fa085) SHA1(ae9af92d4dd0c8a0f064d24e647522b588fbd7f7) )
+ ROM_LOAD16_BYTE( "12278.2b", 0x20001, 0x10000, CRC(961d06b7) SHA1(b1a9dea63785bfa2c0e7b931387b91dfcd27d79b) )
+ ROM_LOAD16_BYTE( "12282.6b", 0x20000, 0x10000, CRC(e8671ee1) SHA1(a3732938c370f1936d867aae9c3d1e9bbfb57ede) )
+ ROM_LOAD16_BYTE( "12277.3b", 0x40001, 0x10000, CRC(f16b6ba2) SHA1(00cc04c7b5aad82d51d2d252e1e57bcdc5e2c9e3) )
+ ROM_LOAD16_BYTE( "12281.7b", 0x40000, 0x10000, CRC(1ef1077f) SHA1(8ce6fd7d32a20b93b3f91aaa43fe22720da7236f) )
+ ROM_LOAD16_BYTE( "12276.4b", 0x60001, 0x10000, CRC(838bd71f) SHA1(82d9d127438f5e1906b1cf40bf3b4727f2ee5685) )
+ ROM_LOAD16_BYTE( "12280.8b", 0x60000, 0x10000, CRC(639a57cb) SHA1(84fd8b96758d38f9e1ba1a3c2cf8099ec0452784) )
+
+ ROM_REGION( 0x30000, REGION_CPU2, 0 ) //* sound CPU */
+ ROM_LOAD( "tt014d68.rom", 0x10000, 0x10000, CRC(d4aab1d9) SHA1(94885896d59da1ecabe2377a194fcf61eaae3765) )
+ ROM_LOAD( "tt0246ff.rom", 0x20000, 0x10000, CRC(bb4bba8f) SHA1(b182a7e1d0425e93c2c1b93472aafd30a6af6907) )
+ROM_END
+
+
+// sys16B
+ROM_START( wb3bbl )
+ ROM_REGION( 0x040000, REGION_CPU1, 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "wb3_03", 0x000000, 0x10000, CRC(0019ab3b) SHA1(89d49a437690fa6e0c35bb9f1450042f89504714) )
+ ROM_LOAD16_BYTE( "wb3_05", 0x000001, 0x10000, CRC(196e17ee) SHA1(71e4345b2c3d1612a3d424c9310fad1e23c8a9f7) )
+ ROM_LOAD16_BYTE( "wb3_02", 0x020000, 0x10000, CRC(c87350cb) SHA1(55a8cb68d70b6060dd9a55e281e216ce3917ea5b) )
+ ROM_LOAD16_BYTE( "wb3_04", 0x020001, 0x10000, CRC(565d5035) SHA1(e28a132f1a4ce9466945e231c54502178748af98) )
+
+ ROM_REGION( 0x30000, REGION_GFX1, ROMREGION_DISPOSE | ROMREGION_INVERT ) /* tiles */
+ ROM_LOAD( "wb3_14", 0x00000, 0x10000, CRC(d3f20bca) SHA1(0a87f709f8e2a913473512ede408e2cbc535443f) )
+ ROM_LOAD( "wb3_15", 0x10000, 0x10000, CRC(96ff9d52) SHA1(791a9da4860e0d42fba98f80a3c6725ad8c73e33) )
+ ROM_LOAD( "wb3_16", 0x20000, 0x10000, CRC(afaf0d31) SHA1(d4309329a0a543250788146b63b27ff058c02fc3) )
+
+ ROM_REGION( 0x080000, REGION_GFX2, 0 ) /* sprites */
+ ROM_LOAD16_BYTE( "epr12093.b4", 0x000001, 0x010000, CRC(4891e7bb) SHA1(1be04fcabe9bfa8cf746263a5bcca67902a021a0) )
+ ROM_LOAD16_BYTE( "epr12097.b8", 0x000000, 0x010000, CRC(e645902c) SHA1(497cfcf6c25cc2e042e16dbcb1963d2223def15a) )
+ ROM_LOAD16_BYTE( "epr12091.b2", 0x020001, 0x010000, CRC(8409a243) SHA1(bcbb9510a6499d8147543d6befa5a49f4ac055d9) )
+ ROM_LOAD16_BYTE( "epr12095.b6", 0x020000, 0x010000, CRC(e774ec2c) SHA1(a4aa15ec7be5539a740ad02ff720458018dbc536) )
+ ROM_LOAD16_BYTE( "epr12090.b1", 0x040001, 0x010000, CRC(aeeecfca) SHA1(496124b170a725ad863c741d4e021ab947511e4c) )
+ ROM_LOAD16_BYTE( "epr12094.b5", 0x040000, 0x010000, CRC(615e4927) SHA1(d23f164973afa770714e284a77ddf10f18cc596b) )
+ ROM_LOAD16_BYTE( "epr12092.b3", 0x060001, 0x010000, CRC(5c2f0d90) SHA1(e0fbc0f841e4607ad232931368b16e81440a75c4) )
+ ROM_LOAD16_BYTE( "epr12096.b7", 0x060000, 0x010000, CRC(0cd59d6e) SHA1(caf754a461feffafcfe7bfc6e89da76c4db257c5) )
+
+ ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound CPU */
+ ROM_LOAD( "epr12127.a10", 0x0000, 0x8000, CRC(0bb901bb) SHA1(c81b198df8e3b0ec568032c76addf0d1a1711194) )
+ROM_END
+
+
+/* pre-System16 */
+/* rom parent machine inp init */
+/* Alien Syndrome */
+
+/* System16A */
+/* rom parent machine inp init */
+GAME( 1987, shinoblb, shinobi, shinob2, shinobi, shinobl, ROT0, "[Sega] (Beta bootleg)", "Shinobi (Beta bootleg)", 0 )
+GAME( 1987, shinobld, shinobi, shinob2, shinobi, shinobl, ROT0, "[Sega] (Datsu bootleg)", "Shinobi (Datsu bootleg)", 0 )
+
+/* System16B */
+/* rom parent machine inp init */
+
+GAME( 1989, bayrtbl1, bayroute, bayroute, bayroute, bayrtbl1, ROT0, "bootleg", "Bay Route (bootleg set 1)", GAME_NOT_WORKING )
+GAME( 1989, bayrtbl2, bayroute, bayroute, bayroute, bayrtbl1, ROT0, "bootleg", "Bay Route (bootleg set 2)", GAME_NOT_WORKING )
+GAME( 1989, dduxbl, ddux, dduxbl, ddux, dduxbl, ROT0, "bootleg", "Dynamite Dux (bootleg)", 0 )
+GAME( 1989, eswatbl, eswat, eswatbl, eswat, eswatbl, ROT0, "bootleg", "E-Swat - Cyber Police (bootleg)", GAME_IMPERFECT_SOUND )
+GAME( 1989, fpointbl, fpoint, fpointbl, fpoint, fpointbl, ROT0, "bootleg", "Flash Point (World, bootleg)", 0 )
+GAME( 1989, fpointbj, fpoint, fpointbl, fpointbj, fpointbl, ROT0, "bootleg", "Flash Point (Japan, bootleg)", 0 )
+
+GAME( 1989, goldnabl, goldnaxe, goldnaxe, goldnaxe, goldnabl, ROT0, "bootleg", "Golden Axe (bootleg, encrypted)", GAME_NOT_WORKING )
+GAME( 1989, goldnab2, goldnaxe, goldnaxe, goldnaxe, goldnabl, ROT0, "bootleg", "Golden Axe (bootleg)", GAME_NOT_WORKING )
+
+GAME( 1988, passshtb, passsht, passsht, passsht, passsht, ROT270, "bootleg", "Passing Shot (2 Players) (bootleg)", GAME_IMPERFECT_SOUND )
+GAME( 1988, passht4b, passsht, passht4b, passht4b, passht4b, ROT270, "bootleg", "Passing Shot (4 Players) (bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_NOT_WORKING )
+GAME( 1988, tetrisbl, tetris, tetrisbl, tetris, tetrisbl, ROT0, "bootleg", "Tetris (bootleg)", 0 )
+GAME( 1989, tturfbl, tturf, tturfbl, tturf, tturfbl, ROT0, "bootleg", "Tough Turf (bootleg)", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
+GAME( 1988, wb3bbl, wb3, wb3bbl, wb3b, wb3bbl, ROT0, "bootleg", "Wonder Boy III - Monster Lair (bootleg)", 0 )