Previous 199869 Revisions Next

r18534 Monday 15th October, 2012 at 13:32:24 UTC by smf
switched SCSICB to use DEVCB2 [smf]
[src/emu/machine]scsicb.c scsicb.h
[src/mess/drivers]bullet.c rmnimbus.c v1050.c
[src/mess/machine]abc_hdc.c abc_xebec.c d9060.c e01.c lux4105.c rmnimbus.c

trunk/src/emu/machine/scsicb.c
r18533r18534
2727}
2828
2929scsicb_device::scsicb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
30    : scsidev_device(mconfig, SCSICB, "SCSI callback", tag, owner, clock)
30    : scsidev_device(mconfig, SCSICB, "SCSI callback", tag, owner, clock),
31   m_bsy_handler(*this),
32   m_sel_handler(*this),
33   m_cd_handler(*this),
34   m_io_handler(*this),
35   m_msg_handler(*this),
36   m_req_handler(*this),
37   m_ack_handler(*this),
38   m_atn_handler(*this),
39   m_rst_handler(*this)
3140{
3241}
3342
34void scsicb_device::device_config_complete()
35{
36   // inherit a copy of the static data
37   const SCSICB_interface *intf = reinterpret_cast<const SCSICB_interface *>(static_config());
38   if (intf != NULL)
39   {
40      *static_cast<SCSICB_interface *>(this) = *intf;
41   }
42}
43
4443void scsicb_device::device_start()
4544{
4645   scsidev_device::device_start();
4746
4847   linestate = 0;
4948
50   out_bsy_func.resolve(_out_bsy_func, *this);
51   out_sel_func.resolve(_out_sel_func, *this);
52   out_cd_func.resolve(_out_cd_func, *this);
53   out_io_func.resolve(_out_io_func, *this);
54   out_msg_func.resolve(_out_msg_func, *this);
55   out_req_func.resolve(_out_req_func, *this);
56   out_ack_func.resolve(_out_ack_func, *this);
57   out_atn_func.resolve(_out_atn_func, *this);
58   out_rst_func.resolve(_out_rst_func, *this);
49   m_bsy_handler.resolve_safe();
50   m_sel_handler.resolve_safe();
51   m_cd_handler.resolve_safe();
52   m_io_handler.resolve_safe();
53   m_msg_handler.resolve_safe();
54   m_req_handler.resolve_safe();
55   m_ack_handler.resolve_safe();
56   m_atn_handler.resolve_safe();
57   m_rst_handler.resolve_safe();
5958}
6059
6160void scsicb_device::scsi_in( UINT32 data, UINT32 mask )
6261{
6362   linestate = data;
6463
65   trigger_callback( mask, SCSI_MASK_BSY, out_bsy_func );
66   trigger_callback( mask, SCSI_MASK_SEL, out_sel_func );
67   trigger_callback( mask, SCSI_MASK_CD, out_cd_func );
68   trigger_callback( mask, SCSI_MASK_IO, out_io_func );
69   trigger_callback( mask, SCSI_MASK_MSG, out_msg_func );
70   trigger_callback( mask, SCSI_MASK_REQ, out_req_func );
71   trigger_callback( mask, SCSI_MASK_ACK, out_ack_func );
72   trigger_callback( mask, SCSI_MASK_ATN, out_atn_func );
73   trigger_callback( mask, SCSI_MASK_RST, out_rst_func );
64   trigger_callback( mask, SCSI_MASK_BSY, m_bsy_handler );
65   trigger_callback( mask, SCSI_MASK_SEL, m_sel_handler );
66   trigger_callback( mask, SCSI_MASK_CD, m_cd_handler );
67   trigger_callback( mask, SCSI_MASK_IO, m_io_handler );
68   trigger_callback( mask, SCSI_MASK_MSG, m_msg_handler );
69   trigger_callback( mask, SCSI_MASK_REQ, m_req_handler );
70   trigger_callback( mask, SCSI_MASK_ACK, m_ack_handler );
71   trigger_callback( mask, SCSI_MASK_ATN, m_atn_handler );
72   trigger_callback( mask, SCSI_MASK_RST, m_rst_handler );
7473}
7574
7675UINT8 scsicb_device::scsi_data_r()
r18533r18534
148147   }
149148}
150149
151void scsicb_device::trigger_callback( UINT32 update_mask, UINT32 line_mask, devcb_resolved_write_line &write_line )
150void scsicb_device::trigger_callback( UINT32 update_mask, UINT32 line_mask, devcb2_write_line &write_line )
152151{
153152   if( ( update_mask & line_mask ) != 0 && !write_line.isnull() )
154153   {
trunk/src/emu/machine/scsicb.h
r18533r18534
1515
1616#include "scsidev.h"
1717
18struct SCSICB_interface
18class scsicb_device : public scsidev_device
1919{
20   devcb_write_line _out_bsy_func;
21   devcb_write_line _out_sel_func;
22   devcb_write_line _out_cd_func;
23   devcb_write_line _out_io_func;
24   devcb_write_line _out_msg_func;
25   devcb_write_line _out_req_func;
26   devcb_write_line _out_ack_func;
27   devcb_write_line _out_atn_func;
28   devcb_write_line _out_rst_func;
29};
30
31class scsicb_device : public scsidev_device,
32                 public SCSICB_interface
33{
3420public:
3521   // construction/destruction
3622   scsicb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
3723
24   // static configuration helpers
25   template<class _Object> static devcb2_base &set_bsy_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_bsy_handler.set_callback(object); }
26   template<class _Object> static devcb2_base &set_sel_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_sel_handler.set_callback(object); }
27   template<class _Object> static devcb2_base &set_cd_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_cd_handler.set_callback(object); }
28   template<class _Object> static devcb2_base &set_io_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_io_handler.set_callback(object); }
29   template<class _Object> static devcb2_base &set_msg_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_msg_handler.set_callback(object); }
30   template<class _Object> static devcb2_base &set_req_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_req_handler.set_callback(object); }
31   template<class _Object> static devcb2_base &set_ack_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_ack_handler.set_callback(object); }
32   template<class _Object> static devcb2_base &set_atn_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_atn_handler.set_callback(object); }
33   template<class _Object> static devcb2_base &set_rst_handler(device_t &device, _Object object) { return downcast<scsicb_device &>(device).m_rst_handler.set_callback(object); }
34
3835   virtual void scsi_in( UINT32 data, UINT32 mask );
3936
4037   UINT8 scsi_data_r();
r18533r18534
6562
6663protected:
6764   // device-level overrides
68   virtual void device_config_complete();
6965   virtual void device_start();
7066
7167private:
7268   UINT8 get_scsi_line(UINT32 mask);
7369   void set_scsi_line(UINT32 mask, UINT8 state);
74   void trigger_callback(UINT32 update_mask, UINT32 line_mask, devcb_resolved_write_line &write_line);
70   void trigger_callback(UINT32 update_mask, UINT32 line_mask, devcb2_write_line &write_line);
7571   const char *get_line_name(UINT32 mask);
7672
77   devcb_resolved_write_line out_bsy_func;
78   devcb_resolved_write_line out_sel_func;
79   devcb_resolved_write_line out_cd_func;
80   devcb_resolved_write_line out_io_func;
81   devcb_resolved_write_line out_msg_func;
82   devcb_resolved_write_line out_req_func;
83   devcb_resolved_write_line out_ack_func;
84   devcb_resolved_write_line out_atn_func;
85   devcb_resolved_write_line out_rst_func;
73   devcb2_write_line m_bsy_handler;
74   devcb2_write_line m_sel_handler;
75   devcb2_write_line m_cd_handler;
76   devcb2_write_line m_io_handler;
77   devcb2_write_line m_msg_handler;
78   devcb2_write_line m_req_handler;
79   devcb2_write_line m_ack_handler;
80   devcb2_write_line m_atn_handler;
81   devcb2_write_line m_rst_handler;
8682
8783   UINT32 linestate;
8884};
8985
90#define MCFG_SCSICB_ADD(_tag, _intf) \
91   MCFG_DEVICE_ADD(_tag, SCSICB, 0) \
92   MCFG_DEVICE_CONFIG(_intf)
86#define MCFG_SCSICB_ADD(_tag) \
87   MCFG_DEVICE_ADD(_tag, SCSICB, 0)
9388
89#define MCFG_SCSICB_BSY_HANDLER(_devcb) \
90   devcb = &scsicb_device::set_bsy_handler(*device, DEVCB2_##_devcb); \
91
92#define MCFG_SCSICB_SEL_HANDLER(_devcb) \
93   devcb = &scsicb_device::set_sel_handler(*device, DEVCB2_##_devcb); \
94
95#define MCFG_SCSICB_CD_HANDLER(_devcb) \
96   devcb = &scsicb_device::set_cd_handler(*device, DEVCB2_##_devcb); \
97
98#define MCFG_SCSICB_IO_HANDLER(_devcb) \
99   devcb = &scsicb_device::set_io_handler(*device, DEVCB2_##_devcb); \
100
101#define MCFG_SCSICB_MSG_HANDLER(_devcb) \
102   devcb = &scsicb_device::set_msg_handler(*device, DEVCB2_##_devcb); \
103
104#define MCFG_SCSICB_REQ_HANDLER(_devcb) \
105   devcb = &scsicb_device::set_req_handler(*device, DEVCB2_##_devcb); \
106
107#define MCFG_SCSICB_ACK_HANDLER(_devcb) \
108   devcb = &scsicb_device::set_ack_handler(*device, DEVCB2_##_devcb); \
109
110#define MCFG_SCSICB_ATN_HANDLER(_devcb) \
111   devcb = &scsicb_device::set_atn_handler(*device, DEVCB2_##_devcb); \
112
113#define MCFG_SCSICB_RST_HANDLER(_devcb) \
114   devcb = &scsicb_device::set_rst_handler(*device, DEVCB2_##_devcb); \
115
94116// device type definition
95117extern const device_type SCSICB;
96118
trunk/src/mess/machine/d9060.c
r18533r18534
137137ADDRESS_MAP_END
138138
139139
140//-------------------------------------------------
141//  SCSICB_interface sasi_intf
142//-------------------------------------------------
143
144140WRITE_LINE_MEMBER( base_d9060_device::req_w )
145141{
146142   m_via->write_ca1(state);
147143}
148144
149static const SCSICB_interface sasi_intf =
150{
151   DEVCB_NULL,
152   DEVCB_NULL,
153   DEVCB_NULL,
154   DEVCB_NULL,
155   DEVCB_NULL,
156   DEVCB_DEVICE_LINE_MEMBER("^^", base_d9060_device, req_w),
157   DEVCB_NULL,
158   DEVCB_NULL,
159   DEVCB_NULL
160};
161145
162
163146//-------------------------------------------------
164147//  riot6532_interface riot0_intf
165148//-------------------------------------------------
r18533r18534
483466
484467   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
485468   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", D9060HD, SCSI_ID_0)
486   MCFG_SCSICB_ADD(SASIBUS_TAG ":host", sasi_intf)
469   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
470   MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE("^", base_d9060_device, req_w))
487471MACHINE_CONFIG_END
488472
489473
trunk/src/mess/machine/e01.c
r18533r18534
260260};
261261
262262
263//-------------------------------------------------
264//  SCSICB_interface scsi_intf
265//-------------------------------------------------
266
267263WRITE_LINE_MEMBER( e01_device::scsi_bsy_w )
268264{
269265   if (state)
r18533r18534
283279   update_interrupts();
284280}
285281
286static const SCSICB_interface scsi_intf =
287{
288   DEVCB_DEVICE_LINE_MEMBER("^^", e01_device, scsi_bsy_w),
289   DEVCB_NULL,
290   DEVCB_NULL,
291   DEVCB_NULL,
292   DEVCB_NULL,
293   DEVCB_DEVICE_LINE_MEMBER("^^", e01_device, scsi_req_w),
294   DEVCB_NULL,
295   DEVCB_NULL,
296   DEVCB_NULL
297};
298282
299
300283//-------------------------------------------------
301284//  centronics_interface e01_centronics_intf
302285//-------------------------------------------------
r18533r18534
352335
353336   MCFG_SCSIBUS_ADD(SCSIBUS_TAG)
354337   MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
355   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host", scsi_intf)
338   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host")
339   MCFG_SCSICB_BSY_HANDLER(DEVWRITELINE("^", e01_device, scsi_bsy_w))
340   MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE("^", e01_device, scsi_req_w))
356341
357342   // internal ram
358343   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/machine/abc_hdc.c
r18533r18534
8888
8989
9090//-------------------------------------------------
91//  SCSICB_interface sasi_intf
92//-------------------------------------------------
93
94static const SCSICB_interface sasi_intf =
95{
96   DEVCB_NULL,
97   DEVCB_NULL,
98   DEVCB_NULL,
99   DEVCB_NULL,
100   DEVCB_NULL,
101   DEVCB_NULL,
102   DEVCB_NULL,
103   DEVCB_NULL,
104   DEVCB_NULL
105};
106
107
108//-------------------------------------------------
10991//  MACHINE_DRIVER( abc_hdc )
11092//-------------------------------------------------
11193
r18533r18534
11799
118100   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
119101   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
120   MCFG_SCSICB_ADD(SASIBUS_TAG ":host", sasi_intf)
102   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
121103MACHINE_CONFIG_END
122104
123105
trunk/src/mess/machine/rmnimbus.c
r18533r18534
25232523   case HDC_IO_MASK:
25242524      if (state)
25252525      {
2526         printf( "switch to input mode\n" );
25272526         m_scsibus->scsi_data_w(0);
25282527      }
25292528      break;
trunk/src/mess/machine/abc_xebec.c
r18533r18534
8181
8282
8383//-------------------------------------------------
84//  SCSICB_interface sasi_intf
85//-------------------------------------------------
86
87static const SCSICB_interface sasi_intf =
88{
89   DEVCB_NULL,
90   DEVCB_NULL,
91   DEVCB_NULL,
92   DEVCB_NULL,
93   DEVCB_NULL,
94   DEVCB_NULL,
95   DEVCB_NULL,
96   DEVCB_NULL,
97   DEVCB_NULL
98};
99
100
101//-------------------------------------------------
10284//  MACHINE_DRIVER( abc_xebec )
10385//-------------------------------------------------
10486
r18533r18534
11092
11193   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
11294   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
113   MCFG_SCSICB_ADD(SASIBUS_TAG ":host", sasi_intf)
95   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
11496MACHINE_CONFIG_END
11597
11698
trunk/src/mess/machine/lux4105.c
r18533r18534
3030const device_type LUXOR_4105 = &device_creator<luxor_4105_device>;
3131
3232
33//-------------------------------------------------
34//  SCSICB_interface sasi_intf
35//-------------------------------------------------
36
3733WRITE_LINE_MEMBER( luxor_4105_device::sasi_bsy_w )
3834{
3935   if (state)
r18533r18534
6258   update_trrq_int();
6359}
6460
65static const SCSICB_interface sasi_intf =
66{
67   DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_bsy_w),
68   DEVCB_NULL,
69   DEVCB_NULL,
70   DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_io_w),
71   DEVCB_NULL,
72   DEVCB_DEVICE_LINE_MEMBER("^^", luxor_4105_device, sasi_req_w),
73   DEVCB_NULL,
74   DEVCB_NULL,
75   DEVCB_NULL
76};
7761
78
7962//-------------------------------------------------
8063//  MACHINE_DRIVER( luxor_4105 )
8164//-------------------------------------------------
r18533r18534
8366static MACHINE_CONFIG_FRAGMENT( luxor_4105 )
8467   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
8568   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", S1410, SCSI_ID_0)
86   MCFG_SCSICB_ADD(SASIBUS_TAG ":host", sasi_intf)
69   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
70   MCFG_SCSICB_BSY_HANDLER(DEVWRITELINE("^", luxor_4105_device, sasi_bsy_w))
71   MCFG_SCSICB_IO_HANDLER(DEVWRITELINE("^", luxor_4105_device, sasi_io_w))
72   MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE("^", luxor_4105_device, sasi_req_w))
8773MACHINE_CONFIG_END
8874
8975
trunk/src/mess/drivers/bullet.c
r18533r18534
10201020   { FLOPPY_0, FLOPPY_1, NULL, NULL }
10211021};
10221022
1023
1024//-------------------------------------------------
1025//  SCSICB_interface scsi_intf
1026//-------------------------------------------------
1027
10281023WRITE_LINE_MEMBER( bulletf_state::req_w )
10291024{
10301025   if (!state)
r18533r18534
10381033   update_dma_rdy();
10391034}
10401035
1041static const SCSICB_interface scsi_intf =
1042{
1043   DEVCB_NULL,
1044   DEVCB_NULL,
1045   DEVCB_NULL,
1046   DEVCB_NULL,
1047   DEVCB_NULL,
1048   DEVCB_DRIVER_LINE_MEMBER(bulletf_state, req_w),
1049   DEVCB_NULL,
1050   DEVCB_NULL,
1051   DEVCB_NULL
1052};
10531036
1054
10551037static serial_terminal_interface terminal_intf =
10561038{
10571039   DEVCB_NULL
r18533r18534
12071189
12081190   MCFG_SCSIBUS_ADD(SCSIBUS_TAG)
12091191   MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk0", SCSIHD, SCSI_ID_0)
1210   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host", scsi_intf)
1192   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host")
1193   MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE("^", bulletf_state, req_w))
12111194
12121195   // software lists
12131196   MCFG_SOFTWARE_LIST_ADD("flop_list", "wmbullet")
trunk/src/mess/drivers/rmnimbus.c
r18533r18534
8080   MSM5205_S48_4B      /* 8 kHz */
8181};
8282
83//-------------------------------------------------
84//  SCSICB_interface sasi_intf
85//-------------------------------------------------
86
87static const SCSICB_interface scsibus_config =
88{
89   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_bsy_w),
90   DEVCB_NULL,
91   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_cd_w),
92   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_io_w),
93   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_msg_w),
94   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_scsi_req_w),
95   DEVCB_NULL,
96   DEVCB_NULL,
97   DEVCB_NULL
98};
99
10083static const centronics_interface nimbus_centronics_config =
10184{
10285   DEVCB_DRIVER_LINE_MEMBER(rmnimbus_state, nimbus_ack_w),
r18533r18534
331314   MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk1", SCSIHD, SCSI_ID_1)
332315   MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk2", ACB4070, SCSI_ID_2)
333316   MCFG_SCSIDEV_ADD(SCSIBUS_TAG ":harddisk3", S1410, SCSI_ID_3)
334   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host", scsibus_config)
317   MCFG_SCSICB_ADD(SCSIBUS_TAG ":host")
318   MCFG_SCSICB_BSY_HANDLER(DEVWRITELINE("^", rmnimbus_state, nimbus_scsi_bsy_w))
319   MCFG_SCSICB_CD_HANDLER(DEVWRITELINE("^", rmnimbus_state, nimbus_scsi_cd_w))
320   MCFG_SCSICB_IO_HANDLER(DEVWRITELINE("^", rmnimbus_state, nimbus_scsi_io_w))
321   MCFG_SCSICB_MSG_HANDLER(DEVWRITELINE("^", rmnimbus_state, nimbus_scsi_msg_w))
322   MCFG_SCSICB_REQ_HANDLER(DEVWRITELINE("^", rmnimbus_state, nimbus_scsi_req_w))
335323
336324   MCFG_RAM_ADD(RAM_TAG)
337325   MCFG_RAM_DEFAULT_SIZE("1536K")
trunk/src/mess/drivers/v1050.c
r18533r18534
10021002};
10031003
10041004
1005//-------------------------------------------------
1006//  SCSICB_interface sasi_intf
1007//-------------------------------------------------
1008
1009static const SCSICB_interface sasi_intf =
1010{
1011   DEVCB_NULL,
1012   DEVCB_NULL,
1013   DEVCB_NULL,
1014   DEVCB_DRIVER_LINE_MEMBER(v1050_state, sasi_io_w),
1015   DEVCB_NULL,
1016   DEVCB_NULL,
1017   DEVCB_NULL,
1018   DEVCB_NULL,
1019   DEVCB_NULL
1020};
1021
10221005// Machine Initialization
10231006
10241007static IRQ_CALLBACK( v1050_int_ack )
r18533r18534
11281111   // SASI bus
11291112   MCFG_SCSIBUS_ADD(SASIBUS_TAG)
11301113   MCFG_SCSIDEV_ADD(SASIBUS_TAG ":harddisk0", S1410, SCSI_ID_0)
1131   MCFG_SCSICB_ADD(SASIBUS_TAG ":host", sasi_intf)
1114   MCFG_SCSICB_ADD(SASIBUS_TAG ":host")
1115   MCFG_SCSICB_IO_HANDLER(DEVWRITELINE("^", v1050_state, sasi_io_w))
11321116
11331117   MCFG_TIMER_DRIVER_ADD(TIMER_ACK_TAG, v1050_state, sasi_ack_tick)
11341118   MCFG_TIMER_DRIVER_ADD(TIMER_RST_TAG, v1050_state, sasi_rst_tick)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team