trunk/src/emu/machine/scsihle.c
| r25371 | r25372 | |
| 61 | 61 | |
| 62 | 62 | #define FORMAT_UNIT_TIMEOUT 5 |
| 63 | 63 | |
| 64 | | struct 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 | | |
| 87 | 64 | /* |
| 88 | 65 | LOGLEVEL |
| 89 | 66 | 0 no logging, |
| r25371 | r25372 | |
| 172 | 149 | if(IS_COMMAND(SCSI_CMD_FORMAT_UNIT) && (data_idx==0)) |
| 173 | 150 | { |
| 174 | 151 | scsi_change_phase(SCSI_PHASE_STATUS); |
| 175 | | } |
| 176 | | break; |
| 177 | 152 | } |
| 153 | break; |
| 178 | 154 | } |
| 155 | } |
| 179 | 156 | |
| 180 | 157 | void scsihle_device::scsibus_exec_command() |
| 181 | 158 | { |
| r25371 | r25372 | |
| 448 | 425 | |
| 449 | 426 | if(data_idx == 0 && bytes_left == 0) |
| 450 | 427 | { |
| 451 | | check_process_dataout(); |
| 452 | 428 | scsi_change_phase(SCSI_PHASE_STATUS); |
| 453 | 429 | } |
| 454 | 430 | else |
| r25371 | r25372 | |
| 512 | 488 | } |
| 513 | 489 | } |
| 514 | 490 | |
| 515 | | void 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 | | |
| 536 | 491 | // get the length of a SCSI command based on it's command byte type |
| 537 | 492 | int scsihle_device::get_scsi_cmd_len(int cbyte) |
| 538 | 493 | { |
trunk/src/mess/machine/acb4070.c
| r25371 | r25372 | |
| 33 | 33 | m_transfer_length = TRANSFERLENGTH_DATA_BUFFER; |
| 34 | 34 | break; |
| 35 | 35 | |
| 36 | case SCSI_CMD_MODE_SELECT: |
| 37 | m_phase = SCSI_PHASE_DATAOUT; |
| 38 | m_transfer_length = SCSILengthFromUINT8( &command[ 4 ] ); |
| 39 | break; |
| 40 | |
| 36 | 41 | default: |
| 37 | 42 | scsihd_device::ExecCommand(); |
| 38 | 43 | break; |
| 39 | 44 | } |
| 40 | 45 | } |
| 46 | |
| 47 | void 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 | } |