summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/pet
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/bus/pet')
-rw-r--r--src/emu/bus/pet/diag.c47
-rw-r--r--src/emu/bus/pet/diag.h60
-rw-r--r--src/emu/bus/pet/user.c8
-rw-r--r--src/emu/bus/pet/user.h16
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 ) {}