From 8ba12dd6da5cddb606707bfcda79f75171290f0a Mon Sep 17 00:00:00 2001 From: hap Date: Sat, 15 May 2021 13:37:40 +0200 Subject: saitek_osa: add skeleton device for Sparc module [hap, Berger] --- scripts/src/bus.lua | 2 + src/devices/bus/saitek_osa/maestroa.cpp | 13 ++++- src/devices/bus/saitek_osa/maestroa.h | 2 +- src/devices/bus/saitek_osa/modules.cpp | 2 + src/devices/bus/saitek_osa/sparc.cpp | 99 +++++++++++++++++++++++++++++++++ src/devices/bus/saitek_osa/sparc.h | 43 ++++++++++++++ src/mame/drivers/saitek_leonardo.cpp | 15 ++--- src/mame/drivers/saitek_renaissance.cpp | 6 +- 8 files changed, 168 insertions(+), 14 deletions(-) create mode 100644 src/devices/bus/saitek_osa/sparc.cpp create mode 100644 src/devices/bus/saitek_osa/sparc.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index dea7c0a5c1a..4fe915cee61 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -4455,6 +4455,8 @@ if (BUSES["SAITEK_OSA"]~=null) then MAME_DIR .. "src/devices/bus/saitek_osa/modules.h", MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.cpp", MAME_DIR .. "src/devices/bus/saitek_osa/maestroa.h", + MAME_DIR .. "src/devices/bus/saitek_osa/sparc.cpp", + MAME_DIR .. "src/devices/bus/saitek_osa/sparc.h", } end diff --git a/src/devices/bus/saitek_osa/maestroa.cpp b/src/devices/bus/saitek_osa/maestroa.cpp index b3245c1e1aa..0eef1426dd3 100644 --- a/src/devices/bus/saitek_osa/maestroa.cpp +++ b/src/devices/bus/saitek_osa/maestroa.cpp @@ -3,7 +3,18 @@ // thanks-to:Berger /*************************************************************************** -Saitek OSA Module: Maestro A +Saitek OSA Module: Kasparov Maestro A (SciSys, 1986) + +The chess engine revision is in-between Kaplan's Stratos and Turbostar. + +Hardware notes: +- PCB label: M6L-PE-012 REV.2 +- R65C02P4 @ 4MHz / 5.67MHz / 6MHz +- 32KB ROM (D27C256) +- 8KB RAM (HM6264LP-15) +- 3 more sockets, one for KSO expansion ROM, 2 unused + +The PCB is not compatible for upgrading to newer Maestro versions. TODO: - does not work if cpu speed is 4MHz diff --git a/src/devices/bus/saitek_osa/maestroa.h b/src/devices/bus/saitek_osa/maestroa.h index 3ef210e153a..f214c4a7fb3 100644 --- a/src/devices/bus/saitek_osa/maestroa.h +++ b/src/devices/bus/saitek_osa/maestroa.h @@ -2,7 +2,7 @@ // copyright-holders:hap /*************************************************************************** - Saitek OSA Module: Maestro A + Saitek OSA Module: Kasparov Maestro A ***************************************************************************/ diff --git a/src/devices/bus/saitek_osa/modules.cpp b/src/devices/bus/saitek_osa/modules.cpp index e220b59f6aa..7cdbe1524fa 100644 --- a/src/devices/bus/saitek_osa/modules.cpp +++ b/src/devices/bus/saitek_osa/modules.cpp @@ -10,8 +10,10 @@ #include "modules.h" #include "maestroa.h" +#include "sparc.h" void saitekosa_expansion_modules(device_slot_interface &device) { device.option_add("maestroa", OSA_MAESTROA); + device.option_add("sparc", OSA_SPARC); } diff --git a/src/devices/bus/saitek_osa/sparc.cpp b/src/devices/bus/saitek_osa/sparc.cpp new file mode 100644 index 00000000000..7620197dffa --- /dev/null +++ b/src/devices/bus/saitek_osa/sparc.cpp @@ -0,0 +1,99 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Berger +/*************************************************************************** + +Saitek OSA Module: Kasparov Sparc (1993) + +The chess engine is by the Spracklen's. Their last, and also their strongest. + +Hardware notes: +- Fujitsu MB86930 SPARClite @ 20MHz (fan cooled) +- 256KB ROM (4*AMD AM27C512) +- 1MB DRAM (8*NEC 424256-60), expandable to 4MB + +TODO: +- skeleton device, missing SPARClite emulation, maybe only needs the MMU? + +***************************************************************************/ + +#include "emu.h" +#include "sparc.h" + + +DEFINE_DEVICE_TYPE(OSA_SPARC, saitekosa_sparc_device, "osa_sparc", "Sparc") + + +//------------------------------------------------- +// initialization +//------------------------------------------------- + +saitekosa_sparc_device::saitekosa_sparc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, OSA_SPARC, tag, owner, clock), + device_saitekosa_expansion_interface(mconfig, *this), + m_maincpu(*this, "maincpu") +{ } + +void saitekosa_sparc_device::device_start() +{ +} + +void saitekosa_sparc_device::device_reset() +{ +} + + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +ROM_START( sparc ) + ROM_REGION32_BE(0x40000, "maincpu", 0) + ROM_LOAD32_BYTE("sm16b_512.u5", 0x000000, 0x10000, CRC(96bca59d) SHA1(2c7e693d0cdf69b6e566c6dd03bd24d39e32aa82) ) + ROM_LOAD32_BYTE("sm16b_512.u4", 0x000001, 0x10000, CRC(15dd621d) SHA1(e8f7404e84fe027b086fcb918fbcaf2ce4203567) ) + ROM_LOAD32_BYTE("sm16b_512.u3", 0x000002, 0x10000, CRC(3201c6e4) SHA1(9a209219a0ab4b4f874381a16773bf33f8f7ba25) ) + ROM_LOAD32_BYTE("sm16b_512a.u2", 0x000003, 0x10000, CRC(56dedec7) SHA1(4f9d37e0ca639f892a574aa10a3fb42bba9b82c6) ) + + ROM_REGION(0x1000, "pals", 0) + ROM_LOAD("palce16v8h.u23.jed", 0x0000, 0x0c25, CRC(de79fabc) SHA1(27e01ec405e261109dbe10c254b7127eda0f1886) ) + ROM_LOAD("palce16v8h.u32.jed", 0x0000, 0x0c25, CRC(422b66c8) SHA1(44b3394e0586c126ee95129c65e6692ffc01fa8e) ) +ROM_END + +const tiny_rom_entry *saitekosa_sparc_device::device_rom_region() const +{ + return ROM_NAME(sparc); +} + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void saitekosa_sparc_device::device_add_mconfig(machine_config &config) +{ + // basic machine hardware +#if 0 + SPARCV8(config, m_maincpu, 20_MHz_XTAL); + m_maincpu->set_addrmap(0, &saitekosa_sparc_device::main_map); + m_maincpu->set_mmu(nullptr); +#endif +} + + +//------------------------------------------------- +// internal i/o +//------------------------------------------------- + +void saitekosa_sparc_device::main_map(address_map &map) +{ +} + + +//------------------------------------------------- +// host i/o +//------------------------------------------------- + +u8 saitekosa_sparc_device::data_r() +{ + return 0xff; +} diff --git a/src/devices/bus/saitek_osa/sparc.h b/src/devices/bus/saitek_osa/sparc.h new file mode 100644 index 00000000000..64db94562f5 --- /dev/null +++ b/src/devices/bus/saitek_osa/sparc.h @@ -0,0 +1,43 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + Saitek OSA Module: Kasparov Sparc + +***************************************************************************/ + +#ifndef MAME_BUS_SAITEKOSA_SPARC_H +#define MAME_BUS_SAITEKOSA_SPARC_H + +#pragma once + +#include "expansion.h" + +#include "cpu/sparc/sparc.h" + + +class saitekosa_sparc_device : public device_t, public device_saitekosa_expansion_interface +{ +public: + // construction/destruction + saitekosa_sparc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + // from host + virtual u8 data_r() override; + +protected: + virtual const tiny_rom_entry *device_rom_region() const override; + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual void device_reset() override; + +private: + optional_device m_maincpu; + + void main_map(address_map &map); +}; + + +DECLARE_DEVICE_TYPE(OSA_SPARC, saitekosa_sparc_device) + +#endif // MAME_BUS_SAITEKOSA_SPARC_H diff --git a/src/mame/drivers/saitek_leonardo.cpp b/src/mame/drivers/saitek_leonardo.cpp index 26bbbbd201f..a610c33a088 100644 --- a/src/mame/drivers/saitek_leonardo.cpp +++ b/src/mame/drivers/saitek_leonardo.cpp @@ -42,8 +42,10 @@ Expansion modules released: - Sparc (SPARClite, Spracklen's) TODO: +- OSA module comms is not completely understood - OSA PC link (probably uses MCU serial interface) -- add nvram +- add power-off +- add nvram (MCU port $14?) - finish internal artwork ******************************************************************************/ @@ -110,14 +112,12 @@ private: u8 m_inp_mux = 0; u8 m_led_data[2] = { 0, 0 }; - bool m_stb_enable = false; }; void leo_state::machine_start() { save_item(NAME(m_inp_mux)); save_item(NAME(m_led_data)); - save_item(NAME(m_stb_enable)); } @@ -167,7 +167,7 @@ void leo_state::unk_w(u8 data) void leo_state::exp_stb_w(int state) { // STB-P to P5 IS - m_maincpu->set_input_line(M6801_IS_LINE, (state && m_stb_enable) ? CLEAR_LINE : ASSERT_LINE); + m_maincpu->set_input_line(M6801_IS_LINE, state ? CLEAR_LINE : ASSERT_LINE); } @@ -206,11 +206,8 @@ void leo_state::p5_w(u8 data) // d2: expansion NMI-P m_expansion->nmi_w(BIT(data, 2)); - // d3: enable expansion STB signal - m_stb_enable = bool(data & 8); - - // d5: expansion ACK-P - m_expansion->ack_w(BIT(data, 5)); + // d3,d5: expansion ACK-P? + m_expansion->ack_w(BIT(data, 3) & BIT(data, 5)); // d6,d7: chessboard led row data m_led_data[0] = (m_led_data[0] & 3) | (~data >> 4 & 0xc); diff --git a/src/mame/drivers/saitek_renaissance.cpp b/src/mame/drivers/saitek_renaissance.cpp index 6176bf73c5c..8b9b25f37ac 100644 --- a/src/mame/drivers/saitek_renaissance.cpp +++ b/src/mame/drivers/saitek_renaissance.cpp @@ -22,7 +22,7 @@ The LCD screen is fairly large, it's the same one as in Saitek Simultano, so a chessboard display + 7seg info. TODO: -- not sure about comm/module leds +- not sure about comm/module leds, where is the module led? - fart noise at boot if osa module is inserted - finish internal artwork - make it a subdriver of saitek_leonardo.cpp? or too many differences @@ -222,8 +222,8 @@ void ren_state::p5_w(u8 data) // d1: expansion NMI-P m_expansion->nmi_w(BIT(data, 1)); - // d5: expansion ACK-P - m_expansion->ack_w(BIT(data, 5)); + // d3,d5: expansion ACK-P? + m_expansion->ack_w(BIT(data, 3) & BIT(data, 5)); // other: ? } -- cgit v1.2.3