From e1d1e0408aa843b9c45aa59a1188a8cf3f7deaee Mon Sep 17 00:00:00 2001 From: Denis Molony Date: Tue, 30 Jul 2019 21:38:03 +1000 Subject: [PATCH] tidying --- .../bytezone/diskbrowser/nib/DiskReader.java | 31 ++++++++++-- src/com/bytezone/diskbrowser/nib/WozFile.java | 47 +++++++------------ 2 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/com/bytezone/diskbrowser/nib/DiskReader.java b/src/com/bytezone/diskbrowser/nib/DiskReader.java index 8f09e84..dae6e8f 100644 --- a/src/com/bytezone/diskbrowser/nib/DiskReader.java +++ b/src/com/bytezone/diskbrowser/nib/DiskReader.java @@ -1,22 +1,47 @@ package com.bytezone.diskbrowser.nib; +// ---------------------------------------------------------------------------------// public abstract class DiskReader +// ---------------------------------------------------------------------------------// { static final int BLOCK_SIZE = 256; static final byte[] dataPrologue = { (byte) 0xD5, (byte) 0xAA, (byte) 0xAD }; + static DiskReader reader13; + static DiskReader reader16; + final int sectorsPerTrack; // ---------------------------------------------------------------------------------// - // constructor - // ---------------------------------------------------------------------------------// - DiskReader (int sectorsPerTrack) + // ---------------------------------------------------------------------------------// { this.sectorsPerTrack = sectorsPerTrack; } + // ---------------------------------------------------------------------------------// + static DiskReader getDiskReader (int sectors) + // ---------------------------------------------------------------------------------// + { + if (sectors == 13) + { + if (reader13 == null) + reader13 = new DiskReader13Sector (); + return reader13; + } + + if (sectors == 16) + { + if (reader16 == null) + reader16 = new DiskReader16Sector (); + return reader16; + } + return null; + } + + // ---------------------------------------------------------------------------------// byte[] decodeSector (byte[] buffer) throws DiskNibbleException + // ---------------------------------------------------------------------------------// { return decodeSector (buffer, 0); } diff --git a/src/com/bytezone/diskbrowser/nib/WozFile.java b/src/com/bytezone/diskbrowser/nib/WozFile.java index df59901..fdf646b 100644 --- a/src/com/bytezone/diskbrowser/nib/WozFile.java +++ b/src/com/bytezone/diskbrowser/nib/WozFile.java @@ -27,12 +27,9 @@ public class WozFile private static final int TRK_SIZE = 0x1A00; private static final int DATA_SIZE = TRK_SIZE - 10; - private final DiskReader13Sector diskReader13Sector = new DiskReader13Sector (); - private final DiskReader16Sector diskReader16Sector = new DiskReader16Sector (); - private static int[][] interleave = - { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, - { 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15 } }; + { { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, // 13 sector + { 0, 7, 14, 6, 13, 5, 12, 4, 11, 3, 10, 2, 9, 1, 8, 15 } }; // 16 sector public final File file; @@ -95,7 +92,7 @@ public class WozFile ptr += size + 8; } - DiskReader diskReader = diskSectors == 13 ? diskReader13Sector : diskReader16Sector; + DiskReader diskReader = DiskReader.getDiskReader (diskSectors); diskBuffer = new byte[35 * diskSectors * 256]; int ndx = diskSectors == 13 ? 0 : 1; @@ -144,7 +141,7 @@ public class WozFile System.out.printf ("Creator ............. %s%n", creator); } - if (wozVersion == 2) + if (wozVersion >= 2) { int sides = val8 (buffer, ptr + 45); int bootSectorFormat = val8 (buffer, ptr + 46); @@ -217,6 +214,7 @@ public class WozFile int reclen = wozVersion == 1 ? TRK_SIZE : 8; int max = wozVersion == 1 ? 35 : 160; + for (int i = 0; i < max; i++) { try @@ -248,15 +246,18 @@ public class WozFile private int val16 (byte[] buffer, int ptr) // ---------------------------------------------------------------------------------// { - return (buffer[ptr++] & 0xFF) + ((buffer[ptr] & 0xFF) << 8); + return (buffer[ptr] & 0xFF) // + | ((buffer[ptr + 1] & 0xFF) << 8); } // ---------------------------------------------------------------------------------// private int val32 (byte[] buffer, int ptr) // ---------------------------------------------------------------------------------// { - return (buffer[ptr++] & 0xFF) + ((buffer[ptr++] & 0xFF) << 8) - + ((buffer[ptr++] & 0xFF) << 16) + ((buffer[ptr] & 0xFF) << 24); + return (buffer[ptr] & 0xFF) // + | ((buffer[ptr + 1] & 0xFF) << 8) // + | ((buffer[ptr + 2] & 0xFF) << 16) // + | ((buffer[ptr + 3] & 0xFF) << 24); } // ---------------------------------------------------------------------------------// @@ -311,6 +312,7 @@ public class WozFile int startingBlock; int blockCount; int bitCount; + int bytesUsed; // WOZ1 - not needed byte[] rawBuffer; byte[] newBuffer; @@ -319,7 +321,6 @@ public class WozFile int byteIndex; int trackIndex; int revolutions; - int bytesUsed; List sectors = new ArrayList<> (); @@ -471,13 +472,6 @@ public class WozFile return -1; } - // ---------------------------------------------------------------------------------// - void dump () - // ---------------------------------------------------------------------------------// - { - System.out.println (HexFormatter.format (newBuffer)); - } - // ---------------------------------------------------------------------------------// @Override public String toString () @@ -485,14 +479,17 @@ public class WozFile { StringBuilder text = new StringBuilder (); if (wozVersion == 1) - text.append (String.format ("Bytes: %2d, Bits: %,8d%n%n", bytesUsed, bitCount)); + text.append ( + String.format ("WOZ1: Bytes: %2d, Bits: %,8d%n%n", bytesUsed, bitCount)); else - text.append (String.format ("Start: %4d, Blocks: %2d, Bits: %,8d%n%n", + text.append (String.format ("WOZ2: Start: %4d, Blocks: %2d, Bits: %,8d%n%n", startingBlock, blockCount, bitCount)); + int count = 0; for (Sector sector : sectors) text.append (String.format ("%2d %s%n", count++, sector)); text.deleteCharAt (text.length () - 1); + return text.toString (); } @@ -537,16 +534,6 @@ public class WozFile return this.sectorNo == sector.sectorNo; } - // ---------------------------------------------------------------------------------// - void dump () - // ---------------------------------------------------------------------------------// - { - System.out.println (); - System.out.println (this); - System.out.println (HexFormatter.format (track.newBuffer, addressOffset, BLOCK_SIZE, - addressOffset)); - } - // ---------------------------------------------------------------------------------// void pack (DiskReader diskReader, byte[] buffer, int ptr) throws DiskNibbleException // ---------------------------------------------------------------------------------//