summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/tetrisp2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/tetrisp2.c')
-rw-r--r--src/mame/drivers/tetrisp2.c1638
1 files changed, 1638 insertions, 0 deletions
diff --git a/src/mame/drivers/tetrisp2.c b/src/mame/drivers/tetrisp2.c
new file mode 100644
index 00000000000..88d2a583494
--- /dev/null
+++ b/src/mame/drivers/tetrisp2.c
@@ -0,0 +1,1638 @@
+/***************************************************************************
+
+ -= Tetris Plus 2 =-
+
+ driver by Luca Elia (l.elia@tin.it)
+
+
+Main CPU : TMP68HC000P-12
+
+Video Chips : SS91022-03 9428XX001
+ GS91022-04 9721PD008
+ SS91022-05 9347EX002
+ GS91022-05 048 9726HX002
+
+Sound Chips : Yamaha YMZ280B-F
+
+Other : XILINX XC5210 PQ240C X68710M AKJ9544
+ XC7336 PC44ACK9633 A63458A
+ NVRAM
+
+
+To Do:
+
+- There is a 3rd unimplemented layer capable of rotation (not used by
+ the game, can be tested in service mode).
+- Priority RAM is not taken into account.
+- The video system on this hardware is almost the same as the MegaSystem 32 board
+
+Notes:
+
+- The Japan set doesn't seem to have (or use) NVRAM. I can't enter
+ a test mode or use the service coin either !?
+
+***************************************************************************/
+
+#include "driver.h"
+#include "sound/ymz280b.h"
+#include "rocknms.lh"
+
+UINT16 tetrisp2_systemregs[0x10];
+static UINT16 rocknms_sub_systemregs[0x10];
+
+static UINT16 rockn_protectdata;
+static UINT16 rockn_adpcmbank;
+static UINT16 rockn_soundvolume;
+
+static emu_timer *rockn_timer_l4;
+static emu_timer *rockn_timer_sub_l4;
+
+/* Variables defined in video: */
+
+extern UINT16 *tetrisp2_vram_bg, *tetrisp2_scroll_bg;
+extern UINT16 *tetrisp2_vram_fg, *tetrisp2_scroll_fg;
+extern UINT16 *tetrisp2_vram_rot, *tetrisp2_rotregs;
+
+extern UINT16 *tetrisp2_priority;
+
+extern UINT16 *rocknms_sub_vram_bg, *rocknms_sub_scroll_bg;
+extern UINT16 *rocknms_sub_vram_fg, *rocknms_sub_scroll_fg;
+extern UINT16 *rocknms_sub_vram_rot, *rocknms_sub_rotregs;
+
+extern UINT16 *rocknms_sub_priority;
+
+/* Functions defined in video: */
+
+WRITE16_HANDLER( tetrisp2_palette_w );
+WRITE16_HANDLER( rocknms_sub_palette_w );
+READ16_HANDLER( tetrisp2_priority_r );
+WRITE16_HANDLER( tetrisp2_priority_w );
+WRITE16_HANDLER( rockn_priority_w );
+READ16_HANDLER( rocknms_sub_priority_r );
+WRITE16_HANDLER( rocknms_sub_priority_w );
+
+WRITE16_HANDLER( tetrisp2_vram_bg_w );
+WRITE16_HANDLER( tetrisp2_vram_fg_w );
+WRITE16_HANDLER( tetrisp2_vram_rot_w );
+
+WRITE16_HANDLER( rocknms_sub_vram_bg_w );
+WRITE16_HANDLER( rocknms_sub_vram_fg_w );
+WRITE16_HANDLER( rocknms_sub_vram_rot_w );
+
+VIDEO_START( tetrisp2 );
+VIDEO_UPDATE( tetrisp2 );
+VIDEO_START( rockntread );
+VIDEO_UPDATE( rockntread );
+VIDEO_START( rocknms );
+VIDEO_UPDATE( rocknms );
+
+/***************************************************************************
+
+
+ Sound
+
+
+***************************************************************************/
+
+static WRITE16_HANDLER( tetrisp2_systemregs_w )
+{
+ if (ACCESSING_LSB)
+ {
+ tetrisp2_systemregs[offset] = data;
+ }
+}
+
+#define ROCKN_TIMER_BASE ATTOTIME_IN_NSEC(500000)
+
+static WRITE16_HANDLER( rockn_systemregs_w )
+{
+ if (ACCESSING_LSB)
+ {
+ tetrisp2_systemregs[offset] = data;
+ if (offset == 0x0c)
+ {
+ attotime timer = attotime_mul(ROCKN_TIMER_BASE, 4096 - data);
+ timer_adjust(rockn_timer_l4, timer, 0, timer);
+ }
+ }
+}
+
+
+static WRITE16_HANDLER( rocknms_sub_systemregs_w )
+{
+ if (ACCESSING_LSB)
+ {
+ rocknms_sub_systemregs[offset] = data;
+ if (offset == 0x0c)
+ {
+ attotime timer = attotime_mul(ROCKN_TIMER_BASE, 4096 - data);
+ timer_adjust(rockn_timer_sub_l4, timer, 0, timer);
+ }
+ }
+}
+
+
+/***************************************************************************
+
+
+ Sound
+
+
+***************************************************************************/
+
+static READ16_HANDLER( tetrisp2_sound_r )
+{
+ return YMZ280B_status_0_r(offset);
+}
+
+static WRITE16_HANDLER( tetrisp2_sound_w )
+{
+ if (ACCESSING_LSB)
+ {
+ if (offset) YMZ280B_data_0_w (offset, data & 0xff);
+ else YMZ280B_register_0_w (offset, data & 0xff);
+ }
+}
+
+static READ16_HANDLER( rockn_adpcmbank_r )
+{
+ return ((rockn_adpcmbank & 0xf0ff) | (rockn_protectdata << 8));
+}
+
+static WRITE16_HANDLER( rockn_adpcmbank_w )
+{
+ UINT8 *SNDROM = memory_region(REGION_SOUND1);
+ int bank;
+
+ rockn_adpcmbank = data;
+ bank = ((data & 0x001f) >> 2);
+
+ if (bank > 7)
+ {
+ popmessage("!!!!! ADPCM BANK OVER:%01X (%04X) !!!!!", bank, data);
+ bank = 0;
+ }
+
+ memcpy(&SNDROM[0x0400000], &SNDROM[0x1000000 + (0x0c00000 * bank)], 0x0c00000);
+}
+
+static WRITE16_HANDLER( rockn2_adpcmbank_w )
+{
+ UINT8 *SNDROM = memory_region(REGION_SOUND1);
+ int bank;
+
+ char banktable[9][3]=
+ {
+ { 0, 1, 2 }, // bank $00
+ { 3, 4, 5 }, // bank $04
+ { 6, 7, 8 }, // bank $08
+ { 9, 10, 11 }, // bank $0c
+ { 12, 13, 14 }, // bank $10
+ { 15, 16, 17 }, // bank $14
+ { 18, 19, 20 }, // bank $18
+ { 0, 0, 0 }, // bank $1c
+ { 0, 5, 14 }, // bank $20
+ };
+
+ rockn_adpcmbank = data;
+ bank = ((data & 0x003f) >> 2);
+
+ if (bank > 8)
+ {
+ popmessage("!!!!! ADPCM BANK OVER:%01X (%04X) !!!!!", bank, data);
+ bank = 0;
+ }
+
+ memcpy(&SNDROM[0x0400000], &SNDROM[0x1000000 + (0x0400000 * banktable[bank][0] )], 0x0400000);
+ memcpy(&SNDROM[0x0800000], &SNDROM[0x1000000 + (0x0400000 * banktable[bank][1] )], 0x0400000);
+ memcpy(&SNDROM[0x0c00000], &SNDROM[0x1000000 + (0x0400000 * banktable[bank][2] )], 0x0400000);
+}
+
+
+static READ16_HANDLER( rockn_soundvolume_r )
+{
+ return 0xffff;
+}
+
+static WRITE16_HANDLER( rockn_soundvolume_w )
+{
+ rockn_soundvolume = data;
+}
+
+/***************************************************************************
+
+
+ Protection
+
+
+***************************************************************************/
+
+static READ16_HANDLER( tetrisp2_ip_1_word_r )
+{
+ return ( readinputportbytag("IN1") & 0xfcff ) |
+ ( mame_rand(Machine) & ~0xfcff ) |
+ ( 1 << (8 + (mame_rand(Machine)&1)) );
+}
+
+
+/***************************************************************************
+
+
+ NVRAM
+
+
+***************************************************************************/
+
+static UINT16 *tetrisp2_nvram;
+static size_t tetrisp2_nvram_size;
+
+static NVRAM_HANDLER( tetrisp2 )
+{
+ if (read_or_write)
+ mame_fwrite(file,tetrisp2_nvram,tetrisp2_nvram_size);
+ else
+ {
+ if (file)
+ mame_fread(file,tetrisp2_nvram,tetrisp2_nvram_size);
+ else
+ {
+ /* fill in the default values */
+ memset(tetrisp2_nvram,0,tetrisp2_nvram_size);
+ }
+ }
+}
+
+
+/* The game only ever writes even bytes and reads odd bytes */
+static READ16_HANDLER( tetrisp2_nvram_r )
+{
+ return ( (tetrisp2_nvram[offset] >> 8) & 0x00ff ) |
+ ( (tetrisp2_nvram[offset] << 8) & 0xff00 ) ;
+}
+
+static WRITE16_HANDLER( tetrisp2_nvram_w )
+{
+ COMBINE_DATA(&tetrisp2_nvram[offset]);
+}
+
+static READ16_HANDLER( rockn_nvram_r )
+{
+ return tetrisp2_nvram[offset];
+}
+
+
+/***************************************************************************
+
+
+
+
+
+***************************************************************************/
+
+static UINT16 rocknms_main2sub;
+static UINT16 rocknms_sub2main;
+
+static READ16_HANDLER( rocknms_main2sub_r )
+{
+ return rocknms_main2sub;
+}
+
+static WRITE16_HANDLER( rocknms_main2sub_w )
+{
+ if (ACCESSING_LSB)
+ rocknms_main2sub = (data ^ 0xffff);
+}
+
+static READ16_HANDLER( rocknms_port_0_r )
+{
+ return ((readinputport(0) & 0xfffc ) | (rocknms_sub2main & 0x0003));
+}
+
+static WRITE16_HANDLER( rocknms_sub2main_w )
+{
+ if (ACCESSING_LSB)
+ rocknms_sub2main = (data ^ 0xffff);
+}
+
+
+static WRITE16_HANDLER( tetrisp2_coincounter_w )
+{
+ coin_counter_w( 0, (data & 0x0001));
+}
+
+
+/***************************************************************************
+
+
+ Memory Map
+
+
+***************************************************************************/
+
+static ADDRESS_MAP_START( tetrisp2_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_READ(MRA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_READ(MRA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_READ(tetrisp2_priority_r ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0x400000, 0x403fff) AM_READ(MRA16_RAM ) // Foreground
+ AM_RANGE(0x404000, 0x407fff) AM_READ(MRA16_RAM ) // Background
+ AM_RANGE(0x408000, 0x409fff) AM_READ(MRA16_RAM ) // ???
+ AM_RANGE(0x500000, 0x50ffff) AM_READ(MRA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_READ(MRA16_RAM ) // Rotation
+ AM_RANGE(0x650000, 0x651fff) AM_READ(MRA16_RAM ) // Rotation (mirror)
+ AM_RANGE(0x800002, 0x800003) AM_READ(tetrisp2_sound_r ) // Sound
+ AM_RANGE(0x900000, 0x903fff) AM_READ(tetrisp2_nvram_r ) // NVRAM
+ AM_RANGE(0x904000, 0x907fff) AM_READ(tetrisp2_nvram_r ) // NVRAM (mirror)
+ AM_RANGE(0xbe0000, 0xbe0001) AM_READ(MRA16_NOP ) // INT-level1 dummy read
+ AM_RANGE(0xbe0002, 0xbe0003) AM_READ(input_port_0_word_r ) // Inputs
+ AM_RANGE(0xbe0004, 0xbe0005) AM_READ(tetrisp2_ip_1_word_r ) // Inputs & protection
+ AM_RANGE(0xbe0008, 0xbe0009) AM_READ(input_port_2_word_r ) // Inputs
+ AM_RANGE(0xbe000a, 0xbe000b) AM_READ(watchdog_reset16_r ) // Watchdog
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( tetrisp2_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_WRITE(MWA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_WRITE(MWA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_WRITE(tetrisp2_priority_w) AM_BASE(&tetrisp2_priority ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_WRITE(tetrisp2_palette_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0x400000, 0x403fff) AM_WRITE(tetrisp2_vram_fg_w) AM_BASE(&tetrisp2_vram_fg ) // Foreground
+ AM_RANGE(0x404000, 0x407fff) AM_WRITE(tetrisp2_vram_bg_w) AM_BASE(&tetrisp2_vram_bg ) // Background
+ AM_RANGE(0x408000, 0x409fff) AM_WRITE(MWA16_RAM ) // ???
+ AM_RANGE(0x500000, 0x50ffff) AM_WRITE(MWA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_WRITE(tetrisp2_vram_rot_w) AM_BASE(&tetrisp2_vram_rot ) // Rotation
+ AM_RANGE(0x650000, 0x651fff) AM_WRITE(tetrisp2_vram_rot_w ) // Rotation (mirror)
+ AM_RANGE(0x800000, 0x800003) AM_WRITE(tetrisp2_sound_w ) // Sound
+ AM_RANGE(0x900000, 0x903fff) AM_WRITE(tetrisp2_nvram_w) AM_BASE(&tetrisp2_nvram) AM_SIZE(&tetrisp2_nvram_size ) // NVRAM
+ AM_RANGE(0x904000, 0x907fff) AM_WRITE(tetrisp2_nvram_w ) // NVRAM (mirror)
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE(tetrisp2_coincounter_w ) // Coin Counter
+ AM_RANGE(0xb20000, 0xb20001) AM_WRITE(MWA16_NOP ) // ???
+ AM_RANGE(0xb40000, 0xb4000b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_fg ) // Foreground Scrolling
+ AM_RANGE(0xb40010, 0xb4001b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_bg ) // Background Scrolling
+ AM_RANGE(0xb4003e, 0xb4003f) AM_WRITE(MWA16_NOP ) // scr_size
+ AM_RANGE(0xb60000, 0xb6002f) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_rotregs ) // Rotation Registers
+ AM_RANGE(0xba0000, 0xba001f) AM_WRITE(tetrisp2_systemregs_w ) // system param
+ AM_RANGE(0xba001a, 0xba001b) AM_WRITE(MWA16_NOP ) // Lev 4 irq ack
+ AM_RANGE(0xba001e, 0xba001f) AM_WRITE(MWA16_NOP ) // Lev 2 irq ack
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rockn1_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_READ(MRA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_READ(MRA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_READ(tetrisp2_priority_r ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0x400000, 0x403fff) AM_READ(MRA16_RAM ) // Foreground
+ AM_RANGE(0x404000, 0x407fff) AM_READ(MRA16_RAM ) // Background
+ AM_RANGE(0x408000, 0x409fff) AM_READ(MRA16_RAM ) // ???
+ AM_RANGE(0x500000, 0x50ffff) AM_READ(MRA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_READ(MRA16_RAM ) // Rotation
+ AM_RANGE(0x900000, 0x903fff) AM_READ(rockn_nvram_r ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_READ(rockn_soundvolume_r ) // Sound Volume
+ AM_RANGE(0xa40002, 0xa40003) AM_READ(tetrisp2_sound_r ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_READ(rockn_adpcmbank_r ) // Sound Bank
+ AM_RANGE(0xbe0000, 0xbe0001) AM_READ(MRA16_NOP ) // INT-level1 dummy read
+ AM_RANGE(0xbe0002, 0xbe0003) AM_READ(input_port_0_word_r ) // Inputs
+ AM_RANGE(0xbe0004, 0xbe0005) AM_READ(input_port_1_word_r ) // Inputs
+ AM_RANGE(0xbe0008, 0xbe0009) AM_READ(input_port_2_word_r ) // Inputs
+ AM_RANGE(0xbe000a, 0xbe000b) AM_READ(watchdog_reset16_r ) // Watchdog
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rockn1_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_WRITE(MWA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_WRITE(MWA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_WRITE(rockn_priority_w) AM_BASE(&tetrisp2_priority ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_WRITE(tetrisp2_palette_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0x400000, 0x403fff) AM_WRITE(tetrisp2_vram_fg_w) AM_BASE(&tetrisp2_vram_fg ) // Foreground
+ AM_RANGE(0x404000, 0x407fff) AM_WRITE(tetrisp2_vram_bg_w) AM_BASE(&tetrisp2_vram_bg ) // Background
+ AM_RANGE(0x408000, 0x409fff) AM_WRITE(MWA16_RAM ) // ???
+ AM_RANGE(0x500000, 0x50ffff) AM_WRITE(MWA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_WRITE(tetrisp2_vram_rot_w) AM_BASE(&tetrisp2_vram_rot ) // Rotation
+ AM_RANGE(0x900000, 0x903fff) AM_WRITE(tetrisp2_nvram_w) AM_BASE(&tetrisp2_nvram) AM_SIZE(&tetrisp2_nvram_size ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_WRITE(rockn_soundvolume_w ) // Sound Volume
+ AM_RANGE(0xa40000, 0xa40003) AM_WRITE(tetrisp2_sound_w ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_WRITE(rockn_adpcmbank_w ) // Sound Bank
+ AM_RANGE(0xa48000, 0xa48001) AM_WRITE(MWA16_NOP ) // YMZ280 Reset
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE(tetrisp2_coincounter_w ) // Coin Counter
+ AM_RANGE(0xb20000, 0xb20001) AM_WRITE(MWA16_NOP ) // ???
+ AM_RANGE(0xb40000, 0xb4000b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_fg ) // Foreground Scrolling
+ AM_RANGE(0xb40010, 0xb4001b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_bg ) // Background Scrolling
+ AM_RANGE(0xb4003e, 0xb4003f) AM_WRITE(MWA16_NOP ) // scr_size
+ AM_RANGE(0xb60000, 0xb6002f) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_rotregs ) // Rotation Registers
+ AM_RANGE(0xba0000, 0xba001f) AM_WRITE(rockn_systemregs_w ) // system param
+ AM_RANGE(0xba001a, 0xba001b) AM_WRITE(MWA16_NOP ) // Lev 4 irq ack
+ AM_RANGE(0xba001e, 0xba001f) AM_WRITE(MWA16_NOP ) // Lev 2 irq ack
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rockn2_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_READ(MRA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_READ(MRA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_READ(tetrisp2_priority_r ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_READ(MRA16_RAM ) // Palette
+ AM_RANGE(0x500000, 0x50ffff) AM_READ(MRA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_READ(MRA16_RAM ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_READ(MRA16_RAM ) // Background
+ AM_RANGE(0x808000, 0x809fff) AM_READ(MRA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x903fff) AM_READ(rockn_nvram_r ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_READ(rockn_soundvolume_r ) // Sound Volume
+ AM_RANGE(0xa40002, 0xa40003) AM_READ(tetrisp2_sound_r ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_READ(rockn_adpcmbank_r ) // Sound Bank
+ AM_RANGE(0xbe0000, 0xbe0001) AM_READ(MRA16_NOP ) // INT-level1 dummy read
+ AM_RANGE(0xbe0002, 0xbe0003) AM_READ(input_port_0_word_r ) // Inputs
+ AM_RANGE(0xbe0004, 0xbe0005) AM_READ(input_port_1_word_r ) // Inputs
+ AM_RANGE(0xbe0008, 0xbe0009) AM_READ(input_port_2_word_r ) // Inputs
+ AM_RANGE(0xbe000a, 0xbe000b) AM_READ(watchdog_reset16_r ) // Watchdog
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rockn2_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_WRITE(MWA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_WRITE(MWA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_WRITE(rockn_priority_w) AM_BASE(&tetrisp2_priority ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_WRITE(tetrisp2_palette_w) AM_BASE(&paletteram16 ) // Palette
+ AM_RANGE(0x500000, 0x50ffff) AM_WRITE(MWA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_WRITE(tetrisp2_vram_rot_w) AM_BASE(&tetrisp2_vram_rot ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_WRITE(tetrisp2_vram_fg_w) AM_BASE(&tetrisp2_vram_fg ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_WRITE(tetrisp2_vram_bg_w) AM_BASE(&tetrisp2_vram_bg ) // Background
+ AM_RANGE(0x808000, 0x809fff) AM_WRITE(MWA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x903fff) AM_WRITE(tetrisp2_nvram_w) AM_BASE(&tetrisp2_nvram) AM_SIZE(&tetrisp2_nvram_size ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_WRITE(rockn_soundvolume_w ) // Sound Volume
+ AM_RANGE(0xa40000, 0xa40003) AM_WRITE(tetrisp2_sound_w ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_WRITE(rockn2_adpcmbank_w ) // Sound Bank
+ AM_RANGE(0xa48000, 0xa48001) AM_WRITE(MWA16_NOP ) // YMZ280 Reset
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE(tetrisp2_coincounter_w ) // Coin Counter
+ AM_RANGE(0xb20000, 0xb20001) AM_WRITE(MWA16_NOP ) // ???
+ AM_RANGE(0xb40000, 0xb4000b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_fg ) // Foreground Scrolling
+ AM_RANGE(0xb40010, 0xb4001b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_bg ) // Background Scrolling
+ AM_RANGE(0xb4003e, 0xb4003f) AM_WRITE(MWA16_NOP ) // scr_size
+ AM_RANGE(0xb60000, 0xb6002f) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_rotregs ) // Rotation Registers
+ AM_RANGE(0xba0000, 0xba001f) AM_WRITE(rockn_systemregs_w ) // system param
+ AM_RANGE(0xba001a, 0xba001b) AM_WRITE(MWA16_NOP ) // Lev 4 irq ack
+ AM_RANGE(0xba001e, 0xba001f) AM_WRITE(MWA16_NOP ) // Lev 2 irq ack
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rocknms_main_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_READ(MRA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_READ(MRA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_READ(tetrisp2_priority_r ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_READ(MRA16_RAM ) // Palette
+// AM_RANGE(0x500000, 0x50ffff) AM_READ(MRA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_READ(MRA16_RAM ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_READ(MRA16_RAM ) // Background
+// AM_RANGE(0x808000, 0x809fff) AM_READ(MRA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x903fff) AM_READ(rockn_nvram_r ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_READ(rockn_soundvolume_r ) // Sound Volume
+ AM_RANGE(0xa40002, 0xa40003) AM_READ(tetrisp2_sound_r ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_READ(rockn_adpcmbank_r ) // Sound Bank
+ AM_RANGE(0xbe0000, 0xbe0001) AM_READ(MRA16_NOP ) // INT-level1 dummy read
+ AM_RANGE(0xbe0002, 0xbe0003) AM_READ(rocknms_port_0_r ) // Inputs
+ AM_RANGE(0xbe0004, 0xbe0005) AM_READ(input_port_1_word_r ) // Inputs
+ AM_RANGE(0xbe0008, 0xbe0009) AM_READ(input_port_2_word_r ) // Inputs
+ AM_RANGE(0xbe000a, 0xbe000b) AM_READ(watchdog_reset16_r ) // Watchdog
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rocknms_main_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_WRITE(MWA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_WRITE(MWA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_WRITE(rockn_priority_w) AM_BASE(&tetrisp2_priority ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_WRITE(tetrisp2_palette_w) AM_BASE(&paletteram16 ) // Palette
+// AM_RANGE(0x500000, 0x50ffff) AM_WRITE(MWA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_WRITE(tetrisp2_vram_rot_w) AM_BASE(&tetrisp2_vram_rot ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_WRITE(tetrisp2_vram_fg_w) AM_BASE(&tetrisp2_vram_fg ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_WRITE(tetrisp2_vram_bg_w) AM_BASE(&tetrisp2_vram_bg ) // Background
+// AM_RANGE(0x808000, 0x809fff) AM_WRITE(MWA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x903fff) AM_WRITE(tetrisp2_nvram_w) AM_BASE(&tetrisp2_nvram) AM_SIZE(&tetrisp2_nvram_size ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_WRITE(rockn_soundvolume_w ) // Sound Volume
+ AM_RANGE(0xa40000, 0xa40003) AM_WRITE(tetrisp2_sound_w ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_WRITE(rockn_adpcmbank_w ) // Sound Bank
+ AM_RANGE(0xa48000, 0xa48001) AM_WRITE(MWA16_NOP ) // YMZ280 Reset
+ AM_RANGE(0xa00000, 0xa00001) AM_WRITE(rocknms_main2sub_w ) // MAIN -> SUB Communication
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE(tetrisp2_coincounter_w ) // Coin Counter
+ AM_RANGE(0xb20000, 0xb20001) AM_WRITE(MWA16_NOP ) // ???
+ AM_RANGE(0xb40000, 0xb4000b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_fg ) // Foreground Scrolling
+ AM_RANGE(0xb40010, 0xb4001b) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_scroll_bg ) // Background Scrolling
+ AM_RANGE(0xb4003e, 0xb4003f) AM_WRITE(MWA16_NOP ) // scr_size
+ AM_RANGE(0xb60000, 0xb6002f) AM_WRITE(MWA16_RAM) AM_BASE(&tetrisp2_rotregs ) // Rotation Registers
+ AM_RANGE(0xba0000, 0xba001f) AM_WRITE(rockn_systemregs_w ) // system param
+ AM_RANGE(0xba001a, 0xba001b) AM_WRITE(MWA16_NOP ) // Lev 4 irq ack
+ AM_RANGE(0xba001e, 0xba001f) AM_WRITE(MWA16_NOP ) // Lev 2 irq ack
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( rocknms_sub_readmem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_READ(MRA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_READ(MRA16_RAM ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_READ(MRA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_READ(MRA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_READ(rocknms_sub_priority_r ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_READ(MRA16_RAM ) // Palette
+// AM_RANGE(0x500000, 0x50ffff) AM_READ(MRA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_READ(MRA16_RAM ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_READ(MRA16_RAM ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_READ(MRA16_RAM ) // Background
+// AM_RANGE(0x808000, 0x809fff) AM_READ(MRA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x907fff) AM_READ(MRA16_RAM ) // NVRAM
+// AM_RANGE(0xbe0000, 0xbe0001) AM_READ(MRA16_NOP ) // INT-level1 dummy read
+ AM_RANGE(0xbe0002, 0xbe0003) AM_READ(rocknms_main2sub_r ) // MAIN -> SUB Communication
+ AM_RANGE(0xbe000a, 0xbe000b) AM_READ(watchdog_reset16_r ) // Watchdog
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START( rocknms_sub_writemem, ADDRESS_SPACE_PROGRAM, 16 )
+ AM_RANGE(0x000000, 0x0fffff) AM_WRITE(MWA16_ROM ) // ROM
+ AM_RANGE(0x100000, 0x103fff) AM_WRITE(MWA16_RAM) AM_BASE(&spriteram16_2) AM_SIZE(&spriteram_2_size ) // Object RAM
+ AM_RANGE(0x104000, 0x107fff) AM_WRITE(MWA16_RAM ) // Spare Object RAM
+ AM_RANGE(0x108000, 0x10ffff) AM_WRITE(MWA16_RAM ) // Work RAM
+ AM_RANGE(0x200000, 0x23ffff) AM_WRITE(rocknms_sub_priority_w) AM_BASE(&rocknms_sub_priority ) // Priority
+ AM_RANGE(0x300000, 0x31ffff) AM_WRITE(rocknms_sub_palette_w) AM_BASE(&paletteram16_2 ) // Palette
+// AM_RANGE(0x500000, 0x50ffff) AM_WRITE(MWA16_RAM ) // Line
+ AM_RANGE(0x600000, 0x60ffff) AM_WRITE(rocknms_sub_vram_rot_w) AM_BASE(&rocknms_sub_vram_rot ) // Rotation
+ AM_RANGE(0x800000, 0x803fff) AM_WRITE(rocknms_sub_vram_fg_w) AM_BASE(&rocknms_sub_vram_fg ) // Foreground
+ AM_RANGE(0x804000, 0x807fff) AM_WRITE(rocknms_sub_vram_bg_w) AM_BASE(&rocknms_sub_vram_bg ) // Background
+// AM_RANGE(0x808000, 0x809fff) AM_WRITE(MWA16_RAM ) // ???
+ AM_RANGE(0x900000, 0x907fff) AM_WRITE(MWA16_RAM ) // NVRAM
+ AM_RANGE(0xa30000, 0xa30001) AM_WRITE(rockn_soundvolume_w ) // Sound Volume
+ AM_RANGE(0xa40000, 0xa40003) AM_WRITE(tetrisp2_sound_w ) // Sound
+ AM_RANGE(0xa44000, 0xa44001) AM_WRITE(rockn_adpcmbank_w ) // Sound Bank
+ AM_RANGE(0xa48000, 0xa48001) AM_WRITE(MWA16_NOP ) // YMZ280 Reset
+ AM_RANGE(0xb00000, 0xb00001) AM_WRITE(rocknms_sub2main_w ) // MAIN <- SUB Communication
+ AM_RANGE(0xb20000, 0xb20001) AM_WRITE(MWA16_NOP ) // ???
+ AM_RANGE(0xb40000, 0xb4000b) AM_WRITE(MWA16_RAM) AM_BASE(&rocknms_sub_scroll_fg ) // Foreground Scrolling
+ AM_RANGE(0xb40010, 0xb4001b) AM_WRITE(MWA16_RAM) AM_BASE(&rocknms_sub_scroll_bg ) // Background Scrolling
+ AM_RANGE(0xb4003e, 0xb4003f) AM_WRITE(MWA16_NOP ) // scr_size
+ AM_RANGE(0xb60000, 0xb6002f) AM_WRITE(MWA16_RAM) AM_BASE(&rocknms_sub_rotregs ) // Rotation Registers
+ AM_RANGE(0xba0000, 0xba001f) AM_WRITE(rocknms_sub_systemregs_w ) // system param
+ AM_RANGE(0xba001a, 0xba001b) AM_WRITE(MWA16_NOP ) // Lev 4 irq ack
+ AM_RANGE(0xba001e, 0xba001f) AM_WRITE(MWA16_NOP ) // Lev 2 irq ack
+ AM_RANGE(0xbe0002, 0xbe0003) AM_WRITE(rocknms_sub2main_w ) // MAIN <- SUB Communication (mirror)
+ADDRESS_MAP_END
+
+
+/***************************************************************************
+
+
+ Input Ports
+
+
+***************************************************************************/
+
+/***************************************************************************
+ Tetris Plus 2 (World)
+***************************************************************************/
+
+#define TETPLUS2_COMMON\
+ PORT_START_TAG("IN0") /*$be0002.w*/ \
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)\
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED )\
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)\
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)\
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)\
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)\
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)\
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)\
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)\
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED )\
+ PORT_START_TAG("IN1") /*$be0004.w*/\
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )\
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )\
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 )\
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN1 )\
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN2 )\
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SPECIAL ) /* ?*/\
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SPECIAL ) /* ?*/\
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )\
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+
+static INPUT_PORTS_START( tetrisp2 )
+TETPLUS2_COMMON
+
+ PORT_START_TAG("IN2") //$be0008.w
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Free_Play ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_SERVICE( 0x0080, IP_ACTIVE_LOW )
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Vs Mode Rounds" )
+ PORT_DIPSETTING( 0x0000, "1" )
+ PORT_DIPSETTING( 0x0400, "3" )
+ PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Language ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Japanese ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( English ) )
+ PORT_DIPNAME( 0x1000, 0x1000, "F.B.I Logo" )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Tetris Plus 2 (Japan)
+***************************************************************************/
+
+
+static INPUT_PORTS_START( teplus2j )
+TETPLUS2_COMMON
+
+/*
+ The code for checking the "service mode" and "free play" DSWs
+ is (deliberately?) bugged in this set
+*/
+ PORT_START_TAG("IN2") // $be0008.w
+ PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0001, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0003, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0007, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0006, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0005, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0038, 0x0038, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( 4C_1C ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( 3C_1C ) )
+ PORT_DIPSETTING( 0x0018, DEF_STR( 2C_1C ) )
+ PORT_DIPSETTING( 0x0038, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x0030, DEF_STR( 1C_2C ) )
+ PORT_DIPSETTING( 0x0028, DEF_STR( 1C_3C ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( 1C_4C ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "Unknown 1-6" )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "Unknown 1-7" )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Easy ) )
+ PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Hardest ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "Vs Mode Rounds" )
+ PORT_DIPSETTING( 0x0000, "1" )
+ PORT_DIPSETTING( 0x0400, "3" )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) // Language dip
+ PORT_DIPNAME( 0x1000, 0x1000, "Unknown 2-4" ) // F.B.I. Logo (in the USA set?)
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, "Voice" )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Flip_Screen ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+INPUT_PORTS_END
+
+
+/***************************************************************************
+ Rock'n Tread (Japan)
+***************************************************************************/
+
+
+static INPUT_PORTS_START( rockn )
+ PORT_START_TAG("IN0") //$be0002.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN1") //$be0004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_SERVICE_NO_TOGGLE( 0x0010, IP_ACTIVE_LOW)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN2 )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$be0008.w
+ PORT_DIPNAME( 0x0001, 0x0001, "DIPSW 1-1") // All these used to be marked 'Cheat', can't think why.
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, "DIPSW 1-2")
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "DIPSW 1-3")
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "DIPSW 1-4")
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "DIPSW 1-5")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "DIPSW 1-6")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "DIPSW 1-7")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "DIPSW 1-8")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_DIPNAME(0x0100, 0x0100, "DIPSW 2-1")
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME(0x0200, 0x0200, "DIPSW 2-2")
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "DIPSW 2-3")
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "DIPSW 2-4")
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, "DIPSW 2-5")
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, "DIPSW 2-6")
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "DIPSW 2-7")
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, "DIPSW 2-8")
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( rocknms )
+ PORT_START // IN0 - $be0002.w
+
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_SPECIAL ) // MAIN -> SUB Communication
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_SPECIAL ) // MAIN -> SUB Communication
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1)
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
+
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
+ PORT_BIT( 0x1000, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
+ PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
+
+ PORT_START // IN1 - $be0004.w
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_SERVICE_NO_TOGGLE( 0x0010, IP_ACTIVE_LOW)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 )
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN1 )
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_COIN2 )
+
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START_TAG("IN2") //$be0008.w
+ PORT_DIPNAME( 0x0001, 0x0001, "DIPSW 1-1") // All these used to be marked 'Cheat', can't think why.
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, "DIPSW 1-2")
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, "DIPSW 1-3")
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, "DIPSW 1-4")
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, "DIPSW 1-5")
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, "DIPSW 1-6")
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, "DIPSW 1-7")
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, "DIPSW 1-8")
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_DIPNAME(0x0100, 0x0100, "DIPSW 2-1")
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME(0x0200, 0x0200, "DIPSW 2-2")
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, "DIPSW 2-3")
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, "DIPSW 2-4")
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, "DIPSW 2-5")
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, "DIPSW 2-6")
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, "DIPSW 2-7")
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, "DIPSW 2-8")
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+
+ Graphics Layouts
+
+
+***************************************************************************/
+
+
+/* 8x8x8 tiles */
+static const gfx_layout layout_8x8x8 =
+{
+ 8,8,
+ RGN_FRAC(1,1),
+ 8,
+ { STEP8(0,1) },
+ { STEP8(0,8) },
+ { STEP8(0,8*8) },
+ 8*8*8
+};
+
+/* 16x16x8 tiles */
+static const gfx_layout layout_16x16x8 =
+{
+ 16,16,
+ RGN_FRAC(1,1),
+ 8,
+ { STEP8(0,1) },
+ { STEP16(0,8) },
+ { STEP16(0,16*8) },
+ 16*16*8
+};
+
+static GFXDECODE_START( tetrisp2 )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_8x8x8, 0x0000, 0x10 ) // [0] Sprites
+ GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x8, 0x1000, 0x10 ) // [1] Background
+ GFXDECODE_ENTRY( REGION_GFX3, 0, layout_16x16x8, 0x2000, 0x10 ) // [2] Rotation
+ GFXDECODE_ENTRY( REGION_GFX4, 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground
+GFXDECODE_END
+
+static GFXDECODE_START( rocknms )
+ GFXDECODE_ENTRY( REGION_GFX1, 0, layout_8x8x8, 0x0000, 0x10 ) // [0] Sprites
+ GFXDECODE_ENTRY( REGION_GFX2, 0, layout_16x16x8, 0x1000, 0x10 ) // [1] Background
+ GFXDECODE_ENTRY( REGION_GFX3, 0, layout_16x16x8, 0x2000, 0x10 ) // [2] Rotation
+ GFXDECODE_ENTRY( REGION_GFX4, 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground
+ GFXDECODE_ENTRY( REGION_GFX5, 0, layout_8x8x8, 0x8000, 0x10 ) // [0] Sprites
+ GFXDECODE_ENTRY( REGION_GFX6, 0, layout_16x16x8, 0x9000, 0x10 ) // [1] Background
+ GFXDECODE_ENTRY( REGION_GFX7, 0, layout_16x16x8, 0xa000, 0x10 ) // [2] Rotation
+ GFXDECODE_ENTRY( REGION_GFX8, 0, layout_8x8x8, 0xe000, 0x10 ) // [3] Foreground
+GFXDECODE_END
+
+
+/***************************************************************************
+
+
+ Machine Drivers
+
+
+***************************************************************************/
+
+static struct YMZ280Binterface ymz280b_intf =
+{
+ REGION_SOUND1,
+ 0 // irq
+};
+
+static TIMER_CALLBACK( rockn_timer_level4_callback )
+{
+ cpunum_set_input_line(0, 4, HOLD_LINE);
+}
+
+static TIMER_CALLBACK( rockn_timer_sub_level4_callback )
+{
+ cpunum_set_input_line(1, 4, HOLD_LINE);
+}
+
+
+static TIMER_CALLBACK( rockn_timer_level1_callback )
+{
+ cpunum_set_input_line(0, 1, HOLD_LINE);
+}
+
+static TIMER_CALLBACK( rockn_timer_sub_level1_callback )
+{
+ cpunum_set_input_line(1, 1, HOLD_LINE);
+}
+
+static void init_rockn_timer(running_machine *machine)
+{
+ timer_pulse(ATTOTIME_IN_MSEC(32), 0, rockn_timer_level1_callback);
+ rockn_timer_l4 = timer_alloc(rockn_timer_level4_callback);
+
+ state_save_register_global_array(tetrisp2_systemregs);
+ state_save_register_global_array(rocknms_sub_systemregs);
+ state_save_register_global(rockn_protectdata);
+ state_save_register_global(rockn_adpcmbank);
+ state_save_register_global(rockn_soundvolume);
+}
+
+static DRIVER_INIT( rockn )
+{
+ init_rockn_timer(machine);
+ rockn_protectdata = 1;
+}
+
+static DRIVER_INIT( rockn1 )
+{
+ init_rockn_timer(machine);
+ rockn_protectdata = 1;
+}
+
+static DRIVER_INIT( rockn2 )
+{
+ init_rockn_timer(machine);
+ rockn_protectdata = 2;
+}
+
+static DRIVER_INIT( rocknms )
+{
+ init_rockn_timer(machine);
+
+ timer_pulse(ATTOTIME_IN_MSEC(32), 0, rockn_timer_sub_level1_callback);
+ rockn_timer_sub_l4 = timer_alloc(rockn_timer_sub_level4_callback);
+
+ rockn_protectdata = 3;
+
+}
+
+static DRIVER_INIT( rockn3 )
+{
+ init_rockn_timer(machine);
+ rockn_protectdata = 4;
+}
+
+
+static MACHINE_DRIVER_START( tetrisp2 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 12000000)
+ MDRV_CPU_PROGRAM_MAP(tetrisp2_readmem,tetrisp2_writemem)
+ MDRV_CPU_VBLANK_INT(irq2_line_hold,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_NVRAM_HANDLER(tetrisp2)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(0x140, 0xe0)
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
+ MDRV_GFXDECODE(tetrisp2)
+ MDRV_PALETTE_LENGTH(0x8000)
+
+ MDRV_VIDEO_START(tetrisp2)
+ MDRV_VIDEO_UPDATE(tetrisp2)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YMZ280B, 16934400)
+ MDRV_SOUND_CONFIG(ymz280b_intf)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+static MACHINE_DRIVER_START( rockn )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 12000000)
+ MDRV_CPU_PROGRAM_MAP(rockn1_readmem,rockn1_writemem)
+ MDRV_CPU_VBLANK_INT(irq2_line_hold,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_NVRAM_HANDLER(tetrisp2)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(0x140, 0xe0)
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
+ MDRV_GFXDECODE(tetrisp2)
+ MDRV_PALETTE_LENGTH(0x8000)
+
+ MDRV_VIDEO_START(rockntread)
+ MDRV_VIDEO_UPDATE(rockntread)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YMZ280B, 16934400)
+ MDRV_SOUND_CONFIG(ymz280b_intf)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+
+static MACHINE_DRIVER_START( rockn2 )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 12000000)
+ MDRV_CPU_PROGRAM_MAP(rockn2_readmem,rockn2_writemem)
+ MDRV_CPU_VBLANK_INT(irq2_line_hold,1)
+
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+
+ MDRV_NVRAM_HANDLER(tetrisp2)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
+ MDRV_SCREEN_SIZE(0x140, 0xe0)
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
+ MDRV_GFXDECODE(tetrisp2)
+ MDRV_PALETTE_LENGTH(0x8000)
+
+ MDRV_VIDEO_START(rockntread)
+ MDRV_VIDEO_UPDATE(rockntread)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YMZ280B, 16934400)
+ MDRV_SOUND_CONFIG(ymz280b_intf)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+static MACHINE_DRIVER_START( rocknms )
+
+ /* basic machine hardware */
+ MDRV_CPU_ADD(M68000, 12000000)
+ MDRV_CPU_PROGRAM_MAP(rocknms_main_readmem,rocknms_main_writemem)
+ MDRV_CPU_VBLANK_INT(irq2_line_hold,1)
+
+ MDRV_CPU_ADD(M68000, 12000000)
+ MDRV_CPU_PROGRAM_MAP(rocknms_sub_readmem,rocknms_sub_writemem)
+ MDRV_CPU_VBLANK_INT(irq2_line_hold,1)
+
+ MDRV_NVRAM_HANDLER(tetrisp2)
+
+ /* video hardware */
+ MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
+
+ MDRV_GFXDECODE(rocknms)
+ MDRV_PALETTE_LENGTH(0x10000)
+ MDRV_DEFAULT_LAYOUT(layout_rocknms)
+
+ MDRV_SCREEN_ADD("left", 0x000)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_SCREEN_SIZE(0x140, 0xe0)
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
+
+ MDRV_SCREEN_ADD("right", 0x000)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
+ MDRV_SCREEN_REFRESH_RATE(60)
+ MDRV_SCREEN_VBLANK_TIME(DEFAULT_60HZ_VBLANK_DURATION)
+ MDRV_SCREEN_SIZE(0x140, 0xe0)
+ MDRV_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
+
+
+ MDRV_VIDEO_START(rocknms)
+ MDRV_VIDEO_UPDATE(rocknms)
+
+ /* sound hardware */
+ MDRV_SPEAKER_STANDARD_STEREO("left", "right")
+
+ MDRV_SOUND_ADD(YMZ280B, 16934400)
+ MDRV_SOUND_CONFIG(ymz280b_intf)
+ MDRV_SOUND_ROUTE(0, "left", 1.0)
+ MDRV_SOUND_ROUTE(1, "right", 1.0)
+MACHINE_DRIVER_END
+
+
+/***************************************************************************
+
+
+ ROMs Loading
+
+
+***************************************************************************/
+
+
+/***************************************************************************
+
+ Tetris Plus 2
+
+(C) Jaleco 1996
+
+TP-97222
+96019 EB-00-20117-0
+MDK332V-0
+
+BRIEF HARDWARE OVERVIEW
+
+Toshiba TMP68HC000P-12
+Yamaha YMZ280B-F
+OSC: 12.000MHz, 48.000MHz, 16.9344MHz
+
+Listing of custom chips. (Some on scan are hard to read).
+
+IC38 JALECO SS91022-03 9428XX001
+IC31 JALECO SS91022-05 9347EX002
+IC32 JALECO GS91022-05 048 9726HX002
+IC30 JALECO GS91022-04 9721PD008
+IC39 XILINX XC5210 PQ240C X68710M AKJ9544
+IC49 XILINX XC7336 PC44ACK9633 A63458A
+
+***************************************************************************/
+
+ROM_START( tetrisp2 )
+
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "t2p_04.rom", 0x000000, 0x080000, CRC(e67f9c51) SHA1(d8b2937699d648267b163c7c3f591426877f3701) )
+ ROM_LOAD16_BYTE( "t2p_01.rom", 0x000001, 0x080000, CRC(5020a4ed) SHA1(9c0f02fe3700761771ac026a2e375144e86e5eb7) )
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "96019-01.9", 0x000000, 0x400000, CRC(06f7dc64) SHA1(722c51b707b9854c0293afdff18b27ec7cae6719) )
+ ROM_LOAD32_WORD( "96019-02.8", 0x000002, 0x400000, CRC(3e613bed) SHA1(038b5e43fa3d69654107c8093126eeb2e8fa4ddc) )
+ /* If t2p_m01&2 from this board were correctly read, since they
+ hold the same data of the above but with swapped halves, it
+ means they had to invert the top bit of the "page select"
+ register in the sprite's hardware on this board! */
+
+ ROM_REGION( 0x800000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD( "96019-06.13", 0x000000, 0x400000, CRC(16f7093c) SHA1(2be77c6a692c5d762f5553ae24e8c415ab194cc6) )
+ ROM_LOAD( "96019-04.6", 0x400000, 0x100000, CRC(b849dec9) SHA1(fa7ac00fbe587a74c3fb8c74a0f91f7afeb8682f) )
+
+ ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "96019-04.6", 0x000000, 0x100000, CRC(b849dec9) SHA1(fa7ac00fbe587a74c3fb8c74a0f91f7afeb8682f) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "tetp2-10.bin", 0x000000, 0x080000, CRC(34dd1bad) SHA1(9bdf1dde11f82839676400de5dd7acb06ea8cdb2) ) // 11111xxxxxxxxxxxxxx = 0xFF
+
+ ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "96019-07.7", 0x000000, 0x400000, CRC(a8a61954) SHA1(86c3db10b348ba1f44ff696877b8b20845fa53de) )
+
+ROM_END
+
+
+/***************************************************************************
+
+ Tetris Plus 2 (Japan)
+
+(c)1997 Jaleco / The Tetris Company
+
+TP-97222
+96019 EB-00-20117-0
+
+CPU: 68000-12
+Sound: YMZ280B-F
+OSC: 12.000MHz
+ 48.0000MHz
+ 16.9344MHz
+
+Custom: SS91022-03
+ GS91022-04
+ GS91022-05
+ SS91022-05
+
+***************************************************************************/
+
+ROM_START( teplus2j )
+
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "tet2-4v2.2", 0x000000, 0x080000, CRC(5bfa32c8) SHA1(55fb2872695fcfbad13f5c0723302e72da69e44a) ) // v2.2
+ ROM_LOAD16_BYTE( "tet2-1v2.2", 0x000001, 0x080000, CRC(919116d0) SHA1(3e1c0fd4c9175b2900a4717fbb9e8b591c5f534d) )
+
+ ROM_REGION( 0x800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "96019-01.9", 0x000000, 0x400000, CRC(06f7dc64) SHA1(722c51b707b9854c0293afdff18b27ec7cae6719) )
+ ROM_LOAD32_WORD( "96019-02.8", 0x000002, 0x400000, CRC(3e613bed) SHA1(038b5e43fa3d69654107c8093126eeb2e8fa4ddc) )
+
+ ROM_REGION( 0x400000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD( "96019-06.13", 0x000000, 0x400000, CRC(16f7093c) SHA1(2be77c6a692c5d762f5553ae24e8c415ab194cc6) )
+
+ ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "96019-04.6", 0x000000, 0x100000, CRC(b849dec9) SHA1(fa7ac00fbe587a74c3fb8c74a0f91f7afeb8682f) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "tetp2-10.bin", 0x000000, 0x080000, CRC(34dd1bad) SHA1(9bdf1dde11f82839676400de5dd7acb06ea8cdb2) ) // 11111xxxxxxxxxxxxxx = 0xFF
+
+ ROM_REGION( 0x400000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "96019-07.7", 0x000000, 0x400000, CRC(a8a61954) SHA1(86c3db10b348ba1f44ff696877b8b20845fa53de) )
+
+ROM_END
+
+/***
+
+Rock 'n' Tread
+
+***/
+ROM_START( rockn )
+
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "98344_1.bin", 0x000001, 0x80000, CRC(4cf79e58) SHA1(f50e596d43c9ab2072ae0476169eee2a8512fd8d) )
+ ROM_LOAD16_BYTE( "98344_4.bin", 0x000000, 0x80000, CRC(caa33f79) SHA1(8ccff67091dac5ad871cae6cdb31e1fc37c1a4c2) )
+
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "98344_8.bin", 0x000002, 0x200000, CRC(fa3f6f9c) SHA1(586dcc690a1a4aa7c97932ad496382def6a074a4) )
+ ROM_LOAD32_WORD( "98344_9.bin", 0x000000, 0x200000, CRC(3d12a688) SHA1(356b2ea81d960838b604c5a17cc77e79fb0e40ce) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "98344_13.bin", 0x000000, 0x200000, CRC(261b99a0) SHA1(7b3c768ae9d7429e2559fe32c1a4ff220d727e7e) )
+
+ ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "98344_6.bin", 0x000000, 0x100000, CRC(5551717f) SHA1(64943a9a68ad4074f3f5128d7796e4f03baa14d5) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "98344_10.bin", 0x000000, 0x080000, CRC(918663a8) SHA1(aedacb741c986ef8159385cfef866cb7e3ef6cb6) )
+
+ /* from the bootleg set, are they right for this? */
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(c354f753) SHA1(bf538c02e2162a93d8c6793a1211e21480156223) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(5b42999e) SHA1(376c773f292eae8b75db11bad3cb6ec5fe48392e) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(8306f302) SHA1(8c0437d7ab8d74d4d15f4a641d30602e39cdd99d) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(3fda842c) SHA1(2b9e7c548b689bab491237e36a2dcf4782a81d79) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(86d4f289) SHA1(908490ab0cf8d33cf3e127f71edee3bece70b86d) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(f8dbf47d) SHA1(f19f7ae26e3b8af17a4e66e6722dd2f5c36d33f8) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(525aff97) SHA1(b18e5bdf67d3a89f39c59f4f9bd3bb608dacc7f7) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(5bd8bb95) SHA1(3b33c42778f7d50ca1513d37e7bc4a4efcc3cf82) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(304c1643) SHA1(0be090077e00d4b9abce2fac4821c630b6a40f22) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(78c22c56) SHA1(eb48d188d25538a1d381ca760f8e98096ee12bfe) ) // bank 2
+ ROM_LOAD( "sound10", 0x3400000, 0x0400000, CRC(d5e8d8a5) SHA1(df7db3c8b110ce1aa85e627537afb744c98877bd) ) // bank 3
+ ROM_LOAD( "sound11", 0x3800000, 0x0400000, CRC(569ef4dd) SHA1(777f8a3aef741655555364d00a1eaa472ac4b922) ) // bank 3
+ ROM_LOAD( "sound12", 0x3c00000, 0x0400000, CRC(aae8d59c) SHA1(ccca1f511ce0ea8d452f3b1d24350b5cee402ad2) ) // bank 3
+ ROM_LOAD( "sound13", 0x4000000, 0x0400000, CRC(9ec1459b) SHA1(10e08a47636dec431cdb8e105cf61287fe9c6637) ) // bank 4
+ ROM_LOAD( "sound14", 0x4400000, 0x0400000, CRC(b26f9a81) SHA1(0d1c8e382eb5877f9a748ff289be97cbdb73b0cc) ) // bank 4
+ROM_END
+
+/***************************************************************************
+
+ Rock'n Tread 1 (Japan)
+ Rock'n Tread 2 (Japan)
+ Rock'n MegaSession (Japan)
+ Rock'n 3 (Japan)
+ Rock'n 4 (Japan)
+
+(c)1997 Jaleco
+
+CPU: 68000-12
+Sound: YMZ280B-F
+OSC: 12.000MHz
+ 48.0000MHz
+ 16.9344MHz
+
+Custom: SS91022-03
+ GS91022-04
+ GS91022-05
+ SS91022-05
+
+***************************************************************************/
+
+ROM_START( rockna )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "prg1", 0x000001, 0x80000, CRC(6078fa48) SHA1(e98c1a1abf026f2d5b5035ccbc9d412a08ca1f02) )
+ ROM_LOAD16_BYTE( "prg0", 0x000000, 0x80000, CRC(c8310bd0) SHA1(1efee954cc94b668b7d9f28a099b8d1c83d3093f) )
+
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "98344_8.bin", 0x000002, 0x200000, CRC(fa3f6f9c) SHA1(586dcc690a1a4aa7c97932ad496382def6a074a4) )
+ ROM_LOAD32_WORD( "98344_9.bin", 0x000000, 0x200000, CRC(3d12a688) SHA1(356b2ea81d960838b604c5a17cc77e79fb0e40ce) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "98344_13.bin", 0x000000, 0x200000, CRC(261b99a0) SHA1(7b3c768ae9d7429e2559fe32c1a4ff220d727e7e) )
+
+ ROM_REGION( 0x100000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "98344_6.bin", 0x000000, 0x100000, CRC(5551717f) SHA1(64943a9a68ad4074f3f5128d7796e4f03baa14d5) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "98344_10.bin", 0x000000, 0x080000, CRC(918663a8) SHA1(aedacb741c986ef8159385cfef866cb7e3ef6cb6) )
+
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(c354f753) SHA1(bf538c02e2162a93d8c6793a1211e21480156223) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(5b42999e) SHA1(376c773f292eae8b75db11bad3cb6ec5fe48392e) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(8306f302) SHA1(8c0437d7ab8d74d4d15f4a641d30602e39cdd99d) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(3fda842c) SHA1(2b9e7c548b689bab491237e36a2dcf4782a81d79) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(86d4f289) SHA1(908490ab0cf8d33cf3e127f71edee3bece70b86d) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(f8dbf47d) SHA1(f19f7ae26e3b8af17a4e66e6722dd2f5c36d33f8) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(525aff97) SHA1(b18e5bdf67d3a89f39c59f4f9bd3bb608dacc7f7) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(5bd8bb95) SHA1(3b33c42778f7d50ca1513d37e7bc4a4efcc3cf82) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(304c1643) SHA1(0be090077e00d4b9abce2fac4821c630b6a40f22) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(78c22c56) SHA1(eb48d188d25538a1d381ca760f8e98096ee12bfe) ) // bank 2
+ ROM_LOAD( "sound10", 0x3400000, 0x0400000, CRC(d5e8d8a5) SHA1(df7db3c8b110ce1aa85e627537afb744c98877bd) ) // bank 3
+ ROM_LOAD( "sound11", 0x3800000, 0x0400000, CRC(569ef4dd) SHA1(777f8a3aef741655555364d00a1eaa472ac4b922) ) // bank 3
+ ROM_LOAD( "sound12", 0x3c00000, 0x0400000, CRC(aae8d59c) SHA1(ccca1f511ce0ea8d452f3b1d24350b5cee402ad2) ) // bank 3
+ ROM_LOAD( "sound13", 0x4000000, 0x0400000, CRC(9ec1459b) SHA1(10e08a47636dec431cdb8e105cf61287fe9c6637) ) // bank 4
+ ROM_LOAD( "sound14", 0x4400000, 0x0400000, CRC(b26f9a81) SHA1(0d1c8e382eb5877f9a748ff289be97cbdb73b0cc) ) // bank 4
+
+ROM_END
+
+
+ROM_START( rockn2 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "prg1", 0x000001, 0x80000, CRC(854b5a45) SHA1(91496bc511fef1d552d2bd00b82d2470eae94528) )
+ ROM_LOAD16_BYTE( "prg0", 0x000000, 0x80000, CRC(4665bbd2) SHA1(3562c67b81a32d178a8bcb872e676bf7284855d7) )
+
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "spr1", 0x000002, 0x200000, CRC(673ce2c2) SHA1(6c0a13de386b02a7f3a86e8128374938ede2525c) )
+ ROM_LOAD32_WORD( "spr0", 0x000000, 0x200000, CRC(9d3968cf) SHA1(11c96e7685ab8c1b416396238ec5c12e7819385f) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "back", 0x000000, 0x200000, CRC(e35c55b3) SHA1(a18367c28befc3f71823f1d4ab2126ad6f8a28fc) )
+
+ ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "rot", 0x000000, 0x200000, CRC(241d7449) SHA1(9fcc2d128d7be273836460313c0e73c81e33c9cb) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "front", 0x000000, 0x080000, CRC(ae74d5b3) SHA1(07aa6ee540a783e3f2a8710a7095d922cff1d443) )
+
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(4e9611a3) SHA1(2a9b1d5afc0ea9a3285f9fc6b49a1c3abd8cd2a5) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(ec600f13) SHA1(151cb0a16782c8bba223d0f6881b80c1e43bc9bc) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(8306f302) SHA1(8c0437d7ab8d74d4d15f4a641d30602e39cdd99d) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(3fda842c) SHA1(2b9e7c548b689bab491237e36a2dcf4782a81d79) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(86d4f289) SHA1(908490ab0cf8d33cf3e127f71edee3bece70b86d) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(f8dbf47d) SHA1(f19f7ae26e3b8af17a4e66e6722dd2f5c36d33f8) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(06f7bd63) SHA1(d8b27212ebba99f5129483550aeac5b86ff2a1d2) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(22f042f6) SHA1(649bdf43dd698150992e68b23fd758bca56c615b) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(dd294d8e) SHA1(49d889d341ab6167d9741340eb27902923b6cb42) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(8fedee6e) SHA1(540c01d1c5f410abb1f86f33a5a532208946cb7c) ) // bank 2
+ ROM_LOAD( "sound10", 0x3400000, 0x0400000, CRC(01292f11) SHA1(da88b14bf8df34e7574cf8c9f5dd385db13ab34c) ) // bank 3
+ ROM_LOAD( "sound11", 0x3800000, 0x0400000, CRC(20dc76ba) SHA1(078397f2de54d4ca91035dce11419ac0d934fbfa) ) // bank 3
+ ROM_LOAD( "sound12", 0x3c00000, 0x0400000, CRC(11fff0bc) SHA1(2767fcc3a5d3200750b011c97a83073719a9325f) ) // bank 3
+ ROM_LOAD( "sound13", 0x4000000, 0x0400000, CRC(2367dd18) SHA1(b58f757ce4c832c5462637f4e08d7be511ca0c96) ) // bank 4
+ ROM_LOAD( "sound14", 0x4400000, 0x0400000, CRC(75ced8c0) SHA1(fda17464767be073a36c117f5212411b66197dd9) ) // bank 4
+ ROM_LOAD( "sound15", 0x4800000, 0x0400000, CRC(aeaca380) SHA1(1c389911aa766abec389b1c79a1542759ac58b9f) ) // bank 4
+ ROM_LOAD( "sound16", 0x4c00000, 0x0400000, CRC(21d50e32) SHA1(24eaceb7c0b868b6e8fc16b403dae2427e422bf6) ) // bank 5
+ ROM_LOAD( "sound17", 0x5000000, 0x0400000, CRC(de785a2a) SHA1(1f5ae46ac9476a31a431ce0f0cf124e1c8c930a6) ) // bank 5
+ ROM_LOAD( "sound18", 0x5400000, 0x0400000, CRC(18cabb1e) SHA1(c769820e2e84eff0e4ce956236656ae757e3299c) ) // bank 5
+ ROM_LOAD( "sound19", 0x5800000, 0x0400000, CRC(33c89e53) SHA1(7d216f5db6b30c9b05a9a77030498ff68ae6fbad) ) // bank 6
+ ROM_LOAD( "sound20", 0x5c00000, 0x0400000, CRC(89c1b088) SHA1(9b4118815959a5fb65b2a293015f592a46f4126f) ) // bank 6
+ ROM_LOAD( "sound21", 0x6000000, 0x0400000, CRC(13db74bd) SHA1(ab87438bbac97d46b1b8195b61dca1d72172a621) ) // bank 6
+
+ROM_END
+
+
+ROM_START( rockn3 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "prg1", 0x000001, 0x80000, CRC(abc6ab4a) SHA1(2f1983b95cd9e42d709edac5613b1f0b450df4ba) )
+ ROM_LOAD16_BYTE( "prg0", 0x000000, 0x80000, CRC(3ecba46e) SHA1(64ff5b7932a8d8dc01c649b9dcc1d55cf1e43387) )
+
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "spr1", 0x000002, 0x200000, CRC(468bf696) SHA1(d58e399ff876ab0f4ef52aaa85d86d72db307b6a) )
+ ROM_LOAD32_WORD( "spr0", 0x000000, 0x200000, CRC(8a61fc18) SHA1(4e895a2014e711d044ed5d8bff8a91766f14b307) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "back", 0x000000, 0x200000, CRC(e01bf471) SHA1(4485c71770bdb8800ded4afb37814c2d287b78be) )
+
+ ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "rot", 0x000000, 0x200000, CRC(4e146de5) SHA1(5971cbb91da5fde652786d82d0143197518bad9b) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "front", 0x000000, 0x080000, CRC(8100039e) SHA1(e07b1e2f3cbcb1c086edd628d20423ecd4f74860) )
+
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(e2f69042) SHA1(deb361a53ed6a9033e21c2f805f327cc3e9b11c6) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(b328b18f) SHA1(22edebcabd6c8ed65d8c9e501621991d404c430d) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(f46438e3) SHA1(718f54fc0e3689f5ab29bef2ec13eb2aa9b117fc) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(b979e887) SHA1(10852ceb1b9e24fb87cf9339bc9fb4ae066a1221) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(0bb2c212) SHA1(4f8ab3c96c3e1aa337a3fe871cffc04ec603f8c0) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(3116e437) SHA1(f1b06592a6f0eba92eb4511d3ca03a3bb51e8c9d) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(26b37ef6) SHA1(f7090f3ec81f0c651c53d460b476e63f52dd06dc) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(1dd3f4e3) SHA1(8474e00b962368164c717e5fe2e926852f3b4426) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(a1b03d67) SHA1(95f89a37e97d62706e15fd5571ff2e70dd98fee2) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(35107aac) SHA1(d56a66e15c46c33cf6c9c28edf48b730b681d21a) ) // bank 2
+ ROM_LOAD( "sound10", 0x3400000, 0x0400000, CRC(059ec592) SHA1(205210af558eb7e8e1399b2a506ef0285c5feda3) ) // bank 3
+ ROM_LOAD( "sound11", 0x3800000, 0x0400000, CRC(84d4badb) SHA1(fc20f97a008f000a49e7cadd559789516643704a) ) // bank 3
+ ROM_LOAD( "sound12", 0x3c00000, 0x0400000, CRC(4527a9b7) SHA1(a73ebece5c84bf14f8d25bbd869b7b43b1fcd042) ) // bank 3
+ ROM_LOAD( "sound13", 0x4000000, 0x0400000, CRC(bfa4b7ce) SHA1(4100f2deabb8994e8e3ff897a1db13693ab64c11) ) // bank 4
+ ROM_LOAD( "sound14", 0x4400000, 0x0400000, CRC(a2ccd2ce) SHA1(fc6325219f7b8e68c22a129f5ec4e900e326fb9d) ) // bank 4
+ ROM_LOAD( "sound15", 0x4800000, 0x0400000, CRC(95baf678) SHA1(f7b39a3379f16df0560a22d4f42165ebbe05cebe) ) // bank 4
+ ROM_LOAD( "sound16", 0x4c00000, 0x0400000, CRC(5883c84b) SHA1(54aec4e1e2f5edc198aebc4788caf5062f9a5b6c) ) // bank 5
+ ROM_LOAD( "sound17", 0x5000000, 0x0400000, CRC(f92098ce) SHA1(9b13cd37ad5d7baf36b20218c4bced956084ec45) ) // bank 5
+ ROM_LOAD( "sound18", 0x5400000, 0x0400000, CRC(dbb2c228) SHA1(f7cd24026236e2c616376c695b9e986cc221f36d) ) // bank 5
+ ROM_LOAD( "sound19", 0x5800000, 0x0400000, CRC(9efdae1c) SHA1(6158a1804fbaa9ce27ae7e12cfda5f49084b4998) ) // bank 6
+ ROM_LOAD( "sound20", 0x5c00000, 0x0400000, CRC(5f301b83) SHA1(e24e85c43a62871360545aa42dfa439045334b79) ) // bank 6
+
+ROM_END
+
+
+ROM_START( rockn4 )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "prg1", 0x000001, 0x80000, CRC(c666caea) SHA1(57018de40d71fe214a6b5cc33c8ad5e88622d010) )
+ ROM_LOAD16_BYTE( "prg0", 0x000000, 0x80000, CRC(cc94e557) SHA1(d38abed04239d9eecf1b1be7a9f765a1b7aa0d8d) )
+
+ ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "spr1", 0x000002, 0x200000, CRC(5eeae537) SHA1(6bb8c658a2985c3919f0590a0147eead995c01c9) )
+ ROM_LOAD32_WORD( "spr0", 0x000000, 0x200000, CRC(3fedddc9) SHA1(4bd8f402ecf8e6255326927e825179fa6d300e73) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "back", 0x000000, 0x200000, CRC(ead41e79) SHA1(9c24b1e52b6ed43d5b5a1caf48f2974b8fa61f4a) )
+
+ ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "rot", 0x000000, 0x200000, CRC(eb16fc67) SHA1(5be40f2c9a5693785268eafcfcf348f147533463) )
+
+ ROM_REGION( 0x100000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "front", 0x000000, 0x100000, CRC(37d50259) SHA1(fd02f98a981470c47889f0b2f813ce59373a4b42) )
+
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(918ea8eb) SHA1(0cd82859634635b6ce49db36fb91ed3365a101eb) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(c548e51e) SHA1(4fe1e35c9ed4366dce98b4f4c00f94e202ef15dc) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(ffda0253) SHA1(9b8ae98accc2f72a1cd881086f89e647e4904ad9) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(1f813af5) SHA1(a72d842e39b9fc955a2fc6721673b34b1b591e4a) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(035c4ff3) SHA1(9290c49244dc45ad5d6543775c5f2cc507e54e77) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(0f01f7b0) SHA1(e0c6daa1606dd5aaac59a7ae75d76e937e9c0151) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(31574b1c) SHA1(a08b50b4c4f2be32892b7534f2192101f8af6762) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(388e2c91) SHA1(493ef760858a82cbc38de59c4db3f273c0ddfdfb) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(6e7e3f23) SHA1(4b9b959f79254d0633f1c4324b7ee6a17e222308) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(39fa512f) SHA1(d07426bc74492496756b67b8ded1b507726720c7) ) // bank 2
+ROM_END
+
+
+ROM_START( rocknms )
+ ROM_REGION( 0x100000, REGION_CPU1, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "mast_prg1", 0x000001, 0x80000, CRC(c36674f8) SHA1(8aeb19fcd6f786c9d76a72abee4b607d29fb7d56) )
+ ROM_LOAD16_BYTE( "mast_prg0", 0x000000, 0x80000, CRC(69382065) SHA1(2d528c2954556d440e790db209a2e3563580296a) )
+
+ ROM_REGION( 0x100000, REGION_CPU2, 0 ) /* 68000 Code */
+ ROM_LOAD16_BYTE( "slav_prg1", 0x000001, 0x80000, CRC(769e2245) SHA1(5e6b5456fb213da887be4ef3739685360f6fdae5) )
+ ROM_LOAD16_BYTE( "slav_prg0", 0x000000, 0x80000, CRC(55b8df65) SHA1(7744e7a75904174843fc6e3d54324839c6cf104d) )
+
+ ROM_REGION( 0x0800000, REGION_GFX1, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "mast_spr1", 0x000002, 0x400000, CRC(520152dc) SHA1(619a55352c0dab914f6188d66272a24495b5d1d4) )
+ ROM_LOAD32_WORD( "mast_spr0", 0x000000, 0x400000, CRC(1caad02a) SHA1(00c3fc849d1f633874fee30f7d0caf0c62735c50) )
+
+ ROM_REGION( 0x200000, REGION_GFX2, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "mast_back", 0x000000, 0x200000, CRC(1ca30e3f) SHA1(763c9dd287c186b6ca8ecb88c3ce29d68fea9179) )
+
+ ROM_REGION( 0x200000, REGION_GFX3, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "mast_rot", 0x000000, 0x200000, CRC(1f29b622) SHA1(aab6aafb98fa732266675daa63dc4c0d2084bcbd) )
+
+ ROM_REGION( 0x080000, REGION_GFX4, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "mast_front", 0x000000, 0x080000, CRC(a4717579) SHA1(cf28c0f19713ebf9f8fd5d55d654c1cd2e8cd73d) )
+
+ ROM_REGION( 0x800000, REGION_GFX5, ROMREGION_DISPOSE ) /* 8x8x8 (Sprites) */
+ ROM_LOAD32_WORD( "slav_spr1", 0x000002, 0x400000, CRC(3f8124b0) SHA1(c9ab89f559551d2298d28e107b2d44d312e53216) )
+ ROM_LOAD32_WORD( "slav_spr0", 0x000000, 0x400000, CRC(48a7f5b1) SHA1(4724856bde3cf975efc3be407b60693a69a39365) )
+
+ ROM_REGION( 0x200000, REGION_GFX6, ROMREGION_DISPOSE ) /* 16x16x8 (Background) */
+ ROM_LOAD16_WORD( "slav_back", 0x000000, 0x200000, CRC(f0a28e32) SHA1(517b98dee6ec201bab02a3c81b0937ed462a626e) )
+
+ ROM_REGION( 0x200000, REGION_GFX7, ROMREGION_DISPOSE ) /* 16x16x8 (Rotation) */
+ ROM_LOAD( "slav_rot", 0x000000, 0x200000, CRC(0bab21f4) SHA1(afd3f32d7bb99b3f566b302fce11059ae8788715) )
+
+ ROM_REGION( 0x080000, REGION_GFX8, ROMREGION_DISPOSE ) /* 8x8x8 (Foreground) */
+ ROM_LOAD( "slav_front", 0x000000, 0x080000, CRC(b65734a7) SHA1(80190e260ed32cb3355f0604722b85eb659483d0) )
+
+ ROM_REGION( 0x7000000, REGION_SOUND1, 0 ) /* Samples */
+ ROM_LOAD( "sound00", 0x0000000, 0x0400000, CRC(8bafae71) SHA1(db74accd4bc1bfeb4a3341a0fd572b81287f1278) ) // COMMON AREA
+ ROM_FILL( 0x0400000, 0x0c00000, 0xff ) // BANK AREA
+ ROM_LOAD( "sound01", 0x1000000, 0x0400000, CRC(eec0589b) SHA1(f54c1c7e7741100a1398ebd45aef4755171d9965) ) // bank 0
+ ROM_LOAD( "sound02", 0x1400000, 0x0400000, CRC(564aa972) SHA1(b19e960fd79647e5bcca509982c9887decb92bc6) ) // bank 0
+ ROM_LOAD( "sound03", 0x1800000, 0x0400000, CRC(940302d0) SHA1(b28c2bb1a9b8cea0b6963ffa5d3ac26d90b0bffc) ) // bank 0
+ ROM_LOAD( "sound04", 0x1c00000, 0x0400000, CRC(766db7f8) SHA1(41cfcac2e8d4307f75c56d57431b841e6d64b23c) ) // bank 1
+ ROM_LOAD( "sound05", 0x2000000, 0x0400000, CRC(3a3002f9) SHA1(27b24b8a34a0b919e051e81a10e87aa300b11d8f) ) // bank 1
+ ROM_LOAD( "sound06", 0x2400000, 0x0400000, CRC(06b04df9) SHA1(4bfc7c05843b4533f238f5360230cb71d7a66d56) ) // bank 1
+ ROM_LOAD( "sound07", 0x2800000, 0x0400000, CRC(da74305e) SHA1(9dfb744f36ac8b3661006921dc482e941711f389) ) // bank 2
+ ROM_LOAD( "sound08", 0x2c00000, 0x0400000, CRC(b5a0aa48) SHA1(2deb2c1c97c259f5e79e9dc3cd8859548549a189) ) // bank 2
+ ROM_LOAD( "sound09", 0x3000000, 0x0400000, CRC(0fd4a088) SHA1(5c1ea8a14dee7ee885ce0c86fb463741599db44d) ) // bank 2
+ ROM_LOAD( "sound10", 0x3400000, 0x0400000, CRC(33c89e53) SHA1(7d216f5db6b30c9b05a9a77030498ff68ae6fbad) ) // bank 3
+ ROM_LOAD( "sound11", 0x3800000, 0x0400000, CRC(f9256a3f) SHA1(a3ec0845497d349c97222a1f986c252c8ca781e7) ) // bank 3
+ ROM_LOAD( "sound12", 0x3c00000, 0x0400000, CRC(b0a09f3e) SHA1(d2e37eb935d7ef7e887ff79a49bc11da11c31f3c) ) // bank 3
+ ROM_LOAD( "sound13", 0x4000000, 0x0400000, CRC(d5cee673) SHA1(85194c73c43b69bccbcc895f147d5251bb039c2a) ) // bank 4
+ ROM_LOAD( "sound14", 0x4400000, 0x0400000, CRC(b394aa8a) SHA1(68541d5d98e2d59d6a3096f0c10b74b6f5803722) ) // bank 4
+ ROM_LOAD( "sound15", 0x4800000, 0x0400000, CRC(6c791501) SHA1(8c67f070651493d6f7a2ef7b8a5f9e12c0181f67) ) // bank 4
+ ROM_LOAD( "sound16", 0x4c00000, 0x0400000, CRC(fe80159e) SHA1(b6a980d4f62dfeaa6f51a99518aa4d483fe338e5) ) // bank 5
+ ROM_LOAD( "sound17", 0x5000000, 0x0400000, CRC(142c1159) SHA1(dfabbe69119c84040d6368561e93514ce7bb91db) ) // bank 5
+ ROM_LOAD( "sound18", 0x5400000, 0x0400000, CRC(cc595d85) SHA1(5f725771d79e71d62b64bb18e2a51b839a6e4c7f) ) // bank 5
+ ROM_LOAD( "sound19", 0x5800000, 0x0400000, CRC(82b085a3) SHA1(5a5f2ed90d659bbad710c23b9df2a7dbb3c9acfe) ) // bank 6
+ ROM_LOAD( "sound20", 0x5c00000, 0x0400000, CRC(dd5e9680) SHA1(5a2826641ad75757ce4a583e0ea901d54d20ffca) ) // bank 6
+ROM_END
+
+/***************************************************************************
+
+
+ Game Drivers
+
+
+***************************************************************************/
+
+GAME( 1997, tetrisp2, 0, tetrisp2, tetrisp2, 0, ROT0, "Jaleco / The Tetris Company", "Tetris Plus 2 (World?)", GAME_SUPPORTS_SAVE )
+GAME( 1997, teplus2j, tetrisp2, tetrisp2, teplus2j, 0, ROT0, "Jaleco / The Tetris Company", "Tetris Plus 2 (Japan)", GAME_SUPPORTS_SAVE )
+
+GAME( 1999, rockn, 0, rockn, rockn, rockn, ROT270, "Jaleco", "Rock'n Tread (Japan)", GAME_SUPPORTS_SAVE)
+GAME( 1999, rockna, rockn, rockn, rockn, rockn1, ROT270, "Jaleco", "Rock'n Tread (Japan, alternate)", GAME_SUPPORTS_SAVE)
+GAME( 1999, rockn2, 0, rockn2, rockn, rockn2, ROT270, "Jaleco", "Rock'n Tread 2 (Japan)", GAME_SUPPORTS_SAVE)
+GAME( 1999, rocknms, 0, rocknms, rocknms, rocknms, ROT0, "Jaleco", "Rock'n MegaSession (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
+GAME( 1999, rockn3, 0, rockn2, rockn, rockn3, ROT270, "Jaleco", "Rock'n 3 (Japan)", GAME_SUPPORTS_SAVE)
+GAME( 2000, rockn4, 0, rockn2, rockn, rockn3, ROT270, "Jaleco (PCCWJ)", "Rock'n 4 (Japan, prototype)", GAME_SUPPORTS_SAVE)