Improvements to Jaleco's "Stepping Stage Special" [Luca Elia]

- fixed memory maps, rom loading, added inputs
- Hooked up sprites, hacked in the text layer
- Can be made to boot using the debugger
This commit is contained in:
Luca Elia 2012-04-14 17:25:24 +00:00
parent e16fe33028
commit a028a734b3
7 changed files with 546 additions and 389 deletions

1
.gitattributes vendored
View File

@ -3045,7 +3045,6 @@ src/mame/drivers/starshp1.c svneol=native#text/plain
src/mame/drivers/starwars.c svneol=native#text/plain
src/mame/drivers/statriv2.c svneol=native#text/plain
src/mame/drivers/stellafr.c svneol=native#text/plain
src/mame/drivers/stepstag.c svneol=native#text/plain
src/mame/drivers/stfight.c svneol=native#text/plain
src/mame/drivers/stlforce.c svneol=native#text/plain
src/mame/drivers/strnskil.c svneol=native#text/plain

View File

@ -1,367 +0,0 @@
/* Jaleco 'Stepping Stage'
*************************************************************************
Naibo added:
A PC computer(Harddisk not dumped yet) + Two 68000 based board set.
One 68000 drives 3 screens, another handles players input.
*************************************************************************
dump is incomplete, these are leftovers from an upgrade
music roms are missing at least
is it a 3 screen game (1 horizontal, 2 vertical) ?
TODO:
- clearly derived from Tetris Plus 2 HW
- NVRAM is unchecked
*/
#include "emu.h"
#include "cpu/m68000/m68000.h"
#include "rendlay.h"
#include "stepstag.lh"
#include "includes/tetrisp2.h"
#include "machine/nvram.h"
class stepstag_state : public tetrisp2_state
{
public:
stepstag_state(const machine_config &mconfig, device_type type, const char *tag)
: tetrisp2_state(mconfig, type, tag) { }
DECLARE_READ16_MEMBER(stepstag_ip_1_word_r);
DECLARE_READ16_MEMBER(unknown_read_0xc00000);
DECLARE_READ16_MEMBER(unknown_read_0xd00000);
DECLARE_READ16_MEMBER(unknown_read_0xffff00);
};
READ16_MEMBER(stepstag_state::stepstag_ip_1_word_r)
{
return ( input_port_read(machine(), "SYSTEM") & 0xfcff ) |
( machine().rand() & ~0xfcff ) |
( 1 << (8 + (machine().rand()&1)) );
}
READ16_MEMBER(stepstag_state::unknown_read_0xc00000)
{
return machine().rand();
}
READ16_MEMBER(stepstag_state::unknown_read_0xd00000)
{
return machine().rand();
}
READ16_MEMBER(stepstag_state::unknown_read_0xffff00)
{
return machine().rand();
}
static ADDRESS_MAP_START( stepstag_map, AS_PROGRAM, 16, stepstag_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM AM_SHARE("spriteram") // Object RAM
AM_RANGE(0x104000, 0x107fff) AM_RAM // Spare Object RAM
AM_RANGE(0x108000, 0x10ffff) AM_RAM // Work RAM
AM_RANGE(0x200000, 0x23ffff) AM_READWRITE8(tetrisp2_priority_r, rockn_priority_w, 0x00ff) // Priority
AM_RANGE(0x300000, 0x31ffff) AM_RAM_WRITE(tetrisp2_palette_w) AM_SHARE("paletteram") // Palette
AM_RANGE(0x400000, 0x403fff) AM_RAM_WRITE(tetrisp2_vram_fg_w) AM_BASE(m_vram_fg) // Foreground
AM_RANGE(0x404000, 0x407fff) AM_RAM_WRITE(tetrisp2_vram_bg_w) AM_BASE(m_vram_bg) // Background
AM_RANGE(0x408000, 0x409fff) AM_RAM // ???
AM_RANGE(0x500000, 0x50ffff) AM_RAM // Line
AM_RANGE(0x600000, 0x60ffff) AM_RAM_WRITE(tetrisp2_vram_rot_w) AM_BASE(m_vram_rot) // Rotation
AM_RANGE(0x900000, 0x903fff) AM_READWRITE(tetrisp2_nvram_r, tetrisp2_nvram_w) AM_BASE(m_nvram) AM_SHARE("nvram") // NVRAM
AM_RANGE(0x904000, 0x907fff) AM_READWRITE(tetrisp2_nvram_r, tetrisp2_nvram_w) // NVRAM (mirror)
// AM_RANGE(0xa00000, 0xa7ffff) AM_READ(unknown_read_0xc00000 ) // presumably comms with slave CPU
AM_RANGE(0xb00000, 0xb00001) AM_WRITENOP // Coin Counter plus other things
AM_RANGE(0xb20000, 0xb20001) AM_WRITENOP // protection related?
AM_RANGE(0xb40000, 0xb4000b) AM_WRITEONLY AM_BASE(m_scroll_fg) // Foreground Scrolling
AM_RANGE(0xb40010, 0xb4001b) AM_WRITEONLY AM_BASE(m_scroll_bg) // Background Scrolling
AM_RANGE(0xb4003e, 0xb4003f) AM_WRITENOP // scr_size
AM_RANGE(0xb60000, 0xb6002f) AM_WRITEONLY AM_BASE(m_rotregs) // Rotation Registers
AM_RANGE(0xba0000, 0xba001f) AM_WRITE(tetrisp2_systemregs_w) // system param
AM_RANGE(0xba001e, 0xba001f) AM_WRITENOP // Lev 2 irq ack
AM_RANGE(0xbe0002, 0xbe0003) AM_READ_PORT("PLAYERS") // Inputs
AM_RANGE(0xbe0004, 0xbe0005) AM_READ(stepstag_ip_1_word_r) // Inputs & protection
AM_RANGE(0xbe0008, 0xbe0009) AM_READ_PORT("DSW") // Inputs
AM_RANGE(0xbe000a, 0xbe000b) AM_READNOP //watchdog
ADDRESS_MAP_END
static ADDRESS_MAP_START( stepstag_sub_map, AS_PROGRAM, 16, stepstag_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x200000, 0x20ffff) AM_RAM
AM_RANGE(0x300000, 0x33ffff) AM_RAM
AM_RANGE(0x400000, 0x43ffff) AM_RAM
AM_RANGE(0x500000, 0x53ffff) AM_RAM
AM_RANGE(0x700000, 0x700001) AM_WRITENOP //??
AM_RANGE(0x700002, 0x700003) AM_WRITENOP //??
AM_RANGE(0x700004, 0x700005) AM_WRITENOP //??
AM_RANGE(0x700006, 0x700007) AM_WRITENOP //??
AM_RANGE(0x800000, 0x87ffff) AM_RAM
AM_RANGE(0x880000, 0x880001) AM_WRITENOP //??
AM_RANGE(0x900000, 0x97ffff) AM_RAM
AM_RANGE(0x980000, 0x980001) AM_WRITENOP //??
AM_RANGE(0xa00000, 0xa7ffff) AM_RAM
AM_RANGE(0xa80000, 0xa80001) AM_WRITENOP //??
AM_RANGE(0xc00000, 0xc00001) AM_READ(unknown_read_0xc00000) AM_WRITENOP //??
AM_RANGE(0xd00000, 0xd00001) AM_READ(unknown_read_0xd00000)
AM_RANGE(0xf00000, 0xf00001) AM_WRITENOP //??
AM_RANGE(0xffff00, 0xffff01) AM_READ(unknown_read_0xffff00)
ADDRESS_MAP_END
/* TODO: inputs are copied from Tetris Plus 2, they needs to be changed accordingly */
static INPUT_PORTS_START( stepstag )
PORT_START("PLAYERS") /*$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("SYSTEM") /*$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 )
PORT_START("DSW") //$be0008.w
PORT_DIPNAME( 0x0007, 0x0007, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:1,2,3")
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_DIPLOCATION("SW1:4,5,6")
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_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_SERVICE_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
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_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0000, "1" )
PORT_DIPSETTING( 0x0400, "3" )
PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0800, DEF_STR( Japanese ) )
PORT_DIPSETTING( 0x0000, DEF_STR( English ) )
PORT_DIPNAME( 0x1000, 0x1000, "F.B.I Logo" ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x2000, 0x2000, "Voice" ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x2000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x4000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
/* 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
};
/* sprites are contained in 256x256 "tiles" */
static GFXLAYOUT_RAW( spritelayout, 256, 256, 256*8, 256*256*8 )
static GFXDECODE_START( stepstag )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0x0000, 0x10 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx2", 0, layout_8x8x8, 0x1000, 0x10 ) // [1] Background
GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x8, 0x2000, 0x10 ) // [2] Rotation
GFXDECODE_ENTRY( "gfx4", 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground
GFXDECODE_ENTRY( "gfx5", 0, layout_8x8x8, 0x0000, 0x10 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx6", 0, layout_8x8x8, 0x1000, 0x10 ) // [1] Background
GFXDECODE_ENTRY( "gfx7", 0, layout_8x8x8, 0x2000, 0x10 ) // [2] Rotation
GFXDECODE_ENTRY( "gfx8", 0, layout_8x8x8, 0x6000, 0x10 ) // [3] Foreground
GFXDECODE_END
static SCREEN_UPDATE_IND16( stepstag )
{
return 0;
}
static MACHINE_CONFIG_START( stepstag, stepstag_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M68000, 16000000 ) //??
MCFG_CPU_PROGRAM_MAP(stepstag_map)
MCFG_CPU_VBLANK_INT("screen", irq2_line_hold)
MCFG_CPU_ADD("sub", M68000, 16000000 ) //??
MCFG_CPU_PROGRAM_MAP(stepstag_sub_map)
MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) // 4 & 6 valid
MCFG_NVRAM_ADD_0FILL("nvram")
/* video hardware */
MCFG_SCREEN_ADD("lscreen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_STATIC(stepstag)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(0x140, 0xe0)
MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xe0-1)
MCFG_SCREEN_UPDATE_STATIC(tetrisp2)
MCFG_SCREEN_ADD("rscreen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_STATIC(stepstag)
MCFG_PALETTE_LENGTH(0x8000)
MCFG_VIDEO_START(tetrisp2)
MCFG_GFXDECODE(stepstag)
MCFG_DEFAULT_LAYOUT(layout_stepstag)
MACHINE_CONFIG_END
ROM_START( stepstag )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68k */
ROM_LOAD16_BYTE( "vj98344ver11.1", 0x00001, 0x80000, CRC(aedcb225) SHA1(f167c390e79ffbf7c019c326384ae656ae8b7d13) )
ROM_LOAD16_BYTE( "vj98344ver11.4", 0x00000, 0x80000, CRC(391ca913) SHA1(2cc329aa6419f8a0d7e0fb8a9f4c2b8ca25197b3) )
ROM_REGION( 0x100000, "sub", 0 ) /* 68k */
ROM_LOAD16_BYTE( "vj98348ver11.11", 0x00000, 0x80000, CRC(29b7f848) SHA1(c4d89e5c9be622b2d9038c359a5f65ce0dd461b0) )
ROM_LOAD16_BYTE( "vj98348ver11.14", 0x00001, 0x80000, CRC(e3314c6c) SHA1(61b0e9f9d0126d9f475304866a03cfa21701d9aa) )
ROM_REGION( 0x400000, "gfx1", 0 ) /* sprites, TRUSTED */
ROM_LOAD( "mr99001-06", 0x00000, 0x400000, CRC(cfa27c93) SHA1(a0837877736e8e898f3acc64bc87ee0cc4d9f243) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* */
ROM_LOAD( "mr99001-03", 0x00000, 0x400000, CRC(40fee0df) SHA1(94c3567e82f8039b3169bf4dcb1fcd9e39c6eb27) )
ROM_REGION( 0x400000, "gfx3", 0 ) /* */
ROM_LOAD( "mr99001-04", 0x00000, 0x400000, CRC(d6837981) SHA1(56709d73304f0b186c70844ae96f73400b541609) )
ROM_REGION( 0x400000, "gfx4", 0 ) /* FG tiles, TRUSTED */
ROM_LOAD( "mr99001-05", 0x00000, 0x400000, CRC(3958473b) SHA1(12279a587263290945744b22aafb80460eea77f7) )
ROM_REGION( 0x400000, "gfx5", 0 ) /* vertical screen rom */
ROM_LOAD( "mr99001-02", 0x00000, 0x400000, CRC(12c65d86) SHA1(7fe5853fa3ba086f8da15702b126eb13c6ea30a9) )
ROM_REGION( 0x800000, "gfx6", 0 ) /* vertical screen roms */
ROM_LOAD( "mr99001-01", 0x00000, 0x400000, CRC(aa92cebf) SHA1(2ccc0d2ef9bc92c27f0a625819154bbcf9cfde0c) )
ROM_LOAD( "s.s.s._vj-98348_3_pr99021-01", 0x400000, 0x400000, CRC(e0fbc6f1) SHA1(7ca4507702f3f81bb9de3f9b5d270d379e439633) )
ROM_REGION( 0x400000, "gfx7", 0 ) /* */
ROM_LOAD( "s.s.s._vj-98348_19_pr99021-02", 0x00000, 0x400000, CRC(2d98da1a) SHA1(b09375fa1b4b2e0794632d6e237459009f40310d) )
ROM_REGION( 0x400000, "gfx8", 0 ) /* */
ROM_LOAD( "s.s.s._vj-98348_26_pr99021-01", 0x000000, 0x400000, CRC(fefb3777) SHA1(df624e105ab1dea52317e318ad29caa02b900788) )
DISK_REGION( "disks" )
DISK_IMAGE("stepstag", 0, NO_DUMP)
ROM_END
ROM_START( step3 )
ROM_REGION( 0x100000, "maincpu", 0 ) /* 68k */
ROM_LOAD16_BYTE( "vj98344ver11.1", 0x00001, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "vj98344ver11.4", 0x00000, 0x80000, NO_DUMP )
// c'est la programme de stepstag (avoir besoin de modifications, numero de chansons par example)
ROM_REGION( 0x100000, "sub", 0 ) /* 68k */
ROM_LOAD16_BYTE( "vj98348_step3_11_v1.1", 0x00000, 0x80000, CRC(9c36aef5) SHA1(bbac48c2c7949a6f8a6ec83515e94a343c88d1b6) )
ROM_LOAD16_BYTE( "vj98348_step3_14_v1.1", 0x00001, 0x80000, CRC(b86be557) SHA1(49dbd6ef1c50adcf3386d5423da8ae7685649c46) )
ROM_REGION( 0x1000000, "gfx1", 0 ) /* */
ROM_LOAD( "mr9930-01.ic2", 0x000000, 0x400000, CRC(9e3e054e) SHA1(06a4fa76cb83dbe9d565d5ccd0a5ecc5067887c9) )
ROM_REGION( 0x1000000, "gfx2", 0 ) /* */
ROM_LOAD( "mr9930-02.ic3", 0x000000, 0x400000, CRC(b23c29f4) SHA1(a7b10a3a9af43db319baf8633bb3728120960923) )
ROM_REGION( 0x1000000, "gfx3", 0 ) /* */
ROM_LOAD( "mr9930-03.ic4", 0x000000, 0x400000, CRC(9a5d070f) SHA1(b4668b4f299033140a2c56499cc2712ba111cb57) )
ROM_REGION( 0x1000000, "gfx4", 0 ) /* screen centre */
ROM_LOAD( "mr99030-04.ic17", 0x000000, 0x400000, CRC(3eac3591) SHA1(3b294e94af23fd92fdf51d2c9c43f60d2ebd1688) )
ROM_REGION( 0x1000000, "gfx5", 0 ) /* */
ROM_LOAD( "mr99030-05.ic18", 0x000000, 0x400000, CRC(dea7b8d6) SHA1(d7d98675eb3998a8057929f90aa340c1e5f6a617) )
ROM_REGION( 0x1000000, "gfx6", 0 ) /* */
ROM_LOAD( "mr99030-06.ic19", 0x000000, 0x400000, CRC(71489d79) SHA1(0398a354c2588e3974cb76a331e46165db6af06d) )
ROM_REGION( 0x1000000, "gfx7", 0 ) /* */
ROM_LOAD( "mr9930-01.ic30", 0x000000, 0x400000, CRC(9e3e054e) SHA1(06a4fa76cb83dbe9d565d5ccd0a5ecc5067887c9) )
ROM_LOAD( "mr9930-02.ic29", 0x400000, 0x400000, CRC(b23c29f4) SHA1(a7b10a3a9af43db319baf8633bb3728120960923) )
ROM_LOAD( "mr9930-03.ic28", 0x800000, 0x400000, CRC(9a5d070f) SHA1(b4668b4f299033140a2c56499cc2712ba111cb57) )
ROM_REGION( 0x1000000, "gfx8", 0 ) /* */
ROM_LOAD( "vj98348_step3_4_v1.1", 0x000000, 0x400000, CRC(dec612df) SHA1(acb86bb90c1cc61c7db3e022c69a5ff0611ffbae) )
ROM_LOAD( "vj98348_step3_18_v1.1", 0x400000, 0x400000, CRC(bc92f0a0) SHA1(49c08de7a898a27972d4209709ddf447c5dca36a) )
ROM_LOAD( "vj98348_step3_25_v1.1", 0x800000, 0x400000, CRC(dec612df) SHA1(acb86bb90c1cc61c7db3e022c69a5ff0611ffbae) )
DISK_REGION( "disks" )
DISK_IMAGE("step3", 0, NO_DUMP)
ROM_END
//GAME( 1999, stepstag, 0, stepstag, stepstag, 0, ROT0, "Jaleco", "Stepping Stage", GAME_NO_SOUND| GAME_NOT_WORKING) // Original Game
GAME( 1999, stepstag, 0, stepstag, stepstag, 0, ROT0, "Jaleco", "Stepping Stage Special", GAME_NO_SOUND| GAME_NOT_WORKING)
//GAME( 1999, stepstag, 0, stepstag, stepstag, 0, ROT0, "Jaleco", "Stepping Stage 2 Supreme", GAME_NO_SOUND| GAME_NOT_WORKING)
GAME( 1999, step3, 0, stepstag, stepstag, 0, ROT0, "Jaleco", "Stepping 3 Superior", GAME_NO_SOUND| GAME_NOT_WORKING)

View File

@ -31,6 +31,19 @@ Notes:
- The Japan set of Tetris Plus 2 doesn't seem to have (or use) NVRAM. I can't
enter a test mode or use the service coin either !?
***************************************************************************/
/***************************************************************************
Jaleco's "Stepping Stage" Series
A PC computer (Harddisk not dumped yet) + Two 68000 based board set.
One 68000 drives 3 screens, another handles players input.
stepstag:
- 108070.w = 3 to pass boot tests
- 108688.w = 1 (after ram test) to enable all items in test mode
***************************************************************************/
#include "emu.h"
@ -38,6 +51,7 @@ Notes:
#include "sound/okim6295.h"
#include "sound/ymz280b.h"
#include "rocknms.lh"
#include "stepstag.lh"
#include "includes/tetrisp2.h"
#include "machine/nvram.h"
@ -517,6 +531,158 @@ static ADDRESS_MAP_START( rocknms_sub_map, AS_PROGRAM, 16, tetrisp2_state )
ADDRESS_MAP_END
/***************************************************************************
Stepping Stage
***************************************************************************/
READ16_MEMBER(stepstag_state::stepstag_coins_r)
{
// bits 8 & 9?
return ( input_port_read(machine(), "COINS") & 0xfcff ) |
( machine().rand() & ~0xfcff ) |
( 1 << (8 + (machine().rand()&1)) );
}
READ16_MEMBER(stepstag_state::unknown_read_0xc00000)
{
return machine().rand();
}
READ16_MEMBER(stepstag_state::unknown_read_0xffff00)
{
return machine().rand();
}
READ16_MEMBER(stepstag_state::unk_a42000_r)
{
return 0x2000;
}
WRITE16_MEMBER(stepstag_state::stepstag_soundlatch_word_w)
{
stepstag_state *state = machine().driver_data<stepstag_state>();
state->soundlatch_word_w(space, offset, data, mem_mask);
device_set_input_line(machine().device("sub"), M68K_IRQ_6, HOLD_LINE);
machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(100));
}
WRITE16_MEMBER(stepstag_state::stepstag_leds_w)
{
// data = COMBINE_DATA()
if (ACCESSING_BITS_0_7)
{
set_led_status(machine(), 0, data & 0x0001); // P2 Front-Left
set_led_status(machine(), 1, data & 0x0002); // P2 Front-Right
set_led_status(machine(), 2, data & 0x0004); // P2 Left
set_led_status(machine(), 3, data & 0x0008); // P2 Right
set_led_status(machine(), 4, data & 0x0010); // P2 Back-Left
set_led_status(machine(), 5, data & 0x0020); // P2 Back-Right
}
if (ACCESSING_BITS_8_15)
{
set_led_status(machine(), 6, data & 0x0100); // P1 Front-Left
set_led_status(machine(), 7, data & 0x0200); // P1 Front-Right
set_led_status(machine(), 8, data & 0x0400); // P1 Left
set_led_status(machine(), 9, data & 0x0800); // P1 Right
set_led_status(machine(), 10, data & 0x1000); // P1 Back-Left
set_led_status(machine(), 11, data & 0x2000); // P1 Back-Right
}
// popmessage("FEET %02x",data);
}
// Main CPU
static ADDRESS_MAP_START( stepstag_map, AS_PROGRAM, 16, stepstag_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM // Object RAM
AM_RANGE(0x108000, 0x10ffff) AM_RAM // Work RAM
AM_RANGE(0x200000, 0x23ffff) AM_READWRITE8(tetrisp2_priority_r, rockn_priority_w, 0x00ff) // Priority
AM_RANGE(0x300000, 0x31ffff) AM_RAM // Palette
AM_RANGE(0x400000, 0x403fff) AM_RAM_WRITE(tetrisp2_vram_fg_w) AM_BASE( m_vram_fg ) // Foreground
AM_RANGE(0x404000, 0x407fff) AM_RAM_WRITE(tetrisp2_vram_bg_w) AM_BASE( m_vram_bg ) // Background
// AM_RANGE(0x408000, 0x409fff) AM_RAM // ???
AM_RANGE(0x500000, 0x50ffff) AM_RAM // Line
AM_RANGE(0x600000, 0x60ffff) AM_RAM_WRITE(tetrisp2_vram_rot_w) AM_BASE( m_vram_rot ) // Rotation
AM_RANGE(0x900000, 0x903fff) AM_READWRITE(tetrisp2_nvram_r, tetrisp2_nvram_w) AM_BASE( m_nvram) AM_SHARE("nvram") // NVRAM
AM_RANGE(0x904000, 0x907fff) AM_READWRITE(tetrisp2_nvram_r, tetrisp2_nvram_w) // NVRAM (mirror)
AM_RANGE(0xa10000, 0xa10001) AM_READ_PORT("FEET") AM_WRITE(stepstag_leds_w) // I/O
// AM_RANGE(0xa30000, 0xa30001) AM_NOP // PC?
AM_RANGE(0xa42000, 0xa42001) AM_READ( unk_a42000_r ) // visual ready flag + ???
AM_RANGE(0xa44000, 0xa44001) AM_READNOP // watchdog
// AM_RANGE(0xa48000, 0xa48001) AM_WRITENOP // PC?
// AM_RANGE(0xa4c000, 0xa4c001) AM_WRITENOP // PC?
AM_RANGE(0xa50000, 0xa50001) AM_READWRITE( soundlatch_word_r, stepstag_soundlatch_word_w )
AM_RANGE(0xa60000, 0xa60003) AM_DEVWRITE8_LEGACY("ymz", ymz280b_w, 0x00ff) // Sound
AM_RANGE(0xb00000, 0xb00001) AM_WRITENOP // Coin Counter plus other things
AM_RANGE(0xb20000, 0xb20001) AM_WRITENOP // protection related?
AM_RANGE(0xb40000, 0xb4000b) AM_WRITEONLY AM_BASE( m_scroll_fg ) // Foreground Scrolling
AM_RANGE(0xb40010, 0xb4001b) AM_WRITEONLY AM_BASE( m_scroll_bg ) // Background Scrolling
AM_RANGE(0xb4003e, 0xb4003f) AM_WRITENOP // scr_size
AM_RANGE(0xb60000, 0xb6002f) AM_WRITEONLY AM_BASE( m_rotregs ) // Rotation Registers
AM_RANGE(0xba0000, 0xba001f) AM_WRITE(rockn_systemregs_w) // System param
AM_RANGE(0xba001e, 0xba001f) AM_WRITENOP // Lev 2 irq ack
AM_RANGE(0xbe0000, 0xbe0001) AM_READNOP // INT-level1 dummy read
AM_RANGE(0xbe0002, 0xbe0003) AM_READ_PORT("BUTTONS") // Inputs
AM_RANGE(0xbe0004, 0xbe0005) AM_READ(stepstag_coins_r) // Inputs & protection
AM_RANGE(0xbe0008, 0xbe0009) AM_READ_PORT("DSW") // Inputs
AM_RANGE(0xbe000a, 0xbe000b) AM_READNOP // watchdog
ADDRESS_MAP_END
// Sub CPU (sprites)
static ADDRESS_MAP_START( stepstag_sub_map, AS_PROGRAM, 16, stepstag_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x200000, 0x20ffff) AM_RAM
// scrambled palettes?
AM_RANGE(0x300000, 0x33ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram")*/
AM_RANGE(0x400000, 0x43ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram2")*/
AM_RANGE(0x500000, 0x53ffff) AM_RAM/*_WRITE(stepstag_palette_w) AM_SHARE("paletteram3")*/
// rgb brightness?
AM_RANGE(0x700000, 0x700001) AM_WRITENOP // 0-f
AM_RANGE(0x700002, 0x700003) AM_WRITENOP // 0-f
AM_RANGE(0x700004, 0x700005) AM_WRITENOP // 0-f
AM_RANGE(0x700006, 0x700007) AM_WRITENOP // 0-3f (high bits?)
// left screen sprites
AM_RANGE(0x800000, 0x803fff) AM_RAM AM_SHARE("spriteram") // Object RAM
AM_RANGE(0x800000, 0x87ffff) AM_RAM
AM_RANGE(0x880000, 0x880001) AM_WRITENOP // cleared after writing this sprite list
// AM_RANGE(0x8c0000, 0x8c0001) AM_WRITENOP // cleared at boot
// middle screen sprites
AM_RANGE(0x900000, 0x903fff) AM_RAM AM_SHARE("spriteram2") // Object RAM
AM_RANGE(0x900000, 0x97ffff) AM_RAM
AM_RANGE(0x980000, 0x980001) AM_WRITENOP // cleared after writing this sprite list
// AM_RANGE(0x9c0000, 0x9c0001) AM_WRITENOP // cleared at boot
// right screen sprites
AM_RANGE(0xa00000, 0xa03fff) AM_RAM AM_SHARE("spriteram3") // Object RAM
AM_RANGE(0xa00000, 0xa7ffff) AM_RAM
AM_RANGE(0xa80000, 0xa80001) AM_WRITENOP // cleared after writing this sprite list
// AM_RANGE(0xac0000, 0xac0001) AM_WRITENOP // cleared at boot
AM_RANGE(0xb00000, 0xb00001) AM_READWRITE( soundlatch_word_r, soundlatch_word_w )
AM_RANGE(0xc00000, 0xc00001) AM_READ(unknown_read_0xc00000) AM_WRITENOP //??
AM_RANGE(0xd00000, 0xd00001) AM_READNOP // watchdog
AM_RANGE(0xf00000, 0xf00001) AM_WRITENOP //??
AM_RANGE(0xffff00, 0xffff01) AM_READ(unknown_read_0xffff00)
ADDRESS_MAP_END
/***************************************************************************
@ -944,6 +1110,73 @@ static INPUT_PORTS_START( rocknms )
INPUT_PORTS_END
/***************************************************************************
Stepping Stage
***************************************************************************/
static INPUT_PORTS_START( stepstag )
PORT_START("BUTTONS") // $be0002.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) // P2 start (middle)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) // P2 start (left)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) // P2 start (right)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // P1 start (middle)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // P1 start (left)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) // P1 start (right)
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("COINS") // $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_UNKNOWN )
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_SERVICE( 0x0010, IP_ACTIVE_LOW ) // service mode
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_SERVICE1 ) // service coin
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_COIN1 ) // coin
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
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 )
PORT_START("FEET") // $a10000.w
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Top-Left" ) PORT_CODE(KEYCODE_I)
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Top-Right") PORT_CODE(KEYCODE_O)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Mid-Left" ) PORT_CODE(KEYCODE_J)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Mid-Right") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Btm-Left" ) PORT_CODE(KEYCODE_N)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P2 Btm-Right") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Top-Left" ) PORT_CODE(KEYCODE_E)
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Top-Right") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Mid-Left" ) PORT_CODE(KEYCODE_D)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Mid-Right") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Btm-Left" ) PORT_CODE(KEYCODE_C)
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Btm-Right") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW") // $be0008.w
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE2 ) // ?
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_SERVICE3 ) // ?
PORT_BIT( 0x7c00, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE4 ) // ?
INPUT_PORTS_END
/***************************************************************************
@ -1001,6 +1234,11 @@ static GFXDECODE_START( rocknms )
GFXDECODE_ENTRY( "gfx8", 0, layout_8x8x8, 0xe000, 0x10 ) // [3] Foreground
GFXDECODE_END
static GFXDECODE_START( stepstag )
GFXDECODE_ENTRY( "sprites_horiz", 0, spritelayout, 0x2400, 0x10 ) // [0] Sprites (middle screen, horizontal)
GFXDECODE_ENTRY( "sprites_vert", 0, spritelayout, 0x6000, 0x10 ) // [1] Sprites (left and right screens, vertical)
GFXDECODE_ENTRY( "foreground", 0, layout_8x8x8, 0x6000, 0x10 ) // [2] Foreground (needs RAM->tile remapping though)
GFXDECODE_END
/***************************************************************************
@ -1084,6 +1322,13 @@ static DRIVER_INIT( rockn3 )
state->m_rockn_protectdata = 4;
}
static DRIVER_INIT( stepstag )
{
tetrisp2_state *state = machine.driver_data<tetrisp2_state>();
init_rockn_timer(machine); // used
state->m_rockn_protectdata = 1; // unused?
}
static MACHINE_CONFIG_START( tetrisp2, tetrisp2_state )
@ -1253,6 +1498,55 @@ static MACHINE_CONFIG_START( rocknms, tetrisp2_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( stepstag, stepstag_state )
MCFG_CPU_ADD("maincpu", M68000, 16000000 ) //??
MCFG_CPU_PROGRAM_MAP(stepstag_map)
MCFG_CPU_VBLANK_INT("screen", irq2_line_hold) // lev 4 triggered by system timer
MCFG_CPU_ADD("sub", M68000, 16000000 ) //??
MCFG_CPU_PROGRAM_MAP(stepstag_sub_map)
MCFG_CPU_VBLANK_INT("screen", irq4_line_hold) // lev 6 triggered by main CPU
MCFG_NVRAM_ADD_0FILL("nvram")
// video hardware
MCFG_SCREEN_ADD("lscreen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(0x160, 0x100)
MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
MCFG_SCREEN_UPDATE_STATIC(stepstag_left)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(0x160, 0x100)
MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
MCFG_SCREEN_UPDATE_STATIC(stepstag_mid)
MCFG_SCREEN_ADD("rscreen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(0x160, 0x100)
MCFG_SCREEN_VISIBLE_AREA(0, 0x160-1, 0, 0xf0-1)
MCFG_SCREEN_UPDATE_STATIC(stepstag_right)
MCFG_PALETTE_LENGTH(0x8000) // 0x8000 * 3 needed I guess, but it hits an assert
MCFG_VIDEO_START( stepstag )
MCFG_GFXDECODE(stepstag)
MCFG_DEFAULT_LAYOUT(layout_stepstag)
// sound hardware
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_SOUND_ADD("ymz", YMZ280B, 16934400)
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_CONFIG_END
/***************************************************************************
@ -1818,6 +2112,96 @@ ROM_START( rocknms )
ROM_LOAD( "sound20", 0x5c00000, 0x0400000, CRC(dd5e9680) SHA1(5a2826641ad75757ce4a583e0ea901d54d20ffca) ) // bank 6
ROM_END
/***************************************************************************
Stepping Stage Special
dump is incomplete, these are leftovers from an upgrade
music roms are missing at least
***************************************************************************/
ROM_START( stepstag )
ROM_REGION( 0x100000, "maincpu", 0 ) // 68000
ROM_LOAD16_BYTE( "vj98344ver11.4", 0x00000, 0x80000, CRC(391ca913) SHA1(2cc329aa6419f8a0d7e0fb8a9f4c2b8ca25197b3) )
ROM_LOAD16_BYTE( "vj98344ver11.1", 0x00001, 0x80000, CRC(aedcb225) SHA1(f167c390e79ffbf7c019c326384ae656ae8b7d13) )
ROM_REGION( 0x100000, "sub", 0 ) // 68000
ROM_LOAD16_BYTE( "vj98348ver11.11", 0x00000, 0x80000, CRC(29b7f848) SHA1(c4d89e5c9be622b2d9038c359a5f65ce0dd461b0) )
ROM_LOAD16_BYTE( "vj98348ver11.14", 0x00001, 0x80000, CRC(e3314c6c) SHA1(61b0e9f9d0126d9f475304866a03cfa21701d9aa) )
ROM_REGION( 0x2000000, "sprites_horiz", 0 ) // middle screen sprites (horizontal)
ROM_LOAD( "mr99001-03", 0x0000000, 0x400000, CRC(40fee0df) SHA1(94c3567e82f8039b3169bf4dcb1fcd9e39c6eb27) ) // HORIZONTAL TRUSTED
ROM_LOAD( "mr99001-04", 0x0400000, 0x400000, CRC(d6837981) SHA1(56709d73304f0b186c70844ae96f73400b541609) ) // HORIZONTAL TRUSTED
ROM_LOAD( "mr99001-05", 0x0800000, 0x400000, CRC(3958473b) SHA1(12279a587263290945744b22aafb80460eea77f7) ) // HORIZONTAL TRUSTED
ROM_LOAD( "mr99001-06", 0x0c00000, 0x400000, CRC(cfa27c93) SHA1(a0837877736e8e898f3acc64bc87ee0cc4d9f243) ) // HORIZONTAL
ROM_LOAD( "s.s.s._vj-98348_19_pr99021-02", 0x1000000, 0x400000, CRC(2d98da1a) SHA1(b09375fa1b4b2e0794632d6e237459009f40310d) ) // HORIZONTAL TRUSTED
ROM_FILL( 0x1400000, 0x400000, 0x03 ) // debug
ROM_FILL( 0x1800000, 0x400000, 0x04 ) // debug
ROM_FILL( 0x1c00000, 0x400000, 0x05 ) // debug
ROM_REGION( 0x0c00000, "sprites_vert", 0 ) // left and right screens sprites (vertical)
ROM_LOAD( "mr99001-01", 0x000000, 0x400000, CRC(aa92cebf) SHA1(2ccc0d2ef9bc92c27f0a625819154bbcf9cfde0c) ) // VERTICAL
ROM_LOAD( "mr99001-02", 0x400000, 0x400000, CRC(12c65d86) SHA1(7fe5853fa3ba086f8da15702b126eb13c6ea30a9) ) // VERTICAL
// rom _26_ seems a bad dump of rom _3_, overwrite it:
ROM_LOAD( "s.s.s._vj-98348_26_pr99021-01", 0x800000, 0x400000, BAD_DUMP CRC(fefb3777) SHA1(df624e105ab1dea52317e318ad29caa02b900788) ) // VERTICAL
ROM_LOAD( "s.s.s._vj-98348_3_pr99021-01", 0x800000, 0x400000, CRC(e0fbc6f1) SHA1(7ca4507702f3f81bb9de3f9b5d270d379e439633) ) // VERTICAL
ROM_REGION( 0x400000, "foreground", 0 ) // foreground tiles
ROM_LOAD( "mr99001-05", 0x000000, 0x400000, CRC(3958473b) SHA1(12279a587263290945744b22aafb80460eea77f7) ) // HORIZONTAL Temporary hack
ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE ) // Samples
ROM_LOAD( "stepstag-sound", 0x000000, 0x400000, NO_DUMP )
DISK_REGION( "disks" )
DISK_IMAGE("stepstag", 0, NO_DUMP)
ROM_END
/***************************************************************************
Stepping 3 Superior
dump is incomplete, these are leftovers from an upgrade
music roms are missing at least
***************************************************************************/
ROM_START( step3 )
ROM_REGION( 0x100000, "maincpu", ROMREGION_ERASE00 ) // 68000
ROM_LOAD16_BYTE( "vj98344_step3.4", 0x00000, 0x80000, NO_DUMP )
ROM_LOAD16_BYTE( "vj98344_step3.1", 0x00001, 0x80000, NO_DUMP )
ROM_REGION( 0x100000, "sub", 0 ) // 68000
ROM_LOAD16_BYTE( "vj98348_step3_11_v1.1", 0x00000, 0x80000, CRC(9c36aef5) SHA1(bbac48c2c7949a6f8a6ec83515e94a343c88d1b6) )
ROM_LOAD16_BYTE( "vj98348_step3_14_v1.1", 0x00001, 0x80000, CRC(b86be557) SHA1(49dbd6ef1c50adcf3386d5423da8ae7685649c46) )
ROM_REGION( 0xc00000, "sprites_horiz", 0 ) // middle screen sprites (horizontal)
ROM_LOAD( "mr99030-04.ic17", 0x000000, 0x400000, CRC(3eac3591) SHA1(3b294e94af23fd92fdf51d2c9c43f60d2ebd1688) ) // 8x8 HORIZONTAL
ROM_LOAD( "mr99030-05.ic18", 0x400000, 0x400000, CRC(dea7b8d6) SHA1(d7d98675eb3998a8057929f90aa340c1e5f6a617) ) // 8x8 HORIZONTAL
ROM_LOAD( "mr99030-06.ic19", 0x800000, 0x400000, CRC(71489d79) SHA1(0398a354c2588e3974cb76a331e46165db6af06d) ) // 8x8 HORIZONTAL
ROM_REGION( 0x1800000, "sprites_vert", 0 ) // left and right screens sprites (vertical)
// these roms appear twice
ROM_LOAD( "mr9930-01.ic2", 0x0000000, 0x400000, CRC(9e3e054e) SHA1(06a4fa76cb83dbe9d565d5ccd0a5ecc5067887c9) ) // sprites? VERTICAL (2x)
ROM_LOAD( "mr9930-01.ic30", 0x0000000, 0x400000, CRC(9e3e054e) SHA1(06a4fa76cb83dbe9d565d5ccd0a5ecc5067887c9) ) // sprites? VERTICAL (2x)
ROM_LOAD( "mr9930-02.ic3", 0x0400000, 0x400000, CRC(b23c29f4) SHA1(a7b10a3a9af43db319baf8633bb3728120960923) ) // 8x8 VERTICAL (2x)
ROM_LOAD( "mr9930-02.ic29", 0x0400000, 0x400000, CRC(b23c29f4) SHA1(a7b10a3a9af43db319baf8633bb3728120960923) ) // 8x8 VERTICAL (2x)
ROM_LOAD( "mr9930-03.ic28", 0x0800000, 0x400000, CRC(9a5d070f) SHA1(b4668b4f299033140a2c56499cc2712ba111cb57) ) // 8x8 VERTICAL (2x)
ROM_LOAD( "mr9930-03.ic4", 0x0800000, 0x400000, CRC(9a5d070f) SHA1(b4668b4f299033140a2c56499cc2712ba111cb57) ) // 8x8 VERTICAL
ROM_LOAD( "vj98348_step3_4_v1.1", 0x0c00000, 0x400000, CRC(dec612df) SHA1(acb86bb90c1cc61c7db3e022c69a5ff0611ffbae) ) // 8x8 VERTICAL?
ROM_LOAD( "vj98348_step3_18_v1.1", 0x1000000, 0x400000, CRC(bc92f0a0) SHA1(49c08de7a898a27972d4209709ddf447c5dca36a) ) // 8x8 VERTICAL?
ROM_LOAD( "vj98348_step3_25_v1.1", 0x1400000, 0x400000, CRC(dec612df) SHA1(acb86bb90c1cc61c7db3e022c69a5ff0611ffbae) ) // 8x8 VERTICAL?
ROM_REGION( 0x400000, "foreground", 0 ) // foreground tiles
ROM_LOAD( "mr99030-05.ic18", 0x000000, 0x400000, CRC(dea7b8d6) SHA1(d7d98675eb3998a8057929f90aa340c1e5f6a617) ) // 8x8 HORIZONTAL Temporary hack
ROM_REGION( 0x400000, "ymz", ROMREGION_ERASE ) /* Samples */
ROM_LOAD( "step3-sound", 0x000000, 0x400000, NO_DUMP )
DISK_REGION( "disks" )
DISK_IMAGE("step3", 0, NO_DUMP)
ROM_END
/***************************************************************************
@ -1838,3 +2222,11 @@ GAME( 1999, rockn2, 0, rockn2, rockn, rockn2, ROT270, "Jaleco",
GAME( 1999, rocknms, 0, rocknms, rocknms, rocknms, ROT0, "Jaleco", "Rock'n MegaSession (Japan)", GAME_SUPPORTS_SAVE | GAME_IMPERFECT_GRAPHICS )
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 )
// Undumped:
// - Stepping Stage <- the original Game
// - Stepping Stage 2 Supreme
// Dumped (partly):
GAME( 1999, stepstag, 0, stepstag, stepstag, stepstag, ROT0, "Jaleco", "Stepping Stage Special", GAME_NO_SOUND| GAME_NOT_WORKING)
GAME( 1999, step3, 0, stepstag, stepstag, stepstag, ROT0, "Jaleco", "Stepping 3 Superior", GAME_NO_SOUND| GAME_NOT_WORKING)

View File

@ -76,6 +76,23 @@ public:
DECLARE_CUSTOM_INPUT_MEMBER(rocknms_main2sub_status_r);
};
class stepstag_state : public tetrisp2_state
{
public:
stepstag_state(const machine_config &mconfig, device_type type, const char *tag)
: tetrisp2_state(mconfig, type, tag),
m_spriteram3(*this, "spriteram3") { }
required_shared_ptr<UINT16> m_spriteram3;
DECLARE_READ16_MEMBER(stepstag_coins_r);
DECLARE_READ16_MEMBER(unknown_read_0xc00000);
DECLARE_READ16_MEMBER(unknown_read_0xffff00);
DECLARE_READ16_MEMBER(unk_a42000_r);
DECLARE_WRITE16_MEMBER(stepstag_soundlatch_word_w);
DECLARE_WRITE16_MEMBER(stepstag_leds_w);
DECLARE_WRITE16_MEMBER( stepstag_palette_w );
};
/*----------- defined in video/tetrisp2.c -----------*/
@ -92,3 +109,8 @@ SCREEN_UPDATE_RGB32( rocknms_left );
SCREEN_UPDATE_RGB32( rocknms_right );
VIDEO_START( nndmseal );
VIDEO_START( stepstag );
SCREEN_UPDATE_IND16( stepstag_left );
SCREEN_UPDATE_IND16( stepstag_mid );
SCREEN_UPDATE_IND16( stepstag_right );

