mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
saitek_osa: add skeleton device for Sparc module [hap, Berger]
This commit is contained in:
parent
b5b5d370de
commit
8ba12dd6da
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:hap
|
||||
/***************************************************************************
|
||||
|
||||
Saitek OSA Module: Maestro A
|
||||
Saitek OSA Module: Kasparov Maestro A
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
99
src/devices/bus/saitek_osa/sparc.cpp
Normal file
99
src/devices/bus/saitek_osa/sparc.cpp
Normal file
@ -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;
|
||||
}
|
43
src/devices/bus/saitek_osa/sparc.h
Normal file
43
src/devices/bus/saitek_osa/sparc.h
Normal file
@ -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<sparcv8_device> m_maincpu;
|
||||
|
||||
void main_map(address_map &map);
|
||||
};
|
||||
|
||||
|
||||
DECLARE_DEVICE_TYPE(OSA_SPARC, saitekosa_sparc_device)
|
||||
|
||||
#endif // MAME_BUS_SAITEKOSA_SPARC_H
|
@ -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);
|
||||
|
@ -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: ?
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user