mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
added saitek OSA module interface used in leonardo/renaissance
This commit is contained in:
parent
c89891e4aa
commit
c8d53cabbd
@ -4442,6 +4442,22 @@ if (BUSES["RTPC_KBD"]~=null) then
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
--
|
||||||
|
--@src/devices/bus/saitek_osa/expansion.h,BUSES["SAITEK_OSA"] = true
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
if (BUSES["SAITEK_OSA"]~=null) then
|
||||||
|
files {
|
||||||
|
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.cpp",
|
||||||
|
MAME_DIR .. "src/devices/bus/saitek_osa/expansion.h",
|
||||||
|
MAME_DIR .. "src/devices/bus/saitek_osa/modules.cpp",
|
||||||
|
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",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
--
|
--
|
||||||
--@src/devices/bus/samcoupe/drive/drive.h,BUSES["SAMCOUPE_DRIVE_PORT"] = true
|
--@src/devices/bus/samcoupe/drive/drive.h,BUSES["SAMCOUPE_DRIVE_PORT"] = true
|
||||||
|
@ -935,6 +935,7 @@ BUSES["QBUS"] = true
|
|||||||
BUSES["RS232"] = true
|
BUSES["RS232"] = true
|
||||||
BUSES["RTPC_KBD"] = true
|
BUSES["RTPC_KBD"] = true
|
||||||
BUSES["S100"] = true
|
BUSES["S100"] = true
|
||||||
|
BUSES["SAITEK_OSA"] = true
|
||||||
BUSES["SAMCOUPE_DRIVE_PORT"] = true
|
BUSES["SAMCOUPE_DRIVE_PORT"] = true
|
||||||
BUSES["SAMCOUPE_EXPANSION"] = true
|
BUSES["SAMCOUPE_EXPANSION"] = true
|
||||||
BUSES["SAMCOUPE_MOUSE_PORT"] = true
|
BUSES["SAMCOUPE_MOUSE_PORT"] = true
|
||||||
|
127
src/devices/bus/saitek_osa/expansion.cpp
Normal file
127
src/devices/bus/saitek_osa/expansion.cpp
Normal file
@ -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()
|
||||||
|
{
|
||||||
|
}
|
117
src/devices/bus/saitek_osa/expansion.h
Normal file
117
src/devices/bus/saitek_osa/expansion.h
Normal file
@ -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
|
54
src/devices/bus/saitek_osa/maestroa.cpp
Normal file
54
src/devices/bus/saitek_osa/maestroa.cpp
Normal file
@ -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)
|
||||||
|
{
|
||||||
|
}
|
40
src/devices/bus/saitek_osa/maestroa.h
Normal file
40
src/devices/bus/saitek_osa/maestroa.h
Normal file
@ -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
|
17
src/devices/bus/saitek_osa/modules.cpp
Normal file
17
src/devices/bus/saitek_osa/modules.cpp
Normal file
@ -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);
|
||||||
|
}
|
16
src/devices/bus/saitek_osa/modules.h
Normal file
16
src/devices/bus/saitek_osa/modules.h
Normal file
@ -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
|
@ -90,14 +90,14 @@ void samcoupe_expansion_device::iorq_w(offs_t offset, uint8_t data)
|
|||||||
|
|
||||||
WRITE_LINE_MEMBER( samcoupe_expansion_device::xmem_w )
|
WRITE_LINE_MEMBER( samcoupe_expansion_device::xmem_w )
|
||||||
{
|
{
|
||||||
if (m_module)
|
if (m_module)
|
||||||
m_module->xmem_w(state);
|
m_module->xmem_w(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE_LINE_MEMBER( samcoupe_expansion_device::print_w )
|
WRITE_LINE_MEMBER( samcoupe_expansion_device::print_w )
|
||||||
{
|
{
|
||||||
if (m_module)
|
if (m_module)
|
||||||
m_module->print_w(state);
|
m_module->print_w(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,6 +66,10 @@ There are no other known external port peripherals.
|
|||||||
The Brikett was also used in the 1983 Mephisto Excalibur, but the hardware
|
The Brikett was also used in the 1983 Mephisto Excalibur, but the hardware
|
||||||
is completely different, based on a 68000.
|
is completely different, based on a 68000.
|
||||||
|
|
||||||
|
BTANB:
|
||||||
|
- bad bug in mephistoj opening library: e4 e6 / d4 d5 / Nd2 c5 / exd5 Qd1xd5,
|
||||||
|
in other words: computer makes an illegal move with the WHITE queen
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
@ -42,7 +42,6 @@ Expansion modules released:
|
|||||||
- Sparc (SPARClite, Spracklen's)
|
- Sparc (SPARClite, Spracklen's)
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- OSA module support (softwarelist, devices/bus)
|
|
||||||
- OSA PC link (probably uses MCU serial interface)
|
- OSA PC link (probably uses MCU serial interface)
|
||||||
- add nvram
|
- add nvram
|
||||||
- finish internal artwork
|
- finish internal artwork
|
||||||
@ -51,9 +50,10 @@ TODO:
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "bus/saitek_osa/expansion.h"
|
||||||
#include "cpu/m6800/m6801.h"
|
#include "cpu/m6800/m6801.h"
|
||||||
#include "machine/sensorboard.h"
|
#include "machine/sensorboard.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/spkrdev.h"
|
||||||
#include "video/pwm.h"
|
#include "video/pwm.h"
|
||||||
|
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
@ -70,6 +70,7 @@ public:
|
|||||||
leo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
leo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_expansion(*this, "exp"),
|
||||||
m_board(*this, "board"),
|
m_board(*this, "board"),
|
||||||
m_display(*this, "display"),
|
m_display(*this, "display"),
|
||||||
m_dac(*this, "dac"),
|
m_dac(*this, "dac"),
|
||||||
@ -85,9 +86,10 @@ protected:
|
|||||||
private:
|
private:
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<hd6303y_cpu_device> m_maincpu;
|
required_device<hd6303y_cpu_device> m_maincpu;
|
||||||
|
required_device<saitekosa_expansion_device> m_expansion;
|
||||||
required_device<sensorboard_device> m_board;
|
required_device<sensorboard_device> m_board;
|
||||||
required_device<pwm_display_device> m_display;
|
required_device<pwm_display_device> m_display;
|
||||||
optional_device<dac_bit_interface> m_dac;
|
optional_device<speaker_sound_device> m_dac;
|
||||||
required_ioport_array<9> m_inputs;
|
required_ioport_array<9> m_inputs;
|
||||||
|
|
||||||
void main_map(address_map &map);
|
void main_map(address_map &map);
|
||||||
@ -97,6 +99,7 @@ private:
|
|||||||
void leds_w(u8 data);
|
void leds_w(u8 data);
|
||||||
u8 unk_r();
|
u8 unk_r();
|
||||||
void unk_w(u8 data);
|
void unk_w(u8 data);
|
||||||
|
void exp_stb_w(int state);
|
||||||
|
|
||||||
u8 p2_r();
|
u8 p2_r();
|
||||||
void p2_w(u8 data);
|
void p2_w(u8 data);
|
||||||
@ -107,12 +110,14 @@ private:
|
|||||||
|
|
||||||
u8 m_inp_mux = 0;
|
u8 m_inp_mux = 0;
|
||||||
u8 m_led_data[2] = { 0, 0 };
|
u8 m_led_data[2] = { 0, 0 };
|
||||||
|
bool m_stb_enable = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
void leo_state::machine_start()
|
void leo_state::machine_start()
|
||||||
{
|
{
|
||||||
save_item(NAME(m_inp_mux));
|
save_item(NAME(m_inp_mux));
|
||||||
save_item(NAME(m_led_data));
|
save_item(NAME(m_led_data));
|
||||||
|
save_item(NAME(m_stb_enable));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -138,7 +143,7 @@ void leo_state::mux_w(u8 data)
|
|||||||
update_display();
|
update_display();
|
||||||
|
|
||||||
// d4: speaker out
|
// d4: speaker out
|
||||||
m_dac->write(BIT(data, 4));
|
m_dac->level_w(BIT(data, 4));
|
||||||
}
|
}
|
||||||
|
|
||||||
void leo_state::leds_w(u8 data)
|
void leo_state::leds_w(u8 data)
|
||||||
@ -159,6 +164,12 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// MCU ports
|
// MCU ports
|
||||||
|
|
||||||
@ -186,29 +197,38 @@ void leo_state::p2_w(u8 data)
|
|||||||
|
|
||||||
u8 leo_state::p5_r()
|
u8 leo_state::p5_r()
|
||||||
{
|
{
|
||||||
// ?
|
// d1: N/C, d4: IS strobe (handled with inputline)
|
||||||
return 0xff ^ 0x10;
|
return 0xff ^ 0x10;
|
||||||
}
|
}
|
||||||
|
|
||||||
void leo_state::p5_w(u8 data)
|
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(BIT(data, 3));
|
||||||
|
|
||||||
|
// d5: expansion ACK-P
|
||||||
|
m_expansion->ack_w(BIT(data, 5));
|
||||||
|
|
||||||
// d6,d7: chessboard led row data
|
// d6,d7: chessboard led row data
|
||||||
m_led_data[0] = (m_led_data[0] & 3) | (~data >> 4 & 0xc);
|
m_led_data[0] = (m_led_data[0] & 3) | (~data >> 4 & 0xc);
|
||||||
update_display();
|
update_display();
|
||||||
|
|
||||||
// d0: power-off
|
// d0: power-off
|
||||||
// other: ?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 leo_state::p6_r()
|
u8 leo_state::p6_r()
|
||||||
{
|
{
|
||||||
// read chessboard sensors
|
// read chessboard sensors and module data
|
||||||
return ~m_board->read_file(m_inp_mux & 0xf);
|
return ~m_board->read_file(m_inp_mux & 0xf) & m_expansion->data_r();
|
||||||
}
|
}
|
||||||
|
|
||||||
void leo_state::p6_w(u8 data)
|
void leo_state::p6_w(u8 data)
|
||||||
{
|
{
|
||||||
// module data
|
// module data
|
||||||
|
m_expansion->data_w(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -291,7 +311,7 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void leo_state::leo(machine_config &config)
|
void leo_state::leo(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
HD6303Y(config, m_maincpu, 12_MHz_XTAL);
|
HD6303Y(config, m_maincpu, 12_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &leo_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &leo_state::main_map);
|
||||||
m_maincpu->in_p2_cb().set(FUNC(leo_state::p2_r));
|
m_maincpu->in_p2_cb().set(FUNC(leo_state::p2_r));
|
||||||
@ -305,13 +325,17 @@ void leo_state::leo(machine_config &config)
|
|||||||
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
||||||
m_board->set_delay(attotime::from_msec(150));
|
m_board->set_delay(attotime::from_msec(150));
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
PWM_DISPLAY(config, m_display).set_size(8+2, 8+2);
|
PWM_DISPLAY(config, m_display).set_size(8+2, 8+2);
|
||||||
config.set_default_layout(layout_saitek_leonardo);
|
config.set_default_layout(layout_saitek_leonardo);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "speaker").front_center();
|
||||||
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
SPEAKER_SOUND(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||||
|
|
||||||
|
// expansion module
|
||||||
|
SAITEKOSA_EXPANSION(config, m_expansion, saitekosa_expansion_modules);
|
||||||
|
m_expansion->stb_handler().set(FUNC(leo_state::exp_stb_w));
|
||||||
}
|
}
|
||||||
|
|
||||||
void leo_state::leoa(machine_config &config)
|
void leo_state::leoa(machine_config &config)
|
||||||
|
@ -31,9 +31,10 @@ TODO:
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "bus/saitek_osa/expansion.h"
|
||||||
#include "cpu/m6800/m6801.h"
|
#include "cpu/m6800/m6801.h"
|
||||||
#include "machine/sensorboard.h"
|
#include "machine/sensorboard.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/spkrdev.h"
|
||||||
#include "video/pwm.h"
|
#include "video/pwm.h"
|
||||||
#include "video/sed1500.h"
|
#include "video/sed1500.h"
|
||||||
|
|
||||||
@ -52,6 +53,7 @@ public:
|
|||||||
ren_state(const machine_config &mconfig, device_type type, const char *tag) :
|
ren_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_expansion(*this, "exp"),
|
||||||
m_board(*this, "board"),
|
m_board(*this, "board"),
|
||||||
m_display(*this, "display"),
|
m_display(*this, "display"),
|
||||||
m_lcd_pwm(*this, "lcd_pwm"),
|
m_lcd_pwm(*this, "lcd_pwm"),
|
||||||
@ -70,11 +72,12 @@ protected:
|
|||||||
private:
|
private:
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<hd6303y_cpu_device> m_maincpu;
|
required_device<hd6303y_cpu_device> m_maincpu;
|
||||||
|
required_device<saitekosa_expansion_device> m_expansion;
|
||||||
required_device<sensorboard_device> m_board;
|
required_device<sensorboard_device> m_board;
|
||||||
required_device<pwm_display_device> m_display;
|
required_device<pwm_display_device> m_display;
|
||||||
required_device<pwm_display_device> m_lcd_pwm;
|
required_device<pwm_display_device> m_lcd_pwm;
|
||||||
required_device<sed1502_device> m_lcd;
|
required_device<sed1502_device> m_lcd;
|
||||||
optional_device<dac_bit_interface> m_dac;
|
optional_device<speaker_sound_device> m_dac;
|
||||||
required_ioport_array<8+1> m_inputs;
|
required_ioport_array<8+1> m_inputs;
|
||||||
output_finder<16, 34> m_out_lcd;
|
output_finder<16, 34> m_out_lcd;
|
||||||
|
|
||||||
@ -156,7 +159,7 @@ void ren_state::leds_w(u8 data)
|
|||||||
void ren_state::control_w(u8 data)
|
void ren_state::control_w(u8 data)
|
||||||
{
|
{
|
||||||
// d1: speaker out
|
// d1: speaker out
|
||||||
m_dac->write(BIT(data, 1));
|
m_dac->level_w(BIT(data, 1));
|
||||||
|
|
||||||
// d2,d3: comm/module leds?
|
// d2,d3: comm/module leds?
|
||||||
m_led_data[1] = (m_led_data[1] & ~0xc) | (~data & 0xc);
|
m_led_data[1] = (m_led_data[1] & ~0xc) | (~data & 0xc);
|
||||||
@ -301,7 +304,7 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void ren_state::ren(machine_config &config)
|
void ren_state::ren(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
HD6303Y(config, m_maincpu, 10_MHz_XTAL);
|
HD6303Y(config, m_maincpu, 10_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &ren_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &ren_state::main_map);
|
||||||
m_maincpu->in_p2_cb().set(FUNC(ren_state::p2_r));
|
m_maincpu->in_p2_cb().set(FUNC(ren_state::p2_r));
|
||||||
@ -315,7 +318,7 @@ void ren_state::ren(machine_config &config)
|
|||||||
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
||||||
m_board->set_delay(attotime::from_msec(150));
|
m_board->set_delay(attotime::from_msec(150));
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
SED1502(config, m_lcd, 32768).write_segs().set(FUNC(ren_state::lcd_output_w));
|
SED1502(config, m_lcd, 32768).write_segs().set(FUNC(ren_state::lcd_output_w));
|
||||||
PWM_DISPLAY(config, m_lcd_pwm).set_size(16, 34);
|
PWM_DISPLAY(config, m_lcd_pwm).set_size(16, 34);
|
||||||
m_lcd_pwm->set_refresh(attotime::from_hz(30));
|
m_lcd_pwm->set_refresh(attotime::from_hz(30));
|
||||||
@ -329,9 +332,12 @@ void ren_state::ren(machine_config &config)
|
|||||||
PWM_DISPLAY(config, m_display).set_size(9+1, 9);
|
PWM_DISPLAY(config, m_display).set_size(9+1, 9);
|
||||||
config.set_default_layout(layout_saitek_renaissance);
|
config.set_default_layout(layout_saitek_renaissance);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "speaker").front_center();
|
||||||
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
SPEAKER_SOUND(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
|
||||||
|
|
||||||
|
// expansion module
|
||||||
|
SAITEKOSA_EXPANSION(config, m_expansion, saitekosa_expansion_modules);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user