Convert NeoGeo EL panel outputs to lamps - it uses six outputs from a 1-of-8 decoder to enable EL panels to illiminate the selected game logo.

Get rid of more uses of inefficient output methods. (nw)
This commit is contained in:
Vas Crabb 2018-03-27 17:12:32 +11:00
parent 490ebfd434
commit d3261eeea4
15 changed files with 419 additions and 379 deletions

View File

@ -33,6 +33,15 @@ Bugs
#include "aim65.lh"
/** R6502 Clock.
*
* The R6502 on AIM65 operates at 1 MHz. The frequency reference is a 4 MHz
* crystal controlled oscillator. Dual D-type flip-flop Z10 divides the 4 MHz
* signal by four to drive the R6502 phase 0 (O0) input with a 1 MHz clock.
*/
static constexpr XTAL AIM65_CLOCK(4_MHz_XTAL / 4);
/***************************************************************************
ADDRESS MAPS
***************************************************************************/

View File

@ -8,14 +8,14 @@
Audio: YM2151 @ 3.58MHz, MSM5205 @ 384kHz
*/
#include "emu.h"
#include "machine/decopincpu.h"
#include "machine/genpin.h"
#include "cpu/m6800/m6800.h"
#include "cpu/m6809/m6809.h"
#include "machine/6821pia.h"
#include "machine/decopincpu.h"
#include "sound/msm5205.h"
#include "sound/ym2151.h"
#include "speaker.h"
@ -32,43 +32,32 @@
// Data East CPU board is similar to Williams System 11, but without the generic audio board.
// For now, we'll presume the timings are the same.
// 6808 CPU's input clock is 4MHz
// but because it has an internal /4 divider, its E clock runs at 1/4 that frequency
#define E_CLOCK (XTAL(4'000'000)/4)
// Length of time in cycles between IRQs on the main 6808 CPU
// This length is determined by the settings of the W14 and W15 jumpers
// It can be 0x300, 0x380, 0x700 or 0x780 cycles long.
// IRQ length is always 32 cycles
#define S11_IRQ_CYCLES 0x380
class de_2_state : public genpin_class
{
public:
de_2_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag),
m_ym2151(*this, "ym2151"),
m_audiocpu(*this, "audiocpu"),
m_msm5205(*this, "msm5205"),
m_sample_bank(*this, "sample_bank")
: genpin_class(mconfig, type, tag)
, m_ym2151(*this, "ym2151")
, m_audiocpu(*this, "audiocpu")
, m_msm5205(*this, "msm5205")
, m_sample_bank(*this, "sample_bank")
, m_digits(*this, "digit%u", 0U)
, m_diag_digit(*this, "digit60")
{ }
void de_bg_audio(machine_config &config);
void de_type2(machine_config &config);
void de_type1(machine_config &config);
void de_type2(machine_config &config);
void de_type2_alpha3(machine_config &config);
void de_type3(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
void de_bg_audio(machine_config &config);
void de_2_map(address_map &map);
void de_2_audio_map(address_map &map);
protected:
// devices
required_device<ym2151_device> m_ym2151;
public:
DECLARE_DRIVER_INIT(de_2);
DECLARE_MACHINE_RESET(de_2);
DECLARE_MACHINE_RESET(de_2_alpha3);
DECLARE_WRITE8_MEMBER(sample_w);
DECLARE_WRITE8_MEMBER(pia34_pa_w);
DECLARE_WRITE8_MEMBER(type2alpha3_pia34_pa_w);
@ -77,18 +66,18 @@ public:
DECLARE_WRITE8_MEMBER(switch_w);
DECLARE_WRITE8_MEMBER(pia2c_pa_w);
DECLARE_WRITE8_MEMBER(pia2c_pb_w);
DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2
DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } // comma3&4
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } // comma1&2
DECLARE_READ8_MEMBER(pia28_w7_r);
DECLARE_WRITE8_MEMBER(dig0_w);
DECLARE_WRITE8_MEMBER(dig1_w);
DECLARE_WRITE8_MEMBER(type2alpha3_dig1_w);
DECLARE_WRITE8_MEMBER(alpha3_dig1_w);
DECLARE_WRITE8_MEMBER(lamp0_w);
DECLARE_WRITE8_MEMBER(lamp1_w) { };
DECLARE_WRITE8_MEMBER(lamp1_w) { }
DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
DECLARE_WRITE_LINE_MEMBER(msm5205_irq_w);
DECLARE_WRITE8_MEMBER(sol2_w) { }; // solenoids 8-15
DECLARE_WRITE8_MEMBER(sol2_w) { } // solenoids 8-15
DECLARE_WRITE8_MEMBER(sol3_w);
DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
@ -100,12 +89,17 @@ public:
DECLARE_READ8_MEMBER(display_r);
DECLARE_WRITE8_MEMBER(display_w);
DECLARE_WRITE8_MEMBER(type2alpha3_display_w);
DECLARE_WRITE8_MEMBER(alpha3_display_w);
DECLARE_WRITE8_MEMBER(type3_display_w);
DECLARE_WRITE8_MEMBER(lamps_w);
// devices
required_device<ym2151_device> m_ym2151;
required_device<cpu_device> m_audiocpu;
required_device<msm5205_device> m_msm5205;
required_memory_bank m_sample_bank;
output_finder<32> m_digits;
output_finder<> m_diag_digit;
uint8_t m_sample_data;
bool m_more_data;
bool m_nmi_enable;
@ -123,6 +117,7 @@ private:
uint8_t m_msm_prescaler;
};
ADDRESS_MAP_START(de_2_state::de_2_map)
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x2100, 0x2103) AM_DEVREADWRITE("pia21", pia6821_device, read, write) // sound+solenoids
@ -222,15 +217,22 @@ static INPUT_PORTS_START( de_2 )
INPUT_PORTS_END
MACHINE_RESET_MEMBER(de_2_state, de_2)
void de_2_state::machine_reset()
{
genpin_class::machine_reset();
m_sample_bank->set_entry(0);
m_more_data = false;
}
DRIVER_INIT_MEMBER(de_2_state, de_2)
void de_2_state::machine_start()
{
uint8_t *ROM = memregion("sound1")->base();
genpin_class::machine_start();
m_digits.resolve();
m_diag_digit.resolve();
uint8_t *const ROM = memregion("sound1")->base();
m_sample_bank->configure_entries(0, 16, &ROM[0x0000], 0x4000);
m_sample_bank->set_entry(0);
}
@ -285,7 +287,7 @@ WRITE8_MEMBER( de_2_state::dig0_w )
data &= 0x7f;
m_strobe = data & 15;
m_diag = (data & 0x70) >> 4;
output().set_digit_value(60, patterns[data>>4]); // diag digit
m_diag_digit = patterns[data>>4]; // diag digit
m_segment1 = 0;
m_segment2 = 0;
}
@ -296,7 +298,7 @@ WRITE8_MEMBER( de_2_state::dig1_w )
m_segment2 |= 0x30000;
if ((m_segment2 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000;
}
}
@ -307,7 +309,7 @@ WRITE8_MEMBER( de_2_state::type2alpha3_dig1_w )
m_segment2 |= 0x20000;
if ((m_segment2 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000;
}
}
@ -318,7 +320,7 @@ WRITE8_MEMBER( de_2_state::alpha3_dig1_w )
m_segment2 |= 0x20000;
if ((m_segment2 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000;
}
}
@ -340,7 +342,7 @@ WRITE8_MEMBER( de_2_state::pia2c_pa_w )
m_segment1 |= 0x10000;
if ((m_segment1 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment1 |= 0x40000;
}
}
@ -351,7 +353,7 @@ WRITE8_MEMBER( de_2_state::pia2c_pb_w )
m_segment1 |= 0x20000;
if ((m_segment1 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment1 |= 0x40000;
}
}
@ -391,7 +393,7 @@ WRITE8_MEMBER( de_2_state::type2alpha3_pia34_pa_w )
m_segment2 |= 0x10000;
if ((m_segment2 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000;
}
}
@ -402,7 +404,7 @@ WRITE8_MEMBER( de_2_state::alpha3_pia34_pa_w )
m_segment2 |= 0x10000;
if ((m_segment2 & 0x70000) == 0x30000)
{
output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0));
m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
m_segment2 |= 0x40000;
}
}
@ -490,7 +492,7 @@ WRITE8_MEMBER(de_2_state::type2alpha3_display_w)
}
}
WRITE8_MEMBER(de_2_state::alpha3_display_w)
WRITE8_MEMBER(de_2_state::type3_display_w)
{
switch(offset)
{
@ -550,7 +552,6 @@ MACHINE_CONFIG_START(de_2_state::de_type1)
MCFG_DECOCPU_SOUNDLATCH(WRITE8(de_2_state,sound_w))
MCFG_DECOCPU_SWITCH(READ8(de_2_state,switch_r),WRITE8(de_2_state,switch_w))
MCFG_DECOCPU_LAMP(WRITE8(de_2_state,lamps_w))
MCFG_MACHINE_RESET_OVERRIDE(de_2_state, de_2)
/* Video */
MCFG_DEFAULT_LAYOUT(layout_de2)
@ -566,7 +567,6 @@ MACHINE_CONFIG_START(de_2_state::de_type2)
MCFG_DECOCPU_SOUNDLATCH(WRITE8(de_2_state,sound_w))
MCFG_DECOCPU_SWITCH(READ8(de_2_state,switch_r),WRITE8(de_2_state,switch_w))
MCFG_DECOCPU_LAMP(WRITE8(de_2_state,lamps_w))
MCFG_MACHINE_RESET_OVERRIDE(de_2_state, de_2)
/* Video */
MCFG_DEFAULT_LAYOUT(layout_de2)
@ -582,7 +582,6 @@ MACHINE_CONFIG_START(de_2_state::de_type2_alpha3)
MCFG_DECOCPU_SOUNDLATCH(WRITE8(de_2_state,sound_w))
MCFG_DECOCPU_SWITCH(READ8(de_2_state,switch_r),WRITE8(de_2_state,switch_w))
MCFG_DECOCPU_LAMP(WRITE8(de_2_state,lamps_w))
MCFG_MACHINE_RESET_OVERRIDE(de_2_state, de_2)
/* Video */
MCFG_DEFAULT_LAYOUT(layout_de2a3)
@ -594,11 +593,10 @@ MACHINE_CONFIG_END
MACHINE_CONFIG_START(de_2_state::de_type3)
/* basic machine hardware */
MCFG_DECOCPU_TYPE3_ADD("decocpu", XTAL(8'000'000) / 2, ":maincpu")
MCFG_DECOCPU_DISPLAY(READ8(de_2_state,display_r),WRITE8(de_2_state,alpha3_display_w))
MCFG_DECOCPU_DISPLAY(READ8(de_2_state,display_r),WRITE8(de_2_state,type3_display_w))
MCFG_DECOCPU_SOUNDLATCH(WRITE8(de_2_state,sound_w))
MCFG_DECOCPU_SWITCH(READ8(de_2_state,switch_r),WRITE8(de_2_state,switch_w))
MCFG_DECOCPU_LAMP(WRITE8(de_2_state,lamps_w))
MCFG_MACHINE_RESET_OVERRIDE(de_2_state, de_2)
/* Video */
MCFG_DEFAULT_LAYOUT(layout_de2a3)
@ -927,29 +925,29 @@ ROM_START(torp_a16)
ROM_END
GAME(1990, bttf_a28, 0, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Back to the Future - The Pinball (2.8)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a27, bttf_a28, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Back to the Future - The Pinball (2.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a20, bttf_a28, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Back to the Future - The Pinball (2.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a21, bttf_a28, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Back to the Future - The Pinball (2.1)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(199?, bttf_g27, bttf_a28, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Back to the Future - The Pinball (2.7, Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, kiko_a10, 0, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "King Kong (1.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_a83, 0, de_type1, de_2, de_2_state, de_2, ROT0, "Data East", "Laser War (8.3)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_a81, lwar_a83, de_type1, de_2, de_2_state, de_2, ROT0, "Data East", "Laser War (8.1)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_e90, lwar_a83, de_type1, de_2, de_2_state, de_2, ROT0, "Data East", "Laser War (9.0 Europe)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mnfb_c29, 0, de_type2_alpha3, de_2, de_2_state, de_2, ROT0, "Data East", "Monday Night Football (2.9, 50cts)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mnfb_c27, mnfb_c29, de_type2_alpha3, de_2, de_2_state, de_2, ROT0, "Data East", "Monday Night Football (2.7, 50cts)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, poto_a32, 0, de_type2_alpha3, de_2, de_2_state, de_2, ROT0, "Data East", "The Phantom of the Opera (3.2)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, poto_a29, poto_a32, de_type2_alpha3, de_2, de_2_state, de_2, ROT0, "Data East", "The Phantom of the Opera (2.9)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, play_a24, 0, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Playboy 35th Anniversary (2.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, robo_a34, 0, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Robocop (3.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, robo_a30, robo_a34, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "Robocop (3.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_a26, 0, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Secret Service (2.6)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_b26, ssvc_a26, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Secret Service (2.6 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_a42, ssvc_a26, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Secret Service (4.2 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, simp_a27, 0, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "The Simpsons (2.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, simp_a20, simp_a27, de_type3, de_2, de_2_state, de_2, ROT0, "Data East", "The Simpsons (2.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_a24, 0, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Time Machine (2.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_a18, tmac_a24, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Time Machine (1.8)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_g18, tmac_a24, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Time Machine (1.8, Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, torp_e21, 0, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Torpedo Alley (2.1, Europe)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, torp_a16, torp_e21, de_type2, de_2, de_2_state, de_2, ROT0, "Data East", "Torpedo Alley (1.6)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a28, 0, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Back to the Future - The Pinball (2.8)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a27, bttf_a28, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Back to the Future - The Pinball (2.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a20, bttf_a28, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Back to the Future - The Pinball (2.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, bttf_a21, bttf_a28, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Back to the Future - The Pinball (2.1)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(199?, bttf_g27, bttf_a28, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Back to the Future - The Pinball (2.7, Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, kiko_a10, 0, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "King Kong (1.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_a83, 0, de_type1, de_2, de_2_state, 0, ROT0, "Data East", "Laser War (8.3)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_a81, lwar_a83, de_type1, de_2, de_2_state, 0, ROT0, "Data East", "Laser War (8.1)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1987, lwar_e90, lwar_a83, de_type1, de_2, de_2_state, 0, ROT0, "Data East", "Laser War (9.0 Europe)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mnfb_c29, 0, de_type2_alpha3, de_2, de_2_state, 0, ROT0, "Data East", "Monday Night Football (2.9, 50cts)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, mnfb_c27, mnfb_c29, de_type2_alpha3, de_2, de_2_state, 0, ROT0, "Data East", "Monday Night Football (2.7, 50cts)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, poto_a32, 0, de_type2_alpha3, de_2, de_2_state, 0, ROT0, "Data East", "The Phantom of the Opera (3.2)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, poto_a29, poto_a32, de_type2_alpha3, de_2, de_2_state, 0, ROT0, "Data East", "The Phantom of the Opera (2.9)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, play_a24, 0, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Playboy 35th Anniversary (2.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, robo_a34, 0, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Robocop (3.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1989, robo_a30, robo_a34, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "Robocop (3.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_a26, 0, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Secret Service (2.6)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_b26, ssvc_a26, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Secret Service (2.6 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, ssvc_a42, ssvc_a26, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Secret Service (4.2 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, simp_a27, 0, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "The Simpsons (2.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1990, simp_a20, simp_a27, de_type3, de_2, de_2_state, 0, ROT0, "Data East", "The Simpsons (2.0)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_a24, 0, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Time Machine (2.4)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_a18, tmac_a24, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Time Machine (1.8)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, tmac_g18, tmac_a24, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Time Machine (1.8, Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, torp_e21, 0, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Torpedo Alley (2.1, Europe)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1988, torp_a16, torp_e21, de_type2, de_2, de_2_state, 0, ROT0, "Data East", "Torpedo Alley (1.6)", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -4,45 +4,43 @@
DataEast/Sega Version 3
*/
#include "emu.h"
#include "audio/decobsmt.h"
#include "machine/decopincpu.h"
#include "machine/genpin.h"
#include "cpu/m6800/m6800.h"
#include "cpu/m6809/m6809.h"
#include "machine/6821pia.h"
#include "machine/decopincpu.h"
#include "audio/decobsmt.h"
#include "machine/nvram.h"
#include "video/decodmd1.h"
#include "video/decodmd2.h"
#include "machine/genpin.h"
#include "machine/nvram.h"
// Data East CPU board is similar to Williams System 11, but without the generic audio board.
// For now, we'll presume the timings are the same.
// 6808 CPU's input clock is 4MHz
// but because it has an internal /4 divider, its E clock runs at 1/4 that frequency
#define E_CLOCK (XTAL(4'000'000)/4)
// Length of time in cycles between IRQs on the main 6808 CPU
// This length is determined by the settings of the W14 and W15 jumpers
// It can be 0x300, 0x380, 0x700 or 0x780 cycles long.
// IRQ length is always 32 cycles
#define S11_IRQ_CYCLES 0x380
extern const char layout_pinball[];
class de_3_state : public genpin_class
{
public:
de_3_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag),
m_dmdtype1(*this, "decodmd1"),
m_dmdtype2(*this, "decodmd2"),
m_decobsmt(*this, "decobsmt")
: genpin_class(mconfig, type, tag)
, m_dmdtype1(*this, "decodmd1")
, m_dmdtype2(*this, "decodmd2")
, m_decobsmt(*this, "decobsmt")
// , m_digits(*this, "digit%u", 0U)
// , m_diag_digit(*this, "digit60")
{ }
// devices
optional_device<decodmd_type1_device> m_dmdtype1;
optional_device<decodmd_type2_device> m_dmdtype2;
void de_3_dmd1(machine_config &config);
void de_3_dmd2(machine_config &config);
protected:
// driver_device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_WRITE8_MEMBER(pia34_pa_w);
DECLARE_READ8_MEMBER(switch_r);
@ -50,40 +48,42 @@ public:
DECLARE_WRITE8_MEMBER(pia2c_pa_w);
DECLARE_READ8_MEMBER(pia2c_pb_r);
DECLARE_WRITE8_MEMBER(pia2c_pb_w);
DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { }; // comma3&4
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { }; // comma1&2
DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } // comma3&4
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } // comma1&2
DECLARE_READ8_MEMBER(pia28_w7_r);
DECLARE_WRITE8_MEMBER(dig0_w);
DECLARE_WRITE8_MEMBER(dig1_w);
DECLARE_WRITE8_MEMBER(lamp0_w);
DECLARE_WRITE8_MEMBER(lamp1_w) { };
DECLARE_WRITE8_MEMBER(lamp1_w) { }
//DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
//DECLARE_WRITE_LINE_MEMBER(msm5205_irq_w);
DECLARE_WRITE8_MEMBER(sol2_w) { }; // solenoids 8-15
DECLARE_WRITE8_MEMBER(sol2_w) { } // solenoids 8-15
DECLARE_WRITE8_MEMBER(sol3_w);
DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_WRITE8_MEMBER(dac_w) { };
DECLARE_WRITE8_MEMBER(dac_w) { }
DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
DECLARE_READ8_MEMBER(dmd_status_r);
// DECLARE_READ8_MEMBER(sound_latch_r);
// DECLARE_WRITE8_MEMBER(sample_bank_w);
required_device<decobsmt_device> m_decobsmt;
bool m_nmi_enable;
// devcb callbacks
DECLARE_READ8_MEMBER(display_r);
DECLARE_WRITE8_MEMBER(display_w);
DECLARE_WRITE8_MEMBER(lamps_w);
void de_3(machine_config &config);
void de_3_dmd1(machine_config &config);
void de_3_dmd2(machine_config &config);
protected:
// driver_device overrides
virtual void machine_reset() override;
// devices
optional_device<decodmd_type1_device> m_dmdtype1;
optional_device<decodmd_type2_device> m_dmdtype2;
required_device<decobsmt_device> m_decobsmt;
// output_finder<32> m_digits;
// output_finder<> m_diag_digit;
bool m_nmi_enable;
private:
// uint32_t m_segment1;
// uint32_t m_segment2;
@ -92,9 +92,6 @@ private:
uint8_t m_diag;
bool m_ca1;
uint8_t m_sound_data;
public:
DECLARE_DRIVER_INIT(de_3);
};
@ -202,7 +199,7 @@ WRITE8_MEMBER( de_3_state::dig0_w )
// data &= 0x7f;
// m_strobe = data & 15;
// m_diag = (data & 0x70) >> 4;
// output().set_digit_value(60, patterns[data>>4]); // diag digit
// m_diag_digit = patterns[data>>4]; // diag digit
// m_segment1 = 0;
// m_segment2 = 0;
}
@ -214,9 +211,9 @@ WRITE8_MEMBER( de_3_state::dig1_w )
// if ((m_segment2 & 0x70000) == 0x30000)
// {
// if(m_is_alpha3) // Alphanumeric type 2 uses 7 segment LEDs on the bottom row, type 3 uses 14 segment LEDs
// output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
// m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
// else
// output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0));
// m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
// m_segment2 |= 0x40000;
// }
}
@ -249,7 +246,7 @@ WRITE8_MEMBER( de_3_state::pia2c_pa_w )
// m_segment1 |= 0x10000;
// if ((m_segment1 & 0x70000) == 0x30000)
// {
// output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
// m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
// m_segment1 |= 0x40000;
// }
}
@ -281,7 +278,7 @@ WRITE8_MEMBER( de_3_state::pia2c_pb_w )
// m_segment1 |= 0x20000;
// if ((m_segment1 & 0x70000) == 0x30000)
// {
// output().set_digit_value(m_strobe, bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
// m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
// m_segment1 |= 0x40000;
// }
}
@ -315,7 +312,7 @@ WRITE8_MEMBER( de_3_state::pia34_pa_w )
// m_segment2 |= 0x10000;
// if ((m_segment2 & 0x70000) == 0x30000)
// {
// output().set_digit_value(m_strobe+16, bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0));
// m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
// m_segment2 |= 0x40000;
// }
}
@ -386,12 +383,17 @@ WRITE8_MEMBER(de_3_state::lamps_w)
}
void de_3_state::machine_reset()
void de_3_state::machine_start()
{
genpin_class::machine_start();
// m_digits.resolve();
// m_diag_digit.resolve();
}
DRIVER_INIT_MEMBER(de_3_state,de_3)
void de_3_state::machine_reset()
{
genpin_class::machine_reset();
}
MACHINE_CONFIG_START(de_3_state::de_3)
@ -1257,60 +1259,60 @@ ROM_START(wwfr_103)
ROM_END
GAME(1993, rab_320, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (3.20)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, rab_130, rab_320, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (1.30)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, rab_103, rab_320, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (1.03 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, aar_101, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Aaron Spelling (1.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_103, 0, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Batman (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_101, btmn_103, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Batman (1.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_g13, btmn_103, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Batman (1.03 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_106, btmn_103, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Batman (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, ckpt_a17, 0, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Checkpoint (1.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Guns N Roses (3.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300f, gnr_300, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Guns N Roses (3.00 French)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300d, gnr_300, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Guns N Roses (3.00 Dutch)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_200, gnr_300, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Guns N Roses (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_408, 0, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Hook (4.08)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_401, hook_408, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Hook (4.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_401p, hook_408, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Hook (4.01 with prototype sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_404, hook_408, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Hook (4.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_513, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Jurassic Park (5.13)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_501, jupk_513, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Jurassic Park (5.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_g51, jupk_513, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Jurassic Park (5.01 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_112, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Last Action Hero (1.12)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_l104, lah_112, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Last Action Hero (1.04 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_l108, lah_112, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Last Action Hero (1.08 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_110, lah_112, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Last Action Hero (1.10)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_208, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.08)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_207, lw3_208, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.07)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_207c, lw3_208, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.07 Canada)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_205, lw3_208, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.05)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_203, lw3_208, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_200, lw3_208, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Lethal Weapon 3 (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_201, 0, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (2.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_200, trek_201, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_120, trek_201, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (1.20)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_117, trek_201, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (1.17)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_110, trek_201, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (1.10)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_11a, trek_201, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Star Trek 25th Anniversary (1.10 Alpha Display)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_106, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_106s, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.06, Display S1.05)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_104, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_103, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_g11, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.01 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_a14, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (Display Rev.1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_102, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.02)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_e12, stwr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Star Wars (1.02 England)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_303, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Tales From the Crypt (3.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_302, tftc_303, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Tales From the Crypt (3.02 Dutch)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_300, tftc_303, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Tales From the Crypt (3.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_200, tftc_303, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Tales From the Crypt (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_104, tftc_303, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "Tales From the Crypt (1.04 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_104, 0, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_104g, tmnt_104, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.04) Germany", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_103, tmnt_104, de_3_dmd1, de_3, de_3_state, de_3, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_400, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "The Who's Tommy Pinball Wizard (4.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_h30, tomy_400, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "The Who's Tommy Pinball Wizard (3.00, The Netherlands)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_102, tomy_400, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "The Who's Tommy Pinball Wizard (1.02)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, wwfr_106, 0, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "WWF Royal Rumble (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, wwfr_103, wwfr_106, de_3_dmd2, de_3, de_3_state, de_3, ROT0, "Data East", "WWF Royal Rumble (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, rab_320, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (3.20)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, rab_130, rab_320, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (1.30)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, rab_103, rab_320, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Adventures of Rocky and Bullwinkle and Friends (1.03 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, aar_101, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Aaron Spelling (1.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_103, 0, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Batman (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_101, btmn_103, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Batman (1.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_g13, btmn_103, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Batman (1.03 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, btmn_106, btmn_103, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Batman (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, ckpt_a17, 0, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Checkpoint (1.7)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Guns N Roses (3.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300f, gnr_300, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Guns N Roses (3.00 French)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_300d, gnr_300, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Guns N Roses (3.00 Dutch)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, gnr_200, gnr_300, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Guns N Roses (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_408, 0, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Hook (4.08)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_401, hook_408, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Hook (4.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_401p, hook_408, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Hook (4.01 with prototype sound)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, hook_404, hook_408, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Hook (4.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_513, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Jurassic Park (5.13)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_501, jupk_513, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Jurassic Park (5.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, jupk_g51, jupk_513, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Jurassic Park (5.01 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_112, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Last Action Hero (1.12)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_l104, lah_112, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Last Action Hero (1.04 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_l108, lah_112, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Last Action Hero (1.08 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, lah_110, lah_112, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Last Action Hero (1.10)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_208, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.08)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_207, lw3_208, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.07)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_207c, lw3_208, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.07 Canada)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_205, lw3_208, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.05)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_203, lw3_208, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, lw3_200, lw3_208, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Lethal Weapon 3 (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_201, 0, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (2.01)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_200, trek_201, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_120, trek_201, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (1.20)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_117, trek_201, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (1.17)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_110, trek_201, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (1.10)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, trek_11a, trek_201, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Star Trek 25th Anniversary (1.10 Alpha Display)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_106, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_106s, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.06, Display S1.05)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_104, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_103, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_g11, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.01 Germany)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_a14, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (Display Rev.1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_102, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.02)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1992, stwr_e12, stwr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Star Wars (1.02 England)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_303, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Tales From the Crypt (3.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_302, tftc_303, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Tales From the Crypt (3.02 Dutch)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_300, tftc_303, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Tales From the Crypt (3.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_200, tftc_303, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Tales From the Crypt (2.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1993, tftc_104, tftc_303, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "Tales From the Crypt (1.04 Spain)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_104, 0, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.04)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_104g, tmnt_104, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.04) Germany", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1991, tmnt_103, tmnt_104, de_3_dmd1, de_3, de_3_state, 0, ROT0, "Data East", "Teenage Mutant Ninja Turtles (1.03)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_400, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "The Who's Tommy Pinball Wizard (4.00)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_h30, tomy_400, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "The Who's Tommy Pinball Wizard (3.00, The Netherlands)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, tomy_102, tomy_400, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "The Who's Tommy Pinball Wizard (1.02)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, wwfr_106, 0, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "WWF Royal Rumble (1.06)", MACHINE_IS_SKELETON_MECHANICAL)
GAME(1994, wwfr_103, wwfr_106, de_3_dmd2, de_3, de_3_state, 0, ROT0, "Data East", "WWF Royal Rumble (1.03)", MACHINE_IS_SKELETON_MECHANICAL)

View File

@ -101,6 +101,7 @@ class didact_state : public driver_device
, m_led(0)
, m_rs232(*this, "rs232")
{ }
required_ioport_array<5> m_io_lines;
uint8_t m_lines[4];
uint8_t m_reset;
@ -155,13 +156,15 @@ public:
: didact_state(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_tb16_74145(*this, "tb16_74145")
, m_segments(0)
, m_pia1(*this, PIA1_TAG)
, m_pia2(*this, PIA2_TAG)
, m_7segs(*this, "digit%u", 0U)
, m_segments(0)
{ }
required_device<m6802_cpu_device> m_maincpu;
required_device<ttl74145_device> m_tb16_74145;
uint8_t m_segments;
void md6802(machine_config &config);
protected:
DECLARE_READ8_MEMBER( pia2_kbA_r );
DECLARE_WRITE8_MEMBER( pia2_kbA_w );
DECLARE_READ8_MEMBER( pia2_kbB_r );
@ -170,11 +173,16 @@ public:
virtual void machine_reset() override;
virtual void machine_start() override;
void md6802(machine_config &config);
void md6802_map(address_map &map);
protected:
private:
required_device<m6802_cpu_device> m_maincpu;
required_device<ttl74145_device> m_tb16_74145;
required_device<pia6821_device> m_pia1;
required_device<pia6821_device> m_pia2;
output_finder<6> m_7segs;
uint8_t m_segments;
};
/* Keyboard */
@ -210,16 +218,12 @@ READ8_MEMBER( md6802_state::pia2_kbA_r )
/* Pull the cathodes low enabling the correct digit and lit the segments held by port B */
WRITE8_MEMBER( md6802_state::pia2_kbA_w )
{
uint8_t digit_nbr;
// LOG("--->%s(%02x)\n", FUNCNAME, data);
digit_nbr = (data >> 4) & 0x07;
m_tb16_74145->write( digit_nbr );
uint8_t const digit_nbr((data >> 4) & 0x07);
m_tb16_74145->write(digit_nbr);
if (digit_nbr < 6)
{
output().set_digit_value( digit_nbr, m_segments);
}
m_7segs[digit_nbr] = m_segments;
}
/* PIA 2 Port B is all outputs to drive the display so it is very unlikelly that this function is called */
@ -253,9 +257,12 @@ WRITE_LINE_MEMBER( md6802_state::pia2_ca2_w )
void md6802_state::machine_start()
{
LOG("--->%s()\n", FUNCNAME);
m_7segs.resolve();
save_item(NAME(m_reset));
save_item(NAME(m_shift));
save_item(NAME(m_led));
save_item(NAME(m_reset));
}
void md6802_state::machine_reset()

View File

@ -53,10 +53,20 @@ public:
, m_maincpu(*this, "maincpu")
, m_testport(*this, "TEST")
, m_coinport(*this, "COIN")
, m_switch(*this, "SWITCH.%X", 0)
, m_switch(*this, "SWITCH.%X", 0U)
, m_digits(*this, "digit%u", 0U)
{
}
DECLARE_CUSTOM_INPUT_MEMBER(coins_in);
DECLARE_INPUT_CHANGED_MEMBER(test_changed);
void flicker(machine_config &config);
protected:
virtual void driver_start() override;
DECLARE_WRITE8_MEMBER(ram0_out) { m_ram0_output = data; }
DECLARE_WRITE8_MEMBER(rom0_out) { m_rom0_output = data; }
DECLARE_WRITE8_MEMBER(rom1_out) { m_rom1_output = data; }
@ -65,24 +75,18 @@ public:
DECLARE_WRITE_LINE_MEMBER(cm_ram1_w);
DECLARE_WRITE_LINE_MEMBER(cm_ram2_w);
DECLARE_CUSTOM_INPUT_MEMBER(coins_in);
DECLARE_INPUT_CHANGED_MEMBER(test_changed);
void flicker(machine_config &config);
void flicker_memory(address_map &map);
void flicker_ram_ports(address_map &map);
void flicker_rom(address_map &map);
void flicker_rom_ports(address_map &map);
void flicker_status(address_map &map);
protected:
virtual void driver_start() override;
private:
required_device<i4004_cpu_device> m_maincpu;
required_ioport m_testport;
required_ioport m_coinport;
required_ioport_array<16> m_switch;
output_finder<16> m_digits;
bool m_cm_ram1 = false, m_cm_ram2 = false;
u8 m_ram0_output = 0U, m_rom0_output = 0U, m_rom1_output = 0U;
@ -302,7 +306,7 @@ WRITE_LINE_MEMBER(flicker_state::cm_ram1_w)
if (!m_cm_ram1 && !state)
{
m_mux_col = m_ram0_output;
output().set_digit_value(m_mux_col, led_digits[m_rom0_output]);
m_digits[m_mux_col] = led_digits[m_rom0_output];
if (ARRAY_LENGTH(lamp_matrix) > m_mux_col)
{
if (lamp_matrix[m_mux_col][0])
@ -381,6 +385,8 @@ INPUT_CHANGED_MEMBER(flicker_state::test_changed)
void flicker_state::driver_start()
{
m_digits.resolve();
save_item(NAME(m_cm_ram1));
save_item(NAME(m_cm_ram2));
save_item(NAME(m_ram0_output));

View File

@ -39,31 +39,26 @@
class wildfire_state : public driver_device
{
public:
wildfire_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
wildfire_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_speaker(*this, "speaker"),
m_a12_decay_timer(*this, "a12_decay")
m_a12_decay_timer(*this, "a12_decay"),
m_digits(*this, "digit%u", 0U),
m_lamps(*this, "lamp%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<timer_device> m_a12_decay_timer;
void wildfire(machine_config &config);
u8 m_d;
u16 m_a;
u8 m_q2;
u8 m_q3;
u16 m_display_state[0x10];
u16 m_display_cache[0x10];
u8 m_display_decay[0x100];
protected:
virtual void machine_start() override;
DECLARE_WRITE8_MEMBER(write_d);
DECLARE_WRITE16_MEMBER(write_a);
DECLARE_WRITE_LINE_MEMBER(write_f);
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
bool index_is_7segled(int index);
void display_update();
@ -71,8 +66,21 @@ public:
void write_a12(int state);
void sound_update();
virtual void machine_start() override;
void wildfire(machine_config &config);
private:
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
required_device<timer_device> m_a12_decay_timer;
output_finder<3> m_digits;
output_finder<16 * 10> m_lamps; // only ones ending in 0-7 are used, 8-9 are unused
u8 m_d;
u16 m_a;
u8 m_q2;
u8 m_q3;
u16 m_display_state[0x10];
u8 m_display_decay[0x100];
};
@ -138,16 +146,13 @@ void wildfire_state::display_update()
// on difference, send to output
for (int i = 0; i < 0x10; i++)
if (m_display_cache[i] != active_state[i])
{
if (index_is_7segled(i))
output().set_digit_value(i, bitswap<8>(active_state[i],7,0,1,2,3,4,5,6) & 0x7f);
{
if (index_is_7segled(i))
m_digits[i] = bitswap<7>(active_state[i],0,1,2,3,4,5,6);
for (int j = 0; j < 8; j++)
output().set_lamp_value(i*10 + j, active_state[i] >> j & 1);
}
memcpy(m_display_cache, active_state, sizeof(m_display_cache));
for (int j = 0; j < 8; j++)
m_lamps[(i * 10) + j] = BIT(active_state[i], j);
}
}
TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::display_decay_tick)
@ -262,9 +267,11 @@ INPUT_PORTS_END
void wildfire_state::machine_start()
{
m_digits.resolve();
m_lamps.resolve();
// zerofill
memset(m_display_state, 0, sizeof(m_display_state));
memset(m_display_cache, ~0, sizeof(m_display_cache));
memset(m_display_decay, 0, sizeof(m_display_decay));
m_d = 0;
@ -274,7 +281,6 @@ void wildfire_state::machine_start()
// register for savestates
save_item(NAME(m_display_state));
/* save_item(NAME(m_display_cache)); */ // don't save!
save_item(NAME(m_display_decay));
save_item(NAME(m_d));

View File

@ -163,19 +163,30 @@ class jankenmn_state : public driver_device
{
public:
jankenmn_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu") { }
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
, m_lamps(*this, "lamp%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
DECLARE_CUSTOM_INPUT_MEMBER(hopper_status_r);
void jankenmn(machine_config &config);
protected:
DECLARE_WRITE8_MEMBER(lamps1_w);
DECLARE_WRITE8_MEMBER(lamps2_w);
DECLARE_WRITE8_MEMBER(lamps3_w);
DECLARE_CUSTOM_INPUT_MEMBER(hopper_status_r);
void jankenmn(machine_config &config);
virtual void machine_start() override;
void jankenmn_map(address_map &map);
void jankenmn_port_map(address_map &map);
private:
required_device<cpu_device> m_maincpu;
output_finder<2> m_digits;
output_finder<16> m_lamps;
};
@ -183,21 +194,21 @@ public:
* Read/Write Handlers *
*********************************************/
static const uint8_t led_map[16] = // 7748 IC?
static constexpr uint8_t led_map[16] = // 7748 IC?
{ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0x00 };
WRITE8_MEMBER(jankenmn_state::lamps1_w)
{
// hand state: d0: rock, d1: scissors, d2: paper
output().set_lamp_value(8, (data & 7) != 0);
output().set_lamp_value(11, data & 1);
output().set_lamp_value(12, data >> 1 & 1);
output().set_lamp_value(9, data >> 2 & 1);
output().set_lamp_value(10, (data & 6) != 0);
output().set_lamp_value(13, (data & 3) != 0);
m_lamps[8] = (data & 7) != 0;
m_lamps[11] = BIT(data, 0);
m_lamps[12] = BIT(data, 1);
m_lamps[9] = BIT(data, 2);
m_lamps[10] = (data & 6) != 0;
m_lamps[13] = (data & 3) != 0;
// d4-d7: led7seg (remaining credits) right digit
output().set_digit_value(1, led_map[data >> 4 & 0x0f]);
m_digits[1] = led_map[(data >> 4) & 0x0f];
// d3: ? (only set if game is over)
}
@ -205,33 +216,33 @@ WRITE8_MEMBER(jankenmn_state::lamps1_w)
WRITE8_MEMBER(jankenmn_state::lamps2_w)
{
// button LEDs: d1: paper, d2: scissors, d3: rock
output().set_lamp_value(2, data >> 3 & 1);
output().set_lamp_value(3, data >> 2 & 1);
output().set_lamp_value(4, data >> 1 & 1);
m_lamps[2] = BIT(data, 3);
m_lamps[3] = BIT(data, 2);
m_lamps[4] = BIT(data, 1);
// lamps: d5: draw, d6: lose, d7: win
output().set_lamp_value(5, data >> 6 & 1);
output().set_lamp_value(6, data >> 5 & 1);
output().set_lamp_value(7, data >> 7 & 1);
m_lamps[5] = BIT(data, 6);
m_lamps[6] = BIT(data, 5);
m_lamps[7] = BIT(data, 7);
// d4: payout error LED
output().set_lamp_value(14, data >> 4 & 1);
m_lamps[14] = BIT(data, 4);
// d0: led7seg (remaining credits) left digit
output().set_digit_value(0, led_map[data & 1]);
m_digits[0] = led_map[data & 1];
}
WRITE8_MEMBER(jankenmn_state::lamps3_w)
{
// d1: blue rotating lamp on top of cab
output().set_lamp_value(15, data >> 1 & 1);
m_lamps[15] = BIT(data, 1);
// d2: payout (waits for hopper status)
machine().bookkeeping().coin_counter_w(2, data & 0x04);
// d3: right multiplier lamp(2), d4: left multiplier lamp(1)
output().set_lamp_value(0, data >> 4 & 1);
output().set_lamp_value(1, data >> 3 & 1);
m_lamps[0] = BIT(data, 4);
m_lamps[1] = BIT(data, 3);
// d5: assume coin lockout
machine().bookkeeping().coin_lockout_global_w(~data & 0x20);
@ -247,6 +258,12 @@ CUSTOM_INPUT_MEMBER(jankenmn_state::hopper_status_r)
return machine().rand();
}
void jankenmn_state::machine_start()
{
m_digits.resolve();
m_lamps.resolve();
}
/*********************************************
* Memory Map Definition *

View File

@ -45,12 +45,20 @@ public:
, m_mcu_region(*this, "mcu")
, m_eprom_image(*this, "eprom_image")
, m_mcu_image(*this, "mcu_image")
, m_digits(*this, "digit%u", 0U)
, m_leds(*this, "led%u", 0U)
, m_input_poll_timer(nullptr)
, m_addr(0x0000)
, m_pb_val(0xff)
{
}
protected:
enum
{
TIMER_INPUT_POLL
};
void m68705prg(machine_config &config);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(eprom_load)
@ -86,8 +94,11 @@ public:
}
}
DECLARE_DRIVER_INIT(m68705prg)
virtual void machine_start() override
{
m_digits.resolve();
m_leds.resolve();
m_input_poll_timer = timer_alloc(TIMER_INPUT_POLL);
save_item(NAME(m_addr));
@ -95,27 +106,20 @@ public:
m_addr = 0x0000;
m_pb_val = 0xff;
}
DECLARE_MACHINE_START(m68705prg)
{
output().set_digit_value(0, s_7seg[(m_addr >> 0) & 0x0f]);
output().set_digit_value(1, s_7seg[(m_addr >> 4) & 0x0f]);
output().set_digit_value(2, s_7seg[(m_addr >> 8) & 0x0f]);
m_digits[0] = s_7seg[(m_addr >> 0) & 0x0f];
m_digits[1] = s_7seg[(m_addr >> 4) & 0x0f];
m_digits[2] = s_7seg[(m_addr >> 8) & 0x0f];
m_input_poll_timer->adjust(attotime::from_hz(120), 0, attotime::from_hz(120));
}
protected:
enum
{
TIMER_INPUT_POLL
};
required_ioport m_sw;
required_region_ptr<u8> m_mcu_region;
required_device<generic_slot_device> m_eprom_image;
required_device<generic_slot_device> m_mcu_image;
output_finder<3> m_digits;
output_finder<4> m_leds;
emu_timer * m_input_poll_timer;
@ -138,6 +142,9 @@ public:
{
}
void prg(machine_config &config);
protected:
DECLARE_WRITE8_MEMBER(pb_w)
{
// PB4: address counter reset (active high)
@ -150,9 +157,9 @@ public:
m_addr = 0x0000;
else if (!BIT(data, 3) && BIT(m_pb_val, 3))
m_addr = (m_addr + 1) & 0x0fff;
output().set_led_value(0, !BIT(data, 2));
output().set_led_value(1, !BIT(data, 1));
output().set_led_value(3, !BIT(data, 0) && BIT(m_sw->read(), 1));
m_leds[0] = !BIT(data, 2);
m_leds[1] = !BIT(data, 1);
m_leds[3] = !BIT(data, 0) && BIT(m_sw->read(), 1);
m_mcu->set_input_line(M68705_VPP_LINE, (!BIT(data, 0) && BIT(m_sw->read(), 1)) ? ASSERT_LINE : CLEAR_LINE);
m_pb_val = data;
@ -160,18 +167,18 @@ public:
u8 const *const ptr(m_eprom_image->get_rom_base());
m_mcu->pa_w(space, 0, ptr ? ptr[m_addr & m_mcu_region.mask()] : 0xff);
output().set_digit_value(0, s_7seg[(m_addr >> 0) & 0x0f]);
output().set_digit_value(1, s_7seg[(m_addr >> 4) & 0x0f]);
output().set_digit_value(2, s_7seg[(m_addr >> 8) & 0x0f]);
m_digits[0] = s_7seg[(m_addr >> 0) & 0x0f];
m_digits[1] = s_7seg[(m_addr >> 4) & 0x0f];
m_digits[2] = s_7seg[(m_addr >> 8) & 0x0f];
}
DECLARE_MACHINE_RESET(m68705prg)
virtual void machine_reset() override
{
m_sw->field(0x01)->live().value = 0;
m_sw->field(0x02)->live().value = 0;
output().set_led_value(2, 1);
output().set_led_value(3, 0);
m_leds[2] = 1;
m_leds[3] = 0;
m_mcu->set_input_line(M68705_IRQ_LINE, ASSERT_LINE);
m_mcu->set_input_line(M68705_VPP_LINE, CLEAR_LINE);
@ -179,9 +186,6 @@ public:
m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
void prg(machine_config &config);
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override
{
switch (id)
@ -200,8 +204,8 @@ protected:
bool const reset(!BIT(switches, 0));
bool const vpp(BIT(switches, 1) && !BIT(m_pb_val, 0));
output().set_led_value(2, reset);
output().set_led_value(3, vpp);
m_leds[2] = reset;
m_leds[3] = vpp;
m_mcu->set_input_line(M68705_VPP_LINE, vpp ? ASSERT_LINE : CLEAR_LINE);
m_mcu->set_input_line(INPUT_LINE_RESET, reset ? ASSERT_LINE : CLEAR_LINE);
@ -234,8 +238,6 @@ MACHINE_CONFIG_START(m68705prg_state_base::m68705prg)
MCFG_GENERIC_EXTENSIONS("bin,rom")
MCFG_GENERIC_LOAD(m68705prg_state_base, mcu_load)
MCFG_MACHINE_START_OVERRIDE(m68705prg_state_base, m68705prg)
MCFG_DEFAULT_LAYOUT(layout_m68705prg)
MACHINE_CONFIG_END
@ -243,32 +245,24 @@ template<> MACHINE_CONFIG_START(p3prg_state::prg)
m68705prg(config);
MCFG_CPU_ADD("mcu", M68705P3, 1_MHz_XTAL)
MCFG_M68705_PORTB_W_CB(WRITE8(p3prg_state, pb_w))
MCFG_MACHINE_RESET_OVERRIDE(p3prg_state, m68705prg)
MACHINE_CONFIG_END
template<> MACHINE_CONFIG_START(p5prg_state::prg)
m68705prg(config);
MCFG_CPU_ADD("mcu", M68705P5, 1_MHz_XTAL)
MCFG_M68705_PORTB_W_CB(WRITE8(p5prg_state, pb_w))
MCFG_MACHINE_RESET_OVERRIDE(p5prg_state, m68705prg)
MACHINE_CONFIG_END
template<> MACHINE_CONFIG_START(r3prg_state::prg)
m68705prg(config);
MCFG_CPU_ADD("mcu", M68705R3, 1_MHz_XTAL)
MCFG_M68705_PORTB_W_CB(WRITE8(r3prg_state, pb_w))
MCFG_MACHINE_RESET_OVERRIDE(r3prg_state, m68705prg)
MACHINE_CONFIG_END
template<> MACHINE_CONFIG_START(u3prg_state::prg)
m68705prg(config);
MCFG_CPU_ADD("mcu", M68705U3, 1_MHz_XTAL)
MCFG_M68705_PORTB_W_CB(WRITE8(u3prg_state, pb_w))
MCFG_MACHINE_RESET_OVERRIDE(u3prg_state, m68705prg)
MACHINE_CONFIG_END
@ -295,8 +289,8 @@ ROM_END
} // anonymous namespace
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1984, 705p5prg, 0, 0, prg, m68705prg, p5prg_state, m68705prg, "Motorola", "MC68705P5 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705p3prg, 705p5prg, 0, prg, m68705prg, p3prg_state, m68705prg, "Motorola", "MC68705P3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705r3prg, 705p5prg, 0, prg, m68705prg, r3prg_state, m68705prg, "Motorola", "MC68705R3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705u3prg, 705p5prg, 0, prg, m68705prg, u3prg_state, m68705prg, "Motorola", "MC68705U3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1984, 705p5prg, 0, 0, prg, m68705prg, p5prg_state, 0, "Motorola", "MC68705P5 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705p3prg, 705p5prg, 0, prg, m68705prg, p3prg_state, 0, "Motorola", "MC68705P3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705r3prg, 705p5prg, 0, prg, m68705prg, r3prg_state, 0, "Motorola", "MC68705R3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
COMP( 1984, 705u3prg, 705p5prg, 0, prg, m68705prg, u3prg_state, 0, "Motorola", "MC68705U3 Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )

View File

@ -892,21 +892,22 @@ WRITE16_MEMBER(neogeo_state::write_banksel)
*
*************************************/
void neogeo_state::set_outputs( )
void neogeo_state::set_outputs()
{
static const uint8_t led_map[0x10] =
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58,0x4c,0x62,0x69,0x78,0x00 };
static constexpr uint8_t led_map[0x10] =
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x58,0x4c,0x62,0x69,0x78,0x00 };
/* EL */
output().set_digit_value(0, led_map[m_el_value]);
// EL
for (unsigned i = 0; 6U > i; ++i)
m_lamps[i] = (m_el_value & 0x07) == (i + 1);
/* LED1 */
output().set_digit_value(1, led_map[m_led1_value >> 4]);
output().set_digit_value(2, led_map[m_led1_value & 0x0f]);
// LED1
m_digits[0] = led_map[m_led1_value >> 4];
m_digits[1] = led_map[m_led1_value & 0x0f];
/* LED2 */
output().set_digit_value(3, led_map[m_led2_value >> 4]);
output().set_digit_value(4, led_map[m_led2_value & 0x0f]);
// LED2
m_digits[2] = led_map[m_led2_value >> 4];
m_digits[3] = led_map[m_led2_value & 0x0f];
}
@ -1321,6 +1322,9 @@ void neogeo_state::common_machine_start()
void neogeo_state::machine_start()
{
m_digits.resolve();
m_lamps.resolve();
m_type = NEOGEO_MVS;
common_machine_start();
@ -1331,13 +1335,6 @@ void neogeo_state::machine_start()
m_upd4990a->c1_w(1);
m_upd4990a->c2_w(1);
if (m_slot1) { m_slots[0] = m_slot1; } else { m_slots[0] = nullptr; }
if (m_slot2) { m_slots[1] = m_slot2; } else { m_slots[1] = nullptr; }
if (m_slot3) { m_slots[2] = m_slot3; } else { m_slots[2] = nullptr; }
if (m_slot4) { m_slots[3] = m_slot4; } else { m_slots[3] = nullptr; }
if (m_slot5) { m_slots[4] = m_slot5; } else { m_slots[4] = nullptr; }
if (m_slot6) { m_slots[5] = m_slot6; } else { m_slots[5] = nullptr; }
m_sprgen->m_fixed_layer_bank_type = 0;
m_sprgen->set_screen(m_screen);
@ -1743,13 +1740,6 @@ MACHINE_START_MEMBER(aes_state, aes)
m_type = NEOGEO_AES;
common_machine_start();
m_slots[0] = m_slot1;
m_slots[1] = nullptr;
m_slots[2] = nullptr;
m_slots[3] = nullptr;
m_slots[4] = nullptr;
m_slots[5] = nullptr;
m_sprgen->m_fixed_layer_bank_type = 0;
m_sprgen->set_screen(m_screen);

View File

@ -75,30 +75,36 @@ class whouse_testcons_state : public driver_device
public:
whouse_testcons_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_dsp(*this, "dsp%u", 0)
, m_dsp(*this, "dsp%u", 0U)
, m_digit(*this, "digit%u", 0U)
{
}
DECLARE_DRIVER_INIT(whousetc)
{
}
template <unsigned Dsp> DECLARE_WRITE16_MEMBER(update_dsp)
{
output().set_digit_value((Dsp << 2) | offset, data);
}
void whousetc(machine_config &config);
void io_map(address_map &map);
void program_map(address_map &map);
protected:
template <unsigned Dsp> DECLARE_WRITE16_MEMBER(update_dsp)
{
m_digit[(Dsp << 2) | offset] = data;
}
virtual void machine_start() override
{
m_digit.resolve();
}
virtual void machine_reset() override
{
for (required_device<dl1416_device> const &dsp : m_dsp)
dsp->cu_w(1);
}
void io_map(address_map &map);
void program_map(address_map &map);
private:
required_device_array<dl1416_device, 4> m_dsp;
output_finder<16> m_digit;
};
@ -203,5 +209,5 @@ ROM_END
} // anonymous namespace
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1980?, whousetc, 0, 0, whousetc, whousetc, whouse_testcons_state, whousetc, "Westinghouse", "Test Console Serial #5", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_CLICKABLE_ARTWORK )
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
COMP( 1980?, whousetc, 0, 0, whousetc, whousetc, whouse_testcons_state, 0, "Westinghouse", "Test Console Serial #5", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_CLICKABLE_ARTWORK )

View File

@ -31,15 +31,23 @@ public:
z80dev_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_digits(*this, "digit%u", 0U)
{ }
void z80dev(machine_config &config);
protected:
DECLARE_WRITE8_MEMBER( display_w );
DECLARE_READ8_MEMBER( test_r );
void z80dev(machine_config &config);
virtual void machine_start() override;
void io_map(address_map &map);
void mem_map(address_map &map);
private:
required_device<cpu_device> m_maincpu;
output_finder<6> m_digits;
};
WRITE8_MEMBER( z80dev_state::display_w )
@ -48,7 +56,7 @@ WRITE8_MEMBER( z80dev_state::display_w )
// xxxx ---- ???
static const uint8_t hex_7seg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
output().set_digit_value(offset, hex_7seg[data&0x0f]);
m_digits[offset] = hex_7seg[data & 0x0f];
}
READ8_MEMBER( z80dev_state::test_r )
@ -56,6 +64,11 @@ READ8_MEMBER( z80dev_state::test_r )
return machine().rand();
}
void z80dev_state::machine_start()
{
m_digits.resolve();
}
void z80dev_state::mem_map(address_map &map)
{
map.unmap_value_high();
@ -113,7 +126,7 @@ INPUT_PORTS_END
MACHINE_CONFIG_START(z80dev_state::z80dev)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL(4'000'000))
MCFG_CPU_ADD("maincpu", Z80, 4_MHz_XTAL)
MCFG_CPU_PROGRAM_MAP(mem_map)
MCFG_CPU_IO_MAP(io_map)

View File

@ -7,29 +7,21 @@
* Rockwell AIM-65
*
****************************************************************************/
#ifndef MAME_INCLUDES_AIM65_H
#define MAME_INCLUDES_AIM65_H
#include "cpu/m6502/m6502.h"
#include "video/dl1416.h"
#include "machine/6522via.h"
#include "machine/mos6530n.h"
#include "machine/6821pia.h"
#include "machine/ram.h"
#include "imagedev/cassette.h"
#include "sound/wave.h"
#include "bus/generic/slot.h"
#pragma once
#include "bus/generic/carts.h"
/** R6502 Clock.
*
* The R6502 on AIM65 operates at 1 MHz. The frequency reference is a 4 MHz
* crystal controlled oscillator. Dual D-type flip-flop Z10 divides the 4 MHz
* signal by four to drive the R6502 phase 0 (O0) input with a 1 MHz clock.
*/
#define AIM65_CLOCK XTAL(4'000'000)/4
#include "bus/generic/slot.h"
#include "cpu/m6502/m6502.h"
#include "imagedev/cassette.h"
#include "machine/6522via.h"
#include "machine/6821pia.h"
#include "machine/mos6530n.h"
#include "machine/ram.h"
#include "sound/wave.h"
#include "video/dl1416.h"
class aim65_state : public driver_device
@ -49,9 +41,15 @@ public:
, m_z15(*this, "z15")
, m_ram(*this, RAM_TAG)
, m_ds(*this, "ds%u", 1)
, m_digits(*this, "digit%u", 0U)
{
}
void aim65(machine_config &config);
protected:
virtual void machine_start() override;
DECLARE_WRITE8_MEMBER(aim65_pia_a_w);
DECLARE_WRITE8_MEMBER(aim65_pia_b_w);
DECLARE_READ8_MEMBER(aim65_riot_b_r);
@ -69,13 +67,11 @@ public:
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z14_load) { return load_cart(image, m_z14, "z14"); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(z15_load) { return load_cart(image, m_z15, "z15"); }
void aim65(machine_config &config);
void aim65_mem(address_map &map);
protected:
virtual void machine_start() override;
image_init_result load_cart(device_image_interface &image, generic_slot_device *slot, const char *slot_tag);
void aim65_mem(address_map &map);
private:
uint8_t m_riot_port_a;
uint8_t m_pb_save;
@ -91,6 +87,7 @@ protected:
required_device<generic_slot_device> m_z15;
required_device<ram_device> m_ram;
required_device_array<dl1416_device, 5> m_ds;
output_finder<20> m_digits;
};

View File

@ -30,8 +30,8 @@
class neogeo_state : public driver_device
{
public:
neogeo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
neogeo_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_upd4990a(*this, "upd4990a"),
@ -59,12 +59,9 @@ public:
m_ctrl2(*this, "ctrl2"),
m_use_cart_vectors(0),
m_use_cart_audio(0),
m_slot1(*this, "cslot1"),
m_slot2(*this, "cslot2"),
m_slot3(*this, "cslot3"),
m_slot4(*this, "cslot4"),
m_slot5(*this, "cslot5"),
m_slot6(*this, "cslot6")
m_slots(*this, "cslot%u", 1U),
m_digits(*this, "digit%u", 1U),
m_lamps(*this, "lamp%u", 1U)
{ }
DECLARE_READ16_MEMBER(memcard_r);
@ -254,15 +251,11 @@ protected:
// temporary helper to restore memory banking while bankswitch is handled in the driver...
uint32_t m_bank_base;
optional_device<neogeo_cart_slot_device> m_slot1;
optional_device<neogeo_cart_slot_device> m_slot2;
optional_device<neogeo_cart_slot_device> m_slot3;
optional_device<neogeo_cart_slot_device> m_slot4;
optional_device<neogeo_cart_slot_device> m_slot5;
optional_device<neogeo_cart_slot_device> m_slot6;
optional_device_array<neogeo_cart_slot_device, 6> m_slots;
output_finder<4> m_digits;
output_finder<6> m_lamps;
int m_curr_slot;
neogeo_cart_slot_device* m_slots[6];
private:
void update_interrupts();

View File

@ -73,7 +73,7 @@ WRITE8_MEMBER( aim65_state::aim65_pia_b_w )
template <unsigned D> WRITE16_MEMBER( aim65_state::aim65_update_ds )
{
output().set_digit_value(((D - 1) << 2) | (offset ^ 3), data);
m_digits[((D - 1) << 2) | (offset ^ 3)] = data;
}
template WRITE16_MEMBER( aim65_state::aim65_update_ds<1> );
@ -122,9 +122,10 @@ WRITE8_MEMBER( aim65_state::aim65_riot_a_w )
void aim65_state::machine_start()
{
ram_device *ram = m_ram;
address_space &space = m_maincpu->space(AS_PROGRAM);
m_digits.resolve();
// Init ROM sockets
if (m_z24->exists())
space.install_read_handler(0xd000, 0xdfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_z24));
@ -144,7 +145,7 @@ void aim65_state::machine_start()
space.install_read_handler(0x7000, 0x7fff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_z15));
// Init RAM
space.install_ram(0x0000, ram->size() - 1, ram->pointer());
space.install_ram(0x0000, m_ram->size() - 1, m_ram->pointer());
m_pb_save = 0;

View File

@ -83,7 +83,6 @@ public:
void set_cpuregion(const char *tag) { m_cputag = tag; }
void decocpu1_map(address_map &map);
protected:
static constexpr device_timer_id TIMER_IRQ = 0;
@ -95,6 +94,8 @@ protected:
virtual ioport_constructor device_input_ports() const override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
void decocpu1_map(address_map &map);
required_device<cpu_device> m_cpu;
required_device<pia6821_device> m_pia21;
required_device<pia6821_device> m_pia24;