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 @@ - + - - + + - - + + - - + + - - + + - - - - + + + +