summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2018-03-28 23:36:47 +1100
committer Robbbert <Robbbert@users.noreply.github.com>2018-03-28 23:36:47 +1100
commit0ec48c3f40b9ea0586702b3dde7095b1c9f6d772 (patch)
tree2142156c40f736caca8d061d55ef6ea665f790b9
parent50c373be6f730eb3d1dc5efa20952fbc208a1cc2 (diff)
(nw) output finder for marywu,mekd2,mk1,mk14,pmi80,pro80,ravens,savia84,selz80,tec1,vcs80,zapcomp
-rw-r--r--src/mame/drivers/marywu.cpp12
-rw-r--r--src/mame/drivers/mekd2.cpp10
-rw-r--r--src/mame/drivers/mk1.cpp19
-rw-r--r--src/mame/drivers/mk14.cpp10
-rw-r--r--src/mame/drivers/pmi80.cpp11
-rw-r--r--src/mame/drivers/pro80.cpp15
-rw-r--r--src/mame/drivers/ravens.cpp7
-rw-r--r--src/mame/drivers/savia84.cpp6
-rw-r--r--src/mame/drivers/selz80.cpp10
-rw-r--r--src/mame/drivers/tec1.cpp29
-rw-r--r--src/mame/drivers/vcs80.cpp5
-rw-r--r--src/mame/drivers/zapcomputer.cpp24
-rw-r--r--src/mame/includes/vcs80.h16
13 files changed, 114 insertions, 60 deletions
diff --git a/src/mame/drivers/marywu.cpp b/src/mame/drivers/marywu.cpp
index 4275714fb5d..5212016a953 100644
--- a/src/mame/drivers/marywu.cpp
+++ b/src/mame/drivers/marywu.cpp
@@ -29,6 +29,7 @@ class marywu_state : public driver_device
public:
marywu_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(display_7seg_data_w);
@@ -43,6 +44,8 @@ public:
void program_map(address_map &map);
private:
uint8_t m_selected_7seg_module;
+ virtual void machine_start() override;
+ output_finder<32> m_digits;
};
static INPUT_PORTS_START( marywu )
@@ -153,8 +156,8 @@ WRITE8_MEMBER( marywu_state::display_7seg_data_w )
{
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // HEF4511BP (7 seg display driver)
- output().set_digit_value(2 * m_selected_7seg_module + 0, patterns[data & 0x0F]);
- output().set_digit_value(2 * m_selected_7seg_module + 1, patterns[(data >> 4) & 0x0F]);
+ m_digits[2 * m_selected_7seg_module + 0] = patterns[data & 0x0F];
+ m_digits[2 * m_selected_7seg_module + 1] = patterns[data >> 4];
}
void marywu_state::program_map(address_map &map)
@@ -173,6 +176,11 @@ void marywu_state::io_map(address_map &map)
map(0xf000, 0xf000).noprw(); /* TODO: Investigate this. There's something going on at this address range. */
}
+void marywu_state::machine_start()
+{
+ m_digits.resolve();
+}
+
MACHINE_CONFIG_START(marywu_state::marywu)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", I80C31, XTAL(10'738'635)) //actual CPU is a Winbond w78c31b-24
diff --git a/src/mame/drivers/mekd2.cpp b/src/mame/drivers/mekd2.cpp
index da6dd0d47c0..9d2ff88e9cc 100644
--- a/src/mame/drivers/mekd2.cpp
+++ b/src/mame/drivers/mekd2.cpp
@@ -102,6 +102,7 @@ public:
, m_pia_u(*this, "pia_u")
, m_acia(*this, "acia")
, m_cass(*this, "cassette")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ_LINE_MEMBER(mekd2_key40_r);
@@ -124,11 +125,13 @@ private:
uint8_t m_keydata;
bool m_cass_state;
bool m_cassold;
+ virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
required_device<pia6821_device> m_pia_s;
required_device<pia6821_device> m_pia_u;
required_device<acia6850_device> m_acia;
required_device<cassette_image_device> m_cass;
+ output_finder<6> m_digits;
};
@@ -285,7 +288,7 @@ WRITE8_MEMBER( mekd2_state::mekd2_digit_w )
for (i = 0; i < 6; i++)
{
if (BIT(data, i))
- output().set_digit_value(i, ~m_segment & 0x7f);
+ m_digits[i] = ~m_segment & 0x7f;
}
}
m_digit = data;
@@ -359,6 +362,11 @@ TIMER_DEVICE_CALLBACK_MEMBER(mekd2_state::mekd2_p)
}
}
+void mekd2_state::machine_start()
+{
+ m_digits.resolve();
+}
+
/***********************************************************
Machine
diff --git a/src/mame/drivers/mk1.cpp b/src/mame/drivers/mk1.cpp
index f891946207d..be9b848cbdd 100644
--- a/src/mame/drivers/mk1.cpp
+++ b/src/mame/drivers/mk1.cpp
@@ -52,20 +52,24 @@ class mk1_state : public driver_device
{
public:
mk1_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)
+ { }
DECLARE_READ8_MEMBER(mk1_f8_r);
DECLARE_WRITE8_MEMBER(mk1_f8_w);
- uint8_t m_f8[2];
- uint8_t m_led[4];
- virtual void machine_start() override;
TIMER_DEVICE_CALLBACK_MEMBER(mk1_update_leds);
F3853_INTERRUPT_REQ_CB(mk1_interrupt);
- required_device<cpu_device> m_maincpu;
void mk1(machine_config &config);
void mk1_io(address_map &map);
void mk1_mem(address_map &map);
+private:
+ uint8_t m_f8[2];
+ uint8_t m_led[4];
+ virtual void machine_start() override;
+ required_device<cpu_device> m_maincpu;
+ output_finder<4> m_digits;
};
@@ -162,7 +166,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk1_state::mk1_update_leds)
{
for (int i = 0; i < 4; i++)
{
- output().set_digit_value(i, m_led[i] >> 1);
+ m_digits[i] = m_led[i] >> 1;
output().set_led_value(i, m_led[i] & 0x01);
m_led[i] = 0;
}
@@ -171,6 +175,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(mk1_state::mk1_update_leds)
void mk1_state::machine_start()
{
+ m_digits.resolve();
}
diff --git a/src/mame/drivers/mk14.cpp b/src/mame/drivers/mk14.cpp
index 76c7cecb31d..89389b2b28e 100644
--- a/src/mame/drivers/mk14.cpp
+++ b/src/mame/drivers/mk14.cpp
@@ -54,6 +54,7 @@ public:
, m_keyboard(*this, "X.%u", 0)
, m_cass(*this, "cassette")
, m_dac(*this, "dac")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(keyboard_r);
@@ -65,10 +66,12 @@ public:
void mem_map(address_map &map);
private:
virtual void machine_reset() override;
+ virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
required_ioport_array<8> m_keyboard;
required_device<cassette_image_device> m_cass;
required_device<dac_bit_interface> m_dac;
+ output_finder<8> m_digits;
};
/*
@@ -100,7 +103,7 @@ READ8_MEMBER( mk14_state::keyboard_r )
WRITE8_MEMBER( mk14_state::display_w )
{
if (offset < 8 )
- output().set_digit_value(offset, data);
+ m_digits[offset] = data;
else
{
//logerror("write %02x to %02x\n",data,offset);
@@ -191,6 +194,11 @@ void mk14_state::machine_reset()
{
}
+void mk14_state::machine_start()
+{
+ m_digits.resolve();
+}
+
MACHINE_CONFIG_START(mk14_state::mk14)
/* basic machine hardware */
// IC1 1SP-8A/600 (8060) SC/MP Microprocessor
diff --git a/src/mame/drivers/pmi80.cpp b/src/mame/drivers/pmi80.cpp
index 22d4f539f88..e10a0e05a27 100644
--- a/src/mame/drivers/pmi80.cpp
+++ b/src/mame/drivers/pmi80.cpp
@@ -44,6 +44,7 @@ public:
: driver_device(mconfig, type, tag)
, m_ledready(0)
, m_maincpu(*this, "maincpu")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(keyboard_r);
@@ -56,7 +57,9 @@ private:
uint8_t m_keyrow;
bool m_ledready;
virtual void machine_reset() override;
+ virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
+ output_finder<10> m_digits;
};
@@ -78,7 +81,8 @@ WRITE8_MEMBER( pmi80_state::leds_w )
if (m_ledready)
{
m_ledready = false;
- output().set_digit_value(m_keyrow^0xff, data^0xff);
+ if (m_keyrow > 0xF5) // to be sure to be sure
+ m_digits[m_keyrow^0xff] = data^0xff;
}
}
@@ -156,6 +160,11 @@ void pmi80_state::machine_reset()
{
}
+void pmi80_state::machine_start()
+{
+ m_digits.resolve();
+}
+
MACHINE_CONFIG_START(pmi80_state::pmi80)
/* basic machine hardware */
diff --git a/src/mame/drivers/pro80.cpp b/src/mame/drivers/pro80.cpp
index da11277c446..054b36102ef 100644
--- a/src/mame/drivers/pro80.cpp
+++ b/src/mame/drivers/pro80.cpp
@@ -38,6 +38,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_cass(*this, "cassette")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(digit_w);
@@ -53,8 +54,10 @@ private:
uint8_t m_cass_in;
uint16_t m_cass_data[4];
void machine_reset() override;
+ virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<cassette_image_device> m_cass;
+ output_finder<6> m_digits;
};
// This can read the first few bytes correctly, but after that bit slippage occurs.
@@ -87,12 +90,12 @@ WRITE8_MEMBER( pro80_state::segment_w )
{
if (m_digit_sel)
{
- if (!BIT(m_digit_sel, 0)) output().set_digit_value(0, data);
- if (!BIT(m_digit_sel, 1)) output().set_digit_value(1, data);
- if (!BIT(m_digit_sel, 2)) output().set_digit_value(2, data);
- if (!BIT(m_digit_sel, 3)) output().set_digit_value(3, data);
- if (!BIT(m_digit_sel, 4)) output().set_digit_value(4, data);
- if (!BIT(m_digit_sel, 5)) output().set_digit_value(5, data);
+ if (!BIT(m_digit_sel, 0)) m_digits[0] = data;
+ if (!BIT(m_digit_sel, 1)) m_digits[1] = data;
+ if (!BIT(m_digit_sel, 2)) m_digits[2] = data;
+ if (!BIT(m_digit_sel, 3)) m_digits[3] = data;
+ if (!BIT(m_digit_sel, 4)) m_digits[4] = data;
+ if (!BIT(m_digit_sel, 5)) m_digits[5] = data;
m_digit_sel = 0;
}
diff --git a/src/mame/drivers/ravens.cpp b/src/mame/drivers/ravens.cpp
index e2fac7c49ad..0172e558fdc 100644
--- a/src/mame/drivers/ravens.cpp
+++ b/src/mame/drivers/ravens.cpp
@@ -89,6 +89,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_terminal(*this, "terminal")
, m_cass(*this, "cassette")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(port07_r);
@@ -111,9 +112,11 @@ public:
private:
uint8_t m_term_char;
uint8_t m_term_data;
+ virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
optional_device<generic_terminal_device> m_terminal;
required_device<cassette_image_device> m_cass;
+ output_finder<7> m_digits;
};
WRITE_LINE_MEMBER( ravens_state::cass_w )
@@ -128,7 +131,7 @@ READ_LINE_MEMBER( ravens_state::cass_r )
WRITE8_MEMBER( ravens_state::display_w )
{
- output().set_digit_value(offset, data);
+ m_digits[offset] = data;
}
WRITE8_MEMBER( ravens_state::leds_w )
@@ -202,7 +205,7 @@ WRITE8_MEMBER( ravens_state::port1c_w )
MACHINE_RESET_MEMBER( ravens_state, ravens2 )
{
m_term_data = 0x80;
- output().set_digit_value(6, 0);
+ m_digits[6] = 0;
}
diff --git a/src/mame/drivers/savia84.cpp b/src/mame/drivers/savia84.cpp
index 5635086aea2..fdd916f7f97 100644
--- a/src/mame/drivers/savia84.cpp
+++ b/src/mame/drivers/savia84.cpp
@@ -41,6 +41,7 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_ppi8255(*this, "ppi8255")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_READ8_MEMBER(savia84_8255_portc_r);
@@ -57,8 +58,10 @@ private:
uint8_t m_digit;
uint8_t m_digit_last;
virtual void machine_reset() override;
+ virtual void machine_start() override { m_digits.resolve(); }
required_device<cpu_device> m_maincpu;
required_device<i8255_device> m_ppi8255;
+ output_finder<9> m_digits;
};
void savia84_state::mem_map(address_map &map)
@@ -138,7 +141,8 @@ void savia84_state::machine_reset()
WRITE8_MEMBER( savia84_state::savia84_8255_porta_w ) // OUT F8 - output segments on the selected digit
{
m_segment = ~data & 0x7f;
- if (m_digit && (m_digit != m_digit_last)) output().set_digit_value(m_digit, m_segment);
+ if (m_digit && (m_digit != m_digit_last))
+ m_digits[m_digit] = m_segment;
m_digit_last = m_digit;
}
diff --git a/src/mame/drivers/selz80.cpp b/src/mame/drivers/selz80.cpp
index 16971e83611..d5d199131e0 100644
--- a/src/mame/drivers/selz80.cpp
+++ b/src/mame/drivers/selz80.cpp
@@ -47,6 +47,7 @@ public:
, m_p_ram(*this, "ram")
, m_keyboard(*this, "X%u", 0)
, m_clock(*this, "uart_clock")
+ , m_digits(*this, "digit%u", 0U)
{ }
DECLARE_WRITE8_MEMBER(scanlines_w);
@@ -67,6 +68,8 @@ private:
optional_shared_ptr<uint8_t> m_p_ram;
required_ioport_array<4> m_keyboard;
required_device<clock_device> m_clock;
+ output_finder<8> m_digits;
+ virtual void machine_start() override;
};
void selz80_state::dagz80_mem(address_map &map)
@@ -193,7 +196,7 @@ WRITE8_MEMBER( selz80_state::scanlines_w )
WRITE8_MEMBER( selz80_state::digit_w )
{
- output().set_digit_value(m_digit, bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4));
+ m_digits[m_digit] = bitswap<8>(data, 3, 2, 1, 0, 7, 6, 5, 4);
}
READ8_MEMBER( selz80_state::kbd_r )
@@ -206,6 +209,11 @@ READ8_MEMBER( selz80_state::kbd_r )
return data;
}
+void selz80_state::machine_start()
+{
+ m_digits.resolve();
+}
+
MACHINE_CONFIG_START(selz80_state::selz80)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL(4'000'000)) // it's actually a 5MHz XTAL with a NEC uPD780C-1 cpu
diff --git a/src/mame/drivers/tec1.cpp b/src/mame/drivers/tec1.cpp
index 8a261532970..14510574b6e 100644
--- a/src/mame/drivers/tec1.cpp
+++ b/src/mame/drivers/tec1.cpp
@@ -85,17 +85,18 @@ class tec1_state : public driver_device
{
public:
tec1_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_cass(*this, "cassette"),
- m_wave(*this, WAVE_TAG),
- m_key_pressed(0),
- m_io_line0(*this, "LINE0"),
- m_io_line1(*this, "LINE1"),
- m_io_line2(*this, "LINE2"),
- m_io_line3(*this, "LINE3"),
- m_io_shift(*this, "SHIFT")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_speaker(*this, "speaker")
+ , m_cass(*this, "cassette")
+ , m_wave(*this, WAVE_TAG)
+ , m_key_pressed(0)
+ , m_io_line0(*this, "LINE0")
+ , m_io_line1(*this, "LINE1")
+ , m_io_line2(*this, "LINE2")
+ , m_io_line3(*this, "LINE3")
+ , m_io_shift(*this, "SHIFT")
+ , m_digits(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
@@ -108,6 +109,7 @@ public:
required_ioport m_io_line2;
required_ioport m_io_line3;
required_ioport m_io_shift;
+ output_finder<6> m_digits;
emu_timer *m_kbd_timer;
DECLARE_READ8_MEMBER( tec1_kbd_r );
DECLARE_READ8_MEMBER( latch_r );
@@ -241,12 +243,12 @@ TIMER_CALLBACK_MEMBER(tec1_state::tec1_kbd_callback)
if (BIT(m_digit, i))
{
m_refresh[i] = 1;
- output().set_digit_value(i, m_segment);
+ m_digits[i] = m_segment;
}
else
if (m_refresh[i] == 0x80)
{
- output().set_digit_value(i, 0);
+ m_digits[i] = 0;
m_refresh[i] = 0;
}
else
@@ -310,6 +312,7 @@ TIMER_CALLBACK_MEMBER(tec1_state::tec1_kbd_callback)
void tec1_state::machine_start()
{
+ m_digits.resolve();
m_kbd_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(tec1_state::tec1_kbd_callback),this));
m_kbd_timer->adjust( attotime::zero, 0, attotime::from_hz(500) );
}
diff --git a/src/mame/drivers/vcs80.cpp b/src/mame/drivers/vcs80.cpp
index 30f0afe2c5b..bbe40dc72f5 100644
--- a/src/mame/drivers/vcs80.cpp
+++ b/src/mame/drivers/vcs80.cpp
@@ -181,13 +181,12 @@ WRITE8_MEMBER( vcs80_state::pio_pb_w )
*/
- uint8_t led_data = bitswap<8>(data & 0x7f, 7, 5, 6, 4, 3, 2, 1, 0);
int digit = m_keylatch;
/* skip middle digit */
if (digit > 3) digit++;
- output().set_digit_value(8 - digit, led_data);
+ m_digits[8 - digit] = bitswap<8>(data & 0x7f, 7, 5, 6, 4, 3, 2, 1, 0);
}
/* Z80 Daisy Chain */
@@ -202,6 +201,8 @@ static const z80_daisy_config vcs80_daisy_chain[] =
void vcs80_state::machine_start()
{
+ m_digits.resolve();
+
m_pio->strobe_a(1);
m_pio->strobe_b(1);
diff --git a/src/mame/drivers/zapcomputer.cpp b/src/mame/drivers/zapcomputer.cpp
index b5301eeba90..bd84dbdbc25 100644
--- a/src/mame/drivers/zapcomputer.cpp
+++ b/src/mame/drivers/zapcomputer.cpp
@@ -37,6 +37,7 @@ public:
zapcomp_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)
{ }
DECLARE_READ8_MEMBER(keyboard_r);
@@ -49,6 +50,7 @@ private:
uint8_t decode7seg(uint8_t data);
virtual void machine_start() override;
required_device<cpu_device> m_maincpu;
+ output_finder<6> m_digits;
};
uint8_t zapcomp_state::decode7seg(uint8_t data)
@@ -71,22 +73,11 @@ uint8_t zapcomp_state::decode7seg(uint8_t data)
WRITE8_MEMBER( zapcomp_state::display_7seg_w )
{
- switch (offset){
- case 0: //Port 0x05 : address HI
- output().set_digit_value(0, decode7seg(data >> 4));
- output().set_digit_value(1, decode7seg(data));
- break;
- case 1: //Port 0x06 : address LOW
- output().set_digit_value(2, decode7seg(data >> 4));
- output().set_digit_value(3, decode7seg(data));
- break;
- case 2: //Port 0x07 : data
- output().set_digit_value(4, decode7seg(data >> 4));
- output().set_digit_value(5, decode7seg(data));
- break;
- default:
- break;
- }
+ //Port 0x05 : address HI
+ //Port 0x06 : address LOW
+ //Port 0x07 : data
+ m_digits[offset*2] = decode7seg(data >> 4);
+ m_digits[offset*2+1] = decode7seg(data);
}
READ8_MEMBER( zapcomp_state::keyboard_r )
@@ -159,6 +150,7 @@ INPUT_PORTS_END
void zapcomp_state::machine_start()
{
+ m_digits.resolve();
}
MACHINE_CONFIG_START(zapcomp_state::zapcomp)
diff --git a/src/mame/includes/vcs80.h b/src/mame/includes/vcs80.h
index 756789cd25c..2f251070092 100644
--- a/src/mame/includes/vcs80.h
+++ b/src/mame/includes/vcs80.h
@@ -21,13 +21,14 @@ class vcs80_state : public driver_device
{
public:
vcs80_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, Z80_TAG),
- m_pio(*this, Z80PIO_TAG),
- m_y0(*this, "Y0"),
- m_y1(*this, "Y1"),
- m_y2(*this, "Y2"),
- m_bdmem(*this, "bdmem")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, Z80_TAG)
+ , m_pio(*this, Z80PIO_TAG)
+ , m_y0(*this, "Y0")
+ , m_y1(*this, "Y1")
+ , m_y2(*this, "Y2")
+ , m_bdmem(*this, "bdmem")
+ , m_digits(*this, "digit%u", 0U)
{ }
required_device<cpu_device> m_maincpu;
@@ -36,6 +37,7 @@ public:
required_ioport m_y1;
required_ioport m_y2;
required_device<address_map_bank_device> m_bdmem;
+ output_finder<9> m_digits;
virtual void machine_start() override;