Previous 199869 Revisions Next

r25372 Thursday 19th September, 2013 at 10:18:21 UTC by smf
Moved the adaptec mode sense handling into the ACB4070 device [smf]
[src/emu/machine]scsihle.c scsihle.h
[src/mess/machine]acb4070.c acb4070.h

trunk/src/emu/machine/scsihle.c
r25371r25372
6161
6262#define FORMAT_UNIT_TIMEOUT         5
6363
64struct adaptec_sense_t
65{
66   // parameter list
67   UINT8       reserved1[3];
68   UINT8       length;
69
70   // descriptor list
71   UINT8       density;
72   UINT8       reserved2[4];
73   UINT8       block_size[3];
74
75   // drive parameter list
76   UINT8       format_code;
77   UINT8       cylinder_count[2];
78   UINT8       head_count;
79   UINT8       reduced_write[2];
80   UINT8       write_precomp[2];
81   UINT8       landing_zone;
82   UINT8       step_pulse_code;
83   UINT8       bit_flags;
84   UINT8       sectors_per_track;
85};
86
8764/*
8865    LOGLEVEL
8966        0   no logging,
r25371r25372
172149      if(IS_COMMAND(SCSI_CMD_FORMAT_UNIT) && (data_idx==0))
173150      {
174151         scsi_change_phase(SCSI_PHASE_STATUS);
175      }
176      break;
177152   }
153      break;
178154}
155}
179156
180157void scsihle_device::scsibus_exec_command()
181158{
r25371r25372
448425
449426               if(data_idx == 0 && bytes_left == 0)
450427               {
451                  check_process_dataout();
452428                  scsi_change_phase(SCSI_PHASE_STATUS);
453429               }
454430               else
r25371r25372
512488   }
513489}
514490
515void scsihle_device::check_process_dataout()
516{
517   int capacity=0;
518   int tracks;
519   adaptec_sense_t *sense;
520
521   LOG(1,"SCSIBUS:check_process_dataout cmd=%02X\n",command[0]);
522
523   switch (command[0])
524   {
525      case SCSI_CMD_MODE_SELECT:
526         sense=(adaptec_sense_t *)buffer;
527         tracks=(sense->cylinder_count[0]<<8)+sense->cylinder_count[1];
528         capacity=(tracks * sense->head_count * 17);
529         LOG(1,"Tracks=%d, Heads=%d sec/track=%d\n",tracks,sense->head_count,sense->sectors_per_track);
530         LOG(1,"Setting disk capacity to %d blocks\n",capacity);
531         dump_data_bytes(0x16);
532         break;
533   }
534}
535
536491// get the length of a SCSI command based on it's command byte type
537492int scsihle_device::get_scsi_cmd_len(int cbyte)
538493{
trunk/src/emu/machine/scsihle.h
r25371r25372
4141   void scsibus_read_data();
4242   void scsibus_write_data();
4343   void scsibus_exec_command();
44   void check_process_dataout();
4544   void dump_command_bytes();
4645   void dump_data_bytes(int count);
4746   void dump_bytes(UINT8 *buff, int count);
trunk/src/mess/machine/acb4070.c
r25371r25372
3333      m_transfer_length = TRANSFERLENGTH_DATA_BUFFER;
3434      break;
3535
36   case SCSI_CMD_MODE_SELECT:
37      m_phase = SCSI_PHASE_DATAOUT;
38      m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] );
39      break;
40
3641   default:
3742      scsihd_device::ExecCommand();
3843      break;
3944   }
4045}
46
47void acb4070_device::WriteData( UINT8 *data, int dataLength )
48{
49   switch( command[ 0 ] )
50   {
51   case SCSI_CMD_MODE_SELECT:
52      adaptec_sense_t *sense=(adaptec_sense_t *) data;
53      int tracks=(sense->cylinder_count[0]<<8)+sense->cylinder_count[1];
54      int capacity=(tracks * sense->head_count * 17);
55      logerror("Tracks=%d, Heads=%d sec/track=%d\n",tracks,sense->head_count,sense->sectors_per_track);
56      logerror("Setting disk capacity to %d blocks\n",capacity);
57      break;
58   }
59}
trunk/src/mess/machine/acb4070.h
r25371r25372
1212   acb4070_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
1313
1414   virtual void ExecCommand();
15   virtual void WriteData( UINT8 *data, int dataLength );
16
17private:
18   struct adaptec_sense_t
19   {
20      // parameter list
21      UINT8       reserved1[3];
22      UINT8       length;
23
24      // descriptor list
25      UINT8       density;
26      UINT8       reserved2[4];
27      UINT8       block_size[3];
28
29      // drive parameter list
30      UINT8       format_code;
31      UINT8       cylinder_count[2];
32      UINT8       head_count;
33      UINT8       reduced_write[2];
34      UINT8       write_precomp[2];
35      UINT8       landing_zone;
36      UINT8       step_pulse_code;
37      UINT8       bit_flags;
38      UINT8       sectors_per_track;
39   };
1540};
1641
1742// device type definition

Previous 199869 Revisions Next


© 1997-2024 The MAME Team