diff options
author | smf- <smf-@users.noreply.github.com> | 2014-01-04 05:01:35 +0000 |
---|---|---|
committer | smf- <smf-@users.noreply.github.com> | 2014-01-04 05:01:35 +0000 |
commit | 2872800e9e63cef3d63383f5efa145b205c255c5 (patch) | |
tree | 1dac8bc4c42ee5a675e4945592304f92cc84d496 /src/emu/bus/pet/user.h | |
parent | 4c427b3316173bb6c974f9b6aabd1675c1657c4e (diff) |
Merged pet/vic20/c64/plus4/c128 user ports, the pinout is slightly different on each one but there are cards that are compatible with each of the different machines. [smf]
Diffstat (limited to 'src/emu/bus/pet/user.h')
-rw-r--r-- | src/emu/bus/pet/user.h | 188 |
1 files changed, 140 insertions, 48 deletions
diff --git a/src/emu/bus/pet/user.h b/src/emu/bus/pet/user.h index 585268eb913..f19c753f086 100644 --- a/src/emu/bus/pet/user.h +++ b/src/emu/bus/pet/user.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Curt Coder +// copyright-holders:smf /********************************************************************** Commodore PET User Port emulation @@ -34,95 +34,189 @@ //************************************************************************** -// CONSTANTS +// INTERFACE CONFIGURATION MACROS //************************************************************************** -#define PET_USER_PORT_TAG "user" +#define MCFG_PET_USER_PORT_ADD(_tag, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, PET_USER_PORT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) +#define MCFG_PET_USER_PORT_3_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_3_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_4_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_4_handler(*device, DEVCB2_##_devcb); -//************************************************************************** -// INTERFACE CONFIGURATION MACROS -//************************************************************************** +#define MCFG_PET_USER_PORT_5_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_5_handler(*device, DEVCB2_##_devcb); -#define PET_USER_PORT_INTERFACE(_name) \ - const pet_user_port_interface (_name) = +#define MCFG_PET_USER_PORT_6_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_6_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_7_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_7_handler(*device, DEVCB2_##_devcb); -#define MCFG_PET_USER_PORT_ADD(_tag, _config, _slot_intf, _def_slot) \ - MCFG_DEVICE_ADD(_tag, PET_USER_PORT, 0) \ - MCFG_DEVICE_CONFIG(_config) \ - MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) +#define MCFG_PET_USER_PORT_8_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_8_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_9_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_9_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_B_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_b_handler(*device, DEVCB2_##_devcb); -//************************************************************************** -// TYPE DEFINITIONS -//************************************************************************** +#define MCFG_PET_USER_PORT_C_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_c_handler(*device, DEVCB2_##_devcb); -// ======================> pet_user_port_interface +#define MCFG_PET_USER_PORT_D_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_d_handler(*device, DEVCB2_##_devcb); -struct pet_user_port_interface -{ - devcb_write_line m_out_ca1_cb; - devcb_write_line m_out_cb2_cb; -}; +#define MCFG_PET_USER_PORT_E_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_e_handler(*device, DEVCB2_##_devcb); + +#define MCFG_PET_USER_PORT_F_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_f_handler(*device, DEVCB2_##_devcb); + +#define MCFG_PET_USER_PORT_H_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_h_handler(*device, DEVCB2_##_devcb); +#define MCFG_PET_USER_PORT_J_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_j_handler(*device, DEVCB2_##_devcb); + +#define MCFG_PET_USER_PORT_K_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_k_handler(*device, DEVCB2_##_devcb); + +#define MCFG_PET_USER_PORT_L_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_l_handler(*device, DEVCB2_##_devcb); + +#define MCFG_PET_USER_PORT_M_HANDLER(_devcb) \ + devcb = &pet_user_port_device::set_m_handler(*device, DEVCB2_##_devcb); + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** // ======================> pet_user_port_device class device_pet_user_port_interface; class pet_user_port_device : public device_t, - public pet_user_port_interface, - public device_slot_interface + public device_slot_interface { public: // construction/destruction pet_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - // computer interface - DECLARE_READ8_MEMBER( pa_r ); - DECLARE_WRITE8_MEMBER( pa_w ); - DECLARE_READ_LINE_MEMBER( ca1_r ); - DECLARE_WRITE_LINE_MEMBER( ca1_w ); - DECLARE_READ_LINE_MEMBER( cb2_r ); - DECLARE_WRITE_LINE_MEMBER( cb2_w ); + 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); } + template<class _Object> static devcb2_base &set_6_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_6_handler.set_callback(object); } + 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_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); } + template<class _Object> static devcb2_base &set_e_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_e_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_f_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_f_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_h_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_h_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_j_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_j_handler.set_callback(object); } + template<class _Object> static devcb2_base &set_k_handler(device_t &device, _Object object) { return downcast<pet_user_port_device &>(device).m_k_handler.set_callback(object); } + 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); } - // cartridge interface - DECLARE_WRITE_LINE_MEMBER( via_ca1_w ) { m_out_ca1_func(state); } - DECLARE_WRITE_LINE_MEMBER( via_cb2_w ) { m_out_cb2_func(state); } + // computer interface + DECLARE_WRITE_LINE_MEMBER( write_3 ); + DECLARE_WRITE_LINE_MEMBER( write_4 ); + DECLARE_WRITE_LINE_MEMBER( write_5 ); + DECLARE_WRITE_LINE_MEMBER( write_6 ); + DECLARE_WRITE_LINE_MEMBER( write_7 ); + DECLARE_WRITE_LINE_MEMBER( write_8 ); + DECLARE_WRITE_LINE_MEMBER( write_9 ); + DECLARE_WRITE_LINE_MEMBER( write_b ); + DECLARE_WRITE_LINE_MEMBER( write_c ); + DECLARE_WRITE_LINE_MEMBER( write_d ); + DECLARE_WRITE_LINE_MEMBER( write_e ); + DECLARE_WRITE_LINE_MEMBER( write_f ); + DECLARE_WRITE_LINE_MEMBER( write_h ); + DECLARE_WRITE_LINE_MEMBER( write_j ); + DECLARE_WRITE_LINE_MEMBER( write_k ); + DECLARE_WRITE_LINE_MEMBER( write_l ); + DECLARE_WRITE_LINE_MEMBER( write_m ); + + // device interface + devcb2_write_line m_3_handler; + devcb2_write_line m_4_handler; + devcb2_write_line m_5_handler; + devcb2_write_line m_6_handler; + devcb2_write_line m_7_handler; + devcb2_write_line m_8_handler; + devcb2_write_line m_9_handler; + devcb2_write_line m_b_handler; + devcb2_write_line m_c_handler; + devcb2_write_line m_d_handler; + devcb2_write_line m_e_handler; + devcb2_write_line m_f_handler; + devcb2_write_line m_h_handler; + devcb2_write_line m_j_handler; + devcb2_write_line m_k_handler; + devcb2_write_line m_l_handler; + devcb2_write_line m_m_handler; protected: // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); - devcb_resolved_write_line m_out_ca1_func; - devcb_resolved_write_line m_out_cb2_func; - device_pet_user_port_interface *m_card; }; // ======================> device_pet_user_port_interface -// class representing interface-specific live pet_expansion card +// class representing interface-specific pet_expansion card class device_pet_user_port_interface : public device_slot_card_interface { public: - // construction/destruction device_pet_user_port_interface(const machine_config &mconfig, device_t &device); virtual ~device_pet_user_port_interface(); - virtual UINT8 pet_pa_r(address_space &space, offs_t offset) { return 0xff; }; - virtual void pet_pa_w(address_space &space, offs_t offset, UINT8 data) { }; - - virtual int pet_ca1_r() { return 1; }; - virtual void pet_ca1_w(int state) { }; - virtual int pet_cb2_r() { return 1; }; - virtual void pet_cb2_w(int state) { }; + virtual DECLARE_WRITE_LINE_MEMBER( input_3 ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_4 ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_5 ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_6 ) {} + 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_b ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_c ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_d ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_e ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_f ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_h ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_j ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_k ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_l ) {} + virtual DECLARE_WRITE_LINE_MEMBER( input_m ) {} + + 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); } + DECLARE_WRITE_LINE_MEMBER( output_6 ) { m_slot->m_6_handler(state); } + 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_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); } + DECLARE_WRITE_LINE_MEMBER( output_e ) { m_slot->m_e_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_f ) { m_slot->m_f_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_h ) { m_slot->m_h_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_j ) { m_slot->m_j_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_k ) { m_slot->m_k_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_l ) { m_slot->m_l_handler(state); } + DECLARE_WRITE_LINE_MEMBER( output_m ) { m_slot->m_m_handler(state); } protected: pet_user_port_device *m_slot; @@ -136,6 +230,4 @@ extern const device_type PET_USER_PORT; // slot devices SLOT_INTERFACE_EXTERN( pet_user_port_cards ); - - #endif |