| 1386 | } |
| 1387 | |
| 1388 | static int scsi_read_cd(int unitnum, uae_u8 *cmd, uae_u8 *data, struct device_info *di) |
| 1389 | { |
| 1390 | struct blkdevstate *st = &state[unitnum]; |
| 1391 | int msf = cmd[0] == 0xb9; |
| 1392 | int start = msf ? msf2lsn (rl (cmd + 2) & 0x00ffffff) : rl (cmd + 2); |
| 1393 | int len = rl (cmd + 5) & 0x00ffffff; |
| 1394 | if (msf) { |
| 1395 | int end = msf2lsn (len); |
| 1396 | len = end - start; |
| 1397 | if (len < 0) |
| 1398 | return -1; |
| 1399 | } |
| 1400 | int subs = cmd[10] & 7; |
| 1401 | if (len == 0) |
| 1402 | return 0; |
| 1403 | int v = sys_command_cd_rawread (unitnum, data, start, len, 0, (cmd[1] >> 2) & 7, cmd[9], subs); |
| 1404 | if (v > 0) |
| 1405 | st->current_pos = start + len; |
| 1406 | return v; |
| 1407 | } |
| 1408 | |
| 1409 | static int scsi_read_cd_data (int unitnum, uae_u8 *scsi_data, uae_u32 offset, uae_u32 len, struct device_info *di, int *scsi_len, struct cd_toc *t) |
| 1410 | { |
no test coverage detected