From 041426fecb925f704e37d58037639e56d2bfde42 Mon Sep 17 00:00:00 2001 From: Blaz Kristan Date: Fri, 17 Jun 2022 21:19:12 +0200 Subject: [PATCH] Scrolling text selectable font. --- wled00/FX.cpp | 8 +- wled00/FX.h | 4 +- wled00/FX_2Dfcn.cpp | 3094 ++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 3094 insertions(+), 12 deletions(-) diff --git a/wled00/FX.cpp b/wled00/FX.cpp index 91570bbe..00e8fa2d 100644 --- a/wled00/FX.cpp +++ b/wled00/FX.cpp @@ -5866,7 +5866,7 @@ uint16_t WS2812FX::mode_2Dscrollingtext(void) { const uint16_t cols = SEGMENT.virtualWidth(); const uint16_t rows = SEGMENT.virtualHeight(); - const int letterWidth = 6; + const int letterWidth = SEGMENT.custom2 > 128 ? 6 : 5; const int letterHeight = 8; const int yoffset = map(SEGMENT.intensity, 0, 255, -rows/2, rows/2) + (rows-letterHeight)/2; const char *text = PSTR("Use segment name"); // fallback if empty segment name @@ -5889,7 +5889,7 @@ uint16_t WS2812FX::mode_2Dscrollingtext(void) { if (SEGENV.step < millis()) { if ((numberOfLetters * letterWidth) > cols) ++SEGENV.aux0 %= (numberOfLetters * letterWidth) + cols; // offset - else SEGENV.aux0 = (cols - (numberOfLetters * letterWidth))/2; + else SEGENV.aux0 = (cols + (numberOfLetters * letterWidth))/2; ++SEGENV.aux1 &= 0xFF; // color shift SEGENV.step = millis() + map(SEGMENT.speed, 0, 255, 10*FRAMETIME_FIXED, 2*FRAMETIME_FIXED); } @@ -5899,12 +5899,12 @@ uint16_t WS2812FX::mode_2Dscrollingtext(void) { for (uint16_t i = 0; i < numberOfLetters; i++) { if (int(cols) - int(SEGENV.aux0) + letterWidth*(i+1) < 0) continue; // don't draw characters off-screen if (text[i]<32 || text[i]>126) continue; // skip non-ANSII characters (may add UTF translation at some point) - drawCharacter(text[i], int(cols) - int(SEGENV.aux0) + letterWidth*i, yoffset, color_from_palette(SEGENV.aux1, false, PALETTE_SOLID_WRAP, 0)); + drawCharacter(text[i], int(cols) - int(SEGENV.aux0) + letterWidth*i, yoffset, letterWidth, letterHeight, color_from_palette(SEGENV.aux1, false, PALETTE_SOLID_WRAP, 0)); } return FRAMETIME; } -static const char *_data_FX_MODE_SCROLL_TEXT PROGMEM = "2D Scrolling Text@!,Y Offset,Trail;!,!;!"; +static const char *_data_FX_MODE_SCROLL_TEXT PROGMEM = "2D Scrolling Text@!,Y Offset,Trail=0,Font size;!,!;!"; //////////////////////////// diff --git a/wled00/FX.h b/wled00/FX.h index 619498e6..3d3a774b 100644 --- a/wled00/FX.h +++ b/wled00/FX.h @@ -1023,7 +1023,7 @@ class WS2812FX { nscale8(CRGB* leds, uint8_t scale), setPixels(CRGB* leds), drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, CRGB c, CRGB *leds = nullptr), - drawCharacter(unsigned char chr, int16_t x, int16_t y, CRGB color, CRGB *leds = nullptr), + drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB color, CRGB *leds = nullptr), wu_pixel(CRGB *leds, uint32_t x, uint32_t y, CRGB c); inline void setPixelColorXY(uint16_t x, uint16_t y, uint32_t c) { setPixelColorXY(x, y, byte(c>>16), byte(c>>8), byte(c), byte(c>>24)); } @@ -1031,7 +1031,7 @@ class WS2812FX { inline void setPixelColorXY(float x, float y, uint32_t c, bool aa) { setPixelColorXY(x, y, byte(c>>16), byte(c>>8), byte(c), byte(c>>24), aa); } inline void setPixelColorXY(float x, float y, CRGB c, bool aa) { setPixelColorXY(x, y, c.red, c.green, c.blue, 0, aa); } inline void drawLine(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint32_t c) { drawLine(x0, y0, x1, y1, CRGB(byte(c>>16), byte(c>>8), byte(c))); } - inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint32_t c) { drawCharacter(chr, x, y, CRGB(byte(c>>16), byte(c>>8), byte(c))); } + inline void drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, uint32_t c) { drawCharacter(chr, x, y, w, h, CRGB(byte(c>>16), byte(c>>8), byte(c))); } uint16_t XY(uint16_t, uint16_t), diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 0df41723..0e31029c 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -3580,18 +3580,3100 @@ static const unsigned char console_font_6x8[] PROGMEM = { 0x00 /* 000000 */ }; -void WS2812FX::drawCharacter(unsigned char chr, int16_t x, int16_t y, CRGB color, CRGB *leds) { +static const unsigned char console_font_5x8[] PROGMEM = { + + /* + * code=0, hex=0x00, ascii="^@" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=1, hex=0x01, ascii="^A" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xA8, /* 10101 */ + 0xF8, /* 11111 */ + 0xD8, /* 11011 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=2, hex=0x02, ascii="^B" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xA8, /* 10101 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=3, hex=0x03, ascii="^C" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=4, hex=0x04, ascii="^D" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0xF8, /* 11111 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=5, hex=0x05, ascii="^E" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xA8, /* 10101 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=6, hex=0x06, ascii="^F" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0xF8, /* 11111 */ + 0xA8, /* 10101 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=7, hex=0x07, ascii="^G" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=8, hex=0x08, ascii="^H" + */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xD8, /* 11011 */ + 0x88, /* 10001 */ + 0xD8, /* 11011 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + + /* + * code=9, hex=0x09, ascii="^I" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=10, hex=0x0A, ascii="^J" + */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xD8, /* 11011 */ + 0x88, /* 10001 */ + 0xD8, /* 11011 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + + /* + * code=11, hex=0x0B, ascii="^K" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x38, /* 00111 */ + 0x18, /* 00011 */ + 0x68, /* 01101 */ + 0xA0, /* 10100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=12, hex=0x0C, ascii="^L" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=13, hex=0x0D, ascii="^M" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x40, /* 01000 */ + 0xC0, /* 11000 */ + 0x80, /* 10000 */ + 0x00, /* 00000 */ + + /* + * code=14, hex=0x0E, ascii="^N" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x38, /* 00111 */ + 0x48, /* 01001 */ + 0x58, /* 01011 */ + 0xD0, /* 11010 */ + 0x80, /* 10000 */ + 0x00, /* 00000 */ + + /* + * code=15, hex=0x0F, ascii="^O" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=16, hex=0x10, ascii="^P" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x60, /* 01100 */ + 0x70, /* 01110 */ + 0x60, /* 01100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=17, hex=0x11, ascii="^Q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x30, /* 00110 */ + 0x70, /* 01110 */ + 0x30, /* 00110 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + + /* + * code=18, hex=0x12, ascii="^R" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=19, hex=0x13, ascii="^S" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=20, hex=0x14, ascii="^T" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x78, /* 01111 */ + 0xD0, /* 11010 */ + 0xD0, /* 11010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=21, hex=0x15, ascii="^U" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x18, /* 00011 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x48, /* 01001 */ + 0x30, /* 00110 */ + 0xC0, /* 11000 */ + + /* + * code=22, hex=0x16, ascii="^V" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + + /* + * code=23, hex=0x17, ascii="^W" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + + /* + * code=24, hex=0x18, ascii="^X" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=25, hex=0x19, ascii="^Y" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=26, hex=0x1A, ascii="^Z" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0xF8, /* 11111 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=27, hex=0x1B, ascii="^[" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0xF8, /* 11111 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=28, hex=0x1C, ascii="^\" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=29, hex=0x1D, ascii="^]" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=30, hex=0x1E, ascii="^^" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + + /* + * code=31, hex=0x1F, ascii="^_" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=32, hex=0x20, ascii=" " + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=33, hex=0x21, ascii="!" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=34, hex=0x22, ascii=""" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=35, hex=0x23, ascii="#" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=36, hex=0x24, ascii="$" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x30, /* 00110 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + + /* + * code=37, hex=0x25, ascii="%" + */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + 0x30, /* 00110 */ + 0x68, /* 01101 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=38, hex=0x26, ascii="&" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x68, /* 01101 */ + 0x90, /* 10010 */ + 0x68, /* 01101 */ + 0x00, /* 00000 */ + + /* + * code=39, hex=0x27, ascii="'" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=40, hex=0x28, ascii="(" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=41, hex=0x29, ascii=")" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=42, hex=0x2A, ascii="*" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=43, hex=0x2B, ascii="+" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=44, hex=0x2C, ascii="," + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + + /* + * code=45, hex=0x2D, ascii="-" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=46, hex=0x2E, ascii="." + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=47, hex=0x2F, ascii="/" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=48, hex=0x30, ascii="0" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=49, hex=0x31, ascii="1" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=50, hex=0x32, ascii="2" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=51, hex=0x33, ascii="3" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=52, hex=0x34, ascii="4" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x30, /* 00110 */ + 0x50, /* 01010 */ + 0xF0, /* 11110 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + + /* + * code=53, hex=0x35, ascii="5" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x10, /* 00010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=54, hex=0x36, ascii="6" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=55, hex=0x37, ascii="7" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=56, hex=0x38, ascii="8" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=57, hex=0x39, ascii="9" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=58, hex=0x3A, ascii=":" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=59, hex=0x3B, ascii=";" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + + /* + * code=60, hex=0x3C, ascii="<" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + + /* + * code=61, hex=0x3D, ascii="=" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=62, hex=0x3E, ascii=">" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=63, hex=0x3F, ascii="?" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=64, hex=0x40, ascii="@" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x88, /* 10001 */ + 0xB0, /* 10110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=65, hex=0x41, ascii="A" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=66, hex=0x42, ascii="B" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=67, hex=0x43, ascii="C" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=68, hex=0x44, ascii="D" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=69, hex=0x45, ascii="E" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=70, hex=0x46, ascii="F" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x00, /* 00000 */ + + /* + * code=71, hex=0x47, ascii="G" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x80, /* 10000 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=72, hex=0x48, ascii="H" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=73, hex=0x49, ascii="I" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=74, hex=0x4A, ascii="J" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x10, /* 00010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=75, hex=0x4B, ascii="K" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0xA0, /* 10100 */ + 0xC0, /* 11000 */ + 0xA0, /* 10100 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=76, hex=0x4C, ascii="L" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=77, hex=0x4D, ascii="M" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=78, hex=0x4E, ascii="N" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0xD0, /* 11010 */ + 0xB0, /* 10110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=79, hex=0x4F, ascii="O" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=80, hex=0x50, ascii="P" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x00, /* 00000 */ + + /* + * code=81, hex=0x51, ascii="Q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + + /* + * code=82, hex=0x52, ascii="R" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=83, hex=0x53, ascii="S" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x80, /* 10000 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=84, hex=0x54, ascii="T" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=85, hex=0x55, ascii="U" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=86, hex=0x56, ascii="V" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=87, hex=0x57, ascii="W" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x88, /* 10001 */ + 0xA8, /* 10101 */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=88, hex=0x58, ascii="X" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x50, /* 01010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=89, hex=0x59, ascii="Y" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=90, hex=0x5A, ascii="Z" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x80, /* 10000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=91, hex=0x5B, ascii="[" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=92, hex=0x5C, ascii="\" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + + /* + * code=93, hex=0x5D, ascii="]" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=94, hex=0x5E, ascii="^" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=95, hex=0x5F, ascii="_" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + + /* + * code=96, hex=0x60, ascii="`" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=97, hex=0x61, ascii="a" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + 0x70, /* 01110 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=98, hex=0x62, ascii="b" + */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=99, hex=0x63, ascii="c" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x30, /* 00110 */ + 0x00, /* 00000 */ + + /* + * code=100, hex=0x64, ascii="d" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x70, /* 01110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=101, hex=0x65, ascii="e" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=102, hex=0x66, ascii="f" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0xE0, /* 11100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=103, hex=0x67, ascii="g" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + + /* + * code=104, hex=0x68, ascii="h" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=105, hex=0x69, ascii="i" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=106, hex=0x6A, ascii="j" + */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x10, /* 00010 */ + 0x10, /* 00010 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + + /* + * code=107, hex=0x6B, ascii="k" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0xA0, /* 10100 */ + 0xC0, /* 11000 */ + 0xA0, /* 10100 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=108, hex=0x6C, ascii="l" + */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=109, hex=0x6D, ascii="m" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=110, hex=0x6E, ascii="n" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=111, hex=0x6F, ascii="o" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=112, hex=0x70, ascii="p" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + + /* + * code=113, hex=0x71, ascii="q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x10, /* 00010 */ + + /* + * code=114, hex=0x72, ascii="r" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x60, /* 01100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=115, hex=0x73, ascii="s" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xC0, /* 11000 */ + 0x30, /* 00110 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + + /* + * code=116, hex=0x74, ascii="t" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x30, /* 00110 */ + 0x00, /* 00000 */ + + /* + * code=117, hex=0x75, ascii="u" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=118, hex=0x76, ascii="v" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=119, hex=0x77, ascii="w" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=120, hex=0x78, ascii="x" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=121, hex=0x79, ascii="y" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + + /* + * code=122, hex=0x7A, ascii="z" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=123, hex=0x7B, ascii="{" + */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x00, /* 00000 */ + + /* + * code=124, hex=0x7C, ascii="|" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=125, hex=0x7D, ascii="}" + */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=126, hex=0x7E, ascii="~" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=127, hex=0x7F, ascii="^?" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x88, /* 10001 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + + /* + * code=128, hex=0x80, ascii="!^@" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + + /* + * code=129, hex=0x81, ascii="!^A" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=130, hex=0x82, ascii="!^B" + */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=131, hex=0x83, ascii="!^C" + */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0x20, /* 00100 */ + 0xA0, /* 10100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=132, hex=0x84, ascii="!^D" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=133, hex=0x85, ascii="!^E" + */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=134, hex=0x86, ascii="!^F" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=135, hex=0x87, ascii="!^G" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x30, /* 00110 */ + 0x20, /* 00100 */ + + /* + * code=136, hex=0x88, ascii="!^H" + */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=137, hex=0x89, ascii="!^I" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=138, hex=0x8A, ascii="!^J" + */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=139, hex=0x8B, ascii="!^K" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=140, hex=0x8C, ascii="!^L" + */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=141, hex=0x8D, ascii="!^M" + */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=142, hex=0x8E, ascii="!^N" + */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=143, hex=0x8F, ascii="!^O" + */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=144, hex=0x90, ascii="!^P" + */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0xF0, /* 11110 */ + 0x80, /* 10000 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=145, hex=0x91, ascii="!^Q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xD8, /* 11011 */ + 0x78, /* 01111 */ + 0xE0, /* 11100 */ + 0xB8, /* 10111 */ + 0x00, /* 00000 */ + + /* + * code=146, hex=0x92, ascii="!^R" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xA0, /* 10100 */ + 0xF0, /* 11110 */ + 0xA0, /* 10100 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=147, hex=0x93, ascii="!^S" + */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=148, hex=0x94, ascii="!^T" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=149, hex=0x95, ascii="!^U" + */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=150, hex=0x96, ascii="!^V" + */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=151, hex=0x97, ascii="!^W" + */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=152, hex=0x98, ascii="!^X" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x10, /* 00010 */ + 0x60, /* 01100 */ + + /* + * code=153, hex=0x99, ascii="!^Y" + */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=154, hex=0x9A, ascii="!^Z" + */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=155, hex=0x9B, ascii="!^[" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x80, /* 10000 */ + 0x80, /* 10000 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + + /* + * code=156, hex=0x9C, ascii="!^\" + */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x50, /* 01010 */ + 0x40, /* 01000 */ + 0xE0, /* 11100 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=157, hex=0x9D, ascii="!^]" + */ + 0x00, /* 00000 */ + 0xD8, /* 11011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=158, hex=0x9E, ascii="!^^" + */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0xA0, /* 10100 */ + 0xB0, /* 10110 */ + 0xF8, /* 11111 */ + 0x90, /* 10010 */ + 0x88, /* 10001 */ + 0x00, /* 00000 */ + + /* + * code=159, hex=0x9F, ascii="!^_" + */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x80, /* 10000 */ + + /* + * code=160, hex=0xA0, ascii="! " + */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + 0xC0, /* 11000 */ + 0x20, /* 00100 */ + 0x60, /* 01100 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=161, hex=0xA1, ascii="!!" + */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=162, hex=0xA2, ascii="!"" + */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=163, hex=0xA3, ascii="!#" + */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=164, hex=0xA4, ascii="!$" + */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=165, hex=0xA5, ascii="!%" + */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x90, /* 10010 */ + 0xD0, /* 11010 */ + 0xD0, /* 11010 */ + 0xB0, /* 10110 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=166, hex=0xA6, ascii="!&" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x30, /* 00110 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=167, hex=0xA7, ascii="!'" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=168, hex=0xA8, ascii="!(" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=169, hex=0xA9, ascii="!)" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x80, /* 10000 */ + 0x00, /* 00000 */ + + /* + * code=170, hex=0xAA, ascii="!*" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x08, /* 00001 */ + 0x00, /* 00000 */ + + /* + * code=171, hex=0xAB, ascii="!+" + */ + 0x00, /* 00000 */ + 0x80, /* 10000 */ + 0x90, /* 10010 */ + 0xA0, /* 10100 */ + 0x58, /* 01011 */ + 0x88, /* 10001 */ + 0x38, /* 00111 */ + 0x00, /* 00000 */ + + /* + * code=172, hex=0xAC, ascii="!," + */ + 0x00, /* 00000 */ + 0x88, /* 10001 */ + 0x90, /* 10010 */ + 0xA0, /* 10100 */ + 0x48, /* 01001 */ + 0x98, /* 10011 */ + 0x38, /* 00111 */ + 0x08, /* 00001 */ + + /* + * code=173, hex=0xAD, ascii="!-" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=174, hex=0xAE, ascii="!." + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=175, hex=0xAF, ascii="!/" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xA0, /* 10100 */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + + /* + * code=176, hex=0xB0, ascii="!0" + */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + 0xA8, /* 10101 */ + 0x50, /* 01010 */ + + /* + * code=177, hex=0xB1, ascii="!1" + */ + 0xE8, /* 11101 */ + 0x50, /* 01010 */ + 0xB8, /* 10111 */ + 0x50, /* 01010 */ + 0xE8, /* 11101 */ + 0x50, /* 01010 */ + 0xB8, /* 10111 */ + 0x50, /* 01010 */ + + /* + * code=178, hex=0xB2, ascii="!2" + */ + 0xD8, /* 11011 */ + 0x70, /* 01110 */ + 0xD8, /* 11011 */ + 0x70, /* 01110 */ + 0xD8, /* 11011 */ + 0x70, /* 01110 */ + 0xD8, /* 11011 */ + 0x70, /* 01110 */ + + /* + * code=179, hex=0xB3, ascii="!3" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=180, hex=0xB4, ascii="!4" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=181, hex=0xB5, ascii="!5" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=182, hex=0xB6, ascii="!6" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xD0, /* 11010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=183, hex=0xB7, ascii="!7" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=184, hex=0xB8, ascii="!8" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=185, hex=0xB9, ascii="!9" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xD0, /* 11010 */ + 0x10, /* 00010 */ + 0xD0, /* 11010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=186, hex=0xBA, ascii="!:" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=187, hex=0xBB, ascii="!;" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x10, /* 00010 */ + 0xD0, /* 11010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=188, hex=0xBC, ascii="!<" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xD0, /* 11010 */ + 0x10, /* 00010 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=189, hex=0xBD, ascii="!=" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=190, hex=0xBE, ascii="!>" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=191, hex=0xBF, ascii="!?" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xE0, /* 11100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=192, hex=0xC0, ascii="!@" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=193, hex=0xC1, ascii="!A" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=194, hex=0xC2, ascii="!B" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=195, hex=0xC3, ascii="!C" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=196, hex=0xC4, ascii="!D" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=197, hex=0xC5, ascii="!E" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=198, hex=0xC6, ascii="!F" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=199, hex=0xC7, ascii="!G" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x58, /* 01011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=200, hex=0xC8, ascii="!H" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x58, /* 01011 */ + 0x40, /* 01000 */ + 0x78, /* 01111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=201, hex=0xC9, ascii="!I" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x78, /* 01111 */ + 0x40, /* 01000 */ + 0x58, /* 01011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=202, hex=0xCA, ascii="!J" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xD8, /* 11011 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=203, hex=0xCB, ascii="!K" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0xD8, /* 11011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=204, hex=0xCC, ascii="!L" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x58, /* 01011 */ + 0x40, /* 01000 */ + 0x58, /* 01011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=205, hex=0xCD, ascii="!M" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=206, hex=0xCE, ascii="!N" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xD8, /* 11011 */ + 0x00, /* 00000 */ + 0xD8, /* 11011 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=207, hex=0xCF, ascii="!O" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=208, hex=0xD0, ascii="!P" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=209, hex=0xD1, ascii="!Q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=210, hex=0xD2, ascii="!R" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=211, hex=0xD3, ascii="!S" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x78, /* 01111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=212, hex=0xD4, ascii="!T" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=213, hex=0xD5, ascii="!U" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=214, hex=0xD6, ascii="!V" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x78, /* 01111 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=215, hex=0xD7, ascii="!W" + */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0xF8, /* 11111 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + + /* + * code=216, hex=0xD8, ascii="!X" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=217, hex=0xD9, ascii="!Y" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xE0, /* 11100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=218, hex=0xDA, ascii="!Z" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x38, /* 00111 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=219, hex=0xDB, ascii="![" + */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + + /* + * code=220, hex=0xDC, ascii="!\" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + + /* + * code=221, hex=0xDD, ascii="!]" + */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + 0xE0, /* 11100 */ + + /* + * code=222, hex=0xDE, ascii="!^" + */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + 0x18, /* 00011 */ + + /* + * code=223, hex=0xDF, ascii="!_" + */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=224, hex=0xE0, ascii="!`" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x68, /* 01101 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x68, /* 01101 */ + 0x00, /* 00000 */ + + /* + * code=225, hex=0xE1, ascii="!a" + */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0xF0, /* 11110 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xE0, /* 11100 */ + 0x80, /* 10000 */ + + /* + * code=226, hex=0xE2, ascii="!b" + */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=227, hex=0xE3, ascii="!c" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + + /* + * code=228, hex=0xE4, ascii="!d" + */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x48, /* 01001 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x88, /* 10001 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + + /* + * code=229, hex=0xE5, ascii="!e" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x78, /* 01111 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=230, hex=0xE6, ascii="!f" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0xE8, /* 11101 */ + 0x80, /* 10000 */ + + /* + * code=231, hex=0xE7, ascii="!g" + */ + 0x00, /* 00000 */ + 0x98, /* 10011 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + + /* + * code=232, hex=0xE8, ascii="!h" + */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x88, /* 10001 */ + 0x70, /* 01110 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=233, hex=0xE9, ascii="!i" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x88, /* 10001 */ + 0xF8, /* 11111 */ + 0x88, /* 10001 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=234, hex=0xEA, ascii="!j" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x88, /* 10001 */ + 0x88, /* 10001 */ + 0x50, /* 01010 */ + 0xD8, /* 11011 */ + 0x00, /* 00000 */ + + /* + * code=235, hex=0xEB, ascii="!k" + */ + 0x60, /* 01100 */ + 0x80, /* 10000 */ + 0x40, /* 01000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=236, hex=0xEC, ascii="!l" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0xA8, /* 10101 */ + 0xA8, /* 10101 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=237, hex=0xED, ascii="!m" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x08, /* 00001 */ + 0x70, /* 01110 */ + 0xA8, /* 10101 */ + 0x48, /* 01001 */ + 0xB0, /* 10110 */ + 0x00, /* 00000 */ + + /* + * code=238, hex=0xEE, ascii="!n" + */ + 0x00, /* 00000 */ + 0x30, /* 00110 */ + 0x40, /* 01000 */ + 0x70, /* 01110 */ + 0x40, /* 01000 */ + 0x40, /* 01000 */ + 0x30, /* 00110 */ + 0x00, /* 00000 */ + + /* + * code=239, hex=0xEF, ascii="!o" + */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x90, /* 10010 */ + 0x00, /* 00000 */ + + /* + * code=240, hex=0xF0, ascii="!p" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=241, hex=0xF1, ascii="!q" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0xF8, /* 11111 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0xF8, /* 11111 */ + 0x00, /* 00000 */ + + /* + * code=242, hex=0xF2, ascii="!r" + */ + 0x00, /* 00000 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + + /* + * code=243, hex=0xF3, ascii="!s" + */ + 0x00, /* 00000 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x40, /* 01000 */ + 0x20, /* 00100 */ + 0x10, /* 00010 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + + /* + * code=244, hex=0xF4, ascii="!t" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x18, /* 00011 */ + 0x28, /* 00101 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + + /* + * code=245, hex=0xF5, ascii="!u" + */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0x20, /* 00100 */ + 0xA0, /* 10100 */ + 0xC0, /* 11000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=246, hex=0xF6, ascii="!v" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + 0xF0, /* 11110 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + + /* + * code=247, hex=0xF7, ascii="!w" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + 0x50, /* 01010 */ + 0xA0, /* 10100 */ + 0x00, /* 00000 */ + + /* + * code=248, hex=0xF8, ascii="!x" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x50, /* 01010 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=249, hex=0xF9, ascii="!y" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x60, /* 01100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=250, hex=0xFA, ascii="!z" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x20, /* 00100 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=251, hex=0xFB, ascii="!{" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x18, /* 00011 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0xA0, /* 10100 */ + 0x40, /* 01000 */ + 0x00, /* 00000 */ + + /* + * code=252, hex=0xFC, ascii="!|" + */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x50, /* 01010 */ + 0x50, /* 01010 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=253, hex=0xFD, ascii="!}" + */ + 0x00, /* 00000 */ + 0x60, /* 01100 */ + 0x10, /* 00010 */ + 0x20, /* 00100 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=254, hex=0xFE, ascii="!~" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x70, /* 01110 */ + 0x70, /* 01110 */ + 0x70, /* 01110 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + + /* + * code=255, hex=0xFF, ascii="!^Ÿ" + */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ + 0x00, /* 00000 */ +}; + +// draws a raster font character on canvas +// only supports 5x8 and 6x8 fonts ATM +void WS2812FX::drawCharacter(unsigned char chr, int16_t x, int16_t y, uint8_t w, uint8_t h, CRGB color, CRGB *leds) { const uint16_t cols = SEGMENT.virtualWidth(); const uint16_t rows = SEGMENT.virtualHeight(); - for (uint8_t i = 0; i<8; i++) { // character height + if (w<5 || w>6 || h!=8) return; + for (uint8_t i = 0; i= rows) break; // drawing off-screen - uint8_t bits = pgm_read_byte_near(&console_font_6x8[(chr * 8) + i]); - for (uint8_t j = 0; j<6; j++) { // character width - int16_t x0 = x + 5 - j; - if ((x0 >= 0 || x0 < cols) && ((bits>>(j+1)) & 0x01)) { // bit set & drawing on-screen + uint8_t bits; + switch (w) { + case 5: bits = pgm_read_byte_near(&console_font_5x8[(chr * 8) + i]); break; + case 6: bits = pgm_read_byte_near(&console_font_6x8[(chr * 8) + i]); break; + } + for (uint8_t j = 0; j= 0 || x0 < cols) && ((bits>>(j+(8-w))) & 0x01)) { // bit set & drawing on-screen if (leds) leds[XY(x0,y0)] = color; else setPixelColorXY(x0, y0, color); }