mirror of
https://github.com/holub/mame
synced 2025-04-21 16:01:56 +03:00
vsmile: add skeleton controller bus
This commit is contained in:
parent
84e83a8bbc
commit
57d9f16115
@ -3270,7 +3270,7 @@ end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/vsmile/vsmile_slot.h,BUSES["VSMILE"] = true
|
||||
--@src/devices/bus/vsmile/vsmile_slot.h,BUSES["VSMILE_SLOT"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["VSMILE"]~=null) then
|
||||
@ -3282,6 +3282,25 @@ if (BUSES["VSMILE"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/vsmile/vsmile_ctrl.h,BUSES["VSMILE"] = true
|
||||
--@src/devices/bus/vsmile/vsmile_slot.h,BUSES["VSMILE"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["VSMILE"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/vsmile/vsmile_ctrl.cpp",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/vsmile_ctrl.h",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/vsmile_slot.cpp",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/vsmile_slot.h",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/joystick.cpp",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/joystick.h",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/rom.cpp",
|
||||
MAME_DIR .. "src/devices/bus/vsmile/rom.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/vtech/memexp/memexp.h,BUSES["VTECH_MEMEXP"] = true
|
||||
|
46
src/devices/bus/vsmile/joystick.cpp
Normal file
46
src/devices/bus/vsmile/joystick.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
|
||||
#include "emu.h"
|
||||
#include "joystick.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(VSMILE_JOYSTICK, vsmile_joystick_device, "vsmile_joystick", "V.Smile Joystick Controller")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// V.Smile joystick controller
|
||||
//**************************************************************************
|
||||
|
||||
vsmile_joystick_device::vsmile_joystick_device(
|
||||
machine_config const &mconfig,
|
||||
char const *tag,
|
||||
device_t *owner,
|
||||
uint32_t clock)
|
||||
: device_t(mconfig, VSMILE_JOYSTICK, tag, owner, clock)
|
||||
, device_vsmile_ctrl_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
vsmile_joystick_device::~vsmile_joystick_device()
|
||||
{
|
||||
}
|
||||
|
||||
void vsmile_joystick_device::device_start()
|
||||
{
|
||||
// TODO: initialise and register save state
|
||||
}
|
||||
|
||||
void vsmile_joystick_device::cts_w(int state)
|
||||
{
|
||||
// TODO: CTS input changed
|
||||
}
|
||||
|
||||
void vsmile_joystick_device::data_w(uint8_t data)
|
||||
{
|
||||
// TODO: data arrived
|
||||
}
|
39
src/devices/bus/vsmile/joystick.h
Normal file
39
src/devices/bus/vsmile/joystick.h
Normal file
@ -0,0 +1,39 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
#ifndef MAME_BUS_VSMILE_JOYSTICK_H
|
||||
#define MAME_BUS_VSMILE_JOYSTICK_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "vsmile_ctrl.h"
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
// ======================> vsmile_joystick_device
|
||||
|
||||
class vsmile_joystick_device : public device_t, public device_vsmile_ctrl_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
vsmile_joystick_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
|
||||
virtual ~vsmile_joystick_device();
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_start() override;
|
||||
|
||||
// device_vsmile_ctrl_interface implementation
|
||||
virtual void cts_w(int state) override;
|
||||
virtual void data_w(uint8_t data) override;
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE TYPES
|
||||
***************************************************************************/
|
||||
|
||||
DECLARE_DEVICE_TYPE(VSMILE_JOYSTICK, vsmile_joystick_device)
|
||||
|
||||
#endif // MAME_BUS_VSMILE_JOYSTICK_H
|
111
src/devices/bus/vsmile/vsmile_ctrl.cpp
Normal file
111
src/devices/bus/vsmile/vsmile_ctrl.cpp
Normal file
@ -0,0 +1,111 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
|
||||
#include "emu.h"
|
||||
#include "vsmile_ctrl.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(VSMILE_CTRL_PORT, vsmile_ctrl_port_device, "vsmile_ctrl_port", "V.Smile Controller Port")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// V.Smile controller interface
|
||||
//**************************************************************************
|
||||
|
||||
device_vsmile_ctrl_interface::device_vsmile_ctrl_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig, device)
|
||||
, m_port(dynamic_cast<vsmile_ctrl_port_device *>(device.owner()))
|
||||
{
|
||||
}
|
||||
|
||||
device_vsmile_ctrl_interface::~device_vsmile_ctrl_interface()
|
||||
{
|
||||
}
|
||||
|
||||
void device_vsmile_ctrl_interface::interface_validity_check(validity_checker &valid) const
|
||||
{
|
||||
device_slot_card_interface::interface_validity_check(valid);
|
||||
|
||||
if (device().owner() && !m_port)
|
||||
{
|
||||
osd_printf_error(
|
||||
"Owner device %s (%s) is not a vsmile_ctrl_port_device\n",
|
||||
device().owner()->tag(),
|
||||
device().owner()->name());
|
||||
}
|
||||
}
|
||||
|
||||
void device_vsmile_ctrl_interface::interface_pre_start()
|
||||
{
|
||||
device_slot_card_interface::interface_pre_start();
|
||||
|
||||
if (m_port && !m_port->started())
|
||||
throw device_missing_dependencies();
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// V.Smile controller port
|
||||
//**************************************************************************
|
||||
|
||||
vsmile_ctrl_port_device::vsmile_ctrl_port_device(
|
||||
machine_config const &mconfig,
|
||||
char const *tag,
|
||||
device_t *owner,
|
||||
uint32_t clock)
|
||||
: device_t(mconfig, VSMILE_CTRL_PORT, tag, owner, clock)
|
||||
, device_slot_interface(mconfig, *this)
|
||||
, m_rts_cb(*this)
|
||||
, m_data_cb(*this)
|
||||
{
|
||||
}
|
||||
|
||||
vsmile_ctrl_port_device::~vsmile_ctrl_port_device()
|
||||
{
|
||||
}
|
||||
|
||||
void vsmile_ctrl_port_device::device_validity_check(validity_checker &valid) const
|
||||
{
|
||||
device_t *const card(get_card_device());
|
||||
if (card && !dynamic_cast<device_vsmile_ctrl_interface *>(card))
|
||||
{
|
||||
osd_printf_error(
|
||||
"Card device %s (%s) does not implement device_vsmile_ctrl_interface\n",
|
||||
card->tag(),
|
||||
card->name());
|
||||
}
|
||||
}
|
||||
|
||||
void vsmile_ctrl_port_device::device_resolve_objects()
|
||||
{
|
||||
device_vsmile_ctrl_interface *const card(dynamic_cast<device_vsmile_ctrl_interface *>(get_card_device()));
|
||||
if (card)
|
||||
m_device = card;
|
||||
|
||||
m_rts_cb.resolve_safe();
|
||||
m_data_cb.resolve_safe();
|
||||
}
|
||||
|
||||
void vsmile_ctrl_port_device::device_start()
|
||||
{
|
||||
device_t *const card(get_card_device());
|
||||
if (card && !m_device)
|
||||
{
|
||||
throw emu_fatalerror(
|
||||
"vsmile_ctrl_port_device: card device %s (%s) does not implement device_vsmile_ctrl_interface\n",
|
||||
card->tag(),
|
||||
card->name());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "joystick.h"
|
||||
|
||||
void vsmile_controllers(device_slot_interface &device)
|
||||
{
|
||||
device.option_add("joy", VSMILE_JOYSTICK);
|
||||
}
|
111
src/devices/bus/vsmile/vsmile_ctrl.h
Normal file
111
src/devices/bus/vsmile/vsmile_ctrl.h
Normal file
@ -0,0 +1,111 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
#ifndef MAME_BUS_VSMILE_VSMILE_CTRL_H
|
||||
#define MAME_BUS_VSMILE_VSMILE_CTRL_H
|
||||
|
||||
#pragma once
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
FORWARD DECLARATIONS
|
||||
***************************************************************************/
|
||||
|
||||
class vsmile_ctrl_port_device;
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
// ======================> device_vsmile_ctrl_interface
|
||||
|
||||
class device_vsmile_ctrl_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
virtual ~device_vsmile_ctrl_interface();
|
||||
|
||||
protected:
|
||||
device_vsmile_ctrl_interface(machine_config const &mconfig, device_t &device);
|
||||
|
||||
// device_interface implementation
|
||||
virtual void interface_validity_check(validity_checker &valid) const override ATTR_COLD;
|
||||
virtual void interface_pre_start() override;
|
||||
|
||||
// otuput signals
|
||||
void rts_out(int state);
|
||||
void data_out(uint8_t data);
|
||||
|
||||
private:
|
||||
// input signal handlers for implementataions to override
|
||||
virtual void cts_w(int state) = 0;
|
||||
virtual void data_w(uint8_t data) = 0;
|
||||
|
||||
vsmile_ctrl_port_device *const m_port;
|
||||
|
||||
friend class vsmile_ctrl_port_device;
|
||||
};
|
||||
|
||||
|
||||
// ======================> vsmile_ctrl_port_device
|
||||
|
||||
class vsmile_ctrl_port_device : public device_t, public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// configuration
|
||||
auto rts_cb() { return m_rts_cb.bind(); }
|
||||
auto data_cb() { return m_data_cb.bind(); }
|
||||
|
||||
// construction/destruction
|
||||
template <typename T>
|
||||
vsmile_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
|
||||
: vsmile_ctrl_port_device(mconfig, tag, owner, 0U)
|
||||
{
|
||||
option_reset();
|
||||
opts(*this);
|
||||
set_default_option(dflt);
|
||||
set_fixed(false);
|
||||
}
|
||||
vsmile_ctrl_port_device(machine_config const &mconfig, char const *tag, device_t *owner, uint32_t clock = 0U);
|
||||
virtual ~vsmile_ctrl_port_device();
|
||||
|
||||
// input signals
|
||||
void cts_w(int state) { if (m_device) m_device->cts_w(state); }
|
||||
void data_w(uint8_t data) { if (m_device) m_device->data_w(data); }
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_validity_check(validity_checker &valid) const override ATTR_COLD;
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
device_vsmile_ctrl_interface *m_device;
|
||||
devcb_write_line m_rts_cb;
|
||||
devcb_write8 m_data_cb;
|
||||
|
||||
friend class device_vsmile_ctrl_interface;
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
INLINE FUNCTIONS
|
||||
***************************************************************************/
|
||||
|
||||
inline void device_vsmile_ctrl_interface::rts_out(int state) { m_port->m_rts_cb(state); }
|
||||
inline void device_vsmile_ctrl_interface::data_out(uint8_t data) { m_port->m_data_cb(data); }
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
FUNCTIONS
|
||||
***************************************************************************/
|
||||
|
||||
void vsmile_controllers(device_slot_interface &device);
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE TYPES
|
||||
***************************************************************************/
|
||||
|
||||
DECLARE_DEVICE_TYPE(VSMILE_CTRL_PORT, vsmile_ctrl_port_device)
|
||||
|
||||
#endif // MAME_BUS_VSMILE_VSMILE_CTRL_H
|
@ -21,6 +21,7 @@
|
||||
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "bus/vsmile/vsmile_ctrl.h"
|
||||
#include "bus/vsmile/vsmile_slot.h"
|
||||
#include "bus/vsmile/rom.h"
|
||||
|
||||
@ -63,6 +64,7 @@ public:
|
||||
vsmile_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: vsmile_base_state(mconfig, type, tag)
|
||||
, m_cart(*this, "cartslot")
|
||||
, m_ctrl(*this, "ctrl%u", 1U)
|
||||
, m_io_joy(*this, "JOY")
|
||||
, m_io_colors(*this, "COLORS")
|
||||
, m_io_buttons(*this, "BUTTONS")
|
||||
@ -123,6 +125,7 @@ private:
|
||||
};
|
||||
|
||||
required_device<vsmile_cart_slot_device> m_cart;
|
||||
required_device_array<vsmile_ctrl_port_device, 2> m_ctrl;
|
||||
required_ioport m_io_joy;
|
||||
required_ioport m_io_colors;
|
||||
required_ioport m_io_buttons;
|
||||
@ -602,6 +605,14 @@ void vsmile_state::vsmile(machine_config &config)
|
||||
|
||||
VSMILE_CART_SLOT(config, m_cart, vsmile_cart, nullptr);
|
||||
|
||||
VSMILE_CTRL_PORT(config, m_ctrl[0], vsmile_controllers, "joy");
|
||||
m_ctrl[0]->rts_cb().set([this] (int state) { logerror("controller 1 RTS: %d\n", state); });
|
||||
m_ctrl[0]->data_cb().set([this] (int data) { logerror("controller 1 data: %02X\n", data); });
|
||||
|
||||
VSMILE_CTRL_PORT(config, m_ctrl[1], vsmile_controllers, nullptr);
|
||||
m_ctrl[1]->rts_cb().set([this] (int state) { logerror("controller 2 RTS: %d\n", state); });
|
||||
m_ctrl[1]->data_cb().set([this] (int data) { logerror("controller 2 data: %02X\n", data); });
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("vsmile_cart");
|
||||
SOFTWARE_LIST(config, "cart_list2").set_original("vsmilem_cart");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user