mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
get rid of dioutput - it's only used in one place, and it upset GCC on Linux debug builds for some reason
This commit is contained in:
parent
08dde5eb0a
commit
1c3684787c
@ -82,8 +82,6 @@ files {
|
||||
MAME_DIR .. "src/emu/dinetwork.h",
|
||||
MAME_DIR .. "src/emu/dinvram.cpp",
|
||||
MAME_DIR .. "src/emu/dinvram.h",
|
||||
MAME_DIR .. "src/emu/dioutput.cpp",
|
||||
MAME_DIR .. "src/emu/dioutput.h",
|
||||
MAME_DIR .. "src/emu/dipalette.cpp",
|
||||
MAME_DIR .. "src/emu/dipalette.h",
|
||||
MAME_DIR .. "src/emu/dipty.cpp",
|
||||
|
@ -25,7 +25,7 @@ DEFINE_DEVICE_TYPE(DM9368, dm9368_device, "dm9368", "Fairchild DM9368 7-Segment
|
||||
// MACROS / CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
const uint8_t dm9368_device::s_segment_data[16] =
|
||||
const u8 dm9368_device::s_segment_data[16] =
|
||||
{
|
||||
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x67, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
|
||||
};
|
||||
@ -36,61 +36,54 @@ const uint8_t dm9368_device::s_segment_data[16] =
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// dm9368_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
dm9368_device::dm9368_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
dm9368_device::dm9368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
|
||||
device_t(mconfig, DM9368, tag, owner, clock),
|
||||
device_output_interface(mconfig, *this),
|
||||
m_write_rbo(*this),
|
||||
m_update_cb(*this),
|
||||
m_rbo_cb(*this),
|
||||
m_rbi(1),
|
||||
m_rbo(1)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
void dm9368_device::a_w(u8 data)
|
||||
{
|
||||
int const a(data & 0x0f);
|
||||
int const rbo((m_rbi || a) ? 1 : 0);
|
||||
u8 const value(rbo ? s_segment_data[a] : 0);
|
||||
|
||||
if (!rbo)
|
||||
LOG("DM9368 Blanked Rippling Zero\n");
|
||||
else
|
||||
LOG("DM9368 Output Data: %u = %02x\n", a, value);
|
||||
|
||||
m_update_cb(0, value);
|
||||
if (rbo != m_rbo)
|
||||
m_rbo_cb(m_rbo = rbo);
|
||||
}
|
||||
|
||||
|
||||
WRITE_LINE_MEMBER( dm9368_device::rbi_w )
|
||||
{
|
||||
if (state != m_rbi)
|
||||
{
|
||||
m_rbi = state;
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dm9368_device::device_resolve_objects()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_update_cb.resolve_safe();
|
||||
m_rbo_cb.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
void dm9368_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
m_write_rbo.resolve_safe();
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_rbi));
|
||||
save_item(NAME(m_rbo));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// a_w -
|
||||
//-------------------------------------------------
|
||||
|
||||
void dm9368_device::a_w(uint8_t data)
|
||||
{
|
||||
int const a = data & 0x0f;
|
||||
uint8_t value = 0;
|
||||
|
||||
if (!m_rbi && !a)
|
||||
{
|
||||
LOG("DM9368 Blanked Rippling Zero\n");
|
||||
|
||||
// blank rippling 0
|
||||
m_rbo = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("DM9368 Output Data: %u = %02x\n", a, s_segment_data[a]);
|
||||
|
||||
value = s_segment_data[a];
|
||||
|
||||
m_rbo = 1;
|
||||
}
|
||||
|
||||
set_digit_value(value);
|
||||
|
||||
m_write_rbo(m_rbo);
|
||||
}
|
||||
|
@ -22,16 +22,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "dioutput.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_DM9368_RBO_CALLBACK(_write) \
|
||||
devcb = &dm9368_device::set_rbo_wr_callback(*device, DEVCB_##_read);
|
||||
#define MCFG_DM9368_UPDATE_CALLBACK(cb) \
|
||||
devcb = &downcast<dm9368_device &>(*device).set_update_callback(DEVCB_##cb);
|
||||
|
||||
#define MCFG_DM9368_RBO_CALLBACK(cb) \
|
||||
devcb = &downcast<dm9368_device &>(*device).set_rbo_callback(DEVCB_##cb);
|
||||
|
||||
|
||||
|
||||
@ -41,29 +42,35 @@
|
||||
|
||||
// ======================> dm9368_device
|
||||
|
||||
class dm9368_device : public device_t,
|
||||
public device_output_interface
|
||||
class dm9368_device : public device_t
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
dm9368_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
template <typename Obj> devcb_base &set_update_callback(Obj &&cb) { return m_update_cb.set_callback(std::forward<Obj>(cb)); }
|
||||
template <typename Obj> devcb_base &set_rbo_callback(Obj &&cb) { return m_rbo_cb.set_callback(std::forward<Obj>(cb)); }
|
||||
|
||||
void a_w(uint8_t data);
|
||||
// construction/destruction
|
||||
dm9368_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
void a_w(u8 data);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( rbi_w ) { m_rbi = state; }
|
||||
DECLARE_READ_LINE_MEMBER( rbo_r ) { return m_rbo; }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
|
||||
void update();
|
||||
|
||||
private:
|
||||
devcb_write_line m_write_rbo;
|
||||
devcb_write8 m_update_cb;
|
||||
devcb_write_line m_rbo_cb;
|
||||
|
||||
int m_rbi;
|
||||
int m_rbo;
|
||||
|
||||
static const uint8_t s_segment_data[16];
|
||||
static const u8 s_segment_data[16];
|
||||
};
|
||||
|
||||
|
||||
|
@ -1,68 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/***************************************************************************
|
||||
|
||||
dirtc.c
|
||||
|
||||
Device Output interfaces.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "dioutput.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE OUTPUT INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_output_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_output_interface::device_output_interface(const machine_config &mconfig, device_t &device) :
|
||||
device_interface(device, "output"),
|
||||
m_output_index(0),
|
||||
m_output_name(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_output_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_output_interface::~device_output_interface()
|
||||
{
|
||||
}
|
||||
|
||||
void device_output_interface::set_output_value(int value) const
|
||||
{
|
||||
if (m_output_name)
|
||||
device().machine().output().set_value(m_output_name, value);
|
||||
else
|
||||
fatalerror("Output name not set!");
|
||||
}
|
||||
|
||||
void device_output_interface::set_led_value(int value) const
|
||||
{
|
||||
if (m_output_name)
|
||||
device().machine().output().set_value(m_output_name, value);
|
||||
else
|
||||
device().machine().output().set_led_value(m_output_index, value);
|
||||
}
|
||||
|
||||
void device_output_interface::set_lamp_value(int value) const
|
||||
{
|
||||
if (m_output_name)
|
||||
device().machine().output().set_value(m_output_name, value);
|
||||
else
|
||||
device().machine().output().set_lamp_value(m_output_index, value);
|
||||
}
|
||||
|
||||
void device_output_interface::set_digit_value(int value) const
|
||||
{
|
||||
if (m_output_name)
|
||||
device().machine().output().set_value(m_output_name, value);
|
||||
else
|
||||
device().machine().output().set_digit_value(m_output_index, value);
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/***************************************************************************
|
||||
|
||||
dioutput.h
|
||||
|
||||
Device Output interfaces.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_EMU_DIOUTPUT_H
|
||||
#define MAME_EMU_DIOUTPUT_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_OUTPUT_INDEX(_index) \
|
||||
dynamic_cast<device_output_interface &>(*device).set_output_index(_index);
|
||||
|
||||
#define MCFG_OUTPUT_NAME(_name) \
|
||||
dynamic_cast<device_output_interface &>(*device).set_output_name(_name);
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> device_output_interface
|
||||
|
||||
class device_output_interface : public device_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
device_output_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_output_interface();
|
||||
|
||||
void set_output_index(int index) { m_output_index = index; }
|
||||
void set_output_name(const char *name) { m_output_name = name; }
|
||||
|
||||
void set_output_value(int value) const;
|
||||
void set_led_value(int value) const;
|
||||
void set_lamp_value(int value) const;
|
||||
void set_digit_value(int value) const;
|
||||
|
||||
protected:
|
||||
int m_output_index;
|
||||
const char *m_output_name;
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_EMU_DIOUTPUT_H
|
@ -96,29 +96,13 @@ class didact_state : public driver_device
|
||||
public:
|
||||
didact_state(const machine_config &mconfig, device_type type, const char * tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
,m_io_line0(*this, "LINE0")
|
||||
,m_io_line1(*this, "LINE1")
|
||||
,m_io_line2(*this, "LINE2")
|
||||
,m_io_line3(*this, "LINE3")
|
||||
,m_io_line4(*this, "LINE4")
|
||||
,m_line0(0)
|
||||
,m_line1(0)
|
||||
,m_line2(0)
|
||||
,m_line3(0)
|
||||
,m_reset(0)
|
||||
,m_shift(0)
|
||||
,m_led(0)
|
||||
,m_rs232(*this, "rs232")
|
||||
{ }
|
||||
required_ioport m_io_line0;
|
||||
required_ioport m_io_line1;
|
||||
required_ioport m_io_line2;
|
||||
required_ioport m_io_line3;
|
||||
required_ioport m_io_line4;
|
||||
uint8_t m_line0;
|
||||
uint8_t m_line1;
|
||||
uint8_t m_line2;
|
||||
uint8_t m_line3;
|
||||
, m_io_lines(*this, "LINE%u", 0U)
|
||||
, m_lines{ 0, 0, 0, 0 }
|
||||
, m_led(0)
|
||||
, m_rs232(*this, "rs232")
|
||||
{ }
|
||||
required_ioport_array<5> m_io_lines;
|
||||
uint8_t m_lines[4];
|
||||
uint8_t m_reset;
|
||||
uint8_t m_shift;
|
||||
uint8_t m_led;
|
||||
@ -166,15 +150,15 @@ class didact_state : public driver_device
|
||||
/* Mikrodator 6802 driver class */
|
||||
class md6802_state : public didact_state
|
||||
{
|
||||
public:
|
||||
public:
|
||||
md6802_state(const machine_config &mconfig, device_type type, const char * tag)
|
||||
: 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_maincpu(*this, "maincpu")
|
||||
, m_tb16_74145(*this, "tb16_74145")
|
||||
, m_segments(0)
|
||||
, m_pia1(*this, PIA1_TAG)
|
||||
, m_pia2(*this, PIA2_TAG)
|
||||
{ }
|
||||
required_device<m6802_cpu_device> m_maincpu;
|
||||
required_device<ttl74145_device> m_tb16_74145;
|
||||
uint8_t m_segments;
|
||||
@ -203,16 +187,13 @@ READ8_MEMBER( md6802_state::pia2_kbA_r )
|
||||
ls145 = m_tb16_74145->read() & 0x0f;
|
||||
|
||||
// read out the artwork, line04 is handled by the timer
|
||||
m_line0 = m_io_line0->read();
|
||||
m_line1 = m_io_line1->read();
|
||||
m_line2 = m_io_line2->read();
|
||||
m_line3 = m_io_line3->read();
|
||||
for (unsigned i = 0U; 4U > i; ++i)
|
||||
{
|
||||
m_lines[i] = m_io_lines[i]->read();
|
||||
|
||||
// Mask out those rows that has a button pressed
|
||||
pa &= ~(((~m_line0 & ls145 ) != 0) ? 1 : 0);
|
||||
pa &= ~(((~m_line1 & ls145 ) != 0) ? 2 : 0);
|
||||
pa &= ~(((~m_line2 & ls145 ) != 0) ? 4 : 0);
|
||||
pa &= ~(((~m_line3 & ls145 ) != 0) ? 8 : 0);
|
||||
// Mask out those rows that has a button pressed
|
||||
pa &= ~(((~m_lines[i] & ls145) != 0) ? (1 << i) : 0);
|
||||
}
|
||||
|
||||
if (m_shift)
|
||||
{
|
||||
@ -341,32 +322,25 @@ class mp68a_state : public didact_state
|
||||
public:
|
||||
mp68a_state(const machine_config &mconfig, device_type type, const char * tag)
|
||||
: didact_state(mconfig, type, tag)
|
||||
,m_maincpu(*this, "maincpu")
|
||||
,m_digit0(*this, "digit0")
|
||||
,m_digit1(*this, "digit1")
|
||||
,m_digit2(*this, "digit2")
|
||||
,m_digit3(*this, "digit3")
|
||||
,m_digit4(*this, "digit4")
|
||||
,m_digit5(*this, "digit5")
|
||||
,m_pia1(*this, PIA1_TAG)
|
||||
,m_pia2(*this, PIA2_TAG)
|
||||
{ }
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_7segs(*this, "digit%u", 0U)
|
||||
, m_pia1(*this, PIA1_TAG)
|
||||
, m_pia2(*this, PIA2_TAG)
|
||||
{ }
|
||||
|
||||
required_device<m6800_cpu_device> m_maincpu;
|
||||
|
||||
// The display segment driver device (there is actually just one, needs rewrite to be correct)
|
||||
required_device<dm9368_device> m_digit0;
|
||||
required_device<dm9368_device> m_digit1;
|
||||
required_device<dm9368_device> m_digit2;
|
||||
required_device<dm9368_device> m_digit3;
|
||||
required_device<dm9368_device> m_digit4;
|
||||
required_device<dm9368_device> m_digit5;
|
||||
required_device_array<dm9368_device, 6> m_digits;
|
||||
output_finder<6> m_7segs;
|
||||
|
||||
DECLARE_READ8_MEMBER( pia2_kbA_r );
|
||||
DECLARE_WRITE8_MEMBER( pia2_kbA_w );
|
||||
DECLARE_READ8_MEMBER( pia2_kbB_r );
|
||||
DECLARE_WRITE8_MEMBER( pia2_kbB_w );
|
||||
DECLARE_READ_LINE_MEMBER( pia2_cb1_r );
|
||||
template <unsigned N> DECLARE_WRITE8_MEMBER( digit_w ) { m_7segs[N] = data; }
|
||||
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override;
|
||||
@ -386,24 +360,26 @@ READ8_MEMBER( mp68a_state::pia2_kbA_r )
|
||||
|
||||
WRITE8_MEMBER( mp68a_state::pia2_kbA_w )
|
||||
{
|
||||
uint8_t digit_nbr;
|
||||
|
||||
/* Display memory is at $702 to $708 in AAAADD format (A=address digit, D=Data digit)
|
||||
but we are using data read from the port. */
|
||||
digit_nbr = (data >> 4) & 0x07;
|
||||
uint8_t const digit_nbr = (data >> 4) & 0x07;
|
||||
|
||||
/* There is actually only one 9368 and a 74145 to drive the cathode of the right digit low */
|
||||
/* This can be emulated by prentending there are one 9368 per digit, at least for now */
|
||||
switch (digit_nbr)
|
||||
{
|
||||
case 0: m_digit0->a_w(data & 0x0f); break;
|
||||
case 1: m_digit1->a_w(data & 0x0f); break;
|
||||
case 2: m_digit2->a_w(data & 0x0f); break;
|
||||
case 3: m_digit3->a_w(data & 0x0f); break;
|
||||
case 4: m_digit4->a_w(data & 0x0f); break;
|
||||
case 5: m_digit5->a_w(data & 0x0f); break;
|
||||
case 7: break; // used as an 'unselect' by the ROM between digit accesses.
|
||||
default: logerror("Invalid digit index %d\n", digit_nbr);
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
m_digits[digit_nbr]->a_w(data & 0x0f);
|
||||
break;
|
||||
case 7: // used as an 'unselect' by the ROM between digit accesses.
|
||||
break;
|
||||
default:
|
||||
logerror("Invalid digit index %d\n", digit_nbr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -411,16 +387,16 @@ READ8_MEMBER( mp68a_state::pia2_kbB_r )
|
||||
{
|
||||
uint8_t a012, line, pb;
|
||||
|
||||
LOG("--->%s %02x %02x %02x %02x %02x => ", FUNCNAME, m_line0, m_line1, m_line2, m_line3, m_shift);
|
||||
LOG("--->%s %02x %02x %02x %02x %02x => ", FUNCNAME, m_lines[0], m_lines[1], m_lines[2], m_lines[3], m_shift);
|
||||
|
||||
a012 = 0;
|
||||
if ((line = (m_line0 | m_line1)) != 0)
|
||||
if ((line = (m_lines[0] | m_lines[1])) != 0)
|
||||
{
|
||||
a012 = 8;
|
||||
while (a012 > 0 && !(line & (1 << --a012)));
|
||||
a012 += 8;
|
||||
}
|
||||
if ( a012 == 0 && (line = ((m_line2) | m_line3)) != 0)
|
||||
if ( a012 == 0 && (line = ((m_lines[2]) | m_lines[3])) != 0)
|
||||
{
|
||||
a012 = 8;
|
||||
while (a012 > 0 && !(line & (1 << --a012)));
|
||||
@ -448,17 +424,15 @@ WRITE8_MEMBER( mp68a_state::pia2_kbB_w )
|
||||
|
||||
READ_LINE_MEMBER( mp68a_state::pia2_cb1_r )
|
||||
{
|
||||
m_line0 = m_io_line0->read();
|
||||
m_line1 = m_io_line1->read();
|
||||
m_line2 = m_io_line2->read();
|
||||
m_line3 = m_io_line3->read();
|
||||
for (unsigned i = 0U; 4U > i; ++i)
|
||||
m_lines[i] = m_io_lines[i]->read();
|
||||
|
||||
#if VERBOSE
|
||||
if ((m_line0 | m_line1 | m_line2 | m_line3) != 0)
|
||||
LOG("%s()-->%02x %02x %02x %02x\n", FUNCNAME, m_line0, m_line1, m_line2, m_line3);
|
||||
if (m_lines[0] | m_lines[1] | m_lines[2] | m_lines[3])
|
||||
LOG("%s()-->%02x %02x %02x %02x\n", FUNCNAME, m_lines[0], m_lines[1], m_lines[2], m_lines[3]);
|
||||
#endif
|
||||
|
||||
return (m_line0 | m_line1 | m_line2 | m_line3) != 0 ? 0 : 1;
|
||||
return (m_lines[0] | m_lines[1] | m_lines[2] | m_lines[3]) ? 0 : 1;
|
||||
}
|
||||
|
||||
void mp68a_state::machine_reset()
|
||||
@ -563,7 +537,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork)
|
||||
// LOG("--->%s()\n", FUNCNAME);
|
||||
|
||||
// Poll the artwork Reset key
|
||||
if ( (m_io_line4->read() & 0x04) )
|
||||
if (m_io_lines[4]->read() & 0x04)
|
||||
{
|
||||
LOG("RESET is pressed, resetting the CPU\n");
|
||||
m_shift = 0;
|
||||
@ -574,10 +548,9 @@ TIMER_DEVICE_CALLBACK_MEMBER(didact_state::scan_artwork)
|
||||
}
|
||||
m_reset = 1; // Inhibit multiple resets
|
||||
}
|
||||
|
||||
// Poll the artwork SHIFT/* key
|
||||
else if ( (m_io_line4->read() & 0x08) )
|
||||
else if (m_io_lines[4]->read() & 0x08)
|
||||
{
|
||||
// Poll the artwork SHIFT/* key
|
||||
LOG("%s", !m_shift ? "SHIFT is set\n" : "");
|
||||
m_shift = 1;
|
||||
output().set_led_value(m_led, m_shift); // For mp68a only
|
||||
@ -670,17 +643,17 @@ MACHINE_CONFIG_START(mp68a_state::mp68a)
|
||||
/* 0x086B 0x600 (Port A) = 0x50 */
|
||||
/* 0x086B 0x600 (Port A) = 0x70 */
|
||||
MCFG_DEVICE_ADD("digit0", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(0)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<0>))
|
||||
MCFG_DEVICE_ADD("digit1", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(1)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<1>))
|
||||
MCFG_DEVICE_ADD("digit2", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(2)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<2>))
|
||||
MCFG_DEVICE_ADD("digit3", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(3)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<3>))
|
||||
MCFG_DEVICE_ADD("digit4", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(4)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<4>))
|
||||
MCFG_DEVICE_ADD("digit5", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(5)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(mp68a_state, digit_w<5>))
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", mp68a_state, scan_artwork, attotime::from_hz(10))
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -203,6 +203,7 @@ void elf2_state::machine_start()
|
||||
address_space &program = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* initialize LED displays */
|
||||
m_7segs.resolve();
|
||||
m_led_l->rbi_w(1);
|
||||
m_led_h->rbi_w(1);
|
||||
|
||||
@ -265,9 +266,9 @@ MACHINE_CONFIG_START(elf2_state::elf2)
|
||||
MCFG_MM74C922_X4_CALLBACK(IOPORT("X4"))
|
||||
|
||||
MCFG_DEVICE_ADD(DM9368_H_TAG, DM9368, 0)
|
||||
MCFG_OUTPUT_NAME("digit0")
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(elf2_state, digit_w<0>))
|
||||
MCFG_DEVICE_ADD(DM9368_L_TAG, DM9368, 0)
|
||||
MCFG_OUTPUT_NAME("digit1")
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(elf2_state, digit_w<1>))
|
||||
|
||||
MCFG_CASSETTE_ADD("cassette")
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
|
||||
|
@ -44,19 +44,15 @@ the sound board should be fully discrete.
|
||||
class seabattl_state : public driver_device
|
||||
{
|
||||
public:
|
||||
seabattl_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
seabattl_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_videoram(*this, "videoram"),
|
||||
m_colorram(*this, "colorram"),
|
||||
m_objram(*this, "objram"),
|
||||
m_digit0(*this, "sc_thousand"),
|
||||
m_digit1(*this, "sc_hundred"),
|
||||
m_digit2(*this, "sc_half"),
|
||||
m_digit3(*this, "sc_unity"),
|
||||
m_digit4(*this, "tm_half"),
|
||||
m_digit5(*this, "tm_unity"),
|
||||
m_digits(*this, { "sc_thousand", "sc_hundred", "sc_half", "sc_unity", "tm_half", "tm_unity" }),
|
||||
m_s2636(*this, "s2636"),
|
||||
m_7segs(*this, "digit%u", 0U),
|
||||
m_waveenable(false),
|
||||
m_collision(0),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
@ -69,13 +65,9 @@ public:
|
||||
required_shared_ptr<uint8_t> m_videoram;
|
||||
required_shared_ptr<uint8_t> m_colorram;
|
||||
required_shared_ptr<uint8_t> m_objram;
|
||||
required_device<dm9368_device> m_digit0;
|
||||
required_device<dm9368_device> m_digit1;
|
||||
required_device<dm9368_device> m_digit2;
|
||||
required_device<dm9368_device> m_digit3;
|
||||
required_device<dm9368_device> m_digit4;
|
||||
required_device<dm9368_device> m_digit5;
|
||||
required_device_array<dm9368_device, 6> m_digits;
|
||||
required_device<s2636_device> m_s2636;
|
||||
output_finder<6> m_7segs;
|
||||
|
||||
tilemap_t *m_bg_tilemap;
|
||||
bitmap_ind16 m_collision_bg;
|
||||
@ -92,6 +84,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(time_display_w);
|
||||
DECLARE_WRITE8_MEMBER(score_display_w);
|
||||
DECLARE_WRITE8_MEMBER(score2_display_w);
|
||||
template <unsigned N> DECLARE_WRITE8_MEMBER( digit_w ) { m_7segs[N] = data; }
|
||||
|
||||
INTERRUPT_GEN_MEMBER(seabattl_interrupt);
|
||||
|
||||
@ -239,6 +232,7 @@ uint32_t seabattl_state::screen_update_seabattl(screen_device &screen, bitmap_in
|
||||
|
||||
void seabattl_state::video_start()
|
||||
{
|
||||
m_7segs.resolve();
|
||||
m_screen->register_screen_bitmap(m_collision_bg);
|
||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(FUNC(seabattl_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||
m_bg_tilemap->set_transparent_pen(0);
|
||||
@ -339,20 +333,20 @@ WRITE8_MEMBER(seabattl_state::sound2_w )
|
||||
|
||||
WRITE8_MEMBER(seabattl_state::time_display_w )
|
||||
{
|
||||
m_digit5->a_w(data & 0x0f);
|
||||
m_digit4->a_w((data >> 4) & 0x0f);
|
||||
m_digits[5]->a_w(data & 0x0f);
|
||||
m_digits[4]->a_w((data >> 4) & 0x0f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(seabattl_state::score_display_w )
|
||||
{
|
||||
m_digit3->a_w(data & 0x0f);
|
||||
m_digit2->a_w((data >> 4) & 0x0f);
|
||||
m_digits[3]->a_w(data & 0x0f);
|
||||
m_digits[2]->a_w((data >> 4) & 0x0f);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(seabattl_state::score2_display_w )
|
||||
{
|
||||
m_digit1->a_w(data & 0x0f);
|
||||
m_digit0->a_w((data >> 4) & 0x0f);
|
||||
m_digits[1]->a_w(data & 0x0f);
|
||||
m_digits[0]->a_w((data >> 4) & 0x0f);
|
||||
}
|
||||
|
||||
|
||||
@ -492,17 +486,17 @@ MACHINE_CONFIG_START(seabattl_state::seabattl)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10)
|
||||
|
||||
MCFG_DEVICE_ADD("sc_thousand", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(0)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<0>))
|
||||
MCFG_DEVICE_ADD("sc_hundred", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(1)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<1>))
|
||||
MCFG_DEVICE_ADD("sc_half", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(2)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<2>))
|
||||
MCFG_DEVICE_ADD("sc_unity", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(3)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<3>))
|
||||
MCFG_DEVICE_ADD("tm_half", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(4)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<4>))
|
||||
MCFG_DEVICE_ADD("tm_unity", DM9368, 0)
|
||||
MCFG_OUTPUT_INDEX(5)
|
||||
MCFG_DM9368_UPDATE_CALLBACK(WRITE8(seabattl_state, digit_w<5>))
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
|
@ -1,10 +1,10 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
#pragma once
|
||||
|
||||
#ifndef MAME_INCLUDES_ELF_H
|
||||
#define MAME_INCLUDES_ELF_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
#include "imagedev/cassette.h"
|
||||
@ -26,15 +26,16 @@ class elf2_state : public driver_device
|
||||
{
|
||||
public:
|
||||
elf2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, CDP1802_TAG),
|
||||
m_vdc(*this, CDP1861_TAG),
|
||||
m_kb(*this, MM74C923_TAG),
|
||||
m_led_l(*this, DM9368_L_TAG),
|
||||
m_led_h(*this, DM9368_H_TAG),
|
||||
m_cassette(*this, "cassette"),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_special(*this, "SPECIAL")
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, CDP1802_TAG)
|
||||
, m_vdc(*this, CDP1861_TAG)
|
||||
, m_kb(*this, MM74C923_TAG)
|
||||
, m_led_l(*this, DM9368_L_TAG)
|
||||
, m_led_h(*this, DM9368_H_TAG)
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_ram(*this, RAM_TAG)
|
||||
, m_special(*this, "SPECIAL")
|
||||
, m_7segs(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -45,6 +46,7 @@ public:
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_device<ram_device> m_ram;
|
||||
required_ioport m_special;
|
||||
output_finder<2> m_7segs;
|
||||
|
||||
virtual void machine_start() override;
|
||||
|
||||
@ -60,6 +62,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( sc_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( da_w );
|
||||
DECLARE_INPUT_CHANGED_MEMBER( input_w );
|
||||
template <unsigned N> DECLARE_WRITE8_MEMBER( digit_w ) { m_7segs[N] = data; }
|
||||
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER( elf );
|
||||
// display state
|
||||
|
Loading…
Reference in New Issue
Block a user