diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 5837a739585..5ae6d624149 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -41,7 +41,6 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); } // CSC - void csc_update_7442(); void csc_prepare_display(); DECLARE_READ8_MEMBER(csc_speech_r); DECLARE_WRITE8_MEMBER(csc_pia0_pa_w); @@ -62,7 +61,7 @@ public: DECLARE_WRITE8_MEMBER(sc12_control_w); DECLARE_READ8_MEMBER(sc12_input_r); - // 6080/6092 (Excellence) + // 6080/6092/6093 (Excellence) DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch); DECLARE_READ8_MEMBER(fexcelv_speech_r); DECLARE_WRITE8_MEMBER(fexcel_ttl_w); @@ -79,18 +78,13 @@ public: // misc handlers -void fidel6502_state::csc_update_7442() +void fidel6502_state::csc_prepare_display() { // 7442 0-8: led select, input mux m_inp_mux = 1 << m_led_select & 0x3ff; // 7442 9: speaker out m_speaker->level_w(m_inp_mux >> 9 & 1); -} - -void fidel6502_state::csc_prepare_display() -{ - csc_update_7442(); // 4 7seg leds + H for (int i = 0; i < 4; i++) @@ -100,7 +94,7 @@ void fidel6502_state::csc_prepare_display() for (int i = 0; i < 8; i++) m_display_state[i+4] = (m_inp_mux >> i & 1) ? m_led_data : 0; - set_display_size(8, 12); + set_display_size(8, 4+8); set_display_segmask(0xf, 0x7f); display_update(); } @@ -268,7 +262,7 @@ READ8_MEMBER(fidel6502_state::sc12_input_r) /****************************************************************************** - 6080/6092 (Excellence) + 6080/6092/6093 (Excellence) ******************************************************************************/ // misc handlers @@ -299,15 +293,28 @@ WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w) // 74259 Q0-Q3: 7442 a0-a3 // 7442 0-8: led data, input mux UINT16 sel = 1 << (m_led_select & 0xf) & 0x3ff; + UINT8 led_data = sel & 0xff; m_inp_mux = sel & 0x1ff; // 7442 9: speaker out (optional?) m_speaker->level_w(sel >> 9 & 1); - // 74259 Q4,Q5: led select (active low) - display_matrix(9, 2, sel & 0x1ff, ~m_led_select >> 4 & 3); + // 74259 Q4-Q7,Q2,Q1: digit/led select (active low) + UINT8 led_sel = ~BITSWAP8(m_led_select,0,3,1,2,7,6,5,4) & 0x3f; + + // a0-a2,d1: digit segment data (optional/model 6093) + m_7seg_data = (m_7seg_data & ~mask) | ((data & 2) ? mask : 0); + UINT8 seg_data = BITSWAP8(m_7seg_data,0,1,3,2,7,5,6,4); - // speech (model 6092) + // update display: 4 7seg leds, 2*8 chessboard leds + for (int i = 0; i < 6; i++) + m_display_state[i] = (led_sel >> i & 1) ? ((i < 2) ? led_data : seg_data) : 0; + + set_display_size(8, 2+4); + set_display_segmask(0x3c, 0x7f); + display_update(); + + // speech (optional/model 6092) if (m_speech != nullptr) { // a0-a2,d2: 74259(2) to speech board @@ -365,7 +372,7 @@ static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// 6080/6092 (Excellence) +// 6080/6092/6093 (Excellence) static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM @@ -801,5 +808,5 @@ COMP( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fideli COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) COMP( 1987, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/fidel_fev.lay b/src/mame/layout/fidel_fev.lay index 51cc059ee7e..1ecc3e9bcc7 100644 --- a/src/mame/layout/fidel_fev.lay +++ b/src/mame/layout/fidel_fev.lay @@ -5,6 +5,10 @@ + + + + @@ -192,22 +196,40 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -385,52 +407,76 @@ + + + + + + + + + + + + + + + + + + + + + + - - - - - - + - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + +