From b0cc7ab9e0985bf80cffad27fcd67f383573b688 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 28 Jan 2016 22:05:17 +0100 Subject: [PATCH] fidelz80: added VSC foreign language sets --- src/mame/drivers/fidelz80.cpp | 91 +++++++++++++++++++++++++++-------- src/mame/includes/fidelz80.h | 2 +- src/mame/mess.lst | 3 ++ 3 files changed, 75 insertions(+), 21 deletions(-) diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 5f85a1e49a4..71f36d55537 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -598,7 +598,7 @@ PB.3 - violet wire PB.4 - white wire (and TSI BUSY line) PB.5 - selection jumper input (see below) PB.6 - TSI start line -PB.7 - TSI ROM D0 line +PB.7 - TSI ROM A12 line selection jumpers: @@ -1070,7 +1070,7 @@ WRITE8_MEMBER(fidelz80_state::vsc_ppi_portc_w) { // d0-d3: select digits // d0-d7: select leds, input mux low bits - m_inp_mux = (m_inp_mux & 0x300) | data; + m_inp_mux = (m_inp_mux & ~0xff) | data; m_led_select = data; vsc_prepare_display(); } @@ -1081,7 +1081,8 @@ WRITE8_MEMBER(fidelz80_state::vsc_ppi_portc_w) READ8_MEMBER(fidelz80_state::vsc_pio_porta_r) { // d0-d7: multiplexed inputs - return read_inputs(10); + return read_inputs(11); + } READ8_MEMBER(fidelz80_state::vsc_pio_portb_r) @@ -1090,18 +1091,26 @@ READ8_MEMBER(fidelz80_state::vsc_pio_portb_r) // d4: TSI BUSY line ret |= (m_speech->busy_r()) ? 0 : 0x10; - + return ret; } WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w) { // d0,d1: input mux highest bits - m_inp_mux = (m_inp_mux & 0xff) | (data << 8 & 0x300); - + // d5: enable language switch + m_inp_mux = (m_inp_mux & ~0x700) | (data << 8 & 0x300) | (data << 5 & 0x400); + + //if (m_inp_mux & 0x400) debugger_break(machine()); + + // d7: TSI ROM A12 + + m_speech->force_update(); // update stream to now + m_speech_bank = data >> 7 & 1; + // d6: TSI START line m_speech->start_w(data >> 6 & 1); - + // d2: lower TSI volume m_speech->set_output_gain(0, (data & 4) ? 0.5 : 1.0); } @@ -1298,26 +1307,26 @@ static INPUT_PORTS_START( cc10 ) PORT_START("IN.4") PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_START("LEVEL") // factory setting - PORT_CONFNAME( 0x80, 0x00, "PPI.B.7: Maximum Levels" ) - PORT_CONFSETTING( 0x00, "10" ) + PORT_START("LEVEL") // hardwired (VCC/GND?) + PORT_CONFNAME( 0x80, 0x00, "Maximum Levels" ) + PORT_CONFSETTING( 0x00, "10" ) // factory setting PORT_CONFSETTING( 0x80, "3" ) INPUT_PORTS_END static INPUT_PORTS_START( vcc ) PORT_INCLUDE( vcc_base ) - PORT_START("IN.4") // not consumer accessible - PORT_CONFNAME( 0x01, 0x00, "PCB Jumper: French" ) + PORT_START("IN.4") // PCB jumpers, not consumer accessible + PORT_CONFNAME( 0x01, 0x00, "Language: French" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) - PORT_CONFNAME( 0x02, 0x00, "PCB Jumper: Spanish" ) + PORT_CONFNAME( 0x02, 0x00, "Language: Spanish" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x02, DEF_STR( On ) ) - PORT_CONFNAME( 0x04, 0x00, "PCB Jumper: German" ) + PORT_CONFNAME( 0x04, 0x00, "Language: German" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x04, DEF_STR( On ) ) - PORT_CONFNAME( 0x08, 0x00, "PCB Jumper: Special" ) + PORT_CONFNAME( 0x08, 0x00, "Language: Special" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x08, DEF_STR( On ) ) INPUT_PORTS_END @@ -1326,7 +1335,7 @@ static INPUT_PORTS_START( vccfr ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x01, 0x01, "PCB Jumper: French" ) + PORT_CONFNAME( 0x01, 0x01, "Language: French" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) INPUT_PORTS_END @@ -1335,7 +1344,7 @@ static INPUT_PORTS_START( vccsp ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x02, 0x02, "PCB Jumper: Spanish" ) + PORT_CONFNAME( 0x02, 0x02, "Language: Spanish" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x02, DEF_STR( On ) ) INPUT_PORTS_END @@ -1344,7 +1353,7 @@ static INPUT_PORTS_START( vccg ) PORT_INCLUDE( vcc ) PORT_MODIFY("IN.4") - PORT_CONFNAME( 0x04, 0x04, "PCB Jumper: German" ) + PORT_CONFNAME( 0x04, 0x04, "Language: German" ) PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x04, DEF_STR( On ) ) INPUT_PORTS_END @@ -1449,6 +1458,13 @@ static INPUT_PORTS_START( vsc ) PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M) PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S) PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("IN.10") // hardwired (2 diodes) + PORT_CONFNAME( 0x03, 0x00, "Language" ) + PORT_CONFSETTING( 0x00, "English" ) + PORT_CONFSETTING( 0x01, "1" ) // todo: game dasm says it checks against 0/not0, 2, 3.. which language is which? + PORT_CONFSETTING( 0x02, "2" ) + PORT_CONFSETTING( 0x03, "3" ) INPUT_PORTS_END static INPUT_PORTS_START( vbrc ) @@ -1582,6 +1598,7 @@ static MACHINE_CONFIG_START( vsc, fidelz80_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(fidelz80_state, vcc_speech_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END @@ -1705,8 +1722,39 @@ ROM_START( vsc ) ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) ROM_LOAD("101-32024.bin", 0x4000, 0x1000, CRC(2a078676) SHA1(db2f0aba7e8ac0f84a17bae7155210cdf0813afb) ) - ROM_REGION( 0x1000, "speech", 0 ) + ROM_REGION( 0x2000, "speech", 0 ) ROM_LOAD("101-32107.bin", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d) ) + ROM_RELOAD( 0x1000, 0x1000) +ROM_END + +ROM_START( vscsp ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("101-64108.bin", 0x0000, 0x2000, CRC(c9c98490) SHA1(e6db883df088d60463e75db51433a4b01a3e7626) ) + ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) + ROM_LOAD("101-32024.bin", 0x4000, 0x1000, CRC(2a078676) SHA1(db2f0aba7e8ac0f84a17bae7155210cdf0813afb) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-spanish.bin", 0x0000, 0x2000, BAD_DUMP CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9) ) // taken from vcc/fexcelv, assume correct +ROM_END + +ROM_START( vscg ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("101-64108.bin", 0x0000, 0x2000, CRC(c9c98490) SHA1(e6db883df088d60463e75db51433a4b01a3e7626) ) + ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) + ROM_LOAD("101-32024.bin", 0x4000, 0x1000, CRC(2a078676) SHA1(db2f0aba7e8ac0f84a17bae7155210cdf0813afb) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-german.bin", 0x0000, 0x2000, BAD_DUMP CRC(6c85e310) SHA1(20d1d6543c1e6a1f04184a2df2a468f33faec3ff) ) // taken from fexcelv, assume correct +ROM_END + +ROM_START( vscfr ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("101-64108.bin", 0x0000, 0x2000, CRC(c9c98490) SHA1(e6db883df088d60463e75db51433a4b01a3e7626) ) + ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) + ROM_LOAD("101-32024.bin", 0x4000, 0x1000, CRC(2a078676) SHA1(db2f0aba7e8ac0f84a17bae7155210cdf0813afb) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROM_LOAD("vcc-french.bin", 0x0000, 0x2000, BAD_DUMP CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3) ) // taken from fexcelv, assume correct ROM_END @@ -1757,7 +1805,10 @@ COMP( 1980, uvcsp, vcc, 0, vcc, vccsp, driver_device, 0, "Fideli COMP( 1980, uvcg, vcc, 0, vcc, vccg, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) COMP( 1980, uvcfr, vcc, 0, vcc, vccfr, driver_device, 0, "Fidelity Electronics", "Advanced Voice Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -COMP( 1980, vsc, 0, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1980, vsc, 0, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (English)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1980, vscsp, vsc, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1980, vscg, vsc, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1980, vscfr, vsc, 0, vsc, vsc, driver_device, 0, "Fidelity Electronics", "Voice Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) COMP( 1979, vbrc, 0, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) COMP( 1980, bridgec3, vbrc, 0, vbrc, vbrc, driver_device, 0, "Fidelity Electronics", "Voice Bridge Challenger III", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) diff --git a/src/mame/includes/fidelz80.h b/src/mame/includes/fidelz80.h index c9aea6bafc4..a27f4e7aabc 100644 --- a/src/mame/includes/fidelz80.h +++ b/src/mame/includes/fidelz80.h @@ -25,7 +25,7 @@ public: // devices/pointers required_device m_maincpu; - optional_ioport_array<10> m_inp_matrix; // max 10 + optional_ioport_array<11> m_inp_matrix; // max 11 optional_device m_speech; optional_region_ptr m_speech_rom; diff --git a/src/mame/mess.lst b/src/mame/mess.lst index 8bcee333384..b98dc063fd4 100644 --- a/src/mame/mess.lst +++ b/src/mame/mess.lst @@ -2153,6 +2153,9 @@ uvcsp bridgec3 vbrc vsc +vscg +vscfr +vscsp csc fscc12 fexcelv