From e1811f8fbe4213aec4fcaa6fa544c297048cafca Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Fri, 10 Apr 2020 10:47:42 +1000 Subject: [PATCH] fixed isValidCatalogSector() check --- .../diskbrowser/dos/CatalogEntry.java | 6 +- src/com/bytezone/diskbrowser/dos/DosDisk.java | 57 +++++++------------ 2 files changed, 25 insertions(+), 38 deletions(-) diff --git a/src/com/bytezone/diskbrowser/dos/CatalogEntry.java b/src/com/bytezone/diskbrowser/dos/CatalogEntry.java index e3052c69..495bd2be 100644 --- a/src/com/bytezone/diskbrowser/dos/CatalogEntry.java +++ b/src/com/bytezone/diskbrowser/dos/CatalogEntry.java @@ -148,8 +148,10 @@ private boolean isValidCatalogSector (DiskAddress da) if (!da.getDisk ().isValidAddress (buffer[1], buffer[2])) return false; - if (buffer[4] != 0) - return false; + if (buffer[3] != 0 || buffer[4] != 0) // not supposed to be used + // Diags2E.dsk stores its own sector address here + if (da.getTrack () != (buffer[3] & 0xFF) && da.getSector () != (buffer[4] & 0xFF)) + return false; return true; } diff --git a/src/com/bytezone/diskbrowser/dos/DosDisk.java b/src/com/bytezone/diskbrowser/dos/DosDisk.java index 4778ae4a..0d8d3840 100755 --- a/src/com/bytezone/diskbrowser/dos/DosDisk.java +++ b/src/com/bytezone/diskbrowser/dos/DosDisk.java @@ -269,50 +269,35 @@ public void setOriginalPath (Path path) public static boolean isCorrectFormat (AppleDisk disk) // ---------------------------------------------------------------------------------// { - if (debug) - System.out.println ("Checking interleave 0"); - disk.setInterleave (0); - - int catalogBlocks0 = checkFormat (disk); - if (catalogBlocks0 > 3) + if (false) + { + disk.setInterleave (2); return true; + } if (disk.getSectorsPerTrack () > 16) return false; - if (debug) - System.out.println ("Checking interleave 1"); - disk.setInterleave (1); - - int catalogBlocks1 = checkFormat (disk); - if (catalogBlocks1 > 3) - return true; - - if (debug) - System.out.println ("Checking interleave 2"); - disk.setInterleave (2); - - int catalogBlocks2 = checkFormat (disk); - if (catalogBlocks2 > 3) - return true; - - if (catalogBlocks0 > 0) + int[] cb = new int[3]; + for (int interleave = 0; interleave < 3; interleave++) { - disk.setInterleave (0); - return true; - } - - if (catalogBlocks1 > 0) - { - disk.setInterleave (1); - return true; + if (debug) + System.out.printf ("Checking interleave %d%n", interleave); + disk.setInterleave (interleave); + cb[interleave] = checkFormat (disk); + if (cb[interleave] > 3) + return true; } - if (catalogBlocks2 > 0) - { - disk.setInterleave (2); - return true; - } + for (int max = 2; max > 0; max--) + for (int interleave = 0; interleave < 3; interleave++) + { + if (cb[interleave] >= max) + { + disk.setInterleave (interleave); + return true; + } + } return false; }