diff options
author | 2022-08-18 01:11:58 +0200 | |
---|---|---|
committer | 2022-08-18 01:16:46 +0200 | |
commit | 77e0488424c8e56d7c6bc910817e1464043a89c8 (patch) | |
tree | 10a6462f02537e373d81b815e7f9f2ef8c4242b2 | |
parent | cfbffd321529cc21a5880e16c6a66c750f3b3e3b (diff) |
New machines marked as NOT_WORKING
----------------------------------
Hit Parade 108 / 144 / 160 [hap, Sean Riddle]
-rw-r--r-- | src/mame/arcade.flt | 1 | ||||
-rw-r--r-- | src/mame/atari/hitparade.cpp | 224 | ||||
-rw-r--r-- | src/mame/handheld/hh_tms1k.cpp | 4 | ||||
-rw-r--r-- | src/mame/layout/hitparade.lay | 39 | ||||
-rw-r--r-- | src/mame/mame.lst | 3 |
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 |