dmolony-DiskBrowser/src/com/bytezone/diskbrowser/nib/DiskReader.java

66 lines
2.0 KiB
Java

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 ();
}