D64 images with extra error information now has that data applied.
This commit is contained in:
parent
64291c0dfd
commit
a0e88c5e79
1 changed files with 33 additions and 2 deletions
|
@ -159,6 +159,11 @@ void DiskImage::DumpTrack(unsigned track)
|
||||||
|
|
||||||
bool DiskImage::OpenD64(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size)
|
bool DiskImage::OpenD64(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size)
|
||||||
{
|
{
|
||||||
|
unsigned char errorinfo[MAXBLOCKSONDISK];
|
||||||
|
unsigned last_track = MAXBLOCKSONDISK;
|
||||||
|
unsigned sector_ref;
|
||||||
|
unsigned char error;
|
||||||
|
|
||||||
Close();
|
Close();
|
||||||
|
|
||||||
this->fileInfo = fileInfo;
|
this->fileInfo = fileInfo;
|
||||||
|
@ -170,7 +175,31 @@ bool DiskImage::OpenD64(const FILINFO* fileInfo, unsigned char* diskImage, unsig
|
||||||
|
|
||||||
attachedImageSize = size;
|
attachedImageSize = size;
|
||||||
|
|
||||||
for (unsigned halfTrackIndex = 0; halfTrackIndex < HALF_TRACK_COUNT; ++halfTrackIndex)
|
memset(errorinfo, SECTOR_OK, sizeof(errorinfo));
|
||||||
|
|
||||||
|
switch (size)
|
||||||
|
{
|
||||||
|
case (BLOCKSONDISK * 257): // 35 track image with errorinfo
|
||||||
|
memcpy(errorinfo, diskImage + (BLOCKSONDISK * 256), BLOCKSONDISK);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case (BLOCKSONDISK * 256): // 35 track image w/o errorinfo
|
||||||
|
last_track = 35;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case (MAXBLOCKSONDISK * 257): // 40 track image with errorinfo
|
||||||
|
memcpy(errorinfo, diskImage + (MAXBLOCKSONDISK * 256), MAXBLOCKSONDISK);
|
||||||
|
/* FALLTHROUGH */
|
||||||
|
case (MAXBLOCKSONDISK * 256): // 40 track image w/o errorinfo
|
||||||
|
last_track = 40;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: // non-standard images, attempt to load anyway
|
||||||
|
last_track = 40;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
sector_ref = 0;
|
||||||
|
for (unsigned halfTrackIndex = 0; halfTrackIndex < last_track * 2; ++halfTrackIndex)
|
||||||
{
|
{
|
||||||
unsigned char track = (halfTrackIndex >> 1);
|
unsigned char track = (halfTrackIndex >> 1);
|
||||||
unsigned char* dest = tracks[halfTrackIndex];
|
unsigned char* dest = tracks[halfTrackIndex];
|
||||||
|
@ -185,7 +214,9 @@ bool DiskImage::OpenD64(const FILINFO* fileInfo, unsigned char* diskImage, unsig
|
||||||
//DEBUG_LOG("Track %d used\r\n", halfTrackIndex);
|
//DEBUG_LOG("Track %d used\r\n", halfTrackIndex);
|
||||||
for (unsigned sectorNo = 0; sectorNo < SectorsPerTrack[track]; ++sectorNo)
|
for (unsigned sectorNo = 0; sectorNo < SectorsPerTrack[track]; ++sectorNo)
|
||||||
{
|
{
|
||||||
convert_sector_to_GCR(diskImage + offset, dest, track + 1, sectorNo, diskImage + 0x165A2, 0);
|
error = errorinfo[sector_ref++];
|
||||||
|
|
||||||
|
convert_sector_to_GCR(diskImage + offset, dest, track + 1, sectorNo, diskImage + 0x165A2, error);
|
||||||
dest += 361;
|
dest += 361;
|
||||||
|
|
||||||
offset += SECTOR_LENGTH;
|
offset += SECTOR_LENGTH;
|
||||||
|
|
Loading…
Reference in a new issue