Fixed bug with https://csdb.dk/release/?id=11627 directory display.
grue on Lemon found this image that caused an infinite loop when attempting to display the directory.
This commit is contained in:
parent
c961e2b5b0
commit
e4dc6e54ec
1 changed files with 5 additions and 0 deletions
|
@ -991,6 +991,8 @@ void FileBrowser::DisplayDiskInfo(DiskImage* diskImage, const char* filenameForI
|
|||
|
||||
if (track != 0)
|
||||
{
|
||||
unsigned trackPrev = 0xff;
|
||||
unsigned sectorPrev = 0xff;
|
||||
bool complete = false;
|
||||
// Blocks 1 through 19 on track 18 contain the file entries. The first two bytes of a block point to the next directory block with file entries. If no more directory blocks follow, these bytes contain $00 and $FF, respectively.
|
||||
while (!complete)
|
||||
|
@ -1002,8 +1004,11 @@ void FileBrowser::DisplayDiskInfo(DiskImage* diskImage, const char* filenameForI
|
|||
unsigned sectorNoNext = buffer[1];
|
||||
|
||||
complete = (track == trackNext) && (sectorNo == sectorNoNext); // Detect looping directory entries (raid over moscow ntsc)
|
||||
complete |= (trackNext == trackPrev) && (sectorNoNext == sectorPrev); // Detect looping directory entries (IndustrialBreakdown)
|
||||
complete |= (trackNext == 00) || (sectorNoNext == 0xff);
|
||||
complete |= (trackNext == 18) && (sectorNoNext == 1);
|
||||
trackPrev = track;
|
||||
sectorPrev = sectorNo;
|
||||
track = trackNext;
|
||||
sectorNo = sectorNoNext;
|
||||
|
||||
|
|
Loading…
Reference in a new issue