diff options
Diffstat (limited to 'src/emu/bus/pet')
-rw-r--r-- | src/emu/bus/pet/diag.c | 47 | ||||
-rw-r--r-- | src/emu/bus/pet/diag.h | 60 | ||||
-rw-r--r-- | src/emu/bus/pet/user.c | 8 | ||||
-rw-r--r-- | src/emu/bus/pet/user.h | 16 |
4 files changed, 131 insertions, 0 deletions
diff --git a/src/emu/bus/pet/diag.c b/src/emu/bus/pet/diag.c new file mode 100644 index 00000000000..653b2c2af3f --- /dev/null +++ b/src/emu/bus/pet/diag.c @@ -0,0 +1,47 @@ +// license:BSD-3-Clause +// copyright-holders:smf +/********************************************************************** + + Commodore PET User Port Diagnostic Connector emulation + + Copyright MESS Team. + Visit http://mamedev.org for licensing and usage restrictions. + +**********************************************************************/ + +#include "diag.h" + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type PET_USERPORT_DIAGNOSTIC_CONNECTOR = &device_creator<pet_userport_diagnostic_connector_t>; + + + +//************************************************************************** +// LIVE DEVICE +//************************************************************************** + +//------------------------------------------------- +// pet_userport_diagnostic_connector_t - constructor +//------------------------------------------------- + +pet_userport_diagnostic_connector_t::pet_userport_diagnostic_connector_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : + device_t(mconfig, PET_USERPORT_DIAGNOSTIC_CONNECTOR, "PET Userport Diagnostic Connector", tag, owner, clock, "pet_user_diag", __FILE__), + device_pet_user_port_interface(mconfig, *this) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void pet_userport_diagnostic_connector_t::device_start() +{ + output_5(0); + output_e(0); +} diff --git a/src/emu/bus/pet/diag.h b/src/emu/bus/pet/diag.h new file mode 100644 index 00000000000..7a5752bdc86 --- /dev/null +++ b/src/emu/bus/pet/diag.h @@ -0,0 +1,60 @@ +// license:BSD-3-Clause +// copyright-holders:smf +/********************************************************************** + + Commodore PET User Port Diagnostic Connector emulation + + Copyright MESS Team. + Visit http://mamedev.org for licensing and usage restrictions. + +**********************************************************************/ + +#pragma once + +#ifndef __PET_USER_DIAG__ +#define __PET_USER_DIAG__ + +#include "emu.h" +#include "user.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> pet_userport_diagnostic_connector_t + +class pet_userport_diagnostic_connector_t : public device_t, + public device_pet_user_port_interface +{ +public: + // construction/destruction + pet_userport_diagnostic_connector_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device_pet_user_port_interface overrides + virtual DECLARE_WRITE_LINE_MEMBER( input_2 ) { output_b(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_3 ) { output_c(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_4 ) { output_d(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_6 ) { output_7(state); output_8(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_7 ) { output_6(state); output_8(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_8 ) { output_6(state); output_7(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_9 ) { output_k(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_10 ) { output_l(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_b ) { output_2(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_c ) { output_3(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_d ) { output_4(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_k ) { output_9(state); } + virtual DECLARE_WRITE_LINE_MEMBER( input_l ) { output_10(state); } + +protected: + // device-level overrides + virtual void device_start(); +}; + + +// device type definition +extern const device_type PET_USERPORT_DIAGNOSTIC_CONNECTOR; + + +#endif diff --git a/src/emu/bus/pet/user.c b/src/emu/bus/pet/user.c index 998974d0ab4..d6f8252230e 100644 --- a/src/emu/bus/pet/user.c +++ b/src/emu/bus/pet/user.c @@ -18,6 +18,7 @@ const device_type PET_USER_PORT = &device_creator<pet_user_port_device>; pet_user_port_device::pet_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, PET_USER_PORT, "PET user port", tag, owner, clock, "pet_user_port", __FILE__), device_slot_interface(mconfig, *this), + m_2_handler(*this), m_3_handler(*this), m_4_handler(*this), m_5_handler(*this), @@ -25,6 +26,7 @@ pet_user_port_device::pet_user_port_device(const machine_config &mconfig, const m_7_handler(*this), m_8_handler(*this), m_9_handler(*this), + m_10_handler(*this), m_b_handler(*this), m_c_handler(*this), m_d_handler(*this), @@ -46,6 +48,7 @@ void pet_user_port_device::device_config_complete() void pet_user_port_device::device_start() { + m_2_handler.resolve_safe(); m_3_handler.resolve_safe(); m_4_handler.resolve_safe(); m_5_handler.resolve_safe(); @@ -53,6 +56,7 @@ void pet_user_port_device::device_start() m_7_handler.resolve_safe(); m_8_handler.resolve_safe(); m_9_handler.resolve_safe(); + m_10_handler.resolve_safe(); m_b_handler.resolve_safe(); m_c_handler.resolve_safe(); m_d_handler.resolve_safe(); @@ -84,6 +88,7 @@ void pet_user_port_device::device_start() m_m_handler(1); } +WRITE_LINE_MEMBER( pet_user_port_device::write_2 ) { if (m_card != NULL) m_card->input_2(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_3 ) { if (m_card != NULL) m_card->input_3(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_4 ) { if (m_card != NULL) m_card->input_4(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_5 ) { if (m_card != NULL) m_card->input_5(state); } @@ -91,6 +96,7 @@ WRITE_LINE_MEMBER( pet_user_port_device::write_6 ) { if (m_card != NULL) m_card- WRITE_LINE_MEMBER( pet_user_port_device::write_7 ) { if (m_card != NULL) m_card->input_7(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_8 ) { if (m_card != NULL) m_card->input_8(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_9 ) { if (m_card != NULL) m_card->input_9(state); } +WRITE_LINE_MEMBER( pet_user_port_device::write_10 ) { if (m_card != NULL) m_card->input_10(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_b ) { if (m_card != NULL) m_card->input_b(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_c ) { if (m_card != NULL) m_card->input_c(state); } WRITE_LINE_MEMBER( pet_user_port_device::write_d ) { if (m_card != NULL) m_card->input_d(state); } @@ -116,8 +122,10 @@ device_pet_user_port_interface::~device_pet_user_port_interface() } +#include "diag.h" #include "petuja.h" SLOT_INTERFACE_START( pet_user_port_cards ) + SLOT_INTERFACE("diag", PET_USERPORT_DIAGNOSTIC_CONNECTOR) SLOT_INTERFACE("petuja", PET_USERPORT_JOYSTICK_ADAPTER) SLOT_INTERFACE_END diff --git a/src/emu/bus/pet/user.h b/src/emu/bus/pet/user.h index 4dfec4805c1..8edd633ece5 100644 --- a/src/emu/bus/pet/user.h +++ b/src/emu/bus/pet/user.h @@ -36,6 +36,9 @@ MCFG_DEVICE_ADD(_tag, PET_USER_PORT, 0) \ MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) +#define MCFG_PET_USER_PORT_2_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_2_handler(*device, DEVCB2_##_devcb); + #define MCFG_PET_USER_PORT_3_HANDLER(_devcb) \ devcb = &pet_user_port_device::set_3_handler(*device, DEVCB2_##_devcb); @@ -57,6 +60,9 @@ #define MCFG_PET_USER_PORT_9_HANDLER(_devcb) \ devcb = &pet_user_port_device::set_9_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_10_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_10_handler(*device, DEVCB2_##_devcb); + #define MCFG_PET_USER_PORT_B_HANDLER(_devcb) \ devcb = &pet_user_port_device::set_b_handler(*device, DEVCB2_##_devcb); @@ -100,6 +106,7 @@ class pet_user_port_device : public device_t, public: pet_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _Object> static devcb2_base &set_2_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_2_handler.set_callback(object); } template<class _Object> static devcb2_base &set_3_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_3_handler.set_callback(object); } template<class _Object> static devcb2_base &set_4_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_4_handler.set_callback(object); } template<class _Object> static devcb2_base &set_5_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_5_handler.set_callback(object); } @@ -107,6 +114,7 @@ public: template<class _Object> static devcb2_base &set_7_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_7_handler.set_callback(object); } template<class _Object> static devcb2_base &set_8_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_8_handler.set_callback(object); } template<class _Object> static devcb2_base &set_9_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_9_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_10_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_10_handler.set_callback(object); } template<class _Object> static devcb2_base &set_b_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_b_handler.set_callback(object); } template<class _Object> static devcb2_base &set_c_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_c_handler.set_callback(object); } template<class _Object> static devcb2_base &set_d_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_d_handler.set_callback(object); } @@ -118,6 +126,7 @@ public: template<class _Object> static devcb2_base &set_l_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_l_handler.set_callback(object); } template<class _Object> static devcb2_base &set_m_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_m_handler.set_callback(object); } + DECLARE_WRITE_LINE_MEMBER( write_2 ); DECLARE_WRITE_LINE_MEMBER( write_3 ); DECLARE_WRITE_LINE_MEMBER( write_4 ); DECLARE_WRITE_LINE_MEMBER( write_5 ); @@ -125,6 +134,7 @@ public: DECLARE_WRITE_LINE_MEMBER( write_7 ); DECLARE_WRITE_LINE_MEMBER( write_8 ); DECLARE_WRITE_LINE_MEMBER( write_9 ); + DECLARE_WRITE_LINE_MEMBER( write_10 ); DECLARE_WRITE_LINE_MEMBER( write_b ); DECLARE_WRITE_LINE_MEMBER( write_c ); DECLARE_WRITE_LINE_MEMBER( write_d ); @@ -141,6 +151,7 @@ protected: virtual void device_config_complete(); virtual void device_start(); + devcb2_write_line m_2_handler; devcb2_write_line m_3_handler; devcb2_write_line m_4_handler; devcb2_write_line m_5_handler; @@ -148,6 +159,7 @@ protected: devcb2_write_line m_7_handler; devcb2_write_line m_8_handler; devcb2_write_line m_9_handler; + devcb2_write_line m_10_handler; devcb2_write_line m_b_handler; devcb2_write_line m_c_handler; devcb2_write_line m_d_handler; @@ -172,6 +184,7 @@ public: device_pet_user_port_interface(const machine_config &mconfig, device_t &device); virtual ~device_pet_user_port_interface(); + DECLARE_WRITE_LINE_MEMBER( output_2 ) { m_slot->m_2_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_3 ) { m_slot->m_3_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_4 ) { m_slot->m_4_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_5 ) { m_slot->m_5_handler(state); } @@ -179,6 +192,7 @@ public: DECLARE_WRITE_LINE_MEMBER( output_7 ) { m_slot->m_7_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_8 ) { m_slot->m_8_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_9 ) { m_slot->m_9_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_10 ) { m_slot->m_10_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_b ) { m_slot->m_b_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_c ) { m_slot->m_c_handler(state); } DECLARE_WRITE_LINE_MEMBER( output_d ) { m_slot->m_d_handler(state); } @@ -191,6 +205,7 @@ public: DECLARE_WRITE_LINE_MEMBER( output_m ) { m_slot->m_m_handler(state); } protected: + virtual DECLARE_WRITE_LINE_MEMBER( input_2 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_3 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_4 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_5 ) {} @@ -198,6 +213,7 @@ protected: virtual DECLARE_WRITE_LINE_MEMBER( input_7 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_8 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_9 ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_10 ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_b ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_c ) {} virtual DECLARE_WRITE_LINE_MEMBER( input_d ) {} |