Previous 199869 Revisions Next

r26906 Friday 3rd January, 2014 at 01:54:28 UTC by smf
Hooked up the 6551 to the plus 4 user port, haven't been able to test it in diag264 as cartridges don't appear to work [smf]
[src/emu/bus/plus4]diag264_lb_user.c diag264_lb_user.h user.c user.h
[src/emu/machine]mos6529.c mos6529.h
[src/mess/drivers]plus4.c
[src/mess/includes]plus4.h

trunk/src/emu/bus/plus4/diag264_lb_user.h
r26905r26906
2626// ======================> diag264_user_port_loopback_device
2727
2828class diag264_user_port_loopback_device :  public device_t,
29                                 public device_plus4_user_port_interface
29   public device_plus4_user_port_interface
3030{
3131public:
3232   // construction/destruction
r26905r26906
3737   virtual void device_start();
3838
3939   // device_plus4_user_port_interface overrides
40   virtual UINT8 plus4_p_r() { logerror("P read %02x\n", ((m_p << 4) & 0xf0) | (m_p >> 4)); return ((m_p << 4) & 0xf0) | (m_p >> 4); }
41   virtual void plus4_p_w(UINT8 data) { logerror("P write %02x\n", data); m_p = data; }
42   virtual int plus4_rxd_r() { return m_txd; }
43   virtual int plus4_dcd_r() { return m_dtr; }
44   virtual int plus4_dsr_r() { return m_rts; }
45   virtual void plus4_txd_w(int state) { m_txd = state; }
46   virtual void plus4_dtr_w(int state) { m_dtr = state; }
47   virtual void plus4_rts_w(int state) { m_rts = state; }
40   virtual DECLARE_WRITE_LINE_MEMBER(write_b) { m_slot->m_6_handler(state); }
41   virtual DECLARE_WRITE_LINE_MEMBER(write_k) { m_slot->m_7_handler(state); }
42   virtual DECLARE_WRITE_LINE_MEMBER(write_4) { m_slot->m_j_handler(state); }
43   virtual DECLARE_WRITE_LINE_MEMBER(write_5) { m_slot->m_f_handler(state); }
4844
49private:
50   UINT8 m_p;
45   virtual DECLARE_WRITE_LINE_MEMBER(write_6) { m_slot->m_b_handler(state); }
46   virtual DECLARE_WRITE_LINE_MEMBER(write_7) { m_slot->m_k_handler(state); }
47   virtual DECLARE_WRITE_LINE_MEMBER(write_j) { m_slot->m_4_handler(state); }
48   virtual DECLARE_WRITE_LINE_MEMBER(write_f) { m_slot->m_5_handler(state); }
5149
52   int m_txd;
53   int m_rts;
54   int m_dtr;
50   //virtual DECLARE_WRITE_LINE_MEMBER(write_c) { m_slot->m_m_handler(state); }
51   virtual DECLARE_WRITE_LINE_MEMBER(write_d) { m_slot->m_l_handler(state); }
52   virtual DECLARE_WRITE_LINE_MEMBER(write_e) { m_slot->m_h_handler(state); }
53
54   virtual DECLARE_WRITE_LINE_MEMBER(write_m) { m_slot->m_c_handler(state); }
55   //virtual DECLARE_WRITE_LINE_MEMBER(write_l) { m_slot->m_d_handler(state); }
56   //virtual DECLARE_WRITE_LINE_MEMBER(write_h) { m_slot->m_e_handler(state); }
5557};
5658
57
5859// device type definition
5960extern const device_type DIAG264_USER_PORT_LOOPBACK;
6061
61
62
6362#endif
trunk/src/emu/bus/plus4/user.h
r26905r26906
4949   MCFG_DEVICE_ADD(_tag, PLUS4_USER_PORT, 0) \
5050   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
5151
52#define MCFG_PLUS4_USER_PORT_4_HANDLER(_devcb) \
53   devcb = &plus4_user_port_device::set_4_handler(*device, DEVCB2_##_devcb);
5254
55#define MCFG_PLUS4_USER_PORT_5_HANDLER(_devcb) \
56   devcb = &plus4_user_port_device::set_5_handler(*device, DEVCB2_##_devcb);
5357
58#define MCFG_PLUS4_USER_PORT_6_HANDLER(_devcb) \
59   devcb = &plus4_user_port_device::set_6_handler(*device, DEVCB2_##_devcb);
60
61#define MCFG_PLUS4_USER_PORT_7_HANDLER(_devcb) \
62   devcb = &plus4_user_port_device::set_7_handler(*device, DEVCB2_##_devcb);
63
64#define MCFG_PLUS4_USER_PORT_8_HANDLER(_devcb) \
65   devcb = &plus4_user_port_device::set_8_handler(*device, DEVCB2_##_devcb);
66
67#define MCFG_PLUS4_USER_PORT_B_HANDLER(_devcb) \
68   devcb = &plus4_user_port_device::set_b_handler(*device, DEVCB2_##_devcb);
69
70#define MCFG_PLUS4_USER_PORT_C_HANDLER(_devcb) \
71   devcb = &plus4_user_port_device::set_c_handler(*device, DEVCB2_##_devcb);
72
73#define MCFG_PLUS4_USER_PORT_F_HANDLER(_devcb) \
74   devcb = &plus4_user_port_device::set_f_handler(*device, DEVCB2_##_devcb);
75
76#define MCFG_PLUS4_USER_PORT_H_HANDLER(_devcb) \
77   devcb = &plus4_user_port_device::set_h_handler(*device, DEVCB2_##_devcb);
78
79#define MCFG_PLUS4_USER_PORT_J_HANDLER(_devcb) \
80   devcb = &plus4_user_port_device::set_j_handler(*device, DEVCB2_##_devcb);
81
82#define MCFG_PLUS4_USER_PORT_K_HANDLER(_devcb) \
83   devcb = &plus4_user_port_device::set_k_handler(*device, DEVCB2_##_devcb);
84
85#define MCFG_PLUS4_USER_PORT_L_HANDLER(_devcb) \
86   devcb = &plus4_user_port_device::set_l_handler(*device, DEVCB2_##_devcb);
87
5488//**************************************************************************
5589//  TYPE DEFINITIONS
5690//**************************************************************************
r26905r26906
6094class device_plus4_user_port_interface;
6195
6296class plus4_user_port_device : public device_t,
63                        public device_slot_interface
97   public device_slot_interface
6498{
6599public:
66100   // construction/destruction
67101   plus4_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
68102
103   template<class _Object> static devcb2_base &set_4_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_4_handler.set_callback(object); }
104   template<class _Object> static devcb2_base &set_5_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_5_handler.set_callback(object); }
105   template<class _Object> static devcb2_base &set_6_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_6_handler.set_callback(object); }
106   template<class _Object> static devcb2_base &set_7_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_7_handler.set_callback(object); }
107   template<class _Object> static devcb2_base &set_8_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_8_handler.set_callback(object); }
108   template<class _Object> static devcb2_base &set_b_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_b_handler.set_callback(object); }
109   template<class _Object> static devcb2_base &set_c_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_c_handler.set_callback(object); }
110   template<class _Object> static devcb2_base &set_f_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_f_handler.set_callback(object); }
111   template<class _Object> static devcb2_base &set_h_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_h_handler.set_callback(object); }
112   template<class _Object> static devcb2_base &set_j_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_j_handler.set_callback(object); }
113   template<class _Object> static devcb2_base &set_k_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_k_handler.set_callback(object); }
114   template<class _Object> static devcb2_base &set_l_handler(device_t &device, _Object object) { return downcast<plus4_user_port_device &>(device).m_l_handler.set_callback(object); }
115
69116   // computer interface
70   DECLARE_READ8_MEMBER( p_r );
71   DECLARE_WRITE8_MEMBER( p_w );
72   DECLARE_READ_LINE_MEMBER( rxd_r );
73   DECLARE_READ_LINE_MEMBER( dcd_r );
74   DECLARE_READ_LINE_MEMBER( dsr_r );
75   DECLARE_WRITE_LINE_MEMBER( txd_w );
76   DECLARE_WRITE_LINE_MEMBER( dtr_w );
77   DECLARE_WRITE_LINE_MEMBER( rts_w );
78   DECLARE_WRITE_LINE_MEMBER( rxc_w );
79   DECLARE_WRITE_LINE_MEMBER( atn_w );
117   DECLARE_WRITE_LINE_MEMBER( write_4 );
118   DECLARE_WRITE_LINE_MEMBER( write_5 );
119   DECLARE_WRITE_LINE_MEMBER( write_6 );
120   DECLARE_WRITE_LINE_MEMBER( write_7 );
121   DECLARE_WRITE_LINE_MEMBER( write_8 );
122   DECLARE_WRITE_LINE_MEMBER( write_9 );
123   DECLARE_WRITE_LINE_MEMBER( write_b );
124   DECLARE_WRITE_LINE_MEMBER( write_d );
125   DECLARE_WRITE_LINE_MEMBER( write_e );
126   DECLARE_WRITE_LINE_MEMBER( write_f );
127   DECLARE_WRITE_LINE_MEMBER( write_j );
128   DECLARE_WRITE_LINE_MEMBER( write_k );
129   DECLARE_WRITE_LINE_MEMBER( write_m );
80130
131   // device interface
132   devcb2_write_line m_4_handler;
133   devcb2_write_line m_5_handler;
134   devcb2_write_line m_6_handler;
135   devcb2_write_line m_7_handler;
136   devcb2_write_line m_8_handler;
137   devcb2_write_line m_b_handler;
138   devcb2_write_line m_c_handler;
139   devcb2_write_line m_f_handler;
140   devcb2_write_line m_h_handler;
141   devcb2_write_line m_j_handler;
142   devcb2_write_line m_k_handler;
143   devcb2_write_line m_l_handler;
144
81145protected:
82146   // device-level overrides
83   virtual void device_config_complete() { };
84147   virtual void device_start();
85148   virtual void device_reset();
86149
r26905r26906
98161   device_plus4_user_port_interface(const machine_config &mconfig, device_t &device);
99162   virtual ~device_plus4_user_port_interface();
100163
101   virtual UINT8 plus4_p_r() { return 0xff; };
102   virtual void plus4_p_w(UINT8 data) { };
164   DECLARE_WRITE_LINE_MEMBER( write_4 ) {}
165   DECLARE_WRITE_LINE_MEMBER( write_5 ) {}
166   DECLARE_WRITE_LINE_MEMBER( write_6 ) {}
167   DECLARE_WRITE_LINE_MEMBER( write_7 ) {}
168   DECLARE_WRITE_LINE_MEMBER( write_8 ) {}
169   DECLARE_WRITE_LINE_MEMBER( write_9 ) {}
170   DECLARE_WRITE_LINE_MEMBER( write_b ) {}
171   DECLARE_WRITE_LINE_MEMBER( write_d ) {}
172   DECLARE_WRITE_LINE_MEMBER( write_e ) {}
173   DECLARE_WRITE_LINE_MEMBER( write_f ) {}
174   DECLARE_WRITE_LINE_MEMBER( write_j ) {}
175   DECLARE_WRITE_LINE_MEMBER( write_k ) {}
176   DECLARE_WRITE_LINE_MEMBER( write_m ) {}
103177
104   virtual int plus4_rxd_r() { return 1; };
105   virtual int plus4_dcd_r() { return 0; };
106   virtual int plus4_dsr_r() { return 0; };
107   virtual void plus4_txd_w(int state) { };
108   virtual void plus4_dtr_w(int state) { };
109   virtual void plus4_rts_w(int state) { };
110   virtual void plus4_rxc_w(int state) { };
111   virtual void plus4_atn_w(int state) { };
112
113178protected:
114179   plus4_user_port_device *m_slot;
115180};
r26905r26906
119184extern const device_type PLUS4_USER_PORT;
120185
121186
122// slot devices
123#include "diag264_lb_user.h"
124
125187SLOT_INTERFACE_EXTERN( plus4_user_port_cards );
126188
127
128
129189#endif
trunk/src/emu/bus/plus4/diag264_lb_user.c
r26905r26906
3131
3232diag264_user_port_loopback_device::diag264_user_port_loopback_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
3333   : device_t(mconfig, DIAG264_USER_PORT_LOOPBACK, "Diag264 User Port Loopback", tag, owner, clock, "diag264_user_port_loopback", __FILE__),
34      device_plus4_user_port_interface(mconfig, *this),
35      m_p(0),
36      m_txd(0),
37      m_rts(0),
38      m_dtr(0)
34   device_plus4_user_port_interface(mconfig, *this)
3935{
4036}
4137
trunk/src/emu/bus/plus4/user.c
r26905r26906
1
2
13/**********************************************************************
24
35    Commodore Plus/4 User Port emulation
r26905r26906
5355//-------------------------------------------------
5456
5557plus4_user_port_device::plus4_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
56      device_t(mconfig, PLUS4_USER_PORT, "User Port", tag, owner, clock, "plus4_user_port", __FILE__),
57      device_slot_interface(mconfig, *this)
58   device_t(mconfig, PLUS4_USER_PORT, "User Port", tag, owner, clock, "plus4_user_port", __FILE__),
59   device_slot_interface(mconfig, *this),
60   m_4_handler(*this),
61   m_5_handler(*this),
62   m_6_handler(*this),
63   m_7_handler(*this),
64   m_8_handler(*this),
65   m_b_handler(*this),
66   m_c_handler(*this),
67   m_f_handler(*this),
68   m_h_handler(*this),
69   m_j_handler(*this),
70   m_k_handler(*this),
71   m_l_handler(*this)
5872{
5973}
6074
r26905r26906
6680void plus4_user_port_device::device_start()
6781{
6882   m_cart = dynamic_cast<device_plus4_user_port_interface *>(get_card_device());
83
84   // resolve callbacks
85   m_4_handler.resolve_safe();
86   m_5_handler.resolve_safe();
87   m_6_handler.resolve_safe();
88   m_7_handler.resolve_safe();
89   m_8_handler.resolve_safe();
90   m_b_handler.resolve_safe();
91   m_c_handler.resolve_safe();
92   m_f_handler.resolve_safe();
93   m_h_handler.resolve_safe();
94   m_j_handler.resolve_safe();
95   m_k_handler.resolve_safe();
96   m_l_handler.resolve_safe();
97
98   // pull up
99   m_4_handler(1);
100   m_5_handler(1);
101   m_6_handler(1);
102   m_7_handler(1);
103   m_8_handler(1);
104   m_b_handler(1);
105   m_c_handler(1);
106   m_f_handler(1);
107   m_h_handler(1);
108   m_j_handler(1);
109   m_k_handler(1);
110   m_l_handler(1);
69111}
70112
71113
r26905r26906
82124}
83125
84126
85READ8_MEMBER( plus4_user_port_device::p_r ) { UINT8 data = 0xff; if (m_cart != NULL) data = m_cart->plus4_p_r(); return data; }
86WRITE8_MEMBER( plus4_user_port_device::p_w ) { if (m_cart != NULL) m_cart->plus4_p_w(data); }
127WRITE_LINE_MEMBER( plus4_user_port_device::write_4 ) { if (m_cart != NULL) m_cart->write_4(state); }
128WRITE_LINE_MEMBER( plus4_user_port_device::write_5 ) { if (m_cart != NULL) m_cart->write_5(state); }
129WRITE_LINE_MEMBER( plus4_user_port_device::write_6 ) { if (m_cart != NULL) m_cart->write_6(state); }
130WRITE_LINE_MEMBER( plus4_user_port_device::write_7 ) { if (m_cart != NULL) m_cart->write_7(state); }
131WRITE_LINE_MEMBER( plus4_user_port_device::write_8 ) { if (m_cart != NULL) m_cart->write_8(state); }
132WRITE_LINE_MEMBER( plus4_user_port_device::write_9 ) { if (m_cart != NULL) m_cart->write_9(state); }
133WRITE_LINE_MEMBER( plus4_user_port_device::write_b ) { if (m_cart != NULL) m_cart->write_b(state); }
134WRITE_LINE_MEMBER( plus4_user_port_device::write_d ) { if (m_cart != NULL) m_cart->write_d(state); }
135WRITE_LINE_MEMBER( plus4_user_port_device::write_e ) { if (m_cart != NULL) m_cart->write_e(state); }
136WRITE_LINE_MEMBER( plus4_user_port_device::write_f ) { if (m_cart != NULL) m_cart->write_f(state); }
137WRITE_LINE_MEMBER( plus4_user_port_device::write_j ) { if (m_cart != NULL) m_cart->write_j(state); }
138WRITE_LINE_MEMBER( plus4_user_port_device::write_k ) { if (m_cart != NULL) m_cart->write_k(state); }
139WRITE_LINE_MEMBER( plus4_user_port_device::write_m ) { if (m_cart != NULL) m_cart->write_m(state); }
87140
88READ_LINE_MEMBER( plus4_user_port_device::rxd_r ) { int state = 1; if (m_cart != NULL) state = m_cart->plus4_rxd_r(); return state; }
89READ_LINE_MEMBER( plus4_user_port_device::dcd_r ) { int state = 1; if (m_cart != NULL) state = m_cart->plus4_dcd_r(); return state; }
90READ_LINE_MEMBER( plus4_user_port_device::dsr_r ) { int state = 1; if (m_cart != NULL) state = m_cart->plus4_dsr_r(); return state; }
91141
92WRITE_LINE_MEMBER( plus4_user_port_device::txd_w ) { if (m_cart != NULL) m_cart->plus4_txd_w(state); }
93WRITE_LINE_MEMBER( plus4_user_port_device::dtr_w ) { if (m_cart != NULL) m_cart->plus4_dtr_w(state); }
94WRITE_LINE_MEMBER( plus4_user_port_device::rts_w ) { if (m_cart != NULL) m_cart->plus4_rts_w(state); }
95WRITE_LINE_MEMBER( plus4_user_port_device::rxc_w ) { if (m_cart != NULL) m_cart->plus4_rxc_w(state); }
96WRITE_LINE_MEMBER( plus4_user_port_device::atn_w ) { if (m_cart != NULL) m_cart->plus4_atn_w(state); }
97142
98
99143//-------------------------------------------------
100144//  SLOT_INTERFACE( plus4_user_port_cards )
101145//-------------------------------------------------
102146
147// slot devices
148#include "diag264_lb_user.h"
149
103150SLOT_INTERFACE_START( plus4_user_port_cards )
104151   SLOT_INTERFACE("diag264", DIAG264_USER_PORT_LOOPBACK)
105152SLOT_INTERFACE_END
trunk/src/emu/machine/mos6529.c
r26905r26906
4040
4141mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
4242   : device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock, "mos6529", __FILE__),
43      m_read_port(*this),
44      m_write_port(*this)
43   m_input(0),
44   m_p0_handler(*this),
45   m_p1_handler(*this),
46   m_p2_handler(*this),
47   m_p3_handler(*this),
48   m_p4_handler(*this),
49   m_p5_handler(*this),
50   m_p6_handler(*this),
51   m_p7_handler(*this)
4552{
4653}
4754
r26905r26906
5360void mos6529_device::device_start()
5461{
5562   // resolve callbacks
56   m_read_port.resolve_safe(0);
57   m_write_port.resolve_safe();
63   m_p0_handler.resolve_safe();
64   m_p1_handler.resolve_safe();
65   m_p2_handler.resolve_safe();
66   m_p3_handler.resolve_safe();
67   m_p4_handler.resolve_safe();
68   m_p5_handler.resolve_safe();
69   m_p6_handler.resolve_safe();
70   m_p7_handler.resolve_safe();
5871}
5972
6073
r26905r26906
6477
6578READ8_MEMBER( mos6529_device::read )
6679{
67   return m_read_port(0);
80   return m_input;
6881}
6982
7083
r26905r26906
7487
7588WRITE8_MEMBER( mos6529_device::write )
7689{
77   m_write_port((offs_t)0, data);
90   m_p0_handler((data>>0)&1);
91   m_p1_handler((data>>1)&1);
92   m_p2_handler((data>>2)&1);
93   m_p3_handler((data>>3)&1);
94   m_p4_handler((data>>4)&1);
95   m_p5_handler((data>>5)&1);
96   m_p6_handler((data>>6)&1);
97   m_p7_handler((data>>7)&1);
7898}
trunk/src/emu/machine/mos6529.h
r26905r26906
3535//  INTERFACE CONFIGURATION MACROS
3636//**************************************************************************
3737
38#define MCFG_MOS6529_ADD(_tag, _read, _write) \
39   MCFG_DEVICE_ADD(_tag, MOS6529, 0) \
40   downcast<mos6529_device *>(device)->set_callbacks(DEVCB2_##_read, DEVCB2_##_write);
38#define MCFG_MOS6529_P0_HANDLER(_devcb) \
39   devcb = &mos6529_device::set_p0_handler(*device, DEVCB2_##_devcb);
4140
41#define MCFG_MOS6529_P1_HANDLER(_devcb) \
42   devcb = &mos6529_device::set_p1_handler(*device, DEVCB2_##_devcb);
4243
44#define MCFG_MOS6529_P2_HANDLER(_devcb) \
45   devcb = &mos6529_device::set_p2_handler(*device, DEVCB2_##_devcb);
4346
47#define MCFG_MOS6529_P3_HANDLER(_devcb) \
48   devcb = &mos6529_device::set_p3_handler(*device, DEVCB2_##_devcb);
49
50#define MCFG_MOS6529_P4_HANDLER(_devcb) \
51   devcb = &mos6529_device::set_p4_handler(*device, DEVCB2_##_devcb);
52
53#define MCFG_MOS6529_P5_HANDLER(_devcb) \
54   devcb = &mos6529_device::set_p5_handler(*device, DEVCB2_##_devcb);
55
56#define MCFG_MOS6529_P6_HANDLER(_devcb) \
57   devcb = &mos6529_device::set_p6_handler(*device, DEVCB2_##_devcb);
58
59#define MCFG_MOS6529_P7_HANDLER(_devcb) \
60   devcb = &mos6529_device::set_p7_handler(*device, DEVCB2_##_devcb);
61
62
4463//**************************************************************************
4564//  TYPE DEFINITIONS
4665//**************************************************************************
r26905r26906
5372   // construction/destruction
5473   mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
5574
56   template<class _read, class _write> void set_callbacks(_read rd, _write wr) {
57      m_read_port.set_callback(rd);
58      m_write_port.set_callback(wr);
59   }
75   template<class _Object> static devcb2_base &set_p0_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p0_handler.set_callback(object); }
76   template<class _Object> static devcb2_base &set_p1_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p1_handler.set_callback(object); }
77   template<class _Object> static devcb2_base &set_p2_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p2_handler.set_callback(object); }
78   template<class _Object> static devcb2_base &set_p3_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p3_handler.set_callback(object); }
79   template<class _Object> static devcb2_base &set_p4_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p4_handler.set_callback(object); }
80   template<class _Object> static devcb2_base &set_p5_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p5_handler.set_callback(object); }
81   template<class _Object> static devcb2_base &set_p6_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p6_handler.set_callback(object); }
82   template<class _Object> static devcb2_base &set_p7_handler(device_t &device, _Object object) { return downcast<mos6529_device &>(device).m_p7_handler.set_callback(object); }
6083
6184   DECLARE_READ8_MEMBER( read );
6285   DECLARE_WRITE8_MEMBER( write );
6386
87   DECLARE_WRITE_LINE_MEMBER( write_p0 ) { if (state) m_input |= 1; else m_input &= ~1; }
88   DECLARE_WRITE_LINE_MEMBER( write_p1 ) { if (state) m_input |= 2; else m_input &= ~2; }
89   DECLARE_WRITE_LINE_MEMBER( write_p2 ) { if (state) m_input |= 4; else m_input &= ~4; }
90   DECLARE_WRITE_LINE_MEMBER( write_p3 ) { if (state) m_input |= 8; else m_input &= ~8; }
91   DECLARE_WRITE_LINE_MEMBER( write_p4 ) { if (state) m_input |= 16; else m_input &= ~16; }
92   DECLARE_WRITE_LINE_MEMBER( write_p5 ) { if (state) m_input |= 32; else m_input &= ~32; }
93   DECLARE_WRITE_LINE_MEMBER( write_p6 ) { if (state) m_input |= 64; else m_input &= ~64; }
94   DECLARE_WRITE_LINE_MEMBER( write_p7 ) { if (state) m_input |= 128; else m_input &= ~128; }
95
6496protected:
6597   // device-level overrides
6698   virtual void device_start();
6799
68private:
69   devcb2_read8  m_read_port;
70   devcb2_write8 m_write_port;
100   UINT8 m_input;
101
102   devcb2_write_line m_p0_handler;
103   devcb2_write_line m_p1_handler;
104   devcb2_write_line m_p2_handler;
105   devcb2_write_line m_p3_handler;
106   devcb2_write_line m_p4_handler;
107   devcb2_write_line m_p5_handler;
108   devcb2_write_line m_p6_handler;
109   devcb2_write_line m_p7_handler;
71110};
72111
73112
74113// device type definition
75114extern const device_type MOS6529;
76115
77
78
79116#endif
trunk/src/mess/includes/plus4.h
r26905r26906
116116   DECLARE_READ8_MEMBER( ted_rom_r );
117117   DECLARE_READ8_MEMBER( ted_k_r );
118118
119   DECLARE_WRITE8_MEMBER( spi_kb_w );
119   DECLARE_WRITE_LINE_MEMBER( write_kb0 ) { if (state) m_kb |= 1; else m_kb &= ~1; }
120   DECLARE_WRITE_LINE_MEMBER( write_kb1 ) { if (state) m_kb |= 2; else m_kb &= ~2; }
121   DECLARE_WRITE_LINE_MEMBER( write_kb2 ) { if (state) m_kb |= 4; else m_kb &= ~4; }
122   DECLARE_WRITE_LINE_MEMBER( write_kb3 ) { if (state) m_kb |= 8; else m_kb &= ~8; }
123   DECLARE_WRITE_LINE_MEMBER( write_kb4 ) { if (state) m_kb |= 16; else m_kb &= ~16; }
124   DECLARE_WRITE_LINE_MEMBER( write_kb5 ) { if (state) m_kb |= 32; else m_kb &= ~32; }
125   DECLARE_WRITE_LINE_MEMBER( write_kb6 ) { if (state) m_kb |= 64; else m_kb &= ~64; }
126   DECLARE_WRITE_LINE_MEMBER( write_kb7 ) { if (state) m_kb |= 128; else m_kb &= ~128; }
120127
121128   DECLARE_WRITE_LINE_MEMBER( acia_irq_w );
122129
trunk/src/mess/drivers/plus4.c
r26905r26906
626626
627627
628628//-------------------------------------------------
629//  MOS6529_INTERFACE( spi_kb_intf )
630//-------------------------------------------------
631
632WRITE8_MEMBER( plus4_state::spi_kb_w )
633{
634   m_kb = data;
635}
636
637
638//-------------------------------------------------
639629//  MOS6551_INTERFACE( acia_intf )
640630//-------------------------------------------------
641631
r26905r26906
695685   save_item(NAME(m_acia_irq));
696686   save_item(NAME(m_exp_irq));
697687   save_item(NAME(m_kb));
688
689   m_spi_kb->write_p0(1);
690   m_spi_kb->write_p1(1);
691   m_spi_kb->write_p2(1);
692   m_spi_kb->write_p3(1);
693   m_spi_kb->write_p4(1);
694   m_spi_kb->write_p5(1);
695   m_spi_kb->write_p6(1);
696   m_spi_kb->write_p7(1);
698697}
699698
700699
r26905r26906
726725//**************************************************************************
727726
728727//-------------------------------------------------
729//  MACHINE_CONFIG( ntsc )
728//  MACHINE_CONFIG( plus4 )
730729//-------------------------------------------------
731730
732static MACHINE_CONFIG_START( ntsc, plus4_state )
731static MACHINE_CONFIG_START( plus4, plus4_state )
733732   // basic machine hardware
734   MCFG_CPU_ADD(MOS7501_TAG, M7501, XTAL_14_31818MHz/16)
733   MCFG_CPU_ADD(MOS7501_TAG, M7501, 0)
735734   MCFG_CPU_PROGRAM_MAP(plus4_mem)
736735   MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
737736   MCFG_M7501_PORT_PULLS(0x00, 0xc0)
r26905r26906
739738
740739   // video and sound hardware
741740   MCFG_SPEAKER_STANDARD_MONO("mono")
742   MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, MOS7501_TAG, XTAL_14_31818MHz/4, ted_videoram_map, WRITELINE(plus4_state, ted_irq_w), READ8(plus4_state, ted_k_r))
741   MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, MOS7501_TAG, 0, ted_videoram_map, WRITELINE(plus4_state, ted_irq_w), READ8(plus4_state, ted_k_r))
743742   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
744743
745744   // devices
746745   MCFG_PLS100_ADD(PLA_TAG)
747746
748747   MCFG_DEVICE_ADD(MOS6551_TAG, MOS6551, XTAL_1_8432MHz)
748   MCFG_MOS6551_RTS_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_d))
749   MCFG_MOS6551_DTR_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_e))
750   MCFG_MOS6551_TXD_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_m))
749751   MCFG_MOS6551_IRQ_HANDLER(WRITELINE(plus4_state, acia_irq_w))
750752
751   MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
752   MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), WRITE8(plus4_state, spi_kb_w))
753   MCFG_DEVICE_ADD(MOS6529_USER_TAG, MOS6529, 0)
754   MCFG_MOS6529_P0_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_b))
755   MCFG_MOS6529_P1_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_k))
756   MCFG_MOS6529_P2_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_4))
757   MCFG_MOS6529_P3_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_5))
758   MCFG_MOS6529_P4_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_6))
759   MCFG_MOS6529_P5_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_7))
760   MCFG_MOS6529_P6_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_j))
761   MCFG_MOS6529_P7_HANDLER(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_f))
762
763   MCFG_DEVICE_ADD(MOS6529_KB_TAG, MOS6529, 0)
764   MCFG_MOS6529_P0_HANDLER(WRITELINE(plus4_state, write_kb0))
765   MCFG_MOS6529_P1_HANDLER(WRITELINE(plus4_state, write_kb1))
766   MCFG_MOS6529_P2_HANDLER(WRITELINE(plus4_state, write_kb2))
767   MCFG_MOS6529_P3_HANDLER(WRITELINE(plus4_state, write_kb3))
768   MCFG_MOS6529_P4_HANDLER(WRITELINE(plus4_state, write_kb4))
769   MCFG_MOS6529_P5_HANDLER(WRITELINE(plus4_state, write_kb5))
770   MCFG_MOS6529_P6_HANDLER(WRITELINE(plus4_state, write_kb6))
771   MCFG_MOS6529_P7_HANDLER(WRITELINE(plus4_state, write_kb7))
772
753773   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL)
774
754775   MCFG_CBM_IEC_ADD(NULL)
755   MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, atn_w))
776   MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, write_9))
777
756778   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
757779   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
758780   MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_14_31818MHz/16, plus4_expansion_cards, "c1551", WRITELINE(plus4_state, exp_irq_w))
759781   MCFG_PLUS4_EXPANSION_SLOT_DMA_CALLBACKS(READ8(plus4_state, read), WRITE8(plus4_state, write), INPUTLINE(MOS7501_TAG, INPUT_LINE_HALT))
782
760783   MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL)
784   MCFG_PLUS4_USER_PORT_4_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p2)) // cassette sense
785   MCFG_PLUS4_USER_PORT_5_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p3))
786   MCFG_PLUS4_USER_PORT_6_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p4))
787   MCFG_PLUS4_USER_PORT_7_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p5))
788   MCFG_PLUS4_USER_PORT_8_HANDLER(DEVWRITELINE(MOS6551_TAG, mos6551_device, rxc_w))
789   MCFG_PLUS4_USER_PORT_B_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p0))
790   MCFG_PLUS4_USER_PORT_C_HANDLER(DEVWRITELINE(MOS6551_TAG, mos6551_device, rxd_w))
791   MCFG_PLUS4_USER_PORT_F_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p7))
792   MCFG_PLUS4_USER_PORT_H_HANDLER(DEVWRITELINE(MOS6551_TAG, mos6551_device, dcd_w))
793   MCFG_PLUS4_USER_PORT_J_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p6))
794   MCFG_PLUS4_USER_PORT_K_HANDLER(DEVWRITELINE(MOS6529_USER_TAG, mos6529_device, write_p1))
795   MCFG_PLUS4_USER_PORT_L_HANDLER(DEVWRITELINE(MOS6551_TAG, mos6551_device, dsr_w))
796
761797   MCFG_QUICKLOAD_ADD("quickload", plus4_state, cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
762798
763799   // internal ram
764800   MCFG_RAM_ADD(RAM_TAG)
765801   MCFG_RAM_DEFAULT_SIZE("64K")
802MACHINE_CONFIG_END
766803
804//-------------------------------------------------
805//  MACHINE_CONFIG( plus4p )
806//-------------------------------------------------
807
808static MACHINE_CONFIG_DERIVED_CLASS( plus4p, plus4, c16_state )
809   MCFG_DEVICE_MODIFY(MOS7501_TAG)
810   MCFG_DEVICE_CLOCK(XTAL_17_73447MHz/20)
811
812   MCFG_DEVICE_MODIFY(MOS7360_TAG)
813   MCFG_DEVICE_CLOCK(XTAL_17_73447MHz/5)
814
767815   // software list
768816   MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart")
769817   MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass")
770818   MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop")
771   MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC")
772   MCFG_SOFTWARE_LIST_FILTER("cass_list", "NTSC")
773   MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC")
819   MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL")
820   MCFG_SOFTWARE_LIST_FILTER("cass_list", "PAL")
821   MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL")
774822MACHINE_CONFIG_END
775823
776
777824//-------------------------------------------------
778//  MACHINE_CONFIG( pal )
825//  MACHINE_CONFIG( plus4n )
779826//-------------------------------------------------
780827
781static MACHINE_CONFIG_START( pal, plus4_state )
782   // basic machine hardware
783   MCFG_CPU_ADD(MOS7501_TAG, M7501, XTAL_17_73447MHz/20)
784   MCFG_CPU_PROGRAM_MAP(plus4_mem)
785   MCFG_M7501_PORT_CALLBACKS(READ8(plus4_state, cpu_r), WRITE8(plus4_state, cpu_w))
786   MCFG_M7501_PORT_PULLS(0x00, 0xc0)
787   MCFG_QUANTUM_PERFECT_CPU(MOS7501_TAG)
828static MACHINE_CONFIG_DERIVED_CLASS( plus4n, plus4, c16_state )
829   MCFG_DEVICE_MODIFY(MOS7501_TAG)
830   MCFG_DEVICE_CLOCK(XTAL_14_31818MHz/16)
788831
789   // video and sound hardware
790   MCFG_SPEAKER_STANDARD_MONO("mono")
791   MCFG_MOS7360_ADD(MOS7360_TAG, SCREEN_TAG, MOS7501_TAG, XTAL_17_73447MHz/5, ted_videoram_map, WRITELINE(plus4_state, ted_irq_w), READ8(plus4_state, ted_k_r))
792   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
832   MCFG_DEVICE_MODIFY(MOS7360_TAG)
833   MCFG_DEVICE_CLOCK(XTAL_14_31818MHz/4)
793834
794   // devices
795   MCFG_PLS100_ADD(PLA_TAG)
796
797   MCFG_DEVICE_ADD(MOS6551_TAG, MOS6551, XTAL_1_8432MHz)
798   MCFG_MOS6551_IRQ_HANDLER(WRITELINE(plus4_state, acia_irq_w))
799
800   MCFG_MOS6529_ADD(MOS6529_USER_TAG, DEVREAD8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_r), DEVWRITE8(PLUS4_USER_PORT_TAG, plus4_user_port_device, p_w))
801   MCFG_MOS6529_ADD(MOS6529_KB_TAG, CONSTANT(0xff), WRITE8(plus4_state, spi_kb_w))
802   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, plus4_datassette_devices, "c1531", NULL)
803   MCFG_CBM_IEC_ADD(NULL)
804   MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PLUS4_USER_PORT_TAG, plus4_user_port_device, atn_w))
805   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
806   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
807   MCFG_PLUS4_EXPANSION_SLOT_ADD(PLUS4_EXPANSION_SLOT_TAG, XTAL_17_73447MHz/20, plus4_expansion_cards, "c1551", WRITELINE(plus4_state, exp_irq_w))
808   MCFG_PLUS4_EXPANSION_SLOT_DMA_CALLBACKS(READ8(plus4_state, read), WRITE8(plus4_state, write), INPUTLINE(MOS7501_TAG, INPUT_LINE_HALT))
809   MCFG_PLUS4_USER_PORT_ADD(PLUS4_USER_PORT_TAG, plus4_user_port_cards, NULL)
810   MCFG_QUICKLOAD_ADD("quickload", plus4_state, cbm_c16, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
811
812   // internal ram
813   MCFG_RAM_ADD(RAM_TAG)
814   MCFG_RAM_DEFAULT_SIZE("64K")
815
816835   // software list
817836   MCFG_SOFTWARE_LIST_ADD("cart_list", "plus4_cart")
818837   MCFG_SOFTWARE_LIST_ADD("cass_list", "plus4_cass")
819838   MCFG_SOFTWARE_LIST_ADD("flop_list", "plus4_flop")
820   MCFG_SOFTWARE_LIST_FILTER("cart_list", "PAL")
821   MCFG_SOFTWARE_LIST_FILTER("cass_list", "PAL")
822   MCFG_SOFTWARE_LIST_FILTER("flop_list", "PAL")
839   MCFG_SOFTWARE_LIST_FILTER("cart_list", "NTSC")
840   MCFG_SOFTWARE_LIST_FILTER("cass_list", "NTSC")
841   MCFG_SOFTWARE_LIST_FILTER("flop_list", "NTSC")
823842MACHINE_CONFIG_END
824843
825844
r26905r26906
827846//  MACHINE_CONFIG( c16n )
828847//-------------------------------------------------
829848
830static MACHINE_CONFIG_DERIVED_CLASS( c16n, ntsc, c16_state )
849static MACHINE_CONFIG_DERIVED_CLASS( c16n, plus4n, c16_state )
831850   MCFG_CPU_MODIFY(MOS7501_TAG)
832851   MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w))
833852   MCFG_M7501_PORT_PULLS(0x00, 0xc0)
r26905r26906
849868//  MACHINE_CONFIG( c16p )
850869//-------------------------------------------------
851870
852static MACHINE_CONFIG_DERIVED_CLASS( c16p, pal, c16_state )
871static MACHINE_CONFIG_DERIVED_CLASS( c16p, plus4p, c16_state )
853872   MCFG_CPU_MODIFY(MOS7501_TAG)
854873   MCFG_M7501_PORT_CALLBACKS(READ8(c16_state, cpu_r), WRITE8(plus4_state, cpu_w))
855874   MCFG_M7501_PORT_PULLS(0x00, 0xc0)
r26905r26906
881900//  MACHINE_CONFIG( v364 )
882901//-------------------------------------------------
883902
884static MACHINE_CONFIG_DERIVED( v364, ntsc )
903static MACHINE_CONFIG_DERIVED( v364, plus4n )
885904   MCFG_SOUND_ADD(T6721A_TAG, T6721A, XTAL_640kHz)
886905   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
887906
r26905r26906
10891108//**************************************************************************
10901109
10911110//    YEAR  NAME    PARENT  COMPAT  MACHINE INPUT   INIT                    COMPANY                         FULLNAME                        FLAGS
1092COMP( 1984, c264,   0,      0,      ntsc,  plus4,  driver_device,  0,      "Commodore Business Machines",  "Commodore 264 (Prototype)",    GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
1111COMP( 1984, c264,   0,      0,      plus4n, plus4,  driver_device,  0,      "Commodore Business Machines",  "Commodore 264 (Prototype)",    GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
10931112COMP( 1984, c232,   c264,   0,      c232,   plus4,  driver_device,  0,      "Commodore Business Machines",  "Commodore 232 (Prototype)",    GAME_SUPPORTS_SAVE )
10941113COMP( 1984, v364,   c264,   0,      v364,   plus4,  driver_device,  0,      "Commodore Business Machines",  "Commodore V364 (Prototype)",   GAME_SUPPORTS_SAVE )
1095COMP( 1984, plus4,  c264,   0,      ntsc,   plus4,  driver_device,  0,      "Commodore Business Machines",  "Plus/4 (NTSC)",                GAME_SUPPORTS_SAVE )
1096COMP( 1984, plus4p, c264,   0,      pal,    plus4,  driver_device,  0,      "Commodore Business Machines",  "Plus/4 (PAL)",                 GAME_SUPPORTS_SAVE )
1114COMP( 1984, plus4,  c264,   0,      plus4n, plus4,  driver_device,  0,      "Commodore Business Machines",  "Plus/4 (NTSC)",                GAME_SUPPORTS_SAVE )
1115COMP( 1984, plus4p, c264,   0,      plus4p, plus4,  driver_device,  0,      "Commodore Business Machines",  "Plus/4 (PAL)",                 GAME_SUPPORTS_SAVE )
10971116COMP( 1984, c16,    c264,   0,      c16n,   c16,    driver_device,  0,      "Commodore Business Machines",  "Commodore 16 (NTSC)",          GAME_SUPPORTS_SAVE )
10981117COMP( 1984, c16p,   c264,   0,      c16p,   c16,    driver_device,  0,      "Commodore Business Machines",  "Commodore 16 (PAL)",           GAME_SUPPORTS_SAVE )
10991118COMP( 1984, c16_hu, c264,   0,      c16p,   c16,    driver_device,  0,      "Commodore Business Machines",  "Commodore 16 (Hungary)",       GAME_SUPPORTS_SAVE )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team