diff options
Diffstat (limited to 'src/mame/drivers/system16.c')
-rw-r--r-- | src/mame/drivers/system16.c | 2807 |
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 ) |