From 592e405016d46781c3dfd56237eafa98b77a6257 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 24 Jul 2024 17:11:32 +0200 Subject: fidelity/as12.cpp: rename to elegance.cpp, misc: update notes --- src/mame/fidelity/as12.cpp | 319 ----------------------------- src/mame/fidelity/elegance.cpp | 319 +++++++++++++++++++++++++++++ src/mame/fidelity/msc.cpp | 2 +- src/mame/fidelity/sc6.cpp | 26 ++- src/mame/fidelity/sc8.cpp | 2 +- src/mame/fidelity/sc9.cpp | 8 +- src/mame/layout/fidel_as12.lay | 404 ------------------------------------- src/mame/layout/fidel_elegance.lay | 404 +++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 14 +- src/mame/saitek/ssystem3.cpp | 7 +- 10 files changed, 756 insertions(+), 749 deletions(-) delete mode 100644 src/mame/fidelity/as12.cpp create mode 100644 src/mame/fidelity/elegance.cpp delete mode 100644 src/mame/layout/fidel_as12.lay create mode 100644 src/mame/layout/fidel_elegance.lay diff --git a/src/mame/fidelity/as12.cpp b/src/mame/fidelity/as12.cpp deleted file mode 100644 index ff181b03dd7..00000000000 --- a/src/mame/fidelity/as12.cpp +++ /dev/null @@ -1,319 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:hap -// thanks-to:yoyo_chessboard, Berger -/******************************************************************************* - -Fidelity Elegance Chess Challenger (AS12/6085) - -Hardware notes (AS12): -- PCB label 510-1084B01 -- R65C02P3 @ 3/3.57MHz (apparently the first few had a 3MHz CPU) -- 2*8KB ROM + 1*4KB ROM, 2*2KB RAM(HM6116+TMM2016) - -Hardware notes (6085): -- PCB label 510-1084B01 -- R65C02P4 @ 4MHz -- 3*8KB ROM(TMM2764), 2*2KB RAM(HM6116+TMM2016) - -This is on the SC12B board, with enough modifications to support more leds and -magnetic chess board sensors. See sc12.cpp for a more technical description. - -The first RAM chip is low-power, and battery-backed with a capacitor. This is -also mentioned in the manual. Maybe it does not apply to older PCBs. - -Like with EAS, the new game command for AS12 is: RE -> D6 (or D8) -> CL. -The newer model 6085 does not have this issue. - -TODO: -- is the initial AS12 3MHz version the same ROM as felega1? When it's configured - at 3MHz and the CPU divider set to 2, the pace is the same as fscc12a. - -*******************************************************************************/ - -#include "emu.h" -#include "clockdiv.h" - -#include "bus/generic/carts.h" -#include "bus/generic/slot.h" -#include "cpu/m6502/r65c02.h" -#include "machine/clock.h" -#include "machine/nvram.h" -#include "machine/sensorboard.h" -#include "sound/dac.h" -#include "video/pwm.h" - -#include "softlist_dev.h" -#include "speaker.h" - -// internal artwork -#include "fidel_as12.lh" - - -namespace { - -// note: sub-class of fidel_clockdiv_state (see clockdiv.*) - -class as12_state : public fidel_clockdiv_state -{ -public: - as12_state(const machine_config &mconfig, device_type type, const char *tag) : - fidel_clockdiv_state(mconfig, type, tag), - m_board(*this, "board"), - m_display(*this, "display"), - m_dac(*this, "dac"), - m_inputs(*this, "IN.0") - { } - - // machine configs - void feleg(machine_config &config); - void felega(machine_config &config); - - DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq); - -protected: - virtual void machine_start() override; - -private: - // devices/pointers - required_device m_board; - required_device m_display; - required_device m_dac; - required_ioport m_inputs; - - u16 m_inp_mux = 0; - u8 m_led_data = 0; - - // address maps - void main_map(address_map &map); - - // I/O handlers - void update_display(); - void control_w(u8 data); - void led_w(offs_t offset, u8 data); - u8 input_r(offs_t offset); -}; - -void as12_state::machine_start() -{ - fidel_clockdiv_state::machine_start(); - - // register for savestates - save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_data)); -} - -INPUT_CHANGED_MEMBER(as12_state::change_cpu_freq) -{ - // known official CPU speeds: 3MHz, 3.57MHz, 4MHz - static const XTAL xtal[3] = { 3_MHz_XTAL, 3.579545_MHz_XTAL, 4_MHz_XTAL }; - m_maincpu->set_unscaled_clock(xtal[newval % 3]); -} - - - -/******************************************************************************* - I/O -*******************************************************************************/ - -void as12_state::update_display() -{ - // 8*8(+1) chessboard leds - m_display->matrix(m_inp_mux, m_led_data); -} - -void as12_state::control_w(u8 data) -{ - // d0-d3: 74245 P0-P3 - // 74245 Q0-Q8: input mux, led select - u16 sel = 1 << (data & 0xf) & 0x3ff; - m_inp_mux = bitswap<9>(sel,5,8,7,6,4,3,1,0,2); - update_display(); - - // 74245 Q9: speaker out - m_dac->write(BIT(sel, 9)); - - // d4,d5: printer? - // d6,d7: N/C? -} - -void as12_state::led_w(offs_t offset, u8 data) -{ - // a0-a2,d0: led data via NE591N - m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); - update_display(); -} - -u8 as12_state::input_r(offs_t offset) -{ - u8 data = 0; - - // a0-a2,d7: multiplexed inputs (active low) - // read chessboard sensors - for (int i = 0; i < 8; i++) - if (BIT(m_inp_mux, i)) - data |= m_board->read_file(i); - - // read sidepanel buttons - if (m_inp_mux & 0x100) - data |= m_inputs->read(); - - data = bitswap<8>(data,4,3,2,1,0,5,6,7); - return (data >> offset & 1) ? 0 : 0x80; -} - - - -/******************************************************************************* - Address Maps -*******************************************************************************/ - -void as12_state::main_map(address_map &map) -{ - map.unmap_value_high(); - map(0x0000, 0x07ff).ram().share("nvram"); - map(0x0800, 0x0fff).ram(); - map(0x1800, 0x1807).w(FUNC(as12_state::led_w)).nopr(); - map(0x2000, 0x5fff).r("cartslot", FUNC(generic_slot_device::read_rom)); - map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(as12_state::control_w)); - map(0x8000, 0x9fff).rom(); - map(0xa000, 0xa007).mirror(0x1ff8).r(FUNC(as12_state::input_r)); - map(0xc000, 0xcfff).mirror(0x1000).rom(); - map(0xe000, 0xffff).rom(); -} - - - -/******************************************************************************* - Input Ports -*******************************************************************************/ - -static INPUT_PORTS_START( feleg ) - PORT_INCLUDE( fidel_clockdiv_4 ) - - PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM / Knight") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB / Bishop") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV / Rook") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") - - PORT_START("CPU") - PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, change_cpu_freq, 0) // factory set - PORT_CONFSETTING( 0x00, "3MHz (original)" ) - PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" ) - PORT_CONFSETTING( 0x02, "4MHz (6085)" ) -INPUT_PORTS_END - -static INPUT_PORTS_START( felega ) - PORT_INCLUDE( feleg ) - - PORT_MODIFY("CPU") // default to 3.57MHz - PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, as12_state, change_cpu_freq, 0) // factory set - PORT_CONFSETTING( 0x00, "3MHz (original)" ) - PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" ) - PORT_CONFSETTING( 0x02, "4MHz (6085)" ) -INPUT_PORTS_END - - - -/******************************************************************************* - Machine Configs -*******************************************************************************/ - -void as12_state::feleg(machine_config &config) -{ - // basic machine hardware - R65C02(config, m_maincpu, 4_MHz_XTAL); // R65C02P4 - m_maincpu->set_addrmap(AS_PROGRAM, &as12_state::main_map); - - auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 110K, 1K), ideal frequency is 600Hz - irq_clock.set_pulse_width(attotime::from_usec(17)); // active for 17us - irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - - SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); - m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); - m_board->set_delay(attotime::from_msec(150)); - m_board->set_nvram_enable(true); - - // video hardware - PWM_DISPLAY(config, m_display).set_size(9, 8); - config.set_default_layout(layout_fidel_as12); - - // sound hardware - SPEAKER(config, "speaker").front_center(); - DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); - - // cartridge - GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_scc"); - SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc"); -} - -void as12_state::felega(machine_config &config) -{ - feleg(config); - - // basic machine hardware - m_maincpu->set_clock(3.579545_MHz_XTAL); // R65C02P3 -} - - - -/******************************************************************************* - ROM Definitions -*******************************************************************************/ - -ROM_START( feleg ) // model 6085, serial 613623xx - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("feleg.8000", 0x8000, 0x2000, CRC(e9df31e8) SHA1(31c52bb8f75580c82093eb950959c1bc294189a8) ) // TMM2764, no label - ROM_LOAD("feleg.c000", 0xc000, 0x1000, CRC(bed9c84b) SHA1(c12f39765b054d2ad81f747e698715ad4246806d) ) // " - ROM_CONTINUE( 0xc000, 0x1000 ) // 1st half empty - ROM_LOAD("feleg.e000", 0xe000, 0x2000, CRC(b1fb49aa) SHA1(d8c9687dd564f0fa603e6d684effb1d113ac64b4) ) // " -ROM_END - -ROM_START( felega ) // model AS12 - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(e86453ed) SHA1(8279cf9a7f471f893922d53d901dae65fabbd33f) ) // AM2764-25DC - ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(4a2b6946) SHA1(fd7d11e2589e654f91f7c2f667b927075bd49339) ) // D2732D - ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(823083ad) SHA1(4ea6a679edc7c149f1467113e9e5736ee0d5f643) ) // AM2764-25DC -ROM_END - -ROM_START( felega1 ) // model AS12, only 1 byte difference compared with felega2 (evidently not a bad dump) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("felega1.8000", 0x8000, 0x2000, CRC(8ddd71fb) SHA1(d856b42706df0a0e6ec7f44c49ec38d84155c1ef) ) // unknown label - ROM_LOAD("felega1.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // " - ROM_LOAD("felega1.e000", 0xe000, 0x2000, CRC(b7c55d19) SHA1(45df961c2c3a1e9c8ec79efb7a1a82500425df2f) ) // " -ROM_END - -ROM_START( felega2 ) // model AS12, serial 427921xx - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(2e07e657) SHA1(3238f21bdbf2277851e5a32e18c043e654123f00) ) // M5L2764K-2 - ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // TMS2732AJL-45 - ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(b7c55d19) SHA1(45df961c2c3a1e9c8ec79efb7a1a82500425df2f) ) // TMS2764JL-25 -ROM_END - -ROM_START( felega3 ) // model AS12, serial 427917xx - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(2e07e657) SHA1(3238f21bdbf2277851e5a32e18c043e654123f00) ) // M5L2764K-2 - ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // TMS2732AJL-45 - ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(9142121b) SHA1(264380e7ad36b7b1867658e1af387624d2a72630) ) // TMS2764JL-25 -ROM_END - -} // anonymous namespace - - - -/******************************************************************************* - Drivers -*******************************************************************************/ - -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1986, feleg, 0, 0, feleg, feleg, as12_state, empty_init, "Fidelity International", "Elegance Chess Challenger (model 6085)", MACHINE_SUPPORTS_SAVE ) -SYST( 1984, felega, feleg, 0, felega, felega, as12_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 1)", MACHINE_SUPPORTS_SAVE ) -SYST( 1984, felega1, feleg, 0, felega, felega, as12_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 2)", MACHINE_SUPPORTS_SAVE ) -SYST( 1984, felega2, feleg, 0, felega, felega, as12_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 3)", MACHINE_SUPPORTS_SAVE ) -SYST( 1984, felega3, feleg, 0, felega, felega, as12_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 4)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/fidelity/elegance.cpp b/src/mame/fidelity/elegance.cpp new file mode 100644 index 00000000000..281259dff0e --- /dev/null +++ b/src/mame/fidelity/elegance.cpp @@ -0,0 +1,319 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:yoyo_chessboard, Berger +/******************************************************************************* + +Fidelity Elegance Chess Challenger (AS12/6085) + +Hardware notes (AS12): +- PCB label 510-1084B01 +- R65C02P3 @ 3/3.57MHz (apparently the first few had a 3MHz CPU) +- 2*8KB ROM + 1*4KB ROM, 2*2KB RAM(HM6116+TMM2016) + +Hardware notes (6085): +- PCB label 510-1084B01 +- R65C02P4 @ 4MHz +- 3*8KB ROM(TMM2764), 2*2KB RAM(HM6116+TMM2016) + +This is on the SC12B board, with enough modifications to support more leds and +magnetic chess board sensors. See sc12.cpp for a more technical description. + +The first RAM chip is low-power, and battery-backed with a capacitor. This is +also mentioned in the manual. Maybe it does not apply to older PCBs. + +Like with EAS, the new game command for AS12 is: RE -> D6 (or D8) -> CL. +The newer model 6085 does not have this issue. + +TODO: +- is the initial AS12 3MHz version the same ROM as felega1? When it's configured + at 3MHz and the CPU divider set to 2, the pace is the same as fscc12a. + +*******************************************************************************/ + +#include "emu.h" +#include "clockdiv.h" + +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" +#include "cpu/m6502/r65c02.h" +#include "machine/clock.h" +#include "machine/nvram.h" +#include "machine/sensorboard.h" +#include "sound/dac.h" +#include "video/pwm.h" + +#include "softlist_dev.h" +#include "speaker.h" + +// internal artwork +#include "fidel_elegance.lh" + + +namespace { + +// note: sub-class of fidel_clockdiv_state (see clockdiv.*) + +class elegance_state : public fidel_clockdiv_state +{ +public: + elegance_state(const machine_config &mconfig, device_type type, const char *tag) : + fidel_clockdiv_state(mconfig, type, tag), + m_board(*this, "board"), + m_display(*this, "display"), + m_dac(*this, "dac"), + m_inputs(*this, "IN.0") + { } + + // machine configs + void feleg(machine_config &config); + void felega(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq); + +protected: + virtual void machine_start() override; + +private: + // devices/pointers + required_device m_board; + required_device m_display; + required_device m_dac; + required_ioport m_inputs; + + u16 m_inp_mux = 0; + u8 m_led_data = 0; + + // address maps + void main_map(address_map &map); + + // I/O handlers + void update_display(); + void control_w(u8 data); + void led_w(offs_t offset, u8 data); + u8 input_r(offs_t offset); +}; + +void elegance_state::machine_start() +{ + fidel_clockdiv_state::machine_start(); + + // register for savestates + save_item(NAME(m_inp_mux)); + save_item(NAME(m_led_data)); +} + +INPUT_CHANGED_MEMBER(elegance_state::change_cpu_freq) +{ + // known official CPU speeds: 3MHz, 3.57MHz, 4MHz + static const XTAL xtal[3] = { 3_MHz_XTAL, 3.579545_MHz_XTAL, 4_MHz_XTAL }; + m_maincpu->set_unscaled_clock(xtal[newval % 3]); +} + + + +/******************************************************************************* + I/O +*******************************************************************************/ + +void elegance_state::update_display() +{ + // 8*8(+1) chessboard leds + m_display->matrix(m_inp_mux, m_led_data); +} + +void elegance_state::control_w(u8 data) +{ + // d0-d3: 74245 P0-P3 + // 74245 Q0-Q8: input mux, led select + u16 sel = 1 << (data & 0xf) & 0x3ff; + m_inp_mux = bitswap<9>(sel,5,8,7,6,4,3,1,0,2); + update_display(); + + // 74245 Q9: speaker out + m_dac->write(BIT(sel, 9)); + + // d4,d5: printer? + // d6,d7: N/C? +} + +void elegance_state::led_w(offs_t offset, u8 data) +{ + // a0-a2,d0: led data via NE591N + m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset); + update_display(); +} + +u8 elegance_state::input_r(offs_t offset) +{ + u8 data = 0; + + // a0-a2,d7: multiplexed inputs (active low) + // read chessboard sensors + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_board->read_file(i); + + // read sidepanel buttons + if (m_inp_mux & 0x100) + data |= m_inputs->read(); + + data = bitswap<8>(data,4,3,2,1,0,5,6,7); + return (data >> offset & 1) ? 0 : 0x80; +} + + + +/******************************************************************************* + Address Maps +*******************************************************************************/ + +void elegance_state::main_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x07ff).ram().share("nvram"); + map(0x0800, 0x0fff).ram(); + map(0x1800, 0x1807).w(FUNC(elegance_state::led_w)).nopr(); + map(0x2000, 0x5fff).r("cartslot", FUNC(generic_slot_device::read_rom)); + map(0x6000, 0x6000).mirror(0x1fff).w(FUNC(elegance_state::control_w)); + map(0x8000, 0x9fff).rom(); + map(0xa000, 0xa007).mirror(0x1ff8).r(FUNC(elegance_state::input_r)); + map(0xc000, 0xcfff).mirror(0x1000).rom(); + map(0xe000, 0xffff).rom(); +} + + + +/******************************************************************************* + Input Ports +*******************************************************************************/ + +static INPUT_PORTS_START( feleg ) + PORT_INCLUDE( fidel_clockdiv_4 ) + + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV / Pawn") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM / Knight") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB / Bishop") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV / Rook") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV / Queen") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB / King") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") + + PORT_START("CPU") + PORT_CONFNAME( 0x03, 0x02, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elegance_state, change_cpu_freq, 0) // factory set + PORT_CONFSETTING( 0x00, "3MHz (original)" ) + PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" ) + PORT_CONFSETTING( 0x02, "4MHz (6085)" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( felega ) + PORT_INCLUDE( feleg ) + + PORT_MODIFY("CPU") // default to 3.57MHz + PORT_CONFNAME( 0x03, 0x01, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, elegance_state, change_cpu_freq, 0) // factory set + PORT_CONFSETTING( 0x00, "3MHz (original)" ) + PORT_CONFSETTING( 0x01, "3.57MHz (AS12)" ) + PORT_CONFSETTING( 0x02, "4MHz (6085)" ) +INPUT_PORTS_END + + + +/******************************************************************************* + Machine Configs +*******************************************************************************/ + +void elegance_state::feleg(machine_config &config) +{ + // basic machine hardware + R65C02(config, m_maincpu, 4_MHz_XTAL); // R65C02P4 + m_maincpu->set_addrmap(AS_PROGRAM, &elegance_state::main_map); + + auto &irq_clock(CLOCK(config, "irq_clock", 600)); // from 556 timer (22nF, 110K, 1K), ideal frequency is 600Hz + irq_clock.set_pulse_width(attotime::from_usec(17)); // active for 17us + irq_clock.signal_handler().set_inputline(m_maincpu, M6502_IRQ_LINE); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + SENSORBOARD(config, m_board).set_type(sensorboard_device::MAGNETS); + m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + m_board->set_delay(attotime::from_msec(150)); + m_board->set_nvram_enable(true); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(9, 8); + config.set_default_layout(layout_fidel_elegance); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); + + // cartridge + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, "fidel_scc"); + SOFTWARE_LIST(config, "cart_list").set_original("fidel_scc"); +} + +void elegance_state::felega(machine_config &config) +{ + feleg(config); + + // basic machine hardware + m_maincpu->set_clock(3.579545_MHz_XTAL); // R65C02P3 +} + + + +/******************************************************************************* + ROM Definitions +*******************************************************************************/ + +ROM_START( feleg ) // model 6085, serial 613623xx + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("feleg.8000", 0x8000, 0x2000, CRC(e9df31e8) SHA1(31c52bb8f75580c82093eb950959c1bc294189a8) ) // TMM2764, no label + ROM_LOAD("feleg.c000", 0xc000, 0x1000, CRC(bed9c84b) SHA1(c12f39765b054d2ad81f747e698715ad4246806d) ) // " + ROM_CONTINUE( 0xc000, 0x1000 ) // 1st half empty + ROM_LOAD("feleg.e000", 0xe000, 0x2000, CRC(b1fb49aa) SHA1(d8c9687dd564f0fa603e6d684effb1d113ac64b4) ) // " +ROM_END + +ROM_START( felega ) // model AS12 + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(e86453ed) SHA1(8279cf9a7f471f893922d53d901dae65fabbd33f) ) // AM2764-25DC + ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(4a2b6946) SHA1(fd7d11e2589e654f91f7c2f667b927075bd49339) ) // D2732D + ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(823083ad) SHA1(4ea6a679edc7c149f1467113e9e5736ee0d5f643) ) // AM2764-25DC +ROM_END + +ROM_START( felega1 ) // model AS12, only 1 byte difference compared with felega2 (evidently not a bad dump) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("felega1.8000", 0x8000, 0x2000, CRC(8ddd71fb) SHA1(d856b42706df0a0e6ec7f44c49ec38d84155c1ef) ) // unknown label + ROM_LOAD("felega1.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // " + ROM_LOAD("felega1.e000", 0xe000, 0x2000, CRC(b7c55d19) SHA1(45df961c2c3a1e9c8ec79efb7a1a82500425df2f) ) // " +ROM_END + +ROM_START( felega2 ) // model AS12, serial 427921xx + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(2e07e657) SHA1(3238f21bdbf2277851e5a32e18c043e654123f00) ) // M5L2764K-2 + ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // TMS2732AJL-45 + ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(b7c55d19) SHA1(45df961c2c3a1e9c8ec79efb7a1a82500425df2f) ) // TMS2764JL-25 +ROM_END + +ROM_START( felega3 ) // model AS12, serial 427917xx + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("blue.8000", 0x8000, 0x2000, CRC(2e07e657) SHA1(3238f21bdbf2277851e5a32e18c043e654123f00) ) // M5L2764K-2 + ROM_LOAD("green.c000", 0xc000, 0x1000, CRC(fcc48302) SHA1(f60d34229721e8659e9f81c267177daec7723d8f) ) // TMS2732AJL-45 + ROM_LOAD("black.e000", 0xe000, 0x2000, CRC(9142121b) SHA1(264380e7ad36b7b1867658e1af387624d2a72630) ) // TMS2764JL-25 +ROM_END + +} // anonymous namespace + + + +/******************************************************************************* + Drivers +*******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1986, feleg, 0, 0, feleg, feleg, elegance_state, empty_init, "Fidelity International", "Elegance Chess Challenger (model 6085)", MACHINE_SUPPORTS_SAVE ) +SYST( 1984, felega, feleg, 0, felega, felega, elegance_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 1)", MACHINE_SUPPORTS_SAVE ) +SYST( 1984, felega1, feleg, 0, felega, felega, elegance_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 2)", MACHINE_SUPPORTS_SAVE ) +SYST( 1984, felega2, feleg, 0, felega, felega, elegance_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 3)", MACHINE_SUPPORTS_SAVE ) +SYST( 1984, felega3, feleg, 0, felega, felega, elegance_state, empty_init, "Fidelity Computer Products", "Elegance Chess Challenger (model AS12, set 4)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/fidelity/msc.cpp b/src/mame/fidelity/msc.cpp index 1c830a79e70..04a1e002f33 100644 --- a/src/mame/fidelity/msc.cpp +++ b/src/mame/fidelity/msc.cpp @@ -232,4 +232,4 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, miniscco, miniscc, 0, msc, msc, msc_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (1981 version)", MACHINE_SUPPORTS_SAVE ) +SYST( 1981, miniscco, miniscc, 0, msc, msc, msc_state, empty_init, "Fidelity Electronics", "Mini Sensory Chess Challenger (Z8 version)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/fidelity/sc6.cpp b/src/mame/fidelity/sc6.cpp index a00cc00fb05..d09d013cd34 100644 --- a/src/mame/fidelity/sc6.cpp +++ b/src/mame/fidelity/sc6.cpp @@ -10,13 +10,13 @@ Fidelity The Gambit (model 6084) TODO: - MSC MCU is currently emulated as I8039, due to missing EA pin emulation - different button panel for fidel_msc_v2 artwork -- add the older versions of gambit(assuming different ROM): 1st version is - probably the same as "The Classic", and 2nd version has voice capability +- verify if the 1985 version of The Classic the same ROM +- dump/add Gambit Voice MCU -------------------------------------------------------------------------------- SC6 hardware notes: -- PCB label 510-1045B01 +- PCB label: 510-1045B01 - INS8040N-11 MCU, 11MHz XTAL - external 4KB ROM 2332 101-1035A01, in module slot - buzzer, 2 7seg LEDs, 8*8 chessboard buttons @@ -31,7 +31,7 @@ SC6 program is contained in BO6 and CG6. -------------------------------------------------------------------------------- MSC hardware notes: -- PCB label 510-1044B01 +- PCB label: 510-1044B01 - P8049H MCU, 2KB internal ROM, 11MHz XTAL - buzzer, 18 leds, 8*8 chessboard buttons, module slot @@ -42,11 +42,14 @@ The module overrides the internal ROM, by asserting the EA pin. -------------------------------------------------------------------------------- -Gambit(v3) hardware notes: -- PCB label 510-1115A01 (1986 PCB, but chips from 1989) +The Gambit(v3) hardware notes: +- PCB label: 510-1115A01 (1986 PCB, but chips from 1989) - TMP80C50AP-6-9311 MCU, 4KB internal ROM, 6MHz XTAL - buzzer, 16 leds, 8*8 chessboard buttons +The Gambit either has a black/white button panel color theme, or black/red/white, +more commonly seen on newer versions, and Gambit Voice. + 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. @@ -64,9 +67,10 @@ Silver Bullet hardware notes: - buzzer, 16 leds, 8*8 chessboard buttons, module slot 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), Silver Bullet -- 100-1020B02 (1987), The Classic +- 100-1020B02 (1986), The Gambit, Silver Bullet +- 100-1020B02 (1987), The Classic (model 6079) - 100-1020C01 (1987), Gambit Voice *******************************************************************************/ @@ -361,7 +365,7 @@ ROM_END ROM_START( gambit ) ROM_REGION( 0x1000, "maincpu", 0 ) - ROM_LOAD("100-1020b01", 0x0000, 0x1000, CRC(ba41b5ba) SHA1(1a5c5b2e990a07b9ff51eecfa952a4b890107797) ) // internal ROM + ROM_LOAD("100-1020b02", 0x0000, 0x1000, CRC(ba41b5ba) SHA1(1a5c5b2e990a07b9ff51eecfa952a4b890107797) ) // internal ROM ROM_END } // anonymous namespace @@ -374,6 +378,6 @@ ROM_END // 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 (1982 version)", MACHINE_SUPPORTS_SAVE ) // aka "Mini Sensory II" +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( 1989, gambit, 0, 0, gambit, gambit, sc6_state, empty_init, "Fidelity International", "The Gambit (1989 version)", MACHINE_SUPPORTS_SAVE ) +SYST( 1986, gambit, 0, 0, gambit, gambit, sc6_state, empty_init, "Fidelity International", "The Gambit", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/fidelity/sc8.cpp b/src/mame/fidelity/sc8.cpp index 370a02abebb..01f3b22b29c 100644 --- a/src/mame/fidelity/sc8.cpp +++ b/src/mame/fidelity/sc8.cpp @@ -15,10 +15,10 @@ It was also rereleased in 1983 as "Poppy", marketed for children, the housing was in bright red color. Hardware notes: +- PCB label: 510-1011 REV.2 - Z80A CPU @ 3.9MHz - 4KB ROM(MOS 2732), 256 bytes RAM(35391CP) - chessboard buttons, 8*8+1 leds -- PCB label 510-1011 REV.2 *******************************************************************************/ diff --git a/src/mame/fidelity/sc9.cpp b/src/mame/fidelity/sc9.cpp index d21d52bba1a..053c2638961 100644 --- a/src/mame/fidelity/sc9.cpp +++ b/src/mame/fidelity/sc9.cpp @@ -12,11 +12,11 @@ TODO: Hardware notes: Fidelity Sensory Chess Challenger "9" (SC9) overview: -- 8*(8+1) buttons, 8*8+1 LEDs -- 36-pin edge connector, assume same as SC12 -- 2KB RAM(TMM2016P), 2*8KB ROM(HN48364P) +- PCB label: 510-1046C01 2-1-82 - R6502-13, 1.4MHz from resonator, another pcb with the same resonator was measured 1.49MHz* -- PCB label 510-1046C01 2-1-82 +- 2KB RAM(TMM2016P), 2*8KB ROM(HN48364P) +- 36-pin edge connector, assume same as SC12 +- 8*(8+1) buttons, 8*8+1 LEDs *: 2 other boards were measured 1.60MHz and 1.88MHz(newest serial). Online references suggest 3 versions of SC9(C01) total: 1.5MHz, 1.6MHz, and 1.9MHz. diff --git a/src/mame/layout/fidel_as12.lay b/src/mame/layout/fidel_as12.lay deleted file mode 100644 index 3cd66740321..00000000000 --- a/src/mame/layout/fidel_as12.lay +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/mame/layout/fidel_elegance.lay b/src/mame/layout/fidel_elegance.lay new file mode 100644 index 00000000000..3cd66740321 --- /dev/null +++ b/src/mame/layout/fidel_elegance.lay @@ -0,0 +1,404 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c5d10dea460..fb7ade9c694 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17973,13 +17973,6 @@ ts2624 // 1982 @source:falco/falcots28.cpp ts28 // 1983 -@source:fidelity/as12.cpp -feleg -felega -felega1 -felega2 -felega3 - @source:fidelity/bridgeb.cpp bridgeb @@ -18060,6 +18053,13 @@ premiere // @source:fidelity/eldorado.cpp feldo +@source:fidelity/elegance.cpp +feleg +felega +felega1 +felega2 +felega3 + @source:fidelity/elite.cpp feag // feag2100 // diff --git a/src/mame/saitek/ssystem3.cpp b/src/mame/saitek/ssystem3.cpp index 10cdf599de3..6885e4d8da3 100644 --- a/src/mame/saitek/ssystem3.cpp +++ b/src/mame/saitek/ssystem3.cpp @@ -12,7 +12,9 @@ This is their 1st original product. MK II was licensed from Peter Jennings, and MK I was, to put it bluntly, a bootleg. The chess engine is by Mike Johnson, with support from David Levy. -Hardware notes (Master Unit): +Hardware notes: + +Master Unit: - PCB label: 201041 (Rev.A to Rev.E) - Synertek 6502A @ 2MHz (4MHz XTAL) - Synertek 6522 VIA @@ -50,7 +52,8 @@ TODO: - LCD TC pin? connects to the display, source is a 50hz timer(from power supply), probably to keep refreshing the LCD when inactive, there is no need to emulate it - dump/add printer unit -- dump/add ssystem3 1980 program revision, were the BTANB fixed? +- dump/add other ssystem3 program revisions, were the BTANB fixed in the 1980 version? + known undumped: C19081 + C19082 (instead of C19081E), C45000 + C45012 - ssystem4 softwarelist if a prototype cartridge is ever dumped BTANB (ssystem3): -- cgit v1.2.3