/* cache info about track */ static void mfm_disk_cache_data(mess_image *image, int track, int side) { struct mfm_disk_info *mfm_disk = get_disk(image); if ((track!=mfm_disk->CachedTrack) || (side!=mfm_disk->CachedSide)) { unsigned char *pTrackPtr = mfm_disk_get_track_ptr(image, track, side); unsigned long TrackSize = mfm_disk_get_track_size(image); mfm_info_cache_sector_info(image, pTrackPtr, TrackSize); mfm_disk->CachedTrack = track; mfm_disk->CachedSide = side; } }
static floperr_t get_offset(floppy_image *floppy, int head, int track, int sector, int sector_is_index, UINT64 *offset) { UINT64 offs; /* translate the sector to a raw sector */ if (!sector_is_index) { sector -= 1; } mfm_info_cache_sector_info(floppy,track,head); /* check to see if we are out of range */ if ((head < 0) || (head >= get_tag(floppy)->heads) || (track < 0) || (track >= get_tag(floppy)->tracks) || (sector < 0) || (sector >=get_tag(floppy)->num_sectors)) return FLOPPY_ERROR_SEEKERROR; offs = get_tag(floppy)->sector_data[sector].data_ptr; if (offset) *offset = offs; return FLOPPY_ERROR_SUCCESS; }