Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
                }
        }
}
Ejemplo n.º 3
0
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;
		}
	}
}