2016-11-29 21:27:44 +00:00
|
|
|
package com.bytezone.diskbrowser.disk;
|
|
|
|
|
|
|
|
import java.io.BufferedInputStream;
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
import java.io.IOException;
|
|
|
|
|
|
|
|
public class NibDisk
|
|
|
|
{
|
2016-12-03 08:20:01 +00:00
|
|
|
private final Nibblizer nibbler;
|
2016-11-29 21:27:44 +00:00
|
|
|
|
|
|
|
final File file;
|
|
|
|
int tracks;
|
|
|
|
int actualTracks;
|
|
|
|
|
|
|
|
final byte[] buffer = new byte[4096 * 35];
|
|
|
|
|
|
|
|
// .nib files are 232,960 bytes
|
|
|
|
// 6,656 bytes x 35 tracks (0x1A00)
|
|
|
|
|
2016-12-01 13:25:41 +00:00
|
|
|
// add 'nib' to TreeBuilder to allow nib files to be selected
|
|
|
|
|
2016-11-29 21:27:44 +00:00
|
|
|
public NibDisk (File file)
|
|
|
|
{
|
|
|
|
this.file = file;
|
2016-12-01 13:25:41 +00:00
|
|
|
byte[] trackBuffer = new byte[6656];
|
2016-12-03 08:20:01 +00:00
|
|
|
nibbler = new Nibblizer (file);
|
|
|
|
|
2016-11-29 21:27:44 +00:00
|
|
|
try
|
|
|
|
{
|
|
|
|
BufferedInputStream in = new BufferedInputStream (new FileInputStream (file));
|
|
|
|
|
2016-12-01 13:25:41 +00:00
|
|
|
byte[] test = { (byte) 0xD5, (byte) 0xAA, (byte) 0xB5 };
|
2016-11-29 21:27:44 +00:00
|
|
|
for (int i = 0; i < 35; i++)
|
|
|
|
{
|
2016-12-01 13:25:41 +00:00
|
|
|
in.read (trackBuffer);
|
|
|
|
// System.out.println (HexFormatter.format (trackBuffer));
|
|
|
|
int offset = 0;
|
|
|
|
while (true)
|
|
|
|
{
|
|
|
|
offset = nibbler.findBytes (trackBuffer, offset, test);
|
|
|
|
if (offset < 0)
|
|
|
|
break;
|
|
|
|
System.out.printf ("found at %04X%n", offset);
|
|
|
|
++offset;
|
|
|
|
}
|
|
|
|
break; // just examine the first track
|
2016-11-29 21:27:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
in.close ();
|
|
|
|
}
|
|
|
|
catch (IOException e)
|
|
|
|
{
|
|
|
|
e.printStackTrace ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|