trunk/src/mess/machine/s1410.c
| r26163 | r26164 | |
| 212 | 212 | #define S1410_CMD_DRIVE_DIAGS ( 0xe3 ) |
| 213 | 213 | #define S1410_CMD_CONTROLER_DIAGS ( 0xe4 ) |
| 214 | 214 | |
| 215 | #define S1410_STATUS_NOT_READY ( 0x04 ) |
| 216 | |
| 215 | 217 | #define TRANSFERLENGTH_INIT_DRIVE_PARAMS ( 0x08 ) |
| 216 | 218 | #define TRANSFERLENGTH_FORMAT_ALT_TRACK ( 0x03 ) |
| 217 | 219 | #define TRANSFERLENGTH_SECTOR_BUFFER ( 0x0200 ) |
| r26163 | r26164 | |
| 220 | 222 | { |
| 221 | 223 | switch( command[ 0 ] ) |
| 222 | 224 | { |
| 225 | case SCSI_CMD_RECALIBRATE: |
| 226 | if (command[1] >> 5) |
| 227 | { |
| 228 | m_phase = SCSI_PHASE_STATUS; |
| 229 | m_status_code = SCSI_STATUS_CODE_CHECK_CONDITION; |
| 230 | m_sense_asc = S1410_STATUS_NOT_READY; |
| 231 | m_transfer_length = 0; |
| 232 | } |
| 233 | else |
| 234 | { |
| 235 | scsihd_device::ExecCommand(); |
| 236 | } |
| 237 | break; |
| 238 | |
| 239 | case SCSI_CMD_REQUEST_SENSE: |
| 240 | m_phase = SCSI_PHASE_DATAIN; |
| 241 | m_status_code = SCSI_STATUS_CODE_GOOD; |
| 242 | m_transfer_length = 4; |
| 243 | break; |
| 244 | |
| 223 | 245 | case S1410_CMD_FORMAT_TRACK: |
| 224 | 246 | { |
| 225 | 247 | lba = (command[1]&0x1f)<<16 | command[2]<<8 | command[3]; |
| r26163 | r26164 | |
| 345 | 367 | break; |
| 346 | 368 | } |
| 347 | 369 | } |
| 370 | |
| 371 | void s1410_device::ReadData( UINT8 *data, int dataLength ) |
| 372 | { |
| 373 | switch( command[ 0 ] ) |
| 374 | { |
| 375 | case SCSI_CMD_REQUEST_SENSE: |
| 376 | data[0] = m_sense_asc & 0x7f; |
| 377 | data[1] = (m_sense_information >> 16) & 0x1f; |
| 378 | data[2] = (m_sense_information >> 8) & 0xff; |
| 379 | data[3] = (m_sense_information >> 0) & 0xff; |
| 380 | break; |
| 381 | |
| 382 | default: |
| 383 | scsihd_device::ReadData( data, dataLength ); |
| 384 | break; |
| 385 | } |
| 386 | } |