Anti aliasing + per-character speed text refreshing

This commit is contained in:
Clément Grennerat 2025-09-17 01:47:49 +02:00
parent 2c419094ae
commit cba6eadc13
5 changed files with 1264 additions and 74 deletions

View File

@ -30,7 +30,7 @@ typedef struct {
uint8_t yAdvance;// Vertical distance to advance for newline uint8_t yAdvance;// Vertical distance to advance for newline
} GFXfont; } GFXfont;
void GFX_DrawChar( uint16_t GFX_DrawChar(
uint16_t x, uint16_t x,
uint16_t y, uint16_t y,
char c, char c,
@ -38,8 +38,33 @@ void GFX_DrawChar(
uint16_t fg_color, uint16_t fg_color,
uint16_t bg_color); uint16_t bg_color);
uint16_t GFX_DrawCharScaled(
uint16_t x,
uint16_t y,
char c,
const GFXfont *font,
uint16_t fg_color,
uint16_t bg_color,
uint8_t scale);
uint16_t GFX_GetTextWidth(const char *text, const GFXfont *font, int8_t letter_spacing); uint16_t GFX_GetTextWidth(const char *text, const GFXfont *font, int8_t letter_spacing);
uint16_t GFX_ClearText(
uint16_t x,
uint16_t y,
const char *text,
const GFXfont *font,
uint16_t bg_color,
uint8_t alignment,
int8_t letter_spacing);
uint16_t GFX_ClearChar(
uint16_t x,
uint16_t y,
char c,
const GFXfont *font,
uint16_t bg_color);
// Alignment: 0 => Left, 1 => Center, 2 => Right // Alignment: 0 => Left, 1 => Center, 2 => Right
uint16_t GFX_DrawText( uint16_t GFX_DrawText(
uint16_t x, uint16_t x,
@ -51,4 +76,16 @@ uint16_t GFX_DrawText(
uint8_t alignment, uint8_t alignment,
int8_t letter_spacing); int8_t letter_spacing);
uint16_t GFX_DrawTextScaled(
uint16_t x,
uint16_t y,
const char *text,
const GFXfont *font,
uint16_t fg_color,
uint16_t bg_color,
uint8_t alignment,
int8_t letter_spacing,
uint8_t scale);
#endif #endif

View File

@ -0,0 +1,675 @@
// Created by ttf2gfx utility
const uint8_t monomaniacone27ptBitmaps[] = {
// Bitmap Data:
0x00 // ' '
,0x08,0x1E,0x0F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFC,0x7E,0x3F,0x1F,0x8F,0xC7,0xE3
,0xF1,0xF8,0xFC,0x7E,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFC,0x3E,0x1E,0x00
,0x00,0x00,0x00,0x40,0xF0,0xFC,0x7F,0x3F,0x9F,0x87,0x80,0x00 // '!'
,0x10,0x21,0xF1,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9,0xF3,0xE7,0xCF,0x9E,0x1E,0x00
,0x00 // '"'
,0x00,0x10,0x00,0x00,0x1F,0x0F,0x00,0x07,0xC7,0xE0,0x01,0xF1,0xF8,0x00,0x7C
,0x7C,0x00,0x1F,0x1F,0x00,0x0F,0xC7,0xC0,0x03,0xE1,0xF0,0x00,0xF8,0xFC,0x00
,0x3E,0x3E,0x00,0x0F,0x8F,0x80,0x07,0xE3,0xE0,0x07,0xFF,0xFE,0x07,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF8,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0x87,0xFF,0xFF,0xC0,0x3F
,0x3F,0x00,0x0F,0x8F,0xC0,0x1F,0xFF,0xF8,0x1F,0xFF,0xFF,0x87,0xFF,0xFF,0xF1
,0xFF,0xFF,0xF8,0x7F,0xFF,0xFE,0x0F,0xFF,0xFF,0x00,0xFC,0x7C,0x00,0x3F,0x1F
,0x00,0x0F,0xC7,0xC0,0x03,0xE3,0xF0,0x00,0xF8,0xFC,0x00,0x3E,0x3E,0x00,0x1F
,0x8F,0x80,0x07,0xE3,0xE0,0x01,0xF0,0xF8,0x00,0x3C,0x3C,0x00,0x04,0x02,0x00
,0x00 // '#'
,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x0F,0x80,0x00,0x3F,0xF0,0x00,0xFF,0xFF
,0x80,0xFF,0xFF,0xE0,0xFF,0xFF,0xF8,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0x3E,0x1F
,0x1F,0x9F,0x0F,0x87,0xCF,0x87,0xC3,0xE7,0xC3,0xE1,0xF3,0xE1,0xF0,0x71,0xF0
,0xF8,0x00,0xF8,0x7C,0x00,0x7E,0x7E,0x00,0x3F,0xFF,0x00,0x0F,0xFF,0x80,0x07
,0xFF,0xC0,0x01,0xFF,0xF8,0x00,0x3F,0xFF,0x80,0x07,0xFF,0xE0,0x00,0xFF,0xF8
,0x00,0x3F,0xFE,0x00,0x1F,0xFF,0x00,0x0F,0x8F,0xC0,0x07,0xC3,0xE0,0x03,0xE1
,0xF1,0xC1,0xF0,0xF9,0xF0,0xF8,0x7C,0xF8,0x7C,0x3E,0x7C,0x3E,0x1F,0x3E,0x1F
,0x1F,0x9F,0xFF,0xFF,0xCF,0xFF,0xFF,0xC3,0xFF,0xFF,0xE0,0xFF,0xFF,0xE0,0x3F
,0xFF,0xE0,0x03,0xFF,0x00,0x00,0x3E,0x00,0x00,0x1F,0x00,0x00,0x02,0x00,0x00 // '$'
,0x03,0x00,0x00,0x40,0x07,0xF8,0x00,0x7C,0x03,0xFF,0x00,0x3F,0x01,0xFF,0xE0
,0x0F,0xC0,0x7F,0xFC,0x07,0xE0,0x1F,0xFF,0x01,0xF0,0x07,0xC7,0xC0,0xFC,0x01
,0xF1,0xF0,0x3E,0x00,0x7C,0x7C,0x1F,0x80,0x1F,0x1F,0x07,0xC0,0x07,0xC7,0xC3
,0xF0,0x01,0xF1,0xF0,0xF8,0x00,0x7F,0xFC,0x7E,0x00,0x1F,0xFF,0x1F,0x00,0x07
,0xFF,0x8F,0xC0,0x00,0xFF,0xE3,0xE0,0x00,0x1F,0xF1,0xF8,0x00,0x03,0xF0,0x7C
,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x0F,0x80,0xC0,0x00,0x07,0xE3,0xFE,0x00
,0x03,0xF1,0xFF,0xC0,0x00,0xFC,0x7F,0xF0,0x00,0x7E,0x3F,0xFE,0x00,0x1F,0x8F
,0xFF,0x80,0x0F,0xC3,0xE3,0xE0,0x03,0xF0,0xF8,0xF8,0x01,0xF8,0x3E,0x3E,0x00
,0x7E,0x0F,0x8F,0x80,0x3F,0x03,0xE3,0xE0,0x0F,0xC0,0xF8,0xF8,0x07,0xE0,0x3F
,0xFE,0x01,0xF8,0x0F,0xFF,0x80,0xFC,0x01,0xFF,0xC0,0x3E,0x00,0x7F,0xF0,0x0F
,0x80,0x0F,0xF8,0x00,0x80,0x00,0x30,0x00 // '%'
,0x01,0xC0,0x00,0x07,0xFE,0x00,0x07,0xFF,0x80,0x07,0xFF,0xE0,0x07,0xFF,0xF0
,0x03,0xFF,0xFC,0x01,0xF0,0x3E,0x00,0xF8,0x1F,0x00,0x7C,0x0F,0x80,0x3E,0x07
,0xC0,0x1F,0x03,0xE0,0x0F,0x81,0xF0,0x07,0xE3,0xF8,0x01,0xFB,0xF8,0x00,0xFF
,0xFC,0x00,0x3F,0xFC,0x00,0x1F,0xFC,0x78,0x07,0xFC,0x7E,0x07,0xFC,0x3F,0x07
,0xFE,0x1F,0x03,0xFF,0x9F,0x83,0xFF,0xEF,0x81,0xFF,0xFF,0xC0,0xF8,0xFF,0xE0
,0x7C,0x7F,0xE0,0x3E,0x1F,0xF0,0x1F,0x07,0xF8,0x0F,0x81,0xFC,0x07,0xC0,0xFE
,0x03,0xE0,0x7F,0x81,0xF0,0x3F,0xC0,0xFF,0xFF,0xF0,0x7F,0xFF,0xFC,0x1F,0xFF
,0xFF,0x07,0xFF,0x9F,0x81,0xFF,0x87,0xC0,0x1C,0x00,0x80 // '&'
,0x10,0xF9,0xF3,0xE7,0xCF,0x9F,0x3C,0x00 // '''
,0x01,0x80,0xFE,0x1F,0xE3,0xFE,0x7F,0xE7,0xFC,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xFC,0x7F,0xE3,0xFE,0x1F,0xE0,0xFE,0x01,0x80 // '('
,0x10,0x07,0xF0,0x7F,0x87,0xFC,0x7F,0xC3,0xFE,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE3,0xFE,0x7F,0xC7,0xFC,0x7F,0x87,0xF0,0x10,0x00 // ')'
,0x02,0x02,0x00,0x78,0x3C,0x07,0xE3,0xF0,0x1F,0xBF,0x00,0xFF,0xF8,0x03,0xFF
,0x80,0x1F,0xFC,0x03,0xFF,0xF8,0x7F,0xFF,0xF3,0xFF,0xFF,0x9F,0xFF,0xFC,0xFF
,0xFF,0xE3,0xFF,0xFE,0x03,0xFF,0x80,0x1F,0xFC,0x00,0xFF,0xE0,0x0F,0xFF,0x80
,0x7C,0x7E,0x03,0xE3,0xF0,0x1E,0x0F,0x00,0x00,0x00,0x00 // '*'
,0x00,0x00,0x00,0x70,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0xF8,0x01,0xFF
,0xC1,0xFF,0xFC,0x7F,0xFF,0x1F,0xFF,0xE7,0xFF,0xF0,0xFF,0xF8,0x03,0xE0,0x00
,0xF8,0x00,0x3E,0x00,0x0F,0x80,0x03,0xE0,0x00,0x20,0x00 // '+'
,0x00,0x1E,0x1F,0x8F,0xC7,0xF3,0xF1,0xF8,0xFC,0x7C,0x3E,0x1E,0x02,0x00 // ','
,0x00,0x00,0x0F,0xFF,0x87,0xFF,0xF1,0xFF,0xFE,0x7F,0xFF,0x1F,0xFF,0xC1,0xFF
,0xC0 // '-'
,0x00,0x04,0x0F,0x0F,0xC7,0xE3,0xF1,0xF8,0x78,0x00,0x00 // '.'
,0x00,0x00,0x08,0x00,0x00,0x0F,0x00,0x00,0x0F,0xC0,0x00,0x07,0xC0,0x00,0x07
,0xE0,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00,0x01
,0xF8,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00
,0x3F,0x00,0x00,0x3F,0x00,0x00,0x1F,0x00,0x00,0x1F,0x80,0x00,0x0F,0x80,0x00
,0x0F,0xC0,0x00,0x07,0xC0,0x00,0x07,0xE0,0x00,0x03,0xE0,0x00,0x03,0xF0,0x00
,0x01,0xF0,0x00,0x01,0xF8,0x00,0x00,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00
,0x00,0x7E,0x00,0x00,0x3E,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80
,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x00,0x80,0x00,0x00 // '/'
,0x01,0xFF,0x80,0x07,0xFF,0xF8,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x07,0xFC,0xF8,0x03,0xFE,0x7C,0x03,0xFF,0x3E,0x01
,0xFF,0x9F,0x01,0xFF,0xCF,0x80,0xFF,0xE7,0xC0,0xFF,0xF3,0xE0,0x7F,0xF9,0xF0
,0x7E,0xFC,0xF8,0x3F,0x3E,0x7C,0x3F,0x1F,0x3E,0x1F,0x8F,0x9F,0x1F,0x87,0xCF
,0x8F,0xC3,0xE7,0xCF,0xC1,0xF3,0xE7,0xE0,0xF9,0xFF,0xE0,0x7C,0xFF,0xF0,0x3E
,0x7F,0xF0,0x1F,0x3F,0xF0,0x0F,0x9F,0xF8,0x07,0xCF,0xF8,0x03,0xE7,0xFC,0x01
,0xF3,0xFC,0x00,0xF9,0xFE,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '0'
,0x01,0x80,0x3F,0x03,0xFC,0x3F,0xE3,0xFF,0x3F,0xF9,0xFF,0xCF,0xFE,0x7F,0xF3
,0x9F,0x80,0xFC,0x07,0xE0,0x3F,0x01,0xF8,0x0F,0xC0,0x7E,0x03,0xF0,0x1F,0x80
,0xFC,0x07,0xE0,0x3F,0x01,0xF8,0x0F,0xC0,0x7E,0x03,0xF0,0x1F,0x80,0xFC,0x07
,0xE0,0x3F,0x01,0xF8,0x0F,0xC0,0x7E,0x03,0xF0,0x1F,0x80,0xFC,0x03,0xC0,0x00
,0x00 // '1'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x8E,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x01,0xF0,0x00,0x01,0xF8,0x00
,0x07,0xF8,0x00,0x0F,0xFC,0x00,0x3F,0xFC,0x00,0x7F,0xFC,0x01,0xFF,0xFC,0x03
,0xFF,0xF0,0x03,0xFF,0xE0,0x01,0xFF,0x80,0x01,0xFE,0x00,0x00,0xFC,0x00,0x00
,0x7C,0x00,0x00,0x3E,0x00,0x00,0x1F,0x00,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00
,0x03,0xE0,0x00,0x01,0xF0,0x00,0x00,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0x1F,0xFF
,0xFF,0x87,0xFF,0xFF,0xC1,0xFF,0xFF,0xC0,0x1F,0xFF,0xC0 // '2'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x8E,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x01,0xF0,0x00,0x00,0xF8,0x00
,0x00,0x7C,0x00,0x00,0x7E,0x03,0xFF,0xFE,0x03,0xFF,0xFF,0x01,0xFF,0xFF,0x80
,0xFF,0xFF,0xC0,0x3F,0xFF,0xE0,0x07,0xFF,0xF8,0x00,0x00,0x7C,0x00,0x00,0x3E
,0x00,0x00,0x1F,0x00,0x00,0x0F,0x8E,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '3'
,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x00,0x00,0x7E,0x00,0x00,0x3F
,0x00,0x00,0x1F,0x80,0x07,0x0F,0xC0,0x07,0xC7,0xE0,0x03,0xE3,0xF0,0x03,0xF1
,0xF8,0x01,0xF0,0xFC,0x01,0xF8,0x7E,0x00,0xF8,0x3F,0x00,0xFC,0x1F,0x80,0x7C
,0x0F,0xC0,0x7E,0x07,0xE0,0x3E,0x03,0xF0,0x3F,0x01,0xF8,0x1F,0x00,0xFC,0x0F
,0x80,0x7E,0x07,0xC0,0x3F,0x03,0xE0,0x1F,0x81,0xF0,0x0F,0xC0,0xF8,0x07,0xE0
,0x7F,0xFF,0xFE,0x3F,0xFF,0xFF,0x9F,0xFF,0xFF,0xCF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xE0,0xFF,0xFF,0xE0,0x00,0x0F,0xC0,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x01
,0xF8,0x00,0x00,0xFC,0x00,0x00,0x3C,0x00,0x00,0x00,0x00 // '4'
,0x1F,0xFF,0xFC,0x3F,0xFF,0xFF,0x1F,0xFF,0xFF,0xCF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xF3,0xFF,0xFF,0xF1,0xF0,0x00,0x00,0xF8,0x00,0x00,0x7C,0x00,0x00,0x3E,0x00
,0x00,0x1F,0x00,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x01,0xFF
,0xFE,0x00,0xFF,0xFF,0xF0,0x7F,0xFF,0xFC,0x3F,0xFF,0xFF,0x1F,0xFF,0xFF,0x87
,0xFF,0xFF,0xE0,0x00,0x03,0xF0,0x00,0x00,0xF8,0x00,0x00,0x7C,0x00,0x00,0x3E
,0x38,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '5'
,0x01,0xFF,0x80,0x07,0xFF,0xF8,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x03,0x8F,0x80,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x01,0xFF
,0xFE,0x00,0xFF,0xFF,0xF0,0x7F,0xFF,0xFC,0x3F,0xFF,0xFF,0x1F,0xFF,0xFF,0x8F
,0xFF,0xFF,0xE7,0xC0,0x03,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0x7C,0xF8,0x00,0x3E
,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '6'
,0x1F,0xFF,0xFC,0x3F,0xFF,0xFF,0x1F,0xFF,0xFF,0xCF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xF3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x8E,0x00,0x07,0xC0,0x00,0x07,0xE0,0x00,0x03,0xE0,0x00,0x01,0xF0,0x00
,0x01,0xF8,0x00,0x00,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x3E,0x00
,0x00,0x3F,0x00,0x00,0x1F,0x00,0x00,0x0F,0x80,0x00,0x0F,0xC0,0x00,0x07,0xC0
,0x00,0x07,0xE0,0x00,0x03,0xE0,0x00,0x01,0xF0,0x00,0x01,0xF8,0x00,0x00,0xF8
,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x3E,0x00,0x00,0x3F,0x00,0x00,0x1F
,0x00,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x00,0x80,0x00 // '7'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0
,0x00,0x7C,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF,0xFF,0x0F,0xFF,0xFF,0x8F
,0xFF,0xFF,0xC7,0xFF,0xFF,0xF3,0xE0,0x01,0xF9,0xF0,0x00,0x7C,0xF8,0x00,0x3E
,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '8'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0
,0x00,0x7C,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3F,0xFF,0xFF,0x9F,0xFF,0xFF,0xC7
,0xFF,0xFF,0xE3,0xFF,0xFF,0xF0,0x7F,0xFF,0xF8,0x1F,0xFF,0xFC,0x00,0x00,0x3E
,0x00,0x00,0x1F,0x00,0x00,0x0F,0x8E,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // '9'
,0x00,0x04,0x0F,0x0F,0xC7,0xE3,0xF1,0xF8,0x78,0x00,0x00,0x00,0x00,0x01,0x81
,0xE1,0xF8,0xFE,0x7E,0x3F,0x0F,0x00,0x00 // ':'
,0x00,0x1E,0x1F,0x8F,0xC7,0xF3,0xF1,0xF8,0xFC,0x7C,0x3E,0x1E,0x02,0x00 // ','
,0x00,0x00,0x08,0x00,0x00,0x0F,0x00,0x00,0x0F,0xC0,0x00,0x07,0xC0,0x00,0x07
,0xE0,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00,0x01
,0xF8,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00
,0x3F,0x00,0x00,0x3F,0x00,0x00,0x1F,0x00,0x00,0x1F,0x80,0x00,0x0F,0x80,0x00
,0x0F,0xC0,0x00,0x07,0xC0,0x00,0x07,0xE0,0x00,0x03,0xE0,0x00,0x03,0xF0,0x00
,0x01,0xF0,0x00,0x01,0xF8,0x00,0x00,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00
,0x00,0x7E,0x00,0x00,0x3E,0x00,0x00,0x3F,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80
,0x00,0x0F,0x80,0x00,0x07,0xC0,0x00,0x00,0x80,0x00,0x00 // '/'
,0x03,0x00,0x00,0x40,0x07,0xF8,0x00,0x7C,0x03,0xFF,0x00,0x3F,0x01,0xFF,0xE0
,0x0F,0xC0,0x7F,0xFC,0x07,0xE0,0x1F,0xFF,0x01,0xF0,0x07,0xC7,0xC0,0xFC,0x01
,0xF1,0xF0,0x3E,0x00,0x7C,0x7C,0x1F,0x80,0x1F,0x1F,0x07,0xC0,0x07,0xC7,0xC3
,0xF0,0x01,0xF1,0xF0,0xF8,0x00,0x7F,0xFC,0x7E,0x00,0x1F,0xFF,0x1F,0x00,0x07
,0xFF,0x8F,0xC0,0x00,0xFF,0xE3,0xE0,0x00,0x1F,0xF1,0xF8,0x00,0x03,0xF0,0x7C
,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x0F,0x80,0xC0,0x00,0x07,0xE3,0xFE,0x00
,0x03,0xF1,0xFF,0xC0,0x00,0xFC,0x7F,0xF0,0x00,0x7E,0x3F,0xFE,0x00,0x1F,0x8F
,0xFF,0x80,0x0F,0xC3,0xE3,0xE0,0x03,0xF0,0xF8,0xF8,0x01,0xF8,0x3E,0x3E,0x00
,0x7E,0x0F,0x8F,0x80,0x3F,0x03,0xE3,0xE0,0x0F,0xC0,0xF8,0xF8,0x07,0xE0,0x3F
,0xFE,0x01,0xF8,0x0F,0xFF,0x80,0xFC,0x01,0xFF,0xC0,0x3E,0x00,0x7F,0xF0,0x0F
,0x80,0x0F,0xF8,0x00,0x80,0x00,0x30,0x00 // '%'
,0x07,0xE0,0x3F,0xF8,0x7F,0xFC,0x7F,0xFC,0x7F,0xFE,0x7F,0xFE,0x7C,0x7E,0x7C
,0x7E,0x7C,0x7E,0x7C,0x7E,0x7C,0x7E,0x7C,0x7E,0x7C,0x7E,0x7C,0x7E,0x7C,0x7E
,0x7C,0x7E,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x7F,0xFC,0x3F,0xF8,0x07,0xE0 // 'º'
,0x01,0xFF,0x80,0x07,0xFF,0xF8,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0x80,0x01,0xF0,0x00,0x01,0xF8,0x00
,0x07,0xF8,0x00,0x0F,0xFC,0x00,0x0F,0xFC,0x00,0x0F,0xFC,0x00,0x0F,0xFC,0x00
,0x07,0xF0,0x00,0x03,0xE0,0x00,0x01,0xF0,0x00,0x00,0xF8,0x00,0x00,0x7C,0x00
,0x00,0x3E,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x40,0x00,0x00,0xF8,0x00,0x00,0xFC,0x00,0x00,0x7F,0x00,0x00,0x3F
,0x80,0x00,0x1F,0x80,0x00,0x07,0x80,0x00,0x00,0x00,0x00 // '?'
,0x01,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF
,0xFC,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x7C,0x00,0x00,0x3E,0x7C,0x00
,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x03,0x00,0x3E,0x7C,0x1F,0xFE,0x3E,0x7C
,0x3F,0xFF,0x3E,0x7C,0x7F,0xFF,0x3E,0x7C,0x7F,0xFF,0x3E,0x7C,0x7F,0xFE,0x3E
,0x7C,0x7C,0xFC,0x3E,0x7C,0x7C,0xFC,0x3E,0x7C,0x7C,0xFC,0x3E,0x7C,0x7C,0xFC
,0x3E,0x7C,0x7C,0xFC,0x3E,0x7C,0x7C,0xFC,0x3E,0x7C,0x7C,0xFC,0x3E,0x7C,0x7F
,0xFF,0xFE,0x7C,0x7F,0xFF,0xFE,0x7C,0x7F,0xFF,0xFE,0x7C,0x3F,0xFF,0xFC,0x7C
,0x1F,0xFF,0xF8,0x7C,0x0F,0xFF,0xF0,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00
,0x7C,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xC0,0x7F,0xFF,0xFF,0xE0,0x3F,0xFF,0xFF
,0xE0,0x1F,0xFF,0xFF,0xE0,0x0F,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x80 // '@'
,0x00,0x03,0x00,0x00,0x00,0x7C,0x00,0x00,0x03,0xF0,0x00,0x00,0x1F,0x80,0x00
,0x01,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x7F,0x80,0x00,0x07,0xFC,0x00,0x00
,0x3F,0xF0,0x00,0x01,0xFF,0x80,0x00,0x1F,0xFC,0x00,0x00,0xFF,0xF0,0x00,0x07
,0xFF,0x80,0x00,0x7E,0x7C,0x00,0x03,0xF3,0xF0,0x00,0x1F,0x0F,0x80,0x01,0xF8
,0x7C,0x00,0x0F,0xC3,0xF0,0x00,0x7C,0x0F,0x80,0x07,0xE0,0x7C,0x00,0x3F,0x03
,0xF0,0x01,0xF0,0x1F,0x80,0x1F,0xFF,0xFC,0x00,0xFF,0xFF,0xF0,0x07,0xFF,0xFF
,0x80,0x3F,0xFF,0xFC,0x03,0xFF,0xFF,0xF0,0x1F,0xFF,0xFF,0x80,0xF8,0x00,0x7C
,0x0F,0xC0,0x03,0xF0,0x7C,0x00,0x1F,0x83,0xE0,0x00,0x7C,0x3F,0x00,0x03,0xF1
,0xF0,0x00,0x1F,0x8F,0x80,0x00,0x7C,0x7C,0x00,0x03,0xE0,0x80,0x00,0x04,0x00 // 'A'
,0x1F,0xFF,0x00,0x7F,0xFF,0xE0,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0xFF,0xFC
,0x7F,0xFF,0xFC,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C
,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C,0x7C,0x00,0x7C
,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE
,0x7F,0xFF,0xFE,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xF8
,0x7F,0xFF,0xF0,0x1F,0xFF,0x00 // 'B'
,0x01,0xFF,0x00,0x0F,0xFF,0xF0,0x1F,0xFF,0xF8,0x3F,0xFF,0xFC,0x7F,0xFF,0xFC
,0x7F,0xFF,0xFE,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x1C,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x1C,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x3F,0xFF,0xFC,0x1F,0xFF,0xF8
,0x0F,0xFF,0xF0,0x01,0xFF,0x00 // 'C'
,0x1F,0xFF,0x00,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC
,0x7F,0xFF,0xFE,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xF8
,0x7F,0xFF,0xF0,0x1F,0xFF,0x00 // 'D'
,0x1F,0xFF,0xF0,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC
,0x7F,0xFF,0xFC,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0xFF,0xF8,0x7F,0xFF,0xF8
,0x7F,0xFF,0xF0,0x7F,0xFF,0xE0,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE
,0x7F,0xFF,0xFC,0x1F,0xFF,0xF0 // 'E'
,0x1F,0xFF,0xF0,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC
,0x7F,0xFF,0xFC,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0xFF,0xF8,0x7F,0xFF,0xF8
,0x7F,0xFF,0xF0,0x7F,0xFF,0xE0,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x78,0x00,0x00,0x10,0x00,0x00 // 'F'
,0x01,0xFF,0x80,0x07,0xFF,0xF8,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x03,0x8F,0x80,0x00,0x07,0xC0,0x00,0x03,0xE0,0x00,0x01,0xF0
,0x00,0x00,0xF8,0x00,0x00,0x7C,0x07,0xFE,0x3E,0x07,0xFF,0x9F,0x03,0xFF,0xCF
,0x81,0xFF,0xE7,0xC0,0xFF,0xF3,0xE0,0x1F,0xF9,0xF0,0x00,0x7C,0xF8,0x00,0x3E
,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // 'G'
,0x10,0x00,0x08,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE
,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x10,0x00,0x08 // 'H'
,0x10,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C
,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9,0xF3,0xE7,0xCF,0x9F,0x3E,0x7C,0xF9
,0xF3,0xE1,0x00 // 'I'
,0x00,0x00,0x08,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E
,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E
,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E
,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E
,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x78,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x3F,0xFF,0xFC,0x1F,0xFF,0xF8
,0x0F,0xFF,0xF0,0x01,0xFF,0x00 // 'J'
,0x10,0x00,0x10,0x7C,0x00,0x7C,0x7C,0x00,0xFE,0x7C,0x00,0xFC,0x7C,0x01,0xF8
,0x7C,0x03,0xF0,0x7C,0x07,0xF0,0x7C,0x0F,0xE0,0x7C,0x1F,0xC0,0x7C,0x3F,0x80
,0x7C,0x7F,0x00,0x7C,0x7E,0x00,0x7C,0xFC,0x00,0x7F,0xF8,0x00,0x7F,0xF8,0x00
,0x7F,0xF0,0x00,0x7F,0xE0,0x00,0x7F,0xC0,0x00,0x7F,0xC0,0x00,0x7F,0xC0,0x00
,0x7F,0xE0,0x00,0x7F,0xF0,0x00,0x7F,0xF8,0x00,0x7F,0xF8,0x00,0x7C,0xFC,0x00
,0x7C,0xFE,0x00,0x7C,0x7F,0x00,0x7C,0x3F,0x80,0x7C,0x1F,0xC0,0x7C,0x0F,0xE0
,0x7C,0x07,0xF0,0x7C,0x03,0xF0,0x7C,0x01,0xF8,0x7C,0x01,0xFC,0x7C,0x00,0xFE
,0x7C,0x00,0x7C,0x10,0x00,0x10 // 'K'
,0x10,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE
,0x7F,0xFF,0xFC,0x1F,0xFF,0xF0 // 'L'
,0x10,0x00,0x00,0x03,0xE0,0x00,0x0F,0x1F,0x00,0x00,0xFC,0xFC,0x00,0x07,0xE7
,0xE0,0x00,0x7F,0x3F,0x80,0x03,0xF9,0xFC,0x00,0x3F,0xCF,0xF0,0x01,0xFE,0x7F
,0x80,0x1F,0xF3,0xFE,0x00,0xFF,0x9F,0xF0,0x0F,0xFC,0xFF,0x80,0x7F,0xE7,0xFE
,0x07,0xFF,0x3F,0xF0,0x3F,0xF9,0xFF,0xC3,0xFF,0xCF,0xFE,0x1F,0xFE,0x7F,0xF9
,0xFF,0xF3,0xFF,0xCF,0xDF,0x9F,0x3F,0xFE,0xFC,0xF9,0xFF,0xE7,0xE7,0xC7,0xFF
,0x3F,0x3E,0x3F,0xF1,0xF9,0xF0,0xFF,0x8F,0xCF,0x87,0xF8,0x7E,0x7C,0x1F,0xC3
,0xF3,0xE0,0xFC,0x1F,0x9F,0x03,0xE0,0xFC,0xF8,0x1E,0x07,0xE7,0xC0,0x70,0x3F
,0x3E,0x00,0x01,0xF9,0xF0,0x00,0x0F,0xCF,0x80,0x00,0x7E,0x7C,0x00,0x03,0xF3
,0xE0,0x00,0x1F,0x9F,0x00,0x00,0xFC,0xF8,0x00,0x03,0xC1,0x00,0x00,0x00,0x00 // 'M'
,0x10,0x00,0x04,0x3E,0x00,0x0F,0x1F,0x00,0x07,0xCF,0xC0,0x03,0xE7,0xE0,0x01
,0xF3,0xF8,0x00,0xF9,0xFE,0x00,0x7C,0xFF,0x00,0x3E,0x7F,0xC0,0x1F,0x3F,0xE0
,0x0F,0x9F,0xF8,0x07,0xCF,0xFC,0x03,0xE7,0xFF,0x01,0xF3,0xFF,0xC0,0xF9,0xFF
,0xE0,0x7C,0xFF,0xF8,0x3E,0x7C,0xFC,0x1F,0x3E,0x7F,0x0F,0x9F,0x1F,0xC7,0xCF
,0x87,0xE3,0xE7,0xC3,0xF9,0xF3,0xE0,0xFF,0xF9,0xF0,0x7F,0xFC,0xF8,0x1F,0xFE
,0x7C,0x07,0xFF,0x3E,0x03,0xFF,0x9F,0x00,0xFF,0xCF,0x80,0x7F,0xE7,0xC0,0x1F
,0xF3,0xE0,0x0F,0xF9,0xF0,0x03,0xFC,0xF8,0x00,0xFE,0x7C,0x00,0x7F,0x3E,0x00
,0x1F,0x9F,0x00,0x0F,0xCF,0x80,0x03,0xC1,0x00,0x00,0x40 // 'N'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0
,0x00,0x7C,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF
,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0x7C,0xF8,0x00,0x3E
,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // 'O'
,0x1F,0xFF,0x80,0x7F,0xFF,0xF0,0x7F,0xFF,0xF8,0x7F,0xFF,0xFC,0x7F,0xFF,0xFE
,0x7F,0xFF,0xFE,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x7F,0xFF,0xFC
,0x7F,0xFF,0xF0,0x7F,0xFF,0xE0,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00
,0x78,0x00,0x00,0x10,0x00,0x00 // 'P'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0
,0x00,0x7C,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00,0x0F,0x9F,0x00,0x07,0xCF
,0x80,0x03,0xE7,0xC0,0x01,0xF3,0xE0,0x00,0xF9,0xF0,0x70,0x7C,0xF8,0x7C,0x3E
,0x7C,0x3F,0x1F,0x3E,0x1F,0xCF,0x9F,0x07,0xFF,0xCF,0x81,0xFF,0xE7,0xC0,0x7F
,0xF3,0xE0,0x3F,0xF9,0xF0,0x0F,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0x1F,0xFF
,0xFF,0x87,0xFF,0xFF,0xC1,0xFF,0xFF,0xC0,0x1F,0xFF,0xC0 // 'Q'
,0x1F,0xFF,0x80,0x3F,0xFF,0xF8,0x1F,0xFF,0xFE,0x0F,0xFF,0xFF,0x87,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF1,0xF0,0x00,0xF8,0xF8,0x00,0x7C,0x7C,0x00,0x3E,0x3E,0x00
,0x1F,0x1F,0x00,0x0F,0x8F,0x80,0x07,0xC7,0xC0,0x03,0xE3,0xE0,0x01,0xF1,0xF0
,0x00,0xF8,0xF8,0x00,0x7C,0x7F,0xFF,0xFE,0x3F,0xFF,0xFF,0x1F,0xFF,0xFF,0x8F
,0xFF,0xFF,0x87,0xFF,0xFF,0x83,0xFF,0xFF,0x01,0xF0,0x1F,0x80,0xF8,0x07,0xC0
,0x7C,0x03,0xF0,0x3E,0x00,0xF8,0x1F,0x00,0x7E,0x0F,0x80,0x1F,0x07,0xC0,0x0F
,0x83,0xE0,0x07,0xE1,0xF0,0x01,0xF0,0xF8,0x00,0xFC,0x7C,0x00,0x3E,0x3E,0x00
,0x1F,0x1F,0x00,0x0F,0xCF,0x80,0x03,0xC1,0x00,0x00,0x40 // 'R'
,0x01,0xFF,0x80,0x07,0xFF,0xFC,0x07,0xFF,0xFF,0x07,0xFF,0xFF,0xC7,0xFF,0xFF
,0xE3,0xFF,0xFF,0xF9,0xF0,0x00,0xFC,0xF8,0x00,0x3E,0x7C,0x00,0x1F,0x3E,0x00
,0x0F,0x9F,0x00,0x03,0x0F,0x80,0x00,0x07,0xC0,0x00,0x03,0xF0,0x00,0x01,0xFE
,0x00,0x00,0x7F,0xE0,0x00,0x3F,0xFC,0x00,0x0F,0xFF,0xC0,0x01,0xFF,0xFC,0x00
,0x3F,0xFF,0x00,0x03,0xFF,0xC0,0x00,0x7F,0xF0,0x00,0x07,0xF8,0x00,0x00,0x7E
,0x00,0x00,0x1F,0x00,0x00,0x0F,0x8E,0x00,0x07,0xCF,0x80,0x03,0xE7,0xC0,0x01
,0xF3,0xE0,0x00,0xF9,0xF0,0x00,0xFC,0xFF,0xFF,0xFE,0x7F,0xFF,0xFE,0x1F,0xFF
,0xFF,0x07,0xFF,0xFF,0x01,0xFF,0xFF,0x00,0x1F,0xF8,0x00 // 'S'
,0x1F,0xFF,0xF8,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE,0x7F,0xFF,0xFE
,0x3F,0xFF,0xFC,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00
,0x00,0x3C,0x00,0x00,0x00,0x00 // 'T'
,0x10,0x00,0x08,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E,0x7C,0x00,0x3E
,0x7C,0x00,0x3E,0x7F,0xFF,0xFE,0x7F,0xFF,0xFC,0x3F,0xFF,0xFC,0x1F,0xFF,0xF8
,0x0F,0xFF,0xF0,0x01,0xFF,0x00 // 'U'
,0x08,0x00,0x00,0x41,0xF0,0x00,0x0F,0x8F,0x80,0x00,0x7C,0x7C,0x00,0x07,0xE3
,0xF0,0x00,0x3F,0x0F,0x80,0x01,0xF0,0x7C,0x00,0x1F,0x83,0xF0,0x00,0xFC,0x0F
,0x80,0x07,0xC0,0x7C,0x00,0x7E,0x03,0xF0,0x03,0xF0,0x0F,0x80,0x1F,0x00,0x7C
,0x01,0xF8,0x03,0xF0,0x0F,0xC0,0x1F,0x80,0x7C,0x00,0x7C,0x07,0xE0,0x03,0xF0
,0x3F,0x00,0x1F,0x81,0xF0,0x00,0x7C,0x1F,0x80,0x03,0xF0,0xFC,0x00,0x1F,0x87
,0xC0,0x00,0x7C,0x7E,0x00,0x03,0xF3,0xF0,0x00,0x1F,0x9F,0x00,0x00,0x7F,0xF8
,0x00,0x03,0xFF,0xC0,0x00,0x1F,0xFC,0x00,0x00,0x7F,0xE0,0x00,0x03,0xFF,0x00
,0x00,0x1F,0xF0,0x00,0x00,0x7F,0x80,0x00,0x03,0xFC,0x00,0x00,0x1F,0xE0,0x00
,0x00,0x7E,0x00,0x00,0x03,0xF0,0x00,0x00,0x1F,0x00,0x00,0x00,0x30,0x00,0x00 // 'V'
,0x08,0x00,0x00,0x00,0x41,0xF0,0x00,0x00,0x0F,0x0F,0x80,0x00,0x00,0xFC,0x7C
,0x00,0x00,0x07,0xE3,0xE0,0x00,0x00,0x3E,0x1F,0x80,0x00,0x01,0xF0,0xFC,0x00
,0x00,0x0F,0x83,0xE0,0x0E,0x00,0xFC,0x1F,0x00,0x78,0x07,0xC0,0xFC,0x07,0xC0
,0x3E,0x07,0xE0,0x3E,0x01,0xF0,0x1F,0x01,0xF8,0x1F,0x80,0xF8,0x0F,0xC0,0xFC
,0x07,0xC0,0xFE,0x07,0xC0,0x3F,0x07,0xF0,0x3E,0x01,0xF8,0x3F,0xC3,0xF0,0x07
,0xC3,0xFE,0x1F,0x80,0x3E,0x1F,0xF0,0xF8,0x01,0xF8,0xFF,0xC7,0xC0,0x0F,0xCF
,0xFE,0x3E,0x00,0x3E,0x7F,0xF3,0xF0,0x01,0xF3,0xFF,0xDF,0x80,0x0F,0xFF,0xFF
,0xF8,0x00,0x7F,0xFB,0xFF,0xC0,0x03,0xFF,0xCF,0xFE,0x00,0x0F,0xFC,0x7F,0xF0
,0x00,0x7F,0xE3,0xFF,0x00,0x03,0xFF,0x0F,0xF8,0x00,0x1F,0xF0,0x7F,0xC0,0x00
,0x7F,0x83,0xFE,0x00,0x03,0xFC,0x0F,0xF0,0x00,0x1F,0xC0,0x7F,0x00,0x00,0xFE
,0x03,0xF8,0x00,0x07,0xF0,0x0F,0xC0,0x00,0x1F,0x00,0x7E,0x00,0x00,0xF8,0x03
,0xE0,0x00,0x01,0x00,0x04,0x00,0x00 // 'W'
,0x08,0x00,0x08,0x1F,0x00,0x0F,0x0F,0x80,0x0F,0xC7,0xE0,0x0F,0xC3,0xF0,0x07
,0xE0,0xFC,0x07,0xE0,0x3E,0x03,0xF0,0x1F,0x83,0xF0,0x07,0xC1,0xF8,0x03,0xF1
,0xF8,0x00,0xFC,0xFC,0x00,0x7F,0xFC,0x00,0x1F,0xFE,0x00,0x0F,0xFE,0x00,0x03
,0xFF,0x00,0x01,0xFF,0x00,0x00,0x7F,0x00,0x00,0x3F,0x80,0x00,0x1F,0xC0,0x00
,0x0F,0xE0,0x00,0x07,0xF8,0x00,0x07,0xFC,0x00,0x03,0xFF,0x00,0x03,0xFF,0x80
,0x01,0xFF,0xE0,0x01,0xFF,0xF0,0x00,0xFC,0xFC,0x00,0xFC,0x7E,0x00,0x7C,0x1F
,0x80,0x7E,0x0F,0xC0,0x3E,0x03,0xF0,0x3F,0x01,0xF8,0x1F,0x00,0x7E,0x1F,0x80
,0x3F,0x0F,0x80,0x0F,0xC7,0xC0,0x03,0xC0,0x80,0x00,0x80 // 'X'
,0x08,0x00,0x00,0x41,0xF0,0x00,0x0F,0x8F,0x80,0x00,0xFC,0x7E,0x00,0x07,0xE1
,0xF8,0x00,0x7E,0x0F,0xC0,0x07,0xE0,0x3F,0x00,0x3F,0x01,0xF8,0x03,0xF0,0x07
,0xE0,0x3F,0x80,0x1F,0x81,0xF8,0x00,0xFC,0x1F,0x80,0x03,0xF0,0xFC,0x00,0x1F
,0xCF,0xC0,0x00,0x7F,0xFE,0x00,0x01,0xFF,0xE0,0x00,0x0F,0xFE,0x00,0x00,0x3F
,0xF0,0x00,0x01,0xFF,0x00,0x00,0x07,0xF8,0x00,0x00,0x3F,0x80,0x00,0x00,0xFC
,0x00,0x00,0x07,0xC0,0x00,0x00,0x3E,0x00,0x00,0x01,0xF0,0x00,0x00,0x0F,0x80
,0x00,0x00,0x7C,0x00,0x00,0x03,0xE0,0x00,0x00,0x1F,0x00,0x00,0x00,0xF8,0x00
,0x00,0x07,0xC0,0x00,0x00,0x3E,0x00,0x00,0x01,0xF0,0x00,0x00,0x0F,0x80,0x00
,0x00,0x7C,0x00,0x00,0x03,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x20,0x00,0x00 // 'Y'
,0x0F,0xFF,0xFC,0x0F,0xFF,0xFF,0xC3,0xFF,0xFF,0xF0,0xFF,0xFF,0xFC,0x3F,0xFF
,0xFE,0x07,0xFF,0xFF,0x80,0x00,0x0F,0xC0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00
,0x00,0x7E,0x00,0x00,0x3F,0x00,0x00,0x0F,0xC0,0x00,0x07,0xE0,0x00,0x01,0xF8
,0x00,0x00,0xFC,0x00,0x00,0x3E,0x00,0x00,0x1F,0x80,0x00,0x07,0xC0,0x00,0x03
,0xF0,0x00,0x01,0xF8,0x00,0x00,0x7E,0x00,0x00,0x3F,0x00,0x00,0x0F,0xC0,0x00
,0x07,0xE0,0x00,0x01,0xF8,0x00,0x00,0xFC,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80
,0x00,0x07,0xC0,0x00,0x03,0xF0,0x00,0x00,0xFC,0x00,0x00,0x7F,0xFF,0xF8,0x1F
,0xFF,0xFF,0x0F,0xFF,0xFF,0xC3,0xFF,0xFF,0xF0,0xFF,0xFF,0xF8,0x0F,0xFF,0xFC
,0x00 // 'Z'
,0x1F,0x87,0xFE,0x7F,0xE7,0xFE,0x7F,0xE7,0xFC,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0
,0x7C,0x07,0xFC,0x7F,0xE7,0xFE,0x7F,0xE7,0xFE,0x1F,0x80 // '['
,0x08,0x00,0x00,0x1F,0x00,0x00,0x0F,0x80,0x00,0x07,0xE0,0x00,0x01,0xF0,0x00
,0x00,0xFC,0x00,0x00,0x3E,0x00,0x00,0x1F,0x80,0x00,0x07,0xC0,0x00,0x03,0xF0
,0x00,0x00,0xF8,0x00,0x00,0x7E,0x00,0x00,0x1F,0x00,0x00,0x0F,0xC0,0x00,0x03
,0xE0,0x00,0x01,0xF8,0x00,0x00,0x7C,0x00,0x00,0x3F,0x00,0x00,0x0F,0x80,0x00
,0x07,0xE0,0x00,0x01,0xF8,0x00,0x00,0xFC,0x00,0x00,0x3F,0x00,0x00,0x1F,0x80
,0x00,0x07,0xE0,0x00,0x03,0xF0,0x00,0x00,0xFC,0x00,0x00,0x7E,0x00,0x00,0x1F
,0x80,0x00,0x0F,0xC0,0x00,0x03,0xF0,0x00,0x01,0xF8,0x00,0x00,0x7E,0x00,0x00
,0x1F,0x00,0x00,0x0F,0xC0,0x00,0x03,0xC0,0x00,0x00,0xC0 // '\'
,0x1F,0x87,0xFE,0x7F,0xE7,0xFE,0x7F,0xE3,0xFE,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E,0x03,0xE0,0x3E
,0x03,0xE3,0xFE,0x7F,0xE7,0xFE,0x7F,0xE7,0xFE,0x1F,0x80 // ']'
,0x00,0x00,0x07,0x00,0x1F,0x00,0x7F,0x01,0xFF,0x07,0xFF,0x1F,0xFF,0x3F,0xFE
,0x7C,0x7C,0xF0,0x79,0xC0,0x70,0x00,0x00 // '^'
,0x00,0x00,0x01,0xFF,0xFF,0x1F,0xFF,0xFC,0xFF,0xFF,0xE7,0xFF,0xFF,0x3F,0xFF
,0xF8,0x7F,0xFF,0x00 // '_'
,0x00,0x0F,0x03,0xE0,0xF8,0x3F,0x07,0xC1,0xF0,0x7C,0x04,0x00 // '`'
,0x03,0xF8,0x00,0x7F,0xF0,0x0F,0xFF,0x80,0xFF,0xFC,0x0F,0xFF,0xC0,0x7F,0xFE
,0x00,0x07,0xE0,0x00,0x3E,0x00,0x03,0xE0,0x00,0x3E,0x03,0xFF,0xE1,0xFF,0xFE
,0x3F,0xFF,0xE7,0xFF,0xFE,0x7F,0xFF,0xE7,0xFF,0xFE,0x7C,0x07,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0xFF,0x00,0x3F,0x80 // 'a'
,0x10,0x00,0x07,0x80,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xFF,0x80,0x7F,0xFF,0x07,0xFF,0xF8
,0x7F,0xFF,0xC7,0xFF,0xFC,0x7F,0xFF,0xE7,0xC0,0x7E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x07,0xE7,0xFF,0xFE,0x7F,0xFF,0xE7,0xFF,0xFC,0x3F,0xFF,0x81,0xFF,0xF0
,0x03,0xF8,0x00 // 'b'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x01,0xC7,0xC0,0x00
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x1C
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0xFF,0x00,0x3F,0x80 // 'c'
,0x00,0x00,0x80,0x00,0x3C,0x00,0x03,0xE0,0x00,0x3E,0x00,0x03,0xE0,0x00,0x3E
,0x00,0x03,0xE0,0x00,0x3E,0x00,0x03,0xE0,0x3F,0xFE,0x1F,0xFF,0xE3,0xFF,0xFE
,0x7F,0xFF,0xE7,0xFF,0xFE,0x7F,0xFF,0xE7,0xC0,0x7E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x07,0xE7,0xFF,0xFE,0x7F,0xFF,0xC7,0xFF,0xFC,0x3F,0xFF,0x81,0xFF,0xF0
,0x03,0xF8,0x00 // 'd'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E
,0x7F,0xFF,0xE7,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xF8,0x7F,0xFF,0x07,0xFF,0x80
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7F,0xFC,0x07,0xFF,0xE0
,0x7F,0xFE,0x03,0xFF,0xE0,0x1F,0xFE,0x00,0x3F,0x80 // 'e'
,0x03,0xF0,0x1F,0xFC,0x3F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7F,0xF0,0x7F,0xFC,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC
,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00
,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x10,0x00 // 'f'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xE3,0xFF,0xFE,0x1F,0xFF,0xE0,0x3F,0xFE,0x00,0x03,0xE0,0x00,0x3E
,0x00,0x07,0xE0,0x7F,0xFE,0x0F,0xFF,0xC0,0xFF,0xFC,0x0F,0xFF,0x80,0x7F,0xF0
,0x03,0xF8,0x00 // 'g'
,0x10,0x00,0x07,0x80,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xFF,0x80,0x7F,0xFF,0x07,0xFF,0xF8
,0x7F,0xFF,0xC7,0xFF,0xFC,0x7F,0xFF,0xE7,0xC0,0x7E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0x80,0x3C
,0x10,0x00,0x80 // 'h'
,0x00,0x0C,0x0F,0x0F,0xC7,0xF3,0xF9,0xF8,0x78,0x00,0x00,0x00,0x03,0x83,0xE3
,0xF1,0xF8,0xFC,0x7E,0x3F,0x1F,0x8F,0xC7,0xE3,0xF1,0xF8,0xFC,0x7E,0x3F,0x1F
,0x8F,0xC7,0xE3,0xF1,0xF8,0xFC,0x7E,0x3F,0x1F,0x87,0xC3,0xC0,0x40 // 'i'
,0x00,0x00,0x7C,0x07,0xE0,0xFE,0x0F,0xE0,0x7E,0x07,0xC0,0x10,0x00,0x00,0x00
,0x03,0x80,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C
,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C
,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C,0x07,0xC0,0x7C
,0x3F,0xC7,0xFC,0x7F,0x87,0xF8,0x7F,0x01,0x80 // 'j'
,0x10,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x03,0x87,0xC0,0x7C
,0x7C,0x0F,0xC7,0xC1,0xF8,0x7C,0x3F,0x87,0xC7,0xF0,0x7C,0xFE,0x07,0xFF,0xC0
,0x7F,0xF8,0x07,0xFF,0x00,0x7F,0xE0,0x07,0xFC,0x00,0x7F,0xC0,0x07,0xFC,0x00
,0x7F,0xC0,0x07,0xFE,0x00,0x7F,0xF0,0x07,0xFF,0x80,0x7F,0xFC,0x07,0xCF,0xE0
,0x7C,0x7F,0x07,0xC3,0xF8,0x7C,0x1F,0xC7,0xC0,0xFC,0x7C,0x0F,0xE7,0xC0,0x7C
,0x10,0x01,0x80 // 'k'
,0x10,0x1E,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0
,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xF0
,0x7C,0x1F,0x07,0xC1,0xF0,0x7C,0x1F,0x07,0xC1,0xFC,0x7F,0x9F,0xE3,0xF8,0x7E
,0x02,0x00 // 'l'
,0x03,0xC0,0xF0,0x07,0xFF,0xFF,0x83,0xFF,0xFF,0xF1,0xFF,0xFF,0xFE,0x7F,0xFF
,0xFF,0x9F,0xFF,0xFF,0xE7,0xC3,0xF0,0xF9,0xF0,0xFC,0x3E,0x7C,0x3F,0x0F,0x9F
,0x0F,0xC3,0xE7,0xC3,0xF0,0xF9,0xF0,0xFC,0x3E,0x7C,0x3F,0x0F,0x9F,0x0F,0xC3
,0xE7,0xC3,0xF0,0xF9,0xF0,0xFC,0x3E,0x7C,0x3F,0x0F,0x9F,0x0F,0xC3,0xE7,0xC3
,0xF0,0xF9,0xF0,0xFC,0x3E,0x7C,0x3F,0x0F,0x9F,0x0F,0xC3,0xE7,0xC3,0xF0,0xF9
,0xF0,0xFC,0x3E,0x7C,0x3F,0x0F,0x9F,0x0F,0xC3,0xE7,0xC1,0xE0,0x78,0x40,0x00
,0x08 // 'm'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x78,0x03,0xC1,0x00,0x08 // 'n'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0xFF,0x00,0x3F,0x80 // 'o'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC7,0xFF,0xF8,0x7F,0xFF,0x07,0xFF,0x80,0x7C,0x00,0x07,0xC0,0x00
,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0xC0,0x00,0x7C,0x00,0x07,0x80,0x00
,0x10,0x00,0x00 // 'p'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xE3,0xFF,0xFE,0x1F,0xFF,0xE0,0x3F,0xFE,0x00,0x03,0xE0,0x00,0x3E
,0x00,0x03,0xE0,0x00,0x3E,0x00,0x03,0xE0,0x00,0x3E,0x00,0x03,0xE0,0x00,0x3C
,0x00,0x00,0x80 // 'q'
,0x03,0xF8,0x1F,0xFE,0x3F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00
,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x10,0x00 // 'r'
,0x03,0xF8,0x01,0xFF,0xF0,0x3F,0xFF,0x87,0xFF,0xFC,0x7F,0xFF,0xC7,0xFF,0xFE
,0x7C,0x07,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3C,0x7E,0x00,0x07,0xFC,0x00
,0x3F,0xFC,0x01,0xFF,0xF0,0x0F,0xFF,0x80,0x3F,0xFC,0x00,0x7F,0xC0,0x00,0xFE
,0x78,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0xFF,0x00,0x3F,0x80 // 's'
,0x10,0x00,0x78,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7F,0xF8,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFC
,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C
,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00
,0x7C,0x00,0x7F,0xFC,0x7F,0xFE,0x7F,0xFE,0x3F,0xFE,0x1F,0xFE,0x03,0xF8 // 't'
,0x10,0x00,0x87,0x80,0x3C,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x3E
,0x7C,0x03,0xE7,0xC0,0x3E,0x7C,0x03,0xE7,0xC0,0x7E,0x7F,0xFF,0xE7,0xFF,0xFE
,0x7F,0xFF,0xC3,0xFF,0xF8,0x1F,0xFF,0x00,0x3F,0x80 // 'u'
,0x08,0x00,0x41,0xF0,0x0F,0x8F,0x80,0x7C,0x7C,0x03,0xE3,0xF0,0x3F,0x0F,0x81
,0xF0,0x7C,0x0F,0x83,0xF0,0xFC,0x1F,0x87,0xE0,0x7C,0x3E,0x03,0xE1,0xF0,0x1F
,0x9F,0x80,0x7C,0xF8,0x03,0xE7,0xC0,0x1F,0xFE,0x00,0xFF,0xF0,0x03,0xFF,0x00
,0x1F,0xF8,0x00,0xFF,0xC0,0x03,0xFC,0x00,0x1F,0xE0,0x00,0xFF,0x00,0x07,0xF8
,0x00,0x1F,0x80,0x00,0xFC,0x00,0x07,0xE0,0x00,0x1E,0x00,0x00,0x00,0x00 // 'v'
,0x08,0x04,0x01,0x03,0xE0,0xF0,0x7C,0x3E,0x1F,0x87,0xC3,0xE1,0xF8,0x7C,0x3E
,0x1F,0x87,0xC3,0xF1,0xF8,0xFC,0x3F,0x3F,0x8F,0x81,0xF3,0xFC,0xF8,0x1F,0x3F
,0xCF,0x81,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0x80,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF
,0x00,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0x00,0xFF,0xFF,0xF0,0x07,0xFF,0xFE,0x00
,0x7F,0xFF,0xE0,0x07,0xFF,0xFE,0x00,0x7F,0x9F,0xE0,0x07,0xF9,0xFC,0x00,0x3F
,0x9F,0xC0,0x03,0xF1,0xFC,0x00,0x3F,0x0F,0xC0,0x03,0xF0,0xFC,0x00,0x3F,0x0F
,0x80,0x01,0xE0,0x78,0x00,0x04,0x02,0x00 // 'w'
,0x08,0x01,0x03,0xE0,0x7C,0x3E,0x07,0xC3,0xF0,0xFC,0x1F,0x0F,0xC1,0xF9,0xF8
,0x1F,0x9F,0x80,0xFF,0xF0,0x0F,0xFF,0x00,0x7F,0xE0,0x07,0xFE,0x00,0x3F,0xC0
,0x03,0xFC,0x00,0x1F,0x80,0x01,0xF8,0x00,0x3F,0xC0,0x03,0xFC,0x00,0x3F,0xE0
,0x07,0xFE,0x00,0x7F,0xF0,0x0F,0xFF,0x00,0xF9,0xF8,0x1F,0x9F,0x81,0xF0,0xF8
,0x3F,0x0F,0xC3,0xE0,0x7C,0x3E,0x07,0xC0,0x80,0x10 // 'x'
,0x08,0x01,0x03,0xE0,0x3C,0x3E,0x07,0xC3,0xE0,0x7C,0x3F,0x07,0xC3,0xF0,0xFC
,0x1F,0x0F,0x81,0xF0,0xF8,0x1F,0x8F,0x81,0xF9,0xF8,0x0F,0x9F,0x00,0xFD,0xF0
,0x0F,0xFF,0x00,0xFF,0xF0,0x07,0xFE,0x00,0x7F,0xE0,0x07,0xFE,0x00,0x7F,0xE0
,0x03,0xFC,0x00,0x3F,0xC0,0x03,0xFC,0x00,0x3F,0xC0,0x01,0xF8,0x00,0x1F,0x80
,0x01,0xF8,0x00,0x1F,0x80,0x01,0xF0,0x00,0x1F,0x00,0x01,0xF0,0x00,0x3F,0x00
,0x03,0xE0,0x01,0xFE,0x00,0x3F,0xE0,0x03,0xFC,0x00,0x3F,0x80,0x03,0xF0,0x00
,0x08,0x00,0x00 // 'y'
,0x0F,0xFF,0x01,0xFF,0xFC,0x3F,0xFF,0xC3,0xFF,0xFC,0x3F,0xFF,0xC1,0xFF,0xF8
,0x00,0x3F,0x80,0x03,0xF0,0x00,0x3F,0x00,0x07,0xE0,0x00,0x7E,0x00,0x0F,0xC0
,0x00,0xFC,0x00,0x1F,0x80,0x01,0xF8,0x00,0x3F,0x00,0x03,0xF0,0x00,0x3E,0x00
,0x07,0xE0,0x00,0x7C,0x00,0x0F,0xC0,0x00,0xFC,0x00,0x1F,0xFF,0x81,0xFF,0xFC
,0x3F,0xFF,0xC3,0xFF,0xFC,0x3F,0xFF,0xC0,0xFF,0xF0 // 'z'
};
const GFXglyph monomaniacone27ptGlyphs[] = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
{ 0, 1, 1, 13, 0, 0 }, // '
{ 1, 9, 37, 13, 2, -37 }, // '!
{ 43, 14, 9, 19, 2, -37 }, // '"
{ 59, 26, 37, 31, 2, -37 }, // '#
{ 180, 25, 43, 30, 2, -40 }, // '$
{ 315, 34, 37, 39, 2, -37 }, // '%
{ 473, 25, 37, 29, 2, -37 }, // '&
{ 589, 7, 9, 12, 2, -37 }, // ''
{ 597, 12, 37, 17, 2, -37 }, // '(
{ 653, 12, 37, 17, 2, -37 }, // ')
{ 709, 21, 21, 26, 2, -37 }, // '*
{ 765, 18, 18, 22, 2, -23 }, // '+
{ 806, 9, 12, 13, 2, -8 }, // ',
{ 820, 18, 7, 22, 2, -18 }, // '-
{ 836, 9, 9, 13, 2, -9 }, // '.
{ 847, 25, 37, 28, 1, -37 }, // '/
{ 963, 25, 37, 30, 2, -37 }, // '0
{ 1079, 13, 37, 30, 8, -37 }, // '1
{ 1140, 25, 37, 30, 2, -37 }, // '2
{ 1256, 25, 37, 30, 2, -37 }, // '3
{ 1372, 25, 37, 30, 2, -37 }, // '4
{ 1488, 25, 37, 30, 2, -37 }, // '5
{ 1604, 25, 37, 30, 2, -37 }, // '6
{ 1720, 25, 37, 30, 2, -37 }, // '7
{ 1836, 25, 37, 30, 2, -37 }, // '8
{ 1952, 25, 37, 30, 2, -37 }, // '9
{ 2068, 9, 20, 13, 2, -24 }, // ':
{ 2091, 9, 12, 13, 2, -8 }, // ',
{ 2105, 25, 37, 28, 1, -37 }, // '/
{ 2221, 34, 37, 39, 2, -37 }, // '%
{ 2379, 16, 22, 20, 2, -36 }, // 'º
{ 2423, 25, 37, 30, 2, -37 }, // '?
{ 2539, 32, 37, 37, 2, -37 }, // '@
{ 2687, 29, 37, 33, 1, -37 }, // 'A
{ 2822, 24, 37, 29, 2, -37 }, // 'B
{ 2933, 24, 37, 29, 2, -37 }, // 'C
{ 3044, 24, 37, 29, 2, -37 }, // 'D
{ 3155, 24, 37, 28, 2, -37 }, // 'E
{ 3266, 24, 37, 28, 2, -37 }, // 'F
{ 3377, 25, 37, 30, 2, -37 }, // 'G
{ 3493, 24, 37, 29, 2, -37 }, // 'H
{ 3604, 7, 37, 12, 2, -37 }, // 'I
{ 3637, 24, 37, 29, 2, -37 }, // 'J
{ 3748, 24, 37, 28, 2, -37 }, // 'K
{ 3859, 24, 37, 28, 2, -37 }, // 'L
{ 3970, 29, 37, 33, 2, -37 }, // 'M
{ 4105, 25, 37, 30, 2, -37 }, // 'N
{ 4221, 25, 37, 30, 2, -37 }, // 'O
{ 4337, 24, 37, 29, 2, -37 }, // 'P
{ 4448, 25, 37, 30, 2, -37 }, // 'Q
{ 4564, 25, 37, 30, 2, -37 }, // 'R
{ 4680, 25, 37, 30, 2, -37 }, // 'S
{ 4796, 24, 37, 29, 2, -37 }, // 'T
{ 4907, 24, 37, 29, 2, -37 }, // 'U
{ 5018, 29, 37, 33, 1, -37 }, // 'V
{ 5153, 37, 37, 40, 1, -37 }, // 'W
{ 5325, 25, 37, 28, 1, -37 }, // 'X
{ 5441, 29, 37, 33, 1, -37 }, // 'Y
{ 5576, 26, 37, 29, 1, -37 }, // 'Z
{ 5697, 12, 37, 17, 2, -37 }, // '[
{ 5753, 25, 37, 28, 1, -37 }, // '\'
{ 5869, 12, 37, 16, 2, -37 }, // ']
{ 5925, 15, 12, 20, 2, -37 }, // '^
{ 5948, 21, 7, 26, 2, -7 }, // '_
{ 5967, 10, 9, 13, 1, -37 }, // '`
{ 5979, 20, 28, 24, 2, -28 }, // 'a
{ 6049, 20, 37, 24, 2, -37 }, // 'b
{ 6142, 20, 28, 24, 2, -28 }, // 'c
{ 6212, 20, 37, 24, 2, -37 }, // 'd
{ 6305, 20, 28, 24, 2, -28 }, // 'e
{ 6375, 16, 37, 20, 2, -37 }, // 'f
{ 6449, 20, 37, 24, 2, -28 }, // 'g
{ 6542, 20, 37, 24, 2, -37 }, // 'h
{ 6635, 9, 38, 13, 2, -38 }, // 'i
{ 6678, 12, 46, 17, 2, -37 }, // 'j
{ 6747, 20, 37, 24, 2, -37 }, // 'k
{ 6840, 10, 37, 15, 2, -37 }, // 'l
{ 6887, 26, 28, 31, 2, -28 }, // 'm
{ 6978, 20, 28, 24, 2, -28 }, // 'n
{ 7048, 20, 28, 24, 2, -28 }, // 'o
{ 7118, 20, 37, 24, 2, -28 }, // 'p
{ 7211, 20, 37, 24, 2, -28 }, // 'q
{ 7304, 16, 28, 21, 2, -28 }, // 'r
{ 7360, 20, 28, 24, 2, -28 }, // 's
{ 7430, 16, 37, 21, 2, -37 }, // 't
{ 7504, 20, 28, 24, 2, -28 }, // 'u
{ 7574, 21, 28, 25, 1, -28 }, // 'v
{ 7648, 28, 28, 31, 1, -28 }, // 'w
{ 7746, 20, 28, 23, 1, -28 }, // 'x
{ 7816, 20, 37, 23, 1, -28 }, // 'y
{ 7909, 20, 28, 23, 1, -28 } // 'z
};
const GFXfont monomaniacone27pt = {
(uint8_t *)monomaniacone27ptBitmaps,
(GFXglyph *)monomaniacone27ptGlyphs,
0x20,
0x7A,
78
};

View File

@ -0,0 +1,251 @@
// , -> %
// . -> A
// / -> W
// - -> -
// Created by ttf2gfx utility
const uint8_t monomaniacone39ptBitmaps[] = {
// Bitmap Data:
0x00,0x70,0x00,0x00,0x18,0x00,0x03,0xFF,0x80,0x00,0x3F,0x00,0x03,0xFF,0xE0
,0x00,0x3F,0xC0,0x03,0xFF,0xF8,0x00,0x1F,0xE0,0x03,0xFF,0xFE,0x00,0x1F,0xF0
,0x03,0xFF,0xFF,0x00,0x0F,0xF0,0x01,0xFF,0xFF,0xC0,0x0F,0xF8,0x00,0xFF,0xFF
,0xE0,0x07,0xF8,0x00,0x7F,0xFF,0xF0,0x07,0xFC,0x00,0x3F,0xC7,0xF8,0x07,0xFC
,0x00,0x1F,0xE3,0xFC,0x03,0xFE,0x00,0x0F,0xF1,0xFE,0x03,0xFE,0x00,0x07,0xF8
,0xFF,0x01,0xFF,0x00,0x03,0xFC,0x7F,0x81,0xFF,0x00,0x01,0xFE,0x3F,0xC0,0xFF
,0x80,0x00,0xFF,0x1F,0xE0,0xFF,0x80,0x00,0x7F,0xFF,0xF0,0x7F,0xC0,0x00,0x3F
,0xFF,0xF8,0x7F,0xC0,0x00,0x1F,0xFF,0xFC,0x3F,0xC0,0x00,0x0F,0xFF,0xFC,0x3F
,0xE0,0x00,0x03,0xFF,0xFE,0x1F,0xE0,0x00,0x01,0xFF,0xFE,0x1F,0xF0,0x00,0x00
,0x7F,0xFE,0x0F,0xF0,0x00,0x00,0x0F,0xFE,0x0F,0xF8,0x00,0x00,0x01,0xFC,0x07
,0xF8,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00
,0x00,0x00,0x03,0xFE,0x03,0xF0,0x00,0x00,0x03,0xFE,0x0F,0xFF,0x00,0x00,0x01
,0xFF,0x0F,0xFF,0xC0,0x00,0x01,0xFF,0x0F,0xFF,0xF0,0x00,0x00,0xFF,0x8F,0xFF
,0xFC,0x00,0x00,0xFF,0x87,0xFF,0xFE,0x00,0x00,0x7F,0xC3,0xFF,0xFF,0x00,0x00
,0x7F,0xC3,0xFF,0xFF,0xC0,0x00,0x3F,0xC1,0xFF,0xFF,0xE0,0x00,0x3F,0xE0,0xFF
,0x0F,0xF0,0x00,0x1F,0xE0,0x7F,0x87,0xF8,0x00,0x1F,0xF0,0x3F,0xC3,0xFC,0x00
,0x0F,0xF0,0x1F,0xE1,0xFE,0x00,0x0F,0xF8,0x0F,0xF0,0xFF,0x00,0x07,0xF8,0x07
,0xF8,0x7F,0x80,0x07,0xFC,0x03,0xFC,0x3F,0xC0,0x07,0xFC,0x01,0xFF,0xFF,0xE0
,0x03,0xFE,0x00,0xFF,0xFF,0xF0,0x03,0xFE,0x00,0x3F,0xFF,0xF0,0x01,0xFF,0x00
,0x1F,0xFF,0xF8,0x01,0xFF,0x00,0x0F,0xFF,0xF8,0x00,0xFF,0x80,0x03,0xFF,0xFC
,0x00,0x7F,0x80,0x00,0xFF,0xFC,0x00,0x1F,0x80,0x00,0x1F,0xF8,0x00,0x03,0x00
,0x00,0x01,0xE0,0x00 // '%'
,0x00,0x00,0x00,0x0F,0xFF,0xFC,0x1F,0xFF,0xFF,0x8F,0xFF,0xFF,0xE7,0xFF,0xFF
,0xF3,0xFF,0xFF,0xF9,0xFF,0xFF,0xFC,0xFF,0xFF,0xFC,0x3F,0xFF,0xFE,0x07,0xFF
,0xFC,0x00 // '-'
,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x00,0x00,0x1F,0xE0,0x00
,0x00,0x00,0x1F,0xF0,0x00,0x00,0x00,0x0F,0xFC,0x00,0x00,0x00,0x07,0xFE,0x00
,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x03,0xFF,0xC0,0x00,0x00,0x01,0xFF,0xE0
,0x00,0x00,0x01,0xFF,0xF0,0x00,0x00,0x00,0xFF,0xFC,0x00,0x00,0x00,0x7F,0xFE
,0x00,0x00,0x00,0x7F,0xFF,0x00,0x00,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x1F,0xFF
,0xE0,0x00,0x00,0x1F,0xFF,0xF0,0x00,0x00,0x0F,0xFF,0xFC,0x00,0x00,0x07,0xFF
,0xFE,0x00,0x00,0x07,0xFC,0xFF,0x00,0x00,0x03,0xFC,0x7F,0xC0,0x00,0x01,0xFE
,0x1F,0xE0,0x00,0x01,0xFF,0x0F,0xF0,0x00,0x00,0xFF,0x07,0xFC,0x00,0x00,0x7F
,0x81,0xFE,0x00,0x00,0x7F,0xC0,0xFF,0x00,0x00,0x3F,0xC0,0x7F,0xC0,0x00,0x1F
,0xE0,0x3F,0xE0,0x00,0x1F,0xF0,0x0F,0xF0,0x00,0x0F,0xF0,0x07,0xF8,0x00,0x07
,0xF8,0x03,0xFE,0x00,0x07,0xFC,0x00,0xFF,0x00,0x03,0xFF,0xFF,0xFF,0x80,0x01
,0xFF,0xFF,0xFF,0xE0,0x01,0xFF,0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xFF,0xF8,0x00
,0x7F,0xFF,0xFF,0xFE,0x00,0x7F,0xFF,0xFF,0xFF,0x00,0x3F,0xFF,0xFF,0xFF,0x80
,0x1F,0xFF,0xFF,0xFF,0xE0,0x1F,0xFF,0xFF,0xFF,0xF0,0x0F,0xF8,0x00,0x07,0xF8
,0x07,0xF8,0x00,0x03,0xFE,0x07,0xFC,0x00,0x00,0xFF,0x03,0xFE,0x00,0x00,0x7F
,0x81,0xFE,0x00,0x00,0x3F,0xE1,0xFF,0x00,0x00,0x0F,0xF0,0xFF,0x80,0x00,0x07
,0xF8,0x7F,0x80,0x00,0x03,0xFE,0x3F,0xC0,0x00,0x00,0xFF,0x1F,0xC0,0x00,0x00
,0x7F,0x8F,0xE0,0x00,0x00,0x1F,0x80,0x80,0x00,0x00,0x03,0x00 // 'A'
,0x04,0x00,0x00,0x00,0x00,0x03,0x03,0xF8,0x00,0x00,0x00,0x00,0xFC,0x3F,0x80
,0x00,0x00,0x00,0x1F,0xE3,0xFC,0x00,0x00,0x00,0x01,0xFE,0x3F,0xC0,0x00,0x00
,0x00,0x1F,0xE3,0xFC,0x00,0x00,0x00,0x03,0xFE,0x3F,0xC0,0x00,0x00,0x00,0x3F
,0xC3,0xFE,0x00,0x00,0x00,0x03,0xFC,0x1F,0xE0,0x00,0x00,0x00,0x3F,0xC1,0xFE
,0x00,0x07,0x00,0x07,0xFC,0x1F,0xE0,0x00,0xF8,0x00,0x7F,0x81,0xFE,0x00,0x1F
,0x80,0x07,0xF8,0x0F,0xF0,0x01,0xF8,0x00,0x7F,0x80,0xFF,0x00,0x1F,0xC0,0x07
,0xF8,0x0F,0xF0,0x03,0xFC,0x00,0xFF,0x00,0xFF,0x00,0x3F,0xC0,0x0F,0xF0,0x0F
,0xF8,0x03,0xFE,0x00,0xFF,0x00,0x7F,0x80,0x3F,0xE0,0x0F,0xF0,0x07,0xF8,0x07
,0xFE,0x01,0xFF,0x00,0x7F,0x80,0x7F,0xF0,0x1F,0xE0,0x07,0xF8,0x07,0xFF,0x01
,0xFE,0x00,0x3F,0xC0,0xFF,0xF0,0x1F,0xE0,0x03,0xFC,0x0F,0xFF,0x01,0xFE,0x00
,0x3F,0xC0,0xFF,0xF8,0x3F,0xC0,0x03,0xFC,0x1F,0xFF,0x83,0xFC,0x00,0x3F,0xE1
,0xFF,0xF8,0x3F,0xC0,0x01,0xFE,0x1F,0xFF,0xC3,0xFC,0x00,0x1F,0xE3,0xFF,0xFC
,0x7F,0xC0,0x01,0xFE,0x3F,0xFF,0xC7,0xF8,0x00,0x1F,0xE3,0xFF,0xFE,0x7F,0x80
,0x00,0xFF,0x3F,0xFF,0xE7,0xF8,0x00,0x0F,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0xFF
,0xFF,0x9F,0xFF,0xF0,0x00,0x0F,0xFF,0xF9,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x8F
,0xFF,0xF0,0x00,0x07,0xFF,0xF0,0xFF,0xFF,0x00,0x00,0x7F,0xFF,0x0F,0xFF,0xF0
,0x00,0x07,0xFF,0xF0,0x7F,0xFE,0x00,0x00,0x7F,0xFF,0x07,0xFF,0xE0,0x00,0x03
,0xFF,0xE0,0x7F,0xFE,0x00,0x00,0x3F,0xFE,0x03,0xFF,0xE0,0x00,0x03,0xFF,0xE0
,0x3F,0xFC,0x00,0x00,0x3F,0xFC,0x03,0xFF,0xC0,0x00,0x03,0xFF,0xC0,0x3F,0xFC
,0x00,0x00,0x1F,0xFC,0x01,0xFF,0xC0,0x00,0x01,0xFF,0x80,0x1F,0xFC,0x00,0x00
,0x1F,0xF8,0x01,0xFF,0x80,0x00,0x01,0xFF,0x80,0x0F,0xF8,0x00,0x00,0x0F,0xF0
,0x00,0xFF,0x80,0x00,0x00,0xFF,0x00,0x0F,0xF0,0x00,0x00,0x07,0xE0,0x00,0x7F
,0x00,0x00,0x00,0x18,0x00,0x01,0xC0,0x00 // 'W'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x07,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xF3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0xFF,0xF9,0xFE
,0x00,0x1F,0xFF,0x3F,0xC0,0x03,0xFF,0xE7,0xF8,0x00,0xFF,0xFC,0xFF,0x00,0x1F
,0xFF,0x9F,0xE0,0x07,0xFF,0xF3,0xFC,0x00,0xFF,0xFE,0x7F,0x80,0x3F,0xFF,0xCF
,0xF0,0x07,0xFF,0xF9,0xFE,0x01,0xFF,0xFF,0x3F,0xC0,0x7F,0xFF,0xE7,0xF8,0x0F
,0xFF,0xFC,0xFF,0x03,0xFE,0x7F,0x9F,0xE0,0x7F,0xCF,0xF3,0xFC,0x1F,0xF1,0xFE
,0x7F,0x83,0xFE,0x3F,0xCF,0xF0,0xFF,0x87,0xF9,0xFE,0x1F,0xF0,0xFF,0x3F,0xC7
,0xFC,0x1F,0xE7,0xF8,0xFF,0x83,0xFC,0xFF,0x3F,0xE0,0x7F,0x9F,0xE7,0xF8,0x0F
,0xF3,0xFF,0xFF,0x01,0xFE,0x7F,0xFF,0xC0,0x3F,0xCF,0xFF,0xF8,0x07,0xF9,0xFF
,0xFE,0x00,0xFF,0x3F,0xFF,0xC0,0x1F,0xE7,0xFF,0xF0,0x03,0xFC,0xFF,0xFE,0x00
,0x7F,0x9F,0xFF,0x80,0x0F,0xF3,0xFF,0xF0,0x01,0xFE,0x7F,0xFC,0x00,0x3F,0xCF
,0xFF,0x80,0x07,0xF9,0xFF,0xF0,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x0F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '0'
,0x00,0x78,0x00,0xFF,0x00,0xFF,0xC0,0xFF,0xE0,0xFF,0xF0,0xFF,0xF8,0xFF,0xFC
,0xFF,0xFE,0x7F,0xFF,0x3F,0xFF,0x9F,0xFF,0xCF,0xFF,0xE7,0xFF,0xF3,0xE7,0xF8
,0x63,0xFC,0x01,0xFE,0x00,0xFF,0x00,0x7F,0x80,0x3F,0xC0,0x1F,0xE0,0x0F,0xF0
,0x07,0xF8,0x03,0xFC,0x01,0xFE,0x00,0xFF,0x00,0x7F,0x80,0x3F,0xC0,0x1F,0xE0
,0x0F,0xF0,0x07,0xF8,0x03,0xFC,0x01,0xFE,0x00,0xFF,0x00,0x7F,0x80,0x3F,0xC0
,0x1F,0xE0,0x0F,0xF0,0x07,0xF8,0x03,0xFC,0x01,0xFE,0x00,0xFF,0x00,0x7F,0x80
,0x3F,0xC0,0x1F,0xE0,0x0F,0xF0,0x07,0xF8,0x03,0xFC,0x01,0xFE,0x00,0xFF,0x00
,0x3F,0x80,0x1F,0x80,0x01,0x00 // '1'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x07,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xE3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFE,0x00,0x00
,0x7F,0x8F,0x80,0x00,0x0F,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC0
,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x7F,0xE0,0x00,0x00
,0x7F,0xFC,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFF,0xE0,0x00,0x3F,0xFF,0xF8
,0x00,0x3F,0xFF,0xFE,0x00,0x1F,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0x80,0x07,0xFF
,0xFF,0xC0,0x01,0xFF,0xFF,0xC0,0x00,0x7F,0xFF,0xC0,0x00,0x0F,0xFF,0xE0,0x00
,0x03,0xFF,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x01,0xFE
,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00
,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F
,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0x87,0xFF,0xFF
,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0xFE
,0x0F,0xFF,0xFF,0xFF,0xC0,0xFF,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xFE,0x00,0x1F
,0xFF,0xFF,0x00 // '2'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x0F,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xE3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFE,0x00,0x00
,0x7F,0x8F,0x80,0x00,0x0F,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC0
,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00
,0x03,0xFC,0x00,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0xF0,0x0F,0xFF,0xFF,0xFE
,0x01,0xFF,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xFE,0x00,0xFF
,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x0F
,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07,0xF8,0x00
,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xE1,0xE0,0x00,0x03,0xFC,0xFE,0x00,0x00
,0x7F,0x9F,0xC0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x0F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '3'
,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00
,0x07,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC
,0x00,0x00,0x00,0x7F,0x80,0x00,0x18,0x0F,0xF0,0x00,0x0F,0xC1,0xFE,0x00,0x03
,0xFC,0x3F,0xC0,0x00,0x7F,0x87,0xF8,0x00,0x1F,0xF0,0xFF,0x00,0x03,0xFE,0x1F
,0xE0,0x00,0xFF,0x83,0xFC,0x00,0x1F,0xE0,0x7F,0x80,0x07,0xFC,0x0F,0xF0,0x00
,0xFF,0x01,0xFE,0x00,0x3F,0xE0,0x3F,0xC0,0x07,0xF8,0x07,0xF8,0x01,0xFF,0x00
,0xFF,0x00,0x3F,0xC0,0x1F,0xE0,0x0F,0xF8,0x03,0xFC,0x01,0xFE,0x00,0x7F,0x80
,0x7F,0xC0,0x0F,0xF0,0x0F,0xF0,0x01,0xFE,0x01,0xFE,0x00,0x3F,0xC0,0x3F,0xC0
,0x07,0xF8,0x07,0xF8,0x00,0xFF,0x00,0xFF,0x00,0x1F,0xE0,0x1F,0xE0,0x03,0xFC
,0x03,0xFC,0x00,0x7F,0x80,0x7F,0x80,0x0F,0xF0,0x0F,0xFF,0xFF,0xFF,0xE1,0xFF
,0xFF,0xFF,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF
,0xFF,0x9F,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xFE,0x3F,0xFF,0xFF,0xFF,0x81
,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07,0xF8,0x00,0x00,0x00
,0xFF,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x7F,0x80
,0x00,0x00,0x0F,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x1F,0x80,0x00,0x00
,0x00,0xC0,0x00 // '4'
,0x0F,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF
,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF
,0xF3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0x0F,0xF0,0x00,0x00,0x01,0xFE
,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00,0x07,0xF8,0x00,0x00,0x00,0xFF,0x00,0x00
,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F
,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xC0,0x07,0xFF,0xFF
,0xFF,0x80,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,0x83,0xFF,0xFF,0xFF,0xF8
,0x7F,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF
,0xFF,0xFF,0xE0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F
,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC7,0xC0,0x00,0x07,0xF9,0xFC
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x0F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '5'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x07,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xF3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x3F,0x9F,0xE0,0x00,0x03,0xE3,0xFC,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F
,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xC0,0x07,0xFF,0xFF
,0xFF,0x80,0xFF,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xFF,0x83,0xFF,0xFF,0xFF,0xF8
,0x7F,0xFF,0xFF,0xFF,0x8F,0xFF,0xFF,0xFF,0xF9,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF
,0xFF,0xFF,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00,0x7F,0x9F,0xE0,0x00,0x0F
,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x0F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '6'
,0x0F,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFF,0xF1,0xFF,0xFF,0xFF,0xFF,0x3F,0xFF
,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF
,0xF3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFE,0x00,0x00
,0x7F,0x8F,0x80,0x00,0x0F,0xF0,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC0
,0x00,0x00,0x0F,0xF8,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x3F,0xC0,0x00,0x00
,0x0F,0xF8,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x0F,0xF0
,0x00,0x00,0x01,0xFE,0x00,0x00,0x00,0x7F,0xC0,0x00,0x00,0x0F,0xF0,0x00,0x00
,0x03,0xFE,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F,0xF0,0x00,0x00,0x03,0xFE
,0x00,0x00,0x00,0x7F,0x80,0x00,0x00,0x0F,0xF0,0x00,0x00,0x03,0xFE,0x00,0x00
,0x00,0x7F,0x80,0x00,0x00,0x1F,0xF0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0x7F
,0x80,0x00,0x00,0x1F,0xF0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0xFF,0x80,0x00
,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC,0x00,0x00,0x00,0xFF,0x80,0x00,0x00,0x1F
,0xE0,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xE0,0x00
,0x00,0x07,0xFC,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00
,0x20,0x00,0x00 // '7'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x07,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xE3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x9F,0xFF,0xFF,0xFF,0xF1,0xFF,0xFF,0xFF,0xFC
,0x3F,0xFF,0xFF,0xFF,0x87,0xFF,0xFF,0xFF,0xF0,0xFF,0xFF,0xFF,0xFE,0x3F,0xFF
,0xFF,0xFF,0xE7,0xFF,0xFF,0xFF,0xFC,0xFF,0x00,0x00,0x7F,0x9F,0xE0,0x00,0x0F
,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x0F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '8'
,0x00,0x3F,0xFF,0x80,0x00,0x7F,0xFF,0xFF,0x00,0x1F,0xFF,0xFF,0xF0,0x07,0xFF
,0xFF,0xFF,0x01,0xFF,0xFF,0xFF,0xF0,0x7F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF
,0xE3,0xFF,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFF,0xCF,0xF0,0x00,0x07,0xF9,0xFE
,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00,0x03,0xFC,0xFF,0x00,0x00
,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xC0,0x00,0x1F,0xE7,0xF8,0x00
,0x03,0xFC,0xFF,0x00,0x00,0x7F,0x9F,0xE0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE
,0x7F,0xFF,0xFF,0xFF,0xCF,0xFF,0xFF,0xFF,0xF8,0xFF,0xFF,0xFF,0xFF,0x1F,0xFF
,0xFF,0xFF,0xE1,0xFF,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF
,0xF0,0x1F,0xFF,0xFF,0xFE,0x00,0x3F,0xFF,0xFF,0xC0,0x00,0x00,0x07,0xF8,0x00
,0x00,0x00,0xFF,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x03,0xFC,0x7C,0x00,0x00
,0x7F,0x9F,0xC0,0x00,0x0F,0xF3,0xFC,0x00,0x01,0xFE,0x7F,0x80,0x00,0x3F,0xCF
,0xF0,0x00,0x07,0xF9,0xFE,0x00,0x00,0xFF,0x3F,0xFF,0xFF,0xFF,0xE7,0xFF,0xFF
,0xFF,0xFC,0xFF,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,0xF8
,0x1F,0xFF,0xFF,0xFE,0x00,0xFF,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x00,0x1F
,0xFF,0xC0,0x00 // '9'
};
const GFXglyph monomaniacone39ptGlyphs[] = {
// bitmapOffset, width, height, xAdvance, xOffset, yOffset
{ 0, 49, 52, 55, 3, -52 }, // '%
{ 319, 25, 10, 31, 3, -25 }, // '-
{ 351, 41, 52, 47, 2, -52 }, // 'A
{ 618, 52, 52, 57, 2, -52 }, // 'W
{ 956, 35, 52, 42, 3, -52 }, // '0
{ 1184, 17, 52, 42, 12, -52 }, // '1
{ 1295, 35, 52, 42, 3, -52 }, // '2
{ 1523, 35, 52, 42, 3, -52 }, // '3
{ 1751, 35, 52, 42, 3, -52 }, // '4
{ 1979, 35, 52, 42, 3, -52 }, // '5
{ 2207, 35, 52, 42, 3, -52 }, // '6
{ 2435, 35, 52, 42, 3, -52 }, // '7
{ 2663, 35, 52, 42, 3, -52 }, // '8
{ 2891, 35, 52, 42, 3, -52 } // '9
};
const GFXfont monomaniacone39pt = {
(uint8_t *)monomaniacone39ptBitmaps,
(GFXglyph *)monomaniacone39ptGlyphs,
0x2C,
0x39,
111
};

View File

@ -1,14 +1,15 @@
#include "dashboard.h" #include "dashboard.h"
#include "font.h" #include "font.h"
#include "icons.h" #include "icons.h"
//#include "monomaniacone12pt.h"
#include "monomaniacone14pt.h"
#include "monomaniacone20pt.h"
#include "monomaniacone72pt.h"
#include "usart.h" #include "usart.h"
#include "crc.h" #include "crc.h"
#include "float16.h" #include "float16.h"
#include "math.h" #include "math.h"
//#include "monomaniacone14pt.h"
#include "monomaniacone27pt.h" // 2x antialiased version of 14pt
//#include "monomaniacone20pt.h"
#include "monomaniacone39pt.h" // 2x antialiased version of 20pt
#include "monomaniacone72pt.h"
#include <stdio.h> #include <stdio.h>
const char *fault_code_strings[] = { "none", "over voltage", "under voltage", const char *fault_code_strings[] = { "none", "over voltage", "under voltage",
@ -29,8 +30,8 @@ void run_dashboard_loop_test() {
uint32_t i = 0; uint32_t i = 0;
while (1) { while (1) {
draw_battery(654, i * 100 / 4, 1321, 343); draw_battery(654, i * 10 / 4, 13210000, 343000);
draw_speed(i * 1000 / 4, i % 30); draw_speed((((i/2) % 34)) * 1000, 0);
int16_t duty = 1000 - (int16_t) i * 1000 / 200; int16_t duty = 1000 - (int16_t) i * 1000 / 200;
draw_power_bars(duty); draw_power_bars(duty);
draw_power(100 * i / 20 * (duty < 0 ? -1 : 1), duty, 60 * 10); draw_power(100 * i / 20 * (duty < 0 ? -1 : 1), duty, 60 * 10);
@ -52,7 +53,7 @@ void run_dashboard_loop_test() {
uint8_t initialized = 0; uint8_t initialized = 0;
void run_dashboard_loop() { void run_dashboard_loop() {
//run_dashboard_loop_test();
LCD_Init(); LCD_Init();
LCD_Fill_Screen(COLOR_OFF, 1); LCD_Fill_Screen(COLOR_OFF, 1);
LCD_Fill_Screen(COLOR_BG, 0); LCD_Fill_Screen(COLOR_BG, 0);
@ -130,9 +131,9 @@ void update_values(uint8_t refresh_slow, uint8_t refresh_mid) {
refresh_mid = 1; refresh_mid = 1;
} }
//speed = (int32_t) (((float) speed) / 1.609344); //speed = (int32_t) (((float) speed) / 1.609344);
//float wheel_diameter = 0.246; // in meter //float wheel_diameter = 0.246; // in meter
//speed = ((float) rpm) * 3.14159265359 * wheel_diameter * 60 / 1000; //speed = ((float) rpm) * 3.14159265359 * wheel_diameter * 60 / 1000;
draw_power_bars(duty_cycle); draw_power_bars(duty_cycle);
if (refresh_mid) { if (refresh_mid) {
@ -141,7 +142,7 @@ void update_values(uint8_t refresh_slow, uint8_t refresh_mid) {
} }
if (refresh_slow) { if (refresh_slow) {
draw_battery(input_voltage_filtered, battery_level, distance_abs, draw_battery(input_voltage_filtered, battery_level, distance_abs,
distance_life); distance_life);
draw_temps(temp_fet, temp_motor); draw_temps(temp_fet, temp_motor);
} }
} }
@ -333,35 +334,35 @@ void draw_battery(
if (percent > 20 * 10) { if (percent > 20 * 10) {
// Drawing the voltage to the left // Drawing the voltage to the left
left_x = 10 left_x = 10
+ GFX_DrawText(left_x, text_y_14, voltage_text, &monomaniacone14pt, + GFX_DrawTextScaled(left_x, text_y_14, voltage_text,
COLOR_BG, COLOR_SUCCESS, 0, -2); &monomaniacone27pt,
COLOR_BG, COLOR_SUCCESS, 0, -2, 2);
} else { } else {
// Drawing the voltage to the right // Drawing the voltage to the right
right_x = -10 right_x = -10
+ GFX_DrawText(right_x, text_y_14, voltage_text, &monomaniacone14pt, + GFX_DrawTextScaled(right_x, text_y_14, voltage_text,
COLOR_FG, COLOR_BG, 2, -2); &monomaniacone27pt,
COLOR_FG, COLOR_BG, 2, -2, 2);
} }
if (percent > 50 * 10) { if (percent > 50 * 10) {
// Drawing the distances on the left // Drawing the distances on the left
GFX_DrawText(left_x, text_y_14, distances_text, &monomaniacone14pt, GFX_DrawTextScaled(left_x, text_y_14, distances_text, &monomaniacone27pt,
COLOR_BG, COLOR_SUCCESS, 0, -3); COLOR_BG, COLOR_SUCCESS, 0, -2, 2);
} else { } else {
// Drawing the distances on the right // Drawing the distances on the right
GFX_DrawText(right_x, text_y_14, distances_text, &monomaniacone14pt, GFX_DrawTextScaled(right_x, text_y_14, distances_text, &monomaniacone27pt,
COLOR_FG, COLOR_BG, 2, -3); COLOR_FG, COLOR_BG, 2, -2, 2);
} }
if (percent > 80 * 10) { if (percent > 80 * 10) {
// Drawing the distances on the left // Drawing the distances on the left
GFX_DrawText(filled_bar_end_x - 4, text_y_14, percent_text, GFX_DrawTextScaled(filled_bar_end_x - 4, text_y_14, percent_text,
&monomaniacone14pt, &monomaniacone27pt, COLOR_BG, COLOR_SUCCESS, 2, 0, 2);
COLOR_BG, COLOR_SUCCESS, 2, 0);
} else { } else {
// Drawing the distances on the right // Drawing the distances on the right
GFX_DrawText(filled_bar_end_x + 4, text_y_14, percent_text, GFX_DrawTextScaled(filled_bar_end_x + 4, text_y_14, percent_text,
&monomaniacone14pt, &monomaniacone27pt, COLOR_FG, COLOR_BG, 0, 0, 2);
COLOR_FG, COLOR_BG, 0, 0);
} }
} }
@ -416,6 +417,8 @@ uint32_t last_avg_speed = 30;
uint32_t avg_speed_tot = 0;// You need to ride super fast for a super long time for it to overflow ;) uint32_t avg_speed_tot = 0;// You need to ride super fast for a super long time for it to overflow ;)
uint32_t avg_speed_count = 0; uint32_t avg_speed_count = 0;
uint8_t last_fault_code = 0; uint8_t last_fault_code = 0;
uint16_t last_speed_cursor_x = 0;
char speed_text[4];
void draw_speed(int32_t speedd, uint8_t fault_code) { void draw_speed(int32_t speedd, uint8_t fault_code) {
uint32_t speed = speedd < 0 ? -speedd / 1000 : speedd / 1000; uint32_t speed = speedd < 0 ? -speedd / 1000 : speedd / 1000;
@ -440,14 +443,26 @@ void draw_speed(int32_t speedd, uint8_t fault_code) {
// Draw // Draw
if (last_speed != speed) { if (last_speed != speed) {
//uint16_t erase_width = 85;// width to erase from center
if (last_speed >= 10 && speed >= 10 && last_speed / 10 == speed / 10) {
uint16_t old_glyphIndex = speed_text[0] - monomaniacone72pt.firstChar;
const GFXglyph *old_glyph = &monomaniacone72pt.glyphs[old_glyphIndex];
GFX_ClearChar(last_speed_cursor_x - old_glyph->advance, 32 + 95, speed_text[1], &monomaniacone72pt, COLOR_BG);
sprintf(speed_text, "%lu", speed);
last_speed_cursor_x = GFX_DrawChar(last_speed_cursor_x - old_glyph->advance, 32 + 95, speed_text[1],
&monomaniacone72pt, COLOR_FG, COLOR_BG);
} else {
GFX_ClearText(LCD_WIDTH / 2, 32 + 95, speed_text,
&monomaniacone72pt, COLOR_BG, 1, -5);
sprintf(speed_text, "%lu", speed);
// LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 22, 2 * erase_width, 110,
// COLOR_BG);
last_speed_cursor_x = 5 + GFX_DrawText(LCD_WIDTH / 2, 32 + 95, speed_text,
&monomaniacone72pt,
COLOR_FG, COLOR_BG, 1, -5);
}
last_speed = speed; last_speed = speed;
uint16_t erase_width = 85;// width to erase from center
char speed_text[4];
sprintf(speed_text, "%lu", speed);
LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 22, 2 * erase_width, 110,
COLOR_BG);
GFX_DrawText(LCD_WIDTH / 2, 32 + 95, speed_text, &monomaniacone72pt,
COLOR_FG, COLOR_BG, 1, -5);
} }
uint16_t erase_width = 90;// width to erase from center uint16_t erase_width = 90;// width to erase from center
@ -469,8 +484,8 @@ void draw_speed(int32_t speedd, uint8_t fault_code) {
LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 140, 2 * erase_width, 25, LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 140, 2 * erase_width, 25,
COLOR_BG); COLOR_BG);
GFX_DrawText(LCD_WIDTH / 2, 159, fault_text, &monomaniacone14pt, GFX_DrawTextScaled(LCD_WIDTH / 2, 159, fault_text, &monomaniacone27pt,
COLOR_ERROR, COLOR_BG, 1, -3); COLOR_ERROR, COLOR_BG, 1, -3, 2);
} }
} }
if (update_stats) { if (update_stats) {
@ -478,8 +493,8 @@ void draw_speed(int32_t speedd, uint8_t fault_code) {
sprintf(stats_text, "avg: %lu max: %lu", avg_speed, max_speed); sprintf(stats_text, "avg: %lu max: %lu", avg_speed, max_speed);
LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 140, 2 * erase_width, 25, LCD_Draw_Rectangle(LCD_WIDTH / 2 - erase_width, 140, 2 * erase_width, 25,
COLOR_BG); COLOR_BG);
GFX_DrawText(LCD_WIDTH / 2, 159, stats_text, &monomaniacone14pt, GFX_DrawTextScaled(LCD_WIDTH / 2, 159, stats_text, &monomaniacone27pt,
COLOR_SECONDARY, COLOR_BG, 1, -3); COLOR_SECONDARY, COLOR_BG, 1, -1, 2);
} }
} }
@ -492,7 +507,7 @@ int32_t last_power = 1000;
// Input voltage from COMM_GET_VALUES, scale 10 // Input voltage from COMM_GET_VALUES, scale 10
void draw_power(int32_t current_i, int16_t duty_i, int16_t voltage_i) { void draw_power(int32_t current_i, int16_t duty_i, int16_t voltage_i) {
if (duty_i < 0 && current_i > 0) { if (duty_i < 0 && current_i > 0) {
current_i = -current_i; current_i = -current_i;
} }
int16_t current = current_i / 100; int16_t current = current_i / 100;
uint16_t duty = duty_i < 0 ? -duty_i / 10 : duty_i / 10; uint16_t duty = duty_i < 0 ? -duty_i / 10 : duty_i / 10;
@ -513,10 +528,10 @@ void draw_power(int32_t current_i, int16_t duty_i, int16_t voltage_i) {
} }
char text[8]; char text[8];
sprintf(text, "%dA", current); sprintf(text, "%d.", current);
LCD_Draw_Rectangle(LEFT_CENTER_COL1 - 38, 30, 2 * 39, 35, COLOR_BG); LCD_Draw_Rectangle(LEFT_CENTER_COL1 - 38, 30, 2 * 39, 35, COLOR_BG);
GFX_DrawText(LEFT_CENTER_COL1, 60, text, &monomaniacone20pt, GFX_DrawTextScaled(LEFT_CENTER_COL1, 60, text, &monomaniacone39pt,
COLOR_PRIMARY, COLOR_BG, 1, -2); COLOR_PRIMARY, COLOR_BG, 1, -2, 2);
} }
if (duty != last_duty) { if (duty != last_duty) {
last_duty = duty; last_duty = duty;
@ -525,10 +540,10 @@ void draw_power(int32_t current_i, int16_t duty_i, int16_t voltage_i) {
} }
char text[8]; char text[8];
sprintf(text, "%u%%", duty); sprintf(text, "%u,", duty);
LCD_Draw_Rectangle(LEFT_CENTER_COL2 - 39, 30, 2 * 39, 35, COLOR_BG); LCD_Draw_Rectangle(LEFT_CENTER_COL2 - 39, 30, 2 * 39, 35, COLOR_BG);
GFX_DrawText(LEFT_CENTER_COL2, 60, text, &monomaniacone20pt, GFX_DrawTextScaled(LEFT_CENTER_COL2, 60, text, &monomaniacone39pt,
COLOR_PRIMARY, COLOR_BG, 1, -2); COLOR_PRIMARY, COLOR_BG, 1, -2, 2);
} }
if (power != last_power) { if (power != last_power) {
last_power = power; last_power = power;
@ -539,10 +554,10 @@ void draw_power(int32_t current_i, int16_t duty_i, int16_t voltage_i) {
} }
char text[10]; char text[10];
sprintf(text, "%ldW", power); sprintf(text, "%ld/", power);
LCD_Draw_Rectangle(RIGHT_CENTER - 70, 30, 2 * 70, 35, COLOR_BG); LCD_Draw_Rectangle(RIGHT_CENTER - 70, 30, 2 * 70, 35, COLOR_BG);
GFX_DrawText(RIGHT_CENTER, 60, text, &monomaniacone20pt, GFX_DrawTextScaled(RIGHT_CENTER, 60, text, &monomaniacone39pt,
COLOR_PRIMARY, COLOR_BG, 1, -2); COLOR_PRIMARY, COLOR_BG, 1, -2, 2);
} }
} }
@ -584,8 +599,8 @@ void draw_adc(
// Draw the text // Draw the text
char text[8]; char text[8];
sprintf(text, "%.1fV", ((float) adc1) / 10); sprintf(text, "%.1fV", ((float) adc1) / 10);
GFX_DrawText(RIGHT_CENTER - 3 - 27, 76 + free_height - 2, text, GFX_DrawTextScaled(RIGHT_CENTER - 3 - 27, 76 + free_height - 2, text,
&monomaniacone14pt, color, COLOR_BG, 1, -2); &monomaniacone27pt, color, COLOR_BG, 1, -1, 2);
last_adc1 = adc1; last_adc1 = adc1;
last_adc1_en = adc1_en; last_adc1_en = adc1_en;
@ -608,8 +623,8 @@ void draw_adc(
// Draw the text // Draw the text
char text[8]; char text[8];
sprintf(text, "%.1fV", ((float) adc2) / 10); sprintf(text, "%.1fV", ((float) adc2) / 10);
GFX_DrawText(RIGHT_CENTER + 3 + 27, 76 + free_height - 2, text, GFX_DrawTextScaled(RIGHT_CENTER + 3 + 27, 76 + free_height - 2, text,
&monomaniacone14pt, color, COLOR_BG, 1, -2); &monomaniacone27pt, color, COLOR_BG, 1, -1, 2);
last_adc2 = adc2; last_adc2 = adc2;
last_adc2_en = adc2_en; last_adc2_en = adc2_en;
@ -637,8 +652,8 @@ void draw_temps(int16_t temp_fet_scaled, int16_t temp_motor_scaled) {
char text[8]; char text[8];
sprintf(text, "%u>C", temp_mot); sprintf(text, "%u>C", temp_mot);
LCD_Draw_Rectangle(LEFT_CENTER_COL1 - 38, 138, 2 * 39, 25, COLOR_BG); LCD_Draw_Rectangle(LEFT_CENTER_COL1 - 38, 138, 2 * 39, 25, COLOR_BG);
GFX_DrawText(LEFT_CENTER_COL1, 159, text, &monomaniacone14pt, GFX_DrawTextScaled(LEFT_CENTER_COL1, 159, text, &monomaniacone27pt,
COLOR_SECONDARY, COLOR_BG, 1, -1); COLOR_SECONDARY, COLOR_BG, 1, -1, 2);
} }
if (temp_fet != last_temp_fet) { if (temp_fet != last_temp_fet) {
last_temp_fet = temp_fet; last_temp_fet = temp_fet;
@ -646,7 +661,8 @@ void draw_temps(int16_t temp_fet_scaled, int16_t temp_motor_scaled) {
char text[8]; char text[8];
sprintf(text, "%u>C", temp_fet); sprintf(text, "%u>C", temp_fet);
LCD_Draw_Rectangle(LEFT_CENTER_COL2 - 39, 138, 2 * 39, 25, COLOR_BG); LCD_Draw_Rectangle(LEFT_CENTER_COL2 - 39, 138, 2 * 39, 25, COLOR_BG);
GFX_DrawText(LEFT_CENTER_COL2, 159, text, &monomaniacone14pt, COLOR_PRIMARY, GFX_DrawTextScaled(LEFT_CENTER_COL2, 159, text, &monomaniacone27pt,
COLOR_BG, 1, -1); COLOR_PRIMARY,
COLOR_BG, 1, -1, 2);
} }
} }

