Adding Hi-Res Video controller (TV out) firmware

Firmware sources for Hi-Res Video controller (TV out) with examples
This commit is contained in:
Computer construction kit SmartyKit 2022-02-10 18:41:59 +03:00 committed by GitHub
parent 7ed00a7268
commit e3c9c1f1a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 6834 additions and 0 deletions

View File

@ -0,0 +1,517 @@
/*
* multi-mode tv out terminal library for Arduino
*
* Dave Curran 2013-09-06
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* 2013-09-06 - V0.1 - Initial Release
* 2013-09-13 - V0.2 - Added 4 bit mode plus minor tidy up
* 2013-09-16 - V0.3 - Added I2C mode
* 2013-09-23 - V0.4 - I2C mode writing direct and bypassing Wire
* 2013-09-28 - V0.5 - Added font and graphics options
*/
#include "Terminal.h"
#include "Arduino.h"
// ***************************************
// * CONSTRUCTORS
// ***************************************
// Initialise the display for 8 bit mode
// The pins can be any that are convenient.
Terminal::Terminal(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t avail, uint8_t ack)
{
// store pin numbers
_avail_pin = avail;
_ack_pin = ack;
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = d4;
_data_pins[5] = d5;
_data_pins[6] = d6;
_data_pins[7] = d7;
// set pin modes
pinMode(_ack_pin, INPUT);
pinMode(_avail_pin, OUTPUT);
for(uint8_t i=0; i<8; i++)
{
pinMode(_data_pins[i], OUTPUT);
digitalWrite(_data_pins[i], LOW);
}
_4bit_mode = false;
_i2c_mode = false;
clear();
}
// Initialise the display for 4 bit mode
// The pins can be any that are convenient. If using an Arduino, using pin 13 for ack will show activity
Terminal::Terminal(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t avail, uint8_t ack)
{
// store pin numbers
_avail_pin = avail;
_ack_pin = ack;
_data_pins[0] = d0;
_data_pins[1] = d1;
_data_pins[2] = d2;
_data_pins[3] = d3;
_data_pins[4] = 0;
_data_pins[5] = 0;
_data_pins[6] = 0;
_data_pins[7] = 0;
// set pin modes
pinMode(_ack_pin, INPUT);
pinMode(_avail_pin, OUTPUT);
for(uint8_t i=0; i<4; i++)
{
pinMode(_data_pins[i], OUTPUT);
digitalWrite(_data_pins[i], LOW);
}
_4bit_mode = true;
_i2c_mode = false;
clear();
}
// initialise for I2C mode
Terminal::Terminal()
{
_4bit_mode = false;
_i2c_mode = true;
_transmitting = false;
DDRC |= 0x30; // set the two I2C pins as outputs
// Two wire speed initialisation
// SCL freq = CPU freq / (16+2*TWBR*Prescaler)
TWSR = 0; // Prescaler = 1
TWBR = 12; // Bit rate 12 = 400KHz for 16MHz clk
clear();
}
// ***************************************
// * Display control functions
// ***************************************
// Clear the screen
void Terminal::clear()
{
send(TERMINAL_CLEAR_SCREEN);
}
// Blink the cursor
void Terminal::cursorBlink()
{
send(TERMINAL_CURSOR_BLINKING);
}
// use a solid cursor
void Terminal::cursorBlinkOff()
{
send(TERMINAL_CURSOR_SOLID);
}
// Change the cursor to a block
void Terminal::cursorBlock()
{
cursorCustom(0xDB);
}
// Change the cursor to an underscore (default)
void Terminal::cursorUnderscore()
{
cursorCustom('_');
}
// no cursor
void Terminal::cursorOff()
{
send(TERMINAL_CURSOR_SOLID);
cursorCustom(0x00);
}
// set any character as the cursor character, 0x00 for off
void Terminal::cursorCustom(uint8_t c)
{
send(TERMINAL_CURSOR_SET);
send(c);
}
// set the font (use combinations of TERMAIN_FONT_x
void Terminal::setFont(uint8_t c)
{
send(TERMINAL_SET_FONT);
send(c);
}
// Set the cursor location
void Terminal::setCursor(uint8_t column, uint8_t row)
{
setColumn(column);
setRow(row);
}
// Set location to a given column
void Terminal::setColumn(uint8_t column)
{
send(TERMINAL_SET_COLUMN);
send(column);
}
// Set location to a given row
void Terminal::setRow(uint8_t row)
{
send(TERMINAL_SET_ROW);
send(row);
}
// Send the CTRL+LF pair
void Terminal::sendCRLF()
{
send(TERMINAL_CARRIAGE_RETURN);
send(TERMINAL_LINE_FEED);
}
// ***************************************
// * Graphics functions
// ***************************************
// Set a pixel in 160x100 graphics - note any text on this line will be cleared
void Terminal::setPixel(uint8_t x, uint8_t y)
{
if (x<160 && y<100)
{
send(TERMINAL_SET_PIXEL);
send(x);
send(y);
}
}
// Clear a pixel in 160x100 graphics - note any text on this line will be cleared
void Terminal::clearPixel(uint8_t x, uint8_t y)
{
if (x<160 && y<100)
{
send(TERMINAL_CLEAR_PIXEL);
send(x);
send(y);
}
}
// draw a line from x1,y1 to x2,y2
void Terminal::drawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
{
int xdiff = x2 - x1;
int ydiff = y2 - y1;
int maxdiff = max(abs(xdiff),abs(ydiff));
for(int n=0; n<maxdiff; n++)
{
setPixel(x1 + xdiff*n/maxdiff, y1 + ydiff*n/maxdiff);
}
// set the final pixel in case of rounding errors
setPixel(x2, y2);
}
// clear a line from x1,y1 to x2,y2
void Terminal::clearLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
{
int xdiff = x2 - x1;
int ydiff = y2 - y1;
int maxdiff = max(abs(xdiff),abs(ydiff));
for(int n=0; n<maxdiff; n++)
{
clearPixel(x1 + xdiff*n/maxdiff, y1 + ydiff*n/maxdiff);
}
// clear the final pixel in case of rounding errors
clearPixel(x2, y2);
}
// draw the outline of a box with opposite corners at x1,y1 and x2,y2
void Terminal::drawBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
{
drawLine(x1,y1, x2,y1);
drawLine(x2,y1, x2,y2);
drawLine(x2,y2, x1,y2);
drawLine(x1,y2, x1,y1);
}
// draw the filled box with opposite corners at x1,y1 and x2,y2
void Terminal::fillBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
{
uint8_t ymin = min(y1,y2);
uint8_t ymax = max(y1,y2);
for(int y=ymin; y<=ymax; y++)
{
drawLine(x1,y, x2,y);
}
}
// clear the area of a box with opposite corners at x1,y1 and x2,y2
void Terminal::clearBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2)
{
uint8_t ymin = min(y1,y2);
uint8_t ymax = max(y1,y2);
for(int y=ymin; y<=ymax; y++)
{
clearLine(x1,y, x2,y);
}
}
// draw the outline of a circle centred on x0,y0 with a radius of radius
void Terminal::drawCircle(uint8_t x0, uint8_t y0, uint8_t radius)
{
int8_t x = radius;
int8_t y = 0;
int8_t radiusError = 1-x;
while(x >= y)
{
setPixel(x + x0, y + y0);
setPixel(y + x0, x + y0);
setPixel(-x + x0, y + y0);
setPixel(-y + x0, x + y0);
setPixel(-x + x0, -y + y0);
setPixel(-y + x0, -x + y0);
setPixel(x + x0, -y + y0);
setPixel(y + x0, -x + y0);
y++;
if(radiusError<0)
radiusError+=2*y+1;
else
{
x--;
radiusError+=2*(y-x+1);
}
}
}
// fill a circle centred on x0,y0 with a radius of radius
void Terminal::fillCircle(uint8_t x0, uint8_t y0, uint8_t radius)
{
for(int y=-radius; y<=radius; y++)
{
for(int x=-radius; x<=radius; x++)
{
if(x*x+y*y <= radius*radius)
{
setPixel(x0+x, y0+y);
}
}
}
}
// clear a circle centred on x0,y0 with a radius of radius
void Terminal::clearCircle(uint8_t x0, uint8_t y0, uint8_t radius)
{
for(int y=-radius; y<=radius; y++)
{
for(int x=-radius; x<=radius; x++)
{
if(x*x+y*y <= radius*radius)
{
clearPixel(x0+x, y0+y);
}
}
}
}
// ***************************************
// * Send functions
// ***************************************
// Print a string with a linefeed at the end
void Terminal::printLine(String s)
{
print(s);
sendCRLF();
}
// Print a string
void Terminal::print(String s)
{
// send character by character
for(unsigned int n=0; n<s.length(); n++)
{
send(s[n]);
}
}
// send a single byte
uint8_t Terminal::send(uint8_t c)
{
if (_i2c_mode)
{
return sendI2C(c);
}
else if (_4bit_mode)
{
return send4Bit(c);
}
else
{
return send8Bit(c);
}
}
// ***************************************
// * 4 and 8 bit parallel send functions
// ***************************************
// Internal 4 bit send
uint8_t Terminal::send4Bit(uint8_t c)
{
uint8_t i=0;
// Should already be low, set just in case
digitalWrite(_avail_pin, LOW);
// Check to see if the acknowledge pin is low
// If not then wait until it is (the display processor will change to low when ready)
while (digitalRead(_ack_pin) == HIGH);
// Move the data into the appropriate output pins
// Start with the upper nibble
for(i=0; i<4; i++)
{
digitalWrite(_data_pins[i], bitRead(c, i + 4));
}
// wait for a bit
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
// Flip the data avail bit to tell the display that high 4 bits are ready for display
digitalWrite(_avail_pin, HIGH);
// Check to see if the acknowledge pin is high
// If not then wait until it is (the display processor will change to high when ready)
while (digitalRead(_ack_pin) == LOW);
// Move the data into the appropriate output pins
// Now the lower nibble
for(i=0; i<4; i++)
{
digitalWrite(_data_pins[i], bitRead(c, i));
}
// wait a bit
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
asm volatile ("nop");
// Flip the data avail bit to tell the display that low 4 bits are ready for display
digitalWrite(_avail_pin, LOW);
// success
return 0;
}
// Internal 8 bit send
uint8_t Terminal::send8Bit(uint8_t c)
{
// Check to see if the acknowledge pin is the same as the data available pin
// If not then wait until it is (the display processor will change it to be the same when ready)
while (digitalRead(_avail_pin) != digitalRead(_ack_pin));
// Move the data into the appropriate output pins
for(uint8_t i=0; i<8; i++)
{
digitalWrite(_data_pins[i], bitRead(c, i));
}
// Flip the data avail bit to tell the display that there is a character/command ready for display
digitalWrite(_avail_pin, !digitalRead(_avail_pin));
// success
return 0;
}
// ***************************************
// * I2C Functions
// ***************************************
// Two-wire interface definitions
#define TW_START 0x08
#define TW_MT_SLA_ACK 0x18
#define TW_MT_DATA_ACK 0x28
#define TW_WRITE 0
// this can be changed in the firmware
#define TWI_ADDRESS 0x01
uint8_t Terminal::sendI2C(uint8_t c)
{
uint8_t retCode = 0;
if (!_transmitting)
{
// send start
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
// wait for response (blocking)
while ((TWCR & (1<<TWINT))==0)
{
}
retCode = TWSR & 0xF8;
if (retCode != TW_START)
{
// ERROR
return retCode;
}
// Load SLA_W (address of display and low-write bit) into TWDR
TWDR = TW_WRITE | (TWI_ADDRESS << 1);
// Clear TWINT bit in TWCR to start transmission of address
TWCR = (1<<TWINT) | (1<<TWEN);
// Wait for confirmation
while ((TWCR & (1<<TWINT))==0)
{
}
retCode=TWSR & 0xF8;
if (retCode != TW_MT_SLA_ACK)
{
// ERROR
return retCode;
}
_transmitting = true;
}
// send the data
TWDR = c;
// Clear TWINT bit in TWCR to start transmission of data
TWCR = (1<<TWINT) | (1<<TWEN);
// Wait
while ((TWCR & (1<<TWINT))==0)
{
}
retCode = TWSR & 0xF8;
if (retCode != TW_MT_DATA_ACK)
{
// ERROR
return retCode;
}
// success
return 0;
}

View File

@ -0,0 +1,124 @@
/*
* multi-mode tv out terminal library for Arduino
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
*/
#ifndef Terminal_h
#define Terminal_h
#include <arduino.h>
// Control Codes
#define TERMINAL_CURSOR_HOME 0x01
#define TERMINAL_CURSOR_SET 0x02
#define TERMINAL_CURSOR_BLINKING 0x03
#define TERMINAL_CURSOR_SOLID 0x04
#define TERMINAL_SET_PIXEL 0x05
#define TERMINAL_CLEAR_PIXEL 0x06
#define TERMINAL_BACKSPACE 0x08
#define TERMINAL_TAB 0x09
#define TERMINAL_LINE_FEED 0x0A
#define TERMINAL_CLEAR_SCREEN 0x0C
#define TERMINAL_CARRIAGE_RETURN 0x0D
// Set column 0 to 79 (2nd uint8_t is the column number)
#define TERMINAL_SET_COLUMN 0x0E
// Set row 0 to 24 (2nd uint8_t is the row number)
#define TERMINAL_SET_ROW 0x0F
// Delete to the start of the line
#define TERMINAL_DELETE_BEFORE_LINE 0x10
// Delete to the end of the line
#define TERMINAL_DELETE_AFTER_LINE 0x11
// Delete to start of screen
#define TERMINAL_DELETE_BEFORE_PAGE 0x12
// Delete to end of screen
#define TERMINAL_DELETE_AFTER_PAGE 0x13
#define TERMINAL_SCROLL_UP 0x14
#define TERMINAL_SCROLL_DOWN 0x15
#define TERMINAL_SCROLL_LEFT 0x16
#define TERMINAL_SCROLL_RIGHT 0x17
#define TERMINAL_SET_FONT 0x18
// Treat next uint8_t as a character (to allow PC DOS char codes 1 to 31 to be displayed on screen)
#define TERMINAL_NEXT_IS_CHAR 0x1A
// ESC - reserved for ANSI sequences
#define TERMINAL_ESCAPE 0x1B
#define TERMINAL_CURSOR_RIGHT 0x1C
#define TERMINAL_CURSOR_LEFT 0x1D
#define TERMINAL_CURSOR_UP 0x1E
#define TERMINAL_CURSOR_DOWN 0x1F
#define TERMINAL_DELETE 0x7F
// font options
#define TERMINAL_FONT_40_CHAR 0x00
#define TERMINAL_FONT_80_CHAR 0x01
#define TERMINAL_FONT_NORMAL 0x00
#define TERMINAL_FONT_BOLD 0x02
#define TERMINAL_FONT_SINGLE_HEIGHT 0x00
#define TERMINAL_FONT_DOUBLE_HEIGHT 0x04
#define TERMINAL_FONT_GRAPHICS 0x80
#define TERMINAL_FONT_40_NORMAL_SINGLE 0x00
#define TERMINAL_FONT_80_NORMAL_SINGLE 0x01
#define TERMINAL_FONT_40_BOLD_SINGLE 0x02
#define TERMINAL_FONT_80_BOLD_SINGLE 0x03
#define TERMINAL_FONT_40_NORMAL_DOUBLE 0x04
#define TERMINAL_FONT_80_NORMAL_DOUBLE 0x05
#define TERMINAL_FONT_40_BOLD_DOUBLE 0x06
#define TERMINAL_FONT_80_BOLD_DOUBLE 0x07
class Terminal
{
public:
Terminal(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t avail, uint8_t ack);
Terminal(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t avail, uint8_t ack);
Terminal();
void begin();
void clear();
void cursorBlink();
void cursorBlinkOff();
void cursorUnderscore();
void cursorBlock();
void cursorOff();
void cursorCustom(uint8_t c);
void setFont(uint8_t c);
void setCursor(uint8_t column, uint8_t row);
void setColumn(uint8_t column);
void setRow(uint8_t row);
void setPixel(uint8_t x, uint8_t y);
void clearPixel(uint8_t x, uint8_t y);
void drawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
void clearLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
void drawBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
void fillBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
void clearBox(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2);
void drawCircle(uint8_t x0, uint8_t y0, uint8_t radius);
void fillCircle(uint8_t x0, uint8_t y0, uint8_t radius);
void clearCircle(uint8_t x0, uint8_t y0, uint8_t radius);
void sendCRLF();
void printLine(String s);
void print(String s);
uint8_t send(uint8_t c);
private:
uint8_t send4Bit(uint8_t c);
uint8_t send8Bit(uint8_t c);
uint8_t sendI2C(uint8_t c);
uint8_t _data_pins[8]; // data outputs
uint8_t _avail_pin; // output, tell the display that new data is available
uint8_t _ack_pin; // input, the display acknowledges the input
bool _4bit_mode; // is the interface in 4 bit mode
bool _i2c_mode; // is this in I2C mode
bool _transmitting; // in the middle of an I2C packet
};
#endif

View File

