checking Wiz4 disks
This commit is contained in:
parent
decc781572
commit
1b9e9d47ac
|
@ -279,7 +279,7 @@ public class DiskFactory
|
|||
}
|
||||
|
||||
if (debug)
|
||||
System.out.printf (" Checking po or dsk hard drive: %,d%n", file.length ());
|
||||
System.out.printf ("Checking po or dsk hard drive: %,d%n", file.length ());
|
||||
|
||||
disk = checkHardDisk (file);
|
||||
if (disk != null)
|
||||
|
@ -681,7 +681,7 @@ public class DiskFactory
|
|||
{
|
||||
if (debug)
|
||||
{
|
||||
System.out.println ("\nChecking Prodos hard disk");
|
||||
System.out.println ("\nChecking Prodos/Pascal hard disk");
|
||||
System.out.printf ("Total blocks : %f%n", (float) file.length () / 512);
|
||||
System.out.printf ("Total tracks : %f%n", (float) file.length () / 4096);
|
||||
System.out.printf ("File length : %d%n", file.length ());
|
||||
|
@ -716,6 +716,7 @@ public class DiskFactory
|
|||
System.out.println (" --> PRODOS hard disk");
|
||||
return new ProdosDisk (disk);
|
||||
}
|
||||
|
||||
if (PascalDisk.isCorrectFormat (disk, debug))
|
||||
{
|
||||
if (debug)
|
||||
|
@ -731,7 +732,7 @@ public class DiskFactory
|
|||
}
|
||||
|
||||
if (debug)
|
||||
System.out.println (" not a Prodos hard disk\n");
|
||||
System.out.println (" not a Prodos/Pascal hard disk\n");
|
||||
|
||||
return null;
|
||||
}
|
||||
|
@ -856,10 +857,12 @@ public class DiskFactory
|
|||
|
||||
if (Wizardry4BootDisk.isWizardryIVorV (disk, debug))
|
||||
{
|
||||
if (debug)
|
||||
System.out.println ("checking Wizardry IV or V");
|
||||
|
||||
String fileName = file.getAbsolutePath ().toLowerCase ();
|
||||
int pos = file.getAbsolutePath ().indexOf ('.');
|
||||
char c = fileName.charAt (pos - 1);
|
||||
// String suffix = fileName.substring (pos + 1);
|
||||
int requiredDisks = c == '1' ? 6 : c == 'a' ? 10 : 0;
|
||||
|
||||
if (requiredDisks > 0)
|
||||
|
@ -903,9 +906,8 @@ public class DiskFactory
|
|||
if (!f.exists () || !f.isFile ())
|
||||
return false;
|
||||
|
||||
AppleDisk dataDisk = new AppleDisk (f, 35, 8);
|
||||
dataDisk.setInterleave (1);
|
||||
disks[i] = dataDisk;
|
||||
disks[i] = new AppleDisk (f, 35, 8);
|
||||
disks[i].setInterleave (1);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
@ -174,12 +174,12 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
if (from != 0 || to != 6)
|
||||
{
|
||||
if (debug)
|
||||
System.out.printf ("from: %d, to: %d%n", from, to);
|
||||
System.out.printf ("from: %d to: %d%n", from, to);
|
||||
return false; // will only work for floppies!
|
||||
}
|
||||
|
||||
int blocks = Utility.getShort (buffer, 14);
|
||||
if (blocks != 280 && blocks != 1600)
|
||||
if (blocks != 280 && blocks != 1600 && blocks != 2048 && blocks != 1272)
|
||||
{
|
||||
if (debug)
|
||||
System.out.printf ("Blocks > 280: %d%n", blocks);
|
||||
|
@ -208,18 +208,35 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
int firstBlock = Utility.getShort (buffer, ptr);
|
||||
int lastBlock = Utility.getShort (buffer, ptr + 2);
|
||||
int kind = Utility.getShort (buffer, ptr + 4);
|
||||
|
||||
if (lastBlock < firstBlock)
|
||||
{
|
||||
if (debug)
|
||||
System.out.printf (" %d %d lastBlock < firstBlock%n", lastBlock, firstBlock);
|
||||
return false;
|
||||
if (kind == 0)
|
||||
return false;
|
||||
}
|
||||
|
||||
// if (kind == 0)
|
||||
// {
|
||||
// if (debug)
|
||||
// System.out.printf (" kind = 0%n");
|
||||
// return false;
|
||||
// }
|
||||
|
||||
nameLength = buffer[ptr + 6] & 0xFF;
|
||||
if (nameLength < 1 || nameLength > 15)
|
||||
{
|
||||
if (debug)
|
||||
System.out.printf (" %d nameLength < 1 or > 15%n", nameLength);
|
||||
return false;
|
||||
}
|
||||
|
||||
int lastByte = Utility.getShort (buffer, ptr + 22);
|
||||
GregorianCalendar date = Utility.getPascalDate (buffer, 24);
|
||||
String dateString = date == null ? "" : date.toString ();
|
||||
if (debug)
|
||||
System.out.printf ("%4d %4d %d %-15s %d %s%n", firstBlock, lastBlock, kind,
|
||||
new String (buffer, ptr + 7, nameLength), lastByte, date);
|
||||
new String (buffer, ptr + 7, nameLength), lastByte, dateString);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -298,7 +315,7 @@ public class PascalDisk extends AbstractFormattedDisk
|
|||
int bytes = (size - 1) * 512 + ce.bytesUsedInLastBlock;
|
||||
String fileType =
|
||||
ce.fileType < 0 || ce.fileType >= fileTypes.length ? "????" : fileTypes[ce.fileType];
|
||||
text.append (String.format ("%4d %-15s %s %8s %,8d $%03X $%03X $%03X%n", size,
|
||||
text.append (String.format ("%4d %-15s %-6s %8s %,8d $%03X $%03X $%03X%n", size,
|
||||
ce.name, fileType, date, bytes, ce.firstBlock, ce.lastBlock, size));
|
||||
}
|
||||
text.append (line);
|
||||
|
|
|
@ -40,8 +40,8 @@ public final class Utility
|
|||
private static MathContext mathContext4 = new MathContext (6);
|
||||
private static MathContext mathContext8 = new MathContext (15);
|
||||
|
||||
private static final List<String> suffixes = Arrays.asList ("po", "dsk", "do", "hdv",
|
||||
"2mg", "d13", "sdk", "shk", "bxy", "bny", "woz", "img", "dimg");
|
||||
private static final List<String> suffixes = Arrays.asList ("po", "dsk", "do", "hdv", "2mg",
|
||||
"d13", "sdk", "shk", "bxy", "bny", "woz", "img", "dimg");
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private Utility ()
|
||||
|
@ -257,8 +257,7 @@ public final class Utility
|
|||
}
|
||||
catch (DateTimeException e)
|
||||
{
|
||||
System.out.printf ("Bad date/time: %d %d %d %d %d %n", year, month, day, hour,
|
||||
minute);
|
||||
System.out.printf ("Bad date/time: %d %d %d %d %d %n", year, month, day, hour, minute);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -318,8 +317,7 @@ public final class Utility
|
|||
public static int readTriple (byte[] buffer, int ptr)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
return (buffer[ptr] & 0xFF) | (buffer[ptr + 1] & 0xFF) << 8
|
||||
| (buffer[ptr + 2] & 0xFF) << 16;
|
||||
return (buffer[ptr] & 0xFF) | (buffer[ptr + 1] & 0xFF) << 8 | (buffer[ptr + 2] & 0xFF) << 16;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
|
@ -388,8 +386,8 @@ public final class Utility
|
|||
if (exponent == 0)
|
||||
return 0.0;
|
||||
|
||||
int mantissa = (buffer[ptr + 2] & 0x7F) << 16 | (buffer[ptr + 1] & 0xFF) << 8
|
||||
| (buffer[ptr] & 0xFF);
|
||||
int mantissa =
|
||||
(buffer[ptr + 2] & 0x7F) << 16 | (buffer[ptr + 1] & 0xFF) << 8 | (buffer[ptr] & 0xFF);
|
||||
boolean negative = (buffer[ptr + 2] & 0x80) != 0;
|
||||
double value = 0.5;
|
||||
|
||||
|
@ -412,10 +410,9 @@ public final class Utility
|
|||
if (exponent == 0)
|
||||
return 0.0;
|
||||
|
||||
long mantissa = (long) (buffer[ptr + 6] & 0x7F) << 48
|
||||
| (long) (buffer[ptr + 5] & 0xFF) << 40 | (long) (buffer[ptr + 4] & 0xFF) << 32
|
||||
| (long) (buffer[ptr + 3] & 0xFF) << 24 | (buffer[ptr + 2] & 0xFF) << 16
|
||||
| (buffer[ptr + 1] & 0xFF) << 8 | (buffer[ptr] & 0xFF);
|
||||
long mantissa = (long) (buffer[ptr + 6] & 0x7F) << 48 | (long) (buffer[ptr + 5] & 0xFF) << 40
|
||||
| (long) (buffer[ptr + 4] & 0xFF) << 32 | (long) (buffer[ptr + 3] & 0xFF) << 24
|
||||
| (buffer[ptr + 2] & 0xFF) << 16 | (buffer[ptr + 1] & 0xFF) << 8 | (buffer[ptr] & 0xFF);
|
||||
boolean negative = (buffer[ptr + 6] & 0x80) != 0;
|
||||
double value = 0.5;
|
||||
|
||||
|
@ -437,6 +434,9 @@ public final class Utility
|
|||
{
|
||||
int date = Utility.getShort (buffer, offset);
|
||||
|
||||
if (date == 0)
|
||||
return null;
|
||||
|
||||
int month = date & 0x0F;
|
||||
int day = (date & 0x1F0) >>> 4;
|
||||
int year = (date & 0xFE00) >>> 9;
|
||||
|
@ -492,8 +492,7 @@ public final class Utility
|
|||
for (int i = 0; i < 6; i++)
|
||||
val[i] = Integer.parseInt (String.format ("%02X", buffer[ptr + i] & 0xFF));
|
||||
|
||||
LocalDateTime date =
|
||||
LocalDateTime.of (val[3] + 2000, val[5], val[4], val[2], val[1], val[0]);
|
||||
LocalDateTime date = LocalDateTime.of (val[3] + 2000, val[5], val[4], val[2], val[1], val[0]);
|
||||
return date;
|
||||
}
|
||||
catch (DateTimeException | NumberFormatException e)
|
||||
|
@ -584,8 +583,7 @@ public final class Utility
|
|||
public static boolean isPossibleVariable (byte value)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
return isDigit (value) || isLetter (value) || value == ASCII_DOLLAR
|
||||
|| value == ASCII_PERCENT;
|
||||
return isDigit (value) || isLetter (value) || value == ASCII_DOLLAR || value == ASCII_PERCENT;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
|
@ -665,41 +663,41 @@ public final class Utility
|
|||
return ~crc; // one's complement
|
||||
}
|
||||
|
||||
static int[] crc32_tab = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
|
||||
0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
|
||||
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148,
|
||||
0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0,
|
||||
0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8,
|
||||
0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
|
||||
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf,
|
||||
0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
|
||||
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87,
|
||||
0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
|
||||
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
|
||||
0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162,
|
||||
0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6,
|
||||
0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
|
||||
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d,
|
||||
0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
|
||||
0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525,
|
||||
0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
|
||||
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c,
|
||||
0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
|
||||
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
|
||||
0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
|
||||
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43,
|
||||
0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767,
|
||||
0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3,
|
||||
0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
|
||||
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92,
|
||||
0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226,
|
||||
0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82,
|
||||
0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
|
||||
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
|
||||
0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
|
||||
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661,
|
||||
0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
|
||||
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330,
|
||||
0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
|
||||
0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
|
||||
static int[] crc32_tab = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
|
||||
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b,
|
||||
0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
|
||||
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a,
|
||||
0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e,
|
||||
0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa,
|
||||
0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
|
||||
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
|
||||
0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11,
|
||||
0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589,
|
||||
0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
|
||||
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8,
|
||||
0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
|
||||
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158,
|
||||
0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
|
||||
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f,
|
||||
0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3,
|
||||
0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
|
||||
0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
|
||||
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e,
|
||||
0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2,
|
||||
0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76,
|
||||
0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
|
||||
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd,
|
||||
0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
|
||||
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795,
|
||||
0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
|
||||
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
|
||||
0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14,
|
||||
0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4,
|
||||
0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
|
||||
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3,
|
||||
0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
|
||||
0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53,
|
||||
0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
|
||||
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02,
|
||||
0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
|
||||
}
|
|
@ -191,6 +191,12 @@ public class MazeLevel extends AbstractFile
|
|||
List<MazeAddress> monsterList)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
if (monsters == null)
|
||||
{
|
||||
System.out.println ("monsters is null");
|
||||
return;
|
||||
}
|
||||
|
||||
text.append ("\n\nSQREXTRA SQRTYPE TSQUARE AUX0 AUX1 AUX2\n");
|
||||
for (int j = 0; j < 16; j++)
|
||||
{
|
||||
|
@ -282,7 +288,8 @@ public class MazeLevel extends AbstractFile
|
|||
{
|
||||
if (id == minenemy + range0n)
|
||||
text.append ("\n");
|
||||
text.append (String.format ("%3d %-16s %n", id, monsters.get (id)));
|
||||
Monster monster = monsters == null ? null : monsters.get (id);
|
||||
text.append (String.format ("%3d %-16s %n", id, monster));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ public class Relocator extends AbstractFile
|
|||
{
|
||||
super (name, buffer);
|
||||
|
||||
checkByte = Utility.getShort (buffer, 0);
|
||||
checkByte = Utility.getShort (buffer, 0); // no of blocks?
|
||||
|
||||
int ptr = 2; // skip checkByte
|
||||
|
||||
|
@ -38,22 +38,24 @@ public class Relocator extends AbstractFile
|
|||
|
||||
for (DiskRecord diskRecord : diskRecords)
|
||||
for (DiskSegment diskSegment : diskRecord.diskSegments)
|
||||
addLogicalBlock ((byte) diskRecord.diskNumber, diskSegment);
|
||||
}
|
||||
{
|
||||
int lo = diskSegment.logicalBlock;
|
||||
int hi = diskSegment.logicalBlock + diskSegment.segmentLength;
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void addLogicalBlock (byte disk, DiskSegment diskSegment)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
int lo = diskSegment.logicalBlock;
|
||||
int hi = diskSegment.logicalBlock + diskSegment.segmentLength;
|
||||
|
||||
for (int i = lo, count = 0; i < hi; i++, count++)
|
||||
// if (diskBlocks[i] == 0) // doesn't matter either way
|
||||
{
|
||||
diskBlocks[i] = disk;
|
||||
diskOffsets[i] = diskSegment.physicalBlock + count;
|
||||
}
|
||||
for (int i = lo, count = 0; i < hi; i++, count++)
|
||||
// if (diskBlocks[i] == 0) // doesn't matter either way
|
||||
{
|
||||
if (diskBlocks[i] != 0 && false)
|
||||
{
|
||||
System.out.print ("was: ");
|
||||
System.out.printf ("diskBlocks[%d] = %d%n", i, diskBlocks[i]);
|
||||
System.out.print ("now: ");
|
||||
System.out.printf ("diskBlocks[%d] = %d%n", i, diskRecord.diskNumber);
|
||||
}
|
||||
diskBlocks[i] = diskRecord.diskNumber;
|
||||
diskOffsets[i] = diskSegment.physicalBlock + count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
|
@ -109,14 +111,15 @@ public class Relocator extends AbstractFile
|
|||
int first = 0;
|
||||
int lastDisk = diskBlocks[0];
|
||||
int lastOffset = diskOffsets[0];
|
||||
|
||||
for (int i = 0; i < diskBlocks.length; i++)
|
||||
{
|
||||
if (diskBlocks[i] != lastDisk || diskOffsets[i] != lastOffset + i - first)
|
||||
{
|
||||
int size = i - first;
|
||||
if (lastDisk > 0)
|
||||
lines.add (String.format ("%03X - %03X %03X %d %03X - %03X", first,
|
||||
i - 1, size, lastDisk, lastOffset, lastOffset + size - 1));
|
||||
lines.add (String.format ("%03X - %03X %03X %d %03X - %03X", first, i - 1, size,
|
||||
lastDisk, lastOffset, lastOffset + size - 1));
|
||||
else
|
||||
lines.add (String.format ("%03X - %03X %03X", first, i - 1, size));
|
||||
|
||||
|
@ -130,8 +133,8 @@ public class Relocator extends AbstractFile
|
|||
{
|
||||
int max = diskBlocks.length;
|
||||
int size = max - first;
|
||||
lines.add (String.format ("%03X - %03X %03X %d %03X - %03X", first, max - 1,
|
||||
size, lastDisk, lastOffset, lastOffset + size - 1));
|
||||
lines.add (String.format ("%03X - %03X %03X %d %03X - %03X", first, max - 1, size,
|
||||
lastDisk, lastOffset, lastOffset + size - 1));
|
||||
}
|
||||
|
||||
for (int i = lines.size () - 1; i >= 0; i--)
|
||||
|
@ -142,17 +145,14 @@ public class Relocator extends AbstractFile
|
|||
lines.remove (i);
|
||||
}
|
||||
|
||||
text.append (String.format (" %s %s%n %s %s%n", heading, heading,
|
||||
underline, underline));
|
||||
text.append (String.format (" %s %s%n %s %s%n", heading, heading, underline,
|
||||
underline));
|
||||
int offset = (lines.size () + 1) / 2;
|
||||
// boolean oddLines = lines.size () % 2 == 1;
|
||||
int pairs = lines.size () / 2;
|
||||
|
||||
for (int i = 0; i < pairs; i++)
|
||||
{
|
||||
text.append (
|
||||
String.format (" %-35s %s%n", lines.get (i), lines.get (i + offset)));
|
||||
}
|
||||
text.append (String.format (" %-35s %s%n", lines.get (i), lines.get (i + offset)));
|
||||
|
||||
if (offset != pairs)
|
||||
text.append (String.format (" %s%n", lines.get (pairs)));
|
||||
|
||||
|
@ -165,12 +165,14 @@ public class Relocator extends AbstractFile
|
|||
{
|
||||
int diskNumber;
|
||||
int totDiskSegments;
|
||||
List<DiskSegment> diskSegments = new ArrayList<> ();
|
||||
List<DiskSegment> diskSegments;
|
||||
|
||||
public DiskRecord (byte[] buffer, int ptr)
|
||||
{
|
||||
diskNumber = Utility.getShort (buffer, ptr);
|
||||
totDiskSegments = Utility.intValue (buffer[ptr + 2], buffer[ptr + 4]);
|
||||
// totDiskSegments = Utility.intValue (buffer[ptr + 2], buffer[ptr + 4]);
|
||||
totDiskSegments = Utility.getShort (buffer, ptr + 2);
|
||||
diskSegments = new ArrayList<> (totDiskSegments);
|
||||
|
||||
ptr += 4;
|
||||
for (int i = 0; i < totDiskSegments; i++)
|
||||
|
@ -192,22 +194,22 @@ public class Relocator extends AbstractFile
|
|||
|
||||
text.append (String.format ("Disk number.... %04X%n", diskNumber));
|
||||
text.append (String.format ("Segments....... %04X%n%n", totDiskSegments));
|
||||
text.append (String.format (" Seg Skip Size Logical Physical%n"));
|
||||
text.append (String.format (" --- ---- ---- ----------- -----------%n"));
|
||||
text.append (String.format (" Seg Physical Logical Size Gap%n"));
|
||||
text.append (String.format (" --- ----------- ----------- ---- ----%n"));
|
||||
|
||||
int count = 1;
|
||||
int last = 0;
|
||||
int skip = 0;
|
||||
|
||||
for (DiskSegment segment : diskSegments)
|
||||
for (DiskSegment diskSegment : diskSegments)
|
||||
{
|
||||
if (segment.logicalBlock > last)
|
||||
if (diskSegment.logicalBlock > last)
|
||||
{
|
||||
int end = segment.logicalBlock - 1;
|
||||
int end = diskSegment.logicalBlock - 1;
|
||||
skip = end - last + 1;
|
||||
}
|
||||
last = segment.logicalBlock + segment.segmentLength;
|
||||
text.append (String.format (" %02X %04X %s %n", count++, skip, segment));
|
||||
last = diskSegment.logicalBlock + diskSegment.segmentLength;
|
||||
text.append (String.format (" %02X %s %04X%n", count++, diskSegment, skip));
|
||||
}
|
||||
|
||||
return text.toString ();
|
||||
|
@ -232,9 +234,9 @@ public class Relocator extends AbstractFile
|
|||
@Override
|
||||
public String toString ()
|
||||
{
|
||||
return String.format (" %04X %04X - %04X %04X - %04X", segmentLength,
|
||||
logicalBlock, (logicalBlock + segmentLength - 1), physicalBlock,
|
||||
(physicalBlock + segmentLength - 1));
|
||||
return String.format (" %04X - %04X %04X - %04X %04X", physicalBlock,
|
||||
(physicalBlock + segmentLength - 1), logicalBlock, (logicalBlock + segmentLength - 1),
|
||||
segmentLength);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -22,7 +22,6 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
// -----------------------------------------------------------------------------------//
|
||||
{
|
||||
public Header scenarioHeader;
|
||||
// private final List<AppleDisk> disks = new ArrayList<> ();
|
||||
private Relocator relocator;
|
||||
private MessageBlock messageBlock;
|
||||
private Huffman huffman;
|
||||
|
@ -44,9 +43,8 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
FileEntry fileEntry = (FileEntry) relocNode.getUserObject ();
|
||||
if (fileEntry != null)
|
||||
{
|
||||
relocator =
|
||||
new Relocator (fileEntry.getUniqueName (), fileEntry.getDataSource ().buffer);
|
||||
relocator.createNewBuffer (dataDisks); // create new data buffer
|
||||
relocator = new Relocator (fileEntry.getUniqueName (), fileEntry.getDataSource ().buffer);
|
||||
relocator.createNewBuffer (dataDisks);
|
||||
fileEntry.setFile (relocator);
|
||||
}
|
||||
|
||||
|
@ -63,10 +61,7 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
fileEntry = (FileEntry) huffNode.getUserObject ();
|
||||
if (fileEntry != null)
|
||||
{
|
||||
|
||||
byte[] buffer = fileEntry.getDataSource ().buffer;
|
||||
|
||||
huffman = new Huffman ("Huffman tree", buffer);
|
||||
huffman = new Huffman ("Huffman tree", fileEntry.getDataSource ().buffer);
|
||||
fileEntry.setFile (huffman);
|
||||
}
|
||||
|
||||
|
@ -138,14 +133,12 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void linkMonsterImages4 (DefaultMutableTreeNode monstersNode,
|
||||
FileEntry fileEntry)
|
||||
private void linkMonsterImages4 (DefaultMutableTreeNode monstersNode, FileEntry fileEntry)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
List<DiskAddress> pictureBlocks = fileEntry.getSectors ();
|
||||
|
||||
Wiz4Monsters w4monsters =
|
||||
new Wiz4Monsters ("monsters", fileEntry.getDataSource ().buffer);
|
||||
Wiz4Monsters w4monsters = new Wiz4Monsters ("monsters", fileEntry.getDataSource ().buffer);
|
||||
fileEntry.setFile (w4monsters);
|
||||
|
||||
int count = 0;
|
||||
|
@ -158,14 +151,12 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void linkMonsterImages5 (DefaultMutableTreeNode monstersNode,
|
||||
FileEntry fileEntry)
|
||||
private void linkMonsterImages5 (DefaultMutableTreeNode monstersNode, FileEntry fileEntry)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
List<DiskAddress> pictureBlocks = fileEntry.getSectors ();
|
||||
|
||||
Wiz5Monsters w5monsters =
|
||||
new Wiz5Monsters ("monsters", fileEntry.getDataSource ().buffer);
|
||||
Wiz5Monsters w5monsters = new Wiz5Monsters ("monsters", fileEntry.getDataSource ().buffer);
|
||||
fileEntry.setFile (w5monsters);
|
||||
|
||||
for (Wiz5Monsters.Monster monster : w5monsters)
|
||||
|
@ -255,8 +246,7 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
HexFormatter.getHexString (buffer, offset + i * length, length)));
|
||||
}
|
||||
|
||||
DefaultMutableTreeNode oracleNode =
|
||||
linkNode ("Block1", text.toString (), scenarioNode);
|
||||
DefaultMutableTreeNode oracleNode = linkNode ("Block1", text.toString (), scenarioNode);
|
||||
oracleNode.setAllowsChildren (false);
|
||||
DefaultAppleFileSource afs = (DefaultAppleFileSource) oracleNode.getUserObject ();
|
||||
afs.setSectors (allBlocks);
|
||||
|
@ -284,8 +274,7 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
HexFormatter.getHexString (buffer, offset + i * length, length)));
|
||||
}
|
||||
|
||||
DefaultMutableTreeNode oracleNode =
|
||||
linkNode ("Block2", text.toString (), scenarioNode);
|
||||
DefaultMutableTreeNode oracleNode = linkNode ("Block2", text.toString (), scenarioNode);
|
||||
oracleNode.setAllowsChildren (false);
|
||||
DefaultAppleFileSource afs = (DefaultAppleFileSource) oracleNode.getUserObject ();
|
||||
afs.setSectors (allBlocks);
|
||||
|
@ -306,8 +295,8 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
int offset = 0x08600 + i * 32 + 18;
|
||||
int key = Utility.getShort (buffer, offset);
|
||||
if (key > 0)
|
||||
text.append (String.format ("%04X %04X * %s%n", offset, key,
|
||||
messageBlock.getMessageText (key)));
|
||||
text.append (
|
||||
String.format ("%04X %04X * %s%n", offset, key, messageBlock.getMessageText (key)));
|
||||
key = Utility.getShort (buffer, offset + 8);
|
||||
if (key > 0)
|
||||
text.append (String.format ("%04X %04X %s%n", offset + 8, key,
|
||||
|
@ -320,28 +309,24 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
allOracleBlocks.add (blocks.get (67 + i));
|
||||
}
|
||||
|
||||
DefaultMutableTreeNode oracleNode =
|
||||
linkNode ("Oracle", text.toString (), scenarioNode);
|
||||
DefaultMutableTreeNode oracleNode = linkNode ("Oracle", text.toString (), scenarioNode);
|
||||
oracleNode.setAllowsChildren (false);
|
||||
DefaultAppleFileSource afs = (DefaultAppleFileSource) oracleNode.getUserObject ();
|
||||
afs.setSectors (allOracleBlocks);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private void addToNode (AbstractFile af, DefaultMutableTreeNode node,
|
||||
List<DiskAddress> blocks)
|
||||
private void addToNode (AbstractFile af, DefaultMutableTreeNode node, List<DiskAddress> blocks)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
DefaultAppleFileSource dafs =
|
||||
new DefaultAppleFileSource (af.getName (), af, this, blocks);
|
||||
DefaultAppleFileSource dafs = new DefaultAppleFileSource (af.getName (), af, this, blocks);
|
||||
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode (dafs);
|
||||
childNode.setAllowsChildren (false);
|
||||
node.add (childNode);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------------//
|
||||
private DefaultMutableTreeNode linkNode (String name, String text,
|
||||
DefaultMutableTreeNode parent)
|
||||
private DefaultMutableTreeNode linkNode (String name, String text, DefaultMutableTreeNode parent)
|
||||
// ---------------------------------------------------------------------------------//
|
||||
{
|
||||
DefaultAppleFileSource afs = new DefaultAppleFileSource (name, text, this);
|
||||
|
@ -362,9 +347,6 @@ public class Wizardry4BootDisk extends PascalDisk
|
|||
return false;
|
||||
|
||||
buffer = disk.readBlock (1);
|
||||
if (buffer[510] != 1 || buffer[511] != 0) // disk #1
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return buffer[510] == 1 && buffer[511] == 0; // disk #1
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue