mirror of
https://github.com/dmolony/DiskBrowser.git
synced 2024-12-01 09:50:32 +00:00
wiz 4 changes
This commit is contained in:
parent
77aebb3597
commit
85e1f945cd
@ -4,7 +4,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.bytezone.diskbrowser.utilities.FileFormatException;
|
|
||||||
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
||||||
import com.bytezone.diskbrowser.utilities.Utility;
|
import com.bytezone.diskbrowser.utilities.Utility;
|
||||||
|
|
||||||
@ -12,14 +11,13 @@ public class PascalCode extends AbstractFile
|
|||||||
implements PascalConstants, Iterable<PascalSegment>
|
implements PascalConstants, Iterable<PascalSegment>
|
||||||
{
|
{
|
||||||
List<PascalSegment> segments = new ArrayList<PascalSegment> (16);
|
List<PascalSegment> segments = new ArrayList<PascalSegment> (16);
|
||||||
String codeName;
|
|
||||||
String comment;
|
String comment;
|
||||||
|
|
||||||
public static void print ()
|
public static void print ()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 216; i++)
|
for (int i = 0; i < 216; i++)
|
||||||
System.out.printf ("%3d %d %3s %s%n", i + 128, PascalConstants.mnemonicSize[i],
|
System.out.printf ("%3d %d %3s %s%n", i + 128, PascalConstants.mnemonicSize[i],
|
||||||
PascalConstants.mnemonics[i], PascalConstants.descriptions[i]);
|
PascalConstants.mnemonics[i], PascalConstants.descriptions[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PascalCode (String name, byte[] buffer)
|
public PascalCode (String name, byte[] buffer)
|
||||||
@ -28,7 +26,7 @@ public class PascalCode extends AbstractFile
|
|||||||
int nonameCounter = 0;
|
int nonameCounter = 0;
|
||||||
if (false)
|
if (false)
|
||||||
{
|
{
|
||||||
System.out.println (name);
|
// System.out.println (name);
|
||||||
// byte[] key = new byte[] { 0x38, 0x00, 0x0C, 0x1C };
|
// byte[] key = new byte[] { 0x38, 0x00, 0x0C, 0x1C };
|
||||||
byte[] key = new byte[] { 0x0F };
|
byte[] key = new byte[] { 0x0F };
|
||||||
Utility.find (buffer, key);
|
Utility.find (buffer, key);
|
||||||
@ -37,23 +35,14 @@ public class PascalCode extends AbstractFile
|
|||||||
// Create segment list (up to 16 segments)
|
// Create segment list (up to 16 segments)
|
||||||
for (int i = 0; i < 16; i++)
|
for (int i = 0; i < 16; i++)
|
||||||
{
|
{
|
||||||
codeName = HexFormatter.getString (buffer, 0x40 + i * 8, 8).trim ();
|
String codeName = HexFormatter.getString (buffer, 0x40 + i * 8, 8).trim ();
|
||||||
if (codeName.length () == 0)
|
|
||||||
codeName = "<NULL" + nonameCounter++ + ">";
|
|
||||||
int size = HexFormatter.intValue (buffer[i * 4 + 2], buffer[i * 4 + 3]);
|
int size = HexFormatter.intValue (buffer[i * 4 + 2], buffer[i * 4 + 3]);
|
||||||
// System.out.printf ("%s %s %d %n", HexFormatter.getHexString (buffer, i * 4, 4),
|
if (codeName.length () == 0 && size > 0)
|
||||||
|
codeName = "<NULL" + ++nonameCounter + ">";
|
||||||
|
// System.out.printf ("%s %s %d %n", HexFormatter.getHexString (buffer, i * 4, 4),
|
||||||
// codeName, size);
|
// codeName, size);
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
{
|
segments.add (new PascalSegment (codeName, buffer, i));
|
||||||
try
|
|
||||||
{
|
|
||||||
segments.add (new PascalSegment (codeName, buffer, i));
|
|
||||||
}
|
|
||||||
catch (FileFormatException e)
|
|
||||||
{
|
|
||||||
System.out.printf ("Bad segment: %d%n", i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
comment = HexFormatter.getPascalString (buffer, 0x1B0);
|
comment = HexFormatter.getPascalString (buffer, 0x1B0);
|
||||||
}
|
}
|
||||||
|
@ -28,14 +28,14 @@ public class PascalSegment extends AbstractFile implements PascalConstants
|
|||||||
|
|
||||||
static
|
static
|
||||||
{
|
{
|
||||||
// somehow this should match the data in SYSTEM.RELOC
|
// somehow the offsets should match the data in SYSTEM.RELOC
|
||||||
redirections.add (new Redirection ("WIZARDRY", 0x01, 0x1C66, 0x01));
|
redirections.add (new Redirection ("WIZARDRY", 0x01, 0x1C66, 0x01));
|
||||||
redirections.add (new Redirection ("KANJIREA", 0x013F, 0x104E, 0x10));
|
redirections.add (new Redirection ("KANJIREA", 0x3F, 0x104E, 0x10));
|
||||||
redirections.add (new Redirection ("UTILITIE", 0x48, 0x1598, 0x19));
|
redirections.add (new Redirection ("UTILITIE", 0x48, 0x1598, 0x19));
|
||||||
redirections.add (new Redirection ("SHOPS", 0x53, 0x0BE2, 0x24));
|
redirections.add (new Redirection ("SHOPS ", 0x53, 0x0BE2, 0x24));
|
||||||
redirections.add (new Redirection ("CAMP", 0x70, 0x24CA, 0x2A));
|
redirections.add (new Redirection ("CAMP ", 0x70, 0x24CA, 0x2A));
|
||||||
redirections.add (new Redirection ("DOCOPY", 0x83, 0x07A0, 0x3D));
|
redirections.add (new Redirection ("DOCOPY ", 0x83, 0x07A0, 0x3D));
|
||||||
redirections.add (new Redirection ("DOCACHE", 0x87, 0x072E, 0x41));
|
redirections.add (new Redirection ("DOCACHE ", 0x87, 0x072E, 0x41));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PascalSegment (String name, byte[] fullBuffer, int seq)
|
public PascalSegment (String name, byte[] fullBuffer, int seq)
|
||||||
@ -60,11 +60,18 @@ public class PascalSegment extends AbstractFile implements PascalConstants
|
|||||||
fullBuffer[0xE0 + seq * 2 + 1]);
|
fullBuffer[0xE0 + seq * 2 + 1]);
|
||||||
|
|
||||||
// segment 1 is the main segment, 2-6 are used by the system, and 7
|
// segment 1 is the main segment, 2-6 are used by the system, and 7
|
||||||
// onwards is for our program
|
// onwards is for the program
|
||||||
this.segmentNoHeader = fullBuffer[0x100 + seq * 2] & 0xFF;
|
this.segmentNoHeader = fullBuffer[0x100 + seq * 2] & 0xFF;
|
||||||
int flags = fullBuffer[0x101 + seq * 2] & 0xFF;
|
int flags = fullBuffer[0x101 + seq * 2] & 0xFF;
|
||||||
|
|
||||||
|
// 0 unknown,
|
||||||
|
// 1 positive byte sex p-code
|
||||||
|
// 2 negative byte sex p-code (apple pascal)
|
||||||
|
// 3-9 6502 code (7 = apple 6502)
|
||||||
machineType = flags & 0x0F;
|
machineType = flags & 0x0F;
|
||||||
|
|
||||||
version = (flags & 0xD0) >> 5;
|
version = (flags & 0xD0) >> 5;
|
||||||
|
|
||||||
intrinsSegs1 = HexFormatter.intValue (fullBuffer[0x120 + seq * 4],
|
intrinsSegs1 = HexFormatter.intValue (fullBuffer[0x120 + seq * 4],
|
||||||
fullBuffer[0x120 + seq * 4 + 1]);
|
fullBuffer[0x120 + seq * 4 + 1]);
|
||||||
intrinsSegs2 = HexFormatter.intValue (fullBuffer[0x120 + seq * 4 + 2],
|
intrinsSegs2 = HexFormatter.intValue (fullBuffer[0x120 + seq * 4 + 2],
|
||||||
@ -172,6 +179,7 @@ public class PascalSegment extends AbstractFile implements PascalConstants
|
|||||||
for (PascalProcedure procedure : procedures)
|
for (PascalProcedure procedure : procedures)
|
||||||
if (procedure.valid)
|
if (procedure.valid)
|
||||||
text.append (procedure);
|
text.append (procedure);
|
||||||
|
|
||||||
return text.toString ();
|
return text.toString ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,7 +193,7 @@ class Redirection
|
|||||||
|
|
||||||
public Redirection (String name, int oldOffset, int length, int newOffset)
|
public Redirection (String name, int oldOffset, int length, int newOffset)
|
||||||
{
|
{
|
||||||
this.name = name;
|
this.name = name.trim ();
|
||||||
this.oldOffset = oldOffset;
|
this.oldOffset = oldOffset;
|
||||||
this.newOffset = newOffset;
|
this.newOffset = newOffset;
|
||||||
this.length = length;
|
this.length = length;
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.bytezone.diskbrowser.pascal;
|
package com.bytezone.diskbrowser.pascal;
|
||||||
|
|
||||||
import com.bytezone.diskbrowser.applefile.*;
|
import com.bytezone.diskbrowser.applefile.*;
|
||||||
|
import com.bytezone.diskbrowser.utilities.FileFormatException;
|
||||||
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
import com.bytezone.diskbrowser.utilities.HexFormatter;
|
||||||
|
|
||||||
class FileEntry extends CatalogEntry
|
class FileEntry extends CatalogEntry
|
||||||
@ -63,11 +64,18 @@ class FileEntry extends CatalogEntry
|
|||||||
|
|
||||||
switch (fileType)
|
switch (fileType)
|
||||||
{
|
{
|
||||||
case 2:
|
case 2: // code (6502 or Pascal)
|
||||||
if (name.equals ("SYSTEM.INTERP"))
|
try
|
||||||
file = new AssemblerProgram (name, buffer, 0xD000);
|
{
|
||||||
else
|
|
||||||
file = new PascalCode (name, buffer);
|
file = new PascalCode (name, buffer);
|
||||||
|
}
|
||||||
|
catch (FileFormatException e)
|
||||||
|
{
|
||||||
|
if (name.equals ("SYSTEM.INTERP"))
|
||||||
|
file = new AssemblerProgram (name, buffer, 0xD000);
|
||||||
|
else
|
||||||
|
file = new AssemblerProgram (name, buffer, 0);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -60,7 +60,7 @@ class PascalCodeObject implements AppleFileSource
|
|||||||
@Override
|
@Override
|
||||||
public String getUniqueName ()
|
public String getUniqueName ()
|
||||||
{
|
{
|
||||||
return segment.getName (); // this should be fileName/segmentName
|
return segment.getName (); // this should be fileName/segmentName
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user