diff --git a/src/mame/drivers/elecbowl.cpp b/src/mame/drivers/elecbowl.cpp
index 65a2070bc5c..2a3aefbdc21 100644
--- a/src/mame/drivers/elecbowl.cpp
+++ b/src/mame/drivers/elecbowl.cpp
@@ -6,7 +6,7 @@
Marx Series 300 Electronic Bowling Game
Main board:
- * TMS1100NLL MP3403 DBS 7836 SINGAPORE
+ * TMS1100NLL MP3403 DBS 7836 SINGAPORE (no decap)
* 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
2*CD4043 quad r/s input latch
* 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection),
@@ -183,7 +183,7 @@ static const UINT16 elecbowl_output_pla[0x20] =
static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=33K, C=100pf
MCFG_TMS1XXX_OUTPUT_PLA(elecbowl_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r))
@@ -211,7 +211,7 @@ ROM_START( elecbowl )
ROM_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
ROM_REGION( 867, "maincpu:mpla", 0 )
- ROM_LOAD( "tms1100_common1_micro.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
+ ROM_LOAD( "tms1100_common3_micro.pla", 0, 867, BAD_DUMP CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) ) // not verified
ROM_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP )
ROM_END
diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp
index 65f8dae867d..fd14411bfef 100644
--- a/src/mame/drivers/fidelz80.cpp
+++ b/src/mame/drivers/fidelz80.cpp
@@ -691,7 +691,7 @@ void fidelz80base_state::set_display_segmask(UINT32 digits, UINT32 mask)
}
}
-void fidelz80base_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void fidelz80base_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -700,7 +700,8 @@ void fidelz80base_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp
index a4605bbace2..4b5046bde85 100644
--- a/src/mame/drivers/hh_cop400.cpp
+++ b/src/mame/drivers/hh_cop400.cpp
@@ -66,7 +66,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
@@ -194,7 +194,7 @@ void hh_cop400_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
-void hh_cop400_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void hh_cop400_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -203,10 +203,13 @@ void hh_cop400_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 set
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
+// generic input handlers
+
UINT8 hh_cop400_state::read_inputs(int columns)
{
// active low
@@ -232,7 +235,7 @@ UINT8 hh_cop400_state::read_inputs(int columns)
Castle Toy Einstein
* COP421 MCU labeled ~/927 COP421-NEZ/N
- * 4 lamps, 1bit sound
+ * 4 lamps, 1-bit sound
***************************************************************************/
@@ -277,7 +280,7 @@ MACHINE_CONFIG_END
Entex Space Invader
* COP444L MCU labeled /B138 COPL444-HRZ/N INV II (die labeled HRZ COP 444L/A)
- * 3 7seg LEDs, LED matrix and overlay mask, 1bit sound
+ * 3 7seg LEDs, LED matrix and overlay mask, 1-bit sound
The first version was on TMS1100 (see hh_tms1k.c), this is the reprogrammed
second release with a gray case instead of black.
@@ -393,7 +396,7 @@ MACHINE_CONFIG_END
Mattel Funtronics Jacks
* COP410L MCU bonded directly to PCB (die labeled COP410L/B NGS)
- * 8 LEDs, 1bit sound
+ * 8 LEDs, 1-bit sound
***************************************************************************/
@@ -500,7 +503,7 @@ MACHINE_CONFIG_END
Mattel Funtronics Red Light Green Light
* COP410L MCU bonded directly to PCB (die labeled COP410L/B NHZ)
- * 14 LEDs, 1bit sound
+ * 14 LEDs, 1-bit sound
known releases:
- USA: Funtronics Red Light Green Light
@@ -595,7 +598,7 @@ MACHINE_CONFIG_END
Milton Bradley Plus One
* COP410L MCU in 8-pin DIP, labeled ~/029 MM 57405 (die labeled COP410L/B NNE)
- * 4 sensors(1 on each die side), 1bit sound
+ * 4 sensors(1 on each die side), 1-bit sound
***************************************************************************/
@@ -639,7 +642,7 @@ MACHINE_CONFIG_END
Milton Bradley (Electronic) Lightfight
* COP421L MCU labeled /B119 COP421L-HLA/N
- * LED matrix, 1bit sound
+ * LED matrix, 1-bit sound
Xbox-shaped electronic game for 2 or more players, with long diagonal buttons
next to each outer LED. The main object of the game is to pinpoint a light
diff --git a/src/mame/drivers/hh_hmcs40.cpp b/src/mame/drivers/hh_hmcs40.cpp
index b511780824a..36bfd7a52ab 100644
--- a/src/mame/drivers/hh_hmcs40.cpp
+++ b/src/mame/drivers/hh_hmcs40.cpp
@@ -138,7 +138,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
- void display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
@@ -267,7 +267,7 @@ void hh_hmcs40_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
-void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety)
+void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -276,10 +276,13 @@ void hh_hmcs40_state::display_matrix(int maxx, int maxy, UINT64 setx, UINT32 set
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (U64(1) << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
+// generic input handlers
+
UINT16 hh_hmcs40_state::read_inputs(int columns)
{
UINT16 ret = 0;
diff --git a/src/mame/drivers/hh_melps4.cpp b/src/mame/drivers/hh_melps4.cpp
index 541352078d7..c16715427be 100644
--- a/src/mame/drivers/hh_melps4.cpp
+++ b/src/mame/drivers/hh_melps4.cpp
@@ -54,7 +54,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
@@ -176,7 +176,7 @@ void hh_melps4_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
-void hh_melps4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void hh_melps4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -185,7 +185,8 @@ void hh_melps4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 set
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
diff --git a/src/mame/drivers/hh_pic16.cpp b/src/mame/drivers/hh_pic16.cpp
index bb65a69265e..50bcd9c9e91 100644
--- a/src/mame/drivers/hh_pic16.cpp
+++ b/src/mame/drivers/hh_pic16.cpp
@@ -66,7 +66,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
@@ -186,7 +186,7 @@ void hh_pic16_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
-void hh_pic16_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void hh_pic16_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -195,7 +195,8 @@ void hh_pic16_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp
index 8fe592751f8..29d1daf6e25 100644
--- a/src/mame/drivers/hh_tms1k.cpp
+++ b/src/mame/drivers/hh_tms1k.cpp
@@ -286,7 +286,7 @@ void hh_tms1k_state::set_display_segmask(UINT32 digits, UINT32 mask)
}
}
-void hh_tms1k_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void hh_tms1k_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -295,18 +295,12 @@ void hh_tms1k_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
-void hh_tms1k_state::display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask)
-{
- // expects m_display_segmask to be not-0
- for (int y = 0; y < maxy; y++)
- m_display_segmask[y] &= segmask;
-
- display_matrix(maxx, maxy, setx, sety);
-}
+// generic input handlers
UINT8 hh_tms1k_state::read_inputs(int columns)
{
@@ -362,7 +356,7 @@ INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
/***************************************************************************
APF Mathemagician
- * TMS1100 MCU, labeled MP1030
+ * TMS1100 MCU, labeled MP1030 (no decap)
* 2 x DS8870N - Hex LED Digit Driver
* 2 x DS8861N - MOS-to-LED 5-Segment Driver
* 10-digit 7seg LED display(2 custom ones) + 4 LEDs, no sound
@@ -399,21 +393,8 @@ public:
void mathmagi_state::prepare_display()
{
- // R0-R7: 7seg leds
- for (int y = 0; y < 8; y++)
- {
- m_display_segmask[y] = 0x7f;
- m_display_state[y] = (m_r >> y & 1) ? (m_o >> 1) : 0;
- }
-
- // R8: custom math symbols digit
- // R9: custom equals digit
- // R10: misc lamps
- for (int y = 8; y < 11; y++)
- m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
-
- set_display_size(8, 11);
- display_update();
+ set_display_segmask(0xff, 0x7f);
+ display_matrix(7, 11, m_o, m_r);
}
WRITE16_MEMBER(mathmagi_state::write_r)
@@ -421,16 +402,18 @@ WRITE16_MEMBER(mathmagi_state::write_r)
// R3,R5-R7,R9,R10: input mux
m_inp_mux = (data >> 3 & 1) | (data >> 4 & 0xe) | (data >> 5 & 0x30);
- // +others:
+ // R0-R7: 7seg leds
+ // R8: custom math symbols digit
+ // R9: custom equals digit
+ // R10: misc lamps
m_r = data;
prepare_display();
}
WRITE16_MEMBER(mathmagi_state::write_o)
{
- // O1-O7: digit segments A-G
+ // O1-O7: led/digit segment data
// O0: N/C
- data = (data << 1 & 0xfe) | (data >> 7 & 1); // because opla is unknown
m_o = data;
prepare_display();
}
@@ -532,7 +515,7 @@ static const UINT16 mathmagi_output_pla[0x20] =
static MACHINE_CONFIG_START( mathmagi, mathmagi_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 175000) // RC osc. R=68K, C=82pf -> ~175kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 175000) // approximation - RC osc. R=68K, C=82pf
MCFG_TMS1XXX_OUTPUT_PLA(mathmagi_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(mathmagi_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mathmagi_state, write_r))
@@ -552,7 +535,7 @@ MACHINE_CONFIG_END
Coleco Amaze-A-Tron, by Ralph Baer
* TMS1100 MCU, labeled MP3405(die label too)
- * 2-digit 7seg LED display + 2 LEDs(one red, one green), 1bit sound
+ * 2-digit 7seg LED display + 2 LEDs(one red, one green), 1-bit sound
* 5x5 pressure-sensitive playing board
This is an electronic board game with a selection of 8 maze games,
@@ -671,7 +654,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( amaztron, amaztron_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K?, C=100pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=33K?, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(amaztron_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(amaztron_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(amaztron_state, write_o))
@@ -693,7 +676,7 @@ MACHINE_CONFIG_END
Coleco Zodiac - The Astrology Computer
* TMS1100 MP3435 (no decap)
- * 8-digit 7seg display, 12 other LEDs, 1bit sound
+ * 8-digit 7seg display, 12 other LEDs, 1-bit sound
As the name suggests, this is an astrologic calculator. Refer to the
(very extensive) manual on how to use it.
@@ -854,7 +837,7 @@ MACHINE_CONFIG_END
Coleco Electronic Quarterback
* TMS1100NLL MP3415 (die labeled MP3415)
- * 9-digit LED grid, 1bit sound
+ * 9-digit LED grid, 1-bit sound
known releases:
- USA(1): Electronic Quarterback
@@ -965,7 +948,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Football
* TMS1100NLLE (rev. E!) MP3460 (die labeled MP3460)
- * 2*SN75492N LED display drivers, 9-digit LED grid, 1bit sound
+ * 2*SN75492N LED display drivers, 9-digit LED grid, 1-bit sound
known releases:
- USA(1): Head to Head Football
@@ -1057,7 +1040,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hfootb, h2hfootb_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 310000) // approximation - RC osc. R=39K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1100, 310000) // approximation - RC osc. R=39K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(h2hfootb_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(h2hfootb_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(h2hfootb_state, write_o))
@@ -1080,7 +1063,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Baseball
* PCB labels Coleco rev C 73891/2
* TMS1170NLN MP1525-N2 (die labeled MP1525)
- * 9-digit cyan VFD display, and other LEDs behind bezel, 1bit sound
+ * 9-digit cyan VFD display, and other LEDs behind bezel, 1-bit sound
known releases:
- USA: Head to Head Baseball
@@ -1219,7 +1202,7 @@ MACHINE_CONFIG_END
Coleco Total Control 4
* TMS1400NLL MP7334-N2 (die labeled MP7334)
- * 2x2-digit 7seg LED display + 4 LEDs, LED grid display, 1bit sound
+ * 2x2-digit 7seg LED display + 4 LEDs, LED grid display, 1-bit sound
This is a head to head electronic tabletop LED-display sports console.
One cartridge(Football) was included with the console, the other three were
@@ -1353,7 +1336,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( tc4, tc4_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1400, 450000) // approximation - RC osc. R=27.3K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(tc4_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tc4_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tc4_state, write_o))
@@ -1375,7 +1358,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Baseball (1)
* TMS1000NLP MP0914 (die labeled MP0914A)
- * 1 7seg LED, and other LEDs behind bezel, 1bit sound
+ * 1 7seg LED, and other LEDs behind bezel, 1-bit sound
This is a handheld LED baseball game. One player controls the batter, the CPU
or other player controls the pitcher. Pitcher throw buttons are on a 'joypad'
@@ -1488,7 +1471,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ebball, ebball_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1000, 375000) // RC osc. R=43K, C=47pf -> ~375kHz
+ MCFG_CPU_ADD("maincpu", TMS1000, 375000) // approximation - RC osc. R=43K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(ebball_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball_state, write_o))
@@ -1511,7 +1494,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Baseball 2
* PCBs are labeled: ZENY
* TMS1000 MCU, MP0923 (die labeled MP0923)
- * 3 7seg LEDs, and other LEDs behind bezel, 1bit sound
+ * 3 7seg LEDs, and other LEDs behind bezel, 1-bit sound
The Japanese version was published by Gakken, black casing instead of white.
@@ -1613,7 +1596,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ebball2, ebball2_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=47K, C=47pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1000, 350000) // approximation - RC osc. R=47K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(ebball2_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball2_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball2_state, write_o))
@@ -1637,7 +1620,7 @@ MACHINE_CONFIG_END
* PCBs are labeled: ZENY
* TMS1100NLL 6007 MP1204 (rev. E!) (die labeled MP1204)
* 2*SN75492N LED display driver
- * 4 7seg LEDs, and other LEDs behind bezel, 1bit sound
+ * 4 7seg LEDs, and other LEDs behind bezel, 1-bit sound
This is another improvement over Entex Baseball, where gameplay is a bit more
varied. Like the others, the pitcher controls are on a separate joypad.
@@ -1816,7 +1799,7 @@ MACHINE_CONFIG_END
Entex Space Invader
* TMS1100 MP1211 (die labeled MP1211)
- * 3 7seg LEDs, LED matrix and overlay mask, 1bit sound
+ * 3 7seg LEDs, LED matrix and overlay mask, 1-bit sound
There are two versions of this game: the first release(this one) is on
TMS1100, the second more widespread release runs on a COP400. There are
@@ -1930,7 +1913,7 @@ MACHINE_CONFIG_END
Entex Color Football 4
* TMS1670 6009 MP7551 (die also labeled MP7551)
- * 9-digit cyan VFD display, 60 red and green LEDs behind bezel, 1bit sound
+ * 9-digit cyan VFD display, 60 red and green LEDs behind bezel, 1-bit sound
***************************************************************************/
@@ -2025,7 +2008,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( efootb4, efootb4_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1670, 475000) // approximation - RC osc. R=42K, C=47pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1670, 475000) // approximation - RC osc. R=42K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(efootb4_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(efootb4_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(efootb4_state, write_o))
@@ -2047,7 +2030,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Basketball 2
* TMS1100 6010 MP1218 (die also labeled MP1218)
- * 4 7seg LEDs, and other LEDs behind bezel, 1bit sound
+ * 4 7seg LEDs, and other LEDs behind bezel, 1-bit sound
lamp translation table: led zz from game PCB = MAME lampyx:
@@ -2148,7 +2131,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ebaskb2, ebaskb2_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 360000) // RC osc. R=33K, C=82pf -> ~360kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 360000) // approximation - RC osc. R=33K, C=82pf
MCFG_TMS1XXX_READ_K_CB(READ8(ebaskb2_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebaskb2_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebaskb2_state, write_o))
@@ -2170,7 +2153,7 @@ MACHINE_CONFIG_END
Entex Raise The Devil
* TMS1100 MP1221 (die labeled MP1221)
- * 4 7seg LEDs(rightmost one unused), and other LEDs behind bezel, 1bit sound
+ * 4 7seg LEDs(rightmost one unused), and other LEDs behind bezel, 1-bit sound
lamp translation table: led zz from game PCB = MAME lampyx:
@@ -2344,8 +2327,8 @@ protected:
void gpoker_state::prepare_display()
{
- memset(m_display_segmask, ~0, sizeof(m_display_segmask));
- display_matrix_seg(12, 11, m_o | (m_r >> 3 & 0xf00), m_r & 0x7ff, 0x7f);
+ set_display_segmask(0x7ff, 0x7f);
+ display_matrix(12, 11, m_o | (m_r >> 3 & 0xf00), m_r & 0x7ff);
}
WRITE16_MEMBER(gpoker_state::write_r)
@@ -2435,7 +2418,7 @@ void gpoker_state::machine_reset()
static MACHINE_CONFIG_START( gpoker, gpoker_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1370, 350000) // RC osc. R=47K, C=47pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1370, 350000) // approximation - RC osc. R=47K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(gpoker_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gpoker_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o))
@@ -2548,7 +2531,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( gjackpot, gjackpot_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1670, 450000) // approximation - RC osc. R=47K, C=47pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1670, 450000) // approximation - RC osc. R=47K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(gpoker_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gjackpot_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o))
@@ -2570,7 +2553,7 @@ MACHINE_CONFIG_END
Ideal Electronic Detective
* TMS0980NLL MP6100A (die labeled 0980B-00)
- * 10-digit 7seg LED display, 1bit sound
+ * 10-digit 7seg LED display, 2-level sound
hardware (and concept) is very similar to Parker Brothers Stop Thief
@@ -2597,12 +2580,12 @@ public:
WRITE16_MEMBER(elecdet_state::write_r)
{
- // R7,R8: speaker on
- m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0);
+ // R7,R8: speaker out
+ m_speaker->level_w((m_o & 0x80) ? (data >> 7 & 3) : 0);
// R0-R6: select digit
- memset(m_display_segmask, ~0, sizeof(m_display_segmask));
- display_matrix_seg(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data, 0x7f);
+ set_display_segmask(0x7f, 0x7f);
+ display_matrix(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data);
}
WRITE16_MEMBER(elecdet_state::write_o)
@@ -2611,7 +2594,7 @@ WRITE16_MEMBER(elecdet_state::write_o)
m_inp_mux = (data & 3) | (data >> 2 & 4) | (data >> 3 & 8);
// O0-O6: digit segments A-G
- // O7: speaker out -> write_r
+ // O7: speaker on -> write_r
m_o = data;
}
@@ -2671,6 +2654,9 @@ static INPUT_PORTS_START( elecdet )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false)
INPUT_PORTS_END
+
+static const INT16 elecdet_speaker_levels[4] = { 0, 0x3fff, 0x3fff, 0x7fff };
+
static MACHINE_CONFIG_START( elecdet, elecdet_state )
/* basic machine hardware */
@@ -2686,6 +2672,7 @@ static MACHINE_CONFIG_START( elecdet, elecdet_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SPEAKER_LEVELS(4, elecdet_speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
@@ -2697,7 +2684,7 @@ MACHINE_CONFIG_END
Kenner Star Wars - Electronic Battle Command
* TMS1100 MCU, labeled MP3438A
- * 4x4 LED grid display + 2 separate LEDs and 2-digit 7segs, 1bit sound
+ * 4x4 LED grid display + 2 separate LEDs and 2-digit 7segs, 1-bit sound
This is a small tabletop space-dogfighting game. To start the game,
press BASIC/INTER/ADV and enter P#(number of players), then
@@ -2801,7 +2788,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( starwbc, starwbc_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 325000) // RC osc. R=51K, C=47pf -> ~325kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 325000) // approximation - RC osc. R=51K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(starwbc_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
@@ -2847,8 +2834,8 @@ public:
void astro_state::prepare_display()
{
- memset(m_display_segmask, ~0, sizeof(m_display_segmask));
- display_matrix_seg(8, 10, m_o, m_r, 0xff);
+ set_display_segmask(0x3ff, 0xff);
+ display_matrix(8, 10, m_o, m_r);
}
WRITE16_MEMBER(astro_state::write_r)
@@ -2928,7 +2915,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( astro, astro_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1470, 450000) // approximation - RC osc. R=4.7K, C=33pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1470, 450000) // approximation - RC osc. R=4.7K, C=33pf
MCFG_TMS1XXX_READ_K_CB(READ8(astro_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(astro_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(astro_state, write_o))
@@ -2947,7 +2934,7 @@ MACHINE_CONFIG_END
Mattel Dungeons & Dragons - Computer Labyrinth Game
* TMS1100 M34012-N2LL (die labeled M34012)
- * 72 buttons, no LEDs, 1bit sound
+ * 72 buttons, no LEDs, 1-bit sound
This is an electronic board game. It requires markers and wall pieces to play.
Refer to the official manual for more information.
@@ -3116,7 +3103,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( mdndclab, mdndclab_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 500000) // approximation - RC osc. R=27K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1100, 500000) // approximation - RC osc. R=27K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(mdndclab_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mdndclab_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mdndclab_state, write_o))
@@ -3241,7 +3228,7 @@ MACHINE_CONFIG_END
Revision A hardware:
* TMS1000 (die labeled MP3226)
- * DS75494 Hex digit LED driver, 4 big lamps, 1bit sound
+ * DS75494 Hex digit LED driver, 4 big lamps, 1-bit sound
Newer revisions (also Pocket Simon) have a smaller 16-pin MB4850 chip
instead of the TMS1000. This one has been decapped too, but we couldn't
@@ -3321,7 +3308,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( simon, simon_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1000, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1000, 350000) // approximation - RC osc. R=33K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(simon_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(simon_state, write_r))
@@ -3342,7 +3329,7 @@ MACHINE_CONFIG_END
Milton Bradley Super Simon
* TMS1100 MP3476NLL (die labeled MP3476)
- * 8 big lamps(2 turn on at same time), 1bit sound
+ * 8 big lamps(2 turn on at same time), 1-bit sound
The semi-squel to Simon, not as popular. It includes more game variations
and a 2-player head-to-head mode.
@@ -3644,7 +3631,7 @@ static const INT16 bigtrak_speaker_levels[8] = { 0, 0x7fff/3, 0x7fff/3, 0x7fff/3
static MACHINE_CONFIG_START( bigtrak, bigtrak_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1000, 200000) // approximation - RC osc. R=83K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1000, 200000) // approximation - RC osc. R=83K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(bigtrak_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bigtrak_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bigtrak_state, write_o))
@@ -3692,18 +3679,10 @@ public:
WRITE16_MEMBER(cnsector_state::write_r)
{
- // R0-R5: select digit (right-to-left)
- for (int y = 0; y < 6; y++)
- {
- m_display_segmask[y] = 0xff;
- m_display_state[y] = (data >> y & 1) ? m_o : 0;
- }
-
- // R6-R9: direction leds (-> lamp60-63)
- m_display_state[6] = data >> 6 & 0xf;
-
- set_display_size(8, 7);
- display_update();
+ // R0-R5: select digit
+ // R6-R9: direction leds
+ set_display_segmask(0x3f, 0xff);
+ display_matrix(8, 10, m_o, data);
}
WRITE16_MEMBER(cnsector_state::write_o)
@@ -3887,7 +3866,7 @@ static const INT16 merlin_speaker_levels[8] = { 0, 0x7fff/3, 0x7fff/3, 0x7fff/3*
static MACHINE_CONFIG_START( merlin, merlin_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 350000) // RC osc. R=33K, C=100pf -> ~350kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 350000) // approximation - RC osc. R=33K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(merlin_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(merlin_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(merlin_state, write_o))
@@ -3951,7 +3930,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( mmerlin, mmerlin_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=30K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=30K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(mmerlin_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mmerlin_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mmerlin_state, write_o))
@@ -3974,7 +3953,7 @@ MACHINE_CONFIG_END
Parker Brothers Stop Thief, by Bob Doyle
* TMS0980NLL MP6101B (die labeled 0980B-01A)
- * 3-digit 7seg LED display, 1bit sound
+ * 3-digit 7seg LED display, 6-level sound
Stop Thief is actually a board game, the electronic device emulated here
(called Electronic Crime Scanner) is an accessory. To start a game, press
@@ -3999,18 +3978,14 @@ public:
WRITE16_MEMBER(stopthief_state::write_r)
{
// R0-R2: select digit
- UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f;
- for (int y = 0; y < 3; y++)
- {
- m_display_segmask[y] = 0x7f;
- m_display_state[y] = (data >> y & 1) ? o : 0;
- }
+ set_display_segmask(7, 0x7f);
+ display_matrix(7, 3, BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f, data & 7);
- set_display_size(7, 3);
- display_update();
-
- // R3-R8: speaker on
- m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
+ // R3-R8(tied together): speaker out
+ int level = 0;
+ for (int i = 0; m_o & 8 && i < 6; i++)
+ level += (data >> (i+3) & 1);
+ m_speaker->level_w(level);
}
WRITE16_MEMBER(stopthief_state::write_o)
@@ -4018,7 +3993,7 @@ WRITE16_MEMBER(stopthief_state::write_o)
// O0,O6: input mux
m_inp_mux = (data & 1) | (data >> 5 & 2);
- // O3: speaker out
+ // O3: speaker on
// O0-O2,O4-O7: led segments A-G
m_o = data;
}
@@ -4065,6 +4040,9 @@ static INPUT_PORTS_START( stopthief )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off") PORT_CHANGED_MEMBER(DEVICE_SELF, hh_tms1k_state, power_button, (void *)false)
INPUT_PORTS_END
+
+static const INT16 stopthief_speaker_levels[7] = { 0, 0x7fff/6, 0x7fff/5, 0x7fff/4, 0x7fff/3, 0x7fff/2, 0x7fff };
+
static MACHINE_CONFIG_START( stopthief, stopthief_state )
/* basic machine hardware */
@@ -4080,6 +4058,7 @@ static MACHINE_CONFIG_START( stopthief, stopthief_state )
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SPEAKER_LEVELS(7, stopthief_speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
@@ -4091,7 +4070,7 @@ MACHINE_CONFIG_END
Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen
* TMS1400NLL MP7313-N2 (die labeled MP7313)
- * LED grid display, 1bit sound
+ * LED grid display, 1-bit sound
Bank Shot is an electronic pool game. To select a game, repeatedly press
the [SELECT] button, then press [CUE UP] to start. Refer to the official
@@ -4176,7 +4155,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( bankshot, bankshot_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(bankshot_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bankshot_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bankshot_state, write_o))
@@ -4198,7 +4177,7 @@ MACHINE_CONFIG_END
Parker Brothers Split Second
* TMS1400NLL MP7314-N2 (die labeled MP7314)
- * LED grid display(default round LEDs, and rectangular shape ones), 1bit sound
+ * LED grid display(default round LEDs, and rectangular shape ones), 1-bit sound
This is an electronic handheld reflex gaming device, it's straightforward
to use. The included mini-games are:
@@ -4287,7 +4266,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( splitsec, splitsec_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1400, 475000) // approximation - RC osc. R=24K, C=100pf
MCFG_TMS1XXX_READ_K_CB(READ8(splitsec_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(splitsec_state, write_o))
@@ -4425,7 +4404,7 @@ MACHINE_CONFIG_END
Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
* TMS1100 MCU, labeled CD7282SL
- * 12 lamps behind buttons, 1bit sound
+ * 12 lamps behind buttons, 1-bit sound
This handheld contains 12 minigames. It looks and plays like "Fabulous Fred"
by the Japanese company Mego Corp. in 1980, which in turn is a mix of Merlin
@@ -4561,7 +4540,7 @@ static const UINT16 tandy12_output_pla[0x20] =
static MACHINE_CONFIG_START( tandy12, tandy12_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 400000) // RC osc. R=39K, C=47pf -> ~400kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 400000) // approximation - RC osc. R=39K, C=47pf
MCFG_TMS1XXX_OUTPUT_PLA(tandy12_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(tandy12_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tandy12_state, write_r))
@@ -4586,7 +4565,7 @@ MACHINE_CONFIG_END
* PCB label TOMY B.O.
* TMS1040 MP2726 TOMY WIPE (die labeled MP2726A)
* TMS1025N2LL I/O expander
- * 2-digit 7seg display, 46 other leds, 1bit sound
+ * 2-digit 7seg display, 46 other leds, 1-bit sound
known releases:
- USA: Break Up
@@ -4787,7 +4766,7 @@ MACHINE_CONFIG_END
Tomy Power House Pinball
* PCB label TOMY P-B
* TMS1100 MP1180 TOMY PINB (die labeled MP1180)
- * 3 7seg LEDs, and other LEDs behind bezel, 1bit sound
+ * 3 7seg LEDs, and other LEDs behind bezel, 1-bit sound
known releases:
- USA: Power House Pinball
@@ -4889,7 +4868,7 @@ INPUT_CHANGED_MEMBER(phpball_state::flipper_button)
static MACHINE_CONFIG_START( phpball, phpball_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1100, 375000) // RC osc. R=47K, C=47pf -> ~375kHz
+ MCFG_CPU_ADD("maincpu", TMS1100, 375000) // approximation - RC osc. R=47K, C=47pf
MCFG_TMS1XXX_READ_K_CB(READ8(phpball_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(phpball_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(phpball_state, write_o))
diff --git a/src/mame/drivers/hh_ucom4.cpp b/src/mame/drivers/hh_ucom4.cpp
index b410de7cf55..9eaf283d33f 100644
--- a/src/mame/drivers/hh_ucom4.cpp
+++ b/src/mame/drivers/hh_ucom4.cpp
@@ -188,7 +188,7 @@ void hh_ucom4_state::set_display_size(int maxx, int maxy)
m_display_maxy = maxy;
}
-void hh_ucom4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety)
+void hh_ucom4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update)
{
set_display_size(maxx, maxy);
@@ -197,10 +197,13 @@ void hh_ucom4_state::display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety
for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
- display_update();
+ if (update)
+ display_update();
}
+// generic input handlers
+
UINT8 hh_ucom4_state::read_inputs(int columns)
{
UINT8 ret = 0;
diff --git a/src/mame/drivers/mbdtower.cpp b/src/mame/drivers/mbdtower.cpp
index f20f805fb5f..d5a1d589604 100644
--- a/src/mame/drivers/mbdtower.cpp
+++ b/src/mame/drivers/mbdtower.cpp
@@ -62,7 +62,7 @@ void mbdtower_state::prepare_display()
{
// declare display matrix size and the 2 7segs
set_display_size(7, 3);
- m_display_segmask[1] = m_display_segmask[2] = 0x7f;
+ set_display_segmask(6, 0x7f);
// update current state
if (~m_r & 0x10)
@@ -246,7 +246,7 @@ void mbdtower_state::machine_start()
static MACHINE_CONFIG_START( mbdtower, mbdtower_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=43K, C=56pf, but unknown RC curve
+ MCFG_CPU_ADD("maincpu", TMS1400, 425000) // approximation - RC osc. R=43K, C=56pf
MCFG_TMS1XXX_READ_K_CB(READ8(mbdtower_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mbdtower_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mbdtower_state, write_o))
diff --git a/src/mame/drivers/ticalc1x.cpp b/src/mame/drivers/ticalc1x.cpp
index dcdea37827c..de60c7994ae 100644
--- a/src/mame/drivers/ticalc1x.cpp
+++ b/src/mame/drivers/ticalc1x.cpp
@@ -35,19 +35,9 @@ public:
ticalc1x_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_tms1k_state(mconfig, type, tag)
{ }
-
-protected:
- virtual void machine_start() override;
};
-void ticalc1x_state::machine_start()
-{
- hh_tms1k_state::machine_start();
- memset(m_display_segmask, ~0, sizeof(m_display_segmask)); // !
-}
-
-
/***************************************************************************
@@ -85,21 +75,18 @@ public:
void tisr16_state::prepare_display()
{
// update leds state
- for (int y = 0; y < 11; y++)
- m_display_state[y] = (m_r >> y & 1) ? m_o : 0;
+ set_display_segmask(0xfff, 0xff);
+ display_matrix(8, 12, m_o, m_r, false);
// exponent sign is from R10 O1, and R10 itself only uses segment G
m_display_state[11] = m_display_state[10] << 5 & 0x40;
m_display_state[10] &= 0x40;
-
- set_display_size(8, 12);
display_update();
}
WRITE16_MEMBER(tisr16_state::write_r)
{
- // R0-R10: input mux
- // R0-R10: select digit (right-to-left)
+ // R0-R10: input mux, select digit
m_r = m_inp_mux = data;
prepare_display();
}
@@ -259,7 +246,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( tisr16, tisr16_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS1000, 300000) // RC osc. R=43K, C=68pf -> ~300kHz (note: tisr16ii MCU RC osc. is different: R=30K, C=100pf -> also ~300kHz)
+ MCFG_CPU_ADD("maincpu", TMS1000, 300000) // approximation - RC osc. R=43K, C=68pf (note: tisr16ii MCU RC osc. is different: R=30K, C=100pf, same freq)
MCFG_TMS1XXX_READ_K_CB(READ8(tisr16_state, read_k))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tisr16_state, write_o))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tisr16_state, write_r))
@@ -315,11 +302,10 @@ public:
WRITE16_MEMBER(ti1250_state::write_r)
{
- // R8 only has segment G connected
- m_display_segmask[8] = 0x40;
-
- // R0-R7(,R8): select digit (right-to-left)
- display_matrix_seg(8, 9, m_o, data, 0xff);
+ // R0-R8: select digit
+ set_display_segmask(0xff, 0xff);
+ set_display_segmask(0x100, 0x40); // R8 only has segment G connected
+ display_matrix(8, 9, m_o, data);
}
WRITE16_MEMBER(ti1250_state::write_o)
@@ -398,7 +384,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ti1250, ti1250_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS0950, 200000) // RC osc. R=68K, C=68pf -> ~200kHz
+ MCFG_CPU_ADD("maincpu", TMS0950, 200000) // approximation - RC osc. R=68K, C=68pf
MCFG_TMS1XXX_READ_K_CB(READ8(ti1250_state, read_k))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ti1250_state, write_o))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ti1250_state, write_r))
@@ -451,9 +437,10 @@ public:
WRITE16_MEMBER(ti1000_state::write_r)
{
- // R0-R7: select digit (right-to-left)
+ // R0-R7: select digit
UINT8 o = BITSWAP8(m_o,7,4,3,2,1,0,6,5);
- display_matrix_seg(8, 8, o, data, 0xff);
+ set_display_segmask(0xff, 0xff);
+ display_matrix(8, 8, o, data);
}
WRITE16_MEMBER(ti1000_state::write_o)
@@ -555,10 +542,11 @@ WRITE16_MEMBER(wizatron_state::write_r)
// 3rd digit only has A and G for =, though some newer hardware revisions
// (goes for both wizatron and lilprof) use a custom equals-sign digit here
- m_display_segmask[3] = 0x41;
+ set_display_segmask(8, 0x41);
- // R0-R8: select digit (right-to-left)
- display_matrix_seg(7, 9, m_o, data, 0x7f);
+ // R0-R8: select digit
+ set_display_segmask(0x1ff^8, 0x7f);
+ display_matrix(7, 9, m_o, data);
}
WRITE16_MEMBER(wizatron_state::write_o)
@@ -725,19 +713,16 @@ public:
WRITE16_MEMBER(lilprof78_state::write_r)
{
// update leds state
- UINT8 o = BITSWAP8(m_o,7,4,3,2,1,0,6,5) & 0x7f;
+ UINT8 seg = BITSWAP8(m_o,7,4,3,2,1,0,6,5) & 0x7f;
UINT16 r = (data & 7) | (data << 1 & 0x1f0);
-
- for (int y = 0; y < 9; y++)
- m_display_state[y] = (r >> y & 1) ? o : 0;
-
+ set_display_segmask(0x1ff, 0x7f);
+ display_matrix(7, 9, seg, r, false);
+
// 3rd digit A/G(equals sign) is from O7
- m_display_state[3] = (r && m_o & 0x80) ? 0x41 : 0;
+ m_display_state[3] = (r != 0 && m_o & 0x80) ? 0x41 : 0;
// 6th digit is a custom 7seg for math symbols (see wizatron_state write_r)
m_display_state[6] = BITSWAP8(m_display_state[6],7,6,1,4,2,3,5,0);
-
- set_display_size(7, 9);
display_update();
}
@@ -836,7 +821,8 @@ public:
void dataman_state::prepare_display()
{
// note the extra segment on R9
- display_matrix_seg(8, 9, m_o | (m_r >> 2 & 0x80), m_r & 0x1ff, 0x7f);
+ set_display_segmask(0x1ff, 0x7f);
+ display_matrix(8, 9, m_o | (m_r >> 2 & 0x80), m_r & 0x1ff);
}
WRITE16_MEMBER(dataman_state::write_r)
@@ -959,12 +945,10 @@ public:
WRITE16_MEMBER(ti30_state::write_r)
{
- // 1st digit only has segments B,F,G,DP
- m_display_segmask[0] = 0xe2;
-
// R0-R8: select digit
- UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
- display_matrix_seg(8, 9, o, data, 0xff);
+ set_display_segmask(0x1fe, 0xff);
+ set_display_segmask(0x001, 0xe2); // 1st digit only has segments B,F,G,DP
+ display_matrix(8, 9, m_o, data);
}
WRITE16_MEMBER(ti30_state::write_o)
@@ -972,7 +956,7 @@ WRITE16_MEMBER(ti30_state::write_o)
// O0-O2,O4-O7: input mux
// O0-O7: digit segments
m_inp_mux = (data & 7) | (data >> 1 & 0x78);
- m_o = data;
+ m_o = BITSWAP8(data,7,5,2,1,4,0,6,3);
}
READ8_MEMBER(ti30_state::read_k)
@@ -1384,6 +1368,6 @@ COMP( 1978, lilprof78, lilprof, 0, lilprof78, lilprof78, driver_device, 0, "Tex
COMP( 1977, dataman, 0, 0, dataman, dataman, driver_device, 0, "Texas Instruments", "DataMan", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
-COMP( 1976, ti30, 0, 0, ti30, ti30, driver_device, 0, "Texas Instruments", "TI-30", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
-COMP( 1976, tibusan, 0, 0, ti30, tibusan, driver_device, 0, "Texas Instruments", "TI Business Analyst", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
-COMP( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
+COMP( 1976, ti30, 0, 0, ti30, ti30, driver_device, 0, "Texas Instruments", "TI-30", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
+COMP( 1976, tibusan, 0, 0, ti30, tibusan, driver_device, 0, "Texas Instruments", "TI Business Analyst", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
+COMP( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )
diff --git a/src/mame/includes/fidelz80.h b/src/mame/includes/fidelz80.h
index 4bc338691f2..3f57cc38ec6 100644
--- a/src/mame/includes/fidelz80.h
+++ b/src/mame/includes/fidelz80.h
@@ -62,7 +62,7 @@ public:
void display_update();
void set_display_size(int maxx, int maxy);
void set_display_segmask(UINT32 digits, UINT32 mask);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
diff --git a/src/mame/includes/hh_tms1k.h b/src/mame/includes/hh_tms1k.h
index a53b1453d95..fc05dc3baf9 100644
--- a/src/mame/includes/hh_tms1k.h
+++ b/src/mame/includes/hh_tms1k.h
@@ -62,8 +62,7 @@ public:
void display_update();
void set_display_size(int maxx, int maxy);
void set_display_segmask(UINT32 digits, UINT32 mask);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
- void display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
diff --git a/src/mame/includes/hh_ucom4.h b/src/mame/includes/hh_ucom4.h
index 76b3a5d7a02..36a525254b6 100644
--- a/src/mame/includes/hh_ucom4.h
+++ b/src/mame/includes/hh_ucom4.h
@@ -55,7 +55,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update();
void set_display_size(int maxx, int maxy);
- void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety);
+ void display_matrix(int maxx, int maxy, UINT32 setx, UINT32 sety, bool update = true);
protected:
virtual void machine_start() override;
diff --git a/src/mame/layout/cnsector.lay b/src/mame/layout/cnsector.lay
index 5bd9aaa0d48..730e02c3d06 100644
--- a/src/mame/layout/cnsector.lay
+++ b/src/mame/layout/cnsector.lay
@@ -12,7 +12,7 @@
-
+
@@ -56,7 +56,6 @@
-
@@ -87,7 +86,6 @@
-
@@ -109,35 +107,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
+
diff --git a/src/mame/layout/mathmagi.lay b/src/mame/layout/mathmagi.lay
index eb4e745c77b..b75ac74e178 100644
--- a/src/mame/layout/mathmagi.lay
+++ b/src/mame/layout/mathmagi.lay
@@ -27,7 +27,6 @@
-
@@ -62,28 +61,28 @@
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+