mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-11-23 19:31:00 +00:00
checking CPM format
This commit is contained in:
parent
71e94c61ba
commit
7c401c240d
@ -16,6 +16,8 @@ public class CPMDisk extends AbstractFormattedDisk
|
|||||||
public final SectorType catalogSector = new SectorType ("Catalog", green);
|
public final SectorType catalogSector = new SectorType ("Catalog", green);
|
||||||
public final SectorType cpmSector = new SectorType ("CPM", Color.lightGray);
|
public final SectorType cpmSector = new SectorType ("CPM", Color.lightGray);
|
||||||
|
|
||||||
|
private int version; // http://www.seasip.info/Cpm/format22.html
|
||||||
|
|
||||||
public CPMDisk (Disk disk)
|
public CPMDisk (Disk disk)
|
||||||
{
|
{
|
||||||
super (disk);
|
super (disk);
|
||||||
@ -26,6 +28,11 @@ public class CPMDisk extends AbstractFormattedDisk
|
|||||||
bootSector = new BootSector (disk, sectorBuffer, "CPM");
|
bootSector = new BootSector (disk, sectorBuffer, "CPM");
|
||||||
sectorTypes[0] = cpmSector;
|
sectorTypes[0] = cpmSector;
|
||||||
|
|
||||||
|
byte[] buffer = disk.readSector (0, 8);
|
||||||
|
String text = new String (buffer, 16, 24);
|
||||||
|
if ("DIR ERA TYPESAVEREN USER".equals (text))
|
||||||
|
version = buffer[41] & 0xFF;
|
||||||
|
|
||||||
for (int sector = 0; sector < 8; sector++)
|
for (int sector = 0; sector < 8; sector++)
|
||||||
{
|
{
|
||||||
DiskAddress da = disk.getDiskAddress (3, sector);
|
DiskAddress da = disk.getDiskAddress (3, sector);
|
||||||
@ -43,23 +50,29 @@ public class CPMDisk extends AbstractFormattedDisk
|
|||||||
{
|
{
|
||||||
disk.setInterleave (3);
|
disk.setInterleave (3);
|
||||||
|
|
||||||
|
byte[] buffer = disk.readSector (0, 8);
|
||||||
|
String text = new String (buffer, 16, 24);
|
||||||
|
System.out.println (text);
|
||||||
|
if ("DIR ERA TYPESAVEREN USER".equals (text))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
buffer = disk.readSector (0, 4);
|
||||||
|
text = new String (buffer, 16, 24);
|
||||||
|
System.out.println (text);
|
||||||
|
if ("DIR ERA TYPESAVEREN USER".equals (text))
|
||||||
|
return true;
|
||||||
|
|
||||||
for (int sector = 0; sector < 8; sector++)
|
for (int sector = 0; sector < 8; sector++)
|
||||||
{
|
{
|
||||||
byte[] buffer = disk.readSector (3, sector);
|
buffer = disk.readSector (3, sector);
|
||||||
for (int i = 0; i < buffer.length; i += 32)
|
for (int i = 0; i < buffer.length; i += 32)
|
||||||
{
|
{
|
||||||
if (buffer[i] != 0 && buffer[i] != (byte) 0xE5)
|
if (buffer[i] != 0 && buffer[i] != (byte) 0xE5)
|
||||||
return false;
|
return false;
|
||||||
if (buffer[i] == 0)
|
if (buffer[i] == 0)
|
||||||
{
|
|
||||||
// String filename = HexFormatter.getString (buffer, i + 1, 8);
|
|
||||||
// String filetype = HexFormatter.getString (buffer, i + 9, 3);
|
|
||||||
// String bytes = HexFormatter.getHexString (buffer, i + 12, 20);
|
|
||||||
// System.out.println (filename + " " + filetype + " " + bytes);
|
|
||||||
System.out.println (new DirectoryEntry (buffer, i));
|
System.out.println (new DirectoryEntry (buffer, i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -32,16 +32,15 @@ public class DirectoryEntry
|
|||||||
|
|
||||||
text.append (String.format ("User number .... %d%n", userNumber));
|
text.append (String.format ("User number .... %d%n", userNumber));
|
||||||
text.append (String.format ("File name ...... %s%n", name + "." + type));
|
text.append (String.format ("File name ...... %s%n", name + "." + type));
|
||||||
// text.append (String.format ("File type ...... %s%n", type));
|
|
||||||
text.append (String.format ("Extents lo ..... %d%n", ex));
|
text.append (String.format ("Extents lo ..... %d%n", ex));
|
||||||
text.append (String.format ("Extents hi ..... %d%n", s2));
|
text.append (String.format ("Extents hi ..... %d%n", s2));
|
||||||
text.append (String.format ("Reserved ....... %d%n", s1));
|
text.append (String.format ("Reserved ....... %d%n", s1));
|
||||||
|
|
||||||
int blocks = ((rc & 0xF0) >> 3) + (((rc & 0x0F) + 7) / 8);
|
int blocks = ((rc & 0xF0) >> 3) + (((rc & 0x0F) + 7) / 8);
|
||||||
text.append (String.format ("Records ........ %02X (%d)%n", rc, blocks));
|
text.append (String.format ("Records ........ %02X (%d)%n", rc, blocks));
|
||||||
text.append (String
|
|
||||||
.format ("Allocation ..... %s%n",
|
String bytes = HexFormatter.getHexString (blockList, 0, 16);
|
||||||
HexFormatter.formatNoHeader (blockList, 0, 16).subSequence (8, 55)));
|
text.append (String.format ("Allocation ..... %s%n", bytes));
|
||||||
|
|
||||||
return text.toString ();
|
return text.toString ();
|
||||||
}
|
}
|
||||||
|
@ -178,9 +178,9 @@ public class DiskFactory
|
|||||||
else if (checksum == 3028642627L || checksum == 2070151659L)
|
else if (checksum == 3028642627L || checksum == 2070151659L)
|
||||||
disk = checkInfocomDisk (file);
|
disk = checkInfocomDisk (file);
|
||||||
|
|
||||||
else if (checksum == 1212926910L || checksum == 1365043894L
|
// else if (checksum == 1212926910L || checksum == 1365043894L
|
||||||
|| checksum == 2128073918L)
|
// || checksum == 2128073918L)
|
||||||
disk = checkCPMDisk (file);
|
// disk = checkCPMDisk (file);
|
||||||
|
|
||||||
// System.out.println (checksum);
|
// System.out.println (checksum);
|
||||||
|
|
||||||
@ -220,6 +220,9 @@ public class DiskFactory
|
|||||||
if (disk == null)
|
if (disk == null)
|
||||||
disk = checkPascalDisk (file);
|
disk = checkPascalDisk (file);
|
||||||
|
|
||||||
|
if (disk == null)
|
||||||
|
disk = checkCPMDisk (file);
|
||||||
|
|
||||||
if (disk == null)
|
if (disk == null)
|
||||||
{
|
{
|
||||||
disk2 = checkInfocomDisk (file);
|
disk2 = checkInfocomDisk (file);
|
||||||
|
Loading…
Reference in New Issue
Block a user