View File

@ -46,10 +46,10 @@
<orientation rotate="270" />
</screen>
<screen index="1">
<bounds x="9" y="0" width="16" height="12" />
<bounds x="9.1" y="0" width="16" height="12" />
</screen>
<screen index="2">
<bounds x="28.36" y="0" width="9" height="12" />
<bounds x="25.2" y="0" width="9" height="12" />
<orientation rotate="270" />
</screen>
</view>

View File

@ -814,7 +814,6 @@ $(MAMEOBJ)/jaleco.a: \
$(DRIVERS)/psychic5.o $(VIDEO)/psychic5.o \
$(DRIVERS)/pturn.o \
$(DRIVERS)/skyfox.o $(VIDEO)/skyfox.o \
$(DRIVERS)/stepstag.o \
$(DRIVERS)/tetrisp2.o $(VIDEO)/tetrisp2.o \
$(MACHINE)/jalcrpt.o \
$(VIDEO)/jalblend.o \
@ -2117,8 +2116,6 @@ $(DRIVERS)/sspeedr.o: $(LAYOUT)/sspeedr.lh
$(DRIVERS)/stactics.o: $(LAYOUT)/stactics.lh
$(DRIVERS)/stepstag.o: $(LAYOUT)/stepstag.lh
$(DRIVERS)/sstrangr.o: $(LAYOUT)/sstrangr.lh
$(DRIVERS)/subsino.o: $(LAYOUT)/victor5.lh \
@ -2143,7 +2140,8 @@ $(DRIVERS)/tceptor.o: $(LAYOUT)/tceptor2.lh
$(DRIVERS)/tehkanwc.o: $(LAYOUT)/gridiron.lh
$(DRIVERS)/tetrisp2.o: $(LAYOUT)/rocknms.lh
$(DRIVERS)/tetrisp2.o: $(LAYOUT)/rocknms.lh \
$(LAYOUT)/stepstag.lh
$(DRIVERS)/thayers.o: $(LAYOUT)/dlair.lh

