Previous 199869 Revisions Next

r18389 Tuesday 9th October, 2012 at 19:02:31 UTC by smf
default all lines high & improved logging (nw)
[src/emu/machine]scsicb.c scsicb.h

trunk/src/emu/machine/scsicb.c
r18388r18389
1111#include "scsicb.h"
1212#include "scsibus.h"
1313
14#define VERBOSE_LEVEL ( 0 )
15
16INLINE void ATTR_PRINTF( 3, 4 ) verboselog( int n_level, running_machine &machine, const char *s_fmt, ... )
17{
18   if( VERBOSE_LEVEL >= n_level )
19   {
20      va_list v;
21      char buf[ 32768 ];
22      va_start( v, s_fmt );
23      vsprintf( buf, s_fmt, v );
24      va_end( v );
25      logerror( "%s: %s", machine.describe_context( ), buf );
26   }
27}
28
1429scsicb_device::scsicb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1530    : scsidev_device(mconfig, SCSICB, "SCSI callback", tag, owner, clock)
1631{
r18388r18389
3045{
3146   scsidev_device::device_start();
3247
48   linestate = SCSI_MASK_ALL;
49
3350   out_bsy_func.resolve(_out_bsy_func, *this);
3451   out_sel_func.resolve(_out_sel_func, *this);
3552   out_cd_func.resolve(_out_cd_func, *this);
r18388r18389
4562{
4663   linestate = data;
4764
48   if( ( mask & SCSI_MASK_BSY ) != 0 )
49   {
50      out_bsy_func( (int) ( data & SCSI_MASK_BSY ) != 0 );
51   }
52
53   if( ( mask & SCSI_MASK_SEL ) != 0 )
54   {
55      out_sel_func( (int) ( data & SCSI_MASK_SEL ) != 0 );
56   }
57
58   if( ( mask & SCSI_MASK_CD ) != 0 )
59   {
60      out_cd_func( (int) ( data & SCSI_MASK_CD ) != 0 );
61   }
62
63   if( ( mask & SCSI_MASK_IO ) != 0 )
64   {
65      out_io_func( (int) ( data & SCSI_MASK_IO ) != 0 );
66   }
67
68   if( ( mask & SCSI_MASK_MSG ) != 0 )
69   {
70      out_msg_func( (int) ( data & SCSI_MASK_MSG ) != 0 );
71   }
72
73   if( ( mask & SCSI_MASK_REQ ) != 0 )
74   {
75      out_req_func( (int) ( data & SCSI_MASK_REQ ) != 0 );
76   }
77
78   if( ( mask & SCSI_MASK_ACK ) != 0 )
79   {
80      out_ack_func( (int) ( data & SCSI_MASK_ACK ) != 0 );
81   }
82
83   if( ( mask & SCSI_MASK_ATN ) != 0 )
84   {
85      out_ack_func( (int) ( data & SCSI_MASK_ATN ) != 0 );
86   }
87
88   if( ( mask & SCSI_MASK_RST ) != 0 )
89   {
90      out_rst_func( (int) ( data & SCSI_MASK_RST ) != 0 );
91   }
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 );
9274}
9375
9476UINT8 scsicb_device::scsi_data_r()
9577{
96   return linestate & SCSI_MASK_DATA;
78   UINT8 data = linestate & SCSI_MASK_DATA;
79   verboselog( 1, machine(), "%s scsi_data_r() %02x\n", tag(), data );
80   return data;
9781}
9882
9983void scsicb_device::scsi_data_w( UINT8 data )
10084{
85   verboselog( 1, machine(), "%s scsi_data_w( %02x )\n", tag(), data );
10186   scsi_out( data, SCSI_MASK_DATA );
10287}
10388
104UINT8 scsicb_device::get_scsi_line( UINT32 line )
105{
106   UINT8 result = (int)( ( linestate & line ) != 0 );
107
108//  LOG(3,"get_scsi_line(%s)=%d\n",linenames[lineno],result);
109
110   return result;
111}
112
113void scsicb_device::set_scsi_line( UINT32 mask, UINT8 state )
114{
115   scsi_out( state * mask, mask );
116}
117
11889READ8_MEMBER( scsicb_device::scsi_data_r )
11990{
12091   return scsi_data_r();
r18388r18389
145116WRITE_LINE_MEMBER( scsicb_device::scsi_atn_w ) { set_scsi_line(SCSI_MASK_ATN, state); }
146117WRITE_LINE_MEMBER( scsicb_device::scsi_rst_w ) { set_scsi_line(SCSI_MASK_RST, state); }
147118
119UINT8 scsicb_device::get_scsi_line( UINT32 mask )
120{
121   UINT8 state = (int)( ( linestate & mask ) != 0 );
122
123   verboselog( 1, machine(), "%s get_scsi_line %s %d\n", tag(), get_line_name( mask ), state );
124
125   return state;
126}
127
128void scsicb_device::set_scsi_line( UINT32 mask, UINT8 state )
129{
130   verboselog( 1, machine(), "%s set_scsi_line %s %d\n", tag(), get_line_name( mask ), state );
131
132   scsi_out( state * mask, mask );
133}
134
135void scsicb_device::trigger_callback( UINT32 update_mask, UINT32 line_mask, devcb_resolved_write_line &write_line )
136{
137   if( ( update_mask & line_mask ) != 0 && !write_line.isnull() )
138   {
139      int state = (int)( ( linestate & line_mask ) != 0 );
140
141      verboselog( 1, machine(), "%s trigger_callback %s %d\n", tag(), get_line_name( line_mask ), state );
142
143      write_line( state );
144   }
145}
146
147const char *scsicb_device::get_line_name( UINT32 mask )
148{
149   switch( mask )
150   {
151   case SCSI_MASK_BSY:
152      return "bsy";
153
154   case SCSI_MASK_SEL:
155      return "sel";
156
157   case SCSI_MASK_CD:
158      return "cd";
159
160   case SCSI_MASK_IO:
161      return "io";
162
163   case SCSI_MASK_MSG:
164      return "msg";
165
166   case SCSI_MASK_REQ:
167      return "req";
168
169   case SCSI_MASK_ACK:
170      return "ack";
171
172   case SCSI_MASK_ATN:
173      return "atn";
174
175   case SCSI_MASK_RST:
176      return "rst";
177   }
178
179   return "?";
180}
181
148182const device_type SCSICB = &device_creator<scsicb_device>;
trunk/src/emu/machine/scsicb.h
r18388r18389
6969   virtual void device_start();
7070
7171private:
72   UINT8 get_scsi_line(UINT32 mask);
73   void set_scsi_line(UINT32 mask, UINT8 state);
74   void trigger_callback(UINT32 update_mask, UINT32 line_mask, devcb_resolved_write_line &write_line);
75   const char *get_line_name(UINT32 mask);
76
7277   devcb_resolved_write_line out_bsy_func;
7378   devcb_resolved_write_line out_sel_func;
7479   devcb_resolved_write_line out_cd_func;
r18388r18389
7984   devcb_resolved_write_line out_atn_func;
8085   devcb_resolved_write_line out_rst_func;
8186
82   UINT8 get_scsi_line(UINT32 mask);
83   void set_scsi_line(UINT32 mask, UINT8 state);
84
8587   UINT32 linestate;
8688};
8789

Previous 199869 Revisions Next


© 1997-2024 The MAME Team