154 |
|
fprintf(stderr, "Track %d: header checksum incorrect\n", track); |
155 |
|
// we'll try to continue anyways |
156 |
|
} |
157 |
< |
if (header[2] >= num_sectors[track]) { |
157 |
> |
if (header[2] >= format->num_sectors[track]) { |
158 |
|
fprintf(stderr, "Track %d: invalid sector number in header\n", track); |
159 |
|
return 0; |
160 |
|
} |
161 |
|
if (header[3] != track) { |
162 |
< |
fprintf(stderr, "Track %d: invalid track number in header (seek error?)\n", track); |
162 |
> |
fprintf(stderr, "Track %d: invalid track number (%d) in header (seek error?)\n", track, header[3]); |
163 |
|
return 0; |
164 |
|
} |
165 |
|
|
207 |
|
|
208 |
|
// No sector read yet |
209 |
|
unsigned long sector_found = 0; |
210 |
< |
unsigned long all_sectors = (1 << num_sectors[track]) - 1; |
210 |
> |
unsigned long all_sectors = (1 << format->num_sectors[track]) - 1; |
211 |
|
|
212 |
|
// Reset buffer pointer |
213 |
|
buf_ptr = 0; |
243 |
|
|
244 |
|
// Check if all sectors of the track were found |
245 |
|
if (sector_found != all_sectors) { |
246 |
< |
for (sector = 0; sector < num_sectors[track]; sector++) |
246 |
> |
for (sector = 0; sector < format->num_sectors[track]; sector++) |
247 |
|
if (!(sector_found & (1 << sector))) |
248 |
|
fprintf(stderr, "Track %d: sector %d not found\n", track, sector); |
249 |
|
} |
259 |
|
seek_to(drive, track); |
260 |
|
|
261 |
|
// Clear buffer |
262 |
< |
memset(track_buf, 0, num_sectors[track] * SECTOR_SIZE); |
262 |
> |
memset(track_buf, 0, format->num_sectors[track] * SECTOR_SIZE); |
263 |
|
|
264 |
|
// Read track (1 revolution + 10%) |
265 |
< |
if (!catweasel_read(c.drives + drive, 0, 1, 1100 * 60 / drive_rpm)) { |
265 |
> |
if (!catweasel_read(c.drives + drive, track > format->tracks_per_side ? 1 : 0, 1, 1100 * 60 / drive_rpm)) { |
266 |
|
fprintf(stderr, "Error reading track %d\n", track); |
267 |
|
return 0; |
268 |
|
} |
318 |
|
start_drive(drive_num); |
319 |
|
|
320 |
|
// Read all tracks |
321 |
< |
for (track = 1; track <= NUM_TRACKS; track++) { |
321 |
> |
for (track = 1; track <= format->sides * format->tracks_per_side; track++) { |
322 |
|
printf("Track %d...\n", track); |
323 |
|
if (!read_track(drive_num, track)) |
324 |
|
break; |
325 |
< |
fwrite(track_buf, 256, num_sectors[track], f); |
325 |
> |
fwrite(track_buf, 256, format->num_sectors[track], f); |
326 |
|
} |
327 |
|
|
328 |
|
// Stop drive |