mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
(MESS) pet: Added user port diagnostic connector. [Curt Coder]
This commit is contained in:
parent
123dedd41a
commit
6c6b08a833
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -1148,6 +1148,8 @@ src/emu/bus/pet/c2n.c svneol=native#text/plain
|
||||
src/emu/bus/pet/c2n.h svneol=native#text/plain
|
||||
src/emu/bus/pet/cass.c svneol=native#text/plain
|
||||
src/emu/bus/pet/cass.h svneol=native#text/plain
|
||||
src/emu/bus/pet/diag.c svneol=native#text/plain
|
||||
src/emu/bus/pet/diag.h svneol=native#text/plain
|
||||
src/emu/bus/pet/diag264_lb_tape.c svneol=native#text/plain
|
||||
src/emu/bus/pet/diag264_lb_tape.h svneol=native#text/plain
|
||||
src/emu/bus/pet/exp.c svneol=native#text/plain
|
||||
|
@ -448,6 +448,7 @@ BUSOBJS += $(BUSOBJ)/pet/exp.o
|
||||
BUSOBJS += $(BUSOBJ)/pet/64k.o
|
||||
BUSOBJS += $(BUSOBJ)/pet/superpet.o
|
||||
BUSOBJS += $(BUSOBJ)/pet/user.o
|
||||
BUSOBJS += $(BUSOBJ)/pet/diag.o
|
||||
BUSOBJS += $(BUSOBJ)/pet/petuja.o
|
||||
endif
|
||||
|
||||
|
47
src/emu/bus/pet/diag.c
Normal file
47
src/emu/bus/pet/diag.c
Normal file
@ -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);
|
||||
}
|
60
src/emu/bus/pet/diag.h
Normal file
60
src/emu/bus/pet/diag.h
Normal file
@ -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
|
@ -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
|
||||
|
@ -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 ) {}
|
||||
|
@ -921,7 +921,7 @@ READ8_MEMBER( pet_state::pia1_pa_r )
|
||||
data |= m_ieee->eoi_r() << 6;
|
||||
|
||||
// diagnostic jumper
|
||||
data |= m_exp->diag_r() << 7;
|
||||
data |= (m_user_diag && m_exp->diag_r()) << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -1015,6 +1015,12 @@ WRITE_LINE_MEMBER( pet_state::pia2_irqb_w )
|
||||
check_interrupts();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( pet_state::user_diag_w )
|
||||
{
|
||||
m_user_diag = state;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// VIDEO
|
||||
@ -1300,6 +1306,7 @@ MACHINE_START_MEMBER( pet_state, pet )
|
||||
save_item(NAME(m_pia2a_irq));
|
||||
save_item(NAME(m_pia2b_irq));
|
||||
save_item(NAME(m_exp_irq));
|
||||
save_item(NAME(m_user_diag));
|
||||
}
|
||||
|
||||
|
||||
@ -1499,6 +1506,7 @@ static MACHINE_CONFIG_START( pet, pet_state )
|
||||
MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
|
||||
|
||||
MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, pet_user_port_cards, NULL)
|
||||
MCFG_PET_USER_PORT_5_HANDLER(WRITELINE(pet_state, user_diag_w))
|
||||
MCFG_PET_USER_PORT_B_HANDLER(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||
MCFG_PET_USER_PORT_C_HANDLER(DEVWRITELINE(M6522_TAG, via6522_device, write_pa0))
|
||||
MCFG_PET_USER_PORT_D_HANDLER(DEVWRITELINE(M6522_TAG, via6522_device, write_pa1))
|
||||
|
@ -33,8 +33,8 @@
|
||||
class pet_state : public driver_device
|
||||
{
|
||||
public:
|
||||
pet_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
pet_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, M6502_TAG),
|
||||
m_via(*this, M6522_TAG),
|
||||
m_pia1(*this, M6520_1_TAG),
|
||||
@ -71,7 +71,8 @@ public:
|
||||
m_pia1b_irq(CLEAR_LINE),
|
||||
m_pia2a_irq(CLEAR_LINE),
|
||||
m_pia2b_irq(CLEAR_LINE),
|
||||
m_exp_irq(CLEAR_LINE)
|
||||
m_exp_irq(CLEAR_LINE),
|
||||
m_user_diag(1)
|
||||
{ }
|
||||
|
||||
required_device<m6502_device> m_maincpu;
|
||||
@ -133,6 +134,8 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( pia2_irqa_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( pia2_irqb_w );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( user_diag_w );
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER( sync_tick );
|
||||
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER( cbm_pet );
|
||||
@ -179,6 +182,7 @@ public:
|
||||
int m_pia2a_irq;
|
||||
int m_pia2b_irq;
|
||||
int m_exp_irq;
|
||||
int m_user_diag;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user