Previous 199869 Revisions Next

r23544 Saturday 8th June, 2013 at 20:29:35 UTC by Curt Coder
(MESS) abcbus: devcb2. (nw)
[src/mess/drivers]abc80.c abc80x.c
[src/mess/machine]abc890.c abc890.h abcbus.c abcbus.h lux10828.c lux10828.h lux21046.c lux21046.h

trunk/src/mess/drivers/abc80x.c
r23543r23544
883883
884884
885885//-------------------------------------------------
886//  ABCBUS_INTERFACE( abcbus_intf )
887//-------------------------------------------------
888
889static ABCBUS_INTERFACE( abcbus_intf )
890{
891   DEVCB_NULL,
892   DEVCB_NULL,
893   DEVCB_NULL,
894   DEVCB_NULL
895};
896
897
898//-------------------------------------------------
899886//  rs232_port_interface rs232a_intf
900887//-------------------------------------------------
901888
r23543r23544
11921179   MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
11931180
11941181   // ABC bus
1195   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
1182   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
11961183   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
11971184
11981185   // internal ram
r23543r23544
12351222   MCFG_ABC_KEYBOARD_PORT_ADD("abc800", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
12361223
12371224   // ABC bus
1238   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
1225   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
12391226   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc830_fast)
12401227
12411228   // internal ram
r23543r23544
12781265   MCFG_ABC_KEYBOARD_PORT_ADD("abc55", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
12791266
12801267   // ABC bus
1281   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
1268   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
12821269   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc834_fast)
12831270
12841271   // internal ram
r23543r23544
13111298   MCFG_ABC_KEYBOARD_PORT_ADD("abc77", DEVWRITELINE(Z80DART_TAG, z80dart_device, rxtxcb_w), DEVWRITELINE(Z80DART_TAG, z80dart_device, dcdb_w))
13121299
13131300   // ABC bus
1314   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "fast")
1301   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "fast")
13151302   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc832_fast)
13161303
13171304   // internal ram
trunk/src/mess/drivers/abc80.c
r23543r23544
451451
452452
453453//-------------------------------------------------
454//  ABCBUS_INTERFACE( abcbus_intf )
455//-------------------------------------------------
456
457static ABCBUS_INTERFACE( abcbus_intf )
458{
459   DEVCB_NULL,
460   DEVCB_NULL,
461   DEVCB_NULL,
462   DEVCB_NULL
463};
464
465
466//-------------------------------------------------
467454//  rs232_port_interface rs232_intf
468455//-------------------------------------------------
469456
r23543r23544
583570   MCFG_Z80PIO_ADD(Z80PIO_TAG, XTAL_11_9808MHz/2/2, pio_intf)
584571   MCFG_CASSETTE_ADD("cassette", abc80_cassette_interface)
585572   MCFG_ABC80_KEYBOARD_ADD(WRITELINE(abc80_state, keydown_w))
586   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_intf, abcbus_cards, "slow")
573   MCFG_ABCBUS_SLOT_ADD(ABCBUS_TAG, abcbus_cards, "slow")
587574   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("slow", abc830_slow)
588575   MCFG_RS232_PORT_ADD(RS232_TAG, rs232_intf, default_rs232_devices, NULL)
589576   MCFG_ASCII_KEYBOARD_ADD(KEYBOARD_TAG, keyboard_intf)
trunk/src/mess/machine/lux10828.c
r23543r23544
488488
489489
490490//-------------------------------------------------
491//  abcbus_rst -
492//-------------------------------------------------
493
494void luxor_55_10828_device::abcbus_rst(int state)
495{
496   if (!state)
497   {
498      device_reset();
499   }
500}
501
502
503//-------------------------------------------------
504491//  abcbus_stat -
505492//-------------------------------------------------
506493
trunk/src/mess/machine/lux10828.h
r23543r23544
8282
8383   // device_abcbus_interface overrides
8484   virtual void abcbus_cs(UINT8 data);
85   virtual void abcbus_rst(int state);
8685   virtual UINT8 abcbus_inp();
8786   virtual void abcbus_utp(UINT8 data);
8887   virtual UINT8 abcbus_stat();
trunk/src/mess/machine/abc890.c
r23543r23544
2121
2222
2323//-------------------------------------------------
24//  ABCBUS_INTERFACE( abcbus_intf )
25//-------------------------------------------------
26
27WRITE_LINE_MEMBER( abc890_device::int_w )
28{
29   m_slot->int_w(state);
30}
31
32WRITE_LINE_MEMBER( abc890_device::nmi_w )
33{
34   m_slot->nmi_w(state);
35}
36
37WRITE_LINE_MEMBER( abc890_device::rdy_w )
38{
39   m_slot->rdy_w(state);
40}
41
42WRITE_LINE_MEMBER( abc890_device::resin_w )
43{
44   m_slot->resin_w(state);
45}
46
47static ABCBUS_INTERFACE( abcbus_intf )
48{
49   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, abc890_device, int_w),
50   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, abc890_device, nmi_w),
51   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, abc890_device, rdy_w),
52   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, abc890_device, resin_w)
53};
54
55
56//-------------------------------------------------
5724//  MACHINE_DRIVER( abc890 )
5825//-------------------------------------------------
5926
6027static MACHINE_CONFIG_FRAGMENT( abc890 )
61   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_intf, abcbus_cards, NULL)
62   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_intf, abcbus_cards, NULL)
63   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_intf, abcbus_cards, NULL)
64   MCFG_ABCBUS_SLOT_ADD("io4", abcbus_intf, abcbus_cards, NULL)
65   MCFG_ABCBUS_SLOT_ADD("mem1", abcbus_intf, abcbus_cards, NULL)
66   MCFG_ABCBUS_SLOT_ADD("mem2", abcbus_intf, abcbus_cards, NULL)
67   MCFG_ABCBUS_SLOT_ADD("mem3", abcbus_intf, abcbus_cards, NULL)
28   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, NULL)
29   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, NULL)
30   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
31   MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
32   MCFG_ABCBUS_SLOT_ADD("mem1", abcbus_cards, NULL)
33   MCFG_ABCBUS_SLOT_ADD("mem2", abcbus_cards, NULL)
34   MCFG_ABCBUS_SLOT_ADD("mem3", abcbus_cards, NULL)
6835MACHINE_CONFIG_END
6936
7037
r23543r23544
8451//-------------------------------------------------
8552
8653static MACHINE_CONFIG_FRAGMENT( abc894 )
87   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_intf, abcbus_cards, NULL)
88   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_intf, abcbus_cards, NULL)
89   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_intf, abcbus_cards, NULL)
54   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, NULL)
55   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, NULL)
56   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
9057MACHINE_CONFIG_END
9158
9259
r23543r23544
10673//-------------------------------------------------
10774
10875static MACHINE_CONFIG_FRAGMENT( abc850 )
109   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_intf, abcbus_cards, "fast")
76   MCFG_ABCBUS_SLOT_ADD("io1", abcbus_cards, "fast")
11077   MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("fast", abc850_fast)
111   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_intf, abcbus_cards, "hdc")
112   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_intf, abcbus_cards, NULL)
113   MCFG_ABCBUS_SLOT_ADD("io4", abcbus_intf, abcbus_cards, NULL)
114   MCFG_ABCBUS_SLOT_ADD("io5", abcbus_intf, abcbus_cards, NULL)
115   MCFG_ABCBUS_SLOT_ADD("io6", abcbus_intf, abcbus_cards, NULL)
116   MCFG_ABCBUS_SLOT_ADD("io7", abcbus_intf, abcbus_cards, NULL)
78   MCFG_ABCBUS_SLOT_ADD("io2", abcbus_cards, "hdc")
79   MCFG_ABCBUS_SLOT_ADD("io3", abcbus_cards, NULL)
80   MCFG_ABCBUS_SLOT_ADD("io4", abcbus_cards, NULL)
81   MCFG_ABCBUS_SLOT_ADD("io5", abcbus_cards, NULL)
82   MCFG_ABCBUS_SLOT_ADD("io6", abcbus_cards, NULL)
83   MCFG_ABCBUS_SLOT_ADD("io7", abcbus_cards, NULL)
11784MACHINE_CONFIG_END
11885
11986
r23543r23544
200167}
201168
202169
170//-------------------------------------------------
171//  device_reset - device-specific reset
172//-------------------------------------------------
203173
174void abc890_device::device_reset()
175{
176   for (int i = 0; i < m_slots; i++)
177   {
178      m_expansion_slot[i]->reset();
179   }
180}
181
182
183
204184//**************************************************************************
205185//  ABC BUS INTERFACE
206186//**************************************************************************
r23543r23544
213193   }
214194}
215195
216void abc890_device::abcbus_rst(int state)
217{
218   for (int i = 0; i < m_slots; i++)
219   {
220      m_expansion_slot[i]->rst_r();
221   }
222}
223
224196UINT8 abc890_device::abcbus_inp()
225197{
226198   UINT8 data = 0xff;
trunk/src/mess/machine/abc890.h
r23543r23544
4343   // optional information overrides
4444   virtual machine_config_constructor device_mconfig_additions() const;
4545
46   // not really public
47   DECLARE_WRITE_LINE_MEMBER( int_w );
48   DECLARE_WRITE_LINE_MEMBER( nmi_w );
49   DECLARE_WRITE_LINE_MEMBER( rdy_w );
50   DECLARE_WRITE_LINE_MEMBER( resin_w );
51
5246protected:
5347   // device-level overrides
5448   virtual void device_start();
49   virtual void device_reset();
5550
5651   // device_abcbus_interface overrides
5752   virtual void abcbus_cs(UINT8 data);
58   virtual void abcbus_rst(int state);
5953   virtual UINT8 abcbus_inp();
6054   virtual void abcbus_utp(UINT8 data);
6155   virtual UINT8 abcbus_stat();
trunk/src/mess/machine/lux21046.c
r23543r23544
469469
470470
471471//-------------------------------------------------
472//  abcbus_rst -
473//-------------------------------------------------
474
475void luxor_55_21046_device::abcbus_rst(int state)
476{
477   if (!state)
478   {
479      device_reset();
480   }
481}
482
483
484//-------------------------------------------------
485472//  abcbus_stat -
486473//-------------------------------------------------
487474
trunk/src/mess/machine/lux21046.h
r23543r23544
8686
8787   // device_abcbus_interface overrides
8888   virtual void abcbus_cs(UINT8 data);
89   virtual void abcbus_rst(int state);
9089   virtual UINT8 abcbus_inp();
9190   virtual void abcbus_utp(UINT8 data);
9291   virtual UINT8 abcbus_stat();
trunk/src/mess/machine/abcbus.c
r23543r23544
3434}
3535
3636
37//-------------------------------------------------
38//  ~device_abcbus_card_interface - destructor
39//-------------------------------------------------
4037
41device_abcbus_card_interface::~device_abcbus_card_interface()
42{
43}
44
45
46
4738//**************************************************************************
4839//  LIVE DEVICE
4940//**************************************************************************
r23543r23544
5344//-------------------------------------------------
5445
5546abcbus_slot_device::abcbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
56      device_t(mconfig, ABCBUS_SLOT, "ABC bus slot", tag, owner, clock),
57      device_slot_interface(mconfig, *this)
47   device_t(mconfig, ABCBUS_SLOT, "ABC bus slot", tag, owner, clock),
48   device_slot_interface(mconfig, *this),
49   m_write_int(*this),
50   m_write_nmi(*this),
51   m_write_rdy(*this),
52   m_write_resin(*this)
5853{
5954}
6055
6156
6257//-------------------------------------------------
63//  device_config_complete - perform any
64//  operations now that the configuration is
65//  complete
58//  device_start - device-specific startup
6659//-------------------------------------------------
6760
68void abcbus_slot_device::device_config_complete()
61void abcbus_slot_device::device_start()
6962{
70   // inherit a copy of the static data
71   const abcbus_interface *intf = reinterpret_cast<const abcbus_interface *>(static_config());
72   if (intf != NULL)
73   {
74      *static_cast<abcbus_interface *>(this) = *intf;
75   }
63   m_card = dynamic_cast<device_abcbus_card_interface *>(get_card_device());
7664
77   // or initialize to defaults if none provided
78   else
79   {
80      memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
81      memset(&m_out_nmi_cb, 0, sizeof(m_out_nmi_cb));
82      memset(&m_out_rdy_cb, 0, sizeof(m_out_rdy_cb));
83      memset(&m_out_resin_cb, 0, sizeof(m_out_resin_cb));
84   }
65   // resolve callbacks
66   m_write_int.resolve_safe();
67   m_write_nmi.resolve_safe();
68   m_write_rdy.resolve_safe();
69   m_write_resin.resolve_safe();
8570}
8671
8772
8873//-------------------------------------------------
89//  device_start - device-specific startup
74//  device_reset - device-specific reset
9075//-------------------------------------------------
9176
92void abcbus_slot_device::device_start()
77void abcbus_slot_device::device_reset()
9378{
94   m_card = dynamic_cast<device_abcbus_card_interface *>(get_card_device());
95
96   // resolve callbacks
97   m_out_int_func.resolve(m_out_int_cb, *this);
98   m_out_nmi_func.resolve(m_out_nmi_cb, *this);
99   m_out_rdy_func.resolve(m_out_rdy_cb, *this);
100   m_out_resin_func.resolve(m_out_resin_cb, *this);
79   if (m_card != NULL)
80   {
81      get_card_device()->reset();
82   }
10183}
10284
10385
r23543r23544
125107
126108UINT8 abcbus_slot_device::rst_r()
127109{
128   if (m_card != NULL)
129   {
130      m_card->abcbus_rst(0);
131      m_card->abcbus_rst(1);
132   }
110   device_reset();
133111
134112   return 0xff;
135113}
r23543r23544
315293
316294
317295//-------------------------------------------------
318//  int_w -
319//-------------------------------------------------
320
321WRITE_LINE_MEMBER( abcbus_slot_device::int_w )
322{
323   m_out_int_func(state);
324}
325
326
327//-------------------------------------------------
328//  nmi_w -
329//-------------------------------------------------
330
331WRITE_LINE_MEMBER( abcbus_slot_device::nmi_w )
332{
333   m_out_nmi_func(state);
334}
335
336
337//-------------------------------------------------
338//  rdy_w -
339//-------------------------------------------------
340
341WRITE_LINE_MEMBER( abcbus_slot_device::rdy_w )
342{
343   m_out_rdy_func(state);
344}
345
346
347//-------------------------------------------------
348//  resin_w -
349//-------------------------------------------------
350
351WRITE_LINE_MEMBER( abcbus_slot_device::resin_w )
352{
353   m_out_resin_func(state);
354}
355
356
357//-------------------------------------------------
358296//  SLOT_INTERFACE( abcbus_cards )
359297//-------------------------------------------------
360298
trunk/src/mess/machine/abcbus.h
r23543r23544
7878//  INTERFACE CONFIGURATION MACROS
7979//**************************************************************************
8080
81#define ABCBUS_INTERFACE(_name) \
82   const abcbus_interface (_name) =
83
84
85#define MCFG_ABCBUS_SLOT_ADD(_tag, _config, _slot_intf, _def_slot) \
81#define MCFG_ABCBUS_SLOT_ADD(_tag, _slot_intf, _def_slot) \
8682   MCFG_DEVICE_ADD(_tag, ABCBUS_SLOT, 0) \
87   MCFG_DEVICE_CONFIG(_config) \
8883   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
8984
9085
r23543r23544
9388//  TYPE DEFINITIONS
9489//**************************************************************************
9590
96// ======================> abcbus_interface
97
98struct abcbus_interface
99{
100   devcb_write_line    m_out_int_cb;
101   devcb_write_line    m_out_nmi_cb;
102   devcb_write_line    m_out_rdy_cb;
103   devcb_write_line    m_out_resin_cb;
104};
105
106
107// ======================> device_abcbus_card_interface
108
109class abcbus_slot_device;
110
111// class representing interface-specific live abcbus card
112class device_abcbus_card_interface : public device_slot_card_interface
113{
114   friend class abcbus_slot_device;
115
116public:
117   // construction/destruction
118   device_abcbus_card_interface(const machine_config &mconfig, device_t &device);
119   virtual ~device_abcbus_card_interface();
120
121   // required operation overrides
122   virtual void abcbus_cs(UINT8 data) = 0;
123
124   // optional operation overrides
125   virtual void abcbus_rst(int state) { };
126   virtual UINT8 abcbus_inp() { return 0xff; };
127   virtual void abcbus_utp(UINT8 data) { };
128   virtual UINT8 abcbus_stat() { return 0xff; };
129   virtual void abcbus_c1(UINT8 data) { };
130   virtual void abcbus_c2(UINT8 data) { };
131   virtual void abcbus_c3(UINT8 data) { };
132   virtual void abcbus_c4(UINT8 data) { };
133   virtual UINT8 abcbus_xmemfl(offs_t offset) { return 0xff; };
134   virtual void abcbus_xmemw(offs_t offset, UINT8 data) { };
135
136public:
137   abcbus_slot_device  *m_slot;
138};
139
140
14191// ======================> abcbus_slot_device
14292
93class device_abcbus_card_interface;
94
14395class abcbus_slot_device : public device_t,
144                     public device_slot_interface,
145                     public abcbus_interface
96                     public device_slot_interface
14697{
14798public:
14899   // construction/destruction
r23543r23544
174125   DECLARE_WRITE8_MEMBER( xmemw_w );
175126
176127   // peripheral interface
177   DECLARE_WRITE_LINE_MEMBER( int_w );
178   DECLARE_WRITE_LINE_MEMBER( nmi_w );
179   DECLARE_WRITE_LINE_MEMBER( rdy_w );
180   DECLARE_WRITE_LINE_MEMBER( resin_w );
128   DECLARE_WRITE_LINE_MEMBER( int_w ) { m_write_int(state); }
129   DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
130   DECLARE_WRITE_LINE_MEMBER( rdy_w ) { m_write_rdy(state); }
131   DECLARE_WRITE_LINE_MEMBER( resin_w ) { m_write_resin(state); }
181132
182133protected:
183134   // device-level overrides
184135   virtual void device_start();
185   virtual void device_config_complete();
136   virtual void device_reset();
186137
187138private:
188   devcb_resolved_write_line   m_out_int_func;
189   devcb_resolved_write_line   m_out_nmi_func;
190   devcb_resolved_write_line   m_out_rdy_func;
191   devcb_resolved_write_line   m_out_resin_func;
139   devcb2_write_line   m_write_int;
140   devcb2_write_line   m_write_nmi;
141   devcb2_write_line   m_write_rdy;
142   devcb2_write_line   m_write_resin;
192143
193144   device_abcbus_card_interface *m_card;
194145};
195146
196147
148// ======================> device_abcbus_card_interface
149
150// class representing interface-specific live abcbus card
151class device_abcbus_card_interface : public device_slot_card_interface
152{
153   friend class abcbus_slot_device;
154
155public:
156   // construction/destruction
157   device_abcbus_card_interface(const machine_config &mconfig, device_t &device);
158
159   // required operation overrides
160   virtual void abcbus_cs(UINT8 data) = 0;
161
162   // optional operation overrides
163   virtual UINT8 abcbus_inp() { return 0xff; };
164   virtual void abcbus_utp(UINT8 data) { };
165   virtual UINT8 abcbus_stat() { return 0xff; };
166   virtual void abcbus_c1(UINT8 data) { };
167   virtual void abcbus_c2(UINT8 data) { };
168   virtual void abcbus_c3(UINT8 data) { };
169   virtual void abcbus_c4(UINT8 data) { };
170   virtual UINT8 abcbus_xmemfl(offs_t offset) { return 0xff; };
171   virtual void abcbus_xmemw(offs_t offset, UINT8 data) { };
172
173public:
174   abcbus_slot_device  *m_slot;
175};
176
177
197178// device type definition
198179extern const device_type ABCBUS_SLOT;
199180

Previous 199869 Revisions Next


© 1997-2024 The MAME Team