summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2019-06-15 03:49:46 +0200
committer hap <happppp@users.noreply.github.com>2019-06-15 03:49:59 +0200
commit3046353665835e1a2d4299f85c896ee88f50db93 (patch)
tree26a58f4e7d75dd419b792bbd22a9194e1a29ae59
parent84150ccc0e52fb1ca6a7bb1796ba6c42e9215f41 (diff)
hh*: using pwm_display_device for some drivers (nw)
-rw-r--r--src/devices/video/pwm.cpp2
-rw-r--r--src/mame/drivers/cking_master.cpp1
-rw-r--r--src/mame/drivers/cxg_ch2001.cpp1
-rw-r--r--src/mame/drivers/hh_amis2k.cpp13
-rw-r--r--src/mame/drivers/hh_cop400.cpp108
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp152
-rw-r--r--src/mame/drivers/hh_melps4.cpp31
-rw-r--r--src/mame/drivers/hh_pic16.cpp20
-rw-r--r--src/mame/drivers/hh_sm510.cpp6
-rw-r--r--src/mame/drivers/hh_tms1k.cpp46
-rw-r--r--src/mame/drivers/hh_ucom4.cpp103
-rw-r--r--src/mame/drivers/rzone.cpp2
-rw-r--r--src/mame/drivers/tb303.cpp6
-rw-r--r--src/mame/drivers/ticalc1x.cpp8
-rw-r--r--src/mame/drivers/tispeak.cpp6
-rw-r--r--src/mame/drivers/tispellb.cpp2
-rw-r--r--src/mame/drivers/tr606.cpp1
-rw-r--r--src/mame/includes/hh_sm510.h8
-rw-r--r--src/mame/includes/hh_tms1k.h4
-rw-r--r--src/mame/includes/hh_ucom4.h15
-rw-r--r--src/mame/layout/funrlgl.lay10
21 files changed, 336 insertions, 209 deletions
diff --git a/src/devices/video/pwm.cpp b/src/devices/video/pwm.cpp
index c54cdbc979a..32843125ef7 100644
--- a/src/devices/video/pwm.cpp
+++ b/src/devices/video/pwm.cpp
@@ -10,7 +10,7 @@ implies a powered-on display element (eg, a LED, or VFD sprite). The maximum mat
size is 64 by 64, simply due to uint64_t constraints. If a larger size is needed,
create an array of pwm_display_device.
-If display elements are directly addressable, you can use write_element or write_row
+If display elements are directly addressable, you can also use write_element or write_row
to set them. In this case it is required to call update() to apply the changes.
Display element states are sent to output tags "y.x" where y is the matrix row number,
diff --git a/src/mame/drivers/cking_master.cpp b/src/mame/drivers/cking_master.cpp
index 9d2ddcb4893..3cff14b7d03 100644
--- a/src/mame/drivers/cking_master.cpp
+++ b/src/mame/drivers/cking_master.cpp
@@ -296,6 +296,7 @@ void master_state::master(machine_config &config)
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(22870)); // active for 22.87us
TIMER(config, "irq_off").configure_periodic(FUNC(master_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
+ /* video hardware */
PWM_DISPLAY(config, m_display).set_size(9, 2);
config.set_default_layout(layout_ck_master);
diff --git a/src/mame/drivers/cxg_ch2001.cpp b/src/mame/drivers/cxg_ch2001.cpp
index 9df4c7136ff..9acf7e4db1c 100644
--- a/src/mame/drivers/cxg_ch2001.cpp
+++ b/src/mame/drivers/cxg_ch2001.cpp
@@ -251,6 +251,7 @@ void ch2001_state::ch2001(machine_config &config)
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(18300)); // active for 18.3us
TIMER(config, "irq_off").configure_periodic(FUNC(ch2001_state::irq_off<INPUT_LINE_IRQ0>), irq_period);
+ /* video hardware */
PWM_DISPLAY(config, m_display).set_size(10, 8);
config.set_default_layout(layout_cxg_ch2001);
diff --git a/src/mame/drivers/hh_amis2k.cpp b/src/mame/drivers/hh_amis2k.cpp
index fc98c6067b5..3481b944243 100644
--- a/src/mame/drivers/hh_amis2k.cpp
+++ b/src/mame/drivers/hh_amis2k.cpp
@@ -33,14 +33,14 @@ public:
m_maincpu(*this, "maincpu"),
m_display(*this, "display"),
m_speaker(*this, "speaker"),
- m_inp_matrix(*this, "IN.%u", 0)
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<amis2000_base_device> m_maincpu;
optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
- optional_ioport_array<4> m_inp_matrix; // max 4
+ optional_ioport_array<4> m_inputs; // max 4
// misc common
u16 m_a; // MCU address bus
@@ -94,7 +94,7 @@ u8 hh_amis2k_state::read_inputs(int columns)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
return ret;
}
@@ -187,8 +187,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(wildfire_state::speaker_decay_sim)
void wildfire_state::prepare_display()
{
- // A0-A2 are 7segs
- m_display->segmask(7, 0x7f);
m_display->matrix(~m_a, m_d);
}
@@ -201,7 +199,8 @@ WRITE8_MEMBER(wildfire_state::write_d)
WRITE16_MEMBER(wildfire_state::write_a)
{
- // A0-A11: digit/led select
+ // A0-A2: digit select
+ // A3-A11: led select
m_a = data;
prepare_display();
@@ -245,7 +244,9 @@ void wildfire_state::wildfire(machine_config &config)
m_maincpu->write_a().set(FUNC(wildfire_state::write_a));
m_maincpu->write_f().set(FUNC(wildfire_state::write_f));
+ /* video hardware */
PWM_DISPLAY(config, m_display).set_size(12, 8);
+ m_display->set_segmask(7, 0x7f);
m_display->set_bri_levels(0.02, 0.1); // bumpers are dimmed
config.set_default_layout(layout_wildfire);
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index e57b6762dd3..5304e79fb1a 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -17,9 +17,8 @@
***************************************************************************/
#include "emu.h"
-#include "includes/screenless.h"
-
#include "cpu/cop400/cop400.h"
+#include "video/pwm.h"
#include "machine/timer.h"
#include "sound/spkrdev.h"
#include "sound/dac.h"
@@ -46,20 +45,22 @@
//#include "hh_cop400_test.lh" // common test-layout - use external artwork
-class hh_cop400_state : public screenless_state
+class hh_cop400_state : public driver_device
{
public:
hh_cop400_state(const machine_config &mconfig, device_type type, const char *tag) :
- screenless_state(mconfig, type, tag),
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_speaker(*this, "speaker")
+ m_display(*this, "display"),
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<cop400_cpu_device> m_maincpu;
- optional_ioport_array<6> m_inp_matrix; // max 6
+ optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<6> m_inputs; // max 6
// misc common
u8 m_l; // MCU port L write data
@@ -82,8 +83,6 @@ protected:
void hh_cop400_state::machine_start()
{
- screenless_state::machine_start();
-
// zerofill
m_l = 0;
m_g = 0;
@@ -123,7 +122,7 @@ u16 hh_cop400_state::read_inputs(int columns, u16 colmask)
// read selected input rows
for (int i = 0; i < columns; i++)
if (~m_inp_mux >> i & 1)
- ret &= m_inp_matrix[i]->read();
+ ret &= m_inputs[i]->read();
return ret;
}
@@ -179,7 +178,7 @@ WRITE8_MEMBER(ctstein_state::write_g)
WRITE8_MEMBER(ctstein_state::write_l)
{
// L0-L3: button lamps
- display_matrix(4, 1, data & 0xf, 1);
+ m_display->matrix(1, data & 0xf);
}
READ8_MEMBER(ctstein_state::read_l)
@@ -220,6 +219,8 @@ void ctstein_state::ctstein(machine_config &config)
m_maincpu->write_sk().set(m_speaker, FUNC(speaker_sound_device::level_w));
m_maincpu->read_l().set(FUNC(ctstein_state::read_l));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(1, 4);
config.set_default_layout(layout_ctstein);
/* sound hardware */
@@ -293,16 +294,16 @@ WRITE8_MEMBER(h2hbaskbc_state::write_l)
u16 sel = (m_g | m_d << 4 | m_g << 8 | m_d << 12) & mask;
// D2+G0,G1 are 7segs
- set_display_segmask(3, 0x7f);
+ m_display->segmask(3, 0x7f);
// L0-L6: digit segments A-G, L0-L4: led data
- display_matrix(7, 16, data, sel);
+ m_display->matrix(sel, data);
}
READ8_MEMBER(h2hbaskbc_state::read_in)
{
// IN: multiplexed inputs
- return read_inputs(4, 7) | (m_inp_matrix[4]->read() & 8);
+ return read_inputs(4, 7) | (m_inputs[4]->read() & 8);
}
// config
@@ -367,6 +368,8 @@ void h2hbaskbc_state::h2hbaskbc(machine_config &config)
m_maincpu->read_in().set(FUNC(h2hbaskbc_state::read_in));
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(16, 7);
config.set_default_layout(layout_h2hbaskbc);
/* sound hardware */
@@ -431,18 +434,15 @@ public:
void einvaderc_state::prepare_display()
{
- // D0-D2 are 7segs
- set_display_segmask(7, 0x7f);
-
- // update display
u8 l = bitswap<8>(m_l,7,6,0,1,2,3,4,5);
u16 grid = (m_d | m_g << 4 | m_sk << 8 | m_so << 9) ^ 0x0ff;
- display_matrix(8, 10, l, grid);
+
+ m_display->matrix(grid, l);
}
WRITE8_MEMBER(einvaderc_state::write_d)
{
- // D: led grid 0-3
+ // D: led grid 0-3 (D0-D2 are 7segs)
m_d = data;
prepare_display();
}
@@ -506,6 +506,8 @@ void einvaderc_state::einvaderc(machine_config &config)
screen.set_size(913, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 8);
+ m_display->set_segmask(7, 0x7f);
config.set_default_layout(layout_einvaderc);
/* sound hardware */
@@ -562,12 +564,12 @@ public:
void unkeinv_state::prepare_display()
{
- display_matrix(8+8, 8+12, m_g << 4 | m_d, m_l, false);
+ m_display->matrix(m_l, m_g << 4 | m_d, false);
// positional led row is on L6,L7
- u16 wand = m_display_state[7] << 8 | m_display_state[6];
- m_display_state[8 + m_inp_matrix[1]->read()] = wand;
- display_update();
+ u16 wand = m_display->read_row(7) << 8 | m_display->read_row(6);
+ m_display->write_row(8 + m_inputs[1]->read(), wand);
+ m_display->update();
}
WRITE8_MEMBER(unkeinv_state::write_g)
@@ -598,14 +600,14 @@ READ8_MEMBER(unkeinv_state::read_l)
// L0-L5+G2: positional odd
// L0-L5+G3: positional even
- u8 pos = m_inp_matrix[1]->read();
+ u8 pos = m_inputs[1]->read();
if (m_g & 4 && pos & 1)
ret ^= (1 << (pos >> 1));
if (m_g & 8 && ~pos & 1)
ret ^= (1 << (pos >> 1));
// L7+G3: fire button
- if (m_g & 8 && m_inp_matrix[0]->read())
+ if (m_g & 8 && m_inputs[0]->read())
ret ^= 0x80;
return ret & ~m_l;
@@ -633,6 +635,8 @@ void unkeinv_state::unkeinv(machine_config &config)
m_maincpu->read_l_tristate().set_constant(0xff);
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8+12, 8+8);
config.set_default_layout(layout_unkeinv);
/* sound hardware */
@@ -719,7 +723,7 @@ WRITE8_MEMBER(lchicken_state::write_l)
// L0-L3: led data
// L4-L6: led select
// L7: N/C
- display_matrix(4, 3, ~data & 0xf, data >> 4 & 7);
+ m_display->matrix(data >> 4 & 7, ~data & 0xf);
}
WRITE8_MEMBER(lchicken_state::write_d)
@@ -795,6 +799,9 @@ void lchicken_state::lchicken(machine_config &config)
m_maincpu->read_si().set(FUNC(lchicken_state::read_si));
TIMER(config, "chicken_motor").configure_periodic(FUNC(lchicken_state::motor_sim_tick), attotime::from_msec(6000/0x100)); // ~6sec for a full rotation
+
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(3, 4);
config.set_default_layout(layout_lchicken);
/* sound hardware */
@@ -843,14 +850,14 @@ WRITE8_MEMBER(funjacks_state::write_d)
// D: led grid + input mux
m_inp_mux = data;
m_d = ~data & 0xf;
- display_matrix(2, 4, m_l, m_d);
+ m_display->matrix(m_d, m_l);
}
WRITE8_MEMBER(funjacks_state::write_l)
{
// L0,L1: led state
m_l = data & 3;
- display_matrix(2, 4, m_l, m_d);
+ m_display->matrix(m_d, m_l);
}
WRITE8_MEMBER(funjacks_state::write_g)
@@ -870,7 +877,7 @@ READ8_MEMBER(funjacks_state::read_g)
{
// G1: speaker out state
// G2,G3: inputs
- return m_inp_matrix[3]->read() | (m_g & 2);
+ return m_inputs[3]->read() | (m_g & 2);
}
// config
@@ -908,6 +915,9 @@ void funjacks_state::funjacks(machine_config &config)
m_maincpu->read_l().set(FUNC(funjacks_state::read_l));
m_maincpu->read_g().set(FUNC(funjacks_state::read_g));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(4, 2);
+ m_display->set_bri_levels(0.15);
config.set_default_layout(layout_funjacks);
/* sound hardware */
@@ -957,7 +967,7 @@ WRITE8_MEMBER(funrlgl_state::write_d)
{
// D: led grid
m_d = ~data & 0xf;
- display_matrix(4, 4, m_l, m_d);
+ m_display->matrix(m_d, m_l);
}
WRITE8_MEMBER(funrlgl_state::write_l)
@@ -965,7 +975,7 @@ WRITE8_MEMBER(funrlgl_state::write_l)
// L0-L3: led state
// L4-L7: N/C
m_l = ~data & 0xf;
- display_matrix(4, 4, m_l, m_d);
+ m_display->matrix(m_d, m_l);
}
WRITE8_MEMBER(funrlgl_state::write_g)
@@ -1000,6 +1010,9 @@ void funrlgl_state::funrlgl(machine_config &config)
m_maincpu->write_g().set(FUNC(funrlgl_state::write_g));
m_maincpu->read_g().set_ioport("IN.0");
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(4, 4);
+ m_display->set_bri_levels(0.02, 0.1); // top led is brighter
config.set_default_layout(layout_funrlgl);
/* sound hardware */
@@ -1047,8 +1060,7 @@ public:
void mdallas_state::prepare_display()
{
- set_display_segmask(0xff, 0xff);
- display_matrix(8, 8, m_l, ~(m_d << 4 | m_g));
+ m_display->matrix(~(m_d << 4 | m_g), m_l);
}
WRITE8_MEMBER(mdallas_state::write_l)
@@ -1141,6 +1153,9 @@ void mdallas_state::mdallas(machine_config &config)
m_maincpu->read_in().set(FUNC(mdallas_state::read_in));
m_maincpu->write_so().set(m_speaker, FUNC(speaker_sound_device::level_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8, 8);
+ m_display->set_segmask(0xff, 0xff);
config.set_default_layout(layout_mdallas);
/* sound hardware */
@@ -1199,7 +1214,7 @@ WRITE8_MEMBER(plus1_state::write_l)
READ8_MEMBER(plus1_state::read_l)
{
// L: IN.1, mask with output
- return m_inp_matrix[1]->read() & m_l;
+ return m_inputs[1]->read() & m_l;
}
// config
@@ -1287,7 +1302,7 @@ public:
void lightfgt_state::prepare_display()
{
u8 grid = (m_so | m_d << 1) ^ 0x1f;
- display_matrix(5, 5, m_l, grid);
+ m_display->matrix(grid, m_l);
}
WRITE_LINE_MEMBER(lightfgt_state::write_so)
@@ -1364,6 +1379,8 @@ void lightfgt_state::lightfgt(machine_config &config)
m_maincpu->write_sk().set(m_speaker, FUNC(speaker_sound_device::level_w));
m_maincpu->read_g().set(FUNC(lightfgt_state::read_g));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(5, 5);
config.set_default_layout(layout_lightfgt);
/* sound hardware */
@@ -1428,7 +1445,7 @@ READ8_MEMBER(bship82_state::read_in)
WRITE_LINE_MEMBER(bship82_state::write_so)
{
// SO: led
- display_matrix(1, 1, state, 1);
+ m_display->matrix(1, state);
}
// config
@@ -1524,6 +1541,8 @@ void bship82_state::bship82(machine_config &config)
m_maincpu->write_so().set(FUNC(bship82_state::write_so));
m_maincpu->read_si().set_ioport("IN.4");
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(1, 1);
config.set_default_layout(layout_bship82);
/* sound hardware */
@@ -1575,10 +1594,7 @@ public:
void qkracer_state::prepare_display()
{
- set_display_segmask(0xdf, 0x7f);
- set_display_segmask(0x20, 0x41); // equals sign
-
- display_matrix(7, 9, m_l, ~(m_d | m_g << 4 | m_sk << 8));
+ m_display->matrix(~(m_d | m_g << 4 | m_sk << 8), m_l);
}
WRITE8_MEMBER(qkracer_state::write_d)
@@ -1662,6 +1678,10 @@ void qkracer_state::qkracer(machine_config &config)
m_maincpu->read_in().set(FUNC(qkracer_state::read_in));
m_maincpu->write_sk().set(FUNC(qkracer_state::write_sk));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(9, 7);
+ m_display->set_segmask(0xdf, 0x7f);
+ m_display->set_segmask(0x20, 0x41); // equals sign
config.set_default_layout(layout_qkracer);
/* no sound! */
@@ -1713,8 +1733,7 @@ public:
void vidchal_state::prepare_display()
{
- set_display_segmask(0x3f, 0xff);
- display_matrix(8, 7, m_l, m_d | m_sk << 6);
+ m_display->matrix(m_d | m_sk << 6, m_l);
}
WRITE8_MEMBER(vidchal_state::write_d)
@@ -1759,6 +1778,9 @@ void vidchal_state::vidchal(machine_config &config)
m_maincpu->read_in().set_ioport("IN.0");
m_maincpu->write_sk().set(FUNC(vidchal_state::write_sk));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(6+1, 8);
+ m_display->set_segmask(0x3f, 0xff);
config.set_default_layout(layout_vidchal);
/* sound hardware */
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index c07dc6a997a..ddc11949a53 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -79,17 +79,16 @@
upper-left power pill: mcu cycle/interrupt timing related
- Though very uncommon when compared to games with LED/lamp display, some
games may manipulate VFD plate brightness by strobing it longer/shorter,
- eg. cgalaxn when the player ship explodes.
+ eg. cgalaxn when a ship explodes.
- bzaxxon 3D effect is difficult to simulate
- improve/redo SVGs of: bzaxxon, bpengo, bbtime
***************************************************************************/
#include "emu.h"
-#include "includes/screenless.h"
-
#include "cpu/hmcs40/hmcs40.h"
#include "cpu/cop400/cop400.h"
+#include "video/pwm.h"
#include "machine/gen_latch.h"
#include "machine/timer.h"
#include "sound/spkrdev.h"
@@ -110,20 +109,22 @@
//#include "hh_hmcs40_test.lh" // common test-layout - no svg artwork(yet), use external artwork
-class hh_hmcs40_state : public screenless_state
+class hh_hmcs40_state : public driver_device
{
public:
hh_hmcs40_state(const machine_config &mconfig, device_type type, const char *tag) :
- screenless_state(mconfig, type, tag),
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_speaker(*this, "speaker")
+ m_display(*this, "display"),
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<hmcs40_cpu_device> m_maincpu;
- optional_ioport_array<7> m_inp_matrix; // max 7
+ optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<7> m_inputs; // max 7
// misc common
u8 m_r[8]; // MCU R ports write data (optional)
@@ -149,8 +150,6 @@ protected:
void hh_hmcs40_state::machine_start()
{
- screenless_state::machine_start();
-
// zerofill
memset(m_r, 0, sizeof(m_r));
memset(m_int, 0, sizeof(m_int));
@@ -190,7 +189,7 @@ u16 hh_hmcs40_state::read_inputs(int columns)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
return ret;
}
@@ -264,7 +263,7 @@ WRITE8_MEMBER(bambball_state::plate_w)
// update display
u16 plate = bitswap<16>(m_plate,13,8,4,12,9,10,14,1,7,0,15,11,6,3,5,2);
- display_matrix(16, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE16_MEMBER(bambball_state::grid_w)
@@ -333,6 +332,7 @@ void bambball_state::bambball(machine_config &config)
screen.set_size(1920, 478);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 16);
config.set_default_layout(layout_bambball);
/* sound hardware */
@@ -384,7 +384,7 @@ void bmboxing_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,0,1,2,3,4,5,6,7,8);
u32 plate = bitswap<16>(m_plate,15,14,13,12,1,2,0,3,11,4,10,7,5,6,9,8);
- display_matrix(12, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bmboxing_state::plate_w)
@@ -480,6 +480,8 @@ void bmboxing_state::bmboxing(machine_config &config)
screen.set_size(1920, 529);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 12);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -531,7 +533,7 @@ void bfriskyt_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,8,0,1,2,3,4,5,6,7);
u32 plate = bitswap<24>(m_plate,23,22,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21);
- display_matrix(22, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bfriskyt_state::plate_w)
@@ -607,6 +609,8 @@ void bfriskyt_state::bfriskyt(machine_config &config)
screen.set_size(1920, 675);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 22);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -666,7 +670,7 @@ WRITE8_MEMBER(packmon_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
u32 plate = bitswap<24>(m_plate,23,22,21,20,0,1,2,3,4,5,6,19,18,17,16,15,14,13,12,11,10,9,8,7);
- display_matrix(20, 10, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(packmon_state::grid_w)
@@ -726,6 +730,7 @@ void packmon_state::packmon(machine_config &config)
screen.set_size(1920, 680);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 20);
config.set_default_layout(layout_packmon);
/* sound hardware */
@@ -784,7 +789,7 @@ WRITE8_MEMBER(bzaxxon_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,6,7,8,9,10,5,4,3,2,1,0);
u32 plate = bitswap<24>(m_plate,23,22,21,20,5,7,0,1,2,3,4,6,19,16,17,18,15,14,13,12,10,8,9,11) | 0x800;
- display_matrix(20, 11, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(bzaxxon_state::grid_w)
@@ -853,6 +858,8 @@ void bzaxxon_state::bzaxxon(machine_config &config)
screen.set_size(613, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(11, 20);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -907,7 +914,7 @@ WRITE8_MEMBER(zackman_state::plate_w)
// update display
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
u32 plate = bitswap<32>(m_plate,31,30,27,0,1,2,3,4,5,6,7,8,9,10,11,24,25,26,29,28,23,22,21,20,19,18,17,16,15,14,13,12);
- display_matrix(29, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(zackman_state::grid_w)
@@ -974,6 +981,8 @@ void zackman_state::zackman(machine_config &config)
screen.set_size(487, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 29);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1025,7 +1034,7 @@ void bpengo_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
u32 plate = bitswap<32>(m_plate,31,30,29,28,23,22,21,16,17,18,19,20,27,26,25,24,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
- display_matrix(25, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bpengo_state::plate_w)
@@ -1105,6 +1114,8 @@ void bpengo_state::bpengo(machine_config &config)
screen.set_size(1920, 759);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 25);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1156,7 +1167,7 @@ void bbtime_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,7,6,0,1,2,3,4,5);
u32 plate = bitswap<32>(m_plate,31,30,29,28,25,24,26,27,22,23,15,14,12,11,10,8,7,6,4,1,5,9,13,3,2,16,17,18,19,20,0,21) | 0x1;
- display_matrix(28, 6, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bbtime_state::plate_w)
@@ -1232,6 +1243,8 @@ void bbtime_state::bbtime(machine_config &config)
screen.set_size(379, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(6, 28);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1284,7 +1297,7 @@ WRITE8_MEMBER(bdoramon_state::plate_w)
// update display
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,7,6);
u32 plate = bitswap<24>(m_plate,23,22,21,20,11,19,18,17,16,15,14,13,12,10,9,8,7,6,5,4,3,2,1,0);
- display_matrix(19, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(bdoramon_state::grid_w)
@@ -1339,6 +1352,8 @@ void bdoramon_state::bdoramon(machine_config &config)
screen.set_size(1920, 668);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 19);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1391,7 +1406,7 @@ WRITE8_MEMBER(bultrman_state::plate_w)
// update display
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,0,18,17,16,15,14,13,12,3,11,10,9,8,7,6,5,4,1,2);
- display_matrix(18, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(bultrman_state::grid_w)
@@ -1438,6 +1453,8 @@ void bultrman_state::bultrman(machine_config &config)
screen.set_size(1920, 673);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 18);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1485,7 +1502,7 @@ public:
void machiman_state::prepare_display()
{
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18);
- display_matrix(19, 5, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(machiman_state::plate_w)
@@ -1536,6 +1553,8 @@ void machiman_state::machiman(machine_config &config)
screen.set_size(1534, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(5, 19);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1599,7 +1618,7 @@ WRITE8_MEMBER(pairmtch_state::plate_w)
// R2x,R3x,R6x: vfd plate
int shift = (offset == hmcs40_cpu_device::PORT_R6X) ? 8 : (offset-2) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
- display_matrix(12, 6, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
WRITE16_MEMBER(pairmtch_state::grid_w)
@@ -1615,7 +1634,7 @@ WRITE16_MEMBER(pairmtch_state::grid_w)
// D0-D5: vfd grid
m_grid = data & 0x3f;
- display_matrix(12, 6, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
READ8_MEMBER(pairmtch_state::input_r)
@@ -1698,6 +1717,8 @@ void pairmtch_state::pairmtch(machine_config &config)
config.m_perfect_cpu_quantum = subtag("maincpu");
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(6, 12);
config.set_default_layout(layout_pairmtch);
/* sound hardware */
@@ -1758,7 +1779,7 @@ WRITE8_MEMBER(alnattck_state::plate_w)
// update display
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,18,17,16,11,9,8,10,7,2,0,1,3,4,5,6,12,13,14,15);
- display_matrix(20, 10, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE16_MEMBER(alnattck_state::grid_w)
@@ -1826,6 +1847,8 @@ void alnattck_state::alnattck(machine_config &config)
screen.set_size(1920, 700);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 20);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -1906,7 +1929,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(cdkong_state::speaker_decay_sim)
void cdkong_state::prepare_display()
{
u32 plate = bitswap<32>(m_plate,31,30,29,24,0,16,8,1,23,17,9,2,18,10,25,27,26,3,15,27,11,11,14,22,6,13,21,5,19,12,20,4) | 0x800800;
- display_matrix(29, 11, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(cdkong_state::plate_w)
@@ -1968,6 +1991,8 @@ void cdkong_state::cdkong(machine_config &config)
screen.set_size(605, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(11, 29);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2033,7 +2058,7 @@ void cgalaxn_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,1,2,0,11,10,9,8,7,6,5,4,3);
u16 plate = bitswap<16>(m_plate,15,14,6,5,4,3,2,1,7,8,9,10,11,0,12,13);
- display_matrix(15, 12, plate, grid);
+ m_display->matrix(grid, plate);
}
INPUT_CHANGED_MEMBER(cgalaxn_state::player_switch)
@@ -2111,6 +2136,8 @@ void cgalaxn_state::cgalaxn(machine_config &config)
screen.set_size(526, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(12, 15);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2176,7 +2203,7 @@ WRITE8_MEMBER(cpacman_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,0,1,2,3,4,5,6,7,8,9,10);
u32 plate = bitswap<32>(m_plate,31,30,29,28,27,0,1,2,3,8,9,10,11,16,17,18,19,25,26,23,22,21,20,24,15,14,13,12,4,5,6,7);
- display_matrix(27, 11, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(cpacman_state::grid_w)
@@ -2241,6 +2268,8 @@ void cpacman_state::cpacman(machine_config &config)
screen.set_size(484, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(11, 27);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2309,8 +2338,8 @@ WRITE8_MEMBER(cmspacmn_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,11,10,9,8,7,6,5,4,3,2,1,0,1);
- u64 plate = BIT(m_plate,15)<<32 | bitswap<32>(m_plate,14,13,12,4,5,6,7,24,23,25,22,21,20,13,24,3,19,14,12,11,24,2,10,8,7,25,0,9,1,18,17,16) | 0x1004080;
- display_matrix(33, 12, plate, grid);
+ u32 plate = bitswap<32>(m_plate,14,13,12,4,5,6,7,24,23,25,22,21,20,13,24,3,19,14,12,11,24,2,10,8,7,25,0,9,1,18,17,16) | 0x1004080;
+ m_display->matrix(grid, u64(BIT(m_plate,15)) << 32 | plate);
}
WRITE16_MEMBER(cmspacmn_state::grid_w)
@@ -2375,6 +2404,8 @@ void cmspacmn_state::cmspacmn(machine_config &config)
screen.set_size(481, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(12, 33);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2427,17 +2458,12 @@ public:
void sag_state::prepare_display()
{
// grid 0-7 are the 'pixels'
- for (int y = 0; y < 8; y++)
- m_display_state[y] = (m_grid >> y & 1) ? m_plate : 0;
+ m_display->matrix_partial(0, 8, m_grid, m_plate, false);
// grid 8-11 are 7segs
- set_display_segmask(0xf00, 0x7f);
+ m_display->segmask(0xf00, 0x7f);
u8 seg = bitswap<8>(m_plate,3,4,5,6,7,8,9,10);
- for (int y = 8; y < 12; y++)
- m_display_state[y] = (m_grid >> y & 1) ? seg : 0;
-
- set_display_size(14, 12);
- display_update();
+ m_display->matrix_partial(8, 4, m_grid >> 8, seg);
}
WRITE8_MEMBER(sag_state::plate_w)
@@ -2522,6 +2548,8 @@ void sag_state::sag(machine_config &config)
m_maincpu->write_d().set(FUNC(sag_state::grid_w));
m_maincpu->read_d().set(FUNC(sag_state::input_r));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(8+4, 14);
config.set_default_layout(layout_sag);
/* sound hardware */
@@ -2582,7 +2610,7 @@ void egalaxn2_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14);
u32 plate = bitswap<24>(m_plate,23,22,21,20,15,14,13,12,7,6,5,4,3,2,1,0,19,18,17,16,11,10,9,8);
- display_matrix(24, 15, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(egalaxn2_state::grid_w)
@@ -2663,6 +2691,8 @@ void egalaxn2_state::egalaxn2(machine_config &config)
screen.set_size(505, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(15, 24);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -2825,7 +2855,7 @@ void eturtles_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,1,14,13,12,11,10,9,8,7,6,5,4,3,2,0);
u32 plate = bitswap<32>(m_plate,31,30,11,12,18,19,16,17,22,15,20,21,27,26,23,25,24,2,3,1,0,6,4,5,10,9,2,8,7,14,1,13);
- display_matrix(30, 15, plate | (grid >> 5 & 8), grid); // grid 8 also forces plate 3 high
+ m_display->matrix(grid, plate | (grid >> 5 & 8)); // grid 8 also forces plate 3 high
}
WRITE8_MEMBER(eturtles_state::plate_w)
@@ -2950,6 +2980,8 @@ void eturtles_state::eturtles(machine_config &config)
screen.set_size(484, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(15, 30);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3001,7 +3033,7 @@ void estargte_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,0,14,13,12,11,10,9,8,7,6,5,4,3,2,1);
u32 plate = bitswap<32>(m_plate,31,30,29,15,17,19,21,23,25,27,26,24,3,22,20,18,16,14,12,10,8,6,4,2,0,1,3,5,7,9,11,13);
- display_matrix(29, 14, plate, grid);
+ m_display->matrix(grid, plate);
}
READ8_MEMBER(estargte_state::cop_data_r)
@@ -3070,6 +3102,8 @@ void estargte_state::estargte(machine_config &config)
screen.set_size(1920, 854);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(14, 29);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3129,7 +3163,7 @@ WRITE8_MEMBER(ghalien_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
u32 plate = bitswap<24>(m_plate,23,22,21,20,14,12,10,8,9,13,15,2,0,1,3,11,7,5,4,6,19,17,16,18);
- display_matrix(20, 10, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(ghalien_state::grid_w)
@@ -3197,6 +3231,8 @@ void ghalien_state::ghalien(machine_config &config)
screen.set_size(1920, 699);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 20);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3256,7 +3292,7 @@ WRITE8_MEMBER(gckong_state::plate_w)
// update display
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,0,1,2,3,4,5,6,7,8,9,10);
u32 plate = bitswap<32>(m_plate,31,30,29,28,27,26,25,6,7,8,12,13,14,15,16,17,18,17,16,12,11,10,9,8,7,6,5,4,3,2,1,0) | 0x8000;
- display_matrix(32, 11, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE16_MEMBER(gckong_state::grid_w)
@@ -3327,6 +3363,7 @@ void gckong_state::gckong(machine_config &config)
screen.set_size(479, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(11, 32);
config.set_default_layout(layout_gckong);
/* sound hardware */
@@ -3383,7 +3420,7 @@ WRITE8_MEMBER(gdigdug_state::plate_w)
// update display
u32 plate = bitswap<32>(m_plate,30,31,0,1,2,3,4,5,6,7,20,21,22,27,26,25,28,29,24,23,15,14,13,12,8,9,10,11,19,18,17,16);
- display_matrix(32, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE16_MEMBER(gdigdug_state::grid_w)
@@ -3453,6 +3490,8 @@ void gdigdug_state::gdigdug(machine_config &config)
screen.set_size(476, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 32);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3506,7 +3545,7 @@ public:
void mwcbaseb_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
- display_matrix(16, 8, m_plate, grid);
+ m_display->matrix(grid, m_plate);
}
WRITE8_MEMBER(mwcbaseb_state::plate_w)
@@ -3622,6 +3661,8 @@ void mwcbaseb_state::mwcbaseb(machine_config &config)
screen.set_size(1920, 478);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 16);
+ m_display->set_bri_levels(0.002); // cyan elements strobed very briefly?
config.set_default_layout(layout_mwcbaseb);
/* sound hardware */
@@ -3681,7 +3722,7 @@ void msthawk_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
u32 plate = bitswap<24>(m_plate,23,22,21,19,20,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
- display_matrix(21, 10, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(msthawk_state::plate_w)
@@ -3760,6 +3801,7 @@ void msthawk_state::msthawk(machine_config &config)
screen.set_size(1920, 696);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 21);
config.set_default_layout(layout_msthawk);
/* sound hardware */
@@ -3813,7 +3855,7 @@ WRITE8_MEMBER(pbqbert_state::plate_w)
// update display
u32 plate = bitswap<32>(m_plate,31,30,24,25,26,27,28,15,14,29,13,12,11,10,9,8,7,6,5,4,3,2,1,0,16,17,18,19,20,21,22,23) | 0x400000;
- display_matrix(30, 8, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE16_MEMBER(pbqbert_state::grid_w)
@@ -3859,6 +3901,8 @@ void pbqbert_state::pbqbert(machine_config &config)
screen.set_size(603, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 30);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -3910,7 +3954,7 @@ void kingman_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,0,1,2,3,4,5,6,7,8);
u32 plate = bitswap<24>(m_plate,23,6,7,5,4,3,2,1,0,13,12,20,19,18,17,16,10,11,9,8,14,15,13,12);
- display_matrix(23, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(kingman_state::plate_w)
@@ -3983,6 +4027,8 @@ void kingman_state::kingman(machine_config &config)
screen.set_size(374, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 23);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4034,7 +4080,7 @@ void tmtron_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,1,2,3,4,5,6,7,8,9,0);
u32 plate = bitswap<24>(m_plate,23,5,2,21,1,6,7,9,10,11,21,0,19,3,4,8,3,18,17,16,12,13,14,15);
- display_matrix(23, 10, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(tmtron_state::plate_w)
@@ -4107,6 +4153,8 @@ void tmtron_state::tmtron(machine_config &config)
screen.set_size(1920, 662);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 23);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -4162,7 +4210,7 @@ WRITE8_MEMBER(vinvader_state::plate_w)
// update display
u16 plate = bitswap<16>(m_plate,15,11,7,3,10,6,14,2,9,5,13,1,8,4,12,0);
- display_matrix(12, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE16_MEMBER(vinvader_state::grid_w)
@@ -4196,7 +4244,7 @@ INPUT_PORTS_END
void vinvader_state::vinvader(machine_config &config)
{
/* basic machine hardware */
- HD38750(config, m_maincpu, 400000); // approximation
+ HD38750(config, m_maincpu, 300000); // approximation
m_maincpu->read_r<0>().set_ioport("IN.0");
m_maincpu->write_r<1>().set(FUNC(vinvader_state::plate_w));
m_maincpu->write_r<2>().set(FUNC(vinvader_state::plate_w));
@@ -4210,6 +4258,8 @@ void vinvader_state::vinvader(machine_config &config)
screen.set_size(233, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 12);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
diff --git a/src/mame/drivers/hh_melps4.cpp b/src/mame/drivers/hh_melps4.cpp
index affd20bb03a..724443e481b 100644
--- a/src/mame/drivers/hh_melps4.cpp
+++ b/src/mame/drivers/hh_melps4.cpp
@@ -9,9 +9,8 @@
***************************************************************************/
#include "emu.h"
-#include "includes/screenless.h"
-
#include "cpu/melps4/m58846.h"
+#include "video/pwm.h"
#include "sound/spkrdev.h"
#include "screen.h"
@@ -20,20 +19,22 @@
//#include "hh_melps4_test.lh" // common test-layout - no svg artwork(yet), use external artwork
-class hh_melps4_state : public screenless_state
+class hh_melps4_state : public driver_device
{
public:
hh_melps4_state(const machine_config &mconfig, device_type type, const char *tag) :
- screenless_state(mconfig, type, tag),
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_speaker(*this, "speaker")
+ m_display(*this, "display"),
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<m58846_device> m_maincpu;
- optional_ioport_array<4> m_inp_matrix; // max 4
+ optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<4> m_inputs; // max 4
// misc common
u16 m_inp_mux; // multiplexed inputs mask
@@ -54,8 +55,6 @@ protected:
void hh_melps4_state::machine_start()
{
- screenless_state::machine_start();
-
// zerofill
m_inp_mux = 0;
m_grid = 0;
@@ -88,7 +87,7 @@ u8 hh_melps4_state::read_inputs(int columns)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
return ret;
}
@@ -139,7 +138,7 @@ void cfrogger_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,0,1,2,3,4,5,6,7,8,9,10,11);
u16 plate = bitswap<16>(m_plate,12,4,13,5,14,6,15,7,3,11,2,10,1,9,0,8);
- display_matrix(16, 12, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(cfrogger_state::plate_w)
@@ -173,7 +172,7 @@ READ16_MEMBER(cfrogger_state::input_r)
// K0,K1: multiplexed inputs
// K2: N/C
// K3: fixed input
- return (m_inp_matrix[2]->read() & 8) | (read_inputs(2) & 3);
+ return (m_inputs[2]->read() & 8) | (read_inputs(2) & 3);
}
// config
@@ -213,6 +212,8 @@ void cfrogger_state::cfrogger(machine_config &config)
screen.set_size(500, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(12, 16);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
@@ -262,7 +263,7 @@ void gjungler_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,8,7,6,5,4,3,2,0,1);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,18,8,9,10,11,13,16,15,14,13,12,7,0,6,1,5,2,4,3) | 0x2000;
- display_matrix(18, 12, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(gjungler_state::plate_w)
@@ -295,7 +296,7 @@ READ16_MEMBER(gjungler_state::input_r)
{
// K0,K1: multiplexed inputs
// K2,K3: fixed inputs
- return (m_inp_matrix[2]->read() & 0xc) | (read_inputs(2) & 3);
+ return (m_inputs[2]->read() & 0xc) | (read_inputs(2) & 3);
}
// config
@@ -337,6 +338,8 @@ void gjungler_state::gjungler(machine_config &config)
screen.set_size(481, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(12, 18);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.25);
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
index 98eab3f15df..8058a61dd82 100644
--- a/src/mame/drivers/hh_pic16.cpp
+++ b/src/mame/drivers/hh_pic16.cpp
@@ -77,14 +77,14 @@ public:
hh_pic16_state(const machine_config &mconfig, device_type type, const char *tag) :
screenless_state(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_speaker(*this, "speaker")
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<pic16c5x_device> m_maincpu;
- optional_ioport_array<6> m_inp_matrix; // max 6
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<6> m_inputs; // max 6
// misc common
u8 m_a; // MCU port A write data
@@ -146,7 +146,7 @@ u16 hh_pic16_state::read_inputs(int columns, u16 colmask)
// read selected input rows
for (int i = 0; i < columns; i++)
if (~m_inp_mux >> i & 1)
- ret &= m_inp_matrix[i]->read();
+ ret &= m_inputs[i]->read();
return ret;
}
@@ -158,7 +158,7 @@ u8 hh_pic16_state::read_rotated_inputs(int columns, u8 rowmask)
// read selected input columns
for (int i = 0; i < 8; i++)
- if (1 << i & rowmask && ~m_inp_matrix[i]->read() & ~m_inp_mux & colmask)
+ if (1 << i & rowmask && ~m_inputs[i]->read() & ~m_inp_mux & colmask)
ret |= 1 << i;
// active low
@@ -689,7 +689,7 @@ void matchme_state::set_clock()
{
// MCU clock is ~1.2MHz by default (R=18K, C=15pF), high speed setting adds a
// 10pF cap to speed it up by about 7.5%.
- m_maincpu->set_unscaled_clock((m_inp_matrix[4]->read() & 1) ? 1300000 : 1200000);
+ m_maincpu->set_unscaled_clock((m_inputs[4]->read() & 1) ? 1300000 : 1200000);
}
WRITE8_MEMBER(matchme_state::write_b)
@@ -990,7 +990,7 @@ void tbaskb_state::prepare_display()
READ8_MEMBER(tbaskb_state::read_a)
{
// A2: skill switch, A3: multiplexed inputs
- return m_inp_matrix[5]->read() | read_inputs(5, 8) | 3;
+ return m_inputs[5]->read() | read_inputs(5, 8) | 3;
}
WRITE8_MEMBER(tbaskb_state::write_b)
@@ -1229,7 +1229,7 @@ void hccbaskb_state::prepare_display()
READ8_MEMBER(hccbaskb_state::read_a)
{
// A2: skill switch, A3: multiplexed inputs
- return m_inp_matrix[5]->read() | read_inputs(5, 8) | 3;
+ return m_inputs[5]->read() | read_inputs(5, 8) | 3;
}
WRITE8_MEMBER(hccbaskb_state::write_b)
@@ -1353,7 +1353,7 @@ void ttfball_state::prepare_display()
READ8_MEMBER(ttfball_state::read_a)
{
// A3: multiplexed inputs, A0-A2: other inputs
- return m_inp_matrix[5]->read() | read_inputs(5, 8);
+ return m_inputs[5]->read() | read_inputs(5, 8);
}
WRITE8_MEMBER(ttfball_state::write_b)
@@ -1623,7 +1623,7 @@ void us2pfball_state::prepare_display()
READ8_MEMBER(us2pfball_state::read_a)
{
// A0,A1: multiplexed inputs, A4-A7: other inputs
- return read_inputs(4, 3) | (m_inp_matrix[4]->read() & 0xf0) | 0x0c;
+ return read_inputs(4, 3) | (m_inputs[4]->read() & 0xf0) | 0x0c;
}
WRITE8_MEMBER(us2pfball_state::write_a)
diff --git a/src/mame/drivers/hh_sm510.cpp b/src/mame/drivers/hh_sm510.cpp
index 4058c5e6674..792c8bdfd16 100644
--- a/src/mame/drivers/hh_sm510.cpp
+++ b/src/mame/drivers/hh_sm510.cpp
@@ -133,7 +133,7 @@ void hh_sm510_state::machine_start()
// determine number of input lines (set it in the subclass constructor if different)
if (m_inp_lines == 0 && m_inp_fixed < 0)
{
- for (; m_inp_matrix[m_inp_lines] != nullptr; m_inp_lines++) { ; }
+ for (; m_inputs[m_inp_lines] != nullptr; m_inp_lines++) { ; }
// when last input line is fixed(GND)
if (m_inp_fixed == -2)
@@ -252,10 +252,10 @@ u8 hh_sm510_state::read_inputs(int columns, int fixed)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
if (fixed >= 0)
- ret |= m_inp_matrix[fixed]->read();
+ ret |= m_inputs[fixed]->read();
return ret;
}
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 2e3e2d03dd4..57cb0e41573 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -286,7 +286,7 @@ u8 hh_tms1k_state::read_inputs(int columns)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
return ret;
}
@@ -298,7 +298,7 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask)
// read selected input columns
for (int i = 0; i < 8; i++)
- if (1 << i & rowmask && m_inp_matrix[i]->read() & m_inp_mux & colmask)
+ if (1 << i & rowmask && m_inputs[i]->read() & m_inp_mux & colmask)
ret |= 1 << i;
return ret;
@@ -307,7 +307,7 @@ u8 hh_tms1k_state::read_rotated_inputs(int columns, u8 rowmask)
void hh_tms1k_state::switch_change(int sel, u32 mask, bool next)
{
// config switches (for direct control)
- ioport_field *inp = m_inp_matrix[sel]->field(mask);
+ ioport_field *inp = m_inputs[sel]->field(mask);
if (next && inp->has_next_setting())
inp->select_next_setting();
@@ -1694,7 +1694,7 @@ void h2hbaseb_state::set_clock()
{
// MCU clock is from an RC circuit with C=47pF, and R value is depending on
// skill switch: R=51K(1) or 43K(2)
- m_maincpu->set_unscaled_clock((m_inp_matrix[5]->read() & 1) ? 400000 : 350000);
+ m_maincpu->set_unscaled_clock((m_inputs[5]->read() & 1) ? 400000 : 350000);
}
void h2hbaseb_state::prepare_display()
@@ -1728,7 +1728,7 @@ WRITE16_MEMBER(h2hbaseb_state::write_o)
READ8_MEMBER(h2hbaseb_state::read_k)
{
// K: multiplexed inputs (note: K8(Vss row) is always on)
- return m_inp_matrix[4]->read() | read_inputs(4);
+ return m_inputs[4]->read() | read_inputs(4);
}
// config
@@ -3150,7 +3150,7 @@ WRITE16_MEMBER(ebball_state::write_o)
READ8_MEMBER(ebball_state::read_k)
{
// K: multiplexed inputs (note: K8(Vss row) is always on)
- return m_inp_matrix[5]->read() | read_inputs(5);
+ return m_inputs[5]->read() | read_inputs(5);
}
// config
@@ -3416,7 +3416,7 @@ void ebball3_state::set_clock()
// MCU clock is from an RC circuit(R=47K, C=33pF) oscillating by default at ~340kHz,
// but on PRO, the difficulty switch adds an extra 150K resistor to Vdd to speed
// it up to around ~440kHz.
- m_maincpu->set_unscaled_clock((m_inp_matrix[3]->read() & 1) ? 440000 : 340000);
+ m_maincpu->set_unscaled_clock((m_inputs[3]->read() & 1) ? 440000 : 340000);
}
void ebball3_state::prepare_display()
@@ -3703,7 +3703,7 @@ void einvader_state::set_clock()
// MCU clock is from an RC circuit(R=47K, C=56pF) oscillating by default at ~320kHz,
// but on PRO, the difficulty switch adds an extra 180K resistor to Vdd to speed
// it up to around ~400kHz.
- m_maincpu->set_unscaled_clock((m_inp_matrix[0]->read() & 8) ? 400000 : 320000);
+ m_maincpu->set_unscaled_clock((m_inputs[0]->read() & 8) ? 400000 : 320000);
}
void einvader_state::prepare_display()
@@ -4099,7 +4099,7 @@ void raisedvl_state::set_clock()
// 0: R=47K -> ~350kHz
// 2,3: R=35K8 -> ~425kHz (combined)
// 4: R=32K -> ~465kHz (combined)
- u8 inp = m_inp_matrix[1]->read();
+ u8 inp = m_inputs[1]->read();
m_maincpu->set_unscaled_clock((inp & 0x20) ? 465000 : ((inp & 0x10) ? 425000 : 350000));
}
@@ -4363,7 +4363,7 @@ void f3in1_state::machine_reset()
void f3in1_state::set_clock()
{
// MCU clock is from an RC circuit where C=47pF, R=39K(PROF) or 56K(REG)
- m_maincpu->set_unscaled_clock((m_inp_matrix[4]->read() & 1) ? 400000 : 300000);
+ m_maincpu->set_unscaled_clock((m_inputs[4]->read() & 1) ? 400000 : 300000);
}
void f3in1_state::prepare_display()
@@ -4811,7 +4811,7 @@ WRITE16_MEMBER(ginv_state::write_o)
READ8_MEMBER(ginv_state::read_k)
{
// K1-K4: multiplexed inputs (K8 is fire button)
- return m_inp_matrix[2]->read() | read_inputs(2);
+ return m_inputs[2]->read() | read_inputs(2);
}
// config
@@ -4935,7 +4935,7 @@ WRITE16_MEMBER(ginv1000_state::write_o)
READ8_MEMBER(ginv1000_state::read_k)
{
// K1,K2: multiplexed inputs (K8 is fire button)
- return m_inp_matrix[2]->read() | read_inputs(2);
+ return m_inputs[2]->read() | read_inputs(2);
}
// config
@@ -5079,7 +5079,7 @@ WRITE16_MEMBER(ginv2000_state::write_o)
READ8_MEMBER(ginv2000_state::read_k)
{
// K1,K2: multiplexed inputs (K8 is fire button)
- return m_inp_matrix[2]->read() | read_inputs(2);
+ return m_inputs[2]->read() | read_inputs(2);
}
// config
@@ -5347,7 +5347,7 @@ WRITE16_MEMBER(elecdet_state::write_o)
READ8_MEMBER(elecdet_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[4]->read() | read_inputs(4);
+ return m_inputs[4]->read() | read_inputs(4);
}
// config
@@ -6419,7 +6419,7 @@ WRITE16_MEMBER(bship_state::write_o)
READ8_MEMBER(bship_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[11]->read() | read_inputs(11);
+ return m_inputs[11]->read() | read_inputs(11);
}
// config
@@ -6605,7 +6605,7 @@ WRITE16_MEMBER(bshipb_state::write_o)
READ8_MEMBER(bshipb_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[11]->read() | read_inputs(11);
+ return m_inputs[11]->read() | read_inputs(11);
}
// config
@@ -6831,7 +6831,7 @@ void ssimon_state::set_clock()
// 0 Simple: R=51K -> ~200kHz
// 1 Normal: R=37K -> ~275kHz
// 2 Super: R=22K -> ~400kHz
- u8 inp = m_inp_matrix[6]->read();
+ u8 inp = m_inputs[6]->read();
m_maincpu->set_unscaled_clock((inp & 2) ? 400000 : ((inp & 1) ? 275000 : 200000));
}
@@ -7893,7 +7893,7 @@ WRITE16_MEMBER(stopthief_state::write_o)
READ8_MEMBER(stopthief_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[2]->read() | read_inputs(2);
+ return m_inputs[2]->read() | read_inputs(2);
}
// config
@@ -9060,7 +9060,7 @@ WRITE16_MEMBER(speechp_state::write_o)
READ8_MEMBER(speechp_state::read_k)
{
// K: multiplexed inputs
- return m_inp_matrix[10]->read() | (read_inputs(10) & 7);
+ return m_inputs[10]->read() | (read_inputs(10) & 7);
}
// config
@@ -9902,7 +9902,7 @@ void tbreakup_state::machine_reset()
void tbreakup_state::set_clock()
{
// MCU clock is from an analog circuit with resistor of 73K, PRO2 adds 100K
- m_maincpu->set_unscaled_clock((m_inp_matrix[3]->read() & 1) ? 500000 : 325000);
+ m_maincpu->set_unscaled_clock((m_inputs[3]->read() & 1) ? 500000 : 325000);
}
void tbreakup_state::prepare_display()
@@ -9964,7 +9964,7 @@ READ8_MEMBER(tbreakup_state::read_k)
{
// K4: fixed input
// K8: multiplexed inputs
- return (m_inp_matrix[2]->read() & 4) | (read_inputs(2) & 8);
+ return (m_inputs[2]->read() & 4) | (read_inputs(2) & 8);
}
// config
@@ -10079,7 +10079,7 @@ void phpball_state::prepare_display()
{
// rectangular LEDs under LEDs D,F and E,G are directly connected
// to the left and right flipper buttons - output them to 10.a and 9.a
- u16 in1 = m_inp_matrix[1]->read() << 7 & 0x600;
+ u16 in1 = m_inputs[1]->read() << 7 & 0x600;
set_display_segmask(7, 0x7f);
display_matrix(7, 11, m_o, (m_r & 0x1ff) | in1);
@@ -10110,7 +10110,7 @@ WRITE16_MEMBER(phpball_state::write_o)
READ8_MEMBER(phpball_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[1]->read() | read_inputs(1);
+ return m_inputs[1]->read() | read_inputs(1);
}
// config
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index 10d4434981c..9565df83710 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -92,8 +92,6 @@
void hh_ucom4_state::machine_start()
{
- screenless_state::machine_start();
-
// zerofill
memset(m_port, 0, sizeof(m_port));
m_int = 0;
@@ -131,7 +129,7 @@ u8 hh_ucom4_state::read_inputs(int columns)
// read selected input rows
for (int i = 0; i < columns; i++)
if (m_inp_mux >> i & 1)
- ret |= m_inp_matrix[i]->read();
+ ret |= m_inputs[i]->read();
return ret;
}
@@ -210,7 +208,7 @@ void ufombs_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,3,2,1,0,4,5,6,7,8);
u16 plate = bitswap<16>(m_plate,15,14,13,12,11,7,10,6,9,5,8,4,0,1,2,3);
- display_matrix(10, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(ufombs_state::grid_w)
@@ -274,6 +272,8 @@ void ufombs_state::ufombs(machine_config &config)
screen.set_size(243, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 10);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -330,7 +330,7 @@ public:
void ssfball_state::prepare_display()
{
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,11,7,3,12,17,13,18,16,14,15,10,9,8,0,1,2,4,5,6);
- display_matrix(16, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(ssfball_state::grid_w)
@@ -363,7 +363,7 @@ WRITE8_MEMBER(ssfball_state::plate_w)
READ8_MEMBER(ssfball_state::input_b_r)
{
// B: input port 2, where B3 is multiplexed
- return m_inp_matrix[2]->read() | read_inputs(2);
+ return m_inputs[2]->read() | read_inputs(2);
}
// config
@@ -429,6 +429,8 @@ void ssfball_state::ssfball(machine_config &config)
screen.set_size(1920, 482);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 16);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -490,7 +492,7 @@ public:
void bmsoccer_state::prepare_display()
{
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,11,7,3,12,17,13,18,16,14,15,8,4,0,9,5,1,10,6,2);
- display_matrix(16, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(bmsoccer_state::grid_w)
@@ -573,6 +575,8 @@ void bmsoccer_state::bmsoccer(machine_config &config)
screen.set_size(271, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 16);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -622,7 +626,7 @@ void bmsafari_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,0,1,2,3,4,5,6,7,8);
u16 plate = bitswap<16>(m_plate,15,14,13,12,11,7,10,2,9,5,8,4,0,1,6,3);
- display_matrix(10, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bmsafari_state::grid_w)
@@ -688,6 +692,8 @@ void bmsafari_state::bmsafari(machine_config &config)
screen.set_size(248, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 10);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -739,7 +745,7 @@ public:
void splasfgt_state::prepare_display()
{
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,18,17,13,1,0,8,6,0,10,11,14,15,16,9,5,7,4,2,3);
- display_matrix(16, 9, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(splasfgt_state::grid_w)
@@ -847,6 +853,8 @@ void splasfgt_state::splasfgt(machine_config &config)
screen.set_size(1920, 476);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 16);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -900,7 +908,7 @@ void bcclimbr_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,7,6,0,1,2,3,4,5);
u32 plate = bitswap<24>(m_plate,23,22,21,20,16,17,18,19,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
- display_matrix(20, 6, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(bcclimbr_state::grid_w)
@@ -959,6 +967,8 @@ void bcclimbr_state::bcclimbr(machine_config &config)
screen.set_size(310, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(6, 20);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -1014,7 +1024,7 @@ WRITE8_MEMBER(tactix_state::leds_w)
{
// D,F: 4*4 led matrix
m_port[offset] = data;
- display_matrix(4, 4, m_port[NEC_UCOM4_PORTD], m_port[NEC_UCOM4_PORTF]);
+ m_display->matrix(m_port[NEC_UCOM4_PORTF], m_port[NEC_UCOM4_PORTD]);
}
WRITE8_MEMBER(tactix_state::speaker_w)
@@ -1081,6 +1091,8 @@ void tactix_state::tactix(machine_config &config)
m_maincpu->write_f().set(FUNC(tactix_state::leds_w));
m_maincpu->write_g().set(FUNC(tactix_state::speaker_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(4, 4);
config.set_default_layout(layout_tactix);
/* sound hardware */
@@ -1136,9 +1148,8 @@ void ctntune_state::prepare_display()
u8 sel = m_port[NEC_UCOM4_PORTD] >> 3 & 1; // turn off display when power is off
u8 lamps = m_port[NEC_UCOM4_PORTD] & 3;
u8 digit = (m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE]) & 0x7f;
- set_display_segmask(1, 0x7f);
- display_matrix(7+2, 1, lamps << 7 | digit, sel);
+ m_display->matrix(sel, lamps << 7 | digit);
}
WRITE8_MEMBER(ctntune_state::_7seg_w)
@@ -1220,6 +1231,9 @@ void ctntune_state::ctntune(machine_config &config)
m_maincpu->write_f().set(FUNC(ctntune_state::_7seg_w));
m_maincpu->write_g().set(FUNC(ctntune_state::speaker_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(1, 7+2);
+ m_display->set_segmask(1, 0x7f);
config.set_default_layout(layout_ctntune);
/* sound hardware */
@@ -1271,7 +1285,7 @@ void invspace_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,8,9,7,6,5,4,3,2,1,0);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,9,14,13,8,15,11,10,7,11,3,2,6,10,1,5,9,0,4,8);
- display_matrix(19, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(invspace_state::grid_w)
@@ -1329,6 +1343,8 @@ void invspace_state::invspace(machine_config &config)
screen.set_size(289, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 19);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -1380,7 +1396,7 @@ public:
void efball_state::prepare_display()
{
u16 plate = bitswap<16>(m_plate,15,14,13,12,11,4,3,0,2,1,6,10,9,5,8,7);
- display_matrix(11, 10, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(efball_state::grid_w)
@@ -1447,6 +1463,8 @@ void efball_state::efball(machine_config &config)
m_maincpu->write_h().set(FUNC(efball_state::grid_w));
m_maincpu->write_i().set(FUNC(efball_state::plate_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(10, 11);
config.set_default_layout(layout_efball);
/* sound hardware */
@@ -1501,7 +1519,7 @@ void galaxy2_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
u16 plate = bitswap<16>(m_plate,15,3,2,6,1,5,4,0,11,10,7,12,14,13,8,9);
- display_matrix(15, 10, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(galaxy2_state::grid_w)
@@ -1559,6 +1577,8 @@ void galaxy2_state::galaxy2(machine_config &config)
screen.set_size(304, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 15);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -1630,7 +1650,7 @@ void astrocmd_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,8,4,5,6,7,0,1,2,3);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,3,2,12,13,14,15,16,17,18,0,1,4,8,5,9,7,11,6,10);
- display_matrix(17, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(astrocmd_state::grid_w)
@@ -1695,6 +1715,8 @@ void astrocmd_state::astrocmd(machine_config &config)
screen.set_size(1920, 525);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 17);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -1748,7 +1770,7 @@ WRITE8_MEMBER(edracula_state::grid_w)
// C,D: vfd grid
int shift = (offset - NEC_UCOM4_PORTC) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
- display_matrix(18, 8, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
WRITE8_MEMBER(edracula_state::plate_w)
@@ -1760,7 +1782,7 @@ WRITE8_MEMBER(edracula_state::plate_w)
// E,F,G,H,I01: vfd plate
int shift = (offset - NEC_UCOM4_PORTE) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
- display_matrix(18, 8, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
// config
@@ -1799,6 +1821,8 @@ void edracula_state::edracula(machine_config &config)
screen.set_size(1920, 526);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 18);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -1847,7 +1871,7 @@ public:
WRITE32_MEMBER(mcompgin_state::lcd_output_w)
{
// uses ROW0-4, COL11-24
- display_matrix(24, 8, data, 1 << offset);
+ m_display->matrix(1 << offset, data);
}
WRITE8_MEMBER(mcompgin_state::lcd_w)
@@ -1887,6 +1911,8 @@ void mcompgin_state::mcompgin(machine_config &config)
HLCD0530(config, m_lcd, 500); // C=0.01uF
m_lcd->write_cols().set(FUNC(mcompgin_state::lcd_output_w));
+ PWM_DISPLAY(config, m_display).set_size(8, 24);
+
config.set_default_layout(layout_mcompgin);
/* no sound! */
@@ -1932,7 +1958,7 @@ void mvbfree_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
u16 plate = bitswap<16>(m_plate,15,14,13,12,11,10,0,1,2,3,4,5,6,7,8,9);
- display_matrix(10, 14, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(mvbfree_state::grid_w)
@@ -1993,6 +2019,8 @@ void mvbfree_state::mvbfree(machine_config &config)
m_maincpu->write_h().set(FUNC(mvbfree_state::grid_w));
m_maincpu->write_i().set(FUNC(mvbfree_state::speaker_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(14, 10);
config.set_default_layout(layout_mvbfree);
/* sound hardware */
@@ -2058,7 +2086,7 @@ WRITE8_MEMBER(grobot9_state::lamps_w)
// D,F,E0: lamps
m_port[offset] = data;
- display_matrix(9, 1, m_port[NEC_UCOM4_PORTD] | m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE] << 8, 1);
+ m_display->matrix(1, m_port[NEC_UCOM4_PORTD] | m_port[NEC_UCOM4_PORTF] << 4 | m_port[NEC_UCOM4_PORTE] << 8);
}
WRITE8_MEMBER(grobot9_state::input_w)
@@ -2114,6 +2142,9 @@ void grobot9_state::grobot9(machine_config &config)
m_maincpu->write_e().set(FUNC(grobot9_state::lamps_w));
m_maincpu->write_f().set(FUNC(grobot9_state::lamps_w));
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(1, 9);
+ m_display->set_bri_levels(0.25);
config.set_default_layout(layout_grobot9);
/* sound hardware */
@@ -2165,7 +2196,7 @@ void tccombat_state::prepare_display()
{
u16 grid = bitswap<16>(m_grid,15,14,13,12,11,10,9,8,3,2,1,0,7,6,5,4);
u32 plate = bitswap<24>(m_plate,23,22,21,20,11,15,3,10,14,2,9,13,1,0,12,8,15,1,5,0,3,7,2,6);
- display_matrix(20, 9, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(tccombat_state::grid_w)
@@ -2219,6 +2250,8 @@ void tccombat_state::tccombat(machine_config &config)
screen.set_size(300, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 20);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -2287,7 +2320,7 @@ void tmtennis_state::set_clock()
// MCU clock is from an LC circuit oscillating by default at ~360kHz,
// but on PRO1, the difficulty switch puts a capacitor across the LC circuit
// to slow it down to ~260kHz.
- m_maincpu->set_unscaled_clock((m_inp_matrix[1]->read() & 0x100) ? 260000 : 360000);
+ m_maincpu->set_unscaled_clock((m_inputs[1]->read() & 0x100) ? 260000 : 360000);
}
WRITE8_MEMBER(tmtennis_state::grid_w)
@@ -2295,7 +2328,7 @@ WRITE8_MEMBER(tmtennis_state::grid_w)
// G,H,I: vfd grid
int shift = (offset - NEC_UCOM4_PORTG) * 4;
m_grid = (m_grid & ~(0xf << shift)) | (data << shift);
- display_matrix(12, 12, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
WRITE8_MEMBER(tmtennis_state::plate_w)
@@ -2303,7 +2336,7 @@ WRITE8_MEMBER(tmtennis_state::plate_w)
// C,D,F: vfd plate
int shift = (offset == NEC_UCOM4_PORTF) ? 8 : (offset - NEC_UCOM4_PORTC) * 4;
m_plate = (m_plate & ~(0xf << shift)) | (data << shift);
- display_matrix(12, 12, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
WRITE8_MEMBER(tmtennis_state::port_e_w)
@@ -2380,6 +2413,8 @@ void tmtennis_state::tmtennis(machine_config &config)
screen.set_size(1920, 417);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(12, 12);
+ m_display->set_bri_levels(0.005);
config.set_default_layout(layout_tmtennis);
/* sound hardware */
@@ -2440,7 +2475,7 @@ void tmpacman_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,16,17,18,11,10,9,8,0,2,3,1,4,5,6,7,12,13,14,15) | 0x100;
- display_matrix(19, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(tmpacman_state::grid_w)
@@ -2499,6 +2534,8 @@ void tmpacman_state::tmpacman(machine_config &config)
screen.set_size(1920, 508);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 19);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -2552,7 +2589,7 @@ public:
void tmscramb_state::prepare_display()
{
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,18,17,3,15,2,14,1,13,16,0,12,8,4,9,5,10,6,11,7) | 0x400;
- display_matrix(17, 10, plate, m_grid);
+ m_display->matrix(m_grid, plate);
}
WRITE8_MEMBER(tmscramb_state::grid_w)
@@ -2610,6 +2647,8 @@ void tmscramb_state::tmscramb(machine_config &config)
screen.set_size(1920, 556);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(10, 17);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -2663,7 +2702,7 @@ void tcaveman_state::prepare_display()
{
u8 grid = bitswap<8>(m_grid,0,1,2,3,4,5,6,7);
u32 plate = bitswap<24>(m_plate,23,22,21,20,19,10,11,5,6,7,8,0,9,2,18,17,16,3,15,14,13,12,4,1) | 0x40;
- display_matrix(19, 8, plate, grid);
+ m_display->matrix(grid, plate);
}
WRITE8_MEMBER(tcaveman_state::grid_w)
@@ -2717,6 +2756,8 @@ void tcaveman_state::tcaveman(machine_config &config)
screen.set_size(1920, 559);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(8, 19);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
@@ -2790,7 +2831,7 @@ WRITE8_MEMBER(alnchase_state::output_w)
m_plate = ((m_plate << 2 & ~(0xf << shift)) | (data << shift)) >> 2;
}
- display_matrix(17, 9, m_plate, m_grid);
+ m_display->matrix(m_grid, m_plate);
}
READ8_MEMBER(alnchase_state::input_r)
@@ -2858,6 +2899,8 @@ void alnchase_state::alnchase(machine_config &config)
screen.set_size(365, 1080);
screen.set_visarea_full();
+ PWM_DISPLAY(config, m_display).set_size(9, 17);
+
/* sound hardware */
SPEAKER(config, "mono").front_center();
SPEAKER_SOUND(config, m_speaker);
diff --git a/src/mame/drivers/rzone.cpp b/src/mame/drivers/rzone.cpp
index c08021fbf26..ecc753e8a60 100644
--- a/src/mame/drivers/rzone.cpp
+++ b/src/mame/drivers/rzone.cpp
@@ -131,7 +131,7 @@ WRITE_LINE_MEMBER(rzone_state::sctrl_w)
{
// SCTRL: 74165 SH/LD: reload inputs while low
if (!state || !m_sctrl)
- m_inp_mux = m_inp_matrix[0]->read();
+ m_inp_mux = m_inputs[0]->read();
m_sctrl = state;
}
diff --git a/src/mame/drivers/tb303.cpp b/src/mame/drivers/tb303.cpp
index 1698197fdde..62dfdce85e5 100644
--- a/src/mame/drivers/tb303.cpp
+++ b/src/mame/drivers/tb303.cpp
@@ -136,7 +136,7 @@ void tb303_state::update_leds()
0.2 D208 1.2 D215 2.2 D220 3.2 D210
0.3 D209 1.3 D216 2.3 D221 3.3 D212
*/
- display_matrix(4, 4, m_port[NEC_UCOM4_PORTG], m_port[NEC_UCOM4_PORTH]);
+ m_display->matrix(m_port[NEC_UCOM4_PORTH], m_port[NEC_UCOM4_PORTG]);
// todo: battery led
// todo: 4 more leds(see top-left part)
@@ -160,7 +160,7 @@ READ8_MEMBER(tb303_state::input_r)
if (offset == NEC_UCOM4_PORTA && m_inp_mux == 0)
{
// todo..
- return m_inp_matrix[4]->read();
+ return m_inputs[4]->read();
}
else
return read_inputs(4) >> (offset*4) & 0xf;
@@ -271,6 +271,8 @@ void tb303_state::tb303(machine_config &config)
tp3_clock.set_start_delay(TP3_PERIOD - TP3_LOW);
TIMER(config, "tp3_clear").configure_periodic(FUNC(tb303_state::tp3_clear), TP3_PERIOD);
+ /* video hardware */
+ PWM_DISPLAY(config, m_display).set_size(4, 4);
config.set_default_layout(layout_tb303);
/* sound hardware */
diff --git a/src/mame/drivers/ticalc1x.cpp b/src/mame/drivers/ticalc1x.cpp
index 0eae6892078..c37de839da3 100644
--- a/src/mame/drivers/ticalc1x.cpp
+++ b/src/mame/drivers/ticalc1x.cpp
@@ -86,8 +86,8 @@ void cmulti8_state::prepare_display()
set_display_segmask(0xfffff, 0xff);
// M-digit is on in memory mode, upper row is off in single mode
- u32 m = (m_inp_matrix[10]->read() & 0x10) ? 0x100000 : 0;
- u32 mask = (m_inp_matrix[10]->read() & 0x20) ? 0xfffff : 0xffc00;
+ u32 m = (m_inputs[10]->read() & 0x10) ? 0x100000 : 0;
+ u32 mask = (m_inputs[10]->read() & 0x20) ? 0xfffff : 0xffc00;
// R10 selects display row
u32 sel = (m_r & 0x400) ? (m_r & 0x3ff) : (m_r << 10 & 0xffc00);
@@ -1280,7 +1280,7 @@ WRITE16_MEMBER(dataman_state::write_o)
READ8_MEMBER(dataman_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[5]->read() | read_inputs(5);
+ return m_inputs[5]->read() | read_inputs(5);
}
// config
@@ -1497,7 +1497,7 @@ WRITE16_MEMBER(ti30_state::write_o)
READ8_MEMBER(ti30_state::read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[7]->read() | read_inputs(7);
+ return m_inputs[7]->read() | read_inputs(7);
}
// config
diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp
index f9a32b22afe..2e210f4525f 100644
--- a/src/mame/drivers/tispeak.cpp
+++ b/src/mame/drivers/tispeak.cpp
@@ -622,7 +622,7 @@ WRITE16_MEMBER(tispeak_state::snspell_write_o)
READ8_MEMBER(tispeak_state::snspell_read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[8]->read() | read_inputs(8);
+ return m_inputs[8]->read() | read_inputs(8);
}
@@ -676,7 +676,7 @@ READ8_MEMBER(tispeak_state::snspellc_read_k)
u8 k4 = m_tms5100->ctl_r(space, 0) << 2 & 4;
// K: multiplexed inputs (note: the Vss row is always on)
- return k4 | m_inp_matrix[9]->read() | read_inputs(9);
+ return k4 | m_inputs[9]->read() | read_inputs(9);
}
@@ -707,7 +707,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(tispeak_state::tntell_get_overlay)
// external module, the game continues.
// pick overlay code from machine config, see comment section above for reference
- m_overlay = m_inp_matrix[10]->read();
+ m_overlay = m_inputs[10]->read();
// try to get it from (external) layout
if (m_overlay == 0x20)
diff --git a/src/mame/drivers/tispellb.cpp b/src/mame/drivers/tispellb.cpp
index c6806552659..a7eaecda10f 100644
--- a/src/mame/drivers/tispellb.cpp
+++ b/src/mame/drivers/tispellb.cpp
@@ -177,7 +177,7 @@ WRITE16_MEMBER(tispellb_state::main_write_r)
READ8_MEMBER(tispellb_state::main_read_k)
{
// K: multiplexed inputs (note: the Vss row is always on)
- return m_inp_matrix[7]->read() | read_inputs(7);
+ return m_inputs[7]->read() | read_inputs(7);
}
diff --git a/src/mame/drivers/tr606.cpp b/src/mame/drivers/tr606.cpp
index cddca7b0c8d..6721dc82159 100644
--- a/src/mame/drivers/tr606.cpp
+++ b/src/mame/drivers/tr606.cpp
@@ -92,6 +92,7 @@ void tr606_state::tr606(machine_config &config)
tp3_clock.set_start_delay(TP3_PERIOD - TP3_LOW);
TIMER(config, "tp3_clear").configure_periodic(FUNC(tr606_state::tp3_clear), TP3_PERIOD);
+ /* video hardware */
config.set_default_layout(layout_tr606);
/* sound hardware */
diff --git a/src/mame/includes/hh_sm510.h b/src/mame/includes/hh_sm510.h
index dee77543def..cb42456da1e 100644
--- a/src/mame/includes/hh_sm510.h
+++ b/src/mame/includes/hh_sm510.h
@@ -19,9 +19,9 @@ public:
hh_sm510_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0),
+ m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
m_inp_lines(0),
m_inp_fixed(-1),
m_display_wait(33)
@@ -29,9 +29,9 @@ public:
// devices
required_device<sm510_base_device> m_maincpu;
- optional_ioport_array<8+1> m_inp_matrix; // max 8
- output_finder<16, 16, 4> m_out_x;
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<8+1> m_inputs; // max 8
+ output_finder<16, 16, 4> m_out_x;
// misc common
u16 m_inp_mux; // multiplexed inputs mask
diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h
index bfb0a329ec0..76ae00850da 100644
--- a/src/mame/includes/hh_tms1k.h
+++ b/src/mame/includes/hh_tms1k.h
@@ -31,15 +31,15 @@ public:
hh_tms1k_state(const machine_config &mconfig, device_type type, const char *tag) :
screenless_state(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0),
m_out_power(*this, "power")
{ }
// devices
required_device<tms1k_base_device> m_maincpu;
- optional_ioport_array<18> m_inp_matrix; // max 18
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<18> m_inputs; // max 18
output_finder<> m_out_power; // power state, eg. led
// misc common
diff --git a/src/mame/includes/hh_ucom4.h b/src/mame/includes/hh_ucom4.h
index 8ede7a7745a..8289c9dc309 100644
--- a/src/mame/includes/hh_ucom4.h
+++ b/src/mame/includes/hh_ucom4.h
@@ -9,26 +9,27 @@
#ifndef MAME_INCLUDES_HH_UCOM4_H
#define MAME_INCLUDES_HH_UCOM4_H
-#include "includes/screenless.h"
-
#include "cpu/ucom4/ucom4.h"
+#include "video/pwm.h"
#include "sound/spkrdev.h"
-class hh_ucom4_state : public screenless_state
+class hh_ucom4_state : public driver_device
{
public:
hh_ucom4_state(const machine_config &mconfig, device_type type, const char *tag) :
- screenless_state(mconfig, type, tag),
+ driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_inp_matrix(*this, "IN.%u", 0),
- m_speaker(*this, "speaker")
+ m_display(*this, "display"),
+ m_speaker(*this, "speaker"),
+ m_inputs(*this, "IN.%u", 0)
{ }
// devices
required_device<ucom4_cpu_device> m_maincpu;
- optional_ioport_array<6> m_inp_matrix; // max 6
+ optional_device<pwm_display_device> m_display;
optional_device<speaker_sound_device> m_speaker;
+ optional_ioport_array<6> m_inputs; // max 6
// misc common
u8 m_port[9]; // MCU port A-I write data (optional)
diff --git a/src/mame/layout/funrlgl.lay b/src/mame/layout/funrlgl.lay
index 27141d341f9..ea7311b8429 100644
--- a/src/mame/layout/funrlgl.lay
+++ b/src/mame/layout/funrlgl.lay
@@ -6,12 +6,14 @@
<element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
<element name="ledr" defstate="0">
- <disk state="0"><color red="0.2" green="0.05" blue="0.06" /></disk>
- <disk state="1"><color red="1.0" green="0.2" blue="0.23" /></disk>
+ <disk state="0"><color red="0.14" green="0.02" blue="0.03" /></disk>
+ <disk state="1"><color red="0.5" green="0.1" blue="0.11" /></disk>
+ <disk state="2"><color red="1.0" green="0.20" blue="0.22" /></disk>
</element>
<element name="ledg" defstate="0">
- <disk state="0"><color red="0.05" green="0.2" blue="0.06" /></disk>
- <disk state="1"><color red="0.23" green="1.0" blue="0.2" /></disk>
+ <disk state="0"><color red="0.02" green="0.14" blue="0.03" /></disk>
+ <disk state="1"><color red="0.1" green="0.5" blue="0.11" /></disk>
+ <disk state="2"><color red="0.2" green="1.0" blue="0.22" /></disk>
</element>