read block */
| 1015 | |
| 1016 | /* read block */ |
| 1017 | int sys_command_read (int unitnum, uae_u8 *data, int block, int size) |
| 1018 | { |
| 1019 | int v; |
| 1020 | if (failunit (unitnum)) |
| 1021 | return 0; |
| 1022 | if (!getsem (unitnum)) |
| 1023 | return 0; |
| 1024 | if (state[unitnum].device_func->read == NULL) { |
| 1025 | uae_u8 cmd[12] = { 0xa8, 0, 0, 0, 0, 0, (uae_u8)(size >> 24), (uae_u8)(size >> 16), (uae_u8)(size >> 8), (uae_u8)(size >> 0), 0, 0 }; |
| 1026 | cmd[2] = (uae_u8)(block >> 24); |
| 1027 | cmd[3] = (uae_u8)(block >> 16); |
| 1028 | cmd[4] = (uae_u8)(block >> 8); |
| 1029 | cmd[5] = (uae_u8)(block >> 0); |
| 1030 | v = do_scsi (unitnum, cmd, sizeof cmd, data, size * 2048); |
| 1031 | } else { |
| 1032 | v = state[unitnum].device_func->read (unitnum, data, block, size); |
| 1033 | } |
| 1034 | freesem (unitnum); |
| 1035 | return v; |
| 1036 | } |
| 1037 | |
| 1038 | /* write block */ |
| 1039 | int sys_command_write (int unitnum, uae_u8 *data, int offset, int size) |