check DOS format bug

This commit is contained in:
Denis Molony 2020-12-18 19:10:18 +10:00
parent 26d218621b
commit 697c164aee
2 changed files with 12 additions and 6 deletions

View File

@ -395,7 +395,8 @@ public class DosDisk extends AbstractFormattedDisk
if (debug)
System.out.printf ("Catalog blocks: %s%n", catalogBlocks);
disk.setDosVersion (version);
if (catalogBlocks > 0)
disk.setDosVersion (version);
return catalogBlocks;
}
@ -403,6 +404,13 @@ public class DosDisk extends AbstractFormattedDisk
private static int countCatalogBlocks (AppleDisk disk, byte[] buffer)
// ---------------------------------------------------------------------------------//
{
if (!disk.isValidAddress (buffer[1], buffer[2]))
{
if (debug)
System.out.printf ("Invalid address1: %02X %02X%n", buffer[1], buffer[2]);
return 0;
}
DiskAddress catalogStart = disk.getDiskAddress (buffer[1], buffer[2]);
DiskAddress da = disk.getDiskAddress (catalogStart.getBlockNo ());
List<DiskAddress> catalogAddresses = new ArrayList<> ();
@ -430,14 +438,13 @@ public class DosDisk extends AbstractFormattedDisk
if (!disk.isValidAddress (buffer[1], buffer[2]))
{
if (debug)
System.out.printf ("Invalid address: %02X %02X%n", buffer[1], buffer[2]);
System.out.printf ("Invalid address2: %02X %02X%n", buffer[1], buffer[2]);
return catalogAddresses.size ();
}
catalogAddresses.add (da);
da = disk.getDiskAddress (buffer[1], buffer[2]);
} while (!da.isZero ());
if (debug)

View File

@ -108,7 +108,6 @@ public class PascalDisk extends AbstractFormattedDisk
addresses.add (disk.getDiskAddress (i));
buffer = disk.readBlocks (addresses);
// loop through each catalog entry (what if there are deleted files?)
for (int i = 1; i <= volumeEntry.totalFiles; i++)
{
int ptr = i * CATALOG_ENTRY_SIZE;
@ -179,11 +178,11 @@ public class PascalDisk extends AbstractFormattedDisk
}
int blocks = Utility.intValue (buffer[14], buffer[15]);
if (blocks > 280)
if (blocks != 280 && blocks != 1600)
{
if (debug)
System.out.printf ("Blocks > 280: %d%n", blocks);
// return false;
return false;
}
List<DiskAddress> addresses = new ArrayList<> ();