@ -0,0 +1,51 @@
/*
* This is a simple example of the multi-mode tv out terminal which displays the status of the 4 unused analogue inputs
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
// Analogue inputs
byte inputs[] = { A0, A1, A2, A3 };
void setup() {
}
void loop() {
byte v;
for (byte a = 0; a<4; a++)
{
// read the input
v = analogRead(inputs[a]);
term.send('A');
term.send(a+'0');
term.print(" [");
for(byte n=7; n>0; n--)
{
term.send(bitRead(v, n) ? '*' : '.');
}
term.print("] ");
}
term.sendCRLF();
// add a delay if it's going too fast
//delay(1000);
}

View File

@ -0,0 +1,38 @@
/*
* This is a simple example of the multi-mode tv out terminal which shows an emulation of the BBC Micro Mode 7 startup message
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup() {
// show startup messages
term.setFont(TERMINAL_FONT_40_BOLD_SINGLE);
term.printLine("BBC Computer 32K");
term.sendCRLF();
term.printLine("Acorn DFS");
term.sendCRLF();
term.printLine("BASIC");
term.sendCRLF();
term.print(">");
}
void loop() {
}

View File

@ -0,0 +1,68 @@
/*
* This is a simple example of the multi-mode tv out terminal which shows the various font options in I2C mode
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup()
{
term.printLine("This is the default font set in hardware");
term.setFont(TERMINAL_FONT_80_NORMAL_SINGLE);
term.sendCRLF();
term.printLine("80 Character normal single line");
term.setFont(TERMINAL_FONT_80_BOLD_SINGLE);
term.printLine("80 Character bold single line");
term.sendCRLF();
term.setFont(TERMINAL_FONT_80_NORMAL_DOUBLE);
term.printLine("80 Character normal double height");
term.setFont(TERMINAL_FONT_80_BOLD_DOUBLE);
term.printLine("80 Character bold double height");
term.setFont(TERMINAL_FONT_40_NORMAL_SINGLE);
term.sendCRLF();
term.printLine("40 Character normal single line");
term.setFont(TERMINAL_FONT_40_BOLD_SINGLE);
term.printLine("40 Character bold single line");
term.sendCRLF();
term.setFont(TERMINAL_FONT_40_NORMAL_DOUBLE);
term.printLine("40 Character normal double height");
term.setFont(TERMINAL_FONT_40_BOLD_DOUBLE);
term.printLine("40 Character bold double height");
term.setFont(TERMINAL_FONT_80_NORMAL_SINGLE);
term.sendCRLF();
term.printLine("Normal Font:");
term.printLine("01234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz !\"#$%^&*()-+=*");
term.setFont(TERMINAL_FONT_80_BOLD_SINGLE);
term.printLine("Bold Font:");
term.print("01234567890 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz !\"#$%^&*()-+=*");
}
void loop()
{
}

View File

@ -0,0 +1,146 @@
/*
* This is a simple example of the multi-mode tv out terminal which sends a Hello World message and shows the character set using 4 bit mode
*
* Dave Curran 2013-09-06
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* Any available I/O pins can be used, adjust the initialisation code below to match your setup.
*
* Arduino D8 ==> Display pin 15 (PB1) - D0
* Arduino D7 ==> Display pin 16 (PB2) - D1
* Arduino D6 ==> Display pin 17 (PB3) - D2
* Arduino D5 ==> Display pin 18 (PB4) - D3
* Arduino PC5 ==> Display pin 28 (PC5) - Avail
* Arduino PC4 <== Display pin 27 (PC4) - ACK
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
*/
#include <Terminal.h>
#include <Wire.h>
// Initialise the terminal pins
Terminal term(8, 7, 6, 5, A5, A4);
void setup()
{
// Initialise the terminal
term.cursorOff();
// show hello world
term.setCursor(34,0);
term.printLine("Hello World!");
term.printLine("");
term.printLine(" 80x25 text output library for Arduino in two wire interface 4 bit Mode");
term.printLine("");
// Show the 80 character positions
term.print("00000000001111111111222222222233333333334444444444555555555566666666667777777777");
term.printLine("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
// Show the character set
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
for(byte a=0; a<2; a++)
{
term.print(" \xDA");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xBF ");
}
for (byte a=0; a<8; a++)
{
for (byte b=0; b<2; b++)
{
term.send(' ');
byte msb = b*8 + a;
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
byte base = (msb * 0x10);
term.print("\xB3 ");
for (uint8_t n = 0; n<0x10; n++)
{
byte c=base + n;
if (c<0x20 || c==0x7f)
{
term.send(TERMINAL_NEXT_IS_CHAR);
}
term.send(c);
term.send(' ');
}
term.send(0xB3);
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
term.print(" ");
}
}
for(byte a=0; a<2; a++)
{
term.print(" \xC0");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xD9 ");
}
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
// useful web addresses
term.setCursor(28, 21);
term.printLine("searle.hostei.com/grant");
term.setCursor(26, 23);
term.printLine("www.tynemouthsoftware.co.uk");
}
#define DELAY 250
void loop()
{
setCharacterAtCorners(0xC4);
delay(DELAY);
setCharacterAtCorners('\\');
delay(DELAY);
setCharacterAtCorners(0xB3);
delay(DELAY);
setCharacterAtCorners('/');
delay(DELAY);
}
void setCharacterAtCorners(char c)
{
// draw the corners (note if you draw at (79,24) it will scroll down to the next line and the top line will scroll off the top of the display)
term.setCursor(0,0);
term.send(c);
term.setCursor(79,0);
term.send(c);
term.setCursor(0,23);
term.send(c);
term.setCursor(79,23);
term.send(c);
}

View File

@ -0,0 +1,150 @@
/*
* This is a simple example of the multi-mode tv out terminal which sends a Hello World message and shows the character set using 8 bit mode
*
* Dave Curran 2013-09-06
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* Any available I/O pins can be used, adjust the initialisation code below to match your setup.
*
* Arduino D8 ==> Display pin 15 (PB1) - D0
* Arduino D7 ==> Display pin 16 (PB2) - D1
* Arduino D6 ==> Display pin 17 (PB3) - D2
* Arduino D5 ==> Display pin 18 (PB4) - D3
* Arduino D13 ==> Display pin 19 (PB5) - D4
* Arduino D4 ==> Display pin 23 (PC0) - D5
* Arduino D3 ==> Display pin 24 (PC1) - D6
* Arduino D2 ==> Display pin 25 (PC2) - D7
* Arduino PC5 ==> Display pin 28 (PC5) - Avail
* Arduino PC4 <== Display pin 27 (PC4) - ACK
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
*/
#include <Terminal.h>
#include <Wire.h>
// Initialise the terminal pins
Terminal term(8, 7, 6, 5, 13, 4, 3, 2, A5, A4);
void setup()
{
// Initialise the terminal
term.cursorOff();
// show hello world
term.setCursor(34,0);
term.printLine("Hello World!");
term.printLine("");
term.printLine(" 80x25 text output library for Arduino in two wire interface 8 bit Mode");
term.printLine("");
// Show the 80 character positions
term.print("00000000001111111111222222222233333333334444444444555555555566666666667777777777");
term.printLine("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
// Show the character set
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
for(byte a=0; a<2; a++)
{
term.print(" \xDA");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xBF ");
}
for (byte a=0; a<8; a++)
{
for (byte b=0; b<2; b++)
{
term.send(' ');
byte msb = b*8 + a;
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
byte base = (msb * 0x10);
term.print("\xB3 ");
for (uint8_t n = 0; n<0x10; n++)
{
byte c=base + n;
if (c<0x20 || c==0x7f)
{
term.send(TERMINAL_NEXT_IS_CHAR);
}
term.send(c);
term.send(' ');
}
term.send(0xB3);
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
term.print(" ");
}
}
for(byte a=0; a<2; a++)
{
term.print(" \xC0");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xD9 ");
}
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
// useful web addresses
term.setCursor(28, 21);
term.printLine("searle.hostei.com/grant");
term.setCursor(26, 23);
term.printLine("www.tynemouthsoftware.co.uk");
}
#define DELAY 250
void loop()
{
setCharacterAtCorners(0xC4);
delay(DELAY);
setCharacterAtCorners('\\');
delay(DELAY);
setCharacterAtCorners(0xB3);
delay(DELAY);
setCharacterAtCorners('/');
delay(DELAY);
}
void setCharacterAtCorners(char c)
{
// draw the corners (note if you draw at (79,24) it will scroll down to the next line and the top line will scroll off the top of the display)
term.setCursor(0,0);
term.send(c);
term.setCursor(79,0);
term.send(c);
term.setCursor(0,23);
term.send(c);
term.setCursor(79,23);
term.send(c);
}

View File

@ -0,0 +1,142 @@
/*
* This is a simple example of the multi-mode tv out terminal which sends a Hello World message and shows the character set
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup()
{
// Initialise the terminal
term.cursorOff();
// show hello world
term.setCursor(34,0);
term.printLine("Hello World!");
term.printLine("");
term.printLine(" 80x25 text output library for Arduino in two wire interface (I" "\xFD" "C) Mode");
term.printLine("");
// Show the 80 character positions
term.print("00000000001111111111222222222233333333334444444444555555555566666666667777777777");
term.printLine("01234567890123456789012345678901234567890123456789012345678901234567890123456789");
// Show the character set
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
for(byte a=0; a<2; a++)
{
term.print(" \xDA");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xBF ");
}
for (byte a=0; a<8; a++)
{
for (byte b=0; b<2; b++)
{
term.send(' ');
byte msb = b*8 + a;
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
byte base = (msb * 0x10);
term.print("\xB3 ");
for (uint8_t n = 0; n<0x10; n++)
{
byte c=base + n;
if (c<0x20 || c==0x7f)
{
term.send(TERMINAL_NEXT_IS_CHAR);
}
term.send(c);
term.send(' ');
}
term.send(0xB3);
if (msb>9)
{
term.send(msb + 0x37);
}
else
{
term.send(msb + 0x30);
}
term.print(" ");
}
}
for(byte a=0; a<2; a++)
{
term.print(" \xC0");
for(int n=0; n<33; n++)
{
term.send(0xC4);
}
term.print("\xD9 ");
}
term.printLine(" 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F");
// useful web addresses
term.setCursor(28, 21);
term.printLine("searle.hostei.com/grant");
term.setCursor(26, 23);
term.printLine("www.tynemouthsoftware.co.uk");
}
#define DELAY 250
void loop()
{
setCharacterAtCorners(0xC4);
delay(DELAY);
setCharacterAtCorners('\\');
delay(DELAY);
setCharacterAtCorners(0xB3);
delay(DELAY);
setCharacterAtCorners('/');
delay(DELAY);
}
void setCharacterAtCorners(char c)
{
// draw the corners (note if you draw at (79,24) it will scroll down to the next line and the top line will scroll off the top of the display)
term.setCursor(0,0);
term.send(c);
term.setCursor(79,0);
term.send(c);
term.setCursor(0,23);
term.send(c);
term.setCursor(79,23);
term.send(c);
}

View File

@ -0,0 +1,51 @@
/*
* This is a simple example of the multi-mode tv out terminal which pays homage to the title sequence of the tv series "Look Around You"
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup() {
// show startup messages
term.setFont(TERMINAL_FONT_40_BOLD_SINGLE);
term.printLine("BBC Computer 32K");
term.sendCRLF();
term.printLine("Acorn DFS");
term.sendCRLF();
term.printLine("BASIC");
term.sendCRLF();
term.print(">");
delay(2000);
term.printLine("10 PRINT \"LOOK AROUND YOU \";");
term.print(">");
delay(2000);
term.printLine("20 GOTO 10");
term.print(">");
delay(2000);
term.printLine("RUN");
}
void loop() {
term.print("LOOK AROUND YOU ");
delay(100);
}

View File

@ -0,0 +1,101 @@
/*
* This is a simple example of the multi-mode tv out terminal which shows graphics drawing capabilities with a missile command style demo
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup()
{
term.clear();
term.cursorOff();
}
void loop()
{
// clear the screen
term.clear();
// draw the base line
term.fillBox(0,99, 159,100);
// draw the bases
for(int b=0; b<3; b++)
{
byte pos = 27 + (b*54);
term.setPixel(pos, 96);
term.drawLine(pos-2, 97, pos+2, 97);
term.drawLine(pos-4, 98, pos+4, 98);
}
// fire 5 shots
for(int n=0; n<5; n++)
{
fireShot();
delay(1000);
}
// game over
term.clear();
term.setFont(TERMINAL_FONT_40_BOLD_DOUBLE);
term.setCursor(15, 12);
term.setFont(TERMINAL_FONT_40_BOLD_DOUBLE);
term.print("GAME OVER!");
delay(5000);
}
// fire a shot
void fireShot()
{
// take aim
uint8_t origin = random(0,159);
uint8_t destination = random(0,159);
// fire
// could have used term.drawLine(origin,0, destination,99);, but this adds a delay
int diff = destination-origin;
for(int y=0; y<99; y++)
{
term.setPixel(origin + (diff*y/99), y);
delay(100);
}
// bang
term.fillCircle(destination,99, 10);
delay(200);
term.clearCircle(destination,99, 10);
delay(200);
// clear it up
term.clearLine(origin,0, destination,99);
term.fillCircle(destination,99, 15);
delay(200);
term.clearCircle(destination,99, 15);
delay(200);
}

View File

@ -0,0 +1,39 @@
/*
* This is a simple example of the multi-mode tv out terminal which shows an emulation of the Commodore Pet startup message
*
* Dave Curran 2013-09-28
*
* Arduino Terminal Library - Dave Curran (www.tynemouthsoftware.co.uk)
* Concept and Microcontroller Firmware - Daryl Rictor, Grant Searle
*
* The display microcontroller is wired as follows:
* pin 28 (SCL) ==> Display pin 28 (SCL)
* pin 27 (SDA) ==> Display pin 27 (SDA)
* Arduino Reset ==> Display pin 1 (Reset) - Reset (Optional)
*
* The two I2C data lines need to be pulled high to 5V via 2K2 resistors.
*
*/
#include <Terminal.h>
// Create a terminal in TWI mode
Terminal term;
void setup() {
// set the cursor to a block
term.cursorBlock();
// show startup messages
term.printLine("*** commodore basic 4.0 ***");
term.sendCRLF();
term.printLine(" 31743 bytes free");
term.sendCRLF();
term.printLine("ready.");
}
void loop() {
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,65 @@
#######################################
# Syntax Colouring Map For Terminal
#######################################
#######################################
# Datatypes (KEYWORD1)
#######################################
Terminal KEYWORD1
#######################################
# Methods and Functions (KEYWORD2)
#######################################
begin KEYWORD2
clear KEYWORD2
cursorUnderscore KEYWORD2
cursorBlock KEYWORD2
cursorOff KEYWORD2
cursorCustom KEYWORD2
setFont KEYWORD2
setCursor KEYWORD2
setColumn KEYWORD2
setRow KEYWORD2
sendCRLF KEYWORD2
printLine KEYWORD2
print KEYWORD2
send KEYWORD2
#######################################
# Constants (LITERAL1)
#######################################
TERMINAL_CURSOR_SET LITERAL1
TERMINAL_CURSOR_BLINKING LITERAL1
TERMINAL_CURSOR_SOLID LITERAL1
TERMINAL_BACKSPACE LITERAL1
TERMINAL_TAB LITERAL1
TERMINAL_LINE_FEED LITERAL1
TERMINAL_CLEAR_SCREEN LITERAL1
TERMINAL_CARRIAGE_RETURN LITERAL1
TERMINAL_SET_COLUMN LITERAL1
TERMINAL_SET_ROW LITERAL1
TERMINAL_DELETE_BEFORE_LINE LITERAL1
TERMINAL_DELETE_AFTER_LINE LITERAL1
TERMINAL_DELETE_BEFORE_PAGE LITERAL1
TERMINAL_DELETE_AFTER_PAGE LITERAL1
TERMINAL_SCROLL_UP LITERAL1
TERMINAL_SCROLL_DOWN LITERAL1
TERMINAL_SCROLL_LEFT LITERAL1
TERMINAL_SCROLL_RIGHT LITERAL1
TERMINAL_SET_FONT LITERAL1
TERMINAL_NEXT_IS_CHAR LITERAL1
TERMINAL_ESCAPE LITERAL1
TERMINAL_CURSOR_RIGHT LITERAL1
TERMINAL_CURSOR_LEFT LITERAL1
TERMINAL_CURSOR_UP LITERAL1
TERMINAL_CURSOR_DOWN LITERAL1
TERMINAL_DELETE LITERAL1
TERMINAL_FONT_40_CHAR LITERAL1
TERMINAL_FONT_80_CHAR LITERAL1
TERMINAL_FONT_BOLD LITERAL1
TERMINAL_FONT_NORMAL LITERAL1
TERMINAL_FONT_SINGLE_HEIGHT LITERAL1
TERMINAL_FONT_DOUBLE_HEIGHT LITERAL1
TERMINAL_FONT_GRAPHICS LITERAL1

View File

@ -0,0 +1,24 @@
To use this library you need an additional ATMega328P to act as a video processor, and a 74HCT166 shift register to generate the video bit stream.
The video processor hex file needs to be programmed into an ATMega328P with the following fuses set:
E6 D9 FF
In avrdude that is: (change the com port as appropriate)
avrdude -P COM3 -b 19200 -c avrisp -p m328p -n
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U lfuse:w:0xe6:m
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U hfuse:w:0xd9:m
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U efuse:w:0xff:m
avrdude -P COM3 -b 19200 -c avrisp -p m328p -U flash:w:SBCVideo.hex
The video processor code is written by Grant Searle, based on code by Daryl Rictor.
Their pages are as follows:
http://searle.hostei.com/grant/MonitorKeyboard/index.html
http://sbc.rictor.org/vid3.html
80x25 Terminal library by Dave Curran, based on code from the above. For more info see:
http://blog.tynemouthsoftware.co.uk/2013/09/arduino-80x25-tv-video-output-library.html
http://blog.tynemouthsoftware.co.uk/2013/09/arduino-80x25-tv-video-output-library_15.html

View File

@ -0,0 +1,163 @@
;******************************************************
; Block font for medium-res graphics
;
; by Grant Searle 2013
;******************************************************
.CSEG
.ORG 0x1400
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
; Character line 1 (same as 0):
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
; Character line 3 (same as 2):
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
; Character line 5 (same as 4):
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
; Character line 7 (same as 6):
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF

View File

@ -0,0 +1,160 @@
;******************************************************
; COMPLETE CGA BOLD FONT
;
; Extracted by Grant Searle 2013
;******************************************************
.CSEG
.ORG 0x2000
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x7E, 0x7E, 0x6C, 0x10, 0x38, 0x10, 0x00, 0xFF, 0x00, 0xFF, 0x0F, 0x3C, 0x3F, 0x7F, 0x18
.db 0x80, 0x02, 0x18, 0x66, 0x7F, 0x3E, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x30, 0x6C, 0x6C, 0x30, 0x00, 0x38, 0x60, 0x18, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06
.db 0x7C, 0x30, 0x78, 0x78, 0x1C, 0xFC, 0x38, 0xFC, 0x78, 0x78, 0x00, 0x00, 0x18, 0x00, 0x60, 0x78
.db 0x7C, 0x30, 0xFC, 0x3C, 0xF8, 0xFE, 0xFE, 0x3C, 0xCC, 0x78, 0x1E, 0xE6, 0xF0, 0xC6, 0xC6, 0x38
.db 0xFC, 0x78, 0xFC, 0x78, 0xFC, 0xCC, 0xCC, 0xC6, 0xC6, 0xCC, 0xFE, 0x78, 0xC0, 0x78, 0x10, 0x00
.db 0x30, 0x00, 0xE0, 0x00, 0x1C, 0x00, 0x38, 0x00, 0xE0, 0x30, 0x0C, 0xE0, 0x70, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0xE0, 0x76, 0x00
.db 0x78, 0x00, 0x1C, 0x7E, 0xCC, 0xE0, 0x30, 0x00, 0x7E, 0xCC, 0xE0, 0xCC, 0x7C, 0xE0, 0xC6, 0x30
.db 0x1C, 0x00, 0x3E, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xC3, 0xCC, 0x18, 0x38, 0xCC, 0xF8, 0x0E
.db 0x1C, 0x38, 0x00, 0x00, 0x00, 0xFC, 0x3C, 0x38, 0x30, 0x00, 0x00, 0xC3, 0xC3, 0x18, 0x00, 0x00
.db 0x22, 0x55, 0xDB, 0x18, 0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x18, 0x00
.db 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18
.db 0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x38, 0x38, 0x1C, 0x00, 0x06, 0x38, 0x78
.db 0x00, 0x30, 0x60, 0x18, 0x0E, 0x18, 0x30, 0x00, 0x38, 0x00, 0x00, 0x0F, 0x78, 0x70, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0xFE, 0x38, 0x7C, 0x10, 0x00, 0xFF, 0x3C, 0xC3, 0x07, 0x66, 0x33, 0x63, 0xDB
.db 0xE0, 0x0E, 0x3C, 0x66, 0xDB, 0x63, 0x00, 0x3C, 0x3C, 0x18, 0x18, 0x30, 0x00, 0x24, 0x18, 0xFF
.db 0x00, 0x78, 0x6C, 0x6C, 0x7C, 0xC6, 0x6C, 0x60, 0x30, 0x30, 0x66, 0x30, 0x00, 0x00, 0x00, 0x0C
.db 0xC6, 0x70, 0xCC, 0xCC, 0x3C, 0xC0, 0x60, 0xCC, 0xCC, 0xCC, 0x30, 0x30, 0x30, 0x00, 0x30, 0xCC
.db 0xC6, 0x78, 0x66, 0x66, 0x6C, 0x62, 0x62, 0x66, 0xCC, 0x30, 0x0C, 0x66, 0x60, 0xEE, 0xE6, 0x6C
.db 0x66, 0xCC, 0x66, 0xCC, 0xB4, 0xCC, 0xCC, 0xC6, 0xC6, 0xCC, 0xC6, 0x60, 0x60, 0x18, 0x38, 0x00
.db 0x30, 0x00, 0x60, 0x00, 0x0C, 0x00, 0x6C, 0x00, 0x60, 0x00, 0x00, 0x60, 0x30, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x30, 0xDC, 0x10
.db 0xCC, 0xCC, 0x00, 0xC3, 0x00, 0x00, 0x30, 0x00, 0xC3, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x38, 0x30
.db 0x00, 0x00, 0x6C, 0xCC, 0xCC, 0xE0, 0xCC, 0xE0, 0xCC, 0x18, 0x00, 0x18, 0x6C, 0xCC, 0xCC, 0x1B
.db 0x00, 0x00, 0x1C, 0x1C, 0xF8, 0x00, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0x18, 0x33, 0xCC
.db 0x88, 0xAA, 0x77, 0x18, 0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x18, 0x00
.db 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18
.db 0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0x78, 0xFC, 0xFE, 0xCC, 0x00, 0x66, 0x76, 0x30, 0x6C, 0x6C, 0x30, 0x00, 0x0C, 0x60, 0xCC
.db 0xFC, 0x30, 0x30, 0x30, 0x1B, 0x18, 0x30, 0x76, 0x6C, 0x00, 0x00, 0x0C, 0x6C, 0x18, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xA5, 0xDB, 0xFE, 0x7C, 0x38, 0x38, 0x18, 0xE7, 0x66, 0x99, 0x0F, 0x66, 0x3F, 0x7F, 0x3C
.db 0xF8, 0x3E, 0x7E, 0x66, 0xDB, 0x38, 0x00, 0x7E, 0x7E, 0x18, 0x0C, 0x60, 0xC0, 0x66, 0x3C, 0xFF
.db 0x00, 0x78, 0x6C, 0xFE, 0xC0, 0xCC, 0x38, 0xC0, 0x60, 0x18, 0x3C, 0x30, 0x00, 0x00, 0x00, 0x18
.db 0xCE, 0x30, 0x0C, 0x0C, 0x6C, 0xF8, 0xC0, 0x0C, 0xCC, 0xCC, 0x30, 0x30, 0x60, 0xFC, 0x18, 0x0C
.db 0xDE, 0xCC, 0x66, 0xC0, 0x66, 0x68, 0x68, 0xC0, 0xCC, 0x30, 0x0C, 0x6C, 0x60, 0xFE, 0xF6, 0xC6
.db 0x66, 0xCC, 0x66, 0x60, 0x30, 0xCC, 0xCC, 0xC6, 0x6C, 0xCC, 0x8C, 0x60, 0x30, 0x18, 0x6C, 0x00
.db 0x18, 0x78, 0x60, 0x78, 0x0C, 0x78, 0x60, 0x76, 0x6C, 0x70, 0x0C, 0x66, 0x30, 0xCC, 0xF8, 0x78
.db 0xDC, 0x76, 0xDC, 0x7C, 0x7C, 0xCC, 0xCC, 0xC6, 0xC6, 0xCC, 0xFC, 0x30, 0x18, 0x30, 0x00, 0x38
.db 0xC0, 0x00, 0x78, 0x3C, 0x78, 0x78, 0x78, 0x78, 0x3C, 0x78, 0x78, 0x70, 0x38, 0x70, 0x6C, 0x00
.db 0xFC, 0x7F, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xCC, 0x7E, 0x64, 0x78, 0xCC, 0x18
.db 0x78, 0x70, 0x00, 0x00, 0x00, 0xCC, 0x6C, 0x6C, 0x30, 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x66, 0x66
.db 0x22, 0x55, 0xDB, 0x18, 0x18, 0xF8, 0x36, 0x00, 0xF8, 0xF6, 0x36, 0xFE, 0xF6, 0x36, 0xF8, 0x00
.db 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x1F, 0x36, 0x37, 0x3F, 0xF7, 0xFF, 0x37, 0xFF, 0xF7, 0xFF
.db 0x36, 0xFF, 0x00, 0x36, 0x1F, 0x1F, 0x00, 0x36, 0xFF, 0x18, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x76, 0xCC, 0xCC, 0x6C, 0x60, 0x7E, 0x66, 0xDC, 0x78, 0xC6, 0xC6, 0x18, 0x7E, 0x7E, 0xC0, 0xCC
.db 0x00, 0xFC, 0x18, 0x60, 0x1B, 0x18, 0x00, 0xDC, 0x6C, 0x00, 0x00, 0x0C, 0x6C, 0x30, 0x3C, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0xFE, 0xFE, 0xFE, 0x7C, 0x3C, 0xC3, 0x42, 0xBD, 0x7D, 0x66, 0x30, 0x63, 0xE7
.db 0xFE, 0xFE, 0x18, 0x66, 0x7B, 0x6C, 0x00, 0x18, 0x18, 0x18, 0xFE, 0xFE, 0xC0, 0xFF, 0x7E, 0x7E
.db 0x00, 0x30, 0x00, 0x6C, 0x78, 0x18, 0x76, 0x00, 0x60, 0x18, 0xFF, 0xFC, 0x00, 0xFC, 0x00, 0x30
.db 0xDE, 0x30, 0x38, 0x38, 0xCC, 0x0C, 0xF8, 0x18, 0x78, 0x7C, 0x00, 0x00, 0xC0, 0x00, 0x0C, 0x18
.db 0xDE, 0xCC, 0x7C, 0xC0, 0x66, 0x78, 0x78, 0xC0, 0xFC, 0x30, 0x0C, 0x78, 0x60, 0xFE, 0xDE, 0xC6
.db 0x7C, 0xCC, 0x7C, 0x30, 0x30, 0xCC, 0xCC, 0xD6, 0x38, 0x78, 0x18, 0x60, 0x18, 0x18, 0xC6, 0x00
.db 0x00, 0x0C, 0x7C, 0xCC, 0x7C, 0xCC, 0xF0, 0xCC, 0x76, 0x30, 0x0C, 0x6C, 0x30, 0xFE, 0xCC, 0xCC
.db 0x66, 0xCC, 0x76, 0xC0, 0x30, 0xCC, 0xCC, 0xD6, 0x6C, 0xCC, 0x98, 0xE0, 0x00, 0x1C, 0x00, 0x6C
.db 0xCC, 0xCC, 0xCC, 0x06, 0x0C, 0x0C, 0x0C, 0xC0, 0x66, 0xCC, 0xCC, 0x30, 0x18, 0x30, 0xC6, 0x78
.db 0x60, 0x0C, 0xFE, 0x78, 0x78, 0x78, 0xCC, 0xCC, 0xCC, 0x66, 0xCC, 0xC0, 0xF0, 0xFC, 0xFA, 0x3C
.db 0x0C, 0x30, 0x78, 0xCC, 0xF8, 0xEC, 0x3E, 0x38, 0x60, 0xFC, 0xFC, 0xDE, 0xDB, 0x18, 0xCC, 0x33
.db 0x88, 0xAA, 0xEE, 0x18, 0x18, 0x18, 0x36, 0x00, 0x18, 0x06, 0x36, 0x06, 0x06, 0x36, 0x18, 0x00
.db 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36, 0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00
.db 0x36, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0x36, 0x18, 0x18, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0xDC, 0xF8, 0xC0, 0x6C, 0x30, 0xD8, 0x66, 0x18, 0xCC, 0xFE, 0xC6, 0x7C, 0xDB, 0xDB, 0xF8, 0xCC
.db 0xFC, 0x30, 0x30, 0x30, 0x18, 0x18, 0xFC, 0x00, 0x38, 0x18, 0x00, 0x0C, 0x6C, 0x60, 0x3C, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xBD, 0xC3, 0x7C, 0x7C, 0xFE, 0xFE, 0x3C, 0xC3, 0x42, 0xBD, 0xCC, 0x3C, 0x30, 0x63, 0xE7
.db 0xF8, 0x3E, 0x18, 0x66, 0x1B, 0x6C, 0x7E, 0x7E, 0x18, 0x7E, 0x0C, 0x60, 0xC0, 0x66, 0xFF, 0x3C
.db 0x00, 0x30, 0x00, 0xFE, 0x0C, 0x30, 0xDC, 0x00, 0x60, 0x18, 0x3C, 0x30, 0x00, 0x00, 0x00, 0x60
.db 0xF6, 0x30, 0x60, 0x0C, 0xFE, 0x0C, 0xCC, 0x30, 0xCC, 0x0C, 0x00, 0x00, 0x60, 0x00, 0x18, 0x30
.db 0xDE, 0xFC, 0x66, 0xC0, 0x66, 0x68, 0x68, 0xCE, 0xCC, 0x30, 0xCC, 0x6C, 0x62, 0xD6, 0xCE, 0xC6
.db 0x60, 0xDC, 0x6C, 0x18, 0x30, 0xCC, 0xCC, 0xFE, 0x38, 0x30, 0x32, 0x60, 0x0C, 0x18, 0x00, 0x00
.db 0x00, 0x7C, 0x66, 0xC0, 0xCC, 0xFC, 0x60, 0xCC, 0x66, 0x30, 0x0C, 0x78, 0x30, 0xFE, 0xCC, 0xCC
.db 0x66, 0xCC, 0x66, 0x78, 0x30, 0xCC, 0xCC, 0xFE, 0x38, 0xCC, 0x30, 0x30, 0x18, 0x30, 0x00, 0xC6
.db 0x78, 0xCC, 0xFC, 0x3E, 0x7C, 0x7C, 0x7C, 0xC0, 0x7E, 0xFC, 0xFC, 0x30, 0x18, 0x30, 0xFE, 0xCC
.db 0x78, 0x7F, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x66, 0xCC, 0xC0, 0x60, 0x30, 0xC6, 0x18
.db 0x7C, 0x30, 0xCC, 0xCC, 0xCC, 0xFC, 0x00, 0x00, 0xC0, 0xC0, 0x0C, 0x33, 0x37, 0x18, 0x66, 0x66
.db 0x22, 0x55, 0xDB, 0x18, 0xF8, 0xF8, 0xF6, 0xFE, 0xF8, 0xF6, 0x36, 0xF6, 0xFE, 0xFE, 0xF8, 0xF8
.db 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x37, 0x3F, 0x37, 0xFF, 0xF7, 0x37, 0xFF, 0xF7, 0xFF
.db 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x1F, 0x3F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0xC8, 0xCC, 0xC0, 0x6C, 0x60, 0xD8, 0x66, 0x18, 0xCC, 0xC6, 0x6C, 0xCC, 0xDB, 0xDB, 0xC0, 0xCC
.db 0x00, 0x30, 0x60, 0x18, 0x18, 0x18, 0x00, 0x76, 0x00, 0x18, 0x18, 0xEC, 0x6C, 0x78, 0x3C, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x99, 0xE7, 0x38, 0x38, 0xD6, 0x7C, 0x18, 0xE7, 0x66, 0x99, 0xCC, 0x18, 0x70, 0x67, 0x3C
.db 0xE0, 0x0E, 0x7E, 0x00, 0x1B, 0x38, 0x7E, 0x3C, 0x18, 0x3C, 0x18, 0x30, 0xFE, 0x24, 0xFF, 0x18
.db 0x00, 0x00, 0x00, 0x6C, 0xF8, 0x66, 0xCC, 0x00, 0x30, 0x30, 0x66, 0x30, 0x30, 0x00, 0x30, 0xC0
.db 0xE6, 0x30, 0xCC, 0xCC, 0x0C, 0xCC, 0xCC, 0x30, 0xCC, 0x18, 0x30, 0x30, 0x30, 0xFC, 0x30, 0x00
.db 0xC0, 0xCC, 0x66, 0x66, 0x6C, 0x62, 0x60, 0x66, 0xCC, 0x30, 0xCC, 0x66, 0x66, 0xC6, 0xC6, 0x6C
.db 0x60, 0x78, 0x66, 0xCC, 0x30, 0xCC, 0x78, 0xEE, 0x6C, 0x30, 0x66, 0x60, 0x06, 0x18, 0x00, 0x00
.db 0x00, 0xCC, 0x66, 0xCC, 0xCC, 0xC0, 0x60, 0x7C, 0x66, 0x30, 0xCC, 0x6C, 0x30, 0xD6, 0xCC, 0xCC
.db 0x7C, 0x7C, 0x60, 0x0C, 0x34, 0xCC, 0x78, 0xFE, 0x6C, 0x7C, 0x64, 0x30, 0x18, 0x30, 0x00, 0xC6
.db 0x18, 0xCC, 0xC0, 0x66, 0xCC, 0xCC, 0xCC, 0x78, 0x60, 0xC0, 0xC0, 0x30, 0x18, 0x30, 0xC6, 0xFC
.db 0x60, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x3C, 0xCC, 0x7E, 0xE6, 0xFC, 0xCF, 0x18
.db 0xCC, 0x30, 0xCC, 0xCC, 0xCC, 0xDC, 0x7E, 0x7C, 0xCC, 0xC0, 0x0C, 0x66, 0x6F, 0x18, 0x33, 0xCC
.db 0x88, 0xAA, 0x77, 0x18, 0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18
.db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00
.db 0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0xDC, 0xF8, 0xC0, 0x6C, 0xCC, 0xD8, 0x7C, 0x18, 0x78, 0x6C, 0x6C, 0xCC, 0x7E, 0x7E, 0x60, 0xCC
.db 0xFC, 0x00, 0x00, 0x00, 0x18, 0xD8, 0x30, 0xDC, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x3C, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x00, 0xFF, 0x3C, 0xC3, 0xCC, 0x7E, 0xF0, 0xE6, 0xDB
.db 0x80, 0x02, 0x3C, 0x66, 0x1B, 0xCC, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x30, 0x00, 0x6C, 0x30, 0xC6, 0x76, 0x00, 0x18, 0x60, 0x00, 0x00, 0x30, 0x00, 0x30, 0x80
.db 0x7C, 0xFC, 0xFC, 0x78, 0x1E, 0x78, 0x78, 0x30, 0x78, 0x70, 0x30, 0x30, 0x18, 0x00, 0x60, 0x30
.db 0x78, 0xCC, 0xFC, 0x3C, 0xF8, 0xFE, 0xF0, 0x3E, 0xCC, 0x78, 0x78, 0xE6, 0xFE, 0xC6, 0xC6, 0x38
.db 0xF0, 0x1C, 0xE6, 0x78, 0x78, 0xFC, 0x30, 0xC6, 0xC6, 0x78, 0xFE, 0x78, 0x02, 0x78, 0x00, 0x00
.db 0x00, 0x76, 0xDC, 0x78, 0x76, 0x78, 0xF0, 0x0C, 0xE6, 0x78, 0xCC, 0xE6, 0x78, 0xC6, 0xCC, 0x78
.db 0x60, 0x0C, 0xF0, 0xF8, 0x18, 0x76, 0x30, 0x6C, 0xC6, 0x0C, 0xFC, 0x1C, 0x18, 0xE0, 0x00, 0xFE
.db 0x0C, 0x7E, 0x78, 0x3F, 0x7E, 0x7E, 0x7E, 0x0C, 0x3C, 0x78, 0x78, 0x78, 0x3C, 0x78, 0xC6, 0xCC
.db 0xFC, 0x7F, 0xCE, 0x78, 0x78, 0x78, 0x7E, 0x7E, 0x0C, 0x18, 0x78, 0x18, 0xFC, 0x30, 0xC6, 0xD8
.db 0x7E, 0x78, 0x78, 0x7E, 0xCC, 0xCC, 0x00, 0x00, 0x78, 0x00, 0x00, 0xCC, 0xCF, 0x18, 0x00, 0x00
.db 0x22, 0x55, 0xDB, 0x18, 0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18
.db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00
.db 0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x76, 0xC0, 0xC0, 0x6C, 0xFC, 0x70, 0x60, 0x18, 0x30, 0x38, 0xEE, 0x78, 0x00, 0x60, 0x38, 0xCC
.db 0x00, 0xFC, 0xFC, 0xFC, 0x18, 0xD8, 0x30, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x38, 0x38, 0x00, 0xFF, 0x00, 0xFF, 0x78, 0x18, 0xE0, 0xC0, 0x18
.db 0x00, 0x00, 0x18, 0x00, 0x00, 0x78, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x18, 0x00, 0x30, 0xC7, 0x70
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x00
.db 0x88, 0xAA, 0xEE, 0x18, 0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18
.db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00
.db 0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00

View File

@ -0,0 +1,316 @@
;******************************************************
; COMPLETE CGA BOLD FONT - WIDE VERSERION
;
; Extracted by Grant Searle 2013
;******************************************************
.CSEG
.ORG 0x2800
; 40 Char / line font (double width) left half of each char
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x3F, 0x3F, 0x3C, 0x03, 0x0F, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0x3F, 0x03
.db 0xC0, 0x00, 0x03, 0x3C, 0x3F, 0x0F, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x0F, 0x3C, 0x3C, 0x0F, 0x00, 0x0F, 0x3C, 0x03, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3F, 0x0F, 0x3F, 0x3F, 0x03, 0xFF, 0x0F, 0xFF, 0x3F, 0x3F, 0x00, 0x00, 0x03, 0x00, 0x3C, 0x3F
.db 0x3F, 0x0F, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0x3F, 0x03, 0xFC, 0xFF, 0xF0, 0xF0, 0x0F
.db 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0x3F, 0xF0, 0x3F, 0x03, 0x00
.db 0x0F, 0x00, 0xFC, 0x00, 0x03, 0x00, 0x0F, 0x00, 0xFC, 0x0F, 0x00, 0xFC, 0x3F, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0xFC, 0x3F, 0x00
.db 0x3F, 0x00, 0x03, 0x3F, 0xF0, 0xFC, 0x0F, 0x00, 0x3F, 0xF0, 0xFC, 0xF0, 0x3F, 0xFC, 0xF0, 0x0F
.db 0x03, 0x00, 0x0F, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xF0, 0xF0, 0x03, 0x0F, 0xF0, 0xFF, 0x00
.db 0x03, 0x0F, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0xF0, 0xF0, 0x03, 0x00, 0x00
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x0F, 0x0F, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x03
.db 0x0F, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x0F, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x0F, 0x3F
.db 0x00, 0x0F, 0x3C, 0x03, 0x00, 0x03, 0x0F, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x3F, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0x3C, 0x0F, 0x3C, 0xF3
.db 0xFC, 0x00, 0x0F, 0x3C, 0xF3, 0x3C, 0x00, 0x0F, 0x0F, 0x03, 0x03, 0x0F, 0x00, 0x0C, 0x03, 0xFF
.db 0x00, 0x3F, 0x3C, 0x3C, 0x3F, 0xF0, 0x3C, 0x3C, 0x0F, 0x0F, 0x3C, 0x0F, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0x3F, 0xF0, 0xF0, 0x0F, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, 0xF0
.db 0xF0, 0x3F, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xF0, 0x0F, 0x00, 0x3C, 0x3C, 0xFC, 0xFC, 0x3C
.db 0x3C, 0xF0, 0x3C, 0xF0, 0xCF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x3C, 0x3C, 0x03, 0x0F, 0x00
.db 0x0F, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x3C, 0x0F, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x03, 0x0F, 0xF3, 0x03
.db 0xF0, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x0F, 0x0F
.db 0x00, 0x00, 0x3C, 0xF0, 0xF0, 0xFC, 0xF0, 0xFC, 0xF0, 0x03, 0x00, 0x03, 0x3C, 0xF0, 0xF0, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0xFF, 0x00, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x03, 0x0F, 0xF0
.db 0xC0, 0xCC, 0x3F, 0x03, 0x03, 0x03, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x0F, 0x0F, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x03
.db 0x0F, 0x00, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x0F, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x00, 0x3F, 0xFF, 0xFF, 0xF0, 0x00, 0x3C, 0x3F, 0x0F, 0x3C, 0x3C, 0x0F, 0x00, 0x00, 0x3C, 0xF0
.db 0xFF, 0x0F, 0x0F, 0x0F, 0x03, 0x03, 0x0F, 0x3F, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xCC, 0xF3, 0xFF, 0x3F, 0x0F, 0x0F, 0x03, 0xFC, 0x3C, 0xC3, 0x00, 0x3C, 0x0F, 0x3F, 0x0F
.db 0xFF, 0x0F, 0x3F, 0x3C, 0xF3, 0x0F, 0x00, 0x3F, 0x3F, 0x03, 0x00, 0x3C, 0xF0, 0x3C, 0x0F, 0xFF
.db 0x00, 0x3F, 0x3C, 0xFF, 0xF0, 0xF0, 0x0F, 0xF0, 0x3C, 0x03, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x03
.db 0xF0, 0x0F, 0x00, 0x00, 0x3C, 0xFF, 0xF0, 0x00, 0xF0, 0xF0, 0x0F, 0x0F, 0x3C, 0xFF, 0x03, 0x00
.db 0xF3, 0xF0, 0x3C, 0xF0, 0x3C, 0x3C, 0x3C, 0xF0, 0xF0, 0x0F, 0x00, 0x3C, 0x3C, 0xFF, 0xFF, 0xF0
.db 0x3C, 0xF0, 0x3C, 0x3C, 0x0F, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0xC0, 0x3C, 0x0F, 0x03, 0x3C, 0x00
.db 0x03, 0x3F, 0x3C, 0x3F, 0x00, 0x3F, 0x3C, 0x3F, 0x3C, 0x3F, 0x00, 0x3C, 0x0F, 0xF0, 0xFF, 0x3F
.db 0xF3, 0x3F, 0xF3, 0x3F, 0x3F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0x0F, 0x03, 0x0F, 0x00, 0x0F
.db 0xF0, 0x00, 0x3F, 0x0F, 0x3F, 0x3F, 0x3F, 0x3F, 0x0F, 0x3F, 0x3F, 0x3F, 0x0F, 0x3F, 0x3C, 0x00
.db 0xFF, 0x3F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF0, 0x3F, 0x3C, 0x3F, 0xF0, 0x03
.db 0x3F, 0x3F, 0x00, 0x00, 0x00, 0xF0, 0x3C, 0x3C, 0x0F, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x3C, 0x3C
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0xFF, 0x0F, 0x00, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF
.db 0x0F, 0xFF, 0x00, 0x0F, 0x03, 0x03, 0x00, 0x0F, 0xFF, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x3F, 0xF0, 0xF0, 0x3C, 0x3C, 0x3F, 0x3C, 0xF3, 0x3F, 0xF0, 0xF0, 0x03, 0x3F, 0x3F, 0xF0, 0xF0
.db 0x00, 0xFF, 0x03, 0x3C, 0x03, 0x03, 0x00, 0xF3, 0x3C, 0x00, 0x00, 0x00, 0x3C, 0x0F, 0x0F, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0xF0, 0x30, 0xCF, 0x3F, 0x3C, 0x0F, 0x3C, 0xFC
.db 0xFF, 0xFF, 0x03, 0x3C, 0x3F, 0x3C, 0x00, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xF0, 0xFF, 0x3F, 0x3F
.db 0x00, 0x0F, 0x00, 0x3C, 0x3F, 0x03, 0x3F, 0x00, 0x3C, 0x03, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x0F
.db 0xF3, 0x0F, 0x0F, 0x0F, 0xF0, 0x00, 0xFF, 0x03, 0x3F, 0x3F, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x03
.db 0xF3, 0xF0, 0x3F, 0xF0, 0x3C, 0x3F, 0x3F, 0xF0, 0xFF, 0x0F, 0x00, 0x3F, 0x3C, 0xFF, 0xF3, 0xF0
.db 0x3F, 0xF0, 0x3F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF3, 0x0F, 0x3F, 0x03, 0x3C, 0x03, 0x03, 0xF0, 0x00
.db 0x00, 0x00, 0x3F, 0xF0, 0x3F, 0xF0, 0xFF, 0xF0, 0x3F, 0x0F, 0x00, 0x3C, 0x0F, 0xFF, 0xF0, 0xF0
.db 0x3C, 0xF0, 0x3F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF3, 0x3C, 0xF0, 0xC3, 0xFC, 0x00, 0x03, 0x00, 0x3C
.db 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3C, 0xF0, 0xF0, 0x0F, 0x03, 0x0F, 0xF0, 0x3F
.db 0x3C, 0x00, 0xFF, 0x3F, 0x3F, 0x3F, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0x0F
.db 0x00, 0x0F, 0x3F, 0xF0, 0xFF, 0xFC, 0x0F, 0x0F, 0x3C, 0xFF, 0xFF, 0xF3, 0xF3, 0x03, 0xF0, 0x0F
.db 0xC0, 0xCC, 0xFC, 0x03, 0x03, 0x03, 0x0F, 0x00, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x0F, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00
.db 0x0F, 0x00, 0x00, 0x0F, 0x03, 0x03, 0x00, 0x0F, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0xF3, 0xFF, 0xF0, 0x3C, 0x0F, 0xF3, 0x3C, 0x03, 0xF0, 0xFF, 0xF0, 0x3F, 0xF3, 0xF3, 0xFF, 0xF0
.db 0xFF, 0x0F, 0x0F, 0x0F, 0x03, 0x03, 0xFF, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x3C, 0x3C, 0x0F, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xCF, 0xF0, 0x3F, 0x3F, 0xFF, 0xFF, 0x0F, 0xF0, 0x30, 0xCF, 0xF0, 0x0F, 0x0F, 0x3C, 0xFC
.db 0xFF, 0x0F, 0x03, 0x3C, 0x03, 0x3C, 0x3F, 0x3F, 0x03, 0x3F, 0x00, 0x3C, 0xF0, 0x3C, 0xFF, 0x0F
.db 0x00, 0x0F, 0x00, 0xFF, 0x00, 0x0F, 0xF3, 0x00, 0x3C, 0x03, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x3C
.db 0xFF, 0x0F, 0x3C, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x03, 0x0F
.db 0xF3, 0xFF, 0x3C, 0xF0, 0x3C, 0x3C, 0x3C, 0xF0, 0xF0, 0x0F, 0xF0, 0x3C, 0x3C, 0xF3, 0xF0, 0xF0
.db 0x3C, 0xF3, 0x3C, 0x03, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0x0F, 0x0F, 0x3C, 0x00, 0x03, 0x00, 0x00
.db 0x00, 0x3F, 0x3C, 0xF0, 0xF0, 0xFF, 0x3C, 0xF0, 0x3C, 0x0F, 0x00, 0x3F, 0x0F, 0xFF, 0xF0, 0xF0
.db 0x3C, 0xF0, 0x3C, 0x3F, 0x0F, 0xF0, 0xF0, 0xFF, 0x0F, 0xF0, 0x0F, 0x0F, 0x03, 0x0F, 0x00, 0xF0
.db 0x3F, 0xF0, 0xFF, 0x0F, 0x3F, 0x3F, 0x3F, 0xF0, 0x3F, 0xFF, 0xFF, 0x0F, 0x03, 0x0F, 0xFF, 0xF0
.db 0x3F, 0x3F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0x3C, 0x0F, 0xF0, 0x03
.db 0x3F, 0x0F, 0xF0, 0xF0, 0xF0, 0xFF, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x0F, 0x0F, 0x03, 0x3C, 0x3C
.db 0x0C, 0x33, 0xF3, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x03, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x03, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0x0F, 0x03, 0x03, 0x0F, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0x3C, 0x3C, 0xF3, 0x3C, 0x03, 0xF0, 0xF0, 0x3C, 0xF0, 0xF3, 0xF3, 0xF0, 0xF0
.db 0x00, 0x0F, 0x3C, 0x03, 0x03, 0x03, 0x00, 0x3F, 0x00, 0x03, 0x03, 0xFC, 0x3C, 0x3F, 0x0F, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC3, 0xFC, 0x0F, 0x0F, 0xF3, 0x3F, 0x03, 0xFC, 0x3C, 0xC3, 0xF0, 0x03, 0x3F, 0x3C, 0x0F
.db 0xFC, 0x00, 0x3F, 0x00, 0x03, 0x0F, 0x3F, 0x0F, 0x03, 0x0F, 0x03, 0x0F, 0xFF, 0x0C, 0xFF, 0x03
.db 0x00, 0x00, 0x00, 0x3C, 0xFF, 0x3C, 0xF0, 0x00, 0x0F, 0x0F, 0x3C, 0x0F, 0x0F, 0x00, 0x0F, 0xF0
.db 0xFC, 0x0F, 0xF0, 0xF0, 0x00, 0xF0, 0xF0, 0x0F, 0xF0, 0x03, 0x0F, 0x0F, 0x0F, 0xFF, 0x0F, 0x00
.db 0xF0, 0xF0, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xF0, 0x0F, 0xF0, 0x3C, 0x3C, 0xF0, 0xF0, 0x3C
.db 0x3C, 0x3F, 0x3C, 0xF0, 0x0F, 0xF0, 0x3F, 0xFC, 0x3C, 0x0F, 0x3C, 0x3C, 0x00, 0x03, 0x00, 0x00
.db 0x00, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0x3C, 0x3F, 0x3C, 0x0F, 0xF0, 0x3C, 0x0F, 0xF3, 0xF0, 0xF0
.db 0x3F, 0x3F, 0x3C, 0x00, 0x0F, 0xF0, 0x3F, 0xFF, 0x3C, 0x3F, 0x3C, 0x0F, 0x03, 0x0F, 0x00, 0xF0
.db 0x03, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0x3F, 0x3C, 0xF0, 0xF0, 0x0F, 0x03, 0x0F, 0xF0, 0xFF
.db 0x3C, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x3F, 0x0F, 0xF0, 0x3F, 0xFC, 0xFF, 0xF0, 0x03
.db 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF3, 0x3F, 0x3F, 0xF0, 0xF0, 0x00, 0x3C, 0x3C, 0x03, 0x0F, 0xF0
.db 0xC0, 0xCC, 0x3F, 0x03, 0x03, 0x03, 0x0F, 0x0F, 0x03, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x0F, 0x00, 0x0F, 0x00
.db 0x00, 0x03, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0xF3, 0xFF, 0xF0, 0x3C, 0xF0, 0xF3, 0x3F, 0x03, 0x3F, 0x3C, 0x3C, 0xF0, 0x3F, 0x3F, 0x3C, 0xF0
.db 0xFF, 0x00, 0x00, 0x00, 0x03, 0xF3, 0x0F, 0xF3, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x0F, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0xF0, 0x3F, 0xFF, 0xFC, 0xF3
.db 0xC0, 0x00, 0x0F, 0x3C, 0x03, 0xF0, 0x3F, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x0F, 0x00, 0x3C, 0x0F, 0xF0, 0x3F, 0x00, 0x03, 0x3C, 0x00, 0x00, 0x0F, 0x00, 0x0F, 0xC0
.db 0x3F, 0xFF, 0xFF, 0x3F, 0x03, 0x3F, 0x3F, 0x0F, 0x3F, 0x3F, 0x0F, 0x0F, 0x03, 0x00, 0x3C, 0x0F
.db 0x3F, 0xF0, 0xFF, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0x3F, 0x3F, 0xFC, 0xFF, 0xF0, 0xF0, 0x0F
.db 0xFF, 0x03, 0xFC, 0x3F, 0x3F, 0xFF, 0x0F, 0xF0, 0xF0, 0x3F, 0xFF, 0x3F, 0x00, 0x3F, 0x00, 0x00
.db 0x00, 0x3F, 0xF3, 0x3F, 0x3F, 0x3F, 0xFF, 0x00, 0xFC, 0x3F, 0xF0, 0xFC, 0x3F, 0xF0, 0xF0, 0x3F
.db 0x3C, 0x00, 0xFF, 0xFF, 0x03, 0x3F, 0x0F, 0x3C, 0xF0, 0x00, 0xFF, 0x03, 0x03, 0xFC, 0x00, 0xFF
.db 0x00, 0x3F, 0x3F, 0x0F, 0x3F, 0x3F, 0x3F, 0x00, 0x0F, 0x3F, 0x3F, 0x3F, 0x0F, 0x3F, 0xF0, 0xF0
.db 0xFF, 0x3F, 0xF0, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x00, 0x03, 0x3F, 0x03, 0xFF, 0x0F, 0xF0, 0xF3
.db 0x3F, 0x3F, 0x3F, 0x3F, 0xF0, 0xF0, 0x00, 0x00, 0x3F, 0x00, 0x00, 0xF0, 0xF0, 0x03, 0x00, 0x00
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0x03, 0x0F, 0x0F, 0x03, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x0F, 0x00, 0x0F, 0x00
.db 0x00, 0x03, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x3F, 0xF0, 0xF0, 0x3C, 0xFF, 0x3F, 0x3C, 0x03, 0x0F, 0x0F, 0xFC, 0x3F, 0x00, 0x3C, 0x0F, 0xF0
.db 0x00, 0xFF, 0xFF, 0xFF, 0x03, 0xF3, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0x03, 0xFC, 0xF0, 0x03
.db 0x00, 0x00, 0x03, 0x00, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x03, 0x00, 0x0F, 0xF0, 0x3F
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xC0, 0xCC, 0xFC, 0x03, 0x03, 0x03, 0x0F, 0x0F, 0x03, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x0F, 0x00, 0x0F, 0x00, 0x0F, 0x0F, 0x00, 0x0F, 0x00
.db 0x00, 0x03, 0x0F, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x03, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00
; 40 Char / line font (double width) right half of each char
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xFC, 0xFC, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0
.db 0x00, 0x0C, 0xC0, 0x3C, 0xFF, 0xFC, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C
.db 0xF0, 0x00, 0xC0, 0xC0, 0xF0, 0xF0, 0xC0, 0xF0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0
.db 0xF0, 0x00, 0xF0, 0xF0, 0xC0, 0xFC, 0xFC, 0xF0, 0xF0, 0xC0, 0xFC, 0x3C, 0x00, 0x3C, 0x3C, 0xC0
.db 0xF0, 0xC0, 0xF0, 0xC0, 0xF0, 0xF0, 0xF0, 0x3C, 0x3C, 0xF0, 0xFC, 0xC0, 0x00, 0xC0, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0x00, 0x3C, 0x00
.db 0xC0, 0x00, 0xF0, 0xFC, 0xF0, 0x00, 0x00, 0x00, 0xFC, 0xF0, 0x00, 0xF0, 0xF0, 0x00, 0x3C, 0x00
.db 0xF0, 0x00, 0xFC, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x0F, 0xF0, 0xC0, 0xC0, 0xF0, 0xC0, 0xFC
.db 0xF0, 0xC0, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0xC0, 0x00, 0x00
.db 0x0C, 0x33, 0xCF, 0xC0, 0xC0, 0xC0, 0x3C, 0x00, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x3C, 0xC0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0xC0
.db 0x3C, 0x00, 0x00, 0x3C, 0xC0, 0x00, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0xC0, 0xF0, 0x00, 0x3C, 0xC0, 0xC0
.db 0x00, 0x00, 0x00, 0xC0, 0xFC, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0xFC, 0xC0, 0xF0, 0x00, 0x00, 0xFF, 0xF0, 0x0F, 0x3F, 0x3C, 0x0F, 0x0F, 0xCF
.db 0x00, 0xFC, 0xF0, 0x3C, 0xCF, 0x0F, 0x00, 0xF0, 0xF0, 0xC0, 0xC0, 0x00, 0x00, 0x30, 0xC0, 0xFF
.db 0x00, 0xC0, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0xF0
.db 0x3C, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0
.db 0x3C, 0xC0, 0x3C, 0x3C, 0xF0, 0x0C, 0x0C, 0x3C, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0xFC, 0x3C, 0xF0
.db 0x3C, 0xF0, 0x3C, 0xF0, 0x30, 0xF0, 0xF0, 0x3C, 0x3C, 0xF0, 0x3C, 0x00, 0x00, 0xC0, 0xC0, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xF0, 0x00
.db 0xF0, 0xF0, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xC0, 0x00
.db 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0xF0, 0x00, 0xF0, 0xC0, 0x00, 0xC0, 0xF0, 0xF0, 0xF0, 0xCF
.db 0x00, 0x00, 0xF0, 0xF0, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x3C, 0xC0, 0x0F, 0xF0
.db 0xC0, 0xCC, 0x3F, 0xC0, 0xC0, 0xC0, 0x3C, 0x00, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x3C, 0xC0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0xC0
.db 0x3C, 0x00, 0x00, 0x3C, 0xC0, 0x00, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x00, 0xC0, 0xF0, 0xFC, 0xF0, 0x00, 0x3C, 0x3C, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0xF0
.db 0xF0, 0x00, 0x00, 0x00, 0xCF, 0xC0, 0x00, 0x3C, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0xC0, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x33, 0xCF, 0xFC, 0xF0, 0xC0, 0xC0, 0xC0, 0x3F, 0x3C, 0xC3, 0xFF, 0x3C, 0xFF, 0xFF, 0xF0
.db 0xC0, 0xFC, 0xFC, 0x3C, 0xCF, 0xC0, 0x00, 0xFC, 0xFC, 0xC0, 0xF0, 0x00, 0x00, 0x3C, 0xF0, 0xFF
.db 0x00, 0xC0, 0xF0, 0xFC, 0x00, 0xF0, 0xC0, 0x00, 0x00, 0xC0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC0
.db 0xFC, 0x00, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0xF0
.db 0xFC, 0xF0, 0x3C, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0xF0, 0x00, 0xF0, 0xF0, 0x00, 0xFC, 0x3C, 0x3C
.db 0x3C, 0xF0, 0x3C, 0x00, 0x00, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0xC0, 0xF0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0xF0, 0xC0, 0x00, 0x3C, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0xC0, 0xC0
.db 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x3C, 0x3C, 0xF0, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xF0, 0x00
.db 0xF0, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xFC, 0x30, 0xC0, 0xF0, 0xC0
.db 0xC0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x3C, 0x3C
.db 0x0C, 0x33, 0xCF, 0xC0, 0xC0, 0xC0, 0x3C, 0x00, 0xC0, 0x3C, 0x3C, 0xFC, 0x3C, 0x3C, 0xC0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0xFF, 0x3C, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF
.db 0x3C, 0xFF, 0x00, 0x3C, 0xFF, 0xFF, 0x00, 0x3C, 0xFF, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x3C, 0xF0, 0xF0, 0xF0, 0x00, 0xFC, 0x3C, 0xF0, 0xC0, 0x3C, 0x3C, 0xC0, 0xFC, 0xFC, 0x00, 0xF0
.db 0x00, 0xF0, 0xC0, 0x00, 0xCF, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0xF0, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0xFC, 0xFC, 0xFC, 0xF0, 0xF0, 0x0F, 0x0C, 0xF3, 0xF3, 0x3C, 0x00, 0x0F, 0x3F
.db 0xFC, 0xFC, 0xC0, 0x3C, 0xCF, 0xF0, 0x00, 0xC0, 0xC0, 0xC0, 0xFC, 0xFC, 0x00, 0xFF, 0xFC, 0xFC
.db 0x00, 0x00, 0x00, 0xF0, 0xC0, 0xC0, 0x3C, 0x00, 0x00, 0xC0, 0xFF, 0xF0, 0x00, 0xF0, 0x00, 0x00
.db 0xFC, 0x00, 0xC0, 0xC0, 0xF0, 0xF0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xC0
.db 0xFC, 0xF0, 0xF0, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0xF0, 0x00, 0xF0, 0xC0, 0x00, 0xFC, 0xFC, 0x3C
.db 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0xF0, 0x3C, 0xC0, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x00
.db 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0xF0, 0x00, 0xFC, 0xF0, 0xF0
.db 0x3C, 0xF0, 0x3C, 0x00, 0x00, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0xF0, 0x00, 0xF0
.db 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0x00, 0x3C, 0xF0, 0xF0, 0x00, 0xC0, 0x00, 0x3C, 0xC0
.db 0x00, 0xF0, 0xFC, 0xC0, 0xC0, 0xC0, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0x00, 0x00, 0xF0, 0xCC, 0xF0
.db 0xF0, 0x00, 0xC0, 0xF0, 0xC0, 0xF0, 0xFC, 0xC0, 0x00, 0xF0, 0xF0, 0xFC, 0xCF, 0xC0, 0xF0, 0x0F
.db 0xC0, 0xCC, 0xFC, 0xC0, 0xC0, 0xC0, 0x3C, 0x00, 0xC0, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0xC0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3C, 0x00, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0x3C, 0xC0, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0xF0, 0xC0, 0x00, 0xF0, 0x00, 0xC0, 0x3C, 0xC0, 0xF0, 0xFC, 0x3C, 0xF0, 0xCF, 0xCF, 0xC0, 0xF0
.db 0xF0, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xF0, 0x00, 0xC0, 0xC0, 0x00, 0xF0, 0xF0, 0x00, 0xF0, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xF3, 0x0F, 0xF0, 0xF0, 0xFC, 0xFC, 0xF0, 0x0F, 0x0C, 0xF3, 0xF0, 0xF0, 0x00, 0x0F, 0x3F
.db 0xC0, 0xFC, 0xC0, 0x3C, 0xCF, 0xF0, 0xFC, 0xFC, 0xC0, 0xFC, 0xF0, 0x00, 0x00, 0x3C, 0xFF, 0xF0
.db 0x00, 0x00, 0x00, 0xFC, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0xC0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3C, 0x00, 0x00, 0xF0, 0xFC, 0xF0, 0xF0, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00
.db 0xFC, 0xF0, 0x3C, 0x00, 0x3C, 0xC0, 0xC0, 0xFC, 0xF0, 0x00, 0xF0, 0xF0, 0x0C, 0x3C, 0xFC, 0x3C
.db 0x00, 0xF0, 0xF0, 0xC0, 0x00, 0xF0, 0xF0, 0xFC, 0xC0, 0x00, 0x0C, 0x00, 0xF0, 0xC0, 0x00, 0x00
.db 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0xF0, 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0xC0, 0x00, 0xFC, 0xF0, 0xF0
.db 0x3C, 0xF0, 0x3C, 0xC0, 0x00, 0xF0, 0xF0, 0xFC, 0xC0, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x3C
.db 0xC0, 0xF0, 0xF0, 0xFC, 0xF0, 0xF0, 0xF0, 0x00, 0xFC, 0xF0, 0xF0, 0x00, 0xC0, 0x00, 0xFC, 0xF0
.db 0xC0, 0xFF, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x3C, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0xC0
.db 0xF0, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0x3F, 0xC0, 0x3C, 0x3C
.db 0x0C, 0x33, 0xCF, 0xC0, 0xC0, 0xC0, 0x3C, 0xFC, 0xC0, 0x3C, 0x3C, 0x3C, 0xFC, 0xFC, 0xC0, 0xC0
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x3F, 0xFF, 0x3F, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0xC0, 0xF0, 0x00, 0xF0, 0x00, 0xC0, 0x3C, 0xC0, 0xF0, 0x3C, 0xF0, 0xF0, 0xCF, 0xCF, 0x00, 0xF0
.db 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0x00, 0x3C, 0x00, 0xC0, 0xC0, 0xF0, 0xF0, 0xC0, 0xF0, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC3, 0x3F, 0xC0, 0xC0, 0x3C, 0xF0, 0xC0, 0x3F, 0x3C, 0xC3, 0xF0, 0xC0, 0x00, 0x3F, 0xF0
.db 0x00, 0xFC, 0xFC, 0x00, 0xCF, 0xC0, 0xFC, 0xF0, 0xC0, 0xF0, 0xC0, 0x00, 0xFC, 0x30, 0xFF, 0xC0
.db 0x00, 0x00, 0x00, 0xF0, 0xC0, 0x3C, 0xF0, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3C, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00
.db 0x00, 0xF0, 0x3C, 0x3C, 0xF0, 0x0C, 0x00, 0x3C, 0xF0, 0x00, 0xF0, 0x3C, 0x3C, 0x3C, 0x3C, 0xF0
.db 0x00, 0xC0, 0x3C, 0xF0, 0x00, 0xF0, 0xC0, 0xFC, 0xF0, 0x00, 0x3C, 0x00, 0x3C, 0xC0, 0x00, 0x00
.db 0x00, 0xF0, 0x3C, 0xF0, 0xF0, 0x00, 0x00, 0xF0, 0x3C, 0x00, 0xF0, 0xF0, 0x00, 0x3C, 0xF0, 0xF0
.db 0xF0, 0xF0, 0x00, 0xF0, 0x30, 0xF0, 0xC0, 0xFC, 0xF0, 0xF0, 0x30, 0x00, 0xC0, 0x00, 0x00, 0x3C
.db 0xC0, 0xF0, 0x00, 0x3C, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x3C, 0xF0
.db 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xFC, 0x3C, 0xF0, 0xFF, 0xC0
.db 0xF0, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xFC, 0xF0, 0xF0, 0x00, 0xF0, 0x3C, 0xFF, 0xC0, 0x0F, 0xF0
.db 0xC0, 0xCC, 0x3F, 0xC0, 0xC0, 0xC0, 0x3C, 0x3C, 0xC0, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x00
.db 0x00, 0xC0, 0x3C, 0x00, 0x00, 0xC0, 0x3C, 0x3C, 0xC0, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0xF0, 0xC0, 0x00, 0xF0, 0xF0, 0xC0, 0xF0, 0xC0, 0xC0, 0xF0, 0xF0, 0xF0, 0xFC, 0xFC, 0x00, 0xF0
.db 0xF0, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xF0, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x0F, 0xF0, 0xFC, 0x00, 0x3C, 0xCF
.db 0x00, 0x0C, 0xF0, 0x3C, 0xCF, 0xF0, 0xFC, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0xF0, 0x00, 0x3C, 0x3C, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xF0, 0xC0, 0xFC, 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00
.db 0xC0, 0xF0, 0xF0, 0xF0, 0xC0, 0xFC, 0x00, 0xFC, 0xF0, 0xC0, 0xC0, 0x3C, 0xFC, 0x3C, 0x3C, 0xC0
.db 0x00, 0xF0, 0x3C, 0xC0, 0xC0, 0xF0, 0x00, 0x3C, 0x3C, 0xC0, 0xFC, 0xC0, 0x0C, 0xC0, 0x00, 0x00
.db 0x00, 0x3C, 0xF0, 0xC0, 0x3C, 0xC0, 0x00, 0xF0, 0x3C, 0xC0, 0xF0, 0x3C, 0xC0, 0x3C, 0xF0, 0xC0
.db 0x00, 0xF0, 0x00, 0xC0, 0xC0, 0x3C, 0x00, 0xF0, 0x3C, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0x00, 0xFC
.db 0xF0, 0xFC, 0xC0, 0xFF, 0xFC, 0xFC, 0xFC, 0xF0, 0xF0, 0xC0, 0xC0, 0xC0, 0xF0, 0xC0, 0x3C, 0xF0
.db 0xF0, 0xFF, 0xFC, 0xC0, 0xC0, 0xC0, 0xFC, 0xFC, 0xF0, 0xC0, 0xC0, 0xC0, 0xF0, 0x00, 0x3C, 0xC0
.db 0xFC, 0xC0, 0xC0, 0xFC, 0xF0, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xF0, 0xFF, 0xC0, 0x00, 0x00
.db 0x0C, 0x33, 0xCF, 0xC0, 0xC0, 0xC0, 0x3C, 0x3C, 0xC0, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x00
.db 0x00, 0xC0, 0x3C, 0x00, 0x00, 0xC0, 0x3C, 0x3C, 0xC0, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0x3C, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0xFC, 0xC0, 0x00, 0x00, 0xC0, 0xF0
.db 0x00, 0xF0, 0xF0, 0xF0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xFF, 0x00, 0xFF, 0xC0, 0xC0, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x3F, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0F, 0x00, 0x00, 0x00
.db 0xC0, 0xCC, 0xFC, 0xC0, 0xC0, 0xC0, 0x3C, 0x3C, 0xC0, 0x3C, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xC0, 0xC0, 0x3C, 0x00, 0x3C, 0x00, 0x3C, 0x3C, 0x00, 0x3C, 0x00
.db 0x00, 0xC0, 0x3C, 0x00, 0x00, 0xC0, 0x3C, 0x3C, 0xC0, 0x00, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00

View File

@ -0,0 +1,159 @@
;******************************************************
; COMPLETE CGA NORMAL FONT
;
; Extracted by Grant Searle 2013
;******************************************************
.CSEG
.ORG 0x1000
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x7E, 0x7E, 0x6C, 0x10, 0x38, 0x10, 0x00, 0xFF, 0x00, 0xFF, 0x0F, 0x3C, 0x3F, 0x3F, 0x18
.db 0x80, 0x02, 0x18, 0x24, 0x7F, 0x3E, 0x00, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x10, 0x24, 0x24, 0x18, 0x00, 0x30, 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3C, 0x10, 0x3C, 0x3C, 0x08, 0x7E, 0x1C, 0x7E, 0x3C, 0x3C, 0x00, 0x00, 0x08, 0x00, 0x10, 0x3C
.db 0x3C, 0x18, 0x7C, 0x1C, 0x78, 0x7E, 0x7E, 0x1C, 0x42, 0x38, 0x0E, 0x62, 0x70, 0x63, 0x62, 0x18
.db 0x7C, 0x3C, 0x7C, 0x3C, 0x7F, 0x42, 0x41, 0x41, 0x41, 0x41, 0x7F, 0x78, 0x80, 0x78, 0x10, 0x00
.db 0x10, 0x00, 0x60, 0x00, 0x06, 0x00, 0x0C, 0x00, 0x60, 0x10, 0x02, 0x60, 0x30, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x10, 0x30, 0x32, 0x00
.db 0x3C, 0x00, 0x0C, 0x3C, 0x42, 0x30, 0x10, 0x00, 0x3C, 0x42, 0x30, 0x24, 0x7C, 0x30, 0x42, 0x18
.db 0x0C, 0x00, 0x1F, 0x18, 0x00, 0x20, 0x18, 0x20, 0x00, 0x42, 0x42, 0x08, 0x18, 0x44, 0xF8, 0x1C
.db 0x0C, 0x0C, 0x04, 0x00, 0x32, 0x34, 0x3C, 0x38, 0x10, 0x00, 0x00, 0x42, 0x42, 0x00, 0x00, 0x00
.db 0x22, 0x55, 0xDB, 0x10, 0x10, 0x10, 0x14, 0x00, 0x00, 0x14, 0x14, 0x00, 0x14, 0x14, 0x10, 0x00
.db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x14, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x10
.db 0x14, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x14, 0x10, 0x10, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7C, 0x18, 0x18, 0x1C, 0x00, 0x02, 0x0C, 0x3C
.db 0x00, 0x10, 0x10, 0x08, 0x0C, 0x10, 0x18, 0x00, 0x30, 0x00, 0x00, 0x0F, 0x78, 0x30, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0xFE, 0x38, 0x7C, 0x10, 0x00, 0xFF, 0x3C, 0xC3, 0x03, 0x42, 0x21, 0x21, 0xDB
.db 0xE0, 0x0E, 0x3C, 0x24, 0x92, 0x63, 0x00, 0x3C, 0x38, 0x10, 0x18, 0x30, 0x00, 0x24, 0x10, 0xFE
.db 0x00, 0x38, 0x24, 0x24, 0x3E, 0x62, 0x48, 0x10, 0x20, 0x10, 0x44, 0x10, 0x00, 0x00, 0x00, 0x02
.db 0x42, 0x30, 0x42, 0x42, 0x18, 0x40, 0x20, 0x42, 0x42, 0x42, 0x10, 0x10, 0x10, 0x00, 0x08, 0x42
.db 0x42, 0x24, 0x22, 0x22, 0x24, 0x22, 0x22, 0x22, 0x42, 0x10, 0x04, 0x24, 0x20, 0x55, 0x52, 0x24
.db 0x22, 0x42, 0x22, 0x42, 0x49, 0x42, 0x41, 0x41, 0x22, 0x22, 0x42, 0x40, 0x40, 0x08, 0x28, 0x00
.db 0x10, 0x00, 0x20, 0x00, 0x02, 0x00, 0x12, 0x00, 0x20, 0x00, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x08, 0x4C, 0x08
.db 0x42, 0x44, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x82, 0x00, 0x18, 0x18
.db 0x00, 0x00, 0x24, 0x24, 0x42, 0x10, 0x24, 0x10, 0x42, 0x18, 0x00, 0x08, 0x24, 0x28, 0x4C, 0x12
.db 0x00, 0x00, 0x08, 0x04, 0x4C, 0x4C, 0x44, 0x44, 0x00, 0x00, 0x00, 0xC4, 0xC4, 0x10, 0x12, 0x48
.db 0x88, 0xAA, 0x77, 0x10, 0x10, 0x10, 0x14, 0x00, 0x00, 0x14, 0x14, 0x00, 0x14, 0x14, 0x10, 0x00
.db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x14, 0x14, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x10
.db 0x14, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x14, 0x10, 0x10, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x00, 0x3C, 0x7E, 0x3F, 0x42, 0x00, 0x44, 0x33, 0x10, 0x24, 0x24, 0x20, 0x62, 0x04, 0x10, 0x42
.db 0x7E, 0x10, 0x08, 0x10, 0x12, 0x10, 0x18, 0x32, 0x48, 0x00, 0x00, 0x08, 0x44, 0x48, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xA5, 0xDB, 0xFE, 0x7C, 0x38, 0x38, 0x18, 0xE7, 0x66, 0x99, 0x05, 0x42, 0x3F, 0x3F, 0x3C
.db 0xF8, 0x3E, 0x7E, 0x24, 0x92, 0x38, 0x00, 0x7E, 0x7C, 0x10, 0x0C, 0x60, 0x40, 0x66, 0x38, 0xFE
.db 0x00, 0x38, 0x24, 0x7E, 0x40, 0x64, 0x30, 0x20, 0x40, 0x08, 0x38, 0x10, 0x00, 0x00, 0x00, 0x04
.db 0x46, 0x50, 0x02, 0x02, 0x28, 0x7C, 0x40, 0x04, 0x42, 0x42, 0x10, 0x10, 0x20, 0x7E, 0x04, 0x02
.db 0x5E, 0x42, 0x22, 0x40, 0x22, 0x28, 0x28, 0x40, 0x42, 0x10, 0x04, 0x28, 0x20, 0x49, 0x4A, 0x42
.db 0x22, 0x42, 0x22, 0x40, 0x08, 0x42, 0x41, 0x41, 0x14, 0x14, 0x04, 0x40, 0x20, 0x08, 0x44, 0x00
.db 0x08, 0x3C, 0x20, 0x3C, 0x02, 0x3C, 0x10, 0x3D, 0x2C, 0x30, 0x06, 0x24, 0x10, 0x76, 0x5C, 0x3C
.db 0x6C, 0x36, 0x6C, 0x3E, 0x7C, 0x42, 0x41, 0x41, 0x44, 0x42, 0x7C, 0x10, 0x10, 0x08, 0x00, 0x14
.db 0x40, 0x00, 0x3C, 0x38, 0x38, 0x38, 0x38, 0x3C, 0x3C, 0x3C, 0x3C, 0x18, 0x30, 0x18, 0x24, 0x00
.db 0x7C, 0x33, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x42, 0x3E, 0x20, 0x7C, 0x78, 0x10
.db 0x38, 0x18, 0x00, 0x08, 0x00, 0x00, 0x44, 0x44, 0x10, 0x00, 0x00, 0x48, 0x4A, 0x00, 0x24, 0x24
.db 0x22, 0x55, 0xDB, 0x10, 0x10, 0xF0, 0x14, 0x00, 0xF0, 0xF4, 0x14, 0xFC, 0xF4, 0x14, 0xF0, 0x00
.db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x1F, 0x14, 0x17, 0x1F, 0xF7, 0xFF, 0x17, 0xFF, 0xF7, 0xFF
.db 0x14, 0xFF, 0x00, 0x14, 0x1F, 0x1F, 0x00, 0x14, 0xFF, 0x10, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x31, 0x42, 0x42, 0x54, 0x20, 0x3E, 0x44, 0x4C, 0x38, 0x42, 0x42, 0x18, 0x95, 0x3C, 0x20, 0x42
.db 0x00, 0x7C, 0x04, 0x20, 0x12, 0x10, 0x00, 0x4C, 0x48, 0x00, 0x00, 0x08, 0x44, 0x10, 0x3C, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0xFE, 0xFE, 0xFE, 0x7C, 0x3C, 0xC3, 0x42, 0xBD, 0x7D, 0x42, 0x20, 0x21, 0xE7
.db 0xFE, 0xFE, 0x18, 0x24, 0x72, 0x44, 0x00, 0x18, 0x54, 0x54, 0xFE, 0xFE, 0x40, 0xFF, 0x7C, 0x7C
.db 0x00, 0x10, 0x00, 0x24, 0x3C, 0x08, 0x56, 0x00, 0x40, 0x08, 0xFE, 0x7C, 0x00, 0x7E, 0x00, 0x08
.db 0x4A, 0x10, 0x0C, 0x1C, 0x48, 0x02, 0x7C, 0x08, 0x3C, 0x3E, 0x00, 0x00, 0x40, 0x00, 0x02, 0x04
.db 0x52, 0x42, 0x3C, 0x40, 0x22, 0x38, 0x38, 0x40, 0x7E, 0x10, 0x04, 0x30, 0x20, 0x41, 0x46, 0x42
.db 0x3C, 0x42, 0x3C, 0x3C, 0x08, 0x42, 0x41, 0x49, 0x08, 0x08, 0x08, 0x40, 0x10, 0x08, 0x82, 0x00
.db 0x00, 0x02, 0x2E, 0x42, 0x3A, 0x42, 0x38, 0x42, 0x32, 0x10, 0x02, 0x28, 0x10, 0x49, 0x62, 0x42
.db 0x32, 0x4C, 0x32, 0x40, 0x10, 0x42, 0x41, 0x49, 0x28, 0x42, 0x08, 0x60, 0x00, 0x06, 0x00, 0x22
.db 0x42, 0x44, 0x42, 0x04, 0x04, 0x04, 0x04, 0x40, 0x42, 0x42, 0x42, 0x08, 0x10, 0x08, 0x42, 0x3C
.db 0x20, 0x0C, 0x7F, 0x3C, 0x3C, 0x3C, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, 0x70, 0x10, 0x44, 0x7C
.db 0x04, 0x08, 0x3C, 0x42, 0x7C, 0x62, 0x3E, 0x38, 0x20, 0x7E, 0x7E, 0xF6, 0xF6, 0x10, 0x48, 0x12
.db 0x88, 0xAA, 0xEE, 0x10, 0x10, 0x10, 0x14, 0x00, 0x10, 0x04, 0x14, 0x04, 0x04, 0x14, 0x10, 0x00
.db 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x14, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00
.db 0x14, 0x00, 0x00, 0x14, 0x10, 0x10, 0x00, 0x14, 0x10, 0x10, 0x00, 0xFF, 0x00, 0xF0, 0x0F, 0xFF
.db 0x4A, 0x7C, 0x40, 0x14, 0x18, 0x48, 0x44, 0x08, 0x44, 0x7E, 0x42, 0x3C, 0x89, 0x4A, 0x3C, 0x42
.db 0x7E, 0x10, 0x08, 0x10, 0x10, 0x10, 0x7E, 0x00, 0x30, 0x18, 0x00, 0x08, 0x44, 0x20, 0x3C, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xBD, 0xC3, 0x7C, 0x7C, 0xFE, 0xFE, 0x3C, 0xC3, 0x42, 0xBD, 0x84, 0x3C, 0x20, 0x23, 0xE7
.db 0xF8, 0x3E, 0x18, 0x24, 0x12, 0x44, 0x7E, 0x7E, 0x10, 0x7C, 0x0C, 0x60, 0x40, 0x66, 0xFE, 0x38
.db 0x00, 0x10, 0x00, 0x7E, 0x02, 0x10, 0x88, 0x00, 0x40, 0x08, 0x38, 0x10, 0x00, 0x00, 0x00, 0x10
.db 0x52, 0x10, 0x30, 0x02, 0xFE, 0x02, 0x42, 0x10, 0x42, 0x02, 0x00, 0x00, 0x20, 0x00, 0x04, 0x08
.db 0x5E, 0x7E, 0x22, 0x40, 0x22, 0x28, 0x28, 0x4E, 0x42, 0x10, 0x44, 0x28, 0x20, 0x41, 0x42, 0x42
.db 0x20, 0x4A, 0x28, 0x02, 0x08, 0x42, 0x22, 0x49, 0x14, 0x08, 0x10, 0x40, 0x08, 0x08, 0x00, 0x00
.db 0x00, 0x3E, 0x31, 0x40, 0x46, 0x7E, 0x10, 0x42, 0x22, 0x10, 0x02, 0x30, 0x10, 0x49, 0x42, 0x42
.db 0x32, 0x4C, 0x22, 0x3C, 0x10, 0x42, 0x22, 0x49, 0x10, 0x42, 0x10, 0x10, 0x10, 0x08, 0x00, 0x41
.db 0x3C, 0x44, 0x7E, 0x3C, 0x3C, 0x3C, 0x3C, 0x40, 0x7E, 0x7E, 0x7E, 0x08, 0x10, 0x08, 0x7E, 0x42
.db 0x38, 0x3F, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x40, 0x20, 0x7C, 0x4F, 0x10
.db 0x3C, 0x08, 0x42, 0x42, 0x42, 0x52, 0x00, 0x00, 0x40, 0x40, 0x02, 0x29, 0x2A, 0x10, 0x24, 0x24
.db 0x22, 0x55, 0xDB, 0x10, 0xF0, 0xF0, 0xF4, 0xFC, 0xF0, 0xF4, 0x14, 0xF4, 0xFC, 0xFC, 0xF0, 0xF0
.db 0x1F, 0xFF, 0xFF, 0x1F, 0xFF, 0xFF, 0x1F, 0x17, 0x1F, 0x17, 0xFF, 0xF7, 0x17, 0xFF, 0xF7, 0xFF
.db 0xFF, 0xFF, 0xFF, 0x1F, 0x1F, 0x1F, 0x1F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x44, 0x42, 0x40, 0x14, 0x20, 0x48, 0x7A, 0x08, 0x44, 0x42, 0x24, 0x42, 0x95, 0x52, 0x20, 0x42
.db 0x00, 0x10, 0x10, 0x08, 0x10, 0x10, 0x00, 0x32, 0x00, 0x18, 0x18, 0x08, 0x44, 0x78, 0x3C, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x99, 0xE7, 0x38, 0x38, 0xD6, 0x7C, 0x18, 0xE7, 0x66, 0x99, 0x84, 0x18, 0x60, 0x67, 0x3C
.db 0xE0, 0x0E, 0x7E, 0x00, 0x12, 0x38, 0x7E, 0x3C, 0x10, 0x38, 0x18, 0x30, 0x7E, 0x24, 0xFE, 0x10
.db 0x00, 0x00, 0x00, 0x24, 0x7C, 0x26, 0x88, 0x00, 0x20, 0x10, 0x44, 0x10, 0x10, 0x00, 0x10, 0x20
.db 0x62, 0x10, 0x42, 0x42, 0x08, 0x42, 0x42, 0x10, 0x42, 0x04, 0x10, 0x10, 0x10, 0x7E, 0x08, 0x00
.db 0x40, 0x42, 0x22, 0x22, 0x24, 0x22, 0x20, 0x22, 0x42, 0x10, 0x44, 0x24, 0x22, 0x41, 0x42, 0x24
.db 0x20, 0x3C, 0x24, 0x42, 0x08, 0x42, 0x14, 0x49, 0x22, 0x08, 0x21, 0x40, 0x04, 0x08, 0x00, 0x00
.db 0x00, 0x42, 0x31, 0x42, 0x46, 0x40, 0x10, 0x3E, 0x22, 0x10, 0x42, 0x28, 0x10, 0x49, 0x42, 0x42
.db 0x2C, 0x34, 0x20, 0x02, 0x12, 0x46, 0x14, 0x49, 0x28, 0x3E, 0x20, 0x10, 0x10, 0x08, 0x00, 0x41
.db 0x0C, 0x44, 0x40, 0x44, 0x44, 0x44, 0x44, 0x3C, 0x40, 0x40, 0x40, 0x08, 0x10, 0x08, 0x42, 0x7E
.db 0x20, 0x44, 0x44, 0x42, 0x42, 0x42, 0x42, 0x42, 0x3E, 0x24, 0x42, 0x3E, 0x42, 0x10, 0x44, 0x10
.db 0x44, 0x08, 0x42, 0x42, 0x42, 0x4A, 0x7E, 0x7C, 0x42, 0x40, 0x02, 0x43, 0x5F, 0x10, 0x12, 0x48
.db 0x88, 0xAA, 0x77, 0x10, 0x10, 0x10, 0x14, 0x14, 0x10, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x10
.db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x14, 0x00, 0x14, 0x00, 0x14, 0x14, 0x00, 0x14, 0x00
.db 0x00, 0x10, 0x14, 0x00, 0x00, 0x10, 0x14, 0x14, 0x10, 0x00, 0x10, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x4A, 0x7C, 0x40, 0x14, 0x42, 0x48, 0x40, 0x08, 0x38, 0x24, 0x24, 0x42, 0x62, 0x3C, 0x10, 0x42
.db 0x7E, 0x00, 0x00, 0x00, 0x10, 0x90, 0x18, 0x4C, 0x00, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x3C, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x81, 0xFF, 0x10, 0x10, 0x10, 0x10, 0x00, 0xFF, 0x3C, 0xC3, 0x84, 0x7E, 0xE0, 0xE6, 0xDB
.db 0x80, 0x02, 0x3C, 0x24, 0x12, 0xCC, 0x7E, 0x18, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x10, 0x00, 0x24, 0x18, 0x46, 0x76, 0x00, 0x10, 0x20, 0x00, 0x00, 0x10, 0x00, 0x10, 0x40
.db 0x3C, 0x7C, 0x7E, 0x3C, 0x1C, 0x3C, 0x3C, 0x10, 0x3C, 0x38, 0x10, 0x10, 0x08, 0x00, 0x10, 0x08
.db 0x3C, 0x42, 0x7C, 0x1C, 0x78, 0x7E, 0x70, 0x1E, 0x42, 0x38, 0x38, 0x63, 0x7E, 0x41, 0x42, 0x18
.db 0x70, 0x03, 0x72, 0x3C, 0x1C, 0x3C, 0x08, 0x36, 0x41, 0x1C, 0x7F, 0x78, 0x02, 0x78, 0x00, 0x00
.db 0x00, 0x3F, 0x2E, 0x3C, 0x3B, 0x3C, 0x38, 0x02, 0x62, 0x38, 0x42, 0x26, 0x38, 0x49, 0x42, 0x3C
.db 0x20, 0x04, 0x70, 0x7C, 0x0C, 0x3A, 0x08, 0x36, 0x44, 0x02, 0x7C, 0x0C, 0x10, 0x30, 0x00, 0x7F
.db 0x02, 0x3E, 0x3C, 0x3E, 0x3E, 0x3E, 0x3E, 0x06, 0x3C, 0x3C, 0x3C, 0x1C, 0x38, 0x1C, 0x42, 0x42
.db 0x7C, 0x3B, 0x47, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x02, 0x18, 0x3C, 0x08, 0x7C, 0x10, 0x45, 0x90
.db 0x3E, 0x1C, 0x3C, 0x3C, 0x42, 0x46, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x8C, 0x82, 0x10, 0x00, 0x00
.db 0x22, 0x55, 0xDB, 0x10, 0x10, 0x10, 0x14, 0x14, 0x10, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x10
.db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x14, 0x00, 0x14, 0x00, 0x14, 0x14, 0x00, 0x14, 0x00
.db 0x00, 0x10, 0x14, 0x00, 0x00, 0x10, 0x14, 0x14, 0x10, 0x00, 0x10, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x31, 0x40, 0x40, 0x14, 0x7E, 0x30, 0x40, 0x08, 0x10, 0x18, 0x66, 0x3C, 0x00, 0x40, 0x0C, 0x42
.db 0x00, 0x7C, 0x7E, 0x7E, 0x10, 0x90, 0x18, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x38, 0x38, 0x00, 0xFF, 0x00, 0xFF, 0x78, 0x18, 0xC0, 0xC0, 0x18
.db 0x00, 0x00, 0x18, 0x00, 0x00, 0x78, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x70, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x08, 0x00, 0x00, 0xE6, 0x60
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x02, 0x00, 0x00, 0x00
.db 0x88, 0xAA, 0xEE, 0x10, 0x10, 0x10, 0x14, 0x14, 0x10, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x10
.db 0x00, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x14, 0x00, 0x14, 0x00, 0x14, 0x14, 0x00, 0x14, 0x00
.db 0x00, 0x10, 0x14, 0x00, 0x00, 0x10, 0x14, 0x14, 0x10, 0x00, 0x10, 0xFF, 0xFF, 0xF0, 0x0F, 0x00
.db 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x10, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00

View File

@ -0,0 +1,315 @@
;******************************************************
; COMPLETE CGA NORMAL FONT - WIDE VERSION
;
; Extracted by Grant Searle 2013
;******************************************************
.CSEG
.ORG 0x1800
; 40 Char / line font (double width) left half of each char
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x3F, 0x3F, 0x3C, 0x03, 0x0F, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x0F, 0x0F, 0x0F, 0x03
.db 0xC0, 0x00, 0x03, 0x0C, 0x3F, 0x0F, 0x00, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x03, 0x0C, 0x0C, 0x03, 0x00, 0x0F, 0x03, 0x03, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x0F, 0x03, 0x0F, 0x0F, 0x00, 0x3F, 0x03, 0x3F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F
.db 0x0F, 0x03, 0x3F, 0x03, 0x3F, 0x3F, 0x3F, 0x03, 0x30, 0x0F, 0x00, 0x3C, 0x3F, 0x3C, 0x3C, 0x03
.db 0x3F, 0x0F, 0x3F, 0x0F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0xC0, 0x3F, 0x03, 0x00
.db 0x03, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x03, 0x00, 0x3C, 0x0F, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x0F, 0x00
.db 0x0F, 0x00, 0x00, 0x0F, 0x30, 0x0F, 0x03, 0x00, 0x0F, 0x30, 0x0F, 0x0C, 0x3F, 0x0F, 0x30, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x0C, 0x03, 0x0C, 0x00, 0x30, 0x30, 0x00, 0x03, 0x30, 0xFF, 0x03
.db 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x03, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03
.db 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x3F, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x0F
.db 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x3F, 0x0F, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0xFF, 0x0F, 0x3F, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0x00, 0x30, 0x0C, 0x0C, 0xF3
.db 0xFC, 0x00, 0x0F, 0x0C, 0xC3, 0x3C, 0x00, 0x0F, 0x0F, 0x03, 0x03, 0x0F, 0x00, 0x0C, 0x03, 0xFF
.db 0x00, 0x0F, 0x0C, 0x0C, 0x0F, 0x3C, 0x30, 0x03, 0x0C, 0x03, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00
.db 0x30, 0x0F, 0x30, 0x30, 0x03, 0x30, 0x0C, 0x30, 0x30, 0x30, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30
.db 0x30, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x30, 0x03, 0x00, 0x0C, 0x0C, 0x33, 0x33, 0x0C
.db 0x0C, 0x30, 0x0C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0C, 0x0C, 0x30, 0x30, 0x30, 0x00, 0x0C, 0x00
.db 0x03, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x00, 0x0C, 0x03, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x30, 0x00
.db 0x30, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x03, 0x03
.db 0x00, 0x00, 0x0C, 0x0C, 0x30, 0x03, 0x0C, 0x03, 0x30, 0x03, 0x00, 0x00, 0x0C, 0x0C, 0x30, 0x03
.db 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x03, 0x03, 0x30
.db 0xC0, 0xCC, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03
.db 0x03, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x00, 0x0F, 0x3F, 0x0F, 0x30, 0x00, 0x30, 0x0F, 0x03, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x03, 0x30
.db 0x3F, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x0F, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xCC, 0xF3, 0xFF, 0x3F, 0x0F, 0x0F, 0x03, 0xFC, 0x3C, 0xC3, 0x00, 0x30, 0x0F, 0x0F, 0x0F
.db 0xFF, 0x0F, 0x3F, 0x0C, 0xC3, 0x0F, 0x00, 0x3F, 0x3F, 0x03, 0x00, 0x3C, 0x30, 0x3C, 0x0F, 0xFF
.db 0x00, 0x0F, 0x0C, 0x3F, 0x30, 0x3C, 0x0F, 0x0C, 0x30, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00
.db 0x30, 0x33, 0x00, 0x00, 0x0C, 0x3F, 0x30, 0x00, 0x30, 0x30, 0x03, 0x03, 0x0C, 0x3F, 0x00, 0x00
.db 0x33, 0x30, 0x0C, 0x30, 0x0C, 0x0C, 0x0C, 0x30, 0x30, 0x03, 0x00, 0x0C, 0x0C, 0x30, 0x30, 0x30
.db 0x0C, 0x30, 0x0C, 0x30, 0x00, 0x30, 0x30, 0x30, 0x03, 0x03, 0x00, 0x30, 0x0C, 0x00, 0x30, 0x00
.db 0x00, 0x0F, 0x0C, 0x0F, 0x00, 0x0F, 0x03, 0x0F, 0x0C, 0x0F, 0x00, 0x0C, 0x03, 0x3F, 0x33, 0x0F
.db 0x3C, 0x0F, 0x3C, 0x0F, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x03, 0x03, 0x00, 0x00, 0x03
.db 0x30, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x03, 0x0F, 0x03, 0x0C, 0x00
.db 0x3F, 0x0F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30, 0x0F, 0x0C, 0x3F, 0x3F, 0x03
.db 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x03, 0x00, 0x00, 0x30, 0x30, 0x00, 0x0C, 0x0C
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0xFF, 0x03, 0x00, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x03, 0xFF, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF
.db 0x03, 0xFF, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0xFF, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x0F, 0x30, 0x30, 0x33, 0x0C, 0x0F, 0x30, 0x30, 0x0F, 0x30, 0x30, 0x03, 0xC3, 0x0F, 0x0C, 0x30
.db 0x00, 0x3F, 0x00, 0x0C, 0x03, 0x03, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x03, 0x0F, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x0F, 0xF0, 0x30, 0xCF, 0x3F, 0x30, 0x0C, 0x0C, 0xFC
.db 0xFF, 0xFF, 0x03, 0x0C, 0x3F, 0x30, 0x00, 0x03, 0x33, 0x33, 0xFF, 0xFF, 0x30, 0xFF, 0x3F, 0x3F
.db 0x00, 0x03, 0x00, 0x0C, 0x0F, 0x00, 0x33, 0x00, 0x30, 0x00, 0xFF, 0x3F, 0x00, 0x3F, 0x00, 0x00
.db 0x30, 0x03, 0x00, 0x03, 0x30, 0x00, 0x3F, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00
.db 0x33, 0x30, 0x0F, 0x30, 0x0C, 0x0F, 0x0F, 0x30, 0x3F, 0x03, 0x00, 0x0F, 0x0C, 0x30, 0x30, 0x30
.db 0x0F, 0x30, 0x0F, 0x0F, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x03, 0x00, 0xC0, 0x00
.db 0x00, 0x00, 0x0C, 0x30, 0x0F, 0x30, 0x0F, 0x30, 0x0F, 0x03, 0x00, 0x0C, 0x03, 0x30, 0x3C, 0x30
.db 0x0F, 0x30, 0x0F, 0x30, 0x03, 0x30, 0x30, 0x30, 0x0C, 0x30, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x0C
.db 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x00, 0x03, 0x00, 0x30, 0x0F
.db 0x0C, 0x00, 0x3F, 0x0F, 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x03, 0x30, 0x3F
.db 0x00, 0x00, 0x0F, 0x30, 0x3F, 0x3C, 0x0F, 0x0F, 0x0C, 0x3F, 0x3F, 0xFF, 0xFF, 0x03, 0x30, 0x03
.db 0xC0, 0xCC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x03, 0x03, 0x00
.db 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00
.db 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0xFF
.db 0x30, 0x3F, 0x30, 0x03, 0x03, 0x30, 0x30, 0x00, 0x30, 0x3F, 0x30, 0x0F, 0xC0, 0x30, 0x0F, 0x30
.db 0x3F, 0x03, 0x00, 0x03, 0x03, 0x03, 0x3F, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x30, 0x0C, 0x0F, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xCF, 0xF0, 0x3F, 0x3F, 0xFF, 0xFF, 0x0F, 0xF0, 0x30, 0xCF, 0xC0, 0x0F, 0x0C, 0x0C, 0xFC
.db 0xFF, 0x0F, 0x03, 0x0C, 0x03, 0x30, 0x3F, 0x3F, 0x03, 0x3F, 0x00, 0x3C, 0x30, 0x3C, 0xFF, 0x0F
.db 0x00, 0x03, 0x00, 0x3F, 0x00, 0x03, 0xC0, 0x00, 0x30, 0x00, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x03
.db 0x33, 0x03, 0x0F, 0x00, 0xFF, 0x00, 0x30, 0x03, 0x30, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00
.db 0x33, 0x3F, 0x0C, 0x30, 0x0C, 0x0C, 0x0C, 0x30, 0x30, 0x03, 0x30, 0x0C, 0x0C, 0x30, 0x30, 0x30
.db 0x0C, 0x30, 0x0C, 0x00, 0x00, 0x30, 0x0C, 0x30, 0x03, 0x00, 0x03, 0x30, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x0F, 0x0F, 0x30, 0x30, 0x3F, 0x03, 0x30, 0x0C, 0x03, 0x00, 0x0F, 0x03, 0x30, 0x30, 0x30
.db 0x0F, 0x30, 0x0C, 0x0F, 0x03, 0x30, 0x0C, 0x30, 0x03, 0x30, 0x03, 0x03, 0x03, 0x00, 0x00, 0x30
.db 0x0F, 0x30, 0x3F, 0x0F, 0x0F, 0x0F, 0x0F, 0x30, 0x3F, 0x3F, 0x3F, 0x00, 0x03, 0x00, 0x3F, 0x30
.db 0x0F, 0x0F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0C, 0x3F, 0x30, 0x03
.db 0x0F, 0x00, 0x30, 0x30, 0x30, 0x33, 0x00, 0x00, 0x30, 0x30, 0x00, 0x0C, 0x0C, 0x03, 0x0C, 0x0C
.db 0x0C, 0x33, 0xF3, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
.db 0x03, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF
.db 0xFF, 0xFF, 0xFF, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x30, 0x30, 0x30, 0x03, 0x0C, 0x30, 0x3F, 0x00, 0x30, 0x30, 0x0C, 0x30, 0xC3, 0x33, 0x0C, 0x30
.db 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x0F, 0x00, 0x03, 0x03, 0x00, 0x30, 0x3F, 0x0F, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC3, 0xFC, 0x0F, 0x0F, 0xF3, 0x3F, 0x03, 0xFC, 0x3C, 0xC3, 0xC0, 0x03, 0x3C, 0x3C, 0x0F
.db 0xFC, 0x00, 0x3F, 0x00, 0x03, 0x0F, 0x3F, 0x0F, 0x03, 0x0F, 0x03, 0x0F, 0x3F, 0x0C, 0xFF, 0x03
.db 0x00, 0x00, 0x00, 0x0C, 0x3F, 0x0C, 0xC0, 0x00, 0x0C, 0x03, 0x30, 0x03, 0x03, 0x00, 0x03, 0x0C
.db 0x3C, 0x03, 0x30, 0x30, 0x00, 0x30, 0x30, 0x03, 0x30, 0x00, 0x03, 0x03, 0x03, 0x3F, 0x00, 0x00
.db 0x30, 0x30, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x30, 0x03, 0x30, 0x0C, 0x0C, 0x30, 0x30, 0x0C
.db 0x0C, 0x0F, 0x0C, 0x30, 0x00, 0x30, 0x03, 0x30, 0x0C, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x30, 0x0F, 0x30, 0x30, 0x30, 0x03, 0x0F, 0x0C, 0x03, 0x30, 0x0C, 0x03, 0x30, 0x30, 0x30
.db 0x0C, 0x0F, 0x0C, 0x00, 0x03, 0x30, 0x03, 0x30, 0x0C, 0x0F, 0x0C, 0x03, 0x03, 0x00, 0x00, 0x30
.db 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x30, 0x30, 0x30, 0x00, 0x03, 0x00, 0x30, 0x3F
.db 0x0C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x0F, 0x0C, 0x30, 0x0F, 0x30, 0x03, 0x30, 0x03
.db 0x30, 0x00, 0x30, 0x30, 0x30, 0x30, 0x3F, 0x3F, 0x30, 0x30, 0x00, 0x30, 0x33, 0x03, 0x03, 0x30
.db 0xC0, 0xCC, 0x3F, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0x00
.db 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x30, 0x3F, 0x30, 0x03, 0x30, 0x30, 0x30, 0x00, 0x0F, 0x0C, 0x0C, 0x30, 0x3C, 0x0F, 0x03, 0x30
.db 0x3F, 0x00, 0x00, 0x00, 0x03, 0xC3, 0x03, 0x30, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0F, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC0, 0xFF, 0x03, 0x03, 0x03, 0x03, 0x00, 0xFF, 0x0F, 0xF0, 0xC0, 0x3F, 0xFC, 0xFC, 0xF3
.db 0xC0, 0x00, 0x0F, 0x0C, 0x03, 0xF0, 0x3F, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x03, 0x00, 0x0C, 0x03, 0x30, 0x3F, 0x00, 0x03, 0x0C, 0x00, 0x00, 0x03, 0x00, 0x03, 0x30
.db 0x0F, 0x3F, 0x3F, 0x0F, 0x03, 0x0F, 0x0F, 0x03, 0x0F, 0x0F, 0x03, 0x03, 0x00, 0x00, 0x03, 0x00
.db 0x0F, 0x30, 0x3F, 0x03, 0x3F, 0x3F, 0x3F, 0x03, 0x30, 0x0F, 0x0F, 0x3C, 0x3F, 0x30, 0x30, 0x03
.db 0x3F, 0x00, 0x3F, 0x0F, 0x03, 0x0F, 0x00, 0x0F, 0x30, 0x03, 0x3F, 0x3F, 0x00, 0x3F, 0x00, 0x00
.db 0x00, 0x0F, 0x0C, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x3C, 0x0F, 0x30, 0x0C, 0x0F, 0x30, 0x30, 0x0F
.db 0x0C, 0x00, 0x3F, 0x3F, 0x00, 0x0F, 0x00, 0x0F, 0x30, 0x00, 0x3F, 0x00, 0x03, 0x0F, 0x00, 0x3F
.db 0x00, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x0F, 0x0F, 0x0F, 0x03, 0x0F, 0x03, 0x30, 0x30
.db 0x3F, 0x0F, 0x30, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x03, 0x0F, 0x00, 0x3F, 0x03, 0x30, 0xC3
.db 0x0F, 0x03, 0x0F, 0x0F, 0x30, 0x30, 0x00, 0x00, 0x0F, 0x00, 0x00, 0xC0, 0xC0, 0x03, 0x00, 0x00
.db 0x0C, 0x33, 0xF3, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0x00
.db 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x0F, 0x30, 0x30, 0x03, 0x3F, 0x0F, 0x30, 0x00, 0x03, 0x03, 0x3C, 0x0F, 0x00, 0x30, 0x00, 0x30
.db 0x00, 0x3F, 0x3F, 0x3F, 0x03, 0xC3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0xFF, 0x00, 0xFF, 0x3F, 0x03, 0xF0, 0xF0, 0x03
.db 0x00, 0x00, 0x03, 0x00, 0x00, 0x3F, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x3C
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00
.db 0xC0, 0xCC, 0xFC, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03
.db 0x00, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x03, 0x00, 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0x00
.db 0x00, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0x00, 0x00
.db 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x03, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00
; 40 Char / line font (double width) right half of each char
; Character line 0:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xFC, 0xFC, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xF0, 0xFF, 0xFF, 0xC0
.db 0x00, 0x0C, 0xC0, 0x30, 0xFF, 0xFC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x30, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0x00, 0xF0, 0xF0, 0xC0, 0xFC, 0xF0, 0xFC, 0xF0, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xF0
.db 0xF0, 0xC0, 0xF0, 0xF0, 0xC0, 0xFC, 0xFC, 0xF0, 0x0C, 0xC0, 0xFC, 0x0C, 0x00, 0x0F, 0x0C, 0xC0
.db 0xF0, 0xF0, 0xF0, 0xF0, 0xFF, 0x0C, 0x03, 0x03, 0x03, 0x03, 0xFF, 0xC0, 0x00, 0xC0, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x3C, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x0C, 0x00
.db 0xF0, 0x00, 0xF0, 0xF0, 0x0C, 0x00, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x30, 0xF0, 0x00, 0x0C, 0xC0
.db 0xF0, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x0C, 0x0C, 0xC0, 0xC0, 0x30, 0xC0, 0xF0
.db 0xF0, 0xF0, 0x30, 0x00, 0x0C, 0x30, 0xF0, 0xC0, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00
.db 0x0C, 0x33, 0xCF, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00
.db 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF0, 0xC0, 0xC0, 0xF0, 0x00, 0x0C, 0xF0, 0xF0
.db 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x00, 0x00, 0x00
; Character line 1:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0xFC, 0xC0, 0xF0, 0x00, 0x00, 0xFF, 0xF0, 0x0F, 0x0F, 0x0C, 0x03, 0x03, 0xCF
.db 0x00, 0xFC, 0xF0, 0x30, 0x0C, 0x0F, 0x00, 0xF0, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x30, 0x00, 0xFC
.db 0x00, 0xC0, 0x30, 0x30, 0xFC, 0x0C, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x0C
.db 0x0C, 0x00, 0x0C, 0x0C, 0xC0, 0x00, 0x00, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x0C
.db 0x0C, 0x30, 0x0C, 0x0C, 0x30, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x30, 0x30, 0x00, 0x33, 0x0C, 0x30
.db 0x0C, 0x0C, 0x0C, 0x0C, 0xC3, 0x0C, 0x03, 0x03, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0xC0, 0xC0, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0xC0
.db 0x0C, 0x30, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xC0, 0xC0
.db 0x00, 0x00, 0x30, 0x30, 0x0C, 0x00, 0x30, 0x00, 0x0C, 0xC0, 0x00, 0xC0, 0x30, 0xC0, 0xF0, 0x0C
.db 0x00, 0x00, 0xC0, 0x30, 0xF0, 0xF0, 0x30, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x0C, 0xC0
.db 0xC0, 0xCC, 0x3F, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00
.db 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x00, 0xF0, 0xFC, 0xFF, 0x0C, 0x00, 0x30, 0x0F, 0x00, 0x30, 0x30, 0x00, 0x0C, 0x30, 0x00, 0x0C
.db 0xFC, 0x00, 0xC0, 0x00, 0x0C, 0x00, 0xC0, 0x0C, 0xC0, 0x00, 0x00, 0xC0, 0x30, 0xC0, 0x00, 0x00
; Character line 2:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x33, 0xCF, 0xFC, 0xF0, 0xC0, 0xC0, 0xC0, 0x3F, 0x3C, 0xC3, 0x33, 0x0C, 0xFF, 0xFF, 0xF0
.db 0xC0, 0xFC, 0xFC, 0x30, 0x0C, 0xC0, 0x00, 0xFC, 0xF0, 0x00, 0xF0, 0x00, 0x00, 0x3C, 0xC0, 0xFC
.db 0x00, 0xC0, 0x30, 0xFC, 0x00, 0x30, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x30
.db 0x3C, 0x00, 0x0C, 0x0C, 0xC0, 0xF0, 0x00, 0x30, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0xFC, 0x30, 0x0C
.db 0xFC, 0x0C, 0x0C, 0x00, 0x0C, 0xC0, 0xC0, 0x00, 0x0C, 0x00, 0x30, 0xC0, 0x00, 0xC3, 0xCC, 0x0C
.db 0x0C, 0x0C, 0x0C, 0x00, 0xC0, 0x0C, 0x03, 0x03, 0x30, 0x30, 0x30, 0x00, 0x00, 0xC0, 0x30, 0x00
.db 0xC0, 0xF0, 0x00, 0xF0, 0x0C, 0xF0, 0x00, 0xF3, 0xF0, 0x00, 0x3C, 0x30, 0x00, 0x3C, 0xF0, 0xF0
.db 0xF0, 0x3C, 0xF0, 0xFC, 0xF0, 0x0C, 0x03, 0x03, 0x30, 0x0C, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x30
.db 0x00, 0x00, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xF0, 0xF0, 0xF0, 0xF0, 0xC0, 0x00, 0xC0, 0x30, 0x00
.db 0xF0, 0x0F, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0C, 0xFC, 0x00, 0xF0, 0xC0, 0x00
.db 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0xC0, 0xCC, 0x00, 0x30, 0x30
.db 0x0C, 0x33, 0xCF, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x30, 0xF0, 0x30, 0x30, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x30, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF
.db 0x30, 0xFF, 0x00, 0x30, 0xFF, 0xFF, 0x00, 0x30, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0x03, 0x0C, 0x0C, 0x30, 0x00, 0xFC, 0x30, 0xF0, 0xC0, 0x0C, 0x0C, 0xC0, 0x33, 0xF0, 0x00, 0x0C
.db 0x00, 0xF0, 0x30, 0x00, 0x0C, 0x00, 0x00, 0xF0, 0xC0, 0x00, 0x00, 0xC0, 0x30, 0x00, 0xF0, 0x00
; Character line 3:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0xFC, 0xFC, 0xFC, 0xF0, 0xF0, 0x0F, 0x0C, 0xF3, 0xF3, 0x0C, 0x00, 0x03, 0x3F
.db 0xFC, 0xFC, 0xC0, 0x30, 0x0C, 0x30, 0x00, 0xC0, 0x30, 0x30, 0xFC, 0xFC, 0x00, 0xFF, 0xF0, 0xF0
.db 0x00, 0x00, 0x00, 0x30, 0xF0, 0xC0, 0x3C, 0x00, 0x00, 0xC0, 0xFC, 0xF0, 0x00, 0xFC, 0x00, 0xC0
.db 0xCC, 0x00, 0xF0, 0xF0, 0xC0, 0x0C, 0xF0, 0xC0, 0xF0, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x30
.db 0x0C, 0x0C, 0xF0, 0x00, 0x0C, 0xC0, 0xC0, 0x00, 0xFC, 0x00, 0x30, 0x00, 0x00, 0x03, 0x3C, 0x0C
.db 0xF0, 0x0C, 0xF0, 0xF0, 0xC0, 0x0C, 0x03, 0xC3, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0xC0, 0x0C, 0x00
.db 0x00, 0x0C, 0xFC, 0x0C, 0xCC, 0x0C, 0xC0, 0x0C, 0x0C, 0x00, 0x0C, 0xC0, 0x00, 0xC3, 0x0C, 0x0C
.db 0x0C, 0xF0, 0x0C, 0x00, 0x00, 0x0C, 0x03, 0xC3, 0xC0, 0x0C, 0xC0, 0x00, 0x00, 0x3C, 0x00, 0x0C
.db 0x0C, 0x30, 0x0C, 0x30, 0x30, 0x30, 0x30, 0x00, 0x0C, 0x0C, 0x0C, 0xC0, 0x00, 0xC0, 0x0C, 0xF0
.db 0x00, 0xF0, 0xFF, 0xF0, 0xF0, 0xF0, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x30, 0xF0
.db 0x30, 0xC0, 0xF0, 0x0C, 0xF0, 0x0C, 0xFC, 0xC0, 0x00, 0xFC, 0xFC, 0x3C, 0x3C, 0x00, 0xC0, 0x0C
.db 0xC0, 0xCC, 0xFC, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0xFF
.db 0xCC, 0xF0, 0x00, 0x30, 0xC0, 0xC0, 0x30, 0xC0, 0x30, 0xFC, 0x0C, 0xF0, 0xC3, 0xCC, 0xF0, 0x0C
.db 0xFC, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x30, 0x00, 0xF0, 0x00
; Character line 4:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xF3, 0x0F, 0xF0, 0xF0, 0xFC, 0xFC, 0xF0, 0x0F, 0x0C, 0xF3, 0x30, 0xF0, 0x00, 0x0F, 0x3F
.db 0xC0, 0xFC, 0xC0, 0x30, 0x0C, 0x30, 0xFC, 0xFC, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x3C, 0xFC, 0xC0
.db 0x00, 0x00, 0x00, 0xFC, 0x0C, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x0C, 0x00, 0x00, 0x0C, 0xFC, 0x0C, 0x0C, 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x30, 0xC0
.db 0xFC, 0xFC, 0x0C, 0x00, 0x0C, 0xC0, 0xC0, 0xFC, 0x0C, 0x00, 0x30, 0xC0, 0x00, 0x03, 0x0C, 0x0C
.db 0x00, 0xCC, 0xC0, 0x0C, 0xC0, 0x0C, 0x0C, 0xC3, 0x30, 0xC0, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00
.db 0x00, 0xFC, 0x03, 0x00, 0x3C, 0xFC, 0x00, 0x0C, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0xC3, 0x0C, 0x0C
.db 0x0C, 0xF0, 0x0C, 0xF0, 0x00, 0x0C, 0x0C, 0xC3, 0x00, 0x0C, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x03
.db 0xF0, 0x30, 0xFC, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0xFC, 0xFC, 0xFC, 0xC0, 0x00, 0xC0, 0xFC, 0x0C
.db 0xC0, 0xFF, 0x30, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0xF0, 0xFF, 0x00
.db 0xF0, 0xC0, 0x0C, 0x0C, 0x0C, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x0C, 0xC3, 0xCC, 0x00, 0x30, 0x30
.db 0x0C, 0x33, 0xCF, 0x00, 0x00, 0x00, 0x30, 0xF0, 0x00, 0x30, 0x30, 0x30, 0xF0, 0xF0, 0x00, 0x00
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x3F, 0xFF, 0x3F, 0x3F, 0xFF, 0x3F, 0xFF
.db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0x30, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0xCC, 0xC0, 0x30, 0x0C, 0x30, 0x0C, 0x33, 0x0C, 0x00, 0x0C
.db 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x0C, 0x00, 0xC0, 0xC0, 0xC0, 0x30, 0xC0, 0xF0, 0x00
; Character line 5:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xC3, 0x3F, 0xC0, 0xC0, 0x3C, 0xF0, 0xC0, 0x3F, 0x3C, 0xC3, 0x30, 0xC0, 0x00, 0x3F, 0xF0
.db 0x00, 0xFC, 0xFC, 0x00, 0x0C, 0xC0, 0xFC, 0xF0, 0x00, 0xC0, 0xC0, 0x00, 0xFC, 0x30, 0xFC, 0x00
.db 0x00, 0x00, 0x00, 0x30, 0xF0, 0x3C, 0xC0, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x0C, 0x00, 0x0C, 0x0C, 0xC0, 0x0C, 0x0C, 0x00, 0x0C, 0x30, 0x00, 0x00, 0x00, 0xFC, 0xC0, 0x00
.db 0x00, 0x0C, 0x0C, 0x0C, 0x30, 0x0C, 0x00, 0x0C, 0x0C, 0x00, 0x30, 0x30, 0x0C, 0x03, 0x0C, 0x30
.db 0x00, 0xF0, 0x30, 0x0C, 0xC0, 0x0C, 0x30, 0xC3, 0x0C, 0xC0, 0x03, 0x00, 0x30, 0xC0, 0x00, 0x00
.db 0x00, 0x0C, 0x03, 0x0C, 0x3C, 0x00, 0x00, 0xFC, 0x0C, 0x00, 0x0C, 0xC0, 0x00, 0xC3, 0x0C, 0x0C
.db 0xF0, 0x30, 0x00, 0x0C, 0x0C, 0x3C, 0x30, 0xC3, 0xC0, 0xFC, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x03
.db 0xF0, 0x30, 0x00, 0x30, 0x30, 0x30, 0x30, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x0C, 0xFC
.db 0x00, 0x30, 0x30, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0x30, 0x0C, 0xFC, 0x0C, 0x00, 0x30, 0x00
.db 0x30, 0xC0, 0x0C, 0x0C, 0x0C, 0xCC, 0xFC, 0xF0, 0x0C, 0x00, 0x0C, 0x0F, 0xFF, 0x00, 0x0C, 0xC0
.db 0xC0, 0xCC, 0x3F, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30, 0x00
.db 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0xCC, 0xF0, 0x00, 0x30, 0x0C, 0xC0, 0x00, 0xC0, 0xC0, 0x30, 0x30, 0x0C, 0x0C, 0xF0, 0x00, 0x0C
.db 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xF0, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xF0, 0x00
; Character line 6:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xF0, 0x0F, 0x30, 0xFC, 0x00, 0x3C, 0xCF
.db 0x00, 0x0C, 0xF0, 0x30, 0x0C, 0xF0, 0xFC, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x30, 0xC0, 0x3C, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0xF0, 0xFC, 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0xF0, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0
.db 0xF0, 0x0C, 0xF0, 0xF0, 0xC0, 0xFC, 0x00, 0xFC, 0x0C, 0xC0, 0xC0, 0x0F, 0xFC, 0x03, 0x0C, 0xC0
.db 0x00, 0x0F, 0x0C, 0xF0, 0xF0, 0xF0, 0xC0, 0x3C, 0x03, 0xF0, 0xFF, 0xC0, 0x0C, 0xC0, 0x00, 0x00
.db 0x00, 0xFF, 0xFC, 0xF0, 0xCF, 0xF0, 0xC0, 0x0C, 0x0C, 0xC0, 0x0C, 0x3C, 0xC0, 0xC3, 0x0C, 0xF0
.db 0x00, 0x30, 0x00, 0xF0, 0xF0, 0xCC, 0xC0, 0x3C, 0x30, 0x0C, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0xFF
.db 0x0C, 0xFC, 0xF0, 0xFC, 0xFC, 0xFC, 0xFC, 0x3C, 0xF0, 0xF0, 0xF0, 0xF0, 0xC0, 0xF0, 0x0C, 0x0C
.db 0xF0, 0xCF, 0x3F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0C, 0xC0, 0xF0, 0xC0, 0xF0, 0x00, 0x33, 0x00
.db 0xFC, 0xF0, 0xF0, 0xF0, 0x0C, 0x3C, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x00
.db 0x0C, 0x33, 0xCF, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30, 0x00
.db 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0x03, 0x00, 0x00, 0x30, 0xFC, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x3C, 0xF0, 0x00, 0x00, 0xF0, 0x0C
.db 0x00, 0xF0, 0xFC, 0xFC, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00
; Character line 7:
; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
.db 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0xFF, 0x00, 0xFF, 0xC0, 0xC0, 0x00, 0x00, 0xC0
.db 0x00, 0x00, 0xC0, 0x00, 0x00, 0xC0, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x3C, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x0C, 0x00, 0x00, 0x00
.db 0xC0, 0xCC, 0xFC, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x30, 0x00, 0x30, 0x00
.db 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
.db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00

View File

@ -0,0 +1,74 @@
;
; Originally designed and written by Daryl Rictor (c)2003-2004
;
; Modified by Grant Searle 2007-13
;
; Define Registers and Port Pins
; Acc = R00, R01 (results of multiply command)
.def Acc = R0 ; Reserved - maths accumulator for multiply operations
.def Acch = R1 ; "
.def nibbleTemp= R2 ; Temp storage for 4-bit (nibble) transfer
.def configByte = R3 ; As read from PORT D at startup
.set CONFIG_PAL = 7 ; 0xxxxxxx = NTSC, 0xxxxxxx = PAL
.set CONFIG_8_OR_4_BIT = 6 ; x0xxxxxx = 4 bit, x1xxxxxx= 8 bit
.set CONFIG_N_TWI = 5 ; xx1xxxxx = 4/8 bit, xx0xxxxx= Two wire
.set CONFIG_80_CHAR_PER_LINE = 4 ; xxx0xxxx = 40, xxx1xxxx=80
.set CONFIG_SINGLE_HEIGHT = 3 ; xxxx1xxx = Normal, xxxx0xxx = Double height
.set CONFIG_BOLD = 2 ; xxxxx0xx = Normal, xxxxx1xx = Bold
.def currLineAtt = R4 ; Reserved for scanline processing
.set ATT_80_CHAR_PER_LINE = 0 ; xxxxxxx0 = 40, xxxxxxx1=80
.set ATT_BOLD = 1
.set ATT_DBL_TOP = 2 ; xxxx00xx = Normal, xxxx01xx = Double top row, xxxx10xx = Double bottom row
.set ATT_DBL_BOTTOM = 3
.def activeLineAtt = R5 ; Font/graphic style currently being used
.set ATT_DBL_HEIGHT = 2
.set ATT_GRAPHICS = 7
.def previousInpt = R6
.def charUnderCursor = R7 ; character under the cursor
.def temp1s = R8
.def temp0s = R9
.def lastline = R10
.def line1 = R11
.def cmdVal = R12
.def temp = R13 ; General purpose temp
.def temp2 = R14 ; General purpose temp
.def temp3 = R15 ; General purpose temp
;-------------------------------------------------
.def J = R16 ; scratch 8 bit reg
.def K = R17 ; scratch 8 bit reg
.def column = R18 ; hor cursor pos 0-79
.def row = R19 ; vert cursor pos 0-24
.def vline = R20 ;\ vertical display line counter 0-261
.def vlineh = R21 ;/ hi byte of vline counter
.def chrln = R22 ; display chr line 0 - 199
.def inpt = R23 ; host input
.def cursorChar= R24 ; cursor character
.def cursorClk = R25 ; the cursor blink timer
; X pair = R26,27
; Y pair = R28,29
; Z pair = R30,31
;
; X pair used to point to SRAM by refresh routines
; Y pair used to point to SRAM by HOST processor
; Z pair used to point to Font data in Program Memory & scrolling
;PORT pin defs
.set syncpin = PB0 ; output
.set ldsrpin = PC3 ; output
.set ackdpin = PC4 ; output
.set availpin = PC5 ; input
.set ntscpin = PD7
.set datalenpin = PD6
.set twowireselpin = PD5
; TWI defs
.equ TW_SR_DATA_ACK = 0x80 ; x80 10000000 (the previously addressed (SLA + W) data has been received , ACK has been returned

View File

@ -0,0 +1,374 @@
;/**********************************************************************************/
;/ NTSC/PAL Video Display (40/80 character x 25 line monochrome text/graphics) /
;/ /
;/ Original 40x25 text designed and written by Daryl Rictor (c)2003-2004 /
;/ /
;/ Modified by Grant Searle 2007-2013 /
;/ - 80x25 or 40x25 display /
;/ - Handshaking/data transfer rewritten /
;/ - 8bit and 4bit and I2C interface (with help from Dave Curran) /
;/**********************************************************************************/
; include program specific definitions and macros
.include "defs.inc"
;---------------------------------------------------------------------------------------------------------------------------
; Standard ATmega328 jump vectors
jmp RESET ; Reset Handler
jmp EXT_INT0 ; IRQ0 Handler
jmp EXT_INT1 ; IRQ1 Handler
jmp PC_INT0 ; PCINT0 Handler
jmp PC_INT1 ; PCINT1 Handler
jmp PC_INT2 ; PCINT2 Handler
jmp WDT ; Watchdog Timer Handler
jmp TIM2_COMPA ; Timer2 Compare A Handler
jmp TIM2_COMPB ; Timer2 Compare B Handler
jmp TIM2_OVF ; Timer2 Overflow Handler
jmp TIM1_CAPT ; Timer1 Capture Handler
jmp TIM1_COMPA ; Timer1 Compare A Handler
jmp TIM1_COMPB ; Timer1 Compare B Handler
jmp TIM1_OVF ; Timer1 Overflow Handler
jmp TIM0_COMPA ; Timer0 Compare A Handler
jmp TIM0_COMPB ; Timer0 Compare B Handler
jmp TIM0_OVF ; Timer0 Overflow Handler
jmp SPI_STC ; SPI Transfer Complete Handler
jmp USART_RXC ; USART, RX Complete Handler
jmp USART_UDRE ; USART, UDR Empty Handler
jmp USART_TXC ; USART, TX Complete Handler
jmp ADCC ; ADC Conversion Complete Handler
jmp EE_RDY ; EEPROM Ready Handler
jmp ANA_COMP ; Analog Comparator Handler
jmp TWI ; 2-wire Serial Interface Handler
jmp SPM_RDY ; Store Program Memory Ready Handler
;---------------------------------------------------------------------------------------------------------------------------
; unused vectors point to software reset code
EXT_INT0:
EXT_INT1:
PC_INT0:
PC_INT1:
PC_INT2:
WDT:
TIM2_COMPA:
TIM2_COMPB:
TIM2_OVF:
TIM1_CAPT:
;TIM1_COMPA: //used elsewhere
TIM1_COMPB:
TIM1_OVF:
TIM0_COMPA:
TIM0_COMPB:
TIM0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
ADCC:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
;---------------------------------------------------------------------------------------------------------------------------
; Program start
RESET:
CLI ; disable interupts
; Initialize the I/O Ports
LDI J, 0xFF
out PORTB, J ; enable pullups
out PORTC, J ; enable pullups
out PORTD, J ; enable pullups
LDI J, 0x00 ; pins 0 - 7 of port D
out DDRD, J ; set PORTD pins to inputs TEMPORARILY to read config bits
LDI J, 0x01 ; pin 1 of port B is output (sync)
out DDRB, J
; Initialize Timer 1
; OCR1A will hold the value of 1016/1024 and be used to reset the counter and
; cause an IRQ that will start the HSYNC process
; The counter will count each clock cycle (16MHz - no prescaling)
ldi J, 0x00
sts TCCR1A, J
ldi J, 0x09 ; set timer 1 to CTC mode 4
sts TCCR1B, J
ldi J, 0x02 ; allow OCR1A IRQ's
sts TIMSK1, J
; Initialise other registers
ldi J,0x00
sts UCSR0B,J ; Turn off serial
ldi J, 0x80
out ACSR, J ; turn off comparator
ldi J, 0x08 ; set stack pointer to top of SRAM
out SPH, J ;
ldi J, 0xFF ;
out SPL, J ;
; Initialise Program Variables
ldi chrln, 0x00 ; keeps track of font gen line (0-7)
ldi vlineh, 0x00 ; vertical line counter 0-262
ldi vline, 0x00 ; "
ldi YL, 0x00 ;
ldi YH, 0x01 ; init y pointer
ldi column, 0x00 ; keeps track of horizontal chr pos (0-79)
ldi row, 0x00 ; keeps track of vertical chr pos (0-24)
ldi cursorClk, 0x00 ; init cursor blink timer
ld charUnderCursor, Y ; init cursor character
ldi cursorChar, 0x5F ; init cursor '_' character
ldi J, 0xFF
mov previousInpt, J
ldi J, 0x00
mov cmdVal, J
;---------------------------------------------------------------------------------------------------------------------------
; Set configuration from PORTD
in configByte,PIND ; Read configuration bits (PORTD pins)
; Configuration now read, so set PORTD pins to outputs
ldi J, 0x00 ;
out PORTD, J ; set port D outputs to 0
LDI J, 0xFF ; pins 0 - 7 of port B
out DDRD, J ; set PORTD pins to outputs
; HARD CODED OVERRIDE IF PREFERRED
; ldi J, 1<<CONFIG_PAL | 0<<CONFIG_8_OR_4_BIT | 1<<CONFIG_N_TWI | 1<<CONFIG_80_CHAR_PER_LINE | 1<<CONFIG_SINGLE_HEIGHT | 0<<CONFIG_BOLD
; mov configByte,J
;---------------------------------------------------------------------------------------------------------------------------
; Set default font
ldi J, 0x00
sbrc configByte,CONFIG_80_CHAR_PER_LINE ; 80 if high
ori J, 1<<ATT_80_CHAR_PER_LINE
sbrc configByte,CONFIG_BOLD ; Bold if high
ori J, 1<<ATT_BOLD
sbrs configByte,CONFIG_SINGLE_HEIGHT ; Double if low
ori J, 1<<ATT_DBL_HEIGHT
mov activeLineAtt, J
;---------------------------------------------------------------------------------------------------------------------------
; Select PAL/NTSC System
sbrs configByte, CONFIG_PAL ; low = NTSC
rjmp setNTSC ; Yes, set NTSC mode
setPAL:
ldi J, 0x38 ; 0x0138 Last vertical line 312
mov lastline, J ;
ldi J, 0x40 ; first vertical line of active disp
mov line1, J ;
ldi J, 0x04 ; 0x0400 = 1024 clocks per line
sts OCR1AH, J
ldi J, 0x00 ; 0x0400 = 1024 clocks per line
sts OCR1AL, J ; set Counter 1 to cycle from 0 to 1024 and IRQ
rjmp palOrNtscSet ;
setNTSC: ; no, set NTSC mode
ldi J, 0x06 ; 0x0106 Last vertical line 262
mov lastline, J ;
ldi J, 0x28 ; first vertical line of active disp
mov line1, J ;
ldi J, 0x03 ; 0x03f8 = 1016 clocks per line (63.5us)
sts OCR1AH, J
ldi J, 0xf8 ; 0x03f8 = 1016 clocks per line (63.5us)
sts OCR1AL, J ; set Counter 1 to cycle from 0 to 1016 and IRQ
palOrNtscSet:
;---------------------------------------------------------------------------------------------------------------------------
; Initialise TWI if used otherwise setup ack/avail pins
sbrs configByte,CONFIG_N_TWI ; low = TWI
rjmp twoWireSelected ; Yes, set TWI mode otherwise setup ack/avail pins
twoWireNotUsed:
LDI J, 0x18 ; pins 3,4 of port C are outputs
out DDRC, J
rjmp twiSet
twoWireSelected:
LDI J, 0x08 ; only pin 3 of port C is an output
out DDRC, J
ldi J, 0x02 ; Set address to 0x01, format aaaaaaag (a=address, g=general call enable)
sts TWAR, J ;
ldi J, (1<<TWEA)|(1<<TWEN)
sts TWCR, J ; Enable TWI and allow ACK when slave is addressed.
twiSet:
;---------------------------------------------------------------------------------------------------------------------------
; Reset Timer 1 and clear Busy Status Flag
ldi J, 0x00 ; clear timer 1
sts TCNT1H, J ;
sts TCNT1L, J ;
ldi J, 0x1C ; clear timer 1 IRQ's
out TIFR1, J ; clear timer 1 IRQ's
; Set the default attributes for each line (Screen 0100-08CF (2000 bytes), Attributes for each line 08D0-08E9 (25 bytes) )
ldi ZL, 0xD0
ldi ZH, 0x08 ; set to start of attribute SRAM
ldi YL, 0x19
ldi YH, 0x00 ; set Y to 25 (19 HEX)
loop1:
st Z+, activeLineAtt ; save to attribute SRAM
sbiw YL, 0x01 ; dec Y
brne loop1
ldi inpt,0x0C ; CLS
rcall processChar
SEI ; Initialisation complete. Enable IRQ's
;---------------------------------------------------------------------------------------------------------------------------
; Main Loop
main:
cpi cursorChar, 0x00 ; is the cursor turned on?
breq endOfCursor ; no, skip cursor code
cpi cursorClk, 0xff ; is clk at 0xFF?
breq solidCursor ; yes - solid cursor (no blink)
cpi cursorClk, 0x1C ; is it above 28 frames?
brpl blinkCursor ; if >25, show Cursor
mov inpt,charUnderCursor
call setYfromRowCol
call putCharAtY
rjmp endOfCursor
solidCursor:
mov inpt,cursorChar
call setYfromRowCol
call putCharAtY
rjmp endOfCursor
blinkCursor:
mov inpt,cursorChar
call setYfromRowCol
call putCharAtY
cpi cursorClk, 0x37 ; is clock >56
brmi endOfCursor ; no
clr cursorClk ; reset timer
endOfCursor:
sbrs configByte,CONFIG_N_TWI ; low = TWI
rjmp twiMode ; Yes, set TWI mode
eightOrFourBit:
; If the ack and data rdy are the same state then there is no
; data waiting
in J,PORTC
andi J,0x10
in K,PINC
andi K,0x20
lsr K
eor J,K
breq Main
; Data ready, so check if 4bit or 8bit data transfer is being used
sbrs configByte,CONFIG_8_OR_4_BIT
rjmp fourBit ; Low = 4 bit
eightBit:
; 8 bit Input is split between portB and portC
; so read both, shift then OR together to form the 8 bit data
in J,PINB
andi J,0x3E
lsr J
in inpt,PINC
andi inpt,0x07
lsl inpt
lsl inpt
lsl inpt
lsl inpt
lsl inpt
or inpt,J
; Data read, so flip the ack bit
in K,PORTC
ldi J,0x10
eor K,J
out PORTC,K
rcall processChar ; process the host data
rjmp Main ; repeat
fourBit:
; 4 bit Input is on portB only
sbis PINC,availpin
rjmp Nibble2 ; Process lower 4 bits if clear
nibble1:
in inpt,PINB
andi inpt,0x1E
lsl inpt ; Move to upper 4 bits
lsl inpt
lsl inpt
mov nibbleTemp,inpt
; Data read, so flip the ack bit
in K,PORTC
ldi J,0x10
eor K,J
out PORTC,K
rjmp Main ; repeat
nibble2:
in J,PINB
andi J,0x1E
lsr J ; Move to lower 4 bits
or nibbleTemp,J ; Combine it with the first 4 bits
mov inpt,nibbleTemp
; Data read, so flip the ack bit
in K,PORTC
ldi J,0x10
eor K,J
out PORTC,K
rcall processChar ; process the host data
rjmp main ; repeat
twiMode:
lds J, TWCR ; check the twi status register
sbrs J, TWINT ; is the twint bit set?
rjmp main ; no, back to main loop
lds J, TWSR ; Check status register
andi J, 0xF8 ; Ignore bits 0..2 (prescaler and reserved bit)
; cpi J, 0xA0 ; Stop - ignore
; breq toMain ; no new data
cpi J, TW_SR_DATA_ACK ; 0x80 - address already received received, ACK had been returned
brne noTWIdata ; no new data
lds inpt, TWDR ; Store the received data
ldi J, (1<<TWINT)|(1<<TWEA)|(1<<TWEN) ; clear the TWINT flag immediately to allow two wire transmission to resume
sts TWCR,J
rcall processChar ; process the host data
rjmp main ; back to main loop
noTWIdata:
ldi J, (1<<TWINT)|(1<<TWEA)|(1<<TWEN) ; clear the TWINT flag (logic 1)
sts TWCR,J
toMain:
rjmp main ; back to main loop
;---------------------------------------------------------------------------------------------------------------------------
; IRQ Service routine for the video line generation
TIM1_COMPA: ; IRQ service for OCR1A
.include "vidgen.inc" ; file that holds the video generation code
reti ; done
;---------------------------------------------------------------------------------------------------------------------------
; include subroutines and fonts
.include "ProcChr.inc"
.include "CGANormalFont.inc"
.include "CGANormalFontWide.inc"
.include "CGABoldfont.inc"
.include "CGABoldFontWide.inc"
.include "BlockFont.inc"

View File

@ -0,0 +1,413 @@
;******************************************************************************
; NTSC/PAL Video Generation Code (16MHZ System Clock)
;
; Originally designed and written by Daryl Rictor (c)2003-2004
;
; Modified by Grant Searle 2007-13
; - Multi size fonts
; - Now uses a single clock interrupt
; - Supports 40 chars or 80 chars per line
;******************************************************************************
push acc
push accH
push ZL
push ZH
push J
in J,SREG
push J
;Get exact sync with clock (remove jitter)
lds J, TCNT1L
cpi J, 0x14
breq clkSync0
cpi J, 0x15
breq clkSync1
cpi J, 0x16
breq clkSync2
cpi J, 0x17
breq clkSync3
cpi J, 0x18
breq clkSync4
nop
nop
nop
clkSync0:
nop
nop
nop
clkSync1:
nop
nop
nop
clkSync2:
nop
nop
nop
clkSync3:
nop
nop
nop
clkSync4:
; Timer now always 0x24 at this point
cbi portb, syncpin ; drop the csync pin
LINECHECK:
cpi vlineh, 0x00
brne NOTFIRST256
cpi vline, 0x04
brlo VSYNC ; no, wait for hsync end
rjmp CHECKTOPBLANK
VSYNC:
rjmp EOL ; line 0 is a VSYNC line, we're done
CHECKTOPBLANK:
cp vline, line1
brlo TOPBLANK
rjmp CHECKFIRSTLINE
TOPBLANK:
rjmp BLANK
CHECKFIRSTLINE:
cp vline, line1
brne CHECKLASTLINE
FIRSTLINE:
ldi chrln, 0x00 ; sync chrlin with first active line
rjmp DISPLAY
CHECKLASTLINE:
cpi chrln, 0xC8 ; have we passed line 200?
brlo DISPLAY ; no, get ready for active display line
rjmp BLANK
NOTFIRST256:
cpi chrln, 0xC8 ; have we passed line 200?
brlo DISPLAY ; no, get ready for active display line
cp vline, lastline
brne BLANK ; no, wait for hsync end
ldi vlineh, 0x00 ; yes, reset vert counters
ldi vline, 0x00 ;
cpi cursorClk, 0xff ;
breq vs1 ;
inc cursorClk ; inc cursor clock
vs1:
BLANK:
ldi chrln, 0xFF ; reset pointer
rjmp WAITSYNCEND ;
graphics:
ori ZH,0x28
rjmp WAITSYNCEND
DISPLAY:
mov J, chrln ; Get current display line
lsr J ; divide by 8
lsr J ;
lsr J ; J now contains the text line number (0..24)
; get attribute definition for current line
ldi XL, 0xD0
ldi XH, 0x08 ; set to start of attribute SRAM
add XL, J
ld currLineAtt,X
; set the SRAM character pointer (X) to the start of the current line (chrln)
ldi XL, 0x50 ; # chrs per line
mul XL, J ; multiply by chrs per line
ldi J, 0x01 ; offset to start of display
add R1, J
movw XL, R0 ; mov it to X reg
; set Z to point to base of font row
ldi ZL, 0x00 ; ZL=0, ASCII code will be added for each character
mov ZH, chrln ; ZH= current display line
andi ZH, 0x07 ; do ZH MOD 8
; If graphics then point to the graphics block font
sbrc currLineAtt,ATT_GRAPHICS
rjmp graphics
; Check if single or double height to be drawn
sbrc currLineAtt,ATT_DBL_TOP
lsr ZH ; If double height top then linecounter incremented at half speed
sbrc currLineAtt,ATT_DBL_BOTTOM
lsr ZH ; If double height bottom then linecounter incremented at half speed
sbrc currLineAtt,ATT_DBL_BOTTOM
ori ZH,0x04 ; Display bottom 4 lines if bottom of a double line
; Check if bold or normal font
sbrs currLineAtt,ATT_BOLD
ori ZH,0x20 ;0x20 (Normal) or 0x40 (Bold)
sbrc currLineAtt,ATT_BOLD
ori ZH,0x40 ;0x20 (Normal) or 0x40 (Bold)
; Check if 40 or 80 chars
sbrs currLineAtt,ATT_80_CHAR_PER_LINE
ori ZH, 0x10 ; add $1000 for offset to start of wide font table
WAITSYNCEND: ; else wait sync pulse end
lds J, TCNT1L ;
cpi J, 0x5A
brlo WAITSYNCEND ; no, look again
; Get exact sync with clock (remove jitter)
lds J, TCNT1L
cpi J, 0x5C
breq syncEnd0
cpi J, 0x5D
breq syncEnd1
cpi J, 0x5E
breq syncEnd2
cpi J, 0x5F
breq syncEnd3
cpi J, 0x60
breq syncEnd4
cpi J, 0x61
breq syncEnd5
cpi J, 0x62
breq HSYNCEND
nop
nop
nop
syncEnd0:
nop
nop
nop
syncEnd1:
nop
nop
nop
syncEnd2:
nop
nop
nop
syncEnd3:
nop
nop
nop
syncEnd4:
nop
nop
nop
syncEnd5:
nop
nop
nop
; Timer now always 0x72 at this point
HSYNCEND:
sbi portb, syncpin ; raise sync (approx 4.7uS hsync pulse)
cpi chrln, 0xFF ; are we on an active display line?
brne WAITVISIBLEPORTION ; yes, active display line
rjmp EOL ; no, blank line, we're done
WAITVISIBLEPORTION:
ldi J,0
leftBlank:
inc J
cpi J,42
brlo leftBlank
in J,PORTC ; read current port C
mov temp1s,J ; store in temp
andi J, 0xF7 ; Clear sh/ld bit
mov temp0s,J ; store in temp
; Check if 40 or 80 chars per line to be drawn
sbrs currLineAtt,ATT_80_CHAR_PER_LINE
rjmp DRAWLINE40
rjmp DRAWLINE80
DRAWLINE80:
;
; each line consists of 80 macro calls, each 8 clocks long. Here is the macro:
.macro DispChr
;
; gets the font byte of the current character and outputs it to the shift register
;
; 8 clocks
ld ZL, X+ ; 2 move curr chr in ZL
lpm J, Z ; 3 get font byte for current chr on curr line
out PORTD, J ; 1
out PORTC, temp0s ; 1 lower load pin
out PORTC, temp1s ; 1 raise load pin
.endmacro
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
DispChr ; display 1 chr
jmp EndOfChars
DRAWLINE40:
nop ; Exact sync with 80 char lines
;
; each line consists of 40 macro calls, each 16 clocks long. Here is the macro:
.macro DispChrWide
;
; gets the two font bytes of the current character and output them to the shift register
;
; 16 clocks
ld ZL, X+ ; 2 move curr chr in ZL
lpm J, Z ; 3 get left half font byte for current chr on curr line
out PORTD, J ; 1
out PORTC, temp0s ; 1 lower load pin
out PORTC, temp1s ; 1 raise load pin
ori ZH, 0x08 ; 1 get next font page
lpm J, Z ; 3 get right half font byte for current chr on curr line
andi ZH, 0xF7 ; 1 get back to first font page
out PORTD, J ; 1
out PORTC, temp0s ; 1 lower load pin
out PORTC, temp1s ; 1 raise load pin
.endmacro
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
DispChrWide ; display 1 wide chr
EndOfChars:
inc chrln ; inc line counter
EOL: ; end of line, we're done
inc vline ; inc vertical line counter
brne eol1
inc vlineh ;
eol1:
pop J
out SREG,J
pop J
pop ZH
pop ZL
pop accH
pop acc
reti ; all done, go back to main program