[fb] Add default hard-coded font

For the fb driver to have a font before loading from disk is available,
create a hard-coded font as a byte array.

To create this, added a new scripts/psf_to_cpp.py which also refactored
out much of scripts/parse_font.py into a new shared module
scripts/fontpsf.py.
This commit is contained in:
Justin C. Miller
2021-01-02 15:52:26 -08:00
parent 327cd93c04
commit f6b4a4a103
5 changed files with 387 additions and 25 deletions

75
scripts/fontpsf.py Normal file
View File

@@ -0,0 +1,75 @@
_MAGIC = (0x72, 0xb5, 0x4a, 0x86)
_VERSION = 0
class PSF2:
from collections import namedtuple
Header = namedtuple("PSF2Header",
["version", "offset", "flags", "count", "charsize", "height", "width"])
def __init__(self, filename, header, data):
self.__filename = filename
self.__header = header
self.__data = data
data = property(lambda self: self.__data)
header = property(lambda self: self.__header)
count = property(lambda self: self.__header.count)
charsize = property(lambda self: self.__header.charsize)
dimension = property(lambda self: (self.__header.width, self.__header.height))
filename = property(lambda self: self.__filename)
@classmethod
def load(cls, filename):
from os.path import basename
from struct import unpack_from
data = open(filename, 'rb').read()
fmt = "BBBBIIIIIII"
values = unpack_from(fmt, data)
if values[:len(_MAGIC)] != _MAGIC:
raise Exception("Bad magic number in header")
header = PSF2.Header(*values[len(_MAGIC):])
if header.version != _VERSION:
raise Exception(f"Bad version {header.version} in header")
return cls(basename(filename), header, data)
class Glyph:
__slots__ = ['index', 'data']
def __init__(self, i, data):
self.index = i
self.data = data
def __index__(self):
return self.index
def empty(self):
return not bool([b for b in self.data if b != 0])
def description(self):
c = chr(self.index)
if c.isprintable():
return "Glyph {:02x}: '{}'".format(self.index, c)
else:
return "Glyph {:02x}".format(self.index)
def __getitem__(self, i):
c = self.__header.charsize
n = i * c + self.__header.offset
return PSF2.Glyph(i, self.__data[n:n+c])
class __iter:
__slots__ = ['font', 'n']
def __init__(self, font):
self.font = font
self.n = 0
def __next__(self):
if self.n < self.font.count:
glyph = self.font[self.n]
self.n += 1
return glyph
else:
raise StopIteration
def __iter__(self):
return PSF2.__iter(self)

34
scripts/parse_font.py Normal file → Executable file
View File

@@ -1,21 +1,6 @@
#!/usr/bin/env python3
MAGIC = (0x72, 0xb5, 0x4a, 0x86)
from collections import namedtuple
PSF2 = namedtuple("PSF2", ["version", "offset", "flags", "count", "charsize", "height", "width"])
def read_header(data):
from struct import unpack_from, calcsize
fmt = "BBBBIIIIIII"
values = unpack_from(fmt, data)
if values[:len(MAGIC)] != MAGIC:
raise Exception("Bad magic number in header")
return PSF2(*values[len(MAGIC):])
from fontpsf import PSF2
def print_glyph(header, data):
bw = (header.width + 7) // 8
@@ -28,16 +13,15 @@ def print_glyph(header, data):
def display_font(filename):
data = open(filename, 'rb').read()
font = PSF2.load(filename)
print(font.header)
header = read_header(data)
print(header)
c = header.charsize
for i in range(0, header.count):
n = i * c + header.offset
print("Glyph {}:".format(i))
print_glyph(header, data[n:n+c])
for glyph in font:
if glyph.empty():
print("{}: BLANK".format(glyph.description()))
else:
print("{}:".format(glyph.description()))
print_glyph(font.header, glyph.data)
if __name__ == "__main__":

