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

66 lines
2.0 KiB
Java
Raw Normal View History

2018-08-17 01:20:00 +00:00
package com.bytezone.diskbrowser.nib;
2018-08-11 00:07:50 +00:00
2019-09-04 20:44:43 +00:00
// -----------------------------------------------------------------------------------//
abstract class DiskReader
// -----------------------------------------------------------------------------------//
2018-08-11 00:07:50 +00:00
{
static final int BLOCK_SIZE = 256;
static final byte[] dataPrologue = { (byte) 0xD5, (byte) 0xAA, (byte) 0xAD };
2019-07-30 11:38:03 +00:00
static DiskReader reader13;
static DiskReader reader16;
2019-09-04 20:44:43 +00:00
static DiskReader readerGRC;
2019-07-30 11:38:03 +00:00
2018-08-11 04:12:21 +00:00
final int sectorsPerTrack;
2018-08-11 00:07:50 +00:00
// ---------------------------------------------------------------------------------//
DiskReader (int sectorsPerTrack)
2019-07-30 11:38:03 +00:00
// ---------------------------------------------------------------------------------//
2018-08-11 00:07:50 +00:00
{
this.sectorsPerTrack = sectorsPerTrack;
}
2019-07-30 11:38:03 +00:00
// ---------------------------------------------------------------------------------//
2019-08-06 04:54:04 +00:00
static DiskReader getInstance (int sectors)
2019-07-30 11:38:03 +00:00
// ---------------------------------------------------------------------------------//
{
2019-09-04 20:44:43 +00:00
switch (sectors)
2019-07-30 11:38:03 +00:00
{
2019-09-04 20:44:43 +00:00
case 13:
if (reader13 == null)
reader13 = new DiskReader13Sector ();
return reader13;
2019-07-30 11:38:03 +00:00
2019-09-04 20:44:43 +00:00
case 16:
if (reader16 == null)
reader16 = new DiskReader16Sector ();
return reader16;
2019-08-06 04:54:04 +00:00
2019-09-04 20:44:43 +00:00
case 0:
if (readerGRC == null)
readerGRC = new DiskReaderGRC ();
return readerGRC;
default:
return null;
}
2019-07-30 11:38:03 +00:00
}
// ---------------------------------------------------------------------------------//
2019-07-28 06:24:52 +00:00
byte[] decodeSector (byte[] buffer) throws DiskNibbleException
2019-07-30 11:38:03 +00:00
// ---------------------------------------------------------------------------------//
2019-07-28 06:24:52 +00:00
{
return decodeSector (buffer, 0);
}
2018-08-11 00:07:50 +00:00
// ---------------------------------------------------------------------------------//
// abstract functions
// ---------------------------------------------------------------------------------//
2019-07-28 06:24:52 +00:00
abstract byte[] decodeSector (byte[] buffer, int offset) throws DiskNibbleException;
2018-08-11 00:07:50 +00:00
abstract byte[] encodeSector (byte[] buffer);
abstract int expectedDataSize ();
}