2018-08-18 03:24:22 +00:00
|
|
|
package com.bytezone.diskbrowser.applefile;
|
|
|
|
|
|
|
|
import java.awt.image.DataBuffer;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
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;
|
|
|
|
private static final int charsY = 6;
|
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;
|
|
|
|
List<Character> characters = new ArrayList<> ();
|
|
|
|
|
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-03 05:49:01 +00:00
|
|
|
super (name, buffer, charsX, charsY, HEADER_LENGTH);
|
2018-08-18 03:24:22 +00:00
|
|
|
|
2019-11-04 08:30:13 +00:00
|
|
|
description = HexFormatter.getCString (buffer, 16);
|
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
|
|
|
@Override
|
|
|
|
Character createCharacter (byte[] buffer, int ptr)
|
2019-11-02 06:56:06 +00:00
|
|
|
// ---------------------------------------------------------------------------------//
|
2018-08-18 03:24:22 +00:00
|
|
|
{
|
2019-11-01 23:29:36 +00:00
|
|
|
return new CharacterRomCharacter (buffer, ptr);
|
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
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|