summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2022-08-18 01:11:58 +0200
committer hap <happppp@users.noreply.github.com>2022-08-18 01:16:46 +0200
commit77e0488424c8e56d7c6bc910817e1464043a89c8 (patch)
tree10a6462f02537e373d81b815e7f9f2ef8c4242b2
parentcfbffd321529cc21a5880e16c6a66c750f3b3e3b (diff)
New machines marked as NOT_WORKING
---------------------------------- Hit Parade 108 / 144 / 160 [hap, Sean Riddle]
-rw-r--r--src/mame/arcade.flt1
-rw-r--r--src/mame/atari/hitparade.cpp224
-rw-r--r--src/mame/handheld/hh_tms1k.cpp4
-rw-r--r--src/mame/layout/hitparade.lay39
-rw-r--r--src/mame/mame.lst3
5 files changed, 269 insertions, 2 deletions
diff --git a/src/mame/arcade.flt b/src/mame/arcade.flt
index c5c0ef56a7c..b60a1df19f6 100644
--- a/src/mame/arcade.flt
+++ b/src/mame/arcade.flt
@@ -72,6 +72,7 @@ atari/foodf.cpp
atari/gauntlet.cpp
atari/gumrally.cpp
atari/harddriv.cpp
+atari/hitparade.cpp
atari/irobot.cpp
atari/jaguar.cpp
atari/jedi.cpp
diff --git a/src/mame/atari/hitparade.cpp b/src/mame/atari/hitparade.cpp
new file mode 100644
index 00000000000..7f8862c54b2
--- /dev/null
+++ b/src/mame/atari/hitparade.cpp
@@ -0,0 +1,224 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+// thanks-to:Sean Riddle
+/******************************************************************************
+
+Atari Europe Hit Parade series jukeboxes
+
+Atari Europe is unrelated to the modern Atari Europe, or Infogrames.
+It was a French jukebox company that was partially owned by Atari for a while
+in the mid-1970s. It gets a bit confusing, for more information, Google for
+Socodimex, Electro-Kicker, Europe Electronique.
+
+There are probably more jukeboxes on similar hardware.
+
+Hardware notes:
+- TMS1300NL MP2012 (die label: 1100B, MP2012)
+- 512 nibbles RAM (2*MCM5101 or equivalent), kept alive by a big capacitor
+- keypad interface, 8 7segs
+- electromechanical stuff for the actual jukebox
+
+TODO:
+- why does the display blink? because no songs are in memory?
+- PA,PB sensors at K1,K2 + R8
+- P1,P2 sensors at K1,K2 (not muxed)
+- motor triggers (which R pins?)
+- CPU speed is guessed
+
+******************************************************************************/
+
+#include "emu.h"
+
+#include "cpu/tms1000/tms1100.h"
+#include "machine/nvram.h"
+#include "video/pwm.h"
+
+#include "hitparade.lh"
+
+
+namespace {
+
+class hitpar_state : public driver_device
+{
+public:
+ hitpar_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_nvram(*this, "nvram", 0x200),
+ m_display(*this, "display"),
+ m_inputs(*this, "IN.%u", 0)
+ { }
+
+ void hitpar(machine_config &config);
+
+protected:
+ virtual void machine_start() override;
+
+private:
+ required_device<tms1k_base_device> m_maincpu;
+ memory_share_creator<u8> m_nvram;
+ required_device<pwm_display_device> m_display;
+ required_ioport_array<6> m_inputs;
+
+ void write_r(u32 data);
+ void write_o(u16 data);
+ u8 read_k();
+
+ u32 m_r = 0;
+ u16 m_o = 0;
+};
+
+void hitpar_state::machine_start()
+{
+ // register for savestates
+ save_item(NAME(m_r));
+ save_item(NAME(m_o));
+}
+
+
+
+/******************************************************************************
+ I/O
+******************************************************************************/
+
+void hitpar_state::write_r(u32 data)
+{
+ // R14,R15: RAM CS
+ // R13: RAM R/W (write on falling edge)
+ // R0-R7: RAM address
+ if (BIT(m_r, 13) && !BIT(data, 13))
+ {
+ if (BIT(data, 14))
+ m_nvram[data & 0xff] = m_o & 0xf;
+ if (BIT(data, 15))
+ m_nvram[(data & 0xff) | 0x100] = m_o & 0xf;
+ }
+
+ // R0-R7: digit select
+ // R0-R5: input mux
+ // R8: sensors mux
+ m_display->write_my(data);
+ m_r = data;
+}
+
+void hitpar_state::write_o(u16 data)
+{
+ // O0-O6: digit segment data
+ // O7: mask digit segments A-D
+ u8 mask = (data & 0x80) ? 0x7f : 0x70;
+ m_display->write_mx(data & mask);
+
+ // O0-O3: RAM data
+ m_o = data;
+}
+
+u8 hitpar_state::read_k()
+{
+ u8 data = 0;
+
+ // read RAM
+ if (BIT(data, 14))
+ data |= m_nvram[m_r & 0xff];
+ if (BIT(data, 15))
+ data |= m_nvram[(m_r & 0xff) | 0x100];
+
+ // read inputs
+ for (int i = 0; i < 6; i++)
+ if (BIT(m_r, i))
+ data |= m_inputs[i]->read();
+
+ return data;
+}
+
+
+
+/******************************************************************************
+ Input Ports
+******************************************************************************/
+
+static INPUT_PORTS_START( hitpar )
+ PORT_START("IN.0")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+
+ PORT_START("IN.1")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Hit")
+
+ PORT_START("IN.2")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SERVICE3) PORT_NAME("Service Tot")
+
+ PORT_START("IN.3")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Reset")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_SERVICE2) PORT_NAME("Service Sel")
+ PORT_SERVICE( 0x04, IP_ACTIVE_HIGH )
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_SERVICE1) PORT_NAME("Service Credit")
+
+ PORT_START("IN.4")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN) // income-total
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN)
+
+ PORT_START("IN.5")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_COIN1)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_COIN2)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_COIN3)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_COIN4)
+INPUT_PORTS_END
+
+
+
+/******************************************************************************
+ Machine Configs
+******************************************************************************/
+
+void hitpar_state::hitpar(machine_config &config)
+{
+ // basic machine hardware
+ TMS1300(config, m_maincpu, 350000); // guessed
+ m_maincpu->read_k().set(FUNC(hitpar_state::read_k));
+ m_maincpu->write_r().set(FUNC(hitpar_state::write_r));
+ m_maincpu->write_o().set(FUNC(hitpar_state::write_o));
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ // video hardware
+ PWM_DISPLAY(config, m_display).set_size(8, 7);
+ m_display->set_segmask(0xff, 0x7f);
+ config.set_default_layout(layout_hitparade);
+}
+
+
+
+/******************************************************************************
+ ROM Definitions
+******************************************************************************/
+
+ROM_START( hitpar )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp2012", 0x0000, 0x0800, CRC(6c5d84a2) SHA1(0f028d36eaf4cb07d0b28b94e0bfa551d78c5db8) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_common2_micro.pla", 0, 867, CRC(7cc90264) SHA1(c6e1cf1ffb178061da9e31858514f7cd94e86990) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_hitpar_output.pla", 0, 365, CRC(19feb313) SHA1(7a124e313c0339c1c4983656ab07eb7128a396d4) )
+ROM_END
+
+} // anonymous namespace
+
+
+
+/******************************************************************************
+ Drivers
+******************************************************************************/
+
+// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
+SYST( 1977, hitpar, 0, 0, hitpar, hitpar, hitpar_state, empty_init, "Atari Europe", "Hit Parade 108 / 144 / 160", MACHINE_SUPPORTS_SAVE | MACHINE_MECHANICAL | MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
diff --git a/src/mame/handheld/hh_tms1k.cpp b/src/mame/handheld/hh_tms1k.cpp
index 03ad802c0d0..816074da310 100644
--- a/src/mame/handheld/hh_tms1k.cpp
+++ b/src/mame/handheld/hh_tms1k.cpp
@@ -112,8 +112,8 @@ on Joerg Woerner's datamath.org: http://www.datamath.org/IC_List.htm
@MP1525 TMS1170 1980, Coleco Head to Head: Electronic Baseball
@MP1604 TMS1370 1982, Gakken Invader 2000/Tandy Cosmic Fire Away 3000
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
- *MP2012 TMS1300 1977, Atari Europe Hit Parade 144 (jukebox) (have decap/dump)
- *MP2032 TMS1300 1980, Atari Europe unknown (jukebox)
+ MP2012 TMS1300 1977, Atari Europe Hit Parade 144 (jukebox) -> atari/hitparade.cpp
+ *MP2032 TMS1300 1980, Atari Europe unknown (jukebox, same PCB as the other one)
@MP2105 TMS1370 1979, Gakken/Entex Poker (6005)
@MP2110 TMS1370 1980, Gakken Invader/Tandy Fire Away
@MP2139 TMS1370 1981, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away
diff --git a/src/mame/layout/hitparade.lay b/src/mame/layout/hitparade.lay
new file mode 100644
index 00000000000..daff9f51987
--- /dev/null
+++ b/src/mame/layout/hitparade.lay
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<!--
+license:CC0
+-->
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="text_l1"><text string="playing" align="2"><color red="0.6" green="0.1" blue="0.1" /></text></element>
+ <element name="text_l2"><text string="credit" align="2"><color red="0.6" green="0.1" blue="0.1" /></text></element>
+ <element name="text_l3"><text string="selection" align="2"><color red="0.6" green="0.1" blue="0.1" /></text></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
+ </element>
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="-26" right="37" top="-3" bottom="51" />
+
+ <element ref="text_l1"><bounds x="-30" y="3.5" width="27" height="6" /></element>
+ <element ref="text_l2"><bounds x="-30" y="20.5" width="27" height="6" /></element>
+ <element ref="text_l3"><bounds x="-30" y="37.5" width="27" height="6" /></element>
+
+ <element name="digit7" ref="digit"><bounds x="0" y="0" width="10" height="14" /></element>
+ <element name="digit6" ref="digit"><bounds x="12" y="0" width="10" height="14" /></element>
+ <element name="digit5" ref="digit"><bounds x="24" y="0" width="10" height="14" /></element>
+
+ <element name="digit4" ref="digit"><bounds x="12" y="17" width="10" height="14" /></element>
+ <element name="digit3" ref="digit"><bounds x="24" y="17" width="10" height="14" /></element>
+
+ <element name="digit2" ref="digit"><bounds x="0" y="34" width="10" height="14" /></element>
+ <element name="digit1" ref="digit"><bounds x="12" y="34" width="10" height="14" /></element>
+ <element name="digit0" ref="digit"><bounds x="24" y="34" width="10" height="14" /></element>
+
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 7448d976d39..ef8ed860e06 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -16973,6 +16973,9 @@ hitme1 // (c) 05/1976 Ramtek
mirco21 // (c) 08/1976 Mirco
super21 // (c) 1978 Mirco
+@source:atari/hitparade.cpp
+hitpar
+
@source:misc/hitpoker.cpp
hitpoker // (c) 1997