summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2021-06-22 06:26:41 +0200
committer Ivan Vangelista <mesgnet@yahoo.it>2021-06-22 06:26:41 +0200
commit4728cc9c4d7449322c9331daccd2bae328a374d2 (patch)
tree868665e1caaec38b209292f5486e8d8604820002 /src
parent102f311ae7d4b3adc3de43ab99cb4a4b1c8b08dc (diff)
- galaxian_rockclim.cpp, phoenix.cpp (survival): added dip locations [Guru]
- tattack.cpp: identified all dips and added dip locations [Guru] - cischeat.cpp: dumped PROMs for bigrun [system11] - exidy.cpp: removed sound ROMs bad dumps for pepper2 - jackpot.cpp: very preliminary text tilemap hookup, to show on screen where the boot stops
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/cischeat.cpp36
-rw-r--r--src/mame/drivers/exidy.cpp10
-rw-r--r--src/mame/drivers/galaxian_rockclim.cpp21
-rw-r--r--src/mame/drivers/jackpot.cpp60
-rw-r--r--src/mame/drivers/phoenix.cpp18
-rw-r--r--src/mame/drivers/tattack.cpp107
6 files changed, 174 insertions, 78 deletions
diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp
index 9a850458f64..b9861050a90 100644
--- a/src/mame/drivers/cischeat.cpp
+++ b/src/mame/drivers/cischeat.cpp
@@ -2451,6 +2451,24 @@ ROM_START( bigrun )
ROM_LOAD( "br8951b.21", 0x000000, 0x020000, CRC(59b9c26b) SHA1(09fea3b77b045d9c1ed62bf53efa8b5242a33a10) ) // x00xxxxxxxxxxxxx, mask=0001e0
ROM_LOAD( "br8951b.22", 0x000000, 0x020000, CRC(c112a803) SHA1(224a2ed690b78caef266958a93524211ff4a8e70) ) // x00xxxxxxxxxxxxx
ROM_LOAD( "br8951b.23", 0x000000, 0x010000, CRC(b9474fec) SHA1(f1f0eab014e8f52572484b83f56189e0ff6f2b0d) ) // 000xxxxxxxxxxxxx
+
+ ROM_REGION( 0xa00, "main_pcb_proms", 0 )
+ ROM_LOAD( "pr88004p.10.12e", 0x000, 0x800, CRC(f178bcce) SHA1(00657f3d1a9fe69337583a9b67a4f16b26c7d2c4) ) // N82S185AN
+ ROM_LOAD( "pr88004q.11.8m", 0x800, 0x200, CRC(9327dc37) SHA1(cfe7b144cdcd76170d47f1c4e0f72b6d4fca0c8d) ) // N82S147AN
+
+ ROM_REGION( 0x1500, "object_pcb_proms", 0 )
+ ROM_LOAD( "pr88004r.24.8l", 0x0000, 0x0800, CRC(354fc081) SHA1(6c1fffc9a458050ba79d16e1ef7775ff5f444ec4) ) // N82S185AN
+ ROM_LOAD( "pr88004s.25.8k", 0x0800, 0x0800, CRC(2a4f9241) SHA1(8e9ff7e1bd31de81ca963d92b5532b8874c1f0ba) ) // N82S185AN
+ ROM_LOAD( "pr88004t.26.2x", 0x1000, 0x0200, CRC(1aad16b2) SHA1(af28396a64ca70187a2d4a900b6298cd8c053218) ) // N82S147AN
+ ROM_LOAD( "pr88004u.27.3y", 0x1200, 0x0200, CRC(213874b2) SHA1(8fea5bdecfd508e9cb25cfc966c9f0b3feb4463a) ) // N82S147AN
+ ROM_LOAD( "pr88004w.28.9v", 0x1400, 0x0100, CRC(3d648467) SHA1(bf8dbaa2176c801f7370313425c87f0eefe8a3a4) ) // N82S135N
+
+ ROM_REGION( 0x100, "road_pcb_prom", 0 )
+ ROM_LOAD( "pr88004x.21.3j", 0x000, 0x100, CRC(19976c09) SHA1(3f2fa1e26ed290aa2f6396154ddf9cdb47484253) ) // N82S129AN
+
+ ROM_REGION( 0x200, "io_pcb_proms", 0 )
+ ROM_LOAD( "pr88004y.9.9l", 0x000, 0x100, CRC(baf5e02c) SHA1(f06a6a095f78bd1b9d32420c4b072f08511bc8ff) ) // N82S129AN
+ ROM_LOAD( "pr88004z.10.10l", 0x100, 0x100, CRC(3103c792) SHA1(b7f6afcb8f0754a56f88c9f4665a6f6976daf98b) ) // N82S129AN
ROM_END
ROM_START( bigrunu )
@@ -2518,6 +2536,24 @@ ROM_START( bigrunu )
ROM_LOAD( "br8951b.21", 0x000000, 0x020000, CRC(59b9c26b) SHA1(09fea3b77b045d9c1ed62bf53efa8b5242a33a10) ) // x00xxxxxxxxxxxxx, mask=0001e0
ROM_LOAD( "br8951b.22", 0x000000, 0x020000, CRC(c112a803) SHA1(224a2ed690b78caef266958a93524211ff4a8e70) ) // x00xxxxxxxxxxxxx
ROM_LOAD( "br8951b.23", 0x000000, 0x010000, CRC(b9474fec) SHA1(f1f0eab014e8f52572484b83f56189e0ff6f2b0d) ) // 000xxxxxxxxxxxxx
+
+ ROM_REGION( 0xa00, "main_pcb_proms", 0 )
+ ROM_LOAD( "pr88004p.10.12e", 0x000, 0x800, CRC(f178bcce) SHA1(00657f3d1a9fe69337583a9b67a4f16b26c7d2c4) ) // N82S185AN
+ ROM_LOAD( "pr88004q.11.8m", 0x800, 0x200, CRC(9327dc37) SHA1(cfe7b144cdcd76170d47f1c4e0f72b6d4fca0c8d) ) // N82S147AN
+
+ ROM_REGION( 0x1500, "object_pcb_proms", 0 )
+ ROM_LOAD( "pr88004r.24.8l", 0x0000, 0x0800, CRC(354fc081) SHA1(6c1fffc9a458050ba79d16e1ef7775ff5f444ec4) ) // N82S185AN
+ ROM_LOAD( "pr88004s.25.8k", 0x0800, 0x0800, CRC(2a4f9241) SHA1(8e9ff7e1bd31de81ca963d92b5532b8874c1f0ba) ) // N82S185AN
+ ROM_LOAD( "pr88004t.26.2x", 0x1000, 0x0200, CRC(1aad16b2) SHA1(af28396a64ca70187a2d4a900b6298cd8c053218) ) // N82S147AN
+ ROM_LOAD( "pr88004u.27.3y", 0x1200, 0x0200, CRC(213874b2) SHA1(8fea5bdecfd508e9cb25cfc966c9f0b3feb4463a) ) // N82S147AN
+ ROM_LOAD( "pr88004w.28.9v", 0x1400, 0x0100, CRC(3d648467) SHA1(bf8dbaa2176c801f7370313425c87f0eefe8a3a4) ) // N82S135N
+
+ ROM_REGION( 0x100, "road_pcb_prom", 0 )
+ ROM_LOAD( "pr88004x.21.3j", 0x000, 0x100, CRC(19976c09) SHA1(3f2fa1e26ed290aa2f6396154ddf9cdb47484253) ) // N82S129AN
+
+ ROM_REGION( 0x200, "io_pcb_proms", 0 )
+ ROM_LOAD( "pr88004y.9.9l", 0x000, 0x100, CRC(baf5e02c) SHA1(f06a6a095f78bd1b9d32420c4b072f08511bc8ff) ) // N82S129AN
+ ROM_LOAD( "pr88004z.10.10l", 0x100, 0x100, CRC(3103c792) SHA1(b7f6afcb8f0754a56f88c9f4665a6f6976daf98b) ) // N82S129AN
ROM_END
void cischeat_state::init_bigrun()
diff --git a/src/mame/drivers/exidy.cpp b/src/mame/drivers/exidy.cpp
index 415b9b0afaf..096b2ea215d 100644
--- a/src/mame/drivers/exidy.cpp
+++ b/src/mame/drivers/exidy.cpp
@@ -1677,8 +1677,8 @@ ROM_START( pepper2 )
ROM_LOAD( "p2l-8_6a.6a", 0xf000, 0x1000, CRC(515b1046) SHA1(bdcccd4e415c00ee8e5ec185597df75ecafe7d3d) )
ROM_REGION( 0x8000, "soundbd:audiocpu", 0 )
- ROM_LOAD( "p2a-2_5a.5a", 0x6800, 0x0800, CRC(caa857ed) SHA1(e92a9c84e958b1811d29960acd3590c8c6a904e8) ) // revision 2
- ROM_LOAD( "p2a-2_6a.6a", 0x7000, 0x0800, CRC(6c4cb05b) SHA1(ab49abc937159fdc814742582ffdfd1e7dce12e6) )
+ ROM_LOAD( "p2a-2_5a.5a", 0x6800, 0x0800, CRC(90e3c781) SHA1(d51a9e011167a132e8af9f4b1201600a58e86b62) )
+ ROM_LOAD( "p2a-2_6a.6a", 0x7000, 0x0800, CRC(dd343e34) SHA1(4ec55bb73d6afbd167fa91d2606d1d55a15b5c39) )
ROM_LOAD( "p2a-2_7a.7a", 0x7800, 0x0800, CRC(e02b4356) SHA1(9891e14d84221c1d6f2d15a29813eb41024290ca) )
ROM_REGION( 0x0800, "gfx1", 0 )
@@ -1702,9 +1702,9 @@ ROM_START( pepper27 )
ROM_LOAD( "p2l-7_6a.6a", 0xf000, 0x1000, CRC(db8dd4fc) SHA1(9ae00f8d1a19280670dc65a20cf9cc4e7f1cc973) )
ROM_REGION( 0x8000, "soundbd:audiocpu", 0 )
- ROM_LOAD( "p2a-1_5a.5a", 0x6800, 0x0800, CRC(90e3c781) SHA1(d51a9e011167a132e8af9f4b1201600a58e86b62) ) // revision 1
- ROM_LOAD( "p2a-1_6a.6a", 0x7000, 0x0800, CRC(dd343e34) SHA1(4ec55bb73d6afbd167fa91d2606d1d55a15b5c39) )
- ROM_LOAD( "p2a-1_7a.7a", 0x7800, 0x0800, CRC(e02b4356) SHA1(9891e14d84221c1d6f2d15a29813eb41024290ca) )
+ ROM_LOAD( "p2a-2_5a.5a", 0x6800, 0x0800, CRC(90e3c781) SHA1(d51a9e011167a132e8af9f4b1201600a58e86b62) )
+ ROM_LOAD( "p2a-2_6a.6a", 0x7000, 0x0800, CRC(dd343e34) SHA1(4ec55bb73d6afbd167fa91d2606d1d55a15b5c39) )
+ ROM_LOAD( "p2a-2_7a.7a", 0x7800, 0x0800, CRC(e02b4356) SHA1(9891e14d84221c1d6f2d15a29813eb41024290ca) )
ROM_REGION( 0x0800, "gfx1", 0 )
ROM_LOAD( "p2l-1_11d.11d", 0x0000, 0x0800, CRC(b25160cd) SHA1(3d768552960a3a660891dcb85da6a5c382b33991) )
diff --git a/src/mame/drivers/galaxian_rockclim.cpp b/src/mame/drivers/galaxian_rockclim.cpp
index bb8c0b2e204..6a42b6a6e31 100644
--- a/src/mame/drivers/galaxian_rockclim.cpp
+++ b/src/mame/drivers/galaxian_rockclim.cpp
@@ -120,7 +120,7 @@ static INPUT_PORTS_START( rockclim )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_8WAY
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW3:1") // fake switch for edge connector cabinet setting
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
@@ -132,10 +132,10 @@ static INPUT_PORTS_START( rockclim )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Bonus_Life ) )
- PORT_DIPSETTING( 0x00, "30000" )
- PORT_DIPSETTING( 0x40, "50000" )
- PORT_DIPNAME( 0x80, 0x00, "Coin Slots" )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:7") // PCB pic shows Rock Climber has 2x 8-position DIP switches.
+ PORT_DIPSETTING( 0x00, "30000" ) // Order may not be accurate since info not available (need DIP switch sheet to improve it)
+ PORT_DIPSETTING( 0x40, "50000" ) // but these seem plausible.
+ PORT_DIPNAME( 0x80, 0x00, "Coin Slots" ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x80, "1" )
PORT_DIPSETTING( 0x00, "2" )
@@ -150,17 +150,20 @@ static INPUT_PORTS_START( rockclim )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_8WAY PORT_COCKTAIL
PORT_START("IN2")
- PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x03, "6" )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_TILT )
- PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_DIPUNUSED_DIPLOC( 0x10, IP_ACTIVE_HIGH, "SW1:3" )
+ PORT_DIPUNUSED_DIPLOC( 0x20, IP_ACTIVE_HIGH, "SW1:4" )
+ PORT_DIPUNUSED_DIPLOC( 0x40, IP_ACTIVE_HIGH, "SW1:5" )
+ PORT_DIPUNUSED_DIPLOC( 0x80, IP_ACTIVE_HIGH, "SW1:6" )
PORT_START("IN4")
- PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) )
+ PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW2:1,2,3,4")
PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 8C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 7C_1C ) )
@@ -177,7 +180,7 @@ static INPUT_PORTS_START( rockclim )
PORT_DIPSETTING( 0x0a, DEF_STR( 1C_6C ) )
PORT_DIPSETTING( 0x09, DEF_STR( 1C_7C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_8C ) )
- PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) )
+ PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW2:5,6,7,8")
PORT_DIPSETTING( 0x00, DEF_STR( 9C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 8C_1C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 7C_1C ) )
diff --git a/src/mame/drivers/jackpot.cpp b/src/mame/drivers/jackpot.cpp
index 37c51b69290..1905d44a9cd 100644
--- a/src/mame/drivers/jackpot.cpp
+++ b/src/mame/drivers/jackpot.cpp
@@ -31,29 +31,50 @@ NOTE: the PCB from which Version 16 was dumped has the following components remo
and some resistors and caps. Strangely, the sound ROMs are unchanged.
In the same period Electronic Projects also released games on different platforms (see jackpool.cpp and spool99.cpp)
+
+TODO:
+- everything, there are only stubbed functions to see the text tilemap on screen
+- boot stops at 'test collegamento......master' (link test......master).
*/
#include "emu.h"
-#include "emupal.h"
-#include "screen.h"
-#include "speaker.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
+#include "machine/nvram.h"
#include "sound/ay8910.h"
#include "sound/ymopl.h"
#include "video/mc6845.h"
+#include "emupal.h"
+#include "screen.h"
+#include "speaker.h"
+#include "tilemap.h"
+
+
+namespace {
class jackpot_state : public driver_device
{
public:
jackpot_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_tx_videoram(*this, "tx_videoram")
{
}
void jackpot(machine_config &config);
+protected:
+ virtual void video_start() override;
+
private:
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_shared_ptr<uint8_t> m_tx_videoram;
+
+ tilemap_t *m_tx_tilemap;
+
+ TILE_GET_INFO_MEMBER(get_tx_tile_info);
+ void tx_videoram_w(offs_t offset, uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void prg_map(address_map &map);
@@ -62,8 +83,27 @@ private:
};
+void jackpot_state:: video_start()
+{
+ m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(jackpot_state::get_tx_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
+}
+
+TILE_GET_INFO_MEMBER(jackpot_state::get_tx_tile_info)
+{
+ uint8_t code = m_tx_videoram[tile_index];
+ tileinfo.set(0, code, 0, 0);
+}
+
+void jackpot_state::tx_videoram_w(offs_t offset, uint8_t data)
+{
+ m_tx_videoram[offset] = data;
+ m_tx_tilemap->mark_tile_dirty(offset);
+}
+
uint32_t jackpot_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
+ m_tx_tilemap->draw(screen, bitmap, cliprect);
+
return 0;
}
@@ -71,8 +111,10 @@ uint32_t jackpot_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
void jackpot_state::prg_map(address_map &map)
{
map(0x0000, 0x7fff).rom(); // after this, ROM is 0xff filled but in the range 0x1e000 - 0x1efff. Where does it get mapped?
- map(0xd800, 0xdfff).ram(); // MK48Z02B?
- map(0xe000, 0xffff).ram();
+ map(0xd702, 0xd702).lr8(NAME([] () -> uint8_t { return 0xff; })); // 'attendere prego test hardware' (please wait hardware test), returning this is enough to progress. TODO: what's actually being tested?
+ map(0xd800, 0xdfff).ram().share("nvram"); // MK48Z02B?
+ map(0xe000, 0xe3ff).ram().share(m_tx_videoram).w(FUNC(jackpot_state::tx_videoram_w));
+ map(0xe400, 0xffff).ram(); // 0xf000-0xf3ff seems to be color RAM for the text tilemap
}
void jackpot_state::sound_prg_map(address_map &map)
@@ -85,7 +127,6 @@ void jackpot_state::sound_prg_map(address_map &map)
void jackpot_state::sound_io_map(address_map &map)
{
map.global_mask(0xff);
- map.unmap_value_high();
}
@@ -140,17 +181,18 @@ void jackpot_state::jackpot(machine_config &config) // clocks not verified
audiocpu.set_addrmap(AS_IO, &jackpot_state::sound_io_map);
EEPROM_93C66_8BIT(config, "eeprom");
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
// all wrong
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
- screen.set_size(64*8, 32*8);
+ screen.set_size(32*8, 32*8);
screen.set_visarea_full();
screen.set_screen_update(FUNC(jackpot_state::screen_update));
screen.set_palette("palette");
- GFXDECODE(config, "gfxdecode", "palette", gfx_jackpot);
+ GFXDECODE(config, m_gfxdecode, "palette", gfx_jackpot);
PALETTE(config, "palette").set_entries(0x100);
mc6845_device &crtc(MC6845(config, "crtc", 13_MHz_XTAL / 8)); // divisor guessed
@@ -228,6 +270,8 @@ ROM_START( jackpota )
ROM_LOAD( "hy18cv8s-25", 0x400, 0x117, NO_DUMP )
ROM_END
+} // Anonymous namespace
+
GAME( 1988, jackpot, 0, jackpot, jackpot, jackpot_state, empty_init, ROT0, "Electronic Projects", "Jackpot (Ver 16.16L)", MACHINE_IS_SKELETON ) // 08.09.98
GAME( 1988, jackpota, jackpot, jackpot, jackpot, jackpot_state, empty_init, ROT0, "Electronic Projects", "Jackpot (Ver 1.16L)", MACHINE_IS_SKELETON ) // 01.09.98
diff --git a/src/mame/drivers/phoenix.cpp b/src/mame/drivers/phoenix.cpp
index 99a2a50f8d0..89eafc13686 100644
--- a/src/mame/drivers/phoenix.cpp
+++ b/src/mame/drivers/phoenix.cpp
@@ -321,7 +321,7 @@ static INPUT_PORTS_START( pleiads )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
- /* Based on various sources, no Button 2 was present in Pleiads */
+ /* Based on various sources, no Button 2 was present in Pleiads (Tehkan version) */
PORT_MODIFY("CTRL") /* fake port for multiplexed controls */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_2WAY
@@ -385,20 +385,20 @@ static INPUT_PORTS_START( survival )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
PORT_START("DSW0")
- PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION( "SW1:1,2" )
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x01, "4" )
PORT_DIPSETTING( 0x00, "5" )
- PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
+ PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION( "SW1:3,4" )
PORT_DIPSETTING( 0x0c, "25000" )
PORT_DIPSETTING( 0x08, "35000" )
PORT_DIPSETTING( 0x04, "45000" )
PORT_DIPSETTING( 0x00, "55000" )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Free_Play ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Free_Play ) ) PORT_DIPLOCATION( "SW1:5" )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x60, 0x60, DEF_STR( Coinage ) )
+ PORT_DIPNAME( 0x60, 0x60, DEF_STR( Coinage ) ) PORT_DIPLOCATION( "SW1:6,7" )
PORT_DIPSETTING( 0x00, DEF_STR( 5C_1C ) )
PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x40, DEF_STR( 2C_1C ) )
@@ -406,7 +406,7 @@ static INPUT_PORTS_START( survival )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen")
PORT_START("CAB") /* fake port for non-memory mapped dip switch */
- PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION( "SW1:8" )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) )
INPUT_PORTS_END
@@ -1375,6 +1375,9 @@ ROM_START( pleiads )
ROM_LOAD( "ic39.bin", 0x0000, 0x0800, CRC(85866607) SHA1(cd240bd056f761b2f9e2142049434f02cae3e315) ) /* IC 27 on real board */
ROM_LOAD( "ic40.bin", 0x0800, 0x0800, CRC(a841d511) SHA1(8349008ab1d8ef08775b54170c37deb1d391fffc) ) /* IC 26 on real board */
+ ROM_REGION( 0x800, "melody", 0 ) // Epson 7910E Multi-Melody IC (according to Centuri version manual)
+ ROM_LOAD( "7910e", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping
+
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "7611-5.33", 0x0000, 0x0100, CRC(e38eeb83) SHA1(252880d80425b2e697146e76efdc6cb9f3ba0378) ) /* palette low bits */
ROM_LOAD( "7611-5.26", 0x0100, 0x0100, CRC(7a1bcb1e) SHA1(bdfab316ea26e2063879e7aa78b6ae2b55eb95c8) ) /* palette high bits */
@@ -1447,6 +1450,9 @@ ROM_START( pleiadce )
ROM_LOAD( "ic39.bin", 0x0000, 0x0800, CRC(85866607) SHA1(cd240bd056f761b2f9e2142049434f02cae3e315) )
ROM_LOAD( "ic40.bin", 0x0800, 0x0800, CRC(a841d511) SHA1(8349008ab1d8ef08775b54170c37deb1d391fffc) )
+ ROM_REGION( 0x800, "melody", 0 ) // Epson 7910E Multi-Melody IC (according to manual)
+ ROM_LOAD( "7910e", 0x000, 0x800, NO_DUMP ) // actual size unknown, needs decapping
+
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "7611-5.33", 0x0000, 0x0100, CRC(e38eeb83) SHA1(252880d80425b2e697146e76efdc6cb9f3ba0378) ) /* palette low bits */
ROM_LOAD( "7611-5.26", 0x0100, 0x0100, CRC(7a1bcb1e) SHA1(bdfab316ea26e2063879e7aa78b6ae2b55eb95c8) ) /* palette high bits */
diff --git a/src/mame/drivers/tattack.cpp b/src/mame/drivers/tattack.cpp
index d27a6fe6f52..cee3c8b9b35 100644
--- a/src/mame/drivers/tattack.cpp
+++ b/src/mame/drivers/tattack.cpp
@@ -16,8 +16,8 @@
no proms
TODO:
- - non-tilemap video offsets/sizes are guessworked;
- - random brick flickering effect is guessworked too, leave MACHINE_IMPERFECT_COLORS in until is tested on HW.
+ - non-tilemap video offsets/sizes are guessed;
+ - random brick flickering effect is guessed too, leave MACHINE_IMPERFECT_COLORS in until is tested on HW.
- outputs (coin counter port same as sound writes?);
- some dipswitches;
- sound (requires Epson 7910 Multi-Melody emulation?)
@@ -50,13 +50,15 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "sound/samples.h"
#include "emupal.h"
#include "screen.h"
-#include "sound/samples.h"
#include "speaker.h"
#include "tilemap.h"
+namespace {
+
class tattack_state : public driver_device
{
public:
@@ -274,9 +276,9 @@ void tattack_state::tattack_map(address_map &map)
map(0x0000, 0x0fff).rom();
map(0x4000, 0x4000).portr("AN_PADDLE"); // $315, checks again with same memory, loops if different (?)
map(0x5000, 0x53ff).ram().share("videoram");
- map(0x6000, 0x6000).portr("DSW2");
+ map(0x6000, 0x6000).portr("DSW1");
map(0x7000, 0x73ff).ram().share("colorram"); // color map ? something else .. only bits 1-3 are used
- map(0xa000, 0xa000).portr("DSW1"); // dsw ? something else ?
+ map(0xa000, 0xa000).portr("DSW2");
map(0xc000, 0xc000).portr("INPUTS").w(FUNC(tattack_state::sound_w)); // sound
map(0xc001, 0xc001).w(FUNC(tattack_state::brick_dma_w)); // bit 7 = strobe ($302)
map(0xc002, 0xc002).nopw(); // same as sound port, outputs?
@@ -287,13 +289,13 @@ void tattack_state::tattack_map(address_map &map)
static INPUT_PORTS_START( tattack )
PORT_START("INPUTS")
- PORT_DIPNAME( 0x01, 0x00, "1-01" ) // reset switch?
+ PORT_DIPNAME( 0x01, 0x00, "1-01" ) // freezes when off IF 1-02 is also off
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, "1-02" )
+ PORT_DIPNAME( 0x02, 0x02, "1-02" ) // moves the bat (check PCB pinout above, maybe VR Center button 2?)
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, "1-03" )
+ PORT_DIPNAME( 0x04, 0x04, "1-03" ) // flips screen and freezes IF 1-02 is on
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "1-04" )
@@ -305,55 +307,58 @@ static INPUT_PORTS_START( tattack )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x00, "Enable green square blocks" )
- PORT_DIPSETTING( 0x00, DEF_STR( No ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
- PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
- PORT_DIPNAME( 0x04, 0x04, "Number of bricks to destroy" )
- PORT_DIPSETTING( 0x04, "112" )
- PORT_DIPSETTING( 0x00, "5" ) // testing option?
- PORT_DIPNAME( 0x08, 0x00, "DSW1 4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x30, 0x00, "Paddle in middle of screen" )
- PORT_DIPSETTING( 0x00, "Never on screen" )
- PORT_DIPSETTING( 0x10, "Mode 1" ) // - appears after a set number of bricks destroyed, might be same setting
- PORT_DIPSETTING( 0x20, "Mode 2" ) // /
- PORT_DIPSETTING( 0x30, "Always on screen" )
- PORT_DIPNAME( 0x40, 0x00, "DSW1 7" )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x00, "DSW1 8" )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x01, 0x00, "DSW2 1" )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, "DSW2 2" )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x00, "DSW2 3" )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x00, "DSW2 4" )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x00, "DSW2 5" )
- PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) )
+ PORT_DIPNAME( 0x0f, 0x0f, "Game Time" ) PORT_DIPLOCATION( "SW1:1,2,3,4" )
+ PORT_DIPSETTING( 0x00, "2:00" )
+ PORT_DIPSETTING( 0x01, "2:05" )
+ PORT_DIPSETTING( 0x02, "2:10" )
+ PORT_DIPSETTING( 0x03, "2:15" )
+ PORT_DIPSETTING( 0x04, "2:20" )
+ PORT_DIPSETTING( 0x05, "2:25" )
+ PORT_DIPSETTING( 0x06, "2:30" )
+ PORT_DIPSETTING( 0x07, "2:35" )
+ PORT_DIPSETTING( 0x08, "2:40" )
+ PORT_DIPSETTING( 0x09, "2:45" )
+ PORT_DIPSETTING( 0x0a, "2:50" )
+ PORT_DIPSETTING( 0x0b, "2:55" )
+ PORT_DIPSETTING( 0x0c, "3:00" )
+ PORT_DIPSETTING( 0x0d, "3:05" )
+ PORT_DIPSETTING( 0x0e, "3:10" )
+ PORT_DIPSETTING( 0x0f, "3:15" )
+ PORT_DIPNAME( 0x10, 0x10, "Bonus Block" ) PORT_DIPLOCATION( "SW1:5" )
+ PORT_DIPSETTING( 0x00, "Once" ) // how is the 'bonus' achieved?
+ PORT_DIPSETTING( 0x10, "No Limit" )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION( "SW1:6" )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x20, DEF_STR( Cocktail ) )
- PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) )
+ PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Lives ) ) PORT_DIPLOCATION( "SW1:7,8" )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x40, "5" )
PORT_DIPSETTING( 0x80, "7" )
PORT_DIPSETTING( 0xc0, DEF_STR( Infinite ) )
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x01, "Oil Zones" ) PORT_DIPLOCATION( "SW2:1" )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION( "SW2:2" )
+ PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
+ PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
+ PORT_DIPNAME( 0x04, 0x04, "Game Mode" ) PORT_DIPLOCATION( "SW2:3" )
+ PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) // 112 bricks
+ PORT_DIPSETTING( 0x00, "Hit 5 Bricks Then Game Over" ) // for testing
+ PORT_DIPUNUSED_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" ) // DIP switch sheet says 'no use'
+ PORT_DIPNAME( 0x30, 0x30, "Enemies" ) PORT_DIPLOCATION( "SW2:5,6" )
+ PORT_DIPSETTING( 0x00, DEF_STR( No ) )
+ PORT_DIPSETTING( 0x10, "Show When 40 Bricks Remaining" )
+ PORT_DIPSETTING( 0x20, "Show When 20 Bricks Remaining" )
+ PORT_DIPSETTING( 0x30, DEF_STR( Yes ) )
+ PORT_DIPNAME( 0x40, 0x40, "Enemy Delay" ) PORT_DIPLOCATION( "SW2:7" ) // works when enemies not equal to 0x30
+ PORT_DIPSETTING( 0x40, "Appear In Last 30 Seconds" ) // enemy blocks appear when 30 seconds game time remaining
+ PORT_DIPSETTING( 0x00, "Disable" )
+ PORT_DIPNAME( 0x80, 0x80, "Oil Zone Delay" ) PORT_DIPLOCATION( "SW2:8" ) // works when oil zones set to no
+ PORT_DIPSETTING( 0x80, "Appear In Last 30 Seconds" ) // oil zones appear when 30 seconds game time remaining
+ PORT_DIPSETTING( 0x00, "Disable" )
+
PORT_START("AN_PADDLE")
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_MINMAX(0,0xff) PORT_SENSITIVITY(10) PORT_KEYDELTA(10) PORT_CENTERDELTA(0)
INPUT_PORTS_END
@@ -491,5 +496,7 @@ void tattack_state::init_tattack()
}
+} // Anonymous namespace
+
GAME( 1983?, tattack, 0, tattack, tattack, tattack_state, init_tattack, ROT270, "Shonan", "Time Attacker", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_COLORS | MACHINE_NO_COCKTAIL )
// there is another undumped version with katakana Shonan logo and black background