hh_*: misc cleanups

This commit is contained in:
hap 2016-02-20 00:54:20 +01:00
parent c12e8830ca
commit b58e5b4d55
15 changed files with 177 additions and 215 deletions

View File

@ -6,7 +6,7 @@
Marx Series 300 Electronic Bowling Game Marx Series 300 Electronic Bowling Game
Main board: Main board:
* TMS1100NLL MP3403 DBS 7836 SINGAPORE * TMS1100NLL MP3403 DBS 7836 SINGAPORE (no decap)
* 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer, * 4*SN75492 quad segment driver, 2*SN74259 8-line demultiplexer,
2*CD4043 quad r/s input latch 2*CD4043 quad r/s input latch
* 5 7seg LEDs, 15 lamps(10 lamps projected to bowling pins reflection), * 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 ) static MACHINE_CONFIG_START( elecbowl, elecbowl_state )
/* basic machine hardware */ /* 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_OUTPUT_PLA(elecbowl_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k)) MCFG_TMS1XXX_READ_K_CB(READ8(elecbowl_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(elecbowl_state, write_r)) 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_LOAD( "mp3403.u9", 0x0000, 0x0800, CRC(9eabaa7d) SHA1(b1f54587ed7f2bbf3a5d49075c807296384c2b06) )
ROM_REGION( 867, "maincpu:mpla", 0 ) 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_REGION( 365, "maincpu:opla", 0 )
ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP ) ROM_LOAD( "tms1100_elecbowl_output.pla", 0, 365, NO_DUMP )
ROM_END ROM_END

View File

@ -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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
display_update(); if (update)
display_update();
} }

View File

@ -66,7 +66,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;
@ -194,7 +194,7 @@ void hh_cop400_state::set_display_size(int maxx, int maxy)
m_display_maxy = 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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; 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) UINT8 hh_cop400_state::read_inputs(int columns)
{ {
// active low // active low
@ -232,7 +235,7 @@ UINT8 hh_cop400_state::read_inputs(int columns)
Castle Toy Einstein Castle Toy Einstein
* COP421 MCU labeled ~/927 COP421-NEZ/N * 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 Entex Space Invader
* COP444L MCU labeled /B138 COPL444-HRZ/N INV II (die labeled HRZ COP 444L/A) * 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 The first version was on TMS1100 (see hh_tms1k.c), this is the reprogrammed
second release with a gray case instead of black. second release with a gray case instead of black.
@ -393,7 +396,7 @@ MACHINE_CONFIG_END
Mattel Funtronics Jacks Mattel Funtronics Jacks
* COP410L MCU bonded directly to PCB (die labeled COP410L/B NGS) * 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 Mattel Funtronics Red Light Green Light
* COP410L MCU bonded directly to PCB (die labeled COP410L/B NHZ) * COP410L MCU bonded directly to PCB (die labeled COP410L/B NHZ)
* 14 LEDs, 1bit sound * 14 LEDs, 1-bit sound
known releases: known releases:
- USA: Funtronics Red Light Green Light - USA: Funtronics Red Light Green Light
@ -595,7 +598,7 @@ MACHINE_CONFIG_END
Milton Bradley Plus One Milton Bradley Plus One
* COP410L MCU in 8-pin DIP, labeled ~/029 MM 57405 (die labeled COP410L/B NNE) * 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 Milton Bradley (Electronic) Lightfight
* COP421L MCU labeled /B119 COP421L-HLA/N * 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 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 next to each outer LED. The main object of the game is to pinpoint a light

View File

@ -138,7 +138,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;
@ -267,7 +267,7 @@ void hh_hmcs40_state::set_display_size(int maxx, int maxy)
m_display_maxy = 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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (U64(1) << maxx)) : 0; 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 hh_hmcs40_state::read_inputs(int columns)
{ {
UINT16 ret = 0; UINT16 ret = 0;

View File

@ -54,7 +54,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;
@ -176,7 +176,7 @@ void hh_melps4_state::set_display_size(int maxx, int maxy)
m_display_maxy = 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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
display_update(); if (update)
display_update();
} }

View File

@ -66,7 +66,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;
@ -186,7 +186,7 @@ void hh_pic16_state::set_display_size(int maxx, int maxy)
m_display_maxy = 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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0;
display_update(); if (update)
display_update();
} }

View File

@ -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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; 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) UINT8 hh_tms1k_state::read_inputs(int columns)
{ {
@ -362,7 +356,7 @@ INPUT_CHANGED_MEMBER(hh_tms1k_state::power_button)
/*************************************************************************** /***************************************************************************
APF Mathemagician APF Mathemagician
* TMS1100 MCU, labeled MP1030 * TMS1100 MCU, labeled MP1030 (no decap)
* 2 x DS8870N - Hex LED Digit Driver * 2 x DS8870N - Hex LED Digit Driver
* 2 x DS8861N - MOS-to-LED 5-Segment Driver * 2 x DS8861N - MOS-to-LED 5-Segment Driver
* 10-digit 7seg LED display(2 custom ones) + 4 LEDs, no sound * 10-digit 7seg LED display(2 custom ones) + 4 LEDs, no sound
@ -399,21 +393,8 @@ public:
void mathmagi_state::prepare_display() void mathmagi_state::prepare_display()
{ {
// R0-R7: 7seg leds set_display_segmask(0xff, 0x7f);
for (int y = 0; y < 8; y++) display_matrix(7, 11, m_o, m_r);
{
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();
} }
WRITE16_MEMBER(mathmagi_state::write_r) WRITE16_MEMBER(mathmagi_state::write_r)
@ -421,16 +402,18 @@ WRITE16_MEMBER(mathmagi_state::write_r)
// R3,R5-R7,R9,R10: input mux // R3,R5-R7,R9,R10: input mux
m_inp_mux = (data >> 3 & 1) | (data >> 4 & 0xe) | (data >> 5 & 0x30); 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; m_r = data;
prepare_display(); prepare_display();
} }
WRITE16_MEMBER(mathmagi_state::write_o) WRITE16_MEMBER(mathmagi_state::write_o)
{ {
// O1-O7: digit segments A-G // O1-O7: led/digit segment data
// O0: N/C // O0: N/C
data = (data << 1 & 0xfe) | (data >> 7 & 1); // because opla is unknown
m_o = data; m_o = data;
prepare_display(); prepare_display();
} }
@ -532,7 +515,7 @@ static const UINT16 mathmagi_output_pla[0x20] =
static MACHINE_CONFIG_START( mathmagi, mathmagi_state ) static MACHINE_CONFIG_START( mathmagi, mathmagi_state )
/* basic machine hardware */ /* 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_OUTPUT_PLA(mathmagi_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(mathmagi_state, read_k)) MCFG_TMS1XXX_READ_K_CB(READ8(mathmagi_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mathmagi_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mathmagi_state, write_r))
@ -552,7 +535,7 @@ MACHINE_CONFIG_END
Coleco Amaze-A-Tron, by Ralph Baer Coleco Amaze-A-Tron, by Ralph Baer
* TMS1100 MCU, labeled MP3405(die label too) * 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 * 5x5 pressure-sensitive playing board
This is an electronic board game with a selection of 8 maze games, 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 ) static MACHINE_CONFIG_START( amaztron, amaztron_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(amaztron_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(amaztron_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(amaztron_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(amaztron_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(amaztron_state, write_o))
@ -693,7 +676,7 @@ MACHINE_CONFIG_END
Coleco Zodiac - The Astrology Computer Coleco Zodiac - The Astrology Computer
* TMS1100 MP3435 (no decap) * 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 As the name suggests, this is an astrologic calculator. Refer to the
(very extensive) manual on how to use it. (very extensive) manual on how to use it.
@ -854,7 +837,7 @@ MACHINE_CONFIG_END
Coleco Electronic Quarterback Coleco Electronic Quarterback
* TMS1100NLL MP3415 (die labeled MP3415) * TMS1100NLL MP3415 (die labeled MP3415)
* 9-digit LED grid, 1bit sound * 9-digit LED grid, 1-bit sound
known releases: known releases:
- USA(1): Electronic Quarterback - USA(1): Electronic Quarterback
@ -965,7 +948,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Football Coleco Head to Head Football
* TMS1100NLLE (rev. E!) MP3460 (die labeled MP3460) * 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: known releases:
- USA(1): Head to Head Football - USA(1): Head to Head Football
@ -1057,7 +1040,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( h2hfootb, h2hfootb_state ) static MACHINE_CONFIG_START( h2hfootb, h2hfootb_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(h2hfootb_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(h2hfootb_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(h2hfootb_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(h2hfootb_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(h2hfootb_state, write_o))
@ -1080,7 +1063,7 @@ MACHINE_CONFIG_END
Coleco Head to Head Baseball Coleco Head to Head Baseball
* PCB labels Coleco rev C 73891/2 * PCB labels Coleco rev C 73891/2
* TMS1170NLN MP1525-N2 (die labeled MP1525) * 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: known releases:
- USA: Head to Head Baseball - USA: Head to Head Baseball
@ -1219,7 +1202,7 @@ MACHINE_CONFIG_END
Coleco Total Control 4 Coleco Total Control 4
* TMS1400NLL MP7334-N2 (die labeled MP7334) * 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. This is a head to head electronic tabletop LED-display sports console.
One cartridge(Football) was included with the console, the other three were 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 ) static MACHINE_CONFIG_START( tc4, tc4_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(tc4_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tc4_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tc4_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tc4_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tc4_state, write_o))
@ -1375,7 +1358,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Baseball (1) Entex (Electronic) Baseball (1)
* TMS1000NLP MP0914 (die labeled MP0914A) * 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 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' 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 ) static MACHINE_CONFIG_START( ebball, ebball_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(ebball_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball_state, write_o))
@ -1511,7 +1494,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Baseball 2 Entex (Electronic) Baseball 2
* PCBs are labeled: ZENY * PCBs are labeled: ZENY
* TMS1000 MCU, MP0923 (die labeled MP0923) * 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. 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 ) static MACHINE_CONFIG_START( ebball2, ebball2_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(ebball2_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball2_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebball2_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball2_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebball2_state, write_o))
@ -1637,7 +1620,7 @@ MACHINE_CONFIG_END
* PCBs are labeled: ZENY * PCBs are labeled: ZENY
* TMS1100NLL 6007 MP1204 (rev. E!) (die labeled MP1204) * TMS1100NLL 6007 MP1204 (rev. E!) (die labeled MP1204)
* 2*SN75492N LED display driver * 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 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. varied. Like the others, the pitcher controls are on a separate joypad.
@ -1816,7 +1799,7 @@ MACHINE_CONFIG_END
Entex Space Invader Entex Space Invader
* TMS1100 MP1211 (die labeled MP1211) * 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 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 TMS1100, the second more widespread release runs on a COP400. There are
@ -1930,7 +1913,7 @@ MACHINE_CONFIG_END
Entex Color Football 4 Entex Color Football 4
* TMS1670 6009 MP7551 (die also labeled MP7551) * 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 ) static MACHINE_CONFIG_START( efootb4, efootb4_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(efootb4_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(efootb4_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(efootb4_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(efootb4_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(efootb4_state, write_o))
@ -2047,7 +2030,7 @@ MACHINE_CONFIG_END
Entex (Electronic) Basketball 2 Entex (Electronic) Basketball 2
* TMS1100 6010 MP1218 (die also labeled MP1218) * 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: lamp translation table: led zz from game PCB = MAME lampyx:
@ -2148,7 +2131,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ebaskb2, ebaskb2_state ) static MACHINE_CONFIG_START( ebaskb2, ebaskb2_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(ebaskb2_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebaskb2_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ebaskb2_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebaskb2_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ebaskb2_state, write_o))
@ -2170,7 +2153,7 @@ MACHINE_CONFIG_END
Entex Raise The Devil Entex Raise The Devil
* TMS1100 MP1221 (die labeled MP1221) * 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: lamp translation table: led zz from game PCB = MAME lampyx:
@ -2344,8 +2327,8 @@ protected:
void gpoker_state::prepare_display() void gpoker_state::prepare_display()
{ {
memset(m_display_segmask, ~0, sizeof(m_display_segmask)); set_display_segmask(0x7ff, 0x7f);
display_matrix_seg(12, 11, m_o | (m_r >> 3 & 0xf00), m_r & 0x7ff, 0x7f); display_matrix(12, 11, m_o | (m_r >> 3 & 0xf00), m_r & 0x7ff);
} }
WRITE16_MEMBER(gpoker_state::write_r) WRITE16_MEMBER(gpoker_state::write_r)
@ -2435,7 +2418,7 @@ void gpoker_state::machine_reset()
static MACHINE_CONFIG_START( gpoker, gpoker_state ) static MACHINE_CONFIG_START( gpoker, gpoker_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(gpoker_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gpoker_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gpoker_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o))
@ -2548,7 +2531,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( gjackpot, gjackpot_state ) static MACHINE_CONFIG_START( gjackpot, gjackpot_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(gpoker_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gjackpot_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(gjackpot_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(gpoker_state, write_o))
@ -2570,7 +2553,7 @@ MACHINE_CONFIG_END
Ideal Electronic Detective Ideal Electronic Detective
* TMS0980NLL MP6100A (die labeled 0980B-00) * 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 hardware (and concept) is very similar to Parker Brothers Stop Thief
@ -2597,12 +2580,12 @@ public:
WRITE16_MEMBER(elecdet_state::write_r) WRITE16_MEMBER(elecdet_state::write_r)
{ {
// R7,R8: speaker on // R7,R8: speaker out
m_speaker->level_w((data & 0x180 && m_o & 0x80) ? 1 : 0); m_speaker->level_w((m_o & 0x80) ? (data >> 7 & 3) : 0);
// R0-R6: select digit // R0-R6: select digit
memset(m_display_segmask, ~0, sizeof(m_display_segmask)); set_display_segmask(0x7f, 0x7f);
display_matrix_seg(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data, 0x7f); display_matrix(7, 7, BITSWAP8(m_o,7,5,2,1,4,0,6,3), data);
} }
WRITE16_MEMBER(elecdet_state::write_o) 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); m_inp_mux = (data & 3) | (data >> 2 & 4) | (data >> 3 & 8);
// O0-O6: digit segments A-G // O0-O6: digit segments A-G
// O7: speaker out -> write_r // O7: speaker on -> write_r
m_o = data; 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) 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 INPUT_PORTS_END
static const INT16 elecdet_speaker_levels[4] = { 0, 0x3fff, 0x3fff, 0x7fff };
static MACHINE_CONFIG_START( elecdet, elecdet_state ) static MACHINE_CONFIG_START( elecdet, elecdet_state )
/* basic machine hardware */ /* basic machine hardware */
@ -2686,6 +2672,7 @@ static MACHINE_CONFIG_START( elecdet, elecdet_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SPEAKER_LEVELS(4, elecdet_speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -2697,7 +2684,7 @@ MACHINE_CONFIG_END
Kenner Star Wars - Electronic Battle Command Kenner Star Wars - Electronic Battle Command
* TMS1100 MCU, labeled MP3438A * 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, This is a small tabletop space-dogfighting game. To start the game,
press BASIC/INTER/ADV and enter P#(number of players), then 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 ) static MACHINE_CONFIG_START( starwbc, starwbc_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(starwbc_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
@ -2847,8 +2834,8 @@ public:
void astro_state::prepare_display() void astro_state::prepare_display()
{ {
memset(m_display_segmask, ~0, sizeof(m_display_segmask)); set_display_segmask(0x3ff, 0xff);
display_matrix_seg(8, 10, m_o, m_r, 0xff); display_matrix(8, 10, m_o, m_r);
} }
WRITE16_MEMBER(astro_state::write_r) WRITE16_MEMBER(astro_state::write_r)
@ -2928,7 +2915,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( astro, astro_state ) static MACHINE_CONFIG_START( astro, astro_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(astro_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(astro_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(astro_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(astro_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(astro_state, write_o))
@ -2947,7 +2934,7 @@ MACHINE_CONFIG_END
Mattel Dungeons & Dragons - Computer Labyrinth Game Mattel Dungeons & Dragons - Computer Labyrinth Game
* TMS1100 M34012-N2LL (die labeled M34012) * 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. This is an electronic board game. It requires markers and wall pieces to play.
Refer to the official manual for more information. Refer to the official manual for more information.
@ -3116,7 +3103,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( mdndclab, mdndclab_state ) static MACHINE_CONFIG_START( mdndclab, mdndclab_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(mdndclab_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mdndclab_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mdndclab_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mdndclab_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mdndclab_state, write_o))
@ -3241,7 +3228,7 @@ MACHINE_CONFIG_END
Revision A hardware: Revision A hardware:
* TMS1000 (die labeled MP3226) * 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 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 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 ) static MACHINE_CONFIG_START( simon, simon_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(simon_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(simon_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(simon_state, write_r))
@ -3342,7 +3329,7 @@ MACHINE_CONFIG_END
Milton Bradley Super Simon Milton Bradley Super Simon
* TMS1100 MP3476NLL (die labeled MP3476) * 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 The semi-squel to Simon, not as popular. It includes more game variations
and a 2-player head-to-head mode. 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 ) static MACHINE_CONFIG_START( bigtrak, bigtrak_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(bigtrak_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bigtrak_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bigtrak_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bigtrak_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bigtrak_state, write_o))
@ -3692,18 +3679,10 @@ public:
WRITE16_MEMBER(cnsector_state::write_r) WRITE16_MEMBER(cnsector_state::write_r)
{ {
// R0-R5: select digit (right-to-left) // R0-R5: select digit
for (int y = 0; y < 6; y++) // R6-R9: direction leds
{ set_display_segmask(0x3f, 0xff);
m_display_segmask[y] = 0xff; display_matrix(8, 10, m_o, data);
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();
} }
WRITE16_MEMBER(cnsector_state::write_o) 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 ) static MACHINE_CONFIG_START( merlin, merlin_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(merlin_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(merlin_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(merlin_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(merlin_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(merlin_state, write_o))
@ -3951,7 +3930,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( mmerlin, mmerlin_state ) static MACHINE_CONFIG_START( mmerlin, mmerlin_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(mmerlin_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mmerlin_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mmerlin_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mmerlin_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mmerlin_state, write_o))
@ -3974,7 +3953,7 @@ MACHINE_CONFIG_END
Parker Brothers Stop Thief, by Bob Doyle Parker Brothers Stop Thief, by Bob Doyle
* TMS0980NLL MP6101B (die labeled 0980B-01A) * 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 Stop Thief is actually a board game, the electronic device emulated here
(called Electronic Crime Scanner) is an accessory. To start a game, press (called Electronic Crime Scanner) is an accessory. To start a game, press
@ -3999,18 +3978,14 @@ public:
WRITE16_MEMBER(stopthief_state::write_r) WRITE16_MEMBER(stopthief_state::write_r)
{ {
// R0-R2: select digit // R0-R2: select digit
UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f; set_display_segmask(7, 0x7f);
for (int y = 0; y < 3; y++) display_matrix(7, 3, BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f, data & 7);
{
m_display_segmask[y] = 0x7f;
m_display_state[y] = (data >> y & 1) ? o : 0;
}
set_display_size(7, 3); // R3-R8(tied together): speaker out
display_update(); int level = 0;
for (int i = 0; m_o & 8 && i < 6; i++)
// R3-R8: speaker on level += (data >> (i+3) & 1);
m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0); m_speaker->level_w(level);
} }
WRITE16_MEMBER(stopthief_state::write_o) WRITE16_MEMBER(stopthief_state::write_o)
@ -4018,7 +3993,7 @@ WRITE16_MEMBER(stopthief_state::write_o)
// O0,O6: input mux // O0,O6: input mux
m_inp_mux = (data & 1) | (data >> 5 & 2); m_inp_mux = (data & 1) | (data >> 5 & 2);
// O3: speaker out // O3: speaker on
// O0-O2,O4-O7: led segments A-G // O0-O2,O4-O7: led segments A-G
m_o = data; 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) 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 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 ) static MACHINE_CONFIG_START( stopthief, stopthief_state )
/* basic machine hardware */ /* basic machine hardware */
@ -4080,6 +4058,7 @@ static MACHINE_CONFIG_START( stopthief, stopthief_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SPEAKER_LEVELS(7, stopthief_speaker_levels)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -4091,7 +4070,7 @@ MACHINE_CONFIG_END
Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen Parker Brothers Bank Shot (known as Cue Ball in the UK), by Garry Kitchen
* TMS1400NLL MP7313-N2 (die labeled MP7313) * 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 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 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 ) static MACHINE_CONFIG_START( bankshot, bankshot_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(bankshot_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bankshot_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(bankshot_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bankshot_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(bankshot_state, write_o))
@ -4198,7 +4177,7 @@ MACHINE_CONFIG_END
Parker Brothers Split Second Parker Brothers Split Second
* TMS1400NLL MP7314-N2 (die labeled MP7314) * 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 This is an electronic handheld reflex gaming device, it's straightforward
to use. The included mini-games are: to use. The included mini-games are:
@ -4287,7 +4266,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( splitsec, splitsec_state ) static MACHINE_CONFIG_START( splitsec, splitsec_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(splitsec_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(splitsec_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(splitsec_state, write_o)) 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) Tandy Radio Shack Computerized Arcade (1981, 1982, 1995)
* TMS1100 MCU, labeled CD7282SL * 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" 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 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 ) static MACHINE_CONFIG_START( tandy12, tandy12_state )
/* basic machine hardware */ /* 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_OUTPUT_PLA(tandy12_output_pla)
MCFG_TMS1XXX_READ_K_CB(READ8(tandy12_state, read_k)) MCFG_TMS1XXX_READ_K_CB(READ8(tandy12_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tandy12_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tandy12_state, write_r))
@ -4586,7 +4565,7 @@ MACHINE_CONFIG_END
* PCB label TOMY B.O. * PCB label TOMY B.O.
* TMS1040 MP2726 TOMY WIPE (die labeled MP2726A) * TMS1040 MP2726 TOMY WIPE (die labeled MP2726A)
* TMS1025N2LL I/O expander * 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: known releases:
- USA: Break Up - USA: Break Up
@ -4787,7 +4766,7 @@ MACHINE_CONFIG_END
Tomy Power House Pinball Tomy Power House Pinball
* PCB label TOMY P-B * PCB label TOMY P-B
* TMS1100 MP1180 TOMY PINB (die labeled MP1180) * 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: known releases:
- USA: Power House Pinball - USA: Power House Pinball
@ -4889,7 +4868,7 @@ INPUT_CHANGED_MEMBER(phpball_state::flipper_button)
static MACHINE_CONFIG_START( phpball, phpball_state ) static MACHINE_CONFIG_START( phpball, phpball_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(phpball_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(phpball_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(phpball_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(phpball_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(phpball_state, write_o))

View File

@ -188,7 +188,7 @@ void hh_ucom4_state::set_display_size(int maxx, int maxy)
m_display_maxy = 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); 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++) for (int y = 0; y < maxy; y++)
m_display_state[y] = (sety >> y & 1) ? ((setx & mask) | (1 << maxx)) : 0; 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 hh_ucom4_state::read_inputs(int columns)
{ {
UINT8 ret = 0; UINT8 ret = 0;

View File

@ -62,7 +62,7 @@ void mbdtower_state::prepare_display()
{ {
// declare display matrix size and the 2 7segs // declare display matrix size and the 2 7segs
set_display_size(7, 3); set_display_size(7, 3);
m_display_segmask[1] = m_display_segmask[2] = 0x7f; set_display_segmask(6, 0x7f);
// update current state // update current state
if (~m_r & 0x10) if (~m_r & 0x10)
@ -246,7 +246,7 @@ void mbdtower_state::machine_start()
static MACHINE_CONFIG_START( mbdtower, mbdtower_state ) static MACHINE_CONFIG_START( mbdtower, mbdtower_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(mbdtower_state, read_k))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mbdtower_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(mbdtower_state, write_r))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mbdtower_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(mbdtower_state, write_o))

View File

@ -35,19 +35,9 @@ public:
ticalc1x_state(const machine_config &mconfig, device_type type, const char *tag) ticalc1x_state(const machine_config &mconfig, device_type type, const char *tag)
: hh_tms1k_state(mconfig, type, 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() void tisr16_state::prepare_display()
{ {
// update leds state // update leds state
for (int y = 0; y < 11; y++) set_display_segmask(0xfff, 0xff);
m_display_state[y] = (m_r >> y & 1) ? m_o : 0; display_matrix(8, 12, m_o, m_r, false);
// exponent sign is from R10 O1, and R10 itself only uses segment G // 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[11] = m_display_state[10] << 5 & 0x40;
m_display_state[10] &= 0x40; m_display_state[10] &= 0x40;
set_display_size(8, 12);
display_update(); display_update();
} }
WRITE16_MEMBER(tisr16_state::write_r) WRITE16_MEMBER(tisr16_state::write_r)
{ {
// R0-R10: input mux // R0-R10: input mux, select digit
// R0-R10: select digit (right-to-left)
m_r = m_inp_mux = data; m_r = m_inp_mux = data;
prepare_display(); prepare_display();
} }
@ -259,7 +246,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( tisr16, tisr16_state ) static MACHINE_CONFIG_START( tisr16, tisr16_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(tisr16_state, read_k))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tisr16_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(tisr16_state, write_o))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tisr16_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(tisr16_state, write_r))
@ -315,11 +302,10 @@ public:
WRITE16_MEMBER(ti1250_state::write_r) WRITE16_MEMBER(ti1250_state::write_r)
{ {
// R8 only has segment G connected // R0-R8: select digit
m_display_segmask[8] = 0x40; set_display_segmask(0xff, 0xff);
set_display_segmask(0x100, 0x40); // R8 only has segment G connected
// R0-R7(,R8): select digit (right-to-left) display_matrix(8, 9, m_o, data);
display_matrix_seg(8, 9, m_o, data, 0xff);
} }
WRITE16_MEMBER(ti1250_state::write_o) WRITE16_MEMBER(ti1250_state::write_o)
@ -398,7 +384,7 @@ INPUT_PORTS_END
static MACHINE_CONFIG_START( ti1250, ti1250_state ) static MACHINE_CONFIG_START( ti1250, ti1250_state )
/* basic machine hardware */ /* 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_READ_K_CB(READ8(ti1250_state, read_k))
MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ti1250_state, write_o)) MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ti1250_state, write_o))
MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ti1250_state, write_r)) MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ti1250_state, write_r))
@ -451,9 +437,10 @@ public:
WRITE16_MEMBER(ti1000_state::write_r) 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); 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) 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 // 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 // (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) // R0-R8: select digit
display_matrix_seg(7, 9, m_o, data, 0x7f); set_display_segmask(0x1ff^8, 0x7f);
display_matrix(7, 9, m_o, data);
} }
WRITE16_MEMBER(wizatron_state::write_o) WRITE16_MEMBER(wizatron_state::write_o)
@ -725,19 +713,16 @@ public:
WRITE16_MEMBER(lilprof78_state::write_r) WRITE16_MEMBER(lilprof78_state::write_r)
{ {
// update leds state // 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); UINT16 r = (data & 7) | (data << 1 & 0x1f0);
set_display_segmask(0x1ff, 0x7f);
for (int y = 0; y < 9; y++) display_matrix(7, 9, seg, r, false);
m_display_state[y] = (r >> y & 1) ? o : 0;
// 3rd digit A/G(equals sign) is from O7 // 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) // 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); m_display_state[6] = BITSWAP8(m_display_state[6],7,6,1,4,2,3,5,0);
set_display_size(7, 9);
display_update(); display_update();
} }
@ -836,7 +821,8 @@ public:
void dataman_state::prepare_display() void dataman_state::prepare_display()
{ {
// note the extra segment on R9 // 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) WRITE16_MEMBER(dataman_state::write_r)
@ -959,12 +945,10 @@ public:
WRITE16_MEMBER(ti30_state::write_r) WRITE16_MEMBER(ti30_state::write_r)
{ {
// 1st digit only has segments B,F,G,DP
m_display_segmask[0] = 0xe2;
// R0-R8: select digit // R0-R8: select digit
UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3); set_display_segmask(0x1fe, 0xff);
display_matrix_seg(8, 9, o, data, 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) WRITE16_MEMBER(ti30_state::write_o)
@ -972,7 +956,7 @@ WRITE16_MEMBER(ti30_state::write_o)
// O0-O2,O4-O7: input mux // O0-O2,O4-O7: input mux
// O0-O7: digit segments // O0-O7: digit segments
m_inp_mux = (data & 7) | (data >> 1 & 0x78); 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) 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( 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, 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( 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( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW )

View File

@ -62,7 +62,7 @@ public:
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); void set_display_size(int maxx, int maxy);
void set_display_segmask(UINT32 digits, UINT32 mask); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;

View File

@ -62,8 +62,7 @@ public:
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); void set_display_size(int maxx, int maxy);
void set_display_segmask(UINT32 digits, UINT32 mask); 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);
void display_matrix_seg(int maxx, int maxy, UINT32 setx, UINT32 sety, UINT16 segmask);
protected: protected:
virtual void machine_start() override; virtual void machine_start() override;

View File

@ -55,7 +55,7 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
void display_update(); void display_update();
void set_display_size(int maxx, int maxy); 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: protected:
virtual void machine_start() override; virtual void machine_start() override;

View File

@ -12,7 +12,7 @@
<led7seg><color red="1.0" green="0.25" blue="0.20" /></led7seg> <led7seg><color red="1.0" green="0.25" blue="0.20" /></led7seg>
</element> </element>
<element name="lamp" defstate="0"> <element name="led" defstate="0">
<disk state="1"><color red="1.0" green="0.25" blue="0.20" /></disk> <disk state="1"><color red="1.0" green="0.25" blue="0.20" /></disk>
<disk state="0"><color red="0.2" green="0.0" blue="0.0" /></disk> <disk state="0"><color red="0.2" green="0.0" blue="0.0" /></disk>
</element> </element>
@ -56,7 +56,6 @@
</element> </element>
<!-- build screen --> <!-- build screen -->
<view name="Internal Layout"> <view name="Internal Layout">
@ -87,7 +86,6 @@
<bezel element="text_depth"><bounds x="21" y="37" width="20" height="7" /></bezel> <bezel element="text_depth"><bounds x="21" y="37" width="20" height="7" /></bezel>
<bezel element="text_range"><bounds x="57" y="37" width="20" height="7" /></bezel> <bezel element="text_range"><bounds x="57" y="37" width="20" height="7" /></bezel>
<bezel name="digit5" element="digit"> <bezel name="digit5" element="digit">
<bounds x="5" y="17" width="10" height="15" /> <bounds x="5" y="17" width="10" height="15" />
</bezel> </bezel>
@ -109,35 +107,26 @@
<bounds x="77" y="17" width="10" height="15" /> <bounds x="77" y="17" width="10" height="15" />
</bezel> </bezel>
<!-- compass --> <!-- compass -->
<bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel> <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel>
<bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel> <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel>
<bezel name="lamp60" element="lamp"> <bezel name="6.a" element="led"><bounds x="42" y="62" width="8" height="8" /></bezel>
<bounds x="42" y="62" width="8" height="8" /> <bezel name="7.a" element="led"><bounds x="42" y="126" width="8" height="8" /></bezel>
</bezel> <bezel name="8.a" element="led"><bounds x="74" y="94" width="8" height="8" /></bezel>
<bezel name="lamp61" element="lamp"> <bezel name="9.a" element="led"><bounds x="10" y="94" width="8" height="8" /></bezel>
<bounds x="42" y="126" width="8" height="8" />
</bezel>
<bezel name="lamp62" element="lamp">
<bounds x="74" y="94" width="8" height="8" />
</bezel>
<bezel name="lamp63" element="lamp">
<bounds x="10" y="94" width="8" height="8" />
</bezel>
<bezel element="text_n"><bounds x="41" y="72" width="10" height="10" /></bezel> <bezel element="text_n"><bounds x="41" y="72" width="10" height="10" /></bezel>
<bezel element="text_s"><bounds x="41" y="114" width="10" height="10" /></bezel> <bezel element="text_s"><bounds x="41" y="114" width="10" height="10" /></bezel>
<bezel element="text_e"><bounds x="63" y="93" width="10" height="10" /></bezel> <bezel element="text_e"><bounds x="63" y="93" width="10" height="10" /></bezel>
<bezel element="text_w"><bounds x="21" y="93" width="10" height="10" /></bezel> <bezel element="text_w"><bounds x="21" y="93" width="10" height="10" /></bezel>
<!-- crop borders --> <!-- crop borders -->
<bezel element="static_black"><bounds x="92" y="0" width="10" height="160" /></bezel> <bezel element="static_black"><bounds x="92" y="0" width="10" height="160" /></bezel>
<bezel element="static_black"><bounds x="0" y="146" width="100" height="10" /></bezel> <bezel element="static_black"><bounds x="0" y="146" width="100" height="10" /></bezel>
</view> </view>
</mamelayout> </mamelayout>

View File

@ -27,7 +27,6 @@
</element> </element>
<!-- build screen --> <!-- build screen -->
<view name="Internal Layout"> <view name="Internal Layout">
@ -62,28 +61,28 @@
<!-- math symbols custom digit --> <!-- math symbols custom digit -->
<bezel name="lamp87" element="lamp_dash"><bounds x="21.5" y="17.25" width="7" height="0.5" /></bezel> <bezel name="8.6" element="lamp_dash"><bounds x="21.5" y="17.25" width="7" height="0.5" /></bezel>
<bezel name="lamp82" element="lamp_slash"><bounds x="24" y="9.5" width="5" height="7.5" /></bezel> <bezel name="8.1" element="lamp_slash"><bounds x="24" y="9.5" width="5" height="7.5" /></bezel>
<bezel name="lamp82" element="lamp_slash"><bounds x="21" y="17" width="5" height="7.5" /></bezel> <bezel name="8.1" element="lamp_slash"><bounds x="21" y="17" width="5" height="7.5" /></bezel>
<bezel name="lamp83" element="lamp_backslash"><bounds x="21" y="9.5" width="5" height="7.5" /></bezel> <bezel name="8.2" element="lamp_backslash"><bounds x="21" y="9.5" width="5" height="7.5" /></bezel>
<bezel name="lamp83" element="lamp_backslash"><bounds x="24" y="17" width="5" height="7.5" /></bezel> <bezel name="8.2" element="lamp_backslash"><bounds x="24" y="17" width="5" height="7.5" /></bezel>
<bezel name="lamp81" element="lamp_dot"><bounds x="24.25" y="12.25" width="1.5" height="1.5" /></bezel> <bezel name="8.0" element="lamp_dot"><bounds x="24.25" y="12.25" width="1.5" height="1.5" /></bezel>
<bezel name="lamp81" element="lamp_dot"><bounds x="24.25" y="21.75" width="1.5" height="1.5" /></bezel> <bezel name="8.0" element="lamp_dot"><bounds x="24.25" y="21.75" width="1.5" height="1.5" /></bezel>
<!-- equals sign custom digit --> <!-- equals sign custom digit -->
<bezel name="lamp91" element="lamp_dash"><bounds x="51.5" y="14.5" width="7" height="0.5" /></bezel> <bezel name="9.0" element="lamp_dash"><bounds x="51.5" y="14.5" width="7" height="0.5" /></bezel>
<bezel name="lamp94" element="lamp_dash"><bounds x="51.5" y="20.0" width="7" height="0.5" /></bezel> <bezel name="9.3" element="lamp_dash"><bounds x="51.5" y="20.0" width="7" height="0.5" /></bezel>
<!-- other lamps --> <!-- other lamps -->
<bezel name="lamp101" element="lamp_dot"><bounds x="1" y="1" width="4" height="4" /></bezel> <bezel name="10.0" element="lamp_dot"><bounds x="1" y="1" width="4" height="4" /></bezel>
<bezel name="lamp102" element="lamp_dot"><bounds x="26" y="1" width="4" height="4" /></bezel> <bezel name="10.1" element="lamp_dot"><bounds x="26" y="1" width="4" height="4" /></bezel>
<bezel name="lamp104" element="lamp_dot"><bounds x="51" y="1" width="4" height="4" /></bezel> <bezel name="10.3" element="lamp_dot"><bounds x="51" y="1" width="4" height="4" /></bezel>
<bezel name="lamp107" element="lamp_dot"><bounds x="76" y="1" width="4" height="4" /></bezel> <bezel name="10.6" element="lamp_dot"><bounds x="76" y="1" width="4" height="4" /></bezel>
</view> </view>