27
scripts/psf_to_cpp.py Executable file
View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
from fontpsf import PSF2
def print_header(filename):
font = PSF2.load(filename)
print("#pragma once")
print(f"// This file was autogenerated by psf_to_cpp.py from {font.filename}\n")
print(f"const uint8_t font_glyph_size = {font.charsize};")
print(f"const uint8_t font_glyph_width = {font.dimension[0]};")
print(f"const uint8_t font_glyph_height = {font.dimension[1]};")
print(f"const uint16_t font_glyph_count = {font.count};\n")
print('const uint8_t font_glyph_data[] = {')
for glyph in font:
print(" ", "".join([f"0x{b:02x}," for b in glyph.data]), end="")
print(" // {}".format(glyph.description()))
print("};")
if __name__ == "__main__":
import sys
for filename in sys.argv[1:]:
print_header(filename)

266
src/drivers/fb/font.h Normal file
View File

@@ -0,0 +1,266 @@
#pragma once
// This file was autogenerated by psf_to_cpp.py from tamsyn8x16r.psf
const uint8_t font_glyph_size = 16;
const uint8_t font_glyph_width = 8;
const uint8_t font_glyph_height = 16;
const uint16_t font_glyph_count = 256;
const uint8_t font_glyph_data[] = {
0x00,0x00,0x00,0x00,0x7e,0x42,0x42,0x42,0x42,0x42,0x42,0x7e,0x00,0x00,0x00,0x00, // Glyph 00
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 01
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, // Glyph 02
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 03
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 04
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 05
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 06
0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 07
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 08
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 09
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 0a
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 0b
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 0c
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 0d
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 0e
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xff,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 0f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 10
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 11
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 12
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 13
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 14
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 15
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 16
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 17
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 18
0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08, // Glyph 19
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 1a
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 1b
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 1c
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 1d
0x00,0x00,0x00,0x1c,0x22,0x20,0x20,0xf8,0x20,0x20,0x72,0x8c,0x00,0x00,0x00,0x00, // Glyph 1e
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 1f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 20: ' '
0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00, // Glyph 21: '!'
0x00,0x24,0x24,0x24,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 22: '"'
0x00,0x00,0x00,0x24,0x24,0x7e,0x24,0x24,0x24,0x7e,0x24,0x24,0x00,0x00,0x00,0x00, // Glyph 23: '#'
0x00,0x00,0x08,0x08,0x1e,0x20,0x20,0x1c,0x02,0x02,0x3c,0x08,0x08,0x00,0x00,0x00, // Glyph 24: '$'
0x00,0x00,0x00,0x30,0x49,0x4a,0x34,0x08,0x16,0x29,0x49,0x06,0x00,0x00,0x00,0x00, // Glyph 25: '%'
0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x31,0x49,0x46,0x46,0x39,0x00,0x00,0x00,0x00, // Glyph 26: '&'
0x00,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 27: '''
0x00,0x00,0x04,0x08,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x00,0x00, // Glyph 28: '('
0x00,0x00,0x20,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x10,0x10,0x20,0x00,0x00, // Glyph 29: ')'
0x00,0x00,0x00,0x00,0x00,0x24,0x18,0x7e,0x18,0x24,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 2a: '*'
0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x7f,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // Glyph 2b: '+'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x08,0x08,0x10,0x00, // Glyph 2c: ','
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 2d: '-'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // Glyph 2e: '.'
0x00,0x00,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, // Glyph 2f: '/'
0x00,0x00,0x00,0x3c,0x42,0x46,0x4a,0x52,0x62,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 30: '0'
0x00,0x00,0x00,0x08,0x18,0x28,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph 31: '1'
0x00,0x00,0x00,0x3c,0x42,0x02,0x02,0x04,0x08,0x10,0x20,0x7e,0x00,0x00,0x00,0x00, // Glyph 32: '2'
0x00,0x00,0x00,0x7e,0x04,0x08,0x1c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 33: '3'
0x00,0x00,0x00,0x04,0x0c,0x14,0x24,0x44,0x7e,0x04,0x04,0x04,0x00,0x00,0x00,0x00, // Glyph 34: '4'
0x00,0x00,0x00,0x7e,0x40,0x40,0x7c,0x02,0x02,0x02,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 35: '5'
0x00,0x00,0x00,0x1c,0x20,0x40,0x40,0x7c,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 36: '6'
0x00,0x00,0x00,0x7e,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x10,0x00,0x00,0x00,0x00, // Glyph 37: '7'
0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x3c,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 38: '8'
0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x3e,0x02,0x02,0x04,0x38,0x00,0x00,0x00,0x00, // Glyph 39: '9'
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // Glyph 3a: ':'
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x08,0x08,0x10,0x00, // Glyph 3b: ';'
0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00,0x00,0x00, // Glyph 3c: '<'
0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 3d: '='
0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x04,0x08,0x10,0x20,0x00,0x00,0x00,0x00, // Glyph 3e: '>'
0x00,0x00,0x3c,0x42,0x02,0x04,0x08,0x10,0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00, // Glyph 3f: '?'
0x00,0x00,0x1c,0x22,0x41,0x4f,0x51,0x51,0x51,0x53,0x4d,0x40,0x20,0x1f,0x00,0x00, // Glyph 40: '@'
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 41: 'A'
0x00,0x00,0x00,0x7c,0x42,0x42,0x42,0x7c,0x42,0x42,0x42,0x7c,0x00,0x00,0x00,0x00, // Glyph 42: 'B'
0x00,0x00,0x00,0x1e,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x1e,0x00,0x00,0x00,0x00, // Glyph 43: 'C'
0x00,0x00,0x00,0x78,0x44,0x42,0x42,0x42,0x42,0x42,0x44,0x78,0x00,0x00,0x00,0x00, // Glyph 44: 'D'
0x00,0x00,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph 45: 'E'
0x00,0x00,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00, // Glyph 46: 'F'
0x00,0x00,0x00,0x1e,0x20,0x40,0x40,0x46,0x42,0x42,0x22,0x1e,0x00,0x00,0x00,0x00, // Glyph 47: 'G'
0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x7e,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 48: 'H'
0x00,0x00,0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph 49: 'I'
0x00,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 4a: 'J'
0x00,0x00,0x00,0x42,0x44,0x48,0x50,0x60,0x50,0x48,0x44,0x42,0x00,0x00,0x00,0x00, // Glyph 4b: 'K'
0x00,0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph 4c: 'L'
0x00,0x00,0x00,0x41,0x63,0x55,0x49,0x49,0x41,0x41,0x41,0x41,0x00,0x00,0x00,0x00, // Glyph 4d: 'M'
0x00,0x00,0x00,0x42,0x62,0x52,0x4a,0x46,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 4e: 'N'
0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 4f: 'O'
0x00,0x00,0x00,0x7c,0x42,0x42,0x42,0x7c,0x40,0x40,0x40,0x40,0x00,0x00,0x00,0x00, // Glyph 50: 'P'
0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x04,0x02,0x00,0x00, // Glyph 51: 'Q'
0x00,0x00,0x00,0x7c,0x42,0x42,0x42,0x7c,0x48,0x44,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 52: 'R'
0x00,0x00,0x00,0x3e,0x40,0x40,0x20,0x18,0x04,0x02,0x02,0x7c,0x00,0x00,0x00,0x00, // Glyph 53: 'S'
0x00,0x00,0x00,0x7f,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00, // Glyph 54: 'T'
0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 55: 'U'
0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,0x00,0x00, // Glyph 56: 'V'
0x00,0x00,0x00,0x41,0x41,0x41,0x41,0x49,0x49,0x49,0x55,0x63,0x00,0x00,0x00,0x00, // Glyph 57: 'W'
0x00,0x00,0x00,0x41,0x41,0x22,0x14,0x08,0x14,0x22,0x41,0x41,0x00,0x00,0x00,0x00, // Glyph 58: 'X'
0x00,0x00,0x00,0x41,0x41,0x22,0x14,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00, // Glyph 59: 'Y'
0x00,0x00,0x00,0x7e,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x7e,0x00,0x00,0x00,0x00, // Glyph 5a: 'Z'
0x00,0x00,0x1e,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x1e,0x00,0x00, // Glyph 5b: '['
0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x00,0x00, // Glyph 5c: '\'
0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x78,0x00,0x00, // Glyph 5d: ']'
0x00,0x00,0x10,0x28,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 5e: '^'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00, // Glyph 5f: '_'
0x00,0x20,0x10,0x08,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 60: '`'
0x00,0x00,0x00,0x00,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph 61: 'a'
0x00,0x00,0x40,0x40,0x40,0x7c,0x42,0x42,0x42,0x42,0x42,0x7c,0x00,0x00,0x00,0x00, // Glyph 62: 'b'
0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x40,0x40,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 63: 'c'
0x00,0x00,0x02,0x02,0x02,0x3e,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph 64: 'd'
0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00, // Glyph 65: 'e'
0x00,0x00,0x0e,0x10,0x10,0x7e,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,0x00, // Glyph 66: 'f'
0x00,0x00,0x00,0x00,0x00,0x3e,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x3c,0x00, // Glyph 67: 'g'
0x00,0x00,0x40,0x40,0x40,0x7c,0x42,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 68: 'h'
0x00,0x00,0x08,0x08,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph 69: 'i'
0x00,0x00,0x04,0x04,0x00,0x1c,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x38,0x00, // Glyph 6a: 'j'
0x00,0x00,0x40,0x40,0x40,0x44,0x48,0x50,0x70,0x48,0x44,0x42,0x00,0x00,0x00,0x00, // Glyph 6b: 'k'
0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph 6c: 'l'
0x00,0x00,0x00,0x00,0x00,0x77,0x49,0x49,0x49,0x49,0x49,0x49,0x00,0x00,0x00,0x00, // Glyph 6d: 'm'
0x00,0x00,0x00,0x00,0x00,0x7c,0x42,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph 6e: 'n'
0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph 6f: 'o'
0x00,0x00,0x00,0x00,0x00,0x7c,0x42,0x42,0x42,0x42,0x42,0x7c,0x40,0x40,0x40,0x00, // Glyph 70: 'p'
0x00,0x00,0x00,0x00,0x00,0x3e,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x02,0x00, // Glyph 71: 'q'
0x00,0x00,0x00,0x00,0x00,0x2e,0x30,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x00, // Glyph 72: 'r'
0x00,0x00,0x00,0x00,0x00,0x3e,0x40,0x20,0x18,0x04,0x02,0x7c,0x00,0x00,0x00,0x00, // Glyph 73: 's'
0x00,0x00,0x00,0x10,0x10,0x7e,0x10,0x10,0x10,0x10,0x10,0x0e,0x00,0x00,0x00,0x00, // Glyph 74: 't'
0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph 75: 'u'
0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x24,0x24,0x18,0x18,0x00,0x00,0x00,0x00, // Glyph 76: 'v'
0x00,0x00,0x00,0x00,0x00,0x41,0x41,0x41,0x49,0x49,0x55,0x63,0x00,0x00,0x00,0x00, // Glyph 77: 'w'
0x00,0x00,0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41,0x00,0x00,0x00,0x00, // Glyph 78: 'x'
0x00,0x00,0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x3c,0x00, // Glyph 79: 'y'
0x00,0x00,0x00,0x00,0x00,0x7e,0x04,0x08,0x10,0x20,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph 7a: 'z'
0x00,0x0e,0x10,0x10,0x10,0x10,0x10,0xe0,0x10,0x10,0x10,0x10,0x10,0x0e,0x00,0x00, // Glyph 7b: '{'
0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, // Glyph 7c: '|'
0x00,0x70,0x08,0x08,0x08,0x08,0x08,0x07,0x08,0x08,0x08,0x08,0x08,0x70,0x00,0x00, // Glyph 7d: '}'
0x00,0x00,0x31,0x49,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 7e: '~'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 7f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 80
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 81
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 82
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 83
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 84
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 85
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 86
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 87
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 88
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 89
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8a
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8b
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8c
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8d
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8e
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 8f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 90
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 91
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 92
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 93
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 94
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 95
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 96
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 97
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 98
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 99
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9a
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9b
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9c
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9d
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9e
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph 9f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph a0
0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x00,0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00, // Glyph a1: '¡'
0x00,0x00,0x08,0x08,0x1c,0x22,0x40,0x40,0x40,0x22,0x1c,0x08,0x08,0x00,0x00,0x00, // Glyph a2: '¢'
0x00,0x00,0x00,0x1c,0x22,0x20,0x20,0xf8,0x20,0x20,0x72,0x8c,0x00,0x00,0x00,0x00, // Glyph a3: '£'
0x00,0x00,0x00,0x00,0x42,0x3c,0x24,0x24,0x24,0x3c,0x42,0x00,0x00,0x00,0x00,0x00, // Glyph a4: '¤'
0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x3e,0x08,0x3e,0x08,0x08,0x00,0x00,0x00,0x00, // Glyph a5: '¥'
0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x00,0x00, // Glyph a6: '¦'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph a7: '§'
0x22,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph a8: '¨'
0x00,0x00,0x00,0x1c,0x22,0x41,0x4d,0x51,0x51,0x4d,0x41,0x22,0x1c,0x00,0x00,0x00, // Glyph a9: '©'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph aa: 'ª'
0x00,0x00,0x00,0x00,0x00,0x09,0x12,0x24,0x48,0x24,0x12,0x09,0x00,0x00,0x00,0x00, // Glyph ab: '«'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph ac: '¬'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph ad
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph ae: '®'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph af: '¯'
0x00,0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b0: '°'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b1: '±'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b2: '²'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b3: '³'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b4: '´'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b5: 'µ'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b6: '¶'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b7: '·'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x30,0x00, // Glyph b8: '¸'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph b9: '¹'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph ba: 'º'
0x00,0x00,0x00,0x00,0x00,0x48,0x24,0x12,0x09,0x12,0x24,0x48,0x00,0x00,0x00,0x00, // Glyph bb: '»'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph bc: '¼'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph bd: '½'
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Glyph be: '¾'
0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x10,0x20,0x40,0x42,0x3c,0x00, // Glyph bf: '¿'
0x20,0x10,0x00,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c0: 'À'
0x04,0x08,0x00,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c1: 'Á'
0x18,0x24,0x00,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c2: 'Â'
0x32,0x4c,0x00,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c3: 'Ã'
0x24,0x24,0x00,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c4: 'Ä'
0x18,0x24,0x24,0x18,0x18,0x24,0x24,0x24,0x7e,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph c5: 'Å'
0x00,0x00,0x00,0x0f,0x14,0x14,0x24,0x27,0x3c,0x44,0x44,0x47,0x00,0x00,0x00,0x00, // Glyph c6: 'Æ'
0x00,0x00,0x00,0x1e,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x1e,0x08,0x08,0x30,0x00, // Glyph c7: 'Ç'
0x20,0x10,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph c8: 'È'
0x04,0x08,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph c9: 'É'
0x18,0x24,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph ca: 'Ê'
0x24,0x24,0x00,0x7e,0x40,0x40,0x40,0x7c,0x40,0x40,0x40,0x7e,0x00,0x00,0x00,0x00, // Glyph cb: 'Ë'
0x10,0x08,0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph cc: 'Ì'
0x04,0x08,0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph cd: 'Í'
0x18,0x24,0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph ce: 'Î'
0x22,0x22,0x00,0x3e,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph cf: 'Ï'
0x00,0x00,0x00,0x3c,0x22,0x21,0x21,0x79,0x21,0x21,0x22,0x3c,0x00,0x00,0x00,0x00, // Glyph d0: 'Ð'
0x32,0x4c,0x00,0x42,0x62,0x52,0x4a,0x46,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph d1: 'Ñ'
0x10,0x08,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph d2: 'Ò'
0x04,0x08,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph d3: 'Ó'
0x18,0x24,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph d4: 'Ô'
0x32,0x4c,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph d5: 'Õ'
0x24,0x24,0x00,0x1c,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph d6: 'Ö'
0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x00,0x00,0x00,0x00, // Glyph d7: '×'
0x00,0x00,0x02,0x3c,0x42,0x46,0x4a,0x52,0x62,0x42,0x42,0x3c,0x40,0x00,0x00,0x00, // Glyph d8: 'Ø'
0x20,0x10,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph d9: 'Ù'
0x04,0x08,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph da: 'Ú'
0x18,0x24,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph db: 'Û'
0x24,0x24,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph dc: 'Ü'
0x04,0x08,0x00,0x41,0x41,0x22,0x14,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x00, // Glyph dd: 'Ý'
0x00,0x00,0x00,0x40,0x40,0x7c,0x42,0x42,0x42,0x7c,0x40,0x40,0x00,0x00,0x00,0x00, // Glyph de: 'Þ'
0x00,0x00,0x00,0x3c,0x42,0x44,0x4c,0x42,0x42,0x42,0x44,0x58,0x00,0x00,0x00,0x00, // Glyph df: 'ß'
0x00,0x00,0x20,0x10,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e0: 'à'
0x00,0x00,0x04,0x08,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e1: 'á'
0x00,0x18,0x24,0x00,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e2: 'â'
0x00,0x32,0x4c,0x00,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e3: 'ã'
0x00,0x00,0x24,0x24,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e4: 'ä'
0x18,0x24,0x24,0x18,0x00,0x3c,0x02,0x02,0x3e,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph e5: 'å'
0x00,0x00,0x00,0x00,0x00,0x36,0x09,0x39,0x4f,0x48,0x48,0x37,0x00,0x00,0x00,0x00, // Glyph e6: 'æ'
0x00,0x00,0x00,0x00,0x00,0x3c,0x42,0x40,0x40,0x40,0x42,0x3c,0x08,0x08,0x30,0x00, // Glyph e7: 'ç'
0x00,0x00,0x20,0x10,0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00, // Glyph e8: 'è'
0x00,0x00,0x04,0x08,0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00, // Glyph e9: 'é'
0x00,0x18,0x24,0x00,0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00, // Glyph ea: 'ê'
0x00,0x00,0x24,0x24,0x00,0x3c,0x42,0x42,0x7e,0x40,0x40,0x3e,0x00,0x00,0x00,0x00, // Glyph eb: 'ë'
0x00,0x00,0x10,0x08,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph ec: 'ì'
0x00,0x00,0x04,0x08,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph ed: 'í'
0x00,0x18,0x24,0x00,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph ee: 'î'
0x00,0x00,0x24,0x24,0x00,0x38,0x08,0x08,0x08,0x08,0x08,0x3e,0x00,0x00,0x00,0x00, // Glyph ef: 'ï'
0x00,0x09,0x06,0x1a,0x01,0x1d,0x23,0x41,0x41,0x41,0x22,0x1c,0x00,0x00,0x00,0x00, // Glyph f0: 'ð'
0x00,0x32,0x4c,0x00,0x00,0x7c,0x42,0x42,0x42,0x42,0x42,0x42,0x00,0x00,0x00,0x00, // Glyph f1: 'ñ'
0x00,0x00,0x10,0x08,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph f2: 'ò'
0x00,0x00,0x04,0x08,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph f3: 'ó'
0x00,0x18,0x24,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph f4: 'ô'
0x00,0x32,0x4c,0x00,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph f5: 'õ'
0x00,0x00,0x24,0x24,0x00,0x3c,0x42,0x42,0x42,0x42,0x42,0x3c,0x00,0x00,0x00,0x00, // Glyph f6: 'ö'
0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x7e,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // Glyph f7: '÷'
0x00,0x00,0x00,0x00,0x02,0x3c,0x46,0x4a,0x52,0x62,0x42,0x3c,0x40,0x00,0x00,0x00, // Glyph f8: 'ø'
0x00,0x00,0x20,0x10,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph f9: 'ù'
0x00,0x00,0x04,0x08,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph fa: 'ú'
0x00,0x18,0x24,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph fb: 'û'
0x00,0x00,0x24,0x24,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x00,0x00,0x00,0x00, // Glyph fc: 'ü'
0x00,0x00,0x04,0x08,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x3c,0x00, // Glyph fd: 'ý'
0x00,0x00,0x40,0x40,0x40,0x5c,0x62,0x41,0x41,0x41,0x62,0x5c,0x40,0x40,0x40,0x00, // Glyph fe: 'þ'
0x00,0x00,0x24,0x24,0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3e,0x02,0x02,0x3c,0x00, // Glyph ff: 'ÿ'
};

View File

@@ -8,6 +8,8 @@
#include <j6libc/syscalls.h>
#include "font.h"
extern "C" {
int main(int, const char **);
void _get_init(size_t *initc, struct j6_init_value **initv);
@@ -33,6 +35,14 @@ main(int argc, const char **argv)
if (!fb)
return 1;
size_t font_size = sizeof(font_glyph_data);
if (font_size != (font_glyph_size*font_glyph_count)) {
_syscall_system_log("fb driver has wrong font data, exiting");
return 1;
}
volatile uint8_t const * p = font_glyph_data;
uint32_t *fbp = reinterpret_cast<uint32_t*>(fb->addr);
size_t size = fb->size;
for (size_t i=0; i < size/4; ++i) {