From 22b279cf9797a965daed011c1c7c10004011b9dc Mon Sep 17 00:00:00 2001 From: hap Date: Fri, 5 Feb 2016 21:39:19 +0100 Subject: [PATCH] New WORKING machine added --------------- Fidelity Excellence [hap, plgDavid] --- src/mame/drivers/fidel6502.cpp | 113 +++++++++++++++++++-------------- src/mame/drivers/fidelz80.cpp | 14 ++-- src/mame/mess.lst | 1 + 3 files changed, 74 insertions(+), 54 deletions(-) diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 47df4091f7f..5837a739585 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -56,17 +56,17 @@ public: DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r); DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r); - // SC12 + // SC12/6086 DECLARE_MACHINE_START(sc12); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(scc_cartridge); DECLARE_WRITE8_MEMBER(sc12_control_w); DECLARE_READ8_MEMBER(sc12_input_r); - // FEV (6092) - DECLARE_INPUT_CHANGED_MEMBER(fev_bankswitch); - DECLARE_READ8_MEMBER(fev_speech_r); - DECLARE_WRITE8_MEMBER(fev_ttl_w); - DECLARE_READ8_MEMBER(fev_ttl_r); + // 6080/6092 (Excellence) + DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch); + DECLARE_READ8_MEMBER(fexcelv_speech_r); + DECLARE_WRITE8_MEMBER(fexcel_ttl_w); + DECLARE_READ8_MEMBER(fexcel_ttl_r); }; @@ -209,7 +209,7 @@ WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w) /****************************************************************************** - SC12 + SC12/6086 ******************************************************************************/ // cartridge @@ -268,19 +268,19 @@ READ8_MEMBER(fidel6502_state::sc12_input_r) /****************************************************************************** - FEV + 6080/6092 (Excellence) ******************************************************************************/ // misc handlers -INPUT_CHANGED_MEMBER(fidel6502_state::fev_bankswitch) +INPUT_CHANGED_MEMBER(fidel6502_state::fexcelv_bankswitch) { // tied to speech ROM highest bits m_speech->force_update(); m_speech_bank = (m_speech_bank & 1) | newval << 1; } -READ8_MEMBER(fidel6502_state::fev_speech_r) +READ8_MEMBER(fidel6502_state::fexcelv_speech_r) { // TSI A11 is A12, program controls A11, user controls A13,A14(language switches) offset = (offset & 0x7ff) | (offset << 1 & 0x1000); @@ -290,7 +290,7 @@ READ8_MEMBER(fidel6502_state::fev_speech_r) // TTL -WRITE8_MEMBER(fidel6502_state::fev_ttl_w) +WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w) { // a0-a2,d0: 74259(1) UINT8 mask = 1 << offset; @@ -301,33 +301,36 @@ WRITE8_MEMBER(fidel6502_state::fev_ttl_w) UINT16 sel = 1 << (m_led_select & 0xf) & 0x3ff; m_inp_mux = sel & 0x1ff; - // 7442 9: speaker out + // 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); - // a0-a2,d2: 74259(2) to speech board - m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0); + // speech (model 6092) + if (m_speech != nullptr) + { + // a0-a2,d2: 74259(2) to speech board + m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0); - // 74259 Q6: TSI ROM A11 - m_speech->force_update(); // update stream to now - m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1); + // 74259 Q6: TSI ROM A11 + m_speech->force_update(); // update stream to now + m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1); - // Q0-Q5: TSI C0-C5 - // Q7: TSI START line - m_speech->data_w(space, 0, m_speech_data & 0x3f); - m_speech->start_w(m_speech_data >> 7 & 1); + // Q0-Q5: TSI C0-C5 + // Q7: TSI START line + m_speech->data_w(space, 0, m_speech_data & 0x3f); + m_speech->start_w(m_speech_data >> 7 & 1); + } } -READ8_MEMBER(fidel6502_state::fev_ttl_r) +READ8_MEMBER(fidel6502_state::fexcel_ttl_r) { + // a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC + UINT8 d6 = (read_safe(m_inp_matrix[9], 0xff) >> offset & 1) ? 0x40 : 0; + // a0-a2,d7: multiplexed inputs (active low) - UINT8 data = (read_inputs(9) >> offset & 1) ? 0 : 0x80; - - // a0-a2,d6: from speech board: language switches and TSI BUSY line - data |= (m_inp_matrix[9]->read() >> offset & 1) ? 0x40 : 0; - return data; + return d6 | ((read_inputs(9) >> offset & 1) ? 0 : 0x80); } @@ -349,7 +352,7 @@ static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// SC12 +// SC12/6086 static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_UNMAP_HIGH @@ -362,12 +365,11 @@ static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// FEV +// 6080/6092 (Excellence) -static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state ) - ADDRESS_MAP_UNMAP_HIGH +static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM - AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x3ff8) AM_READWRITE(fev_ttl_r, fev_ttl_w) + AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x3ff8) AM_READWRITE(fexcel_ttl_r, fexcel_ttl_w) AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -588,7 +590,7 @@ static INPUT_PORTS_START( sc12 ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) INPUT_PORTS_END -static INPUT_PORTS_START( fev ) +static INPUT_PORTS_START( fexcel ) PORT_INCLUDE( sc12 ) PORT_MODIFY("IN.8") @@ -600,9 +602,13 @@ static INPUT_PORTS_START( fev ) PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Options / Queen") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Verify / King") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game") PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) +INPUT_PORTS_END + +static INPUT_PORTS_START( fexcelv ) + PORT_INCLUDE( fexcel ) PORT_START("IN.9") - PORT_CONFNAME( 0x03, 0x00, "Language" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidel6502_state, fev_bankswitch, 0) + PORT_CONFNAME( 0x03, 0x00, "Language" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidel6502_state, fexcelv_bankswitch, 0) PORT_CONFSETTING( 0x00, "English" ) PORT_CONFSETTING( 0x01, "German" ) PORT_CONFSETTING( 0x02, "French" ) @@ -678,11 +684,11 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state ) MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc") MACHINE_CONFIG_END -static MACHINE_CONFIG_START( fev, fidel6502_state ) +static MACHINE_CONFIG_START( fexcel, fidel6502_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M65SC02, XTAL_12MHz/4) // G65SC102P-3, 12.0M ceramic resonator - MCFG_CPU_PROGRAM_MAP(fev_map) + MCFG_CPU_PROGRAM_MAP(fexcel_map) MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel6502_state, irq_on, attotime::from_hz(780)) // from 556 timer, PCB photo suggests it's same as sc12 MCFG_TIMER_START_DELAY(attotime::from_hz(780) - attotime::from_nsec(15250)) // active for 15.25us MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel6502_state, irq_off, attotime::from_hz(780)) @@ -692,14 +698,18 @@ static MACHINE_CONFIG_START( fev, fidel6502_state ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz - MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, fev_speech_r)) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( fexcelv, fexcel ) + + /* sound hardware */ + MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz + MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, fexcelv_speech_r)) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) +MACHINE_CONFIG_END + /****************************************************************************** @@ -763,6 +773,12 @@ ROM_START( fscc12 ) ROM_LOAD("tmm2764d-2", 0xe000, 0x2000, CRC(183d3edc) SHA1(3296a4c3bce5209587d4a1694fce153558544e63) ) // Toshiba TMM2764D-2 ROM_END + +ROM_START( fexcel ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) +ROM_END + ROM_START( fexcelv ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) @@ -771,16 +787,19 @@ ROM_START( fexcelv ) ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) ROM_END + + /****************************************************************************** Drivers ******************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ -COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ +COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +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, fexcelv, 0, 0, fev, fev, driver_device, 0, "Fidelity Electronics", "Voice Excellence", 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, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 4f236fd2947..8ddb32ab675 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -617,7 +617,7 @@ expect that the software reads these once on startup only. ****************************************************************************** -Sensory Chess Challenger (SC12-B) +Sensory Chess Challenger (SC12-B, 6086) 4 versions are known to exist: A,B,C, and X, with increasing CPU speed. --------------------------------- RE information from netlist by Berger @@ -657,8 +657,8 @@ If control Q4 is set, printer data can be read from I0. ****************************************************************************** -Voice Excellence (FEV, model 6092) ----------------------------------- +Voice Excellence (model 6092) +---------------- PCB 1: 510.1117A02, appears to be identical to other "Excellence" boards CPU: GTE G65SC102P-3, 32 KB PRG ROM: AMI 101-1080A01(IC5), 8192x8 SRAM SRM2264C10(IC6) 2 rows of LEDs on the side: 1*8 green, 1*8 red @@ -733,7 +733,7 @@ public: DECLARE_INPUT_CHANGED_MEMBER(reset_button); - // VCC/UVC/CC10 + // CC10 and VCC/UVC void vcc_prepare_display(); DECLARE_READ8_MEMBER(vcc_speech_r); DECLARE_WRITE8_MEMBER(vcc_ppi_porta_w); @@ -759,7 +759,7 @@ public: DECLARE_READ8_MEMBER(vsc_pio_portb_r); DECLARE_WRITE8_MEMBER(vsc_pio_portb_w); - // VBRC (7014) + // VBRC/7014 void vbrc_prepare_display(); DECLARE_WRITE8_MEMBER(vbrc_speech_w); DECLARE_WRITE8_MEMBER(vbrc_mcu_p1_w); @@ -1150,7 +1150,7 @@ WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w) /****************************************************************************** - VBRC + VBRC/7014 ******************************************************************************/ // misc handlers @@ -1278,7 +1278,7 @@ static ADDRESS_MAP_START( vsc_io, AS_IO, 8, fidelz80_state ) ADDRESS_MAP_END -// VBRC +// VBRC/7014 WRITE8_MEMBER(fidelz80_state::vbrc_speech_w) { diff --git a/src/mame/mess.lst b/src/mame/mess.lst index c1c186a40c7..9f41ab0709e 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -2163,6 +2163,7 @@ cscsp // * Spanish cscg // * German cscfr // * French fscc12 +fexcel fexcelv // Hegener & Glaser Munich