summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/gaelco2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/gaelco2.cpp')
-rw-r--r--src/mame/drivers/gaelco2.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/mame/drivers/gaelco2.cpp b/src/mame/drivers/gaelco2.cpp
index b7d317d7c1b..f05769434e7 100644
--- a/src/mame/drivers/gaelco2.cpp
+++ b/src/mame/drivers/gaelco2.cpp
@@ -692,6 +692,72 @@ void gaelco2_state::play2000_map(address_map &map)
map(0xfe8000, 0xfeffff).ram().share("shareram"); /* Work RAM */
}
+READ16_MEMBER(gaelco2_state::srollnd_share_sim_r)
+{
+ uint16_t ret = m_shareram[offset];
+
+ if (m_maincpu->pc() == 0x0083d0)
+ ret = 0x0000;
+
+ if (m_maincpu->pc() == 0x0085B0)
+ ret = 0x0000;
+
+ if (m_maincpu->pc() == 0x00839e)
+ ret = 0x0000;
+
+ if (m_maincpu->pc() == 0x0035a6)
+ ret = 0x0000;
+
+ if (m_maincpu->pc() == 0x00857e) // after restoring default values (write back to nvram)
+ ret = 0x0000;
+
+
+ // reads a bunch of data (game specific? backup ram? default backup ram?) from device (0x180 words - copied to start of RAM)
+ if (m_maincpu->pc() == 0x83da)
+ {
+ ret = 0x0000;
+
+ if (offset == 0x274 / 2)
+ {
+ // ret = 0x3112; // checked after copy, otherwise you get password? prompt
+
+ // the 'password' for bootup (reset to default values) is stored at 13454 in ROM
+ // sequence value: 0800 0800 1000 4000 2000
+ // default key: x x c b v
+
+ // the 'password' in service mode checks the following (stored after above) (anything related to countability or where changing it might clear things)
+ // sequence value: 0800 1000 0400 0800 4000
+ // default key: x c z x b
+
+ // 0400 0800 1000 2000 4000 (just a default unused sequence?)
+ // z x c v b
+
+ // 0400 0400 1000 0800 4000 for advanced internal options in service mode
+ // z z c x b
+ }
+ }
+
+
+ logerror("%s: srollnd_share_sim_r %04x: %04x (%04x)\n", machine().describe_context(), offset, ret, mem_mask);
+
+ return ret;
+}
+
+WRITE16_MEMBER(gaelco2_state::srollnd_share_sim_w)
+{
+ if (m_maincpu->pc() != 0x552)
+ logerror("%s: srollnd_share_sim_w %04x: %04x (%04x)\n", machine().describe_context(), offset, data, mem_mask);
+ COMBINE_DATA(&m_shareram[offset]);
+}
+
+void gaelco2_state::srollnd_map(address_map& map)
+{
+ play2000_map(map);
+
+ map(0xfe8000, 0xfeffff).ram().rw(FUNC(gaelco2_state::srollnd_share_sim_r), FUNC(gaelco2_state::srollnd_share_sim_w)).share("shareram");
+}
+
+
static INPUT_PORTS_START( play2000 )
PORT_START("IN0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) // Coin1
@@ -834,6 +900,27 @@ ROM_START( play2000_50i )
ROM_LOAD( "palce16v8h.u29", 0x0000, 0x0117, BAD_DUMP CRC(4a0a6f39) SHA1(57351e471649391c9abf110828fe2f128fe84eee) )
ROM_END
+
+ROM_START( srollnd )
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 code */
+ ROM_LOAD16_BYTE( "nd2.u44", 0x000001, 0x010000, CRC(ee3ec213) SHA1(80a08839327bf8215abfad1fececac64da6fbcb2) )
+ ROM_LOAD16_BYTE( "nd1.u45", 0x000000, 0x010000, CRC(4bf20c7b) SHA1(b483f74fed25139e92359b178f6548b867c999e4) )
+
+ ROM_REGION( 0x8000, "gaelco_ds5002fp:sram", 0 ) /* DS5002FP code */
+ ROM_LOAD( "srollnd.ds5002fp", 0x00000, 0x8000, NO_DUMP )
+
+ ROM_REGION( 0x100, "gaelco_ds5002fp:mcu:internal", ROMREGION_ERASE00 )
+ DS5002FP_SET_MON( 0x19 )
+ DS5002FP_SET_RPCTL( 0x00 )
+ DS5002FP_SET_CRCR( 0x80 )
+
+ ROM_REGION( 0x0a00000, "gfx1", ROMREGION_ERASE00 ) /* GFX + Sound */
+ ROM_LOAD( "nd5.u49", 0x0000000, 0x080000, CRC(5ec78408) SHA1(1a5b3a0bdbd36bf6607e47dedf31f4b9a7b89667) )
+ ROM_LOAD( "nd3.u51", 0x0200000, 0x020000, CRC(e19ac5b8) SHA1(980a3b339f6958e5e04ea624f26dabd2e06f0c68) )
+ ROM_LOAD( "nd6.u48", 0x0400000, 0x020000, CRC(81cd4097) SHA1(94c7f0d3c21070039dbef9fc43d0f5f2619dad5a) )
+ ROM_LOAD( "nd4.u58", 0x0600000, 0x020000, CRC(8c66cd09) SHA1(5cf0a001bfd46c1e955f7952f8a42a001beaf43c) )
+ROM_END
+
void gaelco2_state::play2000(machine_config &config)
{
/* basic machine hardware */
@@ -872,6 +959,45 @@ void gaelco2_state::play2000(machine_config &config)
gaelco.add_route(1, "rspeaker", 1.0);
}
+void gaelco2_state::srollnd(machine_config& config)
+{
+ /* basic machine hardware */
+ M68000(config, m_maincpu, XTAL(20'000'000 / 2));
+ m_maincpu->set_addrmap(AS_PROGRAM, &gaelco2_state::srollnd_map);
+ m_maincpu->set_vblank_int("screen", FUNC(gaelco2_state::irq6_line_hold));
+
+ // not dumped
+ //GAELCO_DS5002FP(config, "gaelco_ds5002fp", XTAL(32'000'000) / 2).set_addrmap(0, &gaelco2_state::mcu_hostmem_map); /* ? MHz */
+ //config.set_perfect_quantum("gaelco_ds5002fp:mcu");
+
+ /* video hardware */
+ BUFFERED_SPRITERAM16(config, m_spriteram);
+
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_refresh_hz(59.1);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_size(64*16, 32*16);
+ screen.set_visarea(0, 384-1, 16, 256-1);
+ screen.set_screen_update(FUNC(gaelco2_state::screen_update));
+ screen.screen_vblank().set("spriteram", FUNC(buffered_spriteram16_device::vblank_copy_rising));
+ screen.set_palette(m_palette);
+
+ GFXDECODE(config, m_gfxdecode, m_palette, gfx_gaelco2);
+ PALETTE(config, m_palette).set_entries(4096*16 - 16); /* game's palette is 4096 but we allocate 15 more for shadows & highlights */
+
+ MCFG_VIDEO_START_OVERRIDE(gaelco2_state,gaelco2)
+
+ /* sound hardware */
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ gaelco_gae1_device &gaelco(GAELCO_GAE1(config, "gaelco", XTAL(34'000'000) / 34));
+ gaelco.set_device_rom_tag("gfx1");
+ gaelco.set_bank_offsets(0 * 0x080000, 0 * 0x080000, 0 * 0x080000, 0 * 0x080000);
+ gaelco.add_route(0, "lspeaker", 1.0);
+ gaelco.add_route(1, "rspeaker", 1.0);
+}
+
/*============================================================================
BANG
@@ -1264,6 +1390,7 @@ REF: 940411
and even allows for an alt. title of Lizard Hunt
Bits Usage
+ Bits Usage
---------------------------------------------------------------------------------
0000 1000 Title (0x00 = LIZARD HUNT, 0x08 = ALLIGATOR HUNT)
0000 0100 Language (0x00 = SPANISH, 0x04 = ENGLISH)
@@ -2495,6 +2622,8 @@ GAME( 1999, play2000, 0, play2000, play2000, gaelco2_state, i
GAME( 1999, play2000_50i,play2000, play2000, play2000, gaelco2_state, empty_init, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v5.0i) (Italy)", MACHINE_NOT_WORKING ) // bad dump
GAME( 1999, play2000_40i,play2000, play2000, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Play 2000 (Super Slot & Gran Tesoro) (v4.0i) (Italy)", 0 )
+GAME( 1998, srollnd, 0, srollnd, play2000, gaelco2_state, init_play2000, ROT0, "Nova Desitec", "Super Roller (v7.0)", MACHINE_NOT_WORKING ) // missing ds5002fp dump
+
// Gym equipment
GAME( 1997, sltpcycl, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Cycle Tele Cardioline (Salter Fitness Bike V.1.0, Checksum 02AB)", 0 ) // Same board and ROM as Pro Reclimber
GAME( 1997, sltpstep, 0, saltcrdi, saltcrdi, gaelco2_state, init_play2000, ROT0, "Salter Fitness / Gaelco", "Pro Stepper Tele Cardioline (Salter Fitness Stepper V.1.0, Checksum F208)", 0 )