From 5facffc3e13354f0b0701ea9b8b671cb4f49f576 Mon Sep 17 00:00:00 2001 From: Stefan `Sec` Zehl Date: Wed, 11 May 2011 23:18:46 +0200 Subject: [PATCH] First version of my font renderer. + monospaced fonts + max 8px height. + can render at any x/y + can render upside down --- lcd/Makefile | 70 +++ lcd/display.c | 157 +++++++ lcd/display.h | 26 ++ lcd/fonts.h | 27 ++ lcd/render.c | 119 ++++++ lcd/render.h | 45 ++ lcd/smallfonts.c | 556 ++++++++++++++++++++++++ lcd/smallfonts.h | 52 +++ lcd/veramono9.c | 1067 ++++++++++++++++++++++++++++++++++++++++++++++ lcd/veramono9.h | 9 + 10 files changed, 2128 insertions(+) create mode 100644 lcd/Makefile create mode 100644 lcd/display.c create mode 100644 lcd/display.h create mode 100644 lcd/fonts.h create mode 100644 lcd/render.c create mode 100644 lcd/render.h create mode 100644 lcd/smallfonts.c create mode 100644 lcd/smallfonts.h create mode 100644 lcd/veramono9.c create mode 100644 lcd/veramono9.h diff --git a/lcd/Makefile b/lcd/Makefile new file mode 100644 index 0000000..1d20b3f --- /dev/null +++ b/lcd/Makefile @@ -0,0 +1,70 @@ +########################################################################## +# User configuration and firmware specific object files +########################################################################## + +# The target, flash and ram of the LPC1xxx microprocessor. +# Use for the target the value: LPC11xx, LPC13xx or LPC17xx +TARGET = LPC13xx + +OBJS = +OBJS += smallfonts.o +OBJS += veramono9.o + +OBJS += display.o +OBJS += render.o + +########################################################################## +# GNU GCC compiler prefix and location +########################################################################## + +CROSS_COMPILE = arm-none-eabi- +AS = $(CROSS_COMPILE)gcc +CC = $(CROSS_COMPILE)gcc +LD = $(CROSS_COMPILE)gcc +AR = $(CROSS_COMPILE)ar +SIZE = $(CROSS_COMPILE)size +OBJCOPY = $(CROSS_COMPILE)objcopy +OBJDUMP = $(CROSS_COMPILE)objdump +OUTFILE = firmware +LPCRC = ./lpcrc + +########################################################################## +# GNU GCC compiler flags +########################################################################## +ROOT_PATH = . +INCLUDE_PATHS = -I$(ROOT_PATH) -I../core + +########################################################################## +# Startup files +########################################################################## + +ifeq (LPC11xx,$(TARGET)) + CORTEX_TYPE=m0 +else + CORTEX_TYPE=m3 +endif + +CPU_TYPE = cortex-$(CORTEX_TYPE) + +########################################################################## +# Compiler settings, parameters and flags +########################################################################## + +CFLAGS = -c -g -Os $(INCLUDE_PATHS) -Wall -mthumb -ffunction-sections -fdata-sections -fmessage-length=0 -mcpu=$(CPU_TYPE) -DTARGET=$(TARGET) -fno-builtin +LDFLAGS = -nostartfiles -mthumb -mcpu=$(CPU_TYPE) -Wl,--gc-sections + +all: libfont.a + +libfont.a: $(OBJS) + $(AR) rcs libfont.a $(OBJS) + +%.o : %.c + $(CC) $(CFLAGS) -o $@ $< + +clean: + rm -f $(OBJS) libfont.a + +render.o: render.c render.h display.h fonts.h +smallfonts.o: smallfonts.c smallfonts.h fonts.h +veramono9.o: veramono9.c veramono9.h fonts.h + diff --git a/lcd/display.c b/lcd/display.c new file mode 100644 index 0000000..70fa872 --- /dev/null +++ b/lcd/display.c @@ -0,0 +1,157 @@ +#include +#include +#include "lpc134x.h" +#include "gpio/gpio.h" + + +/**************************************************************************/ +/*! + Approximates a 1 millisecond delay using "nop". This is less + accurate than a dedicated timer, but is useful in certain situations. + + The number of ticks to delay depends on the optimisation level set + when compiling (-O). Depending on the compiler settings, one of the + two defined values for 'delay' should be used. +*/ +/**************************************************************************/ +void delayms(uint32_t ms) +{ + uint32_t delay = ms * ((CFG_CPU_CCLK / 100) / 45); // Release Mode (-Os) + // uint32_t delay = ms * ((CFG_CPU_CCLK / 100) / 120); // Debug Mode (No optimisations) + + while (delay > 0) + { + __asm volatile ("nop"); + delay--; + } +} + +/**************************************************************************/ +/* Utility routines to manage nokia display */ +/**************************************************************************/ + +uint8_t buffer[RESX*RESY_B]; + +#define CS 2,1 +#define SCK 0,10 +#define SDA 0,9 +#define RST 2,2 + +void write(uint8_t cd, uint8_t data) +{ + uint8_t i; + + gpioSetDir(SDA, 1); + gpioSetValue(SCK, 0); + //delayms(0); + gpioSetValue(CS, 0); + //delayms(0); + + gpioSetValue(SDA, cd); + //delayms(0); + gpioSetValue(SCK, 1); + //delayms(0); + + for(i=0; i<8; i++){ + gpioSetValue(SCK, 0); + //delayms(0); + if( data & 0x80 ) + gpioSetValue(SDA, 1); + else + gpioSetValue(SDA, 0); + data <<= 1; + gpioSetValue(SCK, 1); + //delayms(1); + } + gpioSetValue(CS, 0); + //delayms(0); +} + +void read(uint8_t data) +{ + uint8_t i; + + gpioSetDir(SDA, 1); + gpioSetValue(SCK, 0); + delayms(1); + gpioSetValue(CS, 0); + delayms(1); + + gpioSetValue(SDA, 0); + delayms(1); + gpioSetValue(SCK, 1); + delayms(1); + + for(i=0; i<8; i++){ + gpioSetValue(SCK, 0); + delayms(1); + if( data & 0x80 ) + gpioSetValue(SDA, 1); + else + gpioSetValue(SDA, 0); + data <<= 1; + gpioSetValue(SCK, 1); + delayms(1); + } + + gpioSetDir(SDA, 0); + for(i=0; i<8; i++){ + gpioSetValue(SCK, 0); + delayms(1); + gpioSetValue(SCK, 1); + delayms(1); + } + + gpioSetValue(CS, 0); + delayms(1); +} + +void init(void) +{ + IOCON_SWCLK_PIO0_10 = 0x51; + + gpioSetValue(RST, 1); + gpioSetValue(CS, 1); + + gpioSetDir(RST, 1); + gpioSetDir(CS, 1); + gpioSetDir(SCK, 1); + + + delayms(100); + gpioSetValue(RST, 0); + delayms(100); + gpioSetValue(RST, 1); + delayms(100); + + write(0,0xE2); + delayms(5); + write(0,0xAF); + write(0,0xA4); + write(0,0x2F); + write(0,0xB0); + write(0,0x10); + write(0,0x00); + + uint16_t i; + for(i=0; i<100; i++) + write(1,0x00); +} + +void fill(char f){ + int x; + for(x=0;x + +/* +#badge 96x68 +#badge das farbige hat 98x70 +#badge das laengliche 128x32 +*/ + +#define RESX 96 +#define RESY 68 +#define RESY_B 9 + + +/* Display buffer */ +extern uint8_t buffer[RESX*RESY_B]; + +void write(uint8_t cd, uint8_t data); +void read(uint8_t data); +void init(void); +void fill(char f); +void display(uint32_t shift); + +#endif diff --git a/lcd/fonts.h b/lcd/fonts.h new file mode 100644 index 0000000..c347b9b --- /dev/null +++ b/lcd/fonts.h @@ -0,0 +1,27 @@ +#ifndef __FONTS_H_ +#define __FONTS_H_ + +/* Partially based on original code for the KS0108 by Stephane Rey */ +/* Based on code code by Kevin Townsend */ + +#include + +typedef struct { + const uint8_t widthBits; // width, in bits (or pixels), of the character + const uint16_t offset; // offset of the character's bitmap, in bytes, + // into the the FONT_INFO's data array +} FONT_CHAR_INFO; + + +struct FONT_DEF { + uint8_t u8Width; /* Character width for storage */ + uint8_t u8Height; /* Character height for storage */ + uint8_t u8FirstChar; /* The first character available */ + uint8_t u8LastChar; /* The last character available */ + const uint8_t *au8FontTable; /* Font table start address in memory */ + const FONT_CHAR_INFO *charInfo; /* Pointer to array of char information */ +}; + +typedef struct FONT_DEF * FONT; + +#endif diff --git a/lcd/render.c b/lcd/render.c new file mode 100644 index 0000000..13f7b3e --- /dev/null +++ b/lcd/render.c @@ -0,0 +1,119 @@ +#include +#include +#include + +/* Global Variables */ +const struct FONT_DEF * font = NULL; +char font_direction = FONT_DIR_LTR; + +/* Exported Functions */ +int DoChar(int sx, int sy, char c){ + int rx=RESX-sx-1; + int ry=RESY-sy-font->u8Height; + + if(cu8FirstChar || c>font->u8LastChar) + c=font->u8FirstChar+1; // error + + int off; + int x; + int byte; + int dmul=0; + if(font_direction==FONT_DIR_RTL) + dmul=1; + else if (font_direction==FONT_DIR_LTR) + dmul=-1; + + off=(c-font->u8FirstChar)*font->u8Width; + char yidx=ry/8; + if(0 && sy%8==0){ + for(x=0;xu8Width;x++){ + buffer[(sx+x)+yidx*96]=font->au8FontTable[off+x]; + }; + }else{ + char yoff=ry%8; + unsigned char mask; + if(font->u8Height == 6) + mask=255-3; + else + mask=255; + + if(font_direction==FONT_DIR_LTR) + flip(mask); + + for(x=0;xu8Width;x++){ + byte=font->au8FontTable[off+x]; + if(font_direction==FONT_DIR_LTR) + flip(byte); +#ifdef SANITY +if(rx+x <0 || rx+x > RESX) + gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_ON); +if(yidx<0 || yidx> RESY/8) // Gah. non-integer height. XXX fixme + gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_ON); +#endif + buffer[(rx+dmul*x)+yidx*96]&=~((mask)<>(8-yoff)); + buffer[(rx+dmul*x)+(yidx+1)*96]|=byte>>(8-yoff); + }; + }; + return sx-dmul*x; +}; + +int DoString(int sx, int sy, char *s){ + char *c; + for(c=s;*c!=0;c++){ + sx=DoChar(sx,sy,*c); + }; + return sx; +}; + +int DoInt(int sx, int sy, int num){ +#define mxlen 5 + char s[(mxlen+1)]; + char * o=s; + int len; + s[mxlen]=0; + char neg=0; + + if(num<0){ + num=-num; + neg=1; + }; + + for (len=(mxlen-1);len>=0;len--){ + s[len]=(num%10)+'0'; + if(num==0){ + s[len]=' '; // configurable? + o=s+len; + break; + }; + num/=10; + }; + if(neg) + *o='-'; + return DoString(sx,sy,o); +#undef mxlen +}; + +int DoIntX(int sx, int sy, unsigned int num){ +#define mxlen 8 + char s[(mxlen+1)]; + char * o=s; + int len; + s[mxlen]=0; + for (len=(mxlen-1);len>=0;len--){ + s[len]=(num%16)+'0'; + if(s[len]>'9') + s[len]+='A'-'9'-1; + if(num==0){ +// s[len]=' '; // configurable? +// o=s+len; break; + }; + num/=16; + }; + return DoString(sx,sy,o); +#undef mxlen +}; + + diff --git a/lcd/render.h b/lcd/render.h new file mode 100644 index 0000000..b70e51a --- /dev/null +++ b/lcd/render.h @@ -0,0 +1,45 @@ +#ifndef __RENDER_H_ +#define __RENDER_H_ + +#include "display.h" + +/* +#badge 96x68 +#badge das farbige hat 98x70 +#badge das laengliche 128x32 +*/ + +#define RESX 96 +#define RESY 68 + + +#define FONT_DIR_LTR 0 +#define FONT_DIR_RTL 1 +// Not yet implemented +// #define FONT_DIR_UP 2 +// #define FONT_DIR_DOWN 3 + +// ARM supports byte flip natively. Yay! +#define flip(byte) \ + __asm("rbit %[value], %[value];" \ + "rev %[value], %[value];" \ + : [value] "+r" (byte) : ) + +/* Alternatively you could use normal byte flipping: +#define flip(c) do {\ + c = ((c>>1)&0x55)|((c<<1)&0xAA); \ + c = ((c>>2)&0x33)|((c<<2)&0xCC); \ + c = (c>>4) | (c<<4); \ + }while(0) +*/ + +extern const struct FONT_DEF * font; +extern char font_direction; + +int DoChar(int sx, int sy, char c); +int DoString(int sx, int sy, char *s); +int DoInt(int sx, int sy, int num); +int DoIntX(int sx, int sy, unsigned int num); + + +#endif diff --git a/lcd/smallfonts.c b/lcd/smallfonts.c new file mode 100644 index 0000000..25057b9 --- /dev/null +++ b/lcd/smallfonts.c @@ -0,0 +1,556 @@ +/* Partially based on original code for the KS0108 by Stephane Rey */ + +/**************************************************************************/ +/*! + @file smallfonts.c + @author K. Townsend (microBuilder.eu) + @date 22 March 2010 + @version 0.10 + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2010, microBuilder SARL + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ +#include "smallfonts.h" + +/* System 3x6 - UPPER CASE ONLY */ +const uint8_t au8Font3x6[]= { + 0x00,0x00,0x00, /* Space */ + 0x00,0x5C,0x00, /* ! */ + 0x0C,0x00,0x0C, /* " */ + 0x7C,0x28,0x7C, /* # */ + 0x7C,0x44,0x7C, /* $ */ + 0x24,0x10,0x48, /* % */ + 0x28,0x54,0x08, /* & */ + 0x00,0x0C,0x00, /* ' */ + 0x38,0x44,0x00, /* ( */ + 0x44,0x38,0x00, /* ) */ + 0x20,0x10,0x08, /* / */ + 0x10,0x38,0x10, /* + */ + 0x80,0x40,0x00, /* , */ + 0x10,0x10,0x10, /* - */ + 0x00,0x40,0x00, /* . */ + 0x20,0x10,0x08, /* / */ + 0x38,0x44,0x38, /* 0 */ + 0x00,0x7C,0x00, /* 1 */ + 0x64,0x54,0x48, /* 2 */ + 0x44,0x54,0x28, /* 3 */ + 0x1C,0x10,0x7C, /* 4 */ + 0x4C,0x54,0x24, /* 5 */ + 0x38,0x54,0x20, /* 6 */ + 0x04,0x74,0x0C, /* 7 */ + 0x28,0x54,0x28, /* 8 */ + 0x08,0x54,0x38, /* 9 */ + 0x00,0x50,0x00, /* : */ + 0x80,0x50,0x00, /* ; */ + 0x10,0x28,0x44, /* < */ + 0x28,0x28,0x28, /* = */ + 0x44,0x28,0x10, /* > */ + 0x04,0x54,0x08, /* ? */ + 0x38,0x4C,0x5C, /* @ */ + 0x78,0x14,0x78, /* A */ + 0x7C,0x54,0x28, /* B */ + 0x38,0x44,0x44, /* C */ + 0x7C,0x44,0x38, /* D */ + 0x7C,0x54,0x44, /* E */ + 0x7C,0x14,0x04, /* F */ + 0x38,0x44,0x34, /* G */ + 0x7C,0x10,0x7C, /* H */ + 0x00,0x7C,0x00, /* I */ + 0x20,0x40,0x3C, /* J */ + 0x7C,0x10,0x6C, /* K */ + 0x7C,0x40,0x40, /* L */ + 0x7C,0x08,0x7C, /* M */ + 0x7C,0x04,0x7C, /* N */ + 0x7C,0x44,0x7C, /* O */ + 0x7C,0x14,0x08, /* P */ + 0x38,0x44,0x78, /* Q */ + 0x7C,0x14,0x68, /* R */ + 0x48,0x54,0x24, /* S */ + 0x04,0x7C,0x04, /* T */ + 0x7C,0x40,0x7C, /* U */ + 0x3C,0x40,0x3C, /* V */ + 0x7C,0x20,0x7C, /* W */ + 0x6C,0x10,0x6C, /* X */ + 0x1C,0x60,0x1C, /* Y */ + 0x64,0x54,0x4C, /* Z */ + 0x7C,0x44,0x00, /* [ */ + 0x08,0x10,0x20, /* \ */ + 0x44,0x7C,0x00, /* ] */ + 0x08,0x04,0x08, /* ^ */ + 0x80,0x80,0x80, /* _ */ + 0x04,0x08,0x00 /* ` */ +}; + +/* System 5x8 */ +const uint8_t au8Font5x8[]= +{ + 0x00,0x00,0x00,0x00,0x00, /* Space */ + 0x00,0x00,0x4f,0x00,0x00, /* ! */ + 0x00,0x07,0x00,0x07,0x00, /* " */ + 0x14,0x7f,0x14,0x7f,0x14, /* # */ + 0x24,0x2a,0x7f,0x2a,0x12, /* $ */ + 0x23,0x13,0x08,0x64,0x62, /* % */ + 0x36,0x49,0x55,0x22,0x20, /* & */ + 0x00,0x05,0x03,0x00,0x00, /* ' */ + 0x00,0x1c,0x22,0x41,0x00, /* ( */ + 0x00,0x41,0x22,0x1c,0x00, /* ) */ + 0x14,0x08,0x3e,0x08,0x14, /* / */ + 0x08,0x08,0x3e,0x08,0x08, /* + */ + 0x50,0x30,0x00,0x00,0x00, /* , */ + 0x08,0x08,0x08,0x08,0x08, /* - */ + 0x00,0x60,0x60,0x00,0x00, /* . */ + 0x20,0x10,0x08,0x04,0x02, /* / */ + 0x3e,0x51,0x49,0x45,0x3e, /* 0 */ + 0x00,0x42,0x7f,0x40,0x00, /* 1 */ + 0x42,0x61,0x51,0x49,0x46, /* 2 */ + 0x21,0x41,0x45,0x4b,0x31, /* 3 */ + 0x18,0x14,0x12,0x7f,0x10, /* 4 */ + 0x27,0x45,0x45,0x45,0x39, /* 5 */ + 0x3c,0x4a,0x49,0x49,0x30, /* 6 */ + 0x01,0x71,0x09,0x05,0x03, /* 7 */ + 0x36,0x49,0x49,0x49,0x36, /* 8 */ + 0x06,0x49,0x49,0x29,0x1e, /* 9 */ + 0x00,0x36,0x36,0x00,0x00, /* : */ + 0x00,0x56,0x36,0x00,0x00, /* ; */ + 0x08,0x14,0x22,0x41,0x00, /* < */ + 0x14,0x14,0x14,0x14,0x14, /* = */ + 0x00,0x41,0x22,0x14,0x08, /* > */ + 0x02,0x01,0x51,0x09,0x06, /* ? */ + 0x3e,0x41,0x5d,0x55,0x1e, /* @ */ + 0x7e,0x11,0x11,0x11,0x7e, /* A */ + 0x7f,0x49,0x49,0x49,0x36, /* B */ + 0x3e,0x41,0x41,0x41,0x22, /* C */ + 0x7f,0x41,0x41,0x22,0x1c, /* D */ + 0x7f,0x49,0x49,0x49,0x41, /* E */ + 0x7f,0x09,0x09,0x09,0x01, /* F */ + 0x3e,0x41,0x49,0x49,0x7a, /* G */ + 0x7f,0x08,0x08,0x08,0x7f, /* H */ + 0x00,0x41,0x7f,0x41,0x00, /* I */ + 0x20,0x40,0x41,0x3f,0x01, /* J */ + 0x7f,0x08,0x14,0x22,0x41, /* K */ + 0x7f,0x40,0x40,0x40,0x40, /* L */ + 0x7f,0x02,0x0c,0x02,0x7f, /* M */ + 0x7f,0x04,0x08,0x10,0x7f, /* N */ + 0x3e,0x41,0x41,0x41,0x3e, /* O */ + 0x7f,0x09,0x09,0x09,0x06, /* P */ + 0x3e,0x41,0x51,0x21,0x5e, /* Q */ + 0x7f,0x09,0x19,0x29,0x46, /* R */ + 0x26,0x49,0x49,0x49,0x32, /* S */ + 0x01,0x01,0x7f,0x01,0x01, /* T */ + 0x3f,0x40,0x40,0x40,0x3f, /* U */ + 0x1f,0x20,0x40,0x20,0x1f, /* V */ + 0x3f,0x40,0x38,0x40,0x3f, /* W */ + 0x63,0x14,0x08,0x14,0x63, /* X */ + 0x07,0x08,0x70,0x08,0x07, /* Y */ + 0x61,0x51,0x49,0x45,0x43, /* Z */ + 0x00,0x7f,0x41,0x41,0x00, /* [ */ + 0x02,0x04,0x08,0x10,0x20, /* \ */ + 0x00,0x41,0x41,0x7f,0x00, /* ] */ + 0x04,0x02,0x01,0x02,0x04, /* ^ */ + 0x40,0x40,0x40,0x40,0x40, /* _ */ + 0x00,0x00,0x03,0x05,0x00, /* ` */ + 0x20,0x54,0x54,0x54,0x78, /* a */ + 0x7F,0x44,0x44,0x44,0x38, /* b */ + 0x38,0x44,0x44,0x44,0x44, /* c */ + 0x38,0x44,0x44,0x44,0x7f, /* d */ + 0x38,0x54,0x54,0x54,0x18, /* e */ + 0x04,0x04,0x7e,0x05,0x05, /* f */ + 0x08,0x54,0x54,0x54,0x3c, /* g */ + 0x7f,0x08,0x04,0x04,0x78, /* h */ + 0x00,0x44,0x7d,0x40,0x00, /* i */ + 0x20,0x40,0x44,0x3d,0x00, /* j */ + 0x7f,0x10,0x28,0x44,0x00, /* k */ + 0x00,0x41,0x7f,0x40,0x00, /* l */ + 0x7c,0x04,0x7c,0x04,0x78, /* m */ + 0x7c,0x08,0x04,0x04,0x78, /* n */ + 0x38,0x44,0x44,0x44,0x38, /* o */ + 0x7c,0x14,0x14,0x14,0x08, /* p */ + 0x08,0x14,0x14,0x14,0x7c, /* q */ + 0x7c,0x08,0x04,0x04,0x00, /* r */ + 0x48,0x54,0x54,0x54,0x24, /* s */ + 0x04,0x04,0x3f,0x44,0x44, /* t */ + 0x3c,0x40,0x40,0x20,0x7c, /* u */ + 0x1c,0x20,0x40,0x20,0x1c, /* v */ + 0x3c,0x40,0x30,0x40,0x3c, /* w */ + 0x44,0x28,0x10,0x28,0x44, /* x */ + 0x0c,0x50,0x50,0x50,0x3c, /* y */ + 0x44,0x64,0x54,0x4c,0x44, /* z */ + 0x08,0x36,0x41,0x41,0x00, /* { */ + 0x00,0x00,0x77,0x00,0x00, /* | */ + 0x00,0x41,0x41,0x36,0x08, /* } */ + 0x08,0x08,0x2a,0x1c,0x08, /* <- */ + 0x08,0x1c,0x2a,0x08,0x08, /* -> */ + 0xff,0xff,0xff,0xff,0xff, /* ^? */ +}; + +/* System 7x8 */ +const uint8_t au8Font7x8[]= +{ + 0, 0, 0, 0, 0, 0, 0, //' ' + 0, 6, 95, 95, 6, 0, 0, //'!' + 0, 7, 7, 0, 7, 7, 0, //'"' + 20, 127, 127, 20, 127, 127, 20, //'#' + 36, 46, 107, 107, 58, 18, 0, //'$' + 70, 102, 48, 24, 12, 102, 98, //'%' + 48, 122, 79, 93, 55, 122, 72, //'&' + 4, 7, 3, 0, 0, 0, 0, //''' + 0, 28, 62, 99, 65, 0, 0, //'(' + 0, 65, 99, 62, 28, 0, 0, //')' + 8, 42, 62, 28, 28, 62, 42, //'*' + 8, 8, 62, 62, 8, 8, 0, //'+' + 0, 128, 224, 96, 0, 0, 0, //',' + 8, 8, 8, 8, 8, 8, 0, //'-' + 0, 0, 96, 96, 0, 0, 0, //'.' + 96, 48, 24, 12, 6, 3, 1, //'/' + 62, 127, 113, 89, 77, 127, 62, //'0' + 64, 66, 127, 127, 64, 64, 0, //'1' + 98, 115, 89, 73, 111, 102, 0, //'2' + 34, 99, 73, 73, 127, 54, 0, //'3' + 24, 28, 22, 83, 127, 127, 80, //'4' + 39, 103, 69, 69, 125, 57, 0, //'5' + 60, 126, 75, 73, 121, 48, 0, //'6' + 3, 3, 113, 121, 15, 7, 0, //'7' + 54, 127, 73, 73, 127, 54, 0, //'8' + 6, 79, 73, 105, 63, 30, 0, //'9' + 0, 0, 102, 102, 0, 0, 0, //':' + 0, 128, 230, 102, 0, 0, 0, //';' + 8, 28, 54, 99, 65, 0, 0, //'<' + 36, 36, 36, 36, 36, 36, 0, //'=' + 0, 65, 99, 54, 28, 8, 0, //'>' + 2, 3, 81, 89, 15, 6, 0, //'?' + 62, 127, 65, 93, 93, 31, 30, //'@' + 124,126, 19, 19, 126, 124, 0, //'A' + 65, 127, 127, 73, 73, 127, 54, //'B' + 28, 62, 99, 65, 65, 99, 34, //'C' + 65, 127, 127, 65, 99, 62, 28, //'D' + 65, 127, 127, 73, 93, 65, 99, //'E' + 65, 127, 127, 73, 29, 1, 3, //'F' + 28, 62, 99, 65, 81, 115, 114, //'G' + 127,127, 8, 8, 127, 127, 0, //'H' + 0, 65, 127, 127, 65, 0, 0, //'I' + 48, 112, 64, 65, 127, 63, 1, //'J' + 65, 127, 127, 8, 28, 119, 99, //'K' + 65, 127, 127, 65, 64, 96, 112, //'L' + 127,127, 14, 28, 14, 127, 127, //'M' + 127,127, 6, 12, 24, 127, 127, //'N' + 28, 62, 99, 65, 99, 62, 28, //'O' + 65, 127, 127, 73, 9, 15, 6, //'P' + 30, 63, 33, 113, 127, 94, 0, //'Q' + 65, 127, 127, 9, 25, 127, 102, //'R' + 38, 111, 77, 89, 115, 50, 0, //'S' + 3, 65, 127, 127, 65, 3, 0, //'T' + 127,127, 64, 64, 127, 127, 0, //'U' + 31, 63, 96, 96, 63, 31, 0, //'V' + 127,127, 48, 24, 48, 127, 127, //'W' + 67, 103, 60, 24, 60, 103, 67, //'X' + 7, 79, 120, 120, 79, 7, 0, //'Y' + 71, 99, 113, 89, 77, 103, 115, //'Z' + 0, 127, 127, 65, 65, 0, 0, //'[' + 1, 3, 6, 12, 24, 48, 96, //'\' + 0, 65, 65, 127, 127, 0, 0, //']' + 8, 12, 6, 3, 6, 12, 8, //'^' + 128,128, 128, 128, 128, 128, 128, //'_' + 0, 0, 3, 7, 4, 0, 0, //'`' + 32, 116, 84, 84, 60, 120, 64, //'a' + 65, 127, 63, 72, 72, 120, 48, //'b' + 56, 124, 68, 68, 108, 40, 0, //'c' + 48, 120, 72, 73, 63, 127, 64, //'d' + 56, 124, 84, 84, 92, 24, 0, //'e' + 72, 126, 127, 73, 3, 2, 0, //'f' + 56, 188, 164, 164, 252, 120, 0, //'g' + 65, 127, 127, 8, 4, 124, 120, //'h' + 0, 68, 125, 125, 64, 0, 0, //'i' + 96, 224, 128, 128, 253, 125, 0, //'j' + 65, 127, 127, 16, 56, 108, 68, //'k' + 0, 65, 127, 127, 64, 0, 0, //'l' + 120,124, 28, 56, 28, 124, 120, //'m' + 124,124, 4, 4, 124, 120, 0, //'n' + 56, 124, 68, 68, 124, 56, 0, //'o' + 0, 252, 252, 164, 36, 60, 24, //'p' + 24, 60, 36, 164, 248, 252, 132, //'q' + 68, 124, 120, 76, 4, 28, 24, //'r' + 72, 92, 84, 84, 116, 36, 0, //'s' + 0, 4, 62, 127, 68, 36, 0, //'t' + 60, 124, 64, 64, 60, 124, 64, //'u' + 28, 60, 96, 96, 60, 28, 0, //'v' + 60, 124, 112, 56, 112, 124, 60, //'w' + 68, 108, 56, 16, 56, 108, 68, //'x' + 60, 188, 160, 160, 252, 124, 0, //'y' + 76, 100, 116, 92, 76, 100, 0, //'z' + 8, 8, 62, 119, 65, 65, 0, //'{' + 0, 0, 0, 119, 119, 0, 0, //'|' + 65, 65, 119, 62, 8, 8, 0, //'}' + 2, 3, 1, 3, 2, 3, 1, //'~' + 255,129, 129, 129, 129, 129, 255, //'^?' + 14, 159, 145, 177, 251, 74, 0 //'?' +}; + +/* 8x8 Normal */ +const uint8_t au8Font8x8[]= { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ASCII - 32 + 0x00,0x00,0x00,0x5F,0x5F,0x00,0x00,0x00, // ASCII - 33 + 0x00,0x00,0x03,0x07,0x00,0x07,0x03,0x00, // ASCII - 34 + 0x00,0x10,0x74,0x1C,0x77,0x1C,0x17,0x04, // ASCII - 35 + 0x00,0x24,0x2E,0x2A,0x7F,0x2A,0x3A,0x10, // ASCII - 36 + 0x00,0x4C,0x6A,0x76,0x1A,0x6A,0x56,0x33, // ASCII - 37 + 0x00,0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48, // ASCII - 38 + 0x00,0x00,0x04,0x07,0x03,0x00,0x00,0x00, // ASCII - 39 + 0x00,0x00,0x00,0x1C,0x3E,0x63,0x41,0x00, // ASCII - 40 + 0x00,0x00,0x41,0x63,0x3E,0x1C,0x00,0x00, // ASCII - 41 + 0x00,0x08,0x2A,0x3E,0x1C,0x3E,0x2A,0x08, // ASCII - 42 + 0x00,0x08,0x08,0x3E,0x3E,0x08,0x08,0x00, // ASCII - 43 + 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00, // ASCII - 44 + 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, // ASCII - 45 + 0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00, // ASCII - 46 + 0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x01, // ASCII - 47 + 0x00,0x1C,0x3E,0x61,0x43,0x3E,0x1C,0x00, // ASCII - 48 + 0x00,0x00,0x44,0x7F,0x7F,0x40,0x00,0x00, // ASCII - 49 + 0x00,0x46,0x67,0x71,0x59,0x4F,0x66,0x00, // ASCII - 50 + 0x00,0x22,0x63,0x49,0x4D,0x7F,0x32,0x00, // ASCII - 51 + 0x00,0x18,0x1C,0x52,0x7F,0x7F,0x50,0x00, // ASCII - 52 + 0x00,0x2F,0x6F,0x45,0x45,0x7D,0x39,0x00, // ASCII - 53 + 0x00,0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00, // ASCII - 54 + 0x00,0x07,0x43,0x71,0x7D,0x0F,0x03,0x00, // ASCII - 55 + 0x00,0x36,0x7F,0x4D,0x59,0x7F,0x36,0x00, // ASCII - 56 + 0x00,0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00, // ASCII - 57 + 0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, // ASCII - 58 + 0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, // ASCII - 59 + 0x00,0x00,0x08,0x1C,0x36,0x63,0x41,0x00, // ASCII - 60 + 0x00,0x14,0x14,0x14,0x14,0x14,0x14,0x00, // ASCII - 61 + 0x00,0x00,0x41,0x63,0x36,0x1C,0x08,0x00, // ASCII - 62 + 0x00,0x02,0x07,0x51,0x59,0x0F,0x06,0x00, // ASCII - 63 + 0x00,0x3E,0x41,0x5D,0x55,0x5D,0x51,0x1E, // ASCII - 64 + 0x00,0x40,0x70,0x1D,0x17,0x1F,0x78,0x60, // ASCII - 65 + 0x00,0x41,0x7F,0x7F,0x49,0x4F,0x7E,0x30, // ASCII - 66 + 0x00,0x1C,0x3E,0x63,0x41,0x41,0x42,0x27, // ASCII - 67 + 0x00,0x41,0x7F,0x7F,0x41,0x63,0x3E,0x1C, // ASCII - 68 + 0x00,0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63, // ASCII - 69 + 0x00,0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03, // ASCII - 70 + 0x00,0x1C,0x3E,0x63,0x41,0x51,0x72,0x77, // ASCII - 71 + 0x00,0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00, // ASCII - 72 + 0x00,0x00,0x41,0x7F,0x7F,0x41,0x00,0x00, // ASCII - 73 + 0x00,0x30,0x70,0x41,0x41,0x7F,0x3F,0x01, // ASCII - 74 + 0x00,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x41, // ASCII - 75 + 0x00,0x41,0x7F,0x7F,0x41,0x40,0x60,0x70, // ASCII - 76 + 0x00,0x7F,0x7E,0x0C,0x18,0x0C,0x7E,0x7F, // ASCII - 77 + 0x00,0x7F,0x7E,0x0C,0x18,0x30,0x7F,0x7F, // ASCII - 78 + 0x00,0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C, // ASCII - 79 + 0x00,0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06, // ASCII - 80 + 0x00,0x1C,0x3E,0x63,0x51,0x63,0x3E,0x1C, // ASCII - 81 + 0x00,0x7F,0x7F,0x09,0x19,0x7F,0x66,0x40, // ASCII - 82 + 0x00,0x66,0x6F,0x4D,0x59,0x7B,0x33,0x00, // ASCII - 83 + 0x00,0x03,0x41,0x7F,0x7F,0x41,0x03,0x00, // ASCII - 84 + 0x00,0x3F,0x7F,0x40,0x40,0x40,0x7F,0x3F, // ASCII - 85 + 0x00,0x03,0x0F,0x3D,0x70,0x1D,0x07,0x01, // ASCII - 86 + 0x00,0x0F,0x7F,0x30,0x1C,0x30,0x7F,0x0F, // ASCII - 87 + 0x00,0x63,0x77,0x1C,0x1C,0x77,0x63,0x00, // ASCII - 88 + 0x01,0x03,0x47,0x7C,0x78,0x47,0x03,0x01, // ASCII - 89 + 0x00,0x67,0x73,0x59,0x4D,0x67,0x73,0x00, // ASCII - 90 + 0x00,0x00,0x00,0x7F,0x7F,0x41,0x41,0x00, // ASCII - 91 + 0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60, // ASCII - 92 + 0x00,0x00,0x41,0x41,0x7F,0x7F,0x00,0x00, // ASCII - 93 + 0x00,0x00,0x04,0x06,0x03,0x06,0x04,0x00, // ASCII - 94 + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ASCII - 95 + 0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00, // ASCII - 96 + 0x00,0x68,0x6C,0x54,0x54,0x3C,0x78,0x40, // ASCII - 97 + 0x00,0x41,0x7F,0x3F,0x6C,0x44,0x7C,0x38, // ASCII - 98 + 0x00,0x38,0x7C,0x44,0x44,0x6C,0x2C,0x00, // ASCII - 99 + 0x00,0x38,0x7C,0x44,0x49,0x3F,0x7F,0x40, // ASCII - 100 + 0x00,0x38,0x7C,0x54,0x54,0x5C,0x58,0x00, // ASCII - 101 + 0x00,0x00,0x48,0x7E,0x7F,0x49,0x0B,0x02, // ASCII - 102 + 0x00,0x48,0x7C,0x34,0x34,0x2C,0x68,0x44, // ASCII - 103 + 0x00,0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78, // ASCII - 104 + 0x00,0x00,0x44,0x7D,0x7D,0x40,0x00,0x00, // ASCII - 105 + 0x00,0x60,0x60,0x04,0x7D,0x7D,0x00,0x00, // ASCII - 106 + 0x00,0x41,0x7F,0x7F,0x10,0x78,0x6C,0x44, // ASCII - 107 + 0x00,0x00,0x41,0x7F,0x7F,0x40,0x00,0x00, // ASCII - 108 + 0x00,0x7C,0x7C,0x0C,0x78,0x0C,0x7C,0x78, // ASCII - 109 + 0x00,0x44,0x7C,0x7C,0x08,0x04,0x7C,0x78, // ASCII - 110 + 0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00, // ASCII - 111 + 0x00,0x04,0x7C,0x78,0x24,0x24,0x3C,0x18, // ASCII - 112 + 0x00,0x18,0x3C,0x24,0x24,0x78,0x7C,0x00, // ASCII - 113 + 0x00,0x44,0x7C,0x78,0x4C,0x04,0x1C,0x18, // ASCII - 114 + 0x00,0x48,0x5C,0x5C,0x74,0x74,0x24,0x00, // ASCII - 115 + 0x00,0x00,0x04,0x3E,0x7F,0x44,0x24,0x00, // ASCII - 116 + 0x00,0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40, // ASCII - 117 + 0x00,0x04,0x1C,0x3C,0x60,0x30,0x1C,0x04, // ASCII - 118 + 0x00,0x1C,0x7C,0x30,0x1C,0x30,0x7C,0x1C, // ASCII - 119 + 0x00,0x44,0x6C,0x3C,0x10,0x78,0x6C,0x44, // ASCII - 120 + 0x00,0x44,0x4C,0x1C,0x70,0x64,0x1C,0x0C, // ASCII - 121 + 0x00,0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00, // ASCII - 122 + 0x00,0x08,0x08,0x3E,0x77,0x41,0x41,0x00, // ASCII - 123 + 0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00, // ASCII - 124 + 0x00,0x41,0x41,0x77,0x3E,0x08,0x08,0x00, // ASCII - 125 + 0x00,0x02,0x01,0x01,0x03,0x02,0x02,0x01, // ASCII - 126 + 0x00,0x60,0x78,0x4E,0x47,0x5E,0x78,0x60, // ASCII - 127 + 0x00,0x1C,0x3E,0x23,0x41,0x41,0x42,0x27, // ASCII - 128 + 0x00,0x3D,0x7D,0x40,0x41,0x3D,0x7C,0x40, // ASCII - 129 +}; + +/* 8x8 Thin */ +const uint8_t au8Font8x8Thin[]= { + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00, + 0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00, + 0x00,0x14,0x7F,0x14,0x14,0x7F,0x14,0x00, + 0x00,0x24,0x2A,0x6B,0x6B,0x2A,0x12,0x00, + 0x00,0x46,0x26,0x10,0x08,0x64,0x62,0x00, + 0x30,0x4A,0x45,0x4D,0x32,0x48,0x48,0x00, + 0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x00, + 0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00, + 0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00, + 0x08,0x2A,0x1C,0x1C,0x1C,0x2A,0x08,0x00, + 0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00, + 0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00, + 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, + 0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00, + 0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00, + 0x00,0x3E,0x61,0x51,0x49,0x45,0x3E,0x00, + 0x00,0x44,0x42,0x7F,0x40,0x40,0x00,0x00, + 0x00,0x62,0x51,0x51,0x49,0x49,0x66,0x00, + 0x00,0x22,0x41,0x49,0x49,0x49,0x36,0x00, + 0x10,0x18,0x14,0x52,0x7F,0x50,0x10,0x00, + 0x00,0x27,0x45,0x45,0x45,0x45,0x39,0x00, + 0x00,0x3C,0x4A,0x49,0x49,0x49,0x30,0x00, + 0x00,0x03,0x01,0x71,0x09,0x05,0x03,0x00, + 0x00,0x36,0x49,0x49,0x49,0x49,0x36,0x00, + 0x00,0x06,0x49,0x49,0x49,0x29,0x1E,0x00, + 0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00, + 0x00,0x00,0x80,0x66,0x00,0x00,0x00,0x00, + 0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00, + 0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00, + 0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x00, + 0x00,0x02,0x01,0x01,0x51,0x09,0x06,0x00, + 0x00,0x3E,0x41,0x5D,0x55,0x55,0x1E,0x00, + 0x00,0x7C,0x12,0x11,0x11,0x12,0x7C,0x00, + 0x00,0x41,0x7F,0x49,0x49,0x49,0x36,0x00, + 0x00,0x1C,0x22,0x41,0x41,0x41,0x22,0x00, + 0x00,0x41,0x7F,0x41,0x41,0x22,0x1C,0x00, + 0x00,0x41,0x7F,0x49,0x5D,0x41,0x63,0x00, + 0x00,0x41,0x7F,0x49,0x1D,0x01,0x03,0x00, + 0x00,0x1C,0x22,0x41,0x51,0x51,0x72,0x00, + 0x00,0x7F,0x08,0x08,0x08,0x08,0x7F,0x00, + 0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00, + 0x00,0x30,0x40,0x40,0x41,0x3F,0x01,0x00, + 0x00,0x41,0x7F,0x08,0x14,0x22,0x41,0x40, + 0x00,0x41,0x7F,0x41,0x40,0x40,0x60,0x00, + 0x00,0x7F,0x01,0x02,0x04,0x02,0x01,0x7F, + 0x00,0x7F,0x01,0x02,0x04,0x08,0x7F,0x00, + 0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,0x00, + 0x00,0x41,0x7F,0x49,0x09,0x09,0x06,0x00, + 0x00,0x1E,0x21,0x21,0x31,0x21,0x5E,0x40, + 0x00,0x41,0x7F,0x49,0x19,0x29,0x46,0x00, + 0x00,0x26,0x49,0x49,0x49,0x49,0x32,0x00, + 0x00,0x03,0x01,0x41,0x7F,0x41,0x01,0x03, + 0x00,0x3F,0x40,0x40,0x40,0x40,0x3F,0x00, + 0x00,0x0F,0x10,0x20,0x40,0x20,0x10,0x0F, + 0x00,0x3F,0x40,0x40,0x38,0x40,0x40,0x3F, + 0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41, + 0x00,0x01,0x02,0x44,0x78,0x44,0x02,0x01, + 0x00,0x43,0x61,0x51,0x49,0x45,0x43,0x61, + 0x00,0x7F,0x41,0x41,0x41,0x00,0x00,0x00, + 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00, + 0x00,0x41,0x41,0x41,0x7F,0x00,0x00,0x00, + 0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00, + 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, + 0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00, + 0x00,0x20,0x54,0x54,0x54,0x54,0x78,0x40, + 0x00,0x01,0x7F,0x30,0x48,0x48,0x48,0x30, + 0x00,0x38,0x44,0x44,0x44,0x44,0x28,0x00, + 0x00,0x30,0x48,0x48,0x48,0x31,0x7F,0x40, + 0x00,0x38,0x54,0x54,0x54,0x54,0x18,0x00, + 0x00,0x00,0x48,0x7E,0x49,0x01,0x02,0x00, + 0x00,0x98,0xA4,0xA4,0xA4,0xA4,0x78,0x04, + 0x00,0x41,0x7F,0x08,0x04,0x04,0x78,0x00, + 0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00, + 0x00,0x60,0x80,0x80,0x80,0x84,0x7D,0x00, + 0x00,0x01,0x7F,0x10,0x28,0x44,0x40,0x00, + 0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00, + 0x00,0x7C,0x04,0x04,0x78,0x04,0x04,0x78, + 0x00,0x7C,0x08,0x04,0x04,0x04,0x78,0x00, + 0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00, + 0x00,0x84,0xFC,0x98,0x24,0x24,0x18,0x00, + 0x00,0x18,0x24,0x24,0x98,0xFC,0x84,0x00, + 0x00,0x44,0x7C,0x48,0x04,0x04,0x18,0x00, + 0x00,0x48,0x54,0x54,0x54,0x54,0x24,0x00, + 0x00,0x04,0x04,0x3F,0x44,0x44,0x20,0x00, + 0x00,0x3C,0x40,0x40,0x40,0x20,0x7C,0x00, + 0x00,0x0C,0x10,0x20,0x40,0x20,0x10,0x0C, + 0x00,0x3C,0x40,0x40,0x38,0x40,0x40,0x3C, + 0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00, + 0x00,0x9C,0xA0,0xA0,0xA0,0xA0,0x7C,0x00, + 0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00, + 0x00,0x08,0x08,0x36,0x41,0x41,0x00,0x00, + 0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00, + 0x00,0x00,0x41,0x41,0x36,0x08,0x08,0x00, + 0x00,0x02,0x01,0x01,0x02,0x02,0x01,0x00, + 0x00,0x70,0x48,0x44,0x42,0x44,0x48,0x70, + 0x00,0x0E,0x91,0x91,0xB1,0xB1,0x4A,0x00, + 0x00,0x3A,0x40,0x40,0x40,0x7A,0x40,0x00, + 0x00,0x38,0x54,0x54,0x55,0x55,0x18,0x00, + 0x00,0x22,0x55,0x55,0x55,0x79,0x42,0x00, + 0x00,0x21,0x54,0x54,0x54,0x78,0x41,0x00, + 0x00,0x20,0x55,0x55,0x54,0x78,0x40,0x00, + 0x00,0x20,0x54,0x55,0x54,0x78,0x40,0x00, + 0x00,0x18,0x24,0xA4,0xA4,0xE4,0x40,0x00, + 0x00,0x3A,0x55,0x55,0x55,0x55,0x1A,0x00, + 0x00,0x39,0x54,0x54,0x54,0x54,0x19,0x00, + 0x00,0x38,0x55,0x55,0x54,0x54,0x18,0x00, + 0x00,0x00,0x01,0x44,0x7C,0x41,0x00,0x00, + 0x02,0x01,0x45,0x7D,0x41,0x01,0x02,0x00, + 0x00,0x00,0x01,0x45,0x7C,0x40,0x00,0x00, + 0x00,0x79,0x14,0x12,0x12,0x14,0x79,0x00, + 0x00,0x70,0x28,0x2B,0x2B,0x28,0x70,0x00, + 0x00,0x44,0x7C,0x54,0x55,0x45,0x00,0x00, + 0x00,0x20,0x54,0x54,0x58,0x38,0x54,0x54, + 0x00,0x7C,0x0A,0x09,0x09,0x7F,0x49,0x49, + 0x00,0x30,0x4A,0x49,0x49,0x4A,0x30,0x00, + 0x00,0x32,0x48,0x48,0x48,0x48,0x32,0x00, + 0x00,0x30,0x49,0x4A,0x48,0x48,0x30,0x00, + 0x00,0x38,0x42,0x41,0x41,0x42,0x38,0x00, + 0x00,0x38,0x41,0x42,0x40,0x40,0x38,0x00, + 0x00,0x1A,0xA0,0xA0,0xA0,0xA0,0x7A,0x00, + 0x00,0x19,0x24,0x42,0x42,0x24,0x19,0x00, + 0x00,0x3D,0x40,0x40,0x40,0x40,0x3D,0x00, + 0x00,0x18,0x24,0x24,0xE7,0x24,0x24,0x00, + 0x00,0x68,0x5E,0x49,0x41,0x42,0x20,0x00, + 0x00,0x15,0x16,0x7C,0x16,0x15,0x00,0x00, + 0x81,0xFF,0x85,0x05,0x17,0xFA,0x90,0x50, + 0x40,0x88,0x88,0x7F,0x09,0x09,0x02,0x00, + 0x00,0x20,0x54,0x54,0x55,0x79,0x40,0x00, +}; + +/* Global variables */ +const struct FONT_DEF Font_3x6 = {3, 6, 32, 96, au8Font3x6, NULL}; +const struct FONT_DEF Font_5x8 = {5, 8, 32, 128, au8Font5x8, NULL}; +const struct FONT_DEF Font_7x8 = {7, 8, 32, 128, au8Font7x8, NULL}; +const struct FONT_DEF Font_8x8 = {8, 8, 32, 128, au8Font8x8, NULL}; +const struct FONT_DEF Font_8x8Thin = {8, 8, 32, 128, au8Font8x8Thin, NULL}; + diff --git a/lcd/smallfonts.h b/lcd/smallfonts.h new file mode 100644 index 0000000..ec3d667 --- /dev/null +++ b/lcd/smallfonts.h @@ -0,0 +1,52 @@ +/**************************************************************************/ +/*! + @file smallfonts.h + @author K. Townsend (microBuilder.eu) + @date 22 March 2010 + @version 0.10 + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2010, microBuilder SARL + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +/**************************************************************************/ +#ifndef __SMALLFONTS_H_ +#define __SMALLFONTS_H_ + +#include "fonts.h" + +/* Partially based on original code for the KS0108 by Stephane Rey */ +/* Current version by Kevin Townsend */ + +extern const struct FONT_DEF Font_3x6; +extern const struct FONT_DEF Font_5x8; +extern const struct FONT_DEF Font_7x8; +extern const struct FONT_DEF Font_8x8; +extern const struct FONT_DEF Font_8x8Thin; + +#endif diff --git a/lcd/veramono9.c b/lcd/veramono9.c new file mode 100644 index 0000000..7877920 --- /dev/null +++ b/lcd/veramono9.c @@ -0,0 +1,1067 @@ +#include "veramono9.h" + +/* +** Font data for Bitstream Vera Sans Mono 9pt +*/ + +/* Character bitmaps for Bitstream Vera Sans Mono 9pt */ +const uint8_t bitstreamVeraSansMono9ptCharBitmaps[] = +{ + /* @0 ' ' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @16 '!' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x1B, 0xF0, /* ## ###### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @32 '"' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x70, /* ### */ + 0x00, 0x00, /* */ + 0x00, 0x70, /* ### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @48 '#' (8 pixels wide) */ + 0x04, 0x00, /* # */ + 0x1C, 0x80, /* ### # */ + 0x07, 0xC0, /* ##### */ + 0x14, 0xA0, /* # # # # */ + 0x0F, 0x80, /* ##### */ + 0x04, 0xE0, /* # ### */ + 0x00, 0x80, /* # */ + 0x00, 0x00, /* */ + + /* @64 '$' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x09, 0xC0, /* # ### */ + 0x11, 0x20, /* # # # */ + 0x7F, 0xF0, /* ########### */ + 0x12, 0x20, /* # # # */ + 0x0E, 0x40, /* ### # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @80 '%' (8 pixels wide) */ + 0x00, 0x60, /* ## */ + 0x02, 0x90, /* # # # */ + 0x02, 0x90, /* # # # */ + 0x0D, 0x60, /* ## # ## */ + 0x13, 0x00, /* # ## */ + 0x12, 0x80, /* # # # */ + 0x0C, 0x00, /* ## */ + 0x00, 0x00, /* */ + + /* @96 '&' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0E, 0x00, /* ### */ + 0x19, 0xE0, /* ## #### */ + 0x11, 0x90, /* # ## # */ + 0x16, 0x10, /* # ## # */ + 0x0C, 0x10, /* ## # */ + 0x16, 0x00, /* # ## */ + 0x00, 0x00, /* */ + + /* @112 ''' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x70, /* ### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @128 '(' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x38, 0x38, /* ### ### */ + 0x20, 0x08, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @144 ')' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x20, 0x08, /* # # */ + 0x38, 0x38, /* ### ### */ + 0x07, 0xC0, /* ##### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @160 '*' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x01, 0x20, /* # # */ + 0x00, 0xC0, /* ## */ + 0x03, 0xF0, /* ###### */ + 0x00, 0xC0, /* ## */ + 0x01, 0x20, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @176 '+' (8 pixels wide) */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x1F, 0xC0, /* ####### */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x00, 0x00, /* */ + + /* @192 ',' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x20, 0x00, /* # */ + 0x18, 0x00, /* ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @208 '-' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @224 '.' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x18, 0x00, /* ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @240 '/' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x20, 0x00, /* # */ + 0x18, 0x00, /* ## */ + 0x06, 0x00, /* ## */ + 0x01, 0x80, /* ## */ + 0x00, 0x60, /* ## */ + 0x00, 0x10, /* # */ + 0x00, 0x00, /* */ + + /* @256 '0' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x18, 0x30, /* ## ## */ + 0x10, 0x10, /* # # */ + 0x11, 0x10, /* # # # */ + 0x18, 0x30, /* ## ## */ + 0x07, 0xC0, /* ##### */ + 0x00, 0x00, /* */ + + /* @272 '1' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x1F, 0xF0, /* ######### */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @288 '2' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x20, /* # # */ + 0x18, 0x10, /* ## # */ + 0x14, 0x10, /* # # # */ + 0x12, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x10, 0xE0, /* # ### */ + 0x00, 0x00, /* */ + + /* @304 '3' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x08, 0x20, /* # # */ + 0x10, 0x10, /* # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x0E, 0xE0, /* ### ### */ + 0x00, 0x00, /* */ + + /* @320 '4' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x06, 0x00, /* ## */ + 0x05, 0x80, /* # ## */ + 0x04, 0xC0, /* # ## */ + 0x04, 0x30, /* # ## */ + 0x1F, 0xF0, /* ######### */ + 0x04, 0x00, /* # */ + 0x00, 0x00, /* */ + + /* @336 '5' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x08, 0xF0, /* # #### */ + 0x10, 0x90, /* # # # */ + 0x10, 0x90, /* # # # */ + 0x10, 0x90, /* # # # */ + 0x19, 0x90, /* ## ## # */ + 0x0F, 0x00, /* #### */ + 0x00, 0x00, /* */ + + /* @352 '6' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x19, 0x20, /* ## # # */ + 0x10, 0x90, /* # # # */ + 0x10, 0x90, /* # # # */ + 0x19, 0x90, /* ## ## # */ + 0x0F, 0x20, /* #### # */ + 0x00, 0x00, /* */ + + /* @368 '7' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x10, /* # */ + 0x10, 0x10, /* # # */ + 0x0C, 0x10, /* ## # */ + 0x03, 0x10, /* ## # */ + 0x00, 0xF0, /* #### */ + 0x00, 0x30, /* ## */ + 0x00, 0x00, /* */ + + /* @384 '8' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0E, 0xE0, /* ### ### */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x0E, 0xE0, /* ### ### */ + 0x00, 0x00, /* */ + + /* @400 '9' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x09, 0xE0, /* # #### */ + 0x13, 0x30, /* # ## ## */ + 0x12, 0x10, /* # # # */ + 0x12, 0x10, /* # # # */ + 0x09, 0x30, /* # # ## */ + 0x07, 0xC0, /* ##### */ + 0x00, 0x00, /* */ + + /* @416 ':' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x19, 0x80, /* ## ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @432 ';' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x20, 0x00, /* # */ + 0x19, 0x80, /* ## ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @448 '<' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x03, 0x00, /* ## */ + 0x03, 0x00, /* ## */ + 0x04, 0x80, /* # # */ + 0x04, 0x80, /* # # */ + 0x04, 0x80, /* # # */ + 0x08, 0x40, /* # # */ + 0x00, 0x00, /* */ + + /* @464 '=' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x05, 0x00, /* # # */ + 0x05, 0x00, /* # # */ + 0x05, 0x00, /* # # */ + 0x05, 0x00, /* # # */ + 0x05, 0x00, /* # # */ + 0x05, 0x00, /* # # */ + 0x00, 0x00, /* */ + + /* @480 '>' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x08, 0x40, /* # # */ + 0x04, 0x80, /* # # */ + 0x04, 0x80, /* # # */ + 0x04, 0x80, /* # # */ + 0x03, 0x00, /* ## */ + 0x03, 0x00, /* ## */ + 0x00, 0x00, /* */ + + /* @496 '?' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x20, /* # */ + 0x1B, 0x10, /* ## ## # */ + 0x01, 0x90, /* ## # */ + 0x00, 0x90, /* # # */ + 0x00, 0x60, /* ## */ + 0x00, 0x00, /* */ + + /* @512 '@' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0x80, /* ###### */ + 0x30, 0x40, /* ## # */ + 0x46, 0x20, /* # ## # */ + 0x49, 0x20, /* # # # # */ + 0x49, 0x60, /* # # # ## */ + 0x0F, 0xC0, /* ###### */ + 0x00, 0x00, /* */ + + /* @528 'A' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x18, 0x00, /* ## */ + 0x07, 0x80, /* #### */ + 0x04, 0x70, /* # ### */ + 0x04, 0x70, /* # ### */ + 0x07, 0x80, /* #### */ + 0x18, 0x00, /* ## */ + 0x00, 0x00, /* */ + + /* @544 'B' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x0E, 0xE0, /* ### ### */ + 0x00, 0x00, /* */ + + /* @560 'C' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x08, 0x20, /* # # */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x08, 0x20, /* # # */ + 0x00, 0x00, /* */ + + /* @576 'D' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x08, 0x20, /* # # */ + 0x07, 0xC0, /* ##### */ + 0x00, 0x00, /* */ + + /* @592 'E' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x00, 0x00, /* */ + + /* @608 'F' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x00, 0x00, /* */ + + /* @624 'G' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x08, 0x20, /* # # */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x11, 0x10, /* # # # */ + 0x0F, 0x20, /* #### # */ + 0x00, 0x00, /* */ + + /* @640 'H' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x00, /* */ + + /* @656 'I' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x1F, 0xF0, /* ######### */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @672 'J' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x08, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x0F, 0xF0, /* ######## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @688 'K' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x01, 0x00, /* # */ + 0x01, 0x80, /* ## */ + 0x06, 0x40, /* ## # */ + 0x0C, 0x20, /* ## # */ + 0x10, 0x10, /* # # */ + 0x00, 0x00, /* */ + + /* @704 'L' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x00, 0x00, /* */ + + /* @720 'M' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x60, /* ## */ + 0x03, 0x80, /* ### */ + 0x03, 0x80, /* ### */ + 0x00, 0x60, /* ## */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x00, /* */ + + /* @736 'N' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x30, /* ## */ + 0x01, 0xC0, /* ### */ + 0x07, 0x00, /* ### */ + 0x18, 0x00, /* ## */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x00, /* */ + + /* @752 'O' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x18, 0x30, /* ## ## */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x18, 0x30, /* ## ## */ + 0x07, 0xC0, /* ##### */ + 0x00, 0x00, /* */ + + /* @768 'P' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x00, 0xE0, /* ### */ + 0x00, 0x00, /* */ + + /* @784 'Q' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x07, 0xC0, /* ##### */ + 0x18, 0x30, /* ## ## */ + 0x10, 0x10, /* # # */ + 0x10, 0x10, /* # # */ + 0x78, 0x30, /* #### ## */ + 0x0F, 0xC0, /* ###### */ + 0x00, 0x00, /* */ + + /* @800 'R' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF0, /* ######### */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x01, 0x10, /* # # */ + 0x03, 0x10, /* ## # */ + 0x0C, 0xE0, /* ## ### */ + 0x10, 0x00, /* # */ + + /* @816 'S' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x08, 0xE0, /* # ### */ + 0x11, 0x90, /* # ## # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x11, 0x10, /* # # # */ + 0x0E, 0x20, /* ### # */ + 0x00, 0x00, /* */ + + /* @832 'T' (8 pixels wide) */ + 0x00, 0x10, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x10, /* # */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x10, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x00, /* */ + + /* @848 'U' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0xF0, /* ######## */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x0F, 0xF0, /* ######## */ + 0x00, 0x00, /* */ + + /* @864 'V' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x30, /* ## */ + 0x03, 0xC0, /* #### */ + 0x1C, 0x00, /* ### */ + 0x1C, 0x00, /* ### */ + 0x03, 0xC0, /* #### */ + 0x00, 0x30, /* ## */ + 0x00, 0x00, /* */ + + /* @880 'W' (8 pixels wide) */ + 0x03, 0xF0, /* ###### */ + 0x1C, 0x00, /* ### */ + 0x07, 0x80, /* #### */ + 0x00, 0x60, /* ## */ + 0x07, 0x80, /* #### */ + 0x1C, 0x00, /* ### */ + 0x03, 0xF0, /* ###### */ + 0x00, 0x00, /* */ + + /* @896 'X' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x10, /* # # */ + 0x0C, 0x60, /* ## ## */ + 0x03, 0x80, /* ### */ + 0x03, 0x80, /* ### */ + 0x0C, 0x60, /* ## ## */ + 0x10, 0x10, /* # # */ + 0x00, 0x00, /* */ + + /* @912 'Y' (8 pixels wide) */ + 0x00, 0x10, /* # */ + 0x00, 0x20, /* # */ + 0x00, 0xC0, /* ## */ + 0x1F, 0x00, /* ##### */ + 0x00, 0xC0, /* ## */ + 0x00, 0x20, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x00, /* */ + + /* @928 'Z' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x18, 0x10, /* ## # */ + 0x1C, 0x10, /* ### # */ + 0x13, 0x10, /* # ## # */ + 0x11, 0x90, /* # ## # */ + 0x10, 0x70, /* # ### */ + 0x10, 0x30, /* # ## */ + 0x00, 0x00, /* */ + + /* @944 '[' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x3F, 0xF8, /* ########### */ + 0x20, 0x08, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @960 '\' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x10, /* # */ + 0x00, 0x60, /* ## */ + 0x01, 0x80, /* ## */ + 0x06, 0x00, /* ## */ + 0x18, 0x00, /* ## */ + 0x20, 0x00, /* # */ + 0x00, 0x00, /* */ + + /* @976 ']' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x20, 0x08, /* # # */ + 0x3F, 0xF8, /* ########### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @992 '^' (8 pixels wide) */ + 0x00, 0x40, /* # */ + 0x00, 0x20, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x20, /* # */ + 0x00, 0x40, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1008 '_' (8 pixels wide) */ + 0x80, 0x00, /* # */ + 0x80, 0x00, /* # */ + 0x80, 0x00, /* # */ + 0x80, 0x00, /* # */ + 0x80, 0x00, /* # */ + 0x80, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1024 '`' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x08, /* # */ + 0x00, 0x10, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1040 'a' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0C, 0x80, /* ## # */ + 0x12, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x1F, 0x80, /* ###### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1056 'b' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF8, /* ########## */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x0F, 0x80, /* ##### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1072 'c' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x18, 0xC0, /* ## ## */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x80, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1088 'd' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x1F, 0xF8, /* ########## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1104 'e' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x12, 0xC0, /* # # ## */ + 0x12, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x0B, 0x80, /* # ### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1120 'f' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x40, /* # */ + 0x00, 0x40, /* # */ + 0x1F, 0xF0, /* ######### */ + 0x00, 0x48, /* # # */ + 0x00, 0x48, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1136 'g' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x58, 0x40, /* # ## # */ + 0x90, 0x40, /* # # # */ + 0x90, 0x40, /* # # # */ + 0x7F, 0xC0, /* ######### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1152 'h' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF8, /* ########## */ + 0x00, 0x80, /* # */ + 0x00, 0x40, /* # */ + 0x00, 0x40, /* # */ + 0x1F, 0x80, /* ###### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1168 'i' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x1F, 0xC8, /* ####### # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1184 'j' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x80, 0x40, /* # # */ + 0x80, 0x40, /* # # */ + 0x7F, 0xC8, /* ######### # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1200 'k' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xF8, /* ########## */ + 0x02, 0x00, /* # */ + 0x05, 0x00, /* # # */ + 0x08, 0x80, /* # # */ + 0x10, 0x40, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1216 'l' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x08, /* # */ + 0x00, 0x08, /* # */ + 0x0F, 0xF8, /* ######### */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1232 'm' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0x40, /* # */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0x40, /* # */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1248 'n' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0x80, /* # */ + 0x00, 0x40, /* # */ + 0x00, 0x40, /* # */ + 0x1F, 0x80, /* ###### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1264 'o' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x0F, 0x80, /* ##### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1280 'p' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0xFF, 0xC0, /* ########## */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x0F, 0x80, /* ##### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1296 'q' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0x80, /* ##### */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0xFF, 0xC0, /* ########## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1312 'r' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0xC0, /* ## */ + 0x00, 0x40, /* # */ + 0x00, 0x40, /* # */ + 0x00, 0x80, /* # */ + 0x00, 0x00, /* */ + + /* @1328 's' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x09, 0x80, /* # ## */ + 0x12, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x0C, 0x80, /* ## # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1344 't' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x40, /* # */ + 0x00, 0x40, /* # */ + 0x1F, 0xF0, /* ######### */ + 0x10, 0x40, /* # # */ + 0x10, 0x40, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1360 'u' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x0F, 0xC0, /* ###### */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x10, 0x00, /* # */ + 0x1F, 0xC0, /* ####### */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1376 'v' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0xC0, /* ## */ + 0x07, 0x00, /* ### */ + 0x18, 0x00, /* ## */ + 0x07, 0x00, /* ### */ + 0x00, 0xC0, /* ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1392 'w' (8 pixels wide) */ + 0x00, 0xC0, /* ## */ + 0x07, 0x00, /* ### */ + 0x1C, 0x00, /* ### */ + 0x03, 0x00, /* ## */ + 0x1C, 0x00, /* ### */ + 0x07, 0x00, /* ### */ + 0x00, 0xC0, /* ## */ + 0x00, 0x00, /* */ + + /* @1408 'x' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x10, 0x40, /* # # */ + 0x0D, 0x80, /* ## ## */ + 0x02, 0x00, /* # */ + 0x0D, 0x80, /* ## ## */ + 0x10, 0x40, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1424 'y' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x80, 0xC0, /* # ## */ + 0xCF, 0x00, /* ## #### */ + 0x38, 0x00, /* ### */ + 0x07, 0x00, /* ### */ + 0x00, 0xC0, /* ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1440 'z' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x18, 0x40, /* ## # */ + 0x14, 0x40, /* # # # */ + 0x12, 0x40, /* # # # */ + 0x11, 0x40, /* # # # */ + 0x10, 0xC0, /* # ## */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1456 '{' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x3E, 0xF8, /* ##### ##### */ + 0x20, 0x08, /* # # */ + 0x20, 0x08, /* # # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1472 '|' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x7F, 0xF8, /* ############ */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1488 '}' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x20, 0x08, /* # # */ + 0x20, 0x08, /* # # */ + 0x3E, 0xF8, /* ##### ##### */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x00, 0x00, /* */ + 0x00, 0x00, /* */ + + /* @1504 '~' (8 pixels wide) */ + 0x00, 0x00, /* */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x01, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x02, 0x00, /* # */ + 0x00, 0x00, /* */ +}; + +/* Character descriptors for Bitstream Vera Sans Mono 9pt */ +/* { [Char width in bits], [Offset into bitstreamVeraSansMono9ptCharBitmaps in bytes] } */ +const FONT_CHAR_INFO bitstreamVeraSansMono9ptCharDescriptors[] = +{ + {8, 0}, /* */ + {8, 16}, /* ! */ + {8, 32}, /* " */ + {8, 48}, /* # */ + {8, 64}, /* $ */ + {8, 80}, /* % */ + {8, 96}, /* & */ + {8, 112}, /* ' */ + {8, 128}, /* ( */ + {8, 144}, /* ) */ + {8, 160}, /* * */ + {8, 176}, /* + */ + {8, 192}, /* , */ + {8, 208}, /* - */ + {8, 224}, /* . */ + {8, 240}, /* / */ + {8, 256}, /* 0 */ + {8, 272}, /* 1 */ + {8, 288}, /* 2 */ + {8, 304}, /* 3 */ + {8, 320}, /* 4 */ + {8, 336}, /* 5 */ + {8, 352}, /* 6 */ + {8, 368}, /* 7 */ + {8, 384}, /* 8 */ + {8, 400}, /* 9 */ + {8, 416}, /* : */ + {8, 432}, /* ; */ + {8, 448}, /* < */ + {8, 464}, /* = */ + {8, 480}, /* > */ + {8, 496}, /* ? */ + {8, 512}, /* @ */ + {8, 528}, /* A */ + {8, 544}, /* B */ + {8, 560}, /* C */ + {8, 576}, /* D */ + {8, 592}, /* E */ + {8, 608}, /* F */ + {8, 624}, /* G */ + {8, 640}, /* H */ + {8, 656}, /* I */ + {8, 672}, /* J */ + {8, 688}, /* K */ + {8, 704}, /* L */ + {8, 720}, /* M */ + {8, 736}, /* N */ + {8, 752}, /* O */ + {8, 768}, /* P */ + {8, 784}, /* Q */ + {8, 800}, /* R */ + {8, 816}, /* S */ + {8, 832}, /* T */ + {8, 848}, /* U */ + {8, 864}, /* V */ + {8, 880}, /* W */ + {8, 896}, /* X */ + {8, 912}, /* Y */ + {8, 928}, /* Z */ + {8, 944}, /* [ */ + {8, 960}, /* \ */ + {8, 976}, /* ] */ + {8, 992}, /* ^ */ + {8, 1008}, /* _ */ + {8, 1024}, /* ` */ + {8, 1040}, /* a */ + {8, 1056}, /* b */ + {8, 1072}, /* c */ + {8, 1088}, /* d */ + {8, 1104}, /* e */ + {8, 1120}, /* f */ + {8, 1136}, /* g */ + {8, 1152}, /* h */ + {8, 1168}, /* i */ + {8, 1184}, /* j */ + {8, 1200}, /* k */ + {8, 1216}, /* l */ + {8, 1232}, /* m */ + {8, 1248}, /* n */ + {8, 1264}, /* o */ + {8, 1280}, /* p */ + {8, 1296}, /* q */ + {8, 1312}, /* r */ + {8, 1328}, /* s */ + {8, 1344}, /* t */ + {8, 1360}, /* u */ + {8, 1376}, /* v */ + {8, 1392}, /* w */ + {8, 1408}, /* x */ + {8, 1424}, /* y */ + {8, 1440}, /* z */ + {8, 1456}, /* { */ + {8, 1472}, /* | */ + {8, 1488}, /* } */ + {8, 1504}, /* ~ */ +}; + +/* Font information for Bitstream Vera Sans Mono 9pt */ +const struct FONT_DEF Font_VeraMono9pt = {8, 16, ' ', '~', + bitstreamVeraSansMono9ptCharBitmaps, + bitstreamVeraSansMono9ptCharDescriptors +}; + diff --git a/lcd/veramono9.h b/lcd/veramono9.h new file mode 100644 index 0000000..d99e3a2 --- /dev/null +++ b/lcd/veramono9.h @@ -0,0 +1,9 @@ +#ifndef __VERA_MONO_9__ +#define __VERA_MONO_9__ + +#include "fonts.h" + +/* Font data for Bitstream Vera Sans Mono 9pt */ +extern const struct FONT_DEF Font_VeraMono9pt; + +#endif