fidel6502: added CSC foreign language sets

This commit is contained in:
hap 2016-01-29 15:11:30 +01:00
parent f1bd6127a4
commit b8307512e3
3 changed files with 98 additions and 52 deletions

View File

@ -149,12 +149,9 @@ READ8_MEMBER(fidel6502_state::csc_pia0_pb_r)
data |= 0x08;
// d5: button row 8 (active low)
if (!(read_inputs(9) & 0x100))
data |= 0x20;
// d6,d7: language switches
data|=0xc0;
data |= (~read_inputs(9) >> 3 & 0x20) | (m_inp_matrix[9]->read() << 6 & 0xc0);
return data;
}
@ -327,7 +324,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE)
PORT_START("IN.1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -338,7 +335,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V)
PORT_START("IN.2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -349,7 +346,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T)
PORT_START("IN.3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -360,7 +357,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -371,7 +368,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M)
PORT_START("IN.5")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -382,7 +379,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S)
PORT_START("IN.6")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -393,7 +390,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.7")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -404,7 +401,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.8")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1)
@ -415,7 +412,14 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("IN.9") // hardwired
PORT_CONFNAME( 0x03, 0x03, "Language" )
PORT_CONFSETTING( 0x03, "English" )
PORT_CONFSETTING( 0x02, "2" ) // todo..
PORT_CONFSETTING( 0x01, "1" )
PORT_CONFSETTING( 0x00, "0" )
INPUT_PORTS_END
static INPUT_PORTS_START( sc12 )
@ -574,15 +578,17 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state )
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "fidel_scc")
MCFG_GENERIC_EXTENSIONS("bin,dat")
MCFG_GENERIC_LOAD(fidel6502_state, scc_cartridge)
MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( fev, fidel6502_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", M65SC02, XTAL_12MHz/4) // G65SC102
MCFG_CPU_ADD("maincpu", M65SC02, XTAL_12MHz/4) // G65SC102P-3, 12.0M ceramic resonator
MCFG_CPU_PROGRAM_MAP(fev_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))
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_fidel_fev)
@ -613,6 +619,43 @@ ROM_START( csc )
ROM_RELOAD( 0x1000, 0x1000)
ROM_END
ROM_START( cscsp )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
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( cscg )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
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( cscfr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) )
ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) )
ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) )
ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) )
ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) )
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
ROM_START( fscc12 )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD("101-1068a01", 0x8000, 0x2000, CRC(63c76cdd) SHA1(e0771c98d4483a6b1620791cb99a7e46b0db95c4) ) // SSS SCM23C65E4
@ -632,9 +675,12 @@ 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", MACHINE_NOT_WORKING | 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_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
COMP( 1981, cscsp, csc, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
COMP( 1981, cscg, csc, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
COMP( 1981, cscfr, csc, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

View File

@ -1082,29 +1082,25 @@ READ8_MEMBER(fidelz80_state::vsc_pio_porta_r)
{
// d0-d7: multiplexed inputs
return read_inputs(11);
}
READ8_MEMBER(fidelz80_state::vsc_pio_portb_r)
{
UINT8 ret = 0;
UINT8 data = 0;
// d4: TSI BUSY line
ret |= (m_speech->busy_r()) ? 0 : 0x10;
data |= (m_speech->busy_r()) ? 0 : 0x10;
return ret;
return data;
}
WRITE8_MEMBER(fidelz80_state::vsc_pio_portb_w)
{
// d0,d1: input mux highest bits
// 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());
m_inp_mux = (m_inp_mux & 0xff) | (data << 8 & 0x300) | (data << 5 & 0x400);
// d7: TSI ROM A12
m_speech->force_update(); // update stream to now
m_speech_bank = data >> 7 & 1;
@ -1209,13 +1205,13 @@ ADDRESS_MAP_END
// VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously
READ8_MEMBER(fidelz80_state::vsc_io_trampoline_r)
{
UINT8 ret = 0xff; // open bus
UINT8 data = 0xff; // open bus
if (~offset & 4)
ret &= m_ppi8255->read(space, offset & 3);
data &= m_ppi8255->read(space, offset & 3);
if (~offset & 8)
ret &= m_z80pio->read(space, offset & 3);
data &= m_z80pio->read(space, offset & 3);
return ret;
return data;
}
WRITE8_MEMBER(fidelz80_state::vsc_io_trampoline_w)
@ -1309,8 +1305,8 @@ static INPUT_PORTS_START( cc10 )
PORT_START("LEVEL") // hardwired (VCC/GND?)
PORT_CONFNAME( 0x80, 0x00, "Maximum Levels" )
PORT_CONFSETTING( 0x00, "10" ) // factory setting
PORT_CONFSETTING( 0x80, "3" )
PORT_CONFSETTING( 0x00, "10" ) // factory setting
PORT_CONFSETTING( 0x80, "3" )
INPUT_PORTS_END
static INPUT_PORTS_START( vcc )
@ -1461,10 +1457,10 @@ static INPUT_PORTS_START( vsc )
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" )
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 )

View File

@ -2142,21 +2142,25 @@ diablo68 // 1991 Novag Diablo 68000 Chess Computer
// Fidelity
cc10
vcc
vccg
vccfr
vccsp
uvc
uvcg
uvcfr
uvcsp
bridgec3
vcc // VCC: Voice Chess Challenger (English)
vccg // * Spanish
vccfr // * German
vccsp // * French
uvc // UVC: Advanced Voice Chess Challenger (English)
uvcsp // * Spanish
uvcg // * German
uvcfr // * French
vsc // VSC: Voice Sensory Chess Challenger (English)
vscsp // * Spanish
vscg // * German
vscfr // * French
vbrc
vsc
vscg
vscfr
vscsp
csc
bridgec3
csc // CSC: Champion Sensory Chess Challenger (English)
cscsp // * Spanish
cscg // * German
cscfr // * French
fscc12
fexcelv