summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/hh_hmcs40.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/hh_hmcs40.cpp')
-rw-r--r--src/mame/drivers/hh_hmcs40.cpp152
1 files changed, 101 insertions, 51 deletions
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);