mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +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/gumrally.cpp
|
||||
atari/harddriv.cpp
|
||||
atari/hitparade.cpp
|
||||
atari/irobot.cpp
|
||||
atari/jaguar.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
|
||||
@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
|
||||
|
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
|
||||
super21 // (c) 1978 Mirco
|
||||
|
||||
@source:atari/hitparade.cpp
|
||||
hitpar
|
||||
|
||||
@source:misc/hitpoker.cpp
|
||||
hitpoker // (c) 1997
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user