mirror of
https://github.com/holub/mame
synced 2025-07-01 00:09:18 +03:00
New machines marked as NOT_WORKING
---------------------------------- Hit Parade 108 / 144 / 160 [hap, Sean Riddle]
This commit is contained in:
parent
cfbffd3215
commit
77e0488424
@ -72,6 +72,7 @@ atari/foodf.cpp
|
|||||||
atari/gauntlet.cpp
|
atari/gauntlet.cpp
|
||||||
atari/gumrally.cpp
|
atari/gumrally.cpp
|
||||||
atari/harddriv.cpp
|
atari/harddriv.cpp
|
||||||
|
atari/hitparade.cpp
|
||||||
atari/irobot.cpp
|
atari/irobot.cpp
|
||||||
atari/jaguar.cpp
|
atari/jaguar.cpp
|
||||||
atari/jedi.cpp
|
atari/jedi.cpp
|
||||||
|
224
src/mame/atari/hitparade.cpp
Normal file
224
src/mame/atari/hitparade.cpp
Normal file
@ -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 )
|
@ -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
|
@MP1525 TMS1170 1980, Coleco Head to Head: Electronic Baseball
|
||||||
@MP1604 TMS1370 1982, Gakken Invader 2000/Tandy Cosmic Fire Away 3000
|
@MP1604 TMS1370 1982, Gakken Invader 2000/Tandy Cosmic Fire Away 3000
|
||||||
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
|
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
|
||||||
*MP2012 TMS1300 1977, Atari Europe Hit Parade 144 (jukebox) (have decap/dump)
|
MP2012 TMS1300 1977, Atari Europe Hit Parade 144 (jukebox) -> atari/hitparade.cpp
|
||||||
*MP2032 TMS1300 1980, Atari Europe unknown (jukebox)
|
*MP2032 TMS1300 1980, Atari Europe unknown (jukebox, same PCB as the other one)
|
||||||
@MP2105 TMS1370 1979, Gakken/Entex Poker (6005)
|
@MP2105 TMS1370 1979, Gakken/Entex Poker (6005)
|
||||||
@MP2110 TMS1370 1980, Gakken Invader/Tandy Fire Away
|
@MP2110 TMS1370 1980, Gakken Invader/Tandy Fire Away
|
||||||
@MP2139 TMS1370 1981, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away
|
@MP2139 TMS1370 1981, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away
|
||||||
|
39
src/mame/layout/hitparade.lay
Normal file
39
src/mame/layout/hitparade.lay
Normal file
@ -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>
|
@ -16973,6 +16973,9 @@ hitme1 // (c) 05/1976 Ramtek
|
|||||||
mirco21 // (c) 08/1976 Mirco
|
mirco21 // (c) 08/1976 Mirco
|
||||||
super21 // (c) 1978 Mirco
|
super21 // (c) 1978 Mirco
|
||||||
|
|
||||||
|
@source:atari/hitparade.cpp
|
||||||
|
hitpar
|
||||||
|
|
||||||
@source:misc/hitpoker.cpp
|
@source:misc/hitpoker.cpp
|
||||||
hitpoker // (c) 1997
|
hitpoker // (c) 1997
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user