If you select a PRG file using the Pi's browser then it will mount it into a virtual D64 so fast loaders can be used.
Note: FB64 will still use SD2IEC style loading directlyfrom the Pi's file system.
This commit is contained in:
parent
67c82503e6
commit
1ca78e3383
4 changed files with 57 additions and 0 deletions
|
@ -182,6 +182,9 @@ bool DiskCaddy::Insert(const FILINFO* fileInfo, bool readOnly)
|
||||||
case DiskImage::T64:
|
case DiskImage::T64:
|
||||||
success = InsertT64(fileInfo, (unsigned char*)DiskImage::readBuffer, bytesRead, readOnly);
|
success = InsertT64(fileInfo, (unsigned char*)DiskImage::readBuffer, bytesRead, readOnly);
|
||||||
break;
|
break;
|
||||||
|
case DiskImage::PRG:
|
||||||
|
success = InsertPRG(fileInfo, (unsigned char*)DiskImage::readBuffer, bytesRead, readOnly);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
success = false;
|
success = false;
|
||||||
break;
|
break;
|
||||||
|
@ -289,6 +292,20 @@ bool DiskCaddy::InsertT64(const FILINFO* fileInfo, unsigned char* diskImageData,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DiskCaddy::InsertPRG(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly)
|
||||||
|
{
|
||||||
|
DiskImage* diskImage = new DiskImage();
|
||||||
|
if (diskImage->OpenPRG(fileInfo, diskImageData, size))
|
||||||
|
{
|
||||||
|
diskImage->SetReadOnly(readOnly);
|
||||||
|
disks.push_back(diskImage);
|
||||||
|
selectedIndex = disks.size() - 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
delete diskImage;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void DiskCaddy::Display()
|
void DiskCaddy::Display()
|
||||||
{
|
{
|
||||||
unsigned numberOfImages = GetNumberOfImages();
|
unsigned numberOfImages = GetNumberOfImages();
|
||||||
|
|
|
@ -107,6 +107,7 @@ private:
|
||||||
bool InsertNBZ(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
bool InsertNBZ(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
||||||
bool InsertD81(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
bool InsertD81(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
||||||
bool InsertT64(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
bool InsertT64(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
||||||
|
bool InsertPRG(const FILINFO* fileInfo, unsigned char* diskImageData, unsigned size, bool readOnly);
|
||||||
|
|
||||||
void ShowSelectedImage(u32 index);
|
void ShowSelectedImage(u32 index);
|
||||||
|
|
||||||
|
|
|
@ -176,6 +176,7 @@ void DiskImage::Close()
|
||||||
memset(tracks, 0x55, sizeof(tracks));
|
memset(tracks, 0x55, sizeof(tracks));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
memset(tracks, 0x55, sizeof(tracks));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
memset(trackLengths, 0, sizeof(trackLengths));
|
memset(trackLengths, 0, sizeof(trackLengths));
|
||||||
|
@ -1295,6 +1296,40 @@ void DiskImage::CloseT64()
|
||||||
attachedImageSize = 0;
|
attachedImageSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DiskImage::OpenPRG(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size)
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
|
||||||
|
Close();
|
||||||
|
|
||||||
|
this->fileInfo = fileInfo;
|
||||||
|
|
||||||
|
attachedImageSize = size;
|
||||||
|
|
||||||
|
unsigned char* newDiskImage = (unsigned char*)malloc(READBUFFER_SIZE);
|
||||||
|
|
||||||
|
if (newDiskImage)
|
||||||
|
{
|
||||||
|
unsigned length = DiskImage::CreateNewDiskInRAM(fileInfo->fname, "00", newDiskImage);
|
||||||
|
|
||||||
|
if (length)
|
||||||
|
{
|
||||||
|
bool addFileSuccess = AddFileToRAMD64(newDiskImage, fileInfo->fname, diskImage, size);
|
||||||
|
|
||||||
|
if (addFileSuccess && OpenD64(fileInfo, newDiskImage, length))
|
||||||
|
{
|
||||||
|
success = true;
|
||||||
|
DEBUG_LOG("Success\r\n");
|
||||||
|
diskType = PRG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(newDiskImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
bool DiskImage::GetDecodedSector(u32 track, u32 sector, u8* buffer)
|
bool DiskImage::GetDecodedSector(u32 track, u32 sector, u8* buffer)
|
||||||
{
|
{
|
||||||
if (track > 0)
|
if (track > 0)
|
||||||
|
@ -1327,6 +1362,8 @@ DiskImage::DiskType DiskImage::GetDiskImageTypeViaExtention(const char* diskImag
|
||||||
return LST;
|
return LST;
|
||||||
else if (toupper((char)ext[1]) == 'D' && ext[2] == '8' && ext[3] == '1')
|
else if (toupper((char)ext[1]) == 'D' && ext[2] == '8' && ext[3] == '1')
|
||||||
return D81;
|
return D81;
|
||||||
|
else if (toupper((char)ext[1]) == 'P' && toupper((char)ext[2]) == 'R' && toupper((char)ext[3]) == 'G')
|
||||||
|
return PRG;
|
||||||
}
|
}
|
||||||
return NONE;
|
return NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ public:
|
||||||
D71,
|
D71,
|
||||||
D81,
|
D81,
|
||||||
T64,
|
T64,
|
||||||
|
PRG,
|
||||||
RAW
|
RAW
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,6 +78,7 @@ public:
|
||||||
bool OpenD71(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
bool OpenD71(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
||||||
bool OpenD81(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
bool OpenD81(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
||||||
bool OpenT64(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
bool OpenT64(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
||||||
|
bool OpenPRG(const FILINFO* fileInfo, unsigned char* diskImage, unsigned size);
|
||||||
|
|
||||||
void Close();
|
void Close();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue