package com.bytezone.diskbrowser.nib; // -----------------------------------------------------------------------------------// 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; static DiskReader readerGRC; final int sectorsPerTrack; // ---------------------------------------------------------------------------------// DiskReader (int sectorsPerTrack) // ---------------------------------------------------------------------------------// { this.sectorsPerTrack = sectorsPerTrack; } // ---------------------------------------------------------------------------------// static DiskReader getInstance (int sectors) // ---------------------------------------------------------------------------------// { switch (sectors) { case 13: if (reader13 == null) reader13 = new DiskReader13Sector (); return reader13; case 16: if (reader16 == null) reader16 = new DiskReader16Sector (); return reader16; case 0: if (readerGRC == null) readerGRC = new DiskReaderGRC (); return readerGRC; default: return null; } } // ---------------------------------------------------------------------------------// byte[] decodeSector (byte[] buffer) throws DiskNibbleException // ---------------------------------------------------------------------------------// { return decodeSector (buffer, 0); } // ---------------------------------------------------------------------------------// // abstract functions // ---------------------------------------------------------------------------------// abstract byte[] decodeSector (byte[] buffer, int offset) throws DiskNibbleException; abstract byte[] encodeSector (byte[] buffer); abstract int expectedDataSize (); }