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