void fdi_seek(int drive, int track) { int c; if (!fdi_f[drive]) return; // printf("Track start %i\n",track); if (track < 0) track = 0; if (track > fdi_lasttrack[drive]) track = fdi_lasttrack[drive] - 1; c = fdi2raw_loadtrack(fdi_h[drive], (uint16_t *)fdi_trackinfo[drive][0][0], (uint16_t *)fdi_timing, track << fdi_sides[drive], &fdi_tracklen[drive][0][0], &fdi_trackindex[drive][0][0], NULL, 0); if (!c) memset(fdi_trackinfo[drive][0][0], 0, fdi_tracklen[drive][0][0]); c = fdi2raw_loadtrack(fdi_h[drive], (uint16_t *)fdi_trackinfo[drive][0][1], (uint16_t *)fdi_timing, track << fdi_sides[drive], &fdi_tracklen[drive][0][1], &fdi_trackindex[drive][0][1], NULL, 1); if (!c) memset(fdi_trackinfo[drive][0][1], 0, fdi_tracklen[drive][0][1]); if (fdi_sides[drive]) { c = fdi2raw_loadtrack(fdi_h[drive], (uint16_t *)fdi_trackinfo[drive][1][0], (uint16_t *)fdi_timing, (track << fdi_sides[drive]) + 1, &fdi_tracklen[drive][1][0], &fdi_trackindex[drive][1][0], NULL, 0); if (!c) memset(fdi_trackinfo[drive][1][0], 0, fdi_tracklen[drive][1][0]); c = fdi2raw_loadtrack(fdi_h[drive], (uint16_t *)fdi_trackinfo[drive][1][1], (uint16_t *)fdi_timing, (track << fdi_sides[drive]) + 1, &fdi_tracklen[drive][1][1], &fdi_trackindex[drive][1][1], NULL, 1); if (!c) memset(fdi_trackinfo[drive][1][1], 0, fdi_tracklen[drive][1][1]); } else { memset(fdi_trackinfo[drive][1][0], 0, 65536); memset(fdi_trackinfo[drive][1][1], 0, 65536); fdi_tracklen[drive][1][0] = fdi_tracklen[drive][1][1] = 10000; fdi_trackindex[drive][1][0] = fdi_trackindex[drive][1][1] = 100; } // printf("SD Track %i Len %i Index %i %i\n",track,ftracklen[drive][0][0],ftrackindex[drive][0][0],c); // printf("DD Track %i Len %i Index %i %i\n",track,ftracklen[drive][0][1],ftrackindex[drive][0][1],c); }
void fdi_seek(int drive, int track) { int c; int density; if (!fdi[drive].f) return; // printf("Track start %i\n",track); if (track < 0) track = 0; if (track > fdi[drive].lasttrack) track = fdi[drive].lasttrack - 1; for (density = 0; density < 4; density++) { int c = fdi2raw_loadtrack(fdi[drive].h, (uint16_t *)fdi[drive].track_data[0][density], (uint16_t *)fdi_timing, track * fdi[drive].sides, &fdi[drive].tracklen[0][density], &fdi[drive].trackindex[0][density], NULL, density); if (!c) memset(fdi[drive].track_data[0][density], 0, fdi[drive].tracklen[0][density]); if (fdi[drive].sides == 2) { c = fdi2raw_loadtrack(fdi[drive].h, (uint16_t *)fdi[drive].track_data[1][density], (uint16_t *)fdi_timing, (track * fdi[drive].sides) + 1, &fdi[drive].tracklen[1][density], &fdi[drive].trackindex[1][density], NULL, density); if (!c) memset(fdi[drive].track_data[1][density], 0, fdi[drive].tracklen[1][density]); } else { memset(fdi[drive].track_data[1][density], 0, 65536); fdi[drive].tracklen[0][density] = fdi[drive].tracklen[1][density] = 10000; } } }
void fdi_read_revolution(int drive) { int density; int track = fdi[drive].track; int side = 0; if (track > fdi[drive].lasttrack) { for (density = 0; density < 4; density++) { memset(fdi[drive].track_data[0][density], 0, 106096); memset(fdi[drive].track_data[1][density], 0, 106096); fdi[drive].tracklen[0][density] = fdi[drive].tracklen[1][density] = 100000; } return; } for (density = 0; density < 4; density++) { for (side = 0; side < fdi[drive].sides; side++) { int c = fdi2raw_loadtrack(fdi[drive].h, (uint16_t *)fdi[drive].track_data[side][density], (uint16_t *)fdi[drive].track_timing[side][density], (track * fdi[drive].sides) + side, &fdi[drive].tracklen[side][density], &fdi[drive].trackindex[side][density], NULL, density); if (!c) memset(fdi[drive].track_data[side][density], 0, fdi[drive].tracklen[side][density]); } if (fdi[drive].sides == 1) { memset(fdi[drive].track_data[1][density], 0, 106096); fdi[drive].tracklen[1][density] = 100000; } } }