diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index dcabbe72c52..074e7e69b6c 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -1,6 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap -// thanks-to:Berger +// thanks-to:Berger,yovan /****************************************************************************** Fidelity Electronics 6502 based board driver @@ -325,6 +325,21 @@ Z80 D6 to W: (model 6092, tied to VCC otherwise) - D2-D6: VCC - D7: TSI BUSY + +****************************************************************************** + +Chesster (model 6120) +There is also a German version titled Kishon Chesster +---------------- + +8*(8+1) buttons, 8+8+1 LEDs +8KB RAM(UM6264-12), 32KB ROM(M27C256B) +Ricoh RP65C02G CPU, 5MHz XTAL +8-bit DAC speech timed via IRQ, 128KB ROM(AMI custom label) +PCB label 510-1141C01 + +I/O is via TTL, see source code for more info + ******************************************************************************/ #include "emu.h" @@ -334,10 +349,12 @@ Z80 D6 to W: (model 6092, tied to VCC otherwise) #include "machine/6821pia.h" #include "machine/i8255.h" #include "machine/nvram.h" +#include "sound/dac.h" #include "includes/fidelz80.h" // internal artwork +#include "fidel_chesster.lh" // clickable #include "fidel_csc.lh" // clickable #include "fidel_eas.lh" // clickable #include "fidel_fev.lh" // clickable @@ -397,11 +414,15 @@ public: DECLARE_READ8_MEMBER(sc12_input_r); DECLARE_READ8_MEMBER(sc12_cart_r); - // 6080/6092/6093 (Excellence) + // 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); + + // Chesster + DECLARE_WRITE8_MEMBER(chesster_control_w); + DECLARE_DRIVER_INIT(chesster); }; @@ -687,7 +708,7 @@ READ8_MEMBER(fidel6502_state::sc12_cart_r) /****************************************************************************** - 6080/6092/6093 (Excellence) + Excellence ******************************************************************************/ // misc handlers @@ -767,6 +788,39 @@ READ8_MEMBER(fidel6502_state::fexcel_ttl_r) +/****************************************************************************** + Chesster +******************************************************************************/ + +// TTL/generic + +WRITE8_MEMBER(fidel6502_state::chesster_control_w) +{ + // a0-a2,d7: 74259(1) + UINT8 mask = 1 << offset; + m_led_select = (m_led_select & ~mask) | ((data & 0x80) ? mask : 0); + + // 74259 Q4-Q7: 7442 a0-a3 + // 7442 0-8: led data, input mux + UINT16 sel = 1 << (m_led_select >> 4 & 0xf) & 0x3ff; + m_inp_mux = sel & 0x1ff; + + // 74259 Q0,Q1: led select (active low) + display_matrix(9, 2, m_inp_mux, ~m_led_select & 3); + + // 74259 Q2,Q3: speechrom A14,A15 + // a0-a2,d0: 74259(2) where Q3 is speechrom A16, other outputs unconnected + m_speech_bank = (m_speech_bank & ~mask) | ((data & 1) ? mask : 0); + membank("bank1")->set_entry((m_led_select >> 2 & 3) | (m_speech_bank >> 1 & 4)); +} + +DRIVER_INIT_MEMBER(fidel6502_state, chesster) +{ + membank("bank1")->configure_entries(0, 8, memregion("speech")->base(), 0x4000); +} + + + /****************************************************************************** Address Maps ******************************************************************************/ @@ -854,7 +908,7 @@ static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// 6080/6092/6093 (Excellence) +// Excellence static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM @@ -863,6 +917,17 @@ static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END +// Chesster + +static ADDRESS_MAP_START( chesster_map, AS_PROGRAM, 8, fidel6502_state ) + AM_RANGE(0x0000, 0x1fff) AM_RAM + AM_RANGE(0x2000, 0x2007) AM_MIRROR(0x1ff8) AM_READWRITE(sc12_input_r, chesster_control_w) + AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") + AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_DEVWRITE("dac", dac_device, write_signed8) + AM_RANGE(0x8000, 0xffff) AM_ROM +ADDRESS_MAP_END + + /****************************************************************************** Input Ports @@ -1243,6 +1308,99 @@ static INPUT_PORTS_START( eas ) INPUT_PORTS_END +static INPUT_PORTS_START( chesster ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g8") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f8") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e8") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d8") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c8") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b8") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a8") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h7") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g7") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f7") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e7") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d7") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c7") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b7") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a7") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h6") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g6") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f6") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e6") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d6") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c6") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b6") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a6") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h5") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g5") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f5") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e5") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d5") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c5") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b5") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a5") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h4") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g4") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f4") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e4") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d4") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c4") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b4") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a4") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h3") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g3") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f3") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e3") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d3") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c3") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b3") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a3") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h2") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g2") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f2") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e2") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d2") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c2") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a2") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h1") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g1") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f1") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e1") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d1") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c1") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b1") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a1") + + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("No / Move") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Yes / Hint") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Repeat / Take Back") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("New / Level") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("Replay / Option") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Verify / Problem") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("Shift") +INPUT_PORTS_END + + /****************************************************************************** Machine Drivers @@ -1434,6 +1592,22 @@ static MACHINE_CONFIG_DERIVED( fexcelv, fexcel ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( chesster, fidel6502_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", R65C02, XTAL_5MHz) // RP65C02G + MCFG_CPU_PROGRAM_MAP(chesster_map) + MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, irq0_line_hold, 9500) // R/C circuit, approximation + + MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) + MCFG_DEFAULT_LAYOUT(layout_fidel_chesster) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_DAC_ADD("dac") + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) +MACHINE_CONFIG_END + /****************************************************************************** @@ -1609,6 +1783,15 @@ ROM_START( fexcelv ) ROM_END +ROM_START( chesster ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("chesster.ic9", 0x8000, 0x8000, CRC(29f9a698) SHA1(4c83ca46fd5fc9c40302e9c7f16b4ae2c18b06e6) ) // M27C256B, sticker but no label + + ROM_REGION( 0x20000, "speech", 0 ) + ROM_LOAD("101-1091a02.ic10", 0x0000, 0x20000, CRC(2b4d243c) SHA1(921e51978facb502b207b4f64a73b1e74127e826) ) // AMI, 27C010 or equivalent +ROM_END + + /****************************************************************************** Drivers @@ -1636,3 +1819,5 @@ CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, CONS( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) CONS( 1987, fexcelv, fexcel, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +CONS( 1990, chesster, 0, 0, chesster, chesster, fidel6502_state, chesster, "Fidelity Electronics", "Chesster Challenger", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/tispeak.cpp b/src/mame/drivers/tispeak.cpp index 9de5eb427b6..92591ad9a72 100644 --- a/src/mame/drivers/tispeak.cpp +++ b/src/mame/drivers/tispeak.cpp @@ -157,9 +157,9 @@ Speak & Math: - VSM(2/2): 16KB CD2393 - VFD: Futaba 9SY -02Z 7E - notes: As with the Speak & Spell, the voice actor was a radio announcer. - However, the phrase "is greater than or less than" had to be added in a - hurry by one of the TI employees in a hurry, the day before a demo. - Apparently QA never found out and it ended up in the final product. + However, the phrase "is greater than or less than" had to be added by one + of the TI employees in a hurry, the day before a demo. Apparently QA + never found out and it ended up in the final product. Speak & Math (US), 1986 - MCU: CD2708, label CD2708N2L (die label TMC0270F 2708A) diff --git a/src/mame/layout/fidel_chesster.lay b/src/mame/layout/fidel_chesster.lay new file mode 100644 index 00000000000..28a5fab7f74 --- /dev/null +++ b/src/mame/layout/fidel_chesster.lay @@ -0,0 +1,436 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ea9aab2ee54..6128142d645 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -12194,6 +12194,7 @@ fgoal // TF (c) 1979 Taito Corporation fgoala // MF (c) 1979 Taito Corporation @source:fidel6502.cpp +chesster // csc // CSC: Champion Sensory Chess Challenger (English) cscfr // * French cscg // * German