dmolony-DiskBrowser/src/com/bytezone/diskbrowser/applefile/CharacterRom.java

73 lines
2.4 KiB
Java
Raw Normal View History

2018-08-18 03:24:22 +00:00
package com.bytezone.diskbrowser.applefile;
import java.awt.image.DataBuffer;
2019-11-04 08:30:13 +00:00
import com.bytezone.diskbrowser.utilities.HexFormatter;
2018-08-18 05:12:41 +00:00
// see graffidisk.v1.0.2mg
2019-11-02 06:56:06 +00:00
// -----------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
public class CharacterRom extends CharacterList
2019-11-02 06:56:06 +00:00
// -----------------------------------------------------------------------------------//
2018-08-18 03:24:22 +00:00
{
2019-11-01 23:29:36 +00:00
private static final int charsX = 16;
2019-11-03 05:49:01 +00:00
private static final int HEADER_LENGTH = 0x100;
2019-11-01 23:29:36 +00:00
2018-08-18 03:24:22 +00:00
String description;
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2018-08-18 03:24:22 +00:00
public CharacterRom (String name, byte[] buffer)
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2018-08-18 03:24:22 +00:00
{
2019-11-09 13:23:30 +00:00
super (name, buffer);
2018-08-18 03:24:22 +00:00
2019-11-04 08:30:13 +00:00
description = HexFormatter.getCString (buffer, 16);
2019-11-09 13:23:30 +00:00
int ptr = HEADER_LENGTH;
while (ptr < buffer.length)
{
characters.add (new CharacterRomCharacter (buffer, ptr));
ptr += sizeY;
}
buildImage (borderX, borderY, gapX, gapY, sizeX, sizeY, charsX);
2019-11-01 23:29:36 +00:00
}
2018-08-19 01:48:04 +00:00
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
public static boolean isRom (byte[] buffer)
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
{
if (buffer.length != 0x400)
return false;
2018-08-19 01:48:04 +00:00
2019-11-04 08:30:13 +00:00
// see CHARROM.S on graffidisk
2019-11-01 23:29:36 +00:00
// BD 41 53 10 A0 07 08
return buffer[0] == (byte) 0xBD && buffer[1] == (byte) 0x41
2019-11-04 08:30:13 +00:00
&& buffer[2] == (byte) 0x53 && buffer[4] == (byte) 0xA0
&& buffer[5] == (byte) 0x07 && buffer[6] == (byte) 0x08;
2018-08-18 03:24:22 +00:00
}
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
class CharacterRomCharacter extends Character
2019-11-02 06:56:06 +00:00
// ---------------------------------------------------------------------------------//
2018-08-18 03:24:22 +00:00
{
2019-11-02 06:56:06 +00:00
// -------------------------------------------------------------------------------//
2019-11-01 23:29:36 +00:00
public CharacterRomCharacter (byte[] buffer, int ptr)
2019-11-02 06:56:06 +00:00
// -------------------------------------------------------------------------------//
2018-08-18 03:24:22 +00:00
{
2019-11-09 13:23:30 +00:00
super (sizeX, sizeY);
2018-08-18 03:24:22 +00:00
DataBuffer dataBuffer = image.getRaster ().getDataBuffer ();
int element = 0;
2019-11-01 23:29:36 +00:00
for (int i = 0; i < sizeY; i++)
2018-08-18 03:24:22 +00:00
{
int value = buffer[ptr++] & 0xFF;
2019-11-01 23:29:36 +00:00
for (int j = 0; j < sizeX; j++)
2018-08-18 03:24:22 +00:00
{
2019-11-01 23:29:36 +00:00
dataBuffer.setElem (element++, (value & 0x80) == 0 ? 0 : 0xFF);
2018-08-18 03:24:22 +00:00
value <<= 1;
}
}
}
}
}