From f943b25a02c1753d2b8e29eada3e0e6c452f3dcc Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 14 Aug 2024 20:08:45 +0200 Subject: sc6.cpp: rename gambit to classic, update miniscc internal artwork and correct cpu type now that EA pin works New working systems ------------------- Gambit Voice [hap, Sean Riddle] --- src/mame/fidelity/csc.cpp | 10 +- src/mame/fidelity/elite.cpp | 10 +- src/mame/fidelity/excel.cpp | 16 +- src/mame/fidelity/sc6.cpp | 306 ++++++++++++++++---------- src/mame/fidelity/vcc.cpp | 32 +-- src/mame/fidelity/vsc.cpp | 33 ++- src/mame/layout/fidel_classic.lay | 449 ++++++++++++++++++++++++++++++++++++++ src/mame/layout/fidel_gambit.lay | 435 ------------------------------------ src/mame/layout/fidel_gambitv.lay | 435 ++++++++++++++++++++++++++++++++++++ src/mame/layout/fidel_msc_v1.lay | 4 +- src/mame/layout/fidel_msc_v2.lay | 105 ++++----- src/mame/mame.lst | 5 +- src/mame/novag/emerclp.cpp | 3 - 13 files changed, 1171 insertions(+), 672 deletions(-) create mode 100644 src/mame/layout/fidel_classic.lay delete mode 100644 src/mame/layout/fidel_gambit.lay create mode 100644 src/mame/layout/fidel_gambitv.lay diff --git a/src/mame/fidelity/csc.cpp b/src/mame/fidelity/csc.cpp index 5fa23de6250..725fdb7c68e 100644 --- a/src/mame/fidelity/csc.cpp +++ b/src/mame/fidelity/csc.cpp @@ -442,7 +442,7 @@ void csc_state::pia0_ca2_w(int state) void csc_state::pia1_pa_w(u8 data) { - // d0-d5: TSI C0-C5 + // d0-d5: S14001A C0-C5 m_speech->data_w(data & 0x3f); // d0-d7: data for the 4 7seg leds, bits are ABFGHCDE (H is extra led) @@ -455,10 +455,10 @@ void csc_state::pia1_pb_w(u8 data) // d0: speech ROM A12 m_speech->set_rom_bank(data & 1); - // d1: TSI START line + // d1: S14001A start pin m_speech->start_w(BIT(data, 1)); - // d4: lower TSI volume + // d4: lower S14001A volume m_speech->set_output_gain(0, (data & 0x10) ? 0.25 : 1.0); } @@ -467,14 +467,14 @@ u8 csc_state::pia1_pb_r() // d2: printer? u8 data = 0x04; - // d3: TSI BUSY line + // d3: S14001A busy pin if (m_speech->busy_r()) data |= 0x08; // d5: button row 8 data |= (read_inputs() >> 3 & 0x20); - // d6,d7: language switches(hardwired with 2 resistors/jumpers) + // d6,d7: language jumpers (hardwired) return data | (*m_language << 6 & 0xc0); } diff --git a/src/mame/fidelity/elite.cpp b/src/mame/fidelity/elite.cpp index 2255987b20a..26689a19ab9 100644 --- a/src/mame/fidelity/elite.cpp +++ b/src/mame/fidelity/elite.cpp @@ -252,8 +252,8 @@ u8 elite_state::input_r() void elite_state::ppi_porta_w(u8 data) { - // d0-d5: TSI C0-C5 - // d6: TSI START line + // d0-d5: S14001A C0-C5 + // d6: S14001A start pin m_speech->data_w(data & 0x3f); m_speech->start_w(BIT(data, 6)); @@ -273,7 +273,7 @@ void elite_state::ppi_portc_w(u8 data) // d4: speech ROM A12 m_speech->set_rom_bank(BIT(data, 4)); - // d5: lower TSI volume + // d5: lower S14001A volume m_speech->set_output_gain(0, (data & 0x20) ? 0.25 : 1.0); // d6,d7: bookrom bankswitch (model EAG) @@ -286,10 +286,10 @@ u8 elite_state::ppi_portb_r() // d0: printer? white wire from LED pcb u8 data = 1; - // d1: TSI BUSY line + // d1: S14001A busy pin data |= (m_speech->busy_r()) ? 2 : 0; - // d2,d3: language switches(hardwired) + // d2,d3: language jumpers (hardwired) data |= *m_language << 2 & 0x0c; // d5: 3 more buttons diff --git a/src/mame/fidelity/excel.cpp b/src/mame/fidelity/excel.cpp index d1b9e47b166..45be53872eb 100644 --- a/src/mame/fidelity/excel.cpp +++ b/src/mame/fidelity/excel.cpp @@ -24,7 +24,7 @@ CPU: GTE G65SC102P-3, 32 KB PRG ROM: AMI 101-1080A01(IC5), 8192x8 SRAM SRM2264C1 PCB 2: 510.1117A01 Speech: TSI S14001A, 32 KB ROM: AMI 101-1081A01(IC2) -Dip Switches set ROM A13 and ROM A14, on the side of the board +DIP Switches set ROM A13 and ROM A14, on the side of the board ROM A12 is tied to S14001A's A11 (yuck) ROM A11 is however tied to the CPU's XYZ @@ -126,7 +126,7 @@ basically same as (Par) Excellence hardware, reskinned board Designer 2100 (model 6103): exactly same, but running at 5MHz -(Designer 1500 is on 80C50 hardware, same ROM as The Gambit, see sc6.cpp) +(Designer 1500 is on 80C50 hardware, same ROM as The Classic, see sc6.cpp) *******************************************************************************/ @@ -222,7 +222,7 @@ void excel_state::machine_start() I/O *******************************************************************************/ -// speech +// speech (fexcelv) void excel_state::init_fexcelv() { @@ -230,7 +230,7 @@ void excel_state::init_fexcelv() const u32 len = memregion("speech")->bytes(); assert(len == 0x8000); - // TSI A11 is A12, program controls A11, user controls A13,A14(language switches) + // program controls A11, user controls A13,A14(language switches) std::vector buf(len); memcpy(&buf[0], rom, len); for (int i = 0; i < len; i++) @@ -249,12 +249,12 @@ void excel_state::speech_w(u8 data, u8 mask) // a0-a2,d2 (from ttl_w): 74259(2) to speech board m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0); - // 74259 Q6: TSI ROM A11 + // 74259 Q6: speech ROM A11 m_speech_bank = (m_speech_bank & ~1) | BIT(m_speech_data, 6); m_speech->set_rom_bank(m_speech_bank); - // Q0-Q5: TSI C0-C5 - // Q7: TSI START line + // Q0-Q5: S14001A C0-C5 + // Q7: S14001A start pin m_speech->data_w(m_speech_data & 0x3f); m_speech->start_w(BIT(m_speech_data, 7)); } @@ -302,7 +302,7 @@ u8 excel_state::ttl_r(offs_t offset) if (m_inputs[2] != nullptr && sel == 0 && ~m_select & 0x80) d7 = m_inputs[2]->read() & 0x80; - // a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC + // a0-a2,d6: from speech board: language switches and S14001A busy pin, otherwise tied to VCC u8 d6 = (m_inputs[1].read_safe(0xff) >> offset & 1) ? 0x40 : 0; // a0-a2,d7: multiplexed inputs (active low) diff --git a/src/mame/fidelity/sc6.cpp b/src/mame/fidelity/sc6.cpp index d09d013cd34..3ed37ec7a7b 100644 --- a/src/mame/fidelity/sc6.cpp +++ b/src/mame/fidelity/sc6.cpp @@ -1,17 +1,28 @@ // license:BSD-3-Clause // copyright-holders:hap -// thanks-to:yoyo_chessboard, Berger +// thanks-to:yoyo_chessboard, Berger, Sean Riddle /******************************************************************************* Fidelity Sensory Chess Challenger 6 (model SC6) Fidelity Mini Sensory Chess Challenger (model MSC, 1982 version) -Fidelity The Gambit (model 6084) +Fidelity The Classic (model 6079) +Fidelity Gambit Voice (model 6085) + +The chess engine is by Ron Nelson. These are all on similar hardware. Several +models are equal to eachother from an emulator's perspective, hence some aren't +included in MAME, see list below. + +Known MCU ROM serials: +- 7203 100-1012B01 (1982), Mini Sensory Chess Challenger +- 9517 [no label] (1985), The Classic (model CC8) +- 9311 100-1020B02 (1986), The Classic (model 6079), The Gambit, Silver Bullet +- 9311 100-1020B01 (1989), The Gambit, Designer 1500, Peri Beta +- 9337 100-1020C01 (1987), Gambit Voice + +100-1020B01 ROM contents is confirmed to be identical to 100-1020B02. TODO: -- MSC MCU is currently emulated as I8039, due to missing EA pin emulation -- different button panel for fidel_msc_v2 artwork -- verify if the 1985 version of The Classic the same ROM -- dump/add Gambit Voice MCU +- is The Classic model CC8 a different ROM? and what about model 6079D? -------------------------------------------------------------------------------- @@ -40,55 +51,65 @@ MCU ports I/O is identical to SC6. It accepts the same modules as the 1st MSC version. See msc.cpp for known modules. The module overrides the internal ROM, by asserting the EA pin. +Silver Bullet hardware notes: +- PCB from MSC, but lose/check leds unpopulated +- TMP80C50AP-6-9311 MCU, 4KB internal ROM, 6MHz XTAL +- buzzer, 16 leds, 8*8 chessboard buttons, module slot (takes MSC modules) + -------------------------------------------------------------------------------- -The Gambit(v3) hardware notes: -- PCB label: 510-1115A01 (1986 PCB, but chips from 1989) -- TMP80C50AP-6-9311 MCU, 4KB internal ROM, 6MHz XTAL +The Classic (model CC8) hardware notes: +- PCB label: 510-1095A01 +- TMP80C50AP-6-9517 MCU, 4KB internal ROM, 6MHz XTAL - buzzer, 16 leds, 8*8 chessboard buttons +The Classic (model 6079) hardware notes: +- TMP80C50AP-6-9311 MCU, rest is same as model CC8 + +The Gambit hardware notes: +- PCB label: 510-1115A01 +- rest is same as The Classic (model 6079) + The Gambit either has a black/white button panel color theme, or black/red/white, -more commonly seen on newer versions, and Gambit Voice. +which was more commonly seen on newer versions and Gambit Voice. + +Designer 1500 hardware notes: +- PCB label: 510.1131A01 +- rest is same as The Classic (model 6079) -MCU ports I/O again identical to SC6. -The same MCU+ROM was also used in Designer 1500(PCB label 510.1131A01). -And also in The Classic(PCB label 510-1095A01), 100-1020B02 MCU. +Peri Beta has the same PCB/ROM as Designer 1500, only the housing differs. -100-1020B02 ROM contents is confirmed to be identical to 100-1020B01. +-------------------------------------------------------------------------------- Gambit Voice hardware notes: -- TMP80C50AP-6-9311 MCU, 4KB internal ROM, 6MHz XTAL -- 510.1117A01 sound PCB, the one from Excel Voice, but with 2332 ROM +- TMP80C50AP-6-9337 MCU, 4KB internal ROM, 6MHz XTAL +- 510.1117A01 sound PCB (TSI S14001A, 4KB or 8KB ROM) - speaker, 16 leds, 8*8 chessboard buttons -Silver Bullet hardware notes: -- PCB from MSC, but lose/check leds unpopulated -- TMP80C50AP-6-9311 MCU, 4KB internal ROM, 6MHz XTAL -- buzzer, 16 leds, 8*8 chessboard buttons, module slot +The sound PCB is the same as the one from Excel Voice (see excel.cpp), except +with a smaller ROM, and no language selection DIP switches. It only supports +the English or French speech ROM. -To summarize, known MCU chip ROM serials+year: -- [no label] (1985), The Classic (model CC8) -- 100-1020B01 (1989), The Gambit, Designer 1500, Peri Beta -- 100-1020B02 (1986), The Gambit, Silver Bullet -- 100-1020B02 (1987), The Classic (model 6079) -- 100-1020C01 (1987), Gambit Voice +As noted above, the non-voice Gambit is the same ROM as The Classic (model 6079). *******************************************************************************/ #include "emu.h" +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" #include "cpu/mcs48/mcs48.h" #include "machine/sensorboard.h" #include "sound/dac.h" +#include "sound/s14001a.h" #include "video/pwm.h" -#include "bus/generic/slot.h" -#include "bus/generic/carts.h" #include "softlist_dev.h" #include "speaker.h" // internal artwork -#include "fidel_gambit.lh" +#include "fidel_classic.lh" +#include "fidel_gambitv.lh" #include "fidel_msc_v2.lh" #include "fidel_sc6.lh" @@ -105,17 +126,23 @@ public: m_board(*this, "board"), m_display(*this, "display"), m_dac(*this, "dac"), + m_speech(*this, "speech"), + m_language(*this, "language"), m_cart(*this, "cartslot"), m_inputs(*this, "IN.0") { } // machine configs - void msc(machine_config &config); + template void cpu_config(T &maincpu); + void shared(machine_config &config); void sc6(machine_config &config); - void gambit(machine_config &config); + void msc(machine_config &config); + void classic(machine_config &config); + void gambitv(machine_config &config); protected: virtual void machine_start() override; + virtual void machine_reset() override; private: // devices/pointers @@ -123,34 +150,41 @@ private: required_region_ptr m_rom; required_device m_board; required_device m_display; - required_device m_dac; + optional_device m_dac; + optional_device m_speech; + optional_region_ptr m_language; optional_device m_cart; required_ioport m_inputs; - u8 m_led_select = 0; u8 m_inp_mux = 0; + u8 m_speech_data = 0; // address maps void msc_map(address_map &map); void sc6_map(address_map &map); // I/O handlers - void update_display(); void mux_w(u8 data); void select_w(u8 data); - u8 rom_r(offs_t offset); - - u8 read_inputs(); u8 input_r(); - int input6_r(); - int input7_r(); + + u8 msc_rom_r(offs_t offset); + + void speech_w(offs_t offset, u8 data, u8 mem_mask); + u8 speech_r(); }; void sc6_state::machine_start() { // register for savestates - save_item(NAME(m_led_select)); save_item(NAME(m_inp_mux)); + save_item(NAME(m_speech_data)); +} + +void sc6_state::machine_reset() +{ + // EA pin is tied to VCC when a cartridge is inserted + m_maincpu->set_input_line(MCS48_INPUT_EA, (m_cart && m_cart->exists()) ? ASSERT_LINE : CLEAR_LINE); } @@ -159,38 +193,29 @@ void sc6_state::machine_start() I/O *******************************************************************************/ -void sc6_state::update_display() -{ - // MSC: 18 leds, SC6: 2 7seg leds - m_display->matrix(m_led_select, 1 << m_inp_mux); -} +// common void sc6_state::mux_w(u8 data) { // P24-P27: 7442 A-D (or 74145) // 7442 0-8: input mux, led data m_inp_mux = data >> 4 & 0xf; - update_display(); + m_display->write_mx(1 << m_inp_mux); // 7442 9: speaker out - m_dac->write(BIT(1 << m_inp_mux, 9)); + if (m_dac != nullptr) + m_dac->write(BIT(1 << m_inp_mux, 9)); } void sc6_state::select_w(u8 data) { - // P16,P17: led select - m_led_select = ~data >> 6 & 3; - update_display(); -} - -u8 sc6_state::rom_r(offs_t offset) -{ - // MSC reads from cartridge if it's inserted(A12 high), otherwise from internal ROM - return m_cart->exists() ? m_cart->read_rom(offset | 0x1000) : m_rom[offset]; + // P16,P17: digit/led select + m_display->write_my(~data >> 6 & 3); } -u8 sc6_state::read_inputs() +u8 sc6_state::input_r() { + // P10-P15,T0,T1: multiplexed inputs u8 data = 0; // read chessboard sensors @@ -204,22 +229,31 @@ u8 sc6_state::read_inputs() return ~data; } -u8 sc6_state::input_r() -{ - // P10-P15: multiplexed inputs low - return (read_inputs() & 0x3f) | 0xc0; -} -int sc6_state::input6_r() +// speech (gambitv) + +u8 sc6_state::speech_r() { - // T0: multiplexed inputs bit 6 - return read_inputs() >> 6 & 1; + // P20: S14001A busy pin + u8 data = m_speech->busy_r(); + + // P21: language jumper + // P22,P23: unused? + return data | (*m_language << 1 & 2) | 0xfc; } -int sc6_state::input7_r() +void sc6_state::speech_w(offs_t offset, u8 data, u8 mem_mask) { - // T1: multiplexed inputs bit 7 - return read_inputs() >> 7 & 1; + data &= mem_mask; + m_speech_data = data; + + // DB6: speech ROM A12 + m_speech->set_rom_bank(BIT(data, 6)); + + // DB0-DB5: S14001A C0-C5 + // DB7: S14001A start pin + m_speech->data_w(data & 0x3f); + m_speech->start_w(BIT(data, 7)); } @@ -228,14 +262,20 @@ int sc6_state::input7_r() Address Maps *******************************************************************************/ +u8 sc6_state::msc_rom_r(offs_t offset) +{ + // MSC module ROM A12 is forced high (lower half has a Z8 program) + return m_cart->read_rom(offset | 0x1000); +} + void sc6_state::msc_map(address_map &map) { - map(0x0000, 0x0fff).r(FUNC(sc6_state::rom_r)); + map(0x0000, 0x0fff).r(FUNC(sc6_state::msc_rom_r)); } void sc6_state::sc6_map(address_map &map) { - map(0x0000, 0x0fff).r("cartslot", FUNC(generic_slot_device::read_rom)); + map(0x0000, 0x0fff).r(m_cart, FUNC(generic_slot_device::read_rom)); } @@ -263,7 +303,7 @@ static INPUT_PORTS_START( msc ) PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Speaker / Bishop") INPUT_PORTS_END -static INPUT_PORTS_START( gambit ) +static INPUT_PORTS_START( gambitv ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move / Pawn") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint / Knight") @@ -281,69 +321,89 @@ INPUT_PORTS_END Machine Configs *******************************************************************************/ -void sc6_state::gambit(machine_config &config) +template +void sc6_state::cpu_config(T &maincpu) { - // basic machine hardware - I8050(config, m_maincpu, 6_MHz_XTAL); - m_maincpu->p2_out_cb().set(FUNC(sc6_state::mux_w)); - m_maincpu->p1_in_cb().set(FUNC(sc6_state::input_r)); - m_maincpu->p1_out_cb().set(FUNC(sc6_state::select_w)); - m_maincpu->t0_in_cb().set(FUNC(sc6_state::input6_r)); - m_maincpu->t1_in_cb().set(FUNC(sc6_state::input7_r)); + maincpu.p1_in_cb().set(FUNC(sc6_state::input_r)).mask(0x3f); + maincpu.p1_in_cb().append_constant(0xc0).mask(0xc0); + maincpu.p1_out_cb().set(FUNC(sc6_state::select_w)); + maincpu.p2_out_cb().set(FUNC(sc6_state::mux_w)); + maincpu.t0_in_cb().set(FUNC(sc6_state::input_r)).bit(6); + maincpu.t1_in_cb().set(FUNC(sc6_state::input_r)).bit(7); +} +void sc6_state::shared(machine_config &config) +{ + // basic machine hardware SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(150)); // video hardware PWM_DISPLAY(config, m_display).set_size(2, 9); - config.set_default_layout(layout_fidel_gambit); // sound hardware SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } -void sc6_state::msc(machine_config &config) +void sc6_state::sc6(machine_config &config) { - gambit(config); + I8040(config, m_maincpu, 11_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::sc6_map); + cpu_config(downcast(*m_maincpu)); - // basic machine hardware - I8039(config.replace(), m_maincpu, 11_MHz_XTAL); // actually I8049 + shared(config); + + // video hardware + m_display->set_segmask(0x3, 0x7f); + config.set_default_layout(layout_fidel_sc6); + + // cartridge + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "fidel_sc6").set_must_be_loaded(true); + SOFTWARE_LIST(config, "cart_list").set_original("fidel_sc6"); +} + +void sc6_state::msc(machine_config &config) +{ + I8049(config, m_maincpu, 11_MHz_XTAL); m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::msc_map); - m_maincpu->p2_out_cb().set(FUNC(sc6_state::mux_w)); - m_maincpu->p1_in_cb().set(FUNC(sc6_state::input_r)); - m_maincpu->p1_out_cb().set(FUNC(sc6_state::select_w)); - m_maincpu->t0_in_cb().set(FUNC(sc6_state::input6_r)); - m_maincpu->t1_in_cb().set(FUNC(sc6_state::input7_r)); + cpu_config(downcast(*m_maincpu)); + + shared(config); config.set_default_layout(layout_fidel_msc_v2); // cartridge - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_msc"); + GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "fidel_msc"); SOFTWARE_LIST(config, "cart_list").set_original("fidel_msc"); } -void sc6_state::sc6(machine_config &config) +void sc6_state::classic(machine_config &config) { - gambit(config); + I8050(config, m_maincpu, 6_MHz_XTAL); + cpu_config(downcast(*m_maincpu)); + + shared(config); + + config.set_default_layout(layout_fidel_classic); +} + +void sc6_state::gambitv(machine_config &config) +{ + classic(config); // basic machine hardware - I8040(config.replace(), m_maincpu, 11_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &sc6_state::sc6_map); - m_maincpu->p2_out_cb().set(FUNC(sc6_state::mux_w)); - m_maincpu->p1_in_cb().set(FUNC(sc6_state::input_r)); - m_maincpu->p1_out_cb().set(FUNC(sc6_state::select_w)); - m_maincpu->t0_in_cb().set(FUNC(sc6_state::input6_r)); - m_maincpu->t1_in_cb().set(FUNC(sc6_state::input7_r)); + m_maincpu->p2_in_cb().set(FUNC(sc6_state::speech_r)); + m_maincpu->bus_in_cb().set([this](){ return m_speech_data; }); + m_maincpu->bus_out_cb().set(FUNC(sc6_state::speech_w)); - // video hardware - m_display->set_segmask(0x3, 0x7f); - config.set_default_layout(layout_fidel_sc6); + config.set_default_layout(layout_fidel_gambitv); - // cartridge - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_sc6").set_must_be_loaded(true); - SOFTWARE_LIST(config, "cart_list").set_original("fidel_sc6"); + // sound hardware + config.device_remove("dac"); + S14001A(config, m_speech, 25000); // R/C circuit, around 25khz + m_speech->add_route(ALL_OUTPUTS, "speaker", 0.75); } @@ -358,14 +418,32 @@ ROM_START( fscc6 ) ROM_END ROM_START( miniscc ) + ROM_REGION( 0x0800, "maincpu", 0 ) + ROM_LOAD("p8049h_7203_100-1012b01.ic1", 0x0000, 0x0800, CRC(ea3261f7) SHA1(1601358fdf0eee0b973c0f4c78bf679b8dada72a) ) +ROM_END + +ROM_START( classic ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD("100-1012b01", 0x0000, 0x0800, CRC(ea3261f7) SHA1(1601358fdf0eee0b973c0f4c78bf679b8dada72a) ) // internal ROM - ROM_RELOAD( 0x0800, 0x0800) + ROM_LOAD("tmp80c50ap-6-9311_100-1020b02.ic1", 0x0000, 0x1000, CRC(ba41b5ba) SHA1(1a5c5b2e990a07b9ff51eecfa952a4b890107797) ) ROM_END -ROM_START( gambit ) +ROM_START( gambitv ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD("100-1020b02", 0x0000, 0x1000, CRC(ba41b5ba) SHA1(1a5c5b2e990a07b9ff51eecfa952a4b890107797) ) // internal ROM + ROM_LOAD("tmp80c50ap-6-9337_100-1020c01.ic1", 0x0000, 0x1000, CRC(dafee386) SHA1(d67914fb2abd73c0068b7e61fc23d211c52d65d9) ) + + // speech ROM + ROM_DEFAULT_BIOS("en") + ROM_SYSTEM_BIOS(0, "en", "English") + ROM_SYSTEM_BIOS(1, "fr", "French") + + ROM_REGION( 1, "language", 0 ) + ROMX_FILL(0, 1, 1, ROM_BIOS(0) ) + ROMX_FILL(0, 1, 0, ROM_BIOS(1) ) + + ROM_REGION( 0x2000, "speech", 0 ) + ROMX_LOAD("101-32107", 0x0000, 0x1000, CRC(f35784f9) SHA1(348e54a7fa1e8091f89ac656b4da22f28ca2e44d), ROM_BIOS(0) ) + ROM_RELOAD( 0x1000, 0x1000) + ROMX_LOAD("101-64105", 0x0000, 0x2000, CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3), ROM_BIOS(1) ) ROM_END } // anonymous namespace @@ -376,8 +454,10 @@ ROM_END Drivers *******************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1982, fscc6, 0, 0, sc6, sc6, sc6_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"6\"", MACHINE_SUPPORTS_SAVE ) -SYST( 1982, miniscc, 0, 0, msc, msc, sc6_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (MCS-48 version)", MACHINE_SUPPORTS_SAVE ) // aka "Mini Sensory II" +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1982, fscc6, 0, 0, sc6, sc6, sc6_state, empty_init, "Fidelity Electronics", "Sensory Chess Challenger \"6\"", MACHINE_SUPPORTS_SAVE ) +SYST( 1982, miniscc, 0, 0, msc, msc, sc6_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (MCS-48 version)", MACHINE_SUPPORTS_SAVE ) // aka "Mini Sensory II" + +SYST( 1986, classic, 0, 0, classic, sc6, sc6_state, empty_init, "Fidelity International", "The Classic (model 6079)", MACHINE_SUPPORTS_SAVE ) -SYST( 1986, gambit, 0, 0, gambit, gambit, sc6_state, empty_init, "Fidelity International", "The Gambit", MACHINE_SUPPORTS_SAVE ) +SYST( 1987, gambitv, 0, 0, gambitv, gambitv, sc6_state, empty_init, "Fidelity International", "Gambit Voice", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/fidelity/vcc.cpp b/src/mame/fidelity/vcc.cpp index 031b245731e..60079041e55 100644 --- a/src/mame/fidelity/vcc.cpp +++ b/src/mame/fidelity/vcc.cpp @@ -29,7 +29,7 @@ use this same ROM (three or four). The later chess boards use a slightly diffe number, but the contents are identical. Memory map (VCC): ------------ +----------------- 0000-0FFF: 4K 2332 ROM VCC1 or 101-32013 1000-1FFF: 4K 2332 ROM VCC2 2000-2FFF: 4K 2332 ROM VCC3 @@ -37,7 +37,7 @@ Memory map (VCC): 6000-FFFF: empty Memory map (UVC): ------------ +----------------- 0000-1FFF: 8K 2364 ROM 101-64017 2000-2FFF: 4K 2332 ROM 101-32010 or VCC3 4000-5FFF: 1K RAM (2114 SRAM x2) @@ -64,7 +64,7 @@ PB.2 - digit 0, bottom dot (W) PB.3 - digit 1, top dot (W) PB.4 - digit 2 (W) PB.5 - digit 3 (W) -PB.6 - enable language switches (W, see below) +PB.6 - enable language jumpers (W, see below) PB.7 - TSI BUSY line (R) (button rows pulled up to 5V through 2.2K resistors) @@ -77,14 +77,14 @@ PC.5 - button column B (W) PC.6 - button column C (W) PC.7 - button column D (W) -language switches: ------------------- -When PB.6 is pulled low, the language switches can be read. There are four. +Language jumpers: +----------------- +When PB.6 is pulled low, the language jumpers can be read. There are four. They connect to the button rows. When enabled, the row(s) will read low if the jumper is present. English only VCC's do not have the 367 or any pads stuffed. The jumpers are labeled: French, German, Spanish, and special. -language latch: +Language latch: --------------- There's an unstuffed 7474 on the board that connects to PA.6 and PA.7. It allows one to latch the state of A12 to the speech ROM. The English version has the chip @@ -196,27 +196,27 @@ void vcc_state::ppi_porta_w(u8 data) m_7seg_data = bitswap<8>(data,7,0,1,2,3,4,5,6); update_display(); - // d0-d5: TSI C0-C5 - // d7: TSI START line - m_speech->data_w(data & 0x3f); - m_speech->start_w(BIT(data, 7)); - // d6: language latch data // d7: language latch clock (latch on high) if (data & 0x80) m_speech->set_rom_bank(BIT(data, 6)); + + // d0-d5: S14001A C0-C5 + // d7: S14001A start pin + m_speech->data_w(data & 0x3f); + m_speech->start_w(BIT(data, 7)); } u8 vcc_state::ppi_portb_r() { - // d7: TSI BUSY line + // d7: S14001A busy pin return (m_speech->busy_r()) ? 0x80 : 0x00; } void vcc_state::ppi_portb_w(u8 data) { // d0,d2-d5: digit/led select - // _d6: enable language switches + // _d6: enable language jumpers m_led_select = data; update_display(); } @@ -230,8 +230,8 @@ u8 vcc_state::ppi_portc_r() if (BIT(m_inp_mux, i)) data |= m_inputs[i]->read(); - // also language switches, hardwired with 4 jumpers - // 0(none wired): English, 1: German, 2: French, 4: Spanish, 8:Special(unused) + // also language jumpers (hardwired) + // 0(no jumper): English, 1: German, 2: French, 4: Spanish, 8: Special(unused) if (~m_led_select & 0x40) data |= *m_language; diff --git a/src/mame/fidelity/vsc.cpp b/src/mame/fidelity/vsc.cpp index fc0f0b78a95..1dde107de81 100644 --- a/src/mame/fidelity/vsc.cpp +++ b/src/mame/fidelity/vsc.cpp @@ -123,10 +123,10 @@ PB.2 - hi/lo TSI speaker volume PB.3 - violet wire to printer port? PB.4 - white wire to printer port? (and TSI BUSY line) PB.5 - selection jumper input (see below) -PB.6 - TSI start line +PB.6 - TSI START line PB.7 - TSI ROM A12 line -selection jumpers: +Selection jumpers: ------------------ These act like another row of buttons. It is composed of two diode locations, so there's up to 4 possible configurations. My board does not have either diode @@ -138,7 +138,7 @@ Anyways, the two jumpers are connected to button columns A and B and the common connects to Z80A PIO PB.5, which basically makes a 10th button row. I would expect that the software reads these once on startup only. -printer: +Printer: -------- This is the 1st Fidelity chess computer with a printer port. Many later Fidelity chess computers also have support for it. Two models were released: @@ -201,7 +201,6 @@ private: u8 m_7seg_data = 0; u8 m_cb_mux = 0; u8 m_kp_mux = 0; - bool m_lan_switch = false; // address maps void main_map(address_map &map); @@ -226,7 +225,6 @@ void vsc_state::machine_start() save_item(NAME(m_7seg_data)); save_item(NAME(m_cb_mux)); save_item(NAME(m_kp_mux)); - save_item(NAME(m_lan_switch)); } @@ -245,7 +243,7 @@ void vsc_state::update_display() void vsc_state::ppi_porta_w(u8 data) { - // d0-d5: TSI C0-C5 + // d0-d5: S14001A C0-C5 m_speech->data_w(data & 0x3f); // d0-d7: data for the 4 7seg leds, bits are HGCBAFED (H is extra led) @@ -286,8 +284,8 @@ u8 vsc_state::pio_porta_r() if (BIT(m_kp_mux, i)) data |= m_inputs[i]->read(); - // also language switches(hardwired with 2 diodes) - if (m_lan_switch) + // also language jumpers (hardwired with 2 diodes) + if (m_kp_mux & 0x20) data |= *m_language; return data; @@ -295,28 +293,23 @@ u8 vsc_state::pio_porta_r() u8 vsc_state::pio_portb_r() { - u8 data = 0; - - // d4: TSI BUSY line - data |= (m_speech->busy_r()) ? 0 : 0x10; - - return data; + // d4: S14001A busy pin + return (m_speech->busy_r()) ? 0 : 0x10; } void vsc_state::pio_portb_w(u8 data) { // d0,d1: keypad input mux - // d5: enable language switch - m_kp_mux = data & 3; - m_lan_switch = bool(data & 0x20); + // d5: enable language jumpers + m_kp_mux = data; - // d7: TSI ROM A12 + // d7: speech ROM A12 m_speech->set_rom_bank(BIT(data, 7)); - // d6: TSI START line + // d6: S14001A start pin m_speech->start_w(BIT(data, 6)); - // d2: lower TSI volume + // d2: lower S14001A volume m_speech->set_output_gain(0, (data & 4) ? 0.25 : 1.0); } diff --git a/src/mame/layout/fidel_classic.lay b/src/mame/layout/fidel_classic.lay new file mode 100644 index 00000000000..42591c28b9c --- /dev/null +++ b/src/mame/layout/fidel_classic.lay @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/fidel_gambit.lay b/src/mame/layout/fidel_gambit.lay deleted file mode 100644 index 6aeefbf5562..00000000000 --- a/src/mame/layout/fidel_gambit.lay +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/layout/fidel_gambitv.lay b/src/mame/layout/fidel_gambitv.lay new file mode 100644 index 00000000000..6aeefbf5562 --- /dev/null +++ b/src/mame/layout/fidel_gambitv.lay @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/fidel_msc_v1.lay b/src/mame/layout/fidel_msc_v1.lay index 8d7baf3bacd..e66a7532dcb 100644 --- a/src/mame/layout/fidel_msc_v1.lay +++ b/src/mame/layout/fidel_msc_v1.lay @@ -364,8 +364,8 @@ authors:hap - - + + diff --git a/src/mame/layout/fidel_msc_v2.lay b/src/mame/layout/fidel_msc_v2.lay index 8d7baf3bacd..9ac8046c9e0 100644 --- a/src/mame/layout/fidel_msc_v2.lay +++ b/src/mame/layout/fidel_msc_v2.lay @@ -9,23 +9,25 @@ authors:hap - - - - - - - - - - - + + + + + + + + + + + + + @@ -56,13 +58,14 @@ authors:hap ]]> - - - - - - - + + + + + + + + @@ -337,8 +340,8 @@ authors:hap - - + + @@ -364,11 +367,11 @@ authors:hap - - + + - - + + @@ -389,49 +392,25 @@ authors:hap - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - + - - - - - - - - + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index f821a24bd94..1286d28df26 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -18108,8 +18108,9 @@ fscc12 // fscc12a // @source:fidelity/sc6.cpp -fscc6 // -gambit +classic +fscc6 +gambitv miniscc @source:fidelity/sc8.cpp diff --git a/src/mame/novag/emerclp.cpp b/src/mame/novag/emerclp.cpp index 37609c069c9..eb57e765197 100644 --- a/src/mame/novag/emerclp.cpp +++ b/src/mame/novag/emerclp.cpp @@ -22,9 +22,6 @@ TODO: - it does a cold boot at every reset, so nvram won't work properly unless MAME adds some kind of auxillary autosave state feature at power-off -BTANB: -- it still has the same AT level bug as sapphire (see sapphire.cpp) - *******************************************************************************/ #include "emu.h" -- cgit v1.2.3