fixed double hi res

This commit is contained in:
Denis Molony 2020-06-23 15:50:54 +10:00
parent 24daee5319
commit 96badbeff3
3 changed files with 21 additions and 12 deletions

View File

@ -19,7 +19,7 @@ public class ExoBuffer
private static int PFLAG_BITS_ALIGN_START = (1 << PBIT_BITS_ALIGN_START); private static int PFLAG_BITS_ALIGN_START = (1 << PBIT_BITS_ALIGN_START);
private static int PFLAG_4_OFFSET_TABLES = (1 << PBIT_4_OFFSET_TABLES); private static int PFLAG_4_OFFSET_TABLES = (1 << PBIT_4_OFFSET_TABLES);
byte[] outBuffer = new byte[8192]; byte[] outBuffer = new byte[16384];
// ---------------------------------------------------------------------------------// // ---------------------------------------------------------------------------------//
public ExoBuffer (byte[] inBuffer) public ExoBuffer (byte[] inBuffer)
@ -31,21 +31,26 @@ public class ExoBuffer
// tableDump (decCtx.table); // tableDump (decCtx.table);
decCtxDecrunch (decCtx); decCtxDecrunch (decCtx);
if (decCtx.outPos != outBuffer.length)
{
byte[] outBuffer2 = new byte[decCtx.outPos];
System.arraycopy (outBuffer, 0, outBuffer2, 0, outBuffer2.length);
outBuffer = outBuffer2;
}
reverse (outBuffer); reverse (outBuffer);
// System.out.println (HexFormatter.format (outBuffer));
} }
// ---------------------------------------------------------------------------------//
private void reverse (byte[] inBuffer) private void reverse (byte[] inBuffer)
// ---------------------------------------------------------------------------------//
{ {
int lo = 0; int lo = 0;
int hi = inBuffer.length - 1; int hi = inBuffer.length - 1;
while (lo < hi) while (lo < hi)
{ {
byte temp = inBuffer[lo]; byte temp = inBuffer[lo];
inBuffer[lo] = inBuffer[hi]; inBuffer[lo++] = inBuffer[hi];
inBuffer[hi] = temp; inBuffer[hi--] = temp;
++lo;
--hi;
} }
} }

View File

@ -666,11 +666,9 @@ public abstract class HiResImage extends AbstractFile
public static boolean isExo (byte[] buffer) public static boolean isExo (byte[] buffer)
// ---------------------------------------------------------------------------------// // ---------------------------------------------------------------------------------//
{ {
if (buffer[0] == 1 && buffer[1] == 0) if (buffer[0] == 1 && buffer[1] == 0) // this sucks
{
// ExoBuffer exoBuffer = new ExoBuffer (buffer);
return true; return true;
}
return false; return false;
} }

View File

@ -322,12 +322,18 @@ class FileEntry extends CatalogEntry implements ProdosConstants
else if (auxType == 0x3FF8 && HiResImage.isExo (exactBuffer)) else if (auxType == 0x3FF8 && HiResImage.isExo (exactBuffer))
{ {
ExoBuffer exoBuffer = new ExoBuffer (exactBuffer); ExoBuffer exoBuffer = new ExoBuffer (exactBuffer);
file = new OriginalHiResImage (name, exoBuffer.getExpandedBuffer (), 0x4000); byte[] outBuffer = exoBuffer.getExpandedBuffer ();
if (outBuffer.length == 0x2000)
file = new OriginalHiResImage (name, outBuffer, 0x3FF8);
else if (outBuffer.length == 0x4000)
file = new DoubleHiResImage (name, outBuffer);
else
file = new AssemblerProgram (name, exactBuffer, auxType);
} }
else if (oneOf (endOfFile, 0x1FF8, 0x1FFF, 0x2000, 0x4000) else if (oneOf (endOfFile, 0x1FF8, 0x1FFF, 0x2000, 0x4000)
&& oneOf (auxType, 0x1FFF, 0x2000, 0x4000, 0x6000)) && oneOf (auxType, 0x1FFF, 0x2000, 0x4000, 0x6000))
file = new OriginalHiResImage (name, exactBuffer, auxType); file = new OriginalHiResImage (name, exactBuffer, auxType);
else if (endOfFile == 38400 && name.startsWith ("LVL.")) else if (endOfFile == 0x9600 && name.startsWith ("LVL."))
file = new LodeRunner (name, exactBuffer); file = new LodeRunner (name, exactBuffer);
else if (auxType == 0x1000 && CharacterRom.isRom (exactBuffer)) else if (auxType == 0x1000 && CharacterRom.isRom (exactBuffer))
file = new CharacterRom (name, exactBuffer); file = new CharacterRom (name, exactBuffer);