View File

@ -142,7 +142,6 @@ WRITE16_MEMBER(tetrisp2_state::tetrisp2_vram_bg_w)
}
#define NX_1 (0x40)
#define NY_1 (0x40)
@ -344,12 +343,10 @@ VIDEO_START( rocknms )
---- ---- 7654 3210 Tile's X position in the tile page (*)
4.w fedc ---- ---- ---- Color
---- ba98 7--- ----
---- ---- -654 3210 Tile Page (32x32 tiles = 256x256 pixels each)
---- ba98 7654 3210 Tile Page (32x32 tiles = 256x256 pixels each)
6.w fedc ba98 ---- ----
---- ---- 7654 ---- Y Size - 1 (*)
---- ---- ---- 3210 X Size - 1 (*)
6.w fedc ba98 ---- ---- Y Size - 1 (*)
---- ---- 7654 3210 X Size - 1 (*)
8.w fedc ba-- ---- ----
---- --98 7654 3210 Y (Signed)
@ -370,7 +367,8 @@ VIDEO_START( rocknms )
-- it appears that sprites which should be shadows are often rendered *UNDER* the tilemaps, maybe related?
*/
template<class _BitmapClass>
static void tetrisp2_draw_sprites(running_machine &machine, _BitmapClass &bitmap, bitmap_ind8 &bitmap_pri, const rectangle &cliprect, UINT8* priority_ram, UINT16 *sprram_top, size_t sprram_size, int gfxnum, int flip)
static void tetrisp2_draw_sprites( running_machine &machine, _BitmapClass &bitmap, bitmap_ind8 &bitmap_pri, const rectangle &cliprect, UINT8* priority_ram,
UINT16 *sprram_top, size_t sprram_size, int gfxnum, int flip )
{
int tx, ty, sx, sy, flipx, flipy;
int xsize, ysize;
@ -380,7 +378,7 @@ static void tetrisp2_draw_sprites(running_machine &machine, _BitmapClass &bitmap
UINT32 primask;
gfx_element *gfx = machine.gfx[gfxnum];
UINT16 *source = sprram_top;
UINT16 *source = sprram_top;
UINT16 *finish = sprram_top + (sprram_size - 0x10) / 2;
for (; source<finish; source+=8)
@ -389,7 +387,8 @@ static void tetrisp2_draw_sprites(running_machine &machine, _BitmapClass &bitmap
pri = (attr & 0x00f0);
if ((attr & 0x0004) == 0) continue;
if ((attr & 0x0004) == 0)
continue;
flipx = attr & 1;
flipy = attr & 2;
@ -410,8 +409,8 @@ static void tetrisp2_draw_sprites(running_machine &machine, _BitmapClass &bitmap
sx = (source[5] & 0x3ff) - (source[5] & 0x400);
sy = (source[4] & 0x1ff) - (source[4] & 0x200);
xzoom = 0x10000;
yzoom = 0x10000;
xzoom = 1 << 16;
yzoom = 1 << 16;
gfx_element_set_source_clip(gfx, tx, xsize, ty, ysize);
@ -530,7 +529,8 @@ SCREEN_UPDATE_IND16( tetrisp2 )
else if (asc_pri == 2)
state->m_tilemap_fg->draw(bitmap, cliprect, 0, 1 << 2);
tetrisp2_draw_sprites(screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority, state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02));
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
@ -615,7 +615,8 @@ SCREEN_UPDATE_IND16( rockntread )
else if (asc_pri == 2)
state->m_tilemap_fg->draw(bitmap, cliprect, 0, 1 << 2);
tetrisp2_draw_sprites(screen.machine(), bitmap, screen.machine().priority_bitmap,cliprect, state->m_priority, state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02));
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
@ -677,7 +678,8 @@ SCREEN_UPDATE_RGB32( rocknms_left )
else if (asc_pri == 2)
state->m_tilemap_sub_fg->draw(bitmap, cliprect, 0, 1 << 2);
tetrisp2_draw_sprites(screen.machine(), bitmap, screen.machine().priority_bitmap,cliprect, state->m_priority, state->m_spriteram2, state->m_spriteram2.bytes(), 4, (state->m_systemregs[0x00] & 0x02));
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram2, state->m_spriteram2.bytes(), 4, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
@ -738,7 +740,118 @@ SCREEN_UPDATE_RGB32( rocknms_right )
else if (asc_pri == 2)
state->m_tilemap_fg->draw(bitmap, cliprect, 0, 1 << 2);
tetrisp2_draw_sprites(screen.machine(), bitmap, screen.machine().priority_bitmap,cliprect, state->m_priority, state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02));
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram, state->m_spriteram.bytes(), 0, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
/***************************************************************************
Stepping Stage
***************************************************************************/
// Temporary hack for stpestag: unaltered ASCII bytes are written in the most significant byte
// of code_hi, one of the CPUs probably reads them and writes the actual tile codes somewhere.
static TILE_GET_INFO( stepstag_get_tile_info_fg )
{
stepstag_state *state = machine.driver_data<stepstag_state>();
UINT16 code_hi = state->m_vram_fg[ 2 * tile_index + 0];
UINT16 code_lo = state->m_vram_fg[ 2 * tile_index + 1];
// ASCII -> tile codes
code_hi = (code_hi & 0xff00) >> 8;
code_hi = (code_hi & 0x0f) + (code_hi & 0xf0)*2;
code_hi += 0xbd6c;
SET_TILE_INFO(
2,
code_hi,
code_lo & 0xf,
0);
}
VIDEO_START( stepstag )
{
stepstag_state *state = machine.driver_data<stepstag_state>();
state->m_flipscreen_old = -1;
state->m_tilemap_bg = tilemap_create( machine, get_tile_info_bg,tilemap_scan_rows,
16,16,NX_0,NY_0);
// Temporary hack
state->m_tilemap_fg = tilemap_create( machine, stepstag_get_tile_info_fg,tilemap_scan_rows,
8,8,NX_1,NY_1);
state->m_tilemap_rot = tilemap_create( machine, get_tile_info_rot,tilemap_scan_rows,
16,16,NX_0*2,NY_0*2);
state->m_tilemap_bg->set_transparent_pen(0);
state->m_tilemap_fg->set_transparent_pen(0);
state->m_tilemap_rot->set_transparent_pen(0);
// should be smaller and mirrored like m32 I guess
state->m_priority = auto_alloc_array(machine, UINT8, 0x40000);
ms32_rearrange_sprites(machine, "sprites_horiz");
ms32_rearrange_sprites(machine, "sprites_vert");
}
SCREEN_UPDATE_IND16( stepstag_left )
{
stepstag_state *state = screen.machine().driver_data<stepstag_state>();
bitmap.fill(0, cliprect);
screen.machine().priority_bitmap.fill(0);
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram, state->m_spriteram.bytes(), 1, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
SCREEN_UPDATE_IND16( stepstag_right )
{
stepstag_state *state = screen.machine().driver_data<stepstag_state>();
bitmap.fill(0, cliprect);
screen.machine().priority_bitmap.fill(0);
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram3, state->m_spriteram3.bytes(), 1, (state->m_systemregs[0x00] & 0x02) );
return 0;
}
SCREEN_UPDATE_IND16( stepstag_mid )
{
stepstag_state *state = screen.machine().driver_data<stepstag_state>();
bitmap.fill(0, cliprect);
screen.machine().priority_bitmap.fill(0);
tetrisp2_draw_sprites( screen.machine(), bitmap, screen.machine().priority_bitmap, cliprect, state->m_priority,
state->m_spriteram2, state->m_spriteram2.bytes(), 0, (state->m_systemregs[0x00] & 0x02) );
state->m_tilemap_fg->draw(bitmap, cliprect, 0, 1 << 2);
return 0;
}
// scrambled palettes?
static inline int mypal(int x)
{
// return pal5bit(x >> 3);
return pal5bit((x^0xff) >> 3);
// return (((x - 0x80) >= 0) ? (x - 0x80) : 0) ^ 0x7f;
// return (x - 0x80);
}
WRITE16_MEMBER(stepstag_state::stepstag_palette_w)
{
data = COMBINE_DATA(&m_generic_paletteram_16[offset]);
// if ((offset & 1) == 0)
palette_set_color_rgb(machine(),offset/4,
mypal(m_generic_paletteram_16[offset/4*4+0] & 0xff),
mypal(m_generic_paletteram_16[offset/4*4+1] & 0xff),
mypal(m_generic_paletteram_16[offset/4*4+2] & 0xff)
);
}