summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/mame.lst3
-rw-r--r--src/mame/sega/unkhockey.cpp156
3 files changed, 160 insertions, 0 deletions
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index c50e5df154b..09fb680b408 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -1258,6 +1258,7 @@ sega/system16.cpp
sega/timetrv.cpp
sega/triforce.cpp
sega/turbo.cpp
+sega/unkhockey.cpp
sega/vicdual.cpp
sega/winclub.cpp
sega/y2.cpp
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 2dda47952f9..4909bc19cff 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -42716,6 +42716,9 @@ uts20 //
@source:att/unixpc.cpp
3b1 // 3B1 "Unix PC"
+@source:sega/unkhockey.cpp
+unkhockey
+
@source:misc/unkhorse.cpp
unkhorse //
diff --git a/src/mame/sega/unkhockey.cpp b/src/mame/sega/unkhockey.cpp
new file mode 100644
index 00000000000..5f644c8876a
--- /dev/null
+++ b/src/mame/sega/unkhockey.cpp
@@ -0,0 +1,156 @@
+// license:BSD-3-Clause
+// copyright-holders:
+
+/*
+Sega 834-12846 PCB (stickered 970729 0259 II)
+
+The main components are:
+MC68EC000FN16 CPU
+32.000 MHz XTAL
+Sega 315_5296 custom (I/O)
+Battery
+2x LH52B256N SRAM 32k x 8
+2x Lattice pLSI 2032 High Density Programmable Logic
+Lattice pLSI 1016 High Density Programmable Logic
+NEC D71054GB programmable timer / counter
+NEC D71055GB parallel interface unit
+2x MB3771 power supply monitor
+SLA7026M unipolar stepper motor
+YM3438
+NEC D7759GC
+2x 8-dip banks
+3-dip bank
+
+Currently unknown which game this is. The M68K ROM contains several puck-related strings,
+so it's supposed to be some kind of air hockey game.
+epr codes point to 1996-97 timeframe. Possibly Hockey Stadium (1997)?
+*/
+
+#include "emu.h"
+
+#include "315_5296.h"
+
+#include "cpu/m68000/m68000.h"
+#include "machine/i8255.h"
+#include "machine/nvram.h"
+#include "machine/pit8253.h"
+#include "sound/upd7759.h"
+#include "sound/ymopn.h"
+
+#include "speaker.h"
+
+
+namespace {
+
+class unkhockey_state : public driver_device
+{
+public:
+ unkhockey_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_upd7759(*this, "upd")
+ { }
+
+ void unkhockey(machine_config &config);
+
+private:
+ required_device<m68000_base_device> m_maincpu;
+ required_device<upd7759_device> m_upd7759;
+
+ void program_map(address_map &map);
+};
+
+
+void unkhockey_state::program_map(address_map &map) // TODO: verify everything
+{
+ map(0x000000, 0x07ffff).rom();
+ map(0x200000, 0x20001f).rw("io", FUNC(sega_315_5296_device::read), FUNC(sega_315_5296_device::write)).umask16(0x00ff);
+ map(0x700000, 0x700007).rw("ymsnd", FUNC(ym3438_device::read), FUNC(ym3438_device::write)).umask16(0x00ff);
+ map(0xb00000, 0xb01fff).ram().share("nvram"); // TODO: size?
+ //map(0x??0000, 0x??0001).w(FUNC(unkhockey_state::upd7759_w)).umask16(0x00ff);
+ map(0xff0000, 0xffffff).ram();
+}
+
+
+static INPUT_PORTS_START( unkhockey )
+ PORT_START("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("IN1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
+
+ PORT_START("SW1")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW1:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW1:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW1:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW1:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW1:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW1:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW1:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW1:8" )
+
+ PORT_START("SW2")
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW2:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW2:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW2:3" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x08, IP_ACTIVE_LOW, "SW2:4" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW2:5" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x20, IP_ACTIVE_LOW, "SW2:6" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x40, IP_ACTIVE_LOW, "SW2:7" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x80, IP_ACTIVE_LOW, "SW2:8" )
+
+ PORT_START("SW3") // only 3 switches
+ PORT_DIPUNKNOWN_DIPLOC( 0x01, IP_ACTIVE_LOW, "SW3:1" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x02, IP_ACTIVE_LOW, "SW3:2" )
+ PORT_DIPUNKNOWN_DIPLOC( 0x04, IP_ACTIVE_LOW, "SW3:3" )
+INPUT_PORTS_END
+
+
+void unkhockey_state::unkhockey(machine_config &config)
+{
+ M68000(config, m_maincpu, 32_MHz_XTAL / 2); // divider unverified
+ m_maincpu->set_addrmap(AS_PROGRAM, &unkhockey_state::program_map);
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ PIT8254(config, "d71054", 0); // NEC D71054GB
+
+ I8255(config, "d071055"); // NEC D71055GB
+
+ SEGA_315_5296(config, "io", 32_MHz_XTAL / 2); // divider unverified
+
+ SPEAKER(config, "mono").front_center();
+
+ ym3438_device &ymsnd(YM3438(config, "ymsnd", 32_MHz_XTAL / 4)); // divider unverified
+ ymsnd.add_route(ALL_OUTPUTS, "mono", 0.50);
+
+ UPD7759(config, m_upd7759).add_route(ALL_OUTPUTS, "mono", 0.50);
+}
+
+
+ROM_START( unkhockey )
+ ROM_REGION( 0x80000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "epr-19513a.ic34", 0x00000, 0x80000, CRC(bf4228af) SHA1(817a96753bee081a9a34052f735403f9b8c167dc) )
+
+ ROM_REGION( 0x20000, "upd", 0 )
+ ROM_LOAD( "epr-19514.ic2", 0x00000, 0x20000, CRC(71342fbc) SHA1(36c9f57da3749f9151e37a7799c23351e4313dea) ) // contents only up to ~ 0x18000
+ ROM_IGNORE( 0x60000 ) // 11xxxxxxxxxxxxxxxxx = 0xFF
+ROM_END
+
+} // Anonymous namespace
+
+GAME( 199?, unkhockey, 0, unkhockey, unkhockey, unkhockey_state, empty_init, ROT0, "Sega", "unknown Sega air hockey game", MACHINE_IS_SKELETON_MECHANICAL )