Previous 199869 Revisions Next

r18412 Wednesday 10th October, 2012 at 13:43:12 UTC by smf
delays the req signal (nw)
[src/emu/machine]scsihle.c scsihle.h

trunk/src/emu/machine/scsihle.c
r18411r18412
1717{
1818   scsidev_device::device_start();
1919
20   //req_timer = timer_alloc(0);
21   sel_timer = timer_alloc(2);
22   dataout_timer = timer_alloc(3);
20   req_timer = timer_alloc(0);
21   sel_timer = timer_alloc(1);
22   dataout_timer = timer_alloc(2);
2323
2424   save_item( NAME( command ) );
2525   save_item( NAME( commandLength ) );
r18411r18412
160160}
161161
162162#define BSY_DELAY_NS    50
163//#define REQ_DELAY_NS    90
163#define REQ_DELAY_NS    90
164164
165165static const char *const phasenames[] =
166166{
r18411r18412
214214        3   2 + line changes
215215*/
216216
217#define LOGLEVEL            0
217#define LOGLEVEL            2
218218
219#define LOG(level,...)      if(LOGLEVEL>=level) logerror(__VA_ARGS__)
219#define LOG(level,...)      if(LOGLEVEL>=level) printf(__VA_ARGS__)
220220
221//void scsibus_device::scsi_out_line_change(UINT8 line, UINT8 state)
222//{
223//  if(line==SCSI_LINE_REQ)
224//      scsi_out_line_req(state);
225//  else
226//      scsi_out_line_change_now(line,state);
227//}
228//
229//void scsibus_device::scsi_out_line_req(UINT8 state)
230//{
231//  req_timer->adjust(attotime::from_nsec(REQ_DELAY_NS),state);
232//}
233//
221void scsihle_device::scsi_out_req_delay(UINT8 state)
222{
223   req_timer->adjust(attotime::from_nsec(REQ_DELAY_NS),state);
224}
234225
235226void scsihle_device::dump_bytes(UINT8 *buff, int count)
236227{
r18411r18412
288279{
289280   switch( tid )
290281   {
291//  case 0:
292//      scsi_out_line_change_now(SCSI_LINE_REQ, param);
293//      break;
282   case 0:
283      scsi_out(param * SCSI_MASK_REQ, SCSI_MASK_REQ);
284      break;
294285
295   case 2:
286   case 1:
296287      scsi_out(param * SCSI_MASK_BSY, SCSI_MASK_BSY);
297288      break;
298289
299   case 3:
290   case 2:
300291      // Some drives, notably the ST225N and ST125N, accept fromat unit commands
301292      // with flags set indicating that bad block data should be transfered but
302293      // don't then implemnt a data in phase, this timeout it to catch these !
303294      if(IS_COMMAND(SCSI_CMD_FORMAT_UNIT) && (data_idx==0))
295      {
304296         scsi_change_phase(SCSI_PHASE_STATUS);
297      }
305298      break;
306299   }
307300}
r18411r18412
423416         break;
424417
425418      case SCSI_PHASE_COMMAND:
426         scsi_out( SCSI_MASK_DATA | SCSI_MASK_IO | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );
419         scsi_out( SCSI_MASK_DATA | SCSI_MASK_IO | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );
427420         LOG(1,"\nSCSIBUS: Command begin\n");
421         scsi_out_req_delay( 0 );
428422         break;
429423
430424      case SCSI_PHASE_DATAOUT:
431         scsi_out( SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG, SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );
425         scsi_out( SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );
426         scsi_out_req_delay( 0 );
432427         break;
433428
434429      case SCSI_PHASE_DATAIN:
435         scsi_out( SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );
430         scsi_out( SCSI_MASK_CD | SCSI_MASK_MSG, SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );
431         scsi_out_req_delay( 0 );
436432         break;
437433
438434      case SCSI_PHASE_STATUS:
439         scsi_out( SCSI_STATUS_OK | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );
435         scsi_out( SCSI_STATUS_OK | SCSI_MASK_MSG, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );
436         scsi_out_req_delay( 0 );
440437         break;
441438
442439      case SCSI_PHASE_MESSAGE_OUT:
443         scsi_out( SCSI_MASK_IO, SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );
440         scsi_out( SCSI_MASK_DATA | SCSI_MASK_IO, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );
441         scsi_out_req_delay( 0 );
444442         break;
445443
446444      case SCSI_PHASE_MESSAGE_IN:
447         scsi_out( 0, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG | SCSI_MASK_REQ );// no errors for the time being !
445         scsi_out( 0, SCSI_MASK_DATA | SCSI_MASK_CD | SCSI_MASK_IO | SCSI_MASK_MSG );// no errors for the time being !
446         scsi_out_req_delay( 0 );
448447         break;
449448   }
450449}
r18411r18412
469468         // only one line active.
470469         if( ( mask & SCSI_MASK_SEL ) != 0 && scsibus_driveno(data & SCSI_MASK_DATA) == scsiID)
471470         {
472            void *hdfile;
471            void *hdfile = NULL;
473472            // Check to see if device had image file mounted, if not, do not set busy,
474473            // and stay busfree.
475474            GetDevice(&hdfile);
r18411r18412
482481               }
483482               else
484483               {
485                  sel_timer->adjust(attotime::from_nsec(BSY_DELAY_NS));
484                  sel_timer->adjust(attotime::from_nsec(BSY_DELAY_NS),0);
486485               }
487486            }
488487         }
r18411r18412
502501               }
503502               else
504503               {
505                  scsi_out( 0, SCSI_MASK_REQ );
504                  scsi_out_req_delay( 0 );
506505               }
507506            }
508507            else
509508            {
510               scsi_out( SCSI_MASK_REQ, SCSI_MASK_REQ );
509               scsi_out_req_delay( 1 );
511510            }
512511         }
513512         break;
r18411r18412
530529               }
531530               else
532531               {
533                  scsi_out( buffer[ data_idx++ ], SCSI_MASK_DATA | SCSI_MASK_REQ );
532                  scsi_out( buffer[ data_idx++ ], SCSI_MASK_DATA );
533                  scsi_out_req_delay( 0 );
534534               }
535535            }
536536            else
537537            {
538               scsi_out( SCSI_MASK_REQ, SCSI_MASK_REQ );
538               scsi_out_req_delay( 1 );
539539            }
540540         }
541541         break;
r18411r18412
578578               }
579579               else
580580               {
581                  scsi_out( 0, SCSI_MASK_REQ );
581                  scsi_out_req_delay( 0 );
582582               }
583583            }
584584            else
585585            {
586               scsi_out( SCSI_MASK_REQ, SCSI_MASK_REQ );
586               scsi_out_req_delay( 1 );
587587            }
588588         }
589589         break;
r18411r18412
599599               }
600600               else
601601               {
602                  scsi_out( 0, SCSI_MASK_REQ );
602                  scsi_out_req_delay( 0 );
603603               }
604604            }
605605            else
606606            {
607607               cmd_idx++;
608               scsi_out( SCSI_MASK_REQ, SCSI_MASK_REQ );
608               scsi_out_req_delay( 1 );
609609            }
610610         }
611611         break;
r18411r18412
624624               }
625625               else
626626               {
627                  scsi_out( 0, SCSI_MASK_REQ );
627                  scsi_out_req_delay( 0 );
628628               }
629629            }
630630            else
631631            {
632632               cmd_idx++;
633               scsi_out( SCSI_MASK_REQ, SCSI_MASK_REQ );
633               scsi_out_req_delay( 1 );
634634            }
635635         }
636636         break;
trunk/src/emu/machine/scsihle.h
r18411r18412
4141   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
4242
4343private:
44   void scsi_out_req_delay(UINT8 state);
4445   void scsi_change_phase(UINT8 newphase);
4546   int get_scsi_cmd_len(int cbyte);
4647   UINT8 scsibus_driveno(UINT8  drivesel);
r18411r18412
5253   void dump_data_bytes(int count);
5354   void dump_bytes(UINT8 *buff, int count);
5455
55   //emu_timer *req_timer;
56   emu_timer *req_timer;
5657   emu_timer *sel_timer;
5758   emu_timer *dataout_timer;
5859

Previous 199869 Revisions Next


© 1997-2024 The MAME Team