diff options
author | hap <happppp@users.noreply.github.com> | 2021-05-14 22:00:28 +0200 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2021-05-14 22:00:42 +0200 |
commit | c8d53cabbdd8b6056d27f9a3a541aaf1cfc00be0 (patch) | |
tree | 1e034a4e3db94f3073b00e1d49b896418018825b /src/devices/bus/saitek_osa | |
parent | c89891e4aa3746da8d3f325a6e4db5bd1468e1c8 (diff) |
added saitek OSA module interface used in leonardo/renaissance
Diffstat (limited to 'src/devices/bus/saitek_osa')
-rw-r--r-- | src/devices/bus/saitek_osa/expansion.cpp | 127 | ||||
-rw-r--r-- | src/devices/bus/saitek_osa/expansion.h | 117 | ||||
-rw-r--r-- | src/devices/bus/saitek_osa/maestroa.cpp | 54 | ||||
-rw-r--r-- | src/devices/bus/saitek_osa/maestroa.h | 40 | ||||
-rw-r--r-- | src/devices/bus/saitek_osa/modules.cpp | 17 | ||||
-rw-r--r-- | src/devices/bus/saitek_osa/modules.h | 16 |
6 files changed, 371 insertions, 0 deletions
diff --git a/src/devices/bus/saitek_osa/expansion.cpp b/src/devices/bus/saitek_osa/expansion.cpp new file mode 100644 index 00000000000..ec5f527c919 --- /dev/null +++ b/src/devices/bus/saitek_osa/expansion.cpp @@ -0,0 +1,127 @@ +// license:BSD-3-Clause +// copyright-holders:Dirk Best, hap +/*************************************************************************** + +Saitek OSA Expansion Slot + +TODO: +- not sure what RTS does + +***************************************************************************/ + +#include "emu.h" +#include "expansion.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device, "saitekosa_expansion", "Saitek OSA Expansion Bus") + + +//************************************************************************** +// SLOT DEVICE +//************************************************************************** + +//------------------------------------------------- +// saitekosa_expansion_device - constructor +//------------------------------------------------- + +saitekosa_expansion_device::saitekosa_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, SAITEKOSA_EXPANSION, tag, owner, clock), + device_single_card_slot_interface<device_saitekosa_expansion_interface>(mconfig, *this), + m_stb_handler(*this), + m_rts_handler(*this), + m_module(nullptr) +{ } + +//------------------------------------------------- +// saitekosa_expansion_device - destructor +//------------------------------------------------- + +saitekosa_expansion_device::~saitekosa_expansion_device() +{ +} + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void saitekosa_expansion_device::device_start() +{ + // get inserted module + m_module = get_card_device(); + + // resolve callbacks + m_stb_handler.resolve_safe(); + m_rts_handler.resolve_safe(); + + // register for savestates + save_item(NAME(m_data)); + save_item(NAME(m_nmi)); + save_item(NAME(m_ack)); +} + +//------------------------------------------------- +// host to module interface +//------------------------------------------------- + +u8 saitekosa_expansion_device::data_r() +{ + if (m_module) + return m_module->data_r(); + + return 0xff; +} + +void saitekosa_expansion_device::data_w(u8 data) +{ + if (m_module) + m_module->data_w(data); + + m_data = data; +} + +void saitekosa_expansion_device::nmi_w(int state) +{ + state = (state) ? 1 : 0; + + if (m_module) + m_module->nmi_w(state); + + m_nmi = state; +} + +void saitekosa_expansion_device::ack_w(int state) +{ + state = (state) ? 1 : 0; + + if (m_module) + m_module->ack_w(state); + + m_ack = state; +} + + +//************************************************************************** +// MODULE INTERFACE +//************************************************************************** + +//------------------------------------------------- +// device_saitekosa_expansion_interface - constructor +//------------------------------------------------- + +device_saitekosa_expansion_interface::device_saitekosa_expansion_interface(const machine_config &mconfig, device_t &device) : + device_interface(device, "saitekosaexp") +{ + m_expansion = dynamic_cast<saitekosa_expansion_device *>(device.owner()); +} + +//------------------------------------------------- +// ~device_saitekosa_expansion_interface - destructor +//------------------------------------------------- + +device_saitekosa_expansion_interface::~device_saitekosa_expansion_interface() +{ +} diff --git a/src/devices/bus/saitek_osa/expansion.h b/src/devices/bus/saitek_osa/expansion.h new file mode 100644 index 00000000000..2e6727d3f1b --- /dev/null +++ b/src/devices/bus/saitek_osa/expansion.h @@ -0,0 +1,117 @@ +// license:BSD-3-Clause +// copyright-holders:Dirk Best, hap +/*************************************************************************** + + Saitek OSA Expansion Slot + + 15-pin slot "PIO" + + STB-P < + D0 <> + D1 <> + D2 <> + D3 <> + D4 <> + D5 <> + D6 <> + D7 <> + ACK-P > + RTS-P < + PW > + GND > + NMI-P > + V+ > + +***************************************************************************/ + +#ifndef MAME_BUS_SAITEKOSA_EXPANSION_H +#define MAME_BUS_SAITEKOSA_EXPANSION_H + +#pragma once + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class device_saitekosa_expansion_interface; + +// ======================> saitekosa_expansion_device + +class saitekosa_expansion_device : public device_t, public device_single_card_slot_interface<device_saitekosa_expansion_interface> +{ +public: + // construction/destruction + template <typename T> + saitekosa_expansion_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts) : + saitekosa_expansion_device(mconfig, tag, owner, u32(0)) + { + option_reset(); + opts(*this); + set_default_option(nullptr); + set_fixed(false); + } + + saitekosa_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + virtual ~saitekosa_expansion_device(); + + // callbacks + auto stb_handler() { return m_stb_handler.bind(); } + auto rts_handler() { return m_rts_handler.bind(); } + + // called from module device + void stb_w(int state) { m_stb_handler(state); } + void rts_w(int state) { m_rts_handler(state); } + + u8 data_state() { return m_data; } + int nmi_state() { return m_nmi; } + int ack_state() { return m_ack; } + + // called from host + u8 data_r(); + void data_w(u8 data); + void nmi_w(int state); + void ack_w(int state); + +protected: + // device-level overrides + virtual void device_start() override; + +private: + devcb_write_line m_stb_handler; + devcb_write_line m_rts_handler; + + // input pins state + u8 m_data = 0; + int m_nmi = 0; + int m_ack = 0; + + device_saitekosa_expansion_interface *m_module; +}; + +// ======================> device_saitekosa_expansion_interface + +class device_saitekosa_expansion_interface : public device_interface +{ +public: + // construction/destruction + virtual ~device_saitekosa_expansion_interface(); + + virtual u8 data_r() { return 0xff; } + virtual void data_w(u8 data) { } + virtual void nmi_w(int state) { } + virtual void ack_w(int state) { } + +protected: + device_saitekosa_expansion_interface(const machine_config &mconfig, device_t &device); + + saitekosa_expansion_device *m_expansion; +}; + +// device type definition +DECLARE_DEVICE_TYPE(SAITEKOSA_EXPANSION, saitekosa_expansion_device) + +// include here so drivers don't need to +#include "modules.h" + +#endif // MAME_BUS_SAITEKOSA_EXPANSION_H diff --git a/src/devices/bus/saitek_osa/maestroa.cpp b/src/devices/bus/saitek_osa/maestroa.cpp new file mode 100644 index 00000000000..e895828c01e --- /dev/null +++ b/src/devices/bus/saitek_osa/maestroa.cpp @@ -0,0 +1,54 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + +***************************************************************************/ + +#include "emu.h" +#include "maestroa.h" + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +DEFINE_DEVICE_TYPE(OSA_MAESTROA, saitekosa_maestroa_device, "osa_maestroa", "Maestro A") + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +void saitekosa_maestroa_device::device_add_mconfig(machine_config &config) +{ +} + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// saitekosa_maestroa_device - constructor +//------------------------------------------------- + +saitekosa_maestroa_device::saitekosa_maestroa_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + device_t(mconfig, OSA_MAESTROA, tag, owner, clock), + device_saitekosa_expansion_interface(mconfig, *this) +{ } + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void saitekosa_maestroa_device::device_start() +{ +} + + +//************************************************************************** +// IMPLEMENTATION +//************************************************************************** + +void saitekosa_maestroa_device::nmi_w(int state) +{ +} diff --git a/src/devices/bus/saitek_osa/maestroa.h b/src/devices/bus/saitek_osa/maestroa.h new file mode 100644 index 00000000000..2048bde7b60 --- /dev/null +++ b/src/devices/bus/saitek_osa/maestroa.h @@ -0,0 +1,40 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + Saitek OSA Maestro A + +***************************************************************************/ + +#ifndef MAME_BUS_SAITEKOSA_MAESTROA_H +#define MAME_BUS_SAITEKOSA_MAESTROA_H + +#pragma once + +#include "expansion.h" + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> saitekosa_maestroa_device + +class saitekosa_maestroa_device : public device_t, public device_saitekosa_expansion_interface +{ +public: + // construction/destruction + saitekosa_maestroa_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + // from host + virtual void nmi_w(int state) override; + +protected: + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; +}; + +// device type definition +DECLARE_DEVICE_TYPE(OSA_MAESTROA, saitekosa_maestroa_device) + +#endif // MAME_BUS_SAITEKOSA_MAESTROA_H diff --git a/src/devices/bus/saitek_osa/modules.cpp b/src/devices/bus/saitek_osa/modules.cpp new file mode 100644 index 00000000000..e220b59f6aa --- /dev/null +++ b/src/devices/bus/saitek_osa/modules.cpp @@ -0,0 +1,17 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + Saitek OSA Expansion Slot modules + +***************************************************************************/ + +#include "emu.h" +#include "modules.h" + +#include "maestroa.h" + +void saitekosa_expansion_modules(device_slot_interface &device) +{ + device.option_add("maestroa", OSA_MAESTROA); +} diff --git a/src/devices/bus/saitek_osa/modules.h b/src/devices/bus/saitek_osa/modules.h new file mode 100644 index 00000000000..009daf69cec --- /dev/null +++ b/src/devices/bus/saitek_osa/modules.h @@ -0,0 +1,16 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/*************************************************************************** + + Saitek OSA Expansion Slot modules + +***************************************************************************/ + +#ifndef MAME_BUS_SAITEKOSA_MODULES_H +#define MAME_BUS_SAITEKOSA_MODULES_H + +#pragma once + +void saitekosa_expansion_modules(device_slot_interface &device); + +#endif // MAME_BUS_SAITEKOSA_MODULES_H |