View File

@ -1,7 +1,7 @@
#include "font.h" #include "font.h"
#include "LCD_driver.h" #include "LCD_driver.h"
void GFX_DrawChar( uint16_t GFX_DrawChar(
uint16_t x, uint16_t x,
uint16_t y, uint16_t y,
char c, char c,
@ -10,7 +10,7 @@ void GFX_DrawChar(
uint16_t bg_color) { uint16_t bg_color) {
if (c < font->firstChar || c > font->lastChar) { if (c < font->firstChar || c > font->lastChar) {
return; return x;
} }
uint16_t glyphIndex = c - font->firstChar; uint16_t glyphIndex = c - font->firstChar;
@ -19,8 +19,8 @@ void GFX_DrawChar(
int16_t startX = x + glyph->xOffset; int16_t startX = x + glyph->xOffset;
int16_t startY = y + glyph->yOffset; int16_t startY = y + glyph->yOffset;
if (startX + glyph->width <= 0 || startX >= LCD_WIDTH) return; if (startX + glyph->width <= 0 || startX >= LCD_WIDTH) return x;
if (startY + glyph->height <= 0 || startY >= LCD_HEIGHT) return; if (startY + glyph->height <= 0 || startY >= LCD_HEIGHT) return x;
LCD_Set_Address(startX, startY, startX + glyph->width - 1, LCD_Set_Address(startX, startY, startX + glyph->width - 1,
startY + glyph->height - 1); startY + glyph->height - 1);
@ -32,7 +32,8 @@ void GFX_DrawChar(
for (uint8_t col = 0; col < glyph->width; col++) { for (uint8_t col = 0; col < glyph->width; col++) {
uint16_t byteIndex = glyph->bitmapOffset + (bitPos / 8); uint16_t byteIndex = glyph->bitmapOffset + (bitPos / 8);
uint8_t bitIndex = bitPos % 8; uint8_t bitIndex = bitPos % 8;
uint8_t pixelBit = (font->bitmaps[byteIndex] & (0x80 >> bitIndex)) ? 1 : 0; uint8_t pixelBit =
(font->bitmaps[byteIndex] & (0x80 >> bitIndex)) ? 1 : 0;
if (pixelBit == pendingPixelBit) { if (pixelBit == pendingPixelBit) {
pendingPixelCount++; pendingPixelCount++;
@ -62,9 +63,153 @@ void GFX_DrawChar(
LCD_Draw_Colour_Burst(pendingPixelBit ? fg_color : bg_color, LCD_Draw_Colour_Burst(pendingPixelBit ? fg_color : bg_color,
pendingPixelCount); pendingPixelCount);
} }
return x + glyph->advance;
} }
uint16_t GFX_GetTextWidth(const char *text, const GFXfont *font, int8_t letter_spacing) { uint16_t GFX_ClearChar(
uint16_t x,
uint16_t y,
char c,
const GFXfont *font,
uint16_t bg_color) {
if (c < font->firstChar || c > font->lastChar) {
return x;
}
uint16_t glyphIndex = c - font->firstChar;
const GFXglyph *glyph = &font->glyphs[glyphIndex];
int16_t startX = x + glyph->xOffset;
int16_t startY = y + glyph->yOffset;
if (startX + glyph->width <= 0 || startX >= LCD_WIDTH) return x;
if (startY + glyph->height <= 0 || startY >= LCD_HEIGHT) return x;
LCD_Set_Address(startX, startY, startX + glyph->width - 1,
startY + glyph->height - 1);
LCD_Draw_Colour_Burst(bg_color, glyph->height * glyph->width);
return x + glyph->advance;
}
uint16_t GFX_DrawCharScaled(
uint16_t x,
uint16_t y,
char c,
const GFXfont *font,
uint16_t fg_color,
uint16_t bg_color,
uint8_t scale) {
if (c < font->firstChar || c > font->lastChar || scale == 0) {
return x;
}
uint16_t glyphIndex = c - font->firstChar;
const GFXglyph *glyph = &font->glyphs[glyphIndex];
// Calcul des dimensions cibles après mise à l'échelle
uint16_t target_width = (glyph->width + scale - 1) / scale;
uint16_t target_height = (glyph->height + scale - 1) / scale;
int16_t startX = x + (glyph->xOffset / scale);
int16_t startY = y + (glyph->yOffset / scale);
// Vérification des limites avec les dimensions cibles
if (startX + target_width <= 0 || startX >= LCD_WIDTH) return x;
if (startY + target_height <= 0 || startY >= LCD_HEIGHT) return x;
// Mode standard (sans anti-crénelage)
if (scale == 1) {
LCD_Set_Address(startX, startY, startX + glyph->width - 1,
startY + glyph->height - 1);
uint16_t pendingPixelCount = 0;
uint8_t pendingPixelBit = 0;
uint16_t bitPos = 0;
for (uint8_t row = 0; row < glyph->height; row++) {
for (uint8_t col = 0; col < glyph->width; col++) {
uint16_t byteIndex = glyph->bitmapOffset + (bitPos / 8);
uint8_t bitIndex = bitPos % 8;
uint8_t pixelBit =
(font->bitmaps[byteIndex] & (0x80 >> bitIndex)) ? 1 : 0;
if (pixelBit == pendingPixelBit) {
pendingPixelCount++;
} else {
if (pendingPixelCount != 0) {
LCD_Draw_Colour_Burst(pendingPixelBit ? fg_color : bg_color,
pendingPixelCount);
pendingPixelCount = 1;
}
pendingPixelBit = pixelBit;
}
bitPos++;
}
}
if (pendingPixelCount != 0) {
LCD_Draw_Colour_Burst(pendingPixelBit ? fg_color : bg_color,
pendingPixelCount);
}
return x + glyph->advance;
}
// Mode anti-crénelage (scale > 1)
const uint16_t scale_sq = scale * scale;
const uint8_t bg_R = (bg_color >> 11) & 0x1F;
const uint8_t bg_G = (bg_color >> 5) & 0x3F;
const uint8_t bg_B = bg_color & 0x1F;
const uint8_t fg_R = (fg_color >> 11) & 0x1F;
const uint8_t fg_G = (fg_color >> 5) & 0x3F;
const uint8_t fg_B = fg_color & 0x1F;
for (uint16_t tr = 0; tr < target_height; tr++) {
for (uint16_t tc = 0; tc < target_width; tc++) {
uint16_t count = 0;
const uint16_t src_row_start = tr * scale;
const uint16_t src_col_start = tc * scale;
// Comptage des pixels actifs dans le bloc source
for (uint8_t sr = 0; sr < scale; sr++) {
for (uint8_t sc = 0; sc < scale; sc++) {
const uint16_t src_row = src_row_start + sr;
const uint16_t src_col = src_col_start + sc;
if (src_row >= glyph->height || src_col >= glyph->width) continue;
const uint32_t bitPos = (src_row * glyph->width) + src_col;
const uint16_t byteIndex = glyph->bitmapOffset + (bitPos / 8);
const uint8_t bitIndex = bitPos % 8;
if (font->bitmaps[byteIndex] & (0x80 >> bitIndex)) {
count++;
}
}
}
// Calcul de la couleur interpolée (RGB565)
const uint8_t coverage = (count * 100) / scale_sq;// Pour éviter la division flottante
const uint8_t R = (bg_R * (100 - coverage) + fg_R * coverage) / 100;
const uint8_t G = (bg_G * (100 - coverage) + fg_G * coverage) / 100;
const uint8_t B = (bg_B * (100 - coverage) + fg_B * coverage) / 100;
const uint16_t blended_color = (R << 11) | (G << 5) | B;
// Dessin du pixel cible si dans les limites
const int16_t absX = startX + tc;
const int16_t absY = startY + tr;
if (absX >= 0 && absX < LCD_WIDTH && absY >= 0 && absY < LCD_HEIGHT) {
LCD_Draw_Pixel(absX, absY, blended_color);
}
}
}
return x + (glyph->advance / scale);
}
uint16_t GFX_GetTextWidth(
const char *text,
const GFXfont *font,
int8_t letter_spacing) {
uint16_t width = 0; uint16_t width = 0;
while (*text != '\0') { while (*text != '\0') {
@ -108,21 +253,87 @@ uint16_t GFX_DrawText(
uint16_t cursorY = y; uint16_t cursorY = y;
while (*text != '\0') { while (*text != '\0') {
GFX_DrawChar(cursorX, cursorY, *text, font, fg_color, bg_color); cursorX = GFX_DrawChar(cursorX, cursorY, *text, font, fg_color, bg_color);
cursorX += letter_spacing;
// Move cursor by the glyph's advance width
if (*text >= font->firstChar && *text <= font->lastChar) {
uint16_t glyphIndex = *text - font->firstChar;
cursorX += font->glyphs[glyphIndex].advance;
cursorX += letter_spacing;
} else {
// Default advance for unsupported characters
cursorX += 10 + letter_spacing;
}
text++; text++;
} }
if(alignment == 2) { if (alignment == 2) {
return x;
}
return cursorX;
}
uint16_t GFX_ClearText(
uint16_t x,
uint16_t y,
const char *text,
const GFXfont *font,
uint16_t bg_color,
uint8_t alignment,
int8_t letter_spacing) {
// Adjust x position based on alignment
switch (alignment) {
case 1:// Center
x -= GFX_GetTextWidth(text, font, letter_spacing) / 2;
break;
case 2:// Right
x -= GFX_GetTextWidth(text, font, letter_spacing);
break;
// Default: Left alignment (no adjustment)
}
// Draw each character
uint16_t cursorX = x;
uint16_t cursorY = y;
while (*text != '\0') {
cursorX = GFX_ClearChar(cursorX, cursorY, *text, font, bg_color);
cursorX += letter_spacing;
text++;
}
if (alignment == 2) {
return x;
}
return cursorX;
}
uint16_t GFX_DrawTextScaled(
uint16_t x,
uint16_t y,
const char *text,
const GFXfont *font,
uint16_t fg_color,
uint16_t bg_color,
uint8_t alignment,
int8_t letter_spacing,
uint8_t scale) {
uint16_t text_width = GFX_GetTextWidth(text, font, letter_spacing * scale);
if (scale != 1) {
text_width /= scale;
}
// Adjust x position based on alignment
switch (alignment) {
case 1:// Center
x -= text_width / 2;
break;
case 2:// Right
x -= text_width;
break;
// Default: Left alignment (no adjustment)
}
// Draw each character
uint16_t cursorX = x;
uint16_t cursorY = y;
while (*text != '\0') {
cursorX = GFX_DrawCharScaled(cursorX, cursorY, *text, font, fg_color, bg_color,
scale);
cursorX += letter_spacing;
text++;
}
if (alignment == 2) {
return x; return x;
} }
return cursorX; return cursorX;