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

View File

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