landtiger with ili9325 lcd controller based on the TFTLCD libary from Todor Todorov
Revision 0:0099ad246127, committed 2015-05-12
- Comitter:
- casval
- Date:
- Tue May 12 19:13:04 2015 +0000
- Child:
- 1:1a3dd94e13cf
- Commit message:
- LCD libary for the landtiger board with ili9325 Controller
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/helpers.h Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,62 @@
+/** \file helpers.h
+ * \brief Utility functions and macros.
+ * \copyright GNU Public License, v2. or later
+ *
+ * This library is based on the Arduino/chipKIT UTFT library by Henning
+ * Karlsen, http://henningkarlsen.com/electronics/library.php?id=52
+ *
+ * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
+ *
+ * Copyright (C)2012 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+#ifndef TFTLCD_HELPERS_H
+#define TFTLCD_HELPERS_H
+
+#include "mbed.h"
+
+/** \def HIGH
+ * \brief User-friendly high pin level designation.
+ */
+#define HIGH 1
+/** \def LOW
+ * \brief User-friendly low pin level designation.
+ */
+#define LOW 0
+
+/** \def swap( type, a, b )
+ * \brief Convenience macro to swap two values.
+ */
+#define swap( type, a, b ) { type tmp = ( a ); ( a ) = ( b ); ( b ) = tmp; }
+
+/** \def pulseLow( pin )
+ * \brief Toggles a pin low, then high.
+ */
+#define pulseLow( pin ) pin = LOW; pin = HIGH
+
+/** \def pulseHigh( pin )
+ * \brief Toggles a pin high, then low.
+ */
+#define pulseHigh( pin ) pin = HIGH; pin = LOW
+
+#ifndef ushort
+typedef unsigned short ushort;
+#endif
+
+#endif /* TFTLCD_HELPERS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ili9328.cpp Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,332 @@
+/*
+ * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
+ * Copyright (C)2012-2013 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+#include "ili9328.h"
+#include "helpers.h"
+
+
+ILI9328_LCD::ILI9328_LCD( PinName CS, PinName RS, PinName WR, PinName DIR, PinName EN, PinName LE, BusOut* DATA_PORT, PinName RD , PinName BL, backlight_t blType, float defaultBackLightLevel )
+ : LCD( 240, 320, CS, RS, DIR, EN, LE, BL, blType, defaultBackLightLevel ), _lcd_pin_wr( WR )
+{
+ _lcd_port = DATA_PORT;
+ if ( RD != NC ) _lcd_pin_rd = new DigitalOut( RD );
+ else _lcd_pin_rd = 0;
+}
+
+void ILI9328_LCD::Initialize( orientation_t orientation, colordepth_t colors )
+{
+ _orientation = orientation;
+ _colorDepth = colors;
+
+ /* _lcd_pin_reset = HIGH;
+ wait_ms( 50 );
+ _lcd_pin_reset = LOW;
+ wait_ms( 100 );
+ _lcd_pin_reset = HIGH;
+ wait_ms( 1000 );
+ */
+ _lcd_pin_cs = HIGH;
+ if ( _lcd_pin_bl != 0 )
+ *_lcd_pin_bl = HIGH;
+ else if ( _bl_pwm != 0 )
+ *_bl_pwm = _bl_pwm_default;
+ if ( _lcd_pin_rd != 0 )
+ *_lcd_pin_rd = HIGH;
+ _lcd_pin_wr = HIGH;
+ wait_ms( 50 );
+
+ Activate();
+
+ short drivOut = 0;
+ short entryMod = 0;
+ short gateScan = 0x2700;
+ switch ( _orientation )
+ {
+ case LANDSCAPE:
+ drivOut = 0x0100;
+ entryMod |= 0x0038;
+ gateScan |= 0x0000;
+ break;
+
+ case LANDSCAPE_REV:
+ drivOut = 0x0000;
+ entryMod |= 0x0038;
+ gateScan |= 0x8000;
+ break;
+
+ case PORTRAIT_REV:
+ drivOut = 0x0000;
+ entryMod |= 0x0030;
+ gateScan |= 0x0000;
+ break;
+
+ case PORTRAIT:
+ default:
+ drivOut = 0x0100;
+ entryMod |= 0x0030;
+ gateScan |= 0x8000;
+ break;
+ }
+ switch ( _colorDepth )
+ {
+ case RGB18:
+ entryMod |= 0x9000;
+ break;
+
+ case RGB16:
+ default:
+ entryMod |= 0x1000;
+ break;
+ }
+
+// WriteCmdData( 0xE5, 0x78F0 ); // set SRAM internal timing
+ WriteCmdData( 0xE5, 0x8000 ); // set SRAM internal timing
+ WriteCmdData( 0x00, 0x0000 ); // set Driver Output Control
+ WriteCmdData( 0x01, drivOut ); // set Driver Output Control
+// WriteCmdData( 0x02, 0x0200 ); // set 1 line inversion
+ WriteCmdData( 0x02, 0x0700 ); // set 1 line inversion
+ WriteCmdData( 0x03, entryMod ); // set GRAM write direction and BGR=1.
+ WriteCmdData( 0x04, 0x0000 ); // Resize register
+// WriteCmdData( 0x08, 0x0207 ); // set the back porch and front porch
+ WriteCmdData( 0x08, 0x0202 ); // set the back porch and front porch
+
+ WriteCmdData( 0x09, 0x0000 ); // set non-display area refresh cycle ISC[3:0]
+ WriteCmdData( 0x0A, 0x0000 ); // FMARK function
+ WriteCmdData( 0x0C, 0x0000 ); // RGB interface setting
+ WriteCmdData( 0x0D, 0x0000 ); // Frame marker Position
+ WriteCmdData( 0x0F, 0x0000 ); // RGB interface polarity
+ // ----------- Power On sequence ----------- //
+ WriteCmdData( 0x10, 0x0000 ); // SAP, BT[3:0], AP, DSTB, SLP, STB
+// WriteCmdData( 0x11, 0x0007 ); // DC1[2:0], DC0[2:0], VC[2:0]
+ WriteCmdData( 0x11, 0x0000 ); // DC1[2:0], DC0[2:0], VC[2:0]
+ WriteCmdData( 0x12, 0x0000 ); // VREG1OUT voltage
+ WriteCmdData( 0x13, 0x0000 ); // VDV[4:0] for VCOM amplitude
+// WriteCmdData( 0x07, 0x0001 );
+ wait_ms( 200 ); // Dis-charge capacitor power voltage
+
+// WriteCmdData( 0x10, 0x1690 ); // SAP, BT[3:0], AP, DSTB, SLP, STB
+ WriteCmdData( 0x10, 0x17B0 ); // SAP, BT[3:0], AP, DSTB, SLP, STB
+// WriteCmdData( 0x11, 0x0227 ); // Set DC1[2:0], DC0[2:0], VC[2:0]
+ WriteCmdData( 0x11, 0x0037 ); // Set DC1[2:0], DC0[2:0], VC[2:0]
+ wait_ms( 50 ); // Delay 50ms
+
+// WriteCmdData( 0x12, 0x000D ); // 0012
+ WriteCmdData( 0x12, 0x0138 ); // 0012
+ wait_ms( 50 ); // Delay 50ms
+
+// WriteCmdData( 0x13, 0x1200 ); // VDV[4:0] for VCOM amplitude
+ WriteCmdData( 0x13, 0x1700 ); // VDV[4:0] for VCOM amplitude
+// WriteCmdData( 0x29, 0x000A ); // 04 VCM[5:0] for VCOMH
+ WriteCmdData( 0x29, 0x000D ); // 04 VCM[5:0] for VCOMH
+ WriteCmdData( 0x2B, 0x000D ); // Set Frame Rate
+ wait_ms( 50 ); // Delay 50ms
+
+ WriteCmdData( 0x20, 0x0000 ); // GRAM horizontal Address
+ WriteCmdData( 0x21, 0x0000 ); // GRAM Vertical Address
+
+ // ----------- Adjust the Gamma Curve ----------//
+// WriteCmdData( 0x30, 0x0000 );
+ WriteCmdData( 0x30, 0x0001 );
+// WriteCmdData( 0x31, 0x0404 );
+ WriteCmdData( 0x31, 0x0606 );
+// WriteCmdData( 0x32, 0x0003 );
+ WriteCmdData( 0x32, 0x0304 );
+//new line
+ WriteCmdData( 0x33, 0x0202 );
+ WriteCmdData( 0x34, 0x0202 );
+// WriteCmdData( 0x35, 0x0405 );
+ WriteCmdData( 0x35, 0x0103 );
+
+// WriteCmdData( 0x36, 0x0808 );
+ WriteCmdData( 0x36, 0x011D );
+// WriteCmdData( 0x37, 0x0407 );
+ WriteCmdData( 0x37, 0x0404 );
+// WriteCmdData( 0x38, 0x0303 );
+ WriteCmdData( 0x38, 0x0404 );
+// WriteCmdData( 0x39, 0x0707 );
+ WriteCmdData( 0x39, 0x0404 );
+// WriteCmdData( 0x3C, 0x0504 );
+ WriteCmdData( 0x3C, 0x0700 );
+// WriteCmdData( 0x3D, 0x0808 );
+ WriteCmdData( 0x3D, 0x0A1F );
+
+ //------------------ Set GRAM area ---------------//
+ WriteCmdData( 0x50, 0x0000 ); // Horizontal GRAM Start Address
+ WriteCmdData( 0x51, 0x00EF ); // Horizontal GRAM End Address
+ WriteCmdData( 0x52, 0x0000 ); // Vertical GRAM Start Address
+ WriteCmdData( 0x53, 0x013F ); // Vertical GRAM Start Address
+ WriteCmdData( 0x60, gateScan ); // Gate Scan Line (0xA700)
+// WriteCmdData( 0x61, 0x0000 ); // NDL,VLE, REV
+ WriteCmdData( 0x61, 0x0001 ); // NDL,VLE, REV
+ WriteCmdData( 0x6A, 0x0000 ); // set scrolling line
+ //-------------- Partial Display Control ---------//
+ WriteCmdData( 0x80, 0x0000 );
+ WriteCmdData( 0x81, 0x0000 );
+ WriteCmdData( 0x82, 0x0000 );
+ WriteCmdData( 0x83, 0x0000 );
+ WriteCmdData( 0x84, 0x0000 );
+ WriteCmdData( 0x85, 0x0000 );
+ //-------------- Panel Control -------------------//
+ WriteCmdData( 0x90, 0x0010 );
+ WriteCmdData( 0x92, 0x0000 );
+//new lines
+ WriteCmdData( 0x93, 0x0003 );
+ WriteCmdData( 0x95, 0x0101 );
+ WriteCmdData( 0x97, 0x0000 );
+ WriteCmdData( 0x98, 0x0000 );
+
+// WriteCmdData( 0x07, 0x0133 ); // 262K color and display ON
+ WriteCmdData( 0x07, 0x0021 ); // 262K color and display ON
+ WriteCmdData( 0x07, 0x0031 ); // 262K color and display ON
+ WriteCmdData( 0x07, 0x0173 ); // 262K color and display ON
+//new line
+
+ wait_ms( 50 ); // Delay 50ms
+ Deactivate();
+}
+
+void ILI9328_LCD::Sleep( void )
+{
+ Activate();
+ WriteCmdData( 0x10, 0x1692 ); // enter sleep mode
+ wait_ms( 200 );
+ LCD::Sleep();
+ Deactivate();
+}
+
+void ILI9328_LCD::WakeUp( void )
+{
+ Activate();
+ WriteCmdData( 0x10, 0x1690 ); // exit sleep mode
+ wait_ms( 200 );
+ LCD::WakeUp();
+ Deactivate();
+}
+
+void ILI9328_LCD::WriteCmd( unsigned short cmd )
+{
+ _lcd_pin_cs = LOW;
+ _lcd_pin_rs = LOW; // Control Reg
+ _lcd_pin_dir = HIGH;
+ _lcd_pin_en = LOW;
+ _lcd_port->write(cmd & 0xFF);
+ _lcd_pin_le = HIGH;
+ _lcd_pin_le = LOW;
+ _lcd_port->write((cmd >>8) & 0xFF );
+ pulseLow( _lcd_pin_wr );
+ _lcd_pin_cs = HIGH;
+}
+
+void ILI9328_LCD::WriteData( unsigned short data )
+{
+ _lcd_pin_cs = LOW;
+ _lcd_pin_rs = HIGH; // Select Data
+ _lcd_pin_dir = HIGH;
+ _lcd_pin_en = LOW;
+ _lcd_port->write(data & 0xFF);
+ _lcd_pin_le = HIGH;
+ _lcd_pin_le = LOW;
+ _lcd_port->write((data >> 8) & 0xFF);
+ pulseLow( _lcd_pin_wr );
+ _lcd_pin_cs = HIGH;
+}
+
+void ILI9328_LCD::SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 )
+{
+ switch ( _orientation )
+ {
+ case LANDSCAPE:
+ case LANDSCAPE_REV:
+ WriteCmdData( 0x20, y1 );
+ WriteCmdData( 0x21, x1 );
+ WriteCmdData( 0x50, y1 );
+ WriteCmdData( 0x52, x1 );
+ WriteCmdData( 0x51, y2 );
+ WriteCmdData( 0x53, x2 );
+ break;
+
+ case PORTRAIT_REV:
+ case PORTRAIT:
+ default:
+ WriteCmdData( 0x20, x1 );
+ WriteCmdData( 0x21, y1 );
+ WriteCmdData( 0x50, x1 );
+ WriteCmdData( 0x52, y1 );
+ WriteCmdData( 0x51, x2 );
+ WriteCmdData( 0x53, y2 );
+ break;
+ }
+ WriteCmd( 0x22 );
+}
+
+void ILI9328_LCD::SetPixelColor( unsigned int color, colordepth_t mode )
+{
+ unsigned char r, g, b;
+ unsigned short clr;
+ r = g = b = 0;
+ if ( _colorDepth == RGB16 )
+ {
+ switch ( mode )
+ {
+ case RGB16:
+ WriteData( color & 0xFFFF );
+ break;
+ case RGB18:
+ r = ( color >> 10 ) & 0xF8;
+ g = ( color >> 4 ) & 0xFC;
+ b = ( color >> 1 ) & 0x1F;
+ clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | b );
+ WriteData( clr );
+ break;
+ case RGB24:
+ r = ( color >> 16 ) & 0xF8;
+ g = ( color >> 8 ) & 0xFC;
+ b = color & 0xF8;
+ clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | ( b >> 3 ) );
+ WriteData( clr );
+ break;
+ }
+ }
+ else if ( _colorDepth == RGB18 )
+ {
+ switch ( mode )
+ {
+ case RGB16:
+ r = ( ( color >> 8 ) & 0xF8 ) | ( ( color & 0x8000 ) >> 13 );
+ g = ( color >> 3 ) & 0xFC;
+ b = ( ( color << 3 ) & 0xFC ) | ( ( color >> 3 ) & 0x01 );
+ break;
+ case RGB18:
+ b = ( color << 2 ) & 0xFC;
+ g = ( color >> 4 ) & 0xFC;
+ r = ( color >> 10 ) & 0xFC;
+ break;
+ case RGB24:
+ r = ( color >> 16 ) & 0xFC;
+ g = ( color >> 8 ) & 0xFC;
+ b = color & 0xFC;
+ break;
+ }
+ clr = ( r << 8 ) | ( g << 2 ) | ( b >> 4 );
+ WriteData( clr );
+ WriteData( b << 4 );
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ili9328.h Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,188 @@
+/** \file ili9328.h
+ * \brief mbed LCD driver for displays with the ILI9328 controller.
+ * \copyright GNU Public License, v2. or later
+ *
+ * This library is based on the Arduino/chipKIT UTFT library by Henning
+ * Karlsen, http://henningkarlsen.com/electronics/library.php?id=52
+ *
+ * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
+ *
+ * Copyright (C)2012-2013 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+#ifndef TFTLCD_ILI9328_H
+#define TFTLCD_ILI9328_H
+
+#include "lcd_base.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** Represents a LCD instance.
+ *
+ * This is the utility class, through which the display can be manipulated
+ * and graphics objects can be shown to the user. A known display, which
+ * works with this library is the INANBO-T24-ILI9328-V11 - a RGB TFT
+ * with 240x320 pixels resolution and 65K/262K colors, using 8/16-bit interface.
+ *
+ * The display works with a supply voltage of 2.8-3.3 volts for both logic and
+ * backlight. It can be driven in 8bit or 16bit interface mode. (Current
+ * version of the driver works only in 16bit mode for now.)
+ *
+ * How to use:
+ * \code
+ * // include the library, this will also pull in the header for the provided fonts
+ * #include "ili9328.h"
+ *
+ * // prepare the data bus for writing commands and pixel data
+ * BusOut dataBus( p30, p29, p28, p27, p26, p25, p24, p23, p22, p21, p20, p19, p18, p17, p16, p15 ); // 16 pins
+ * // create the lcd instance
+ * ILI9328_LCD lcd( p14, p13, p12, p11, &dataBus ); // control pins and data bus
+ *
+ * int main()
+ * {
+ * // initialize display - place it in standard portrait mode and set background to black and
+ * // foreground to white color.
+ * lcd.Initialize();
+ * // set current font to the smallest 8x12 pixels font.
+ * lcd.SetFont( Font8x12 );
+ * // print something on the screen
+ * lcd.Print( "Hello, World!", CENTER, 25 ); // align text to center horizontally and use starndard colors
+ *
+ * while ( 1 ) { }
+ * }
+ *
+ * \endcode
+ * \version 0.1
+ * \author Todor Todorov
+ */
+class ILI9328_LCD : public LCD
+{
+public:
+ /** Creates a new instance of the class.
+ *
+ * \param CS Pin for the ChipSelect signal.
+ * \param RESET Pin for the RESET line.
+ * \param RS Pin for the RS signal.
+ * \param WR Pin for the WR signal.
+ * \param DATA_PORT Address of the data bus for transfer of commands and pixel data.
+ * \param BL Pin for controlling the backlight. By default not used.
+ * \param RD Pin for the RD signal. This line is not needed by the driver, so if you would like to
+ * use the pin on the mbed for something else, just pull-up the respective pin on the LCD high,
+ * and do not assign a value to this parameter when creating the controller instance.
+ * \param blType The backlight type, the default is to utilize the pin - if supplied - as a simple on/off switch
+ * \param defaultBacklightLevel If using PWM to control backlight, this would be the default brightness in percent after LCD initialization.
+ */
+ ILI9328_LCD( PinName CS, PinName RS, PinName WR, PinName DIR, PinName EN, PinName LE, BusOut* DATA_PORT, PinName RD , PinName BL = NC, backlight_t blType = Constant, float defaultBackLightLevel = 1.0 );
+
+ /** Initialize display.
+ *
+ * Wakes up the display from sleep, initializes power parameters.
+ * This function must be called first, befor any painting on the
+ * display is done, otherwise the positioning of graphical elements
+ * will not work properly and any paynt operation will not be visible
+ * or produce garbage.
+ *
+ * \param oritentation The display orientation, landscape is default.
+ * \param colors The correct color depth to use for the pixel data. Value is disregarded.
+ */
+ virtual void Initialize( orientation_t orientation = LANDSCAPE, colordepth_t colors = RGB16 );
+
+ /** Puts the display to sleep.
+ *
+ * When the display is in sleep mode, its power consumption is
+ * minimized. Before new pixel data can be written to the display
+ * memory, the controller needs to be brought out of sleep mode.
+ * \sa #WakeUp( void );
+ * \remarks The result of this operation might not be exactly as
+ * expected. Putting the display to sleep will cause the
+ * controller to switch to the standard color of the LCD,
+ * so depending on whether the display is normally white,
+ * or normally dark, the screen might or might not go
+ * dark. Additional power saving can be achieved, if
+ * the backlight of the used display is not hardwired on
+ * the PCB and can be controlled via the BL pin.
+ */
+ virtual void Sleep( void );
+
+ /** Wakes up the display from sleep mode.
+ *
+ * This function needs to be called before any other, when the
+ * display has been put into sleep mode by a previois call to
+ * #Sleep( void ).
+ */
+ virtual void WakeUp( void );
+
+protected:
+ /** Sends a command to the display.
+ *
+ * \param cmd The display command.
+ * \remarks Commands are controller-specific and this function needs to
+ * be implemented separately for each available controller.
+ */
+ virtual void WriteCmd( unsigned short cmd );
+
+ /** Sends pixel data to the display.
+ *
+ * \param data The display data.
+ * \remarks Sending data is controller-specific and this function needs to
+ * be implemented separately for each available controller.
+ */
+ virtual void WriteData( unsigned short data );
+
+ /** Assigns a chunk of the display memory to receive data.
+ *
+ * When data is sent to the display after this function completes, the opertion will
+ * start from the begining of the assigned address (pixel position) and the pointer
+ * will be automatically incremented so that the next data write operation will continue
+ * with the next pixel from the memory block. If more data is written than available
+ * pixels, at the end of the block the pointer will jump back to its beginning and
+ * commence again, until the next address change command is sent to the display.
+ *
+ * \param x1 The X coordinate of the pixel at the beginning of the block.
+ * \param y1 The Y coordinate of the pixel at the beginning of the block.
+ * \param x2 The X coordinate of the pixel at the end of the block.
+ * \param y2 The Y coordinate of the pixel at the end of the block.
+ * \remarks Addressing commands are controller-specific and this function needs to be
+ * implemented separately for each available controller.
+ */
+ virtual void SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 );
+
+ /** Sets the color of the pixel at the address pointer of the controller.
+ *
+ * This function is to be provided by each implementation separately in
+ * order to account for different color depth used by the controller.
+ * \param color The color of the pixel.
+ * \param mode The depth (palette) of the color.
+ */
+ virtual void SetPixelColor( unsigned int color, colordepth_t mode = RGB24 );
+
+private:
+ DigitalOut _lcd_pin_wr;
+ BusOut* _lcd_port;
+ DigitalOut* _lcd_pin_bl;
+ DigitalOut* _lcd_pin_rd;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TFTLCD_ILI9328_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lcd_base.cpp Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,675 @@
+/*
+ * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
+ * Copyright (C)2012 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+#include "lcd_base.h"
+#include "helpers.h"
+
+// Task GUI und Restbus greifen auf den LCD zu, daher müssen die Funktionen durch ein Mutex geschützt werden
+Mutex lcd_mutex;
+
+LCD::LCD( unsigned short width, unsigned short height, PinName CS, PinName RS, PinName DIR, PinName EN, PinName LE, PinName BL, backlight_t blType, float defaultBacklight )
+ : _disp_width( width ), _disp_height( height ), _lcd_pin_cs( CS ), _lcd_pin_rs( RS ), _lcd_pin_dir(DIR), _lcd_pin_en(EN), _lcd_pin_le(LE), _bl_type( blType )
+{
+ SetForeground();
+ SetBackground();
+ _font = &TerminusFont;
+ if ( defaultBacklight < 0 ) _bl_pwm_default = 0;
+ else if ( defaultBacklight > 1.0 ) _bl_pwm_default = 1.0;
+ else _bl_pwm_default = defaultBacklight;
+ if ( BL != NC )
+ {
+ if ( blType == Constant )
+ {
+ _bl_pwm = 0;
+ _lcd_pin_bl = new DigitalOut( BL );
+ }
+ else
+ {
+ _lcd_pin_bl = 0;
+ _bl_pwm = new PwmOut( BL );
+ _bl_pwm->period_ms( 8.33 ); // 120 Hz
+ _bl_pwm_current = _bl_pwm_default;
+ // initially off
+ *_bl_pwm = 0;
+ }
+
+ }
+ else
+ {
+ _lcd_pin_bl = 0;
+ _bl_pwm = 0;
+ }
+}
+
+void LCD::Sleep( void )
+{
+ if ( _lcd_pin_bl != 0 )
+ *_lcd_pin_bl = LOW;
+ else if ( _bl_pwm != 0 )
+ *_bl_pwm = 0;
+}
+
+void LCD::WakeUp( void )
+{
+ if ( _lcd_pin_bl != 0 )
+ *_lcd_pin_bl = HIGH;
+ else if ( _bl_pwm != 0 )
+ *_bl_pwm = _bl_pwm_current;
+}
+
+inline
+void LCD::SetForeground( unsigned int color )
+{
+ _foreground = color;
+}
+
+inline
+void LCD::SetBackground( unsigned int color )
+{
+ _background = color;
+}
+
+void LCD::SetFont( const font_t *font )
+{
+ _font = font;
+}
+
+inline
+unsigned short LCD::GetWidth( void )
+{
+ if ( _orientation == LANDSCAPE || _orientation == LANDSCAPE_REV ) return _disp_height;
+ return _disp_width;
+}
+
+inline
+unsigned short LCD::GetHeight( void )
+{
+ if ( _orientation == LANDSCAPE || _orientation == LANDSCAPE_REV ) return _disp_width;
+ return _disp_height;
+}
+
+inline
+uint8_t LCD::GetFontWidth( void )
+{
+ if ( _font != 0 ) return _font->Width;
+ return 0;
+}
+
+inline
+uint8_t LCD::GetFontHeight( void )
+{
+ if ( _font != 0 ) return _font->Height;
+ return 0;
+}
+
+void LCD::SetBacklightLevel( float level )
+{
+ switch ( _bl_type )
+ {
+ case Direct:
+ if ( _bl_pwm != 0 )
+ {
+ *_bl_pwm = level;
+ _bl_pwm_current = level;
+ }
+ break;
+
+ case Indirect:
+ break;
+ case Constant:
+ default:
+ break;
+ }
+}
+
+void LCD::FillScreen( int color )
+{
+
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+ unsigned int rgb = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+ Activate();
+ ClearXY();
+ for ( int i = 0; i < ( ( _disp_width ) * ( _disp_height ) ); i++ )
+ SetPixelColor( rgb );
+ Deactivate();
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+inline
+void LCD::ClearScreen( void )
+{
+ FillScreen( -1 );
+}
+
+void LCD::DrawPixel( unsigned short x, unsigned short y, int color )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+ Activate();
+ SetXY( x, y, x, y );
+ SetPixelColor( color == -1 ? _background :
+ color == -2 ? _foreground : color );
+ Deactivate();
+ //////////////////////
+ lcd_mutex.unlock();
+ //////////////////////
+}
+
+void LCD::DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
+{
+
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+ double delta, tx, ty;
+
+ if ( ( ( x2 - x1 ) < 0 ) )
+ {
+ swap( ushort, x1, x2 )
+ swap( ushort, y1, y2 )
+ }
+ if ( ( ( y2 - y1 ) < 0 ) )
+ {
+ swap( ushort, x1, x2 )
+ swap( ushort, y1, y2 )
+ }
+
+ if ( y1 == y2 )
+ {
+ if ( x1 > x2 )
+ swap( ushort, x1, x2 )
+ DrawHLine( x1, y1, x2 - x1, color );
+ }
+ else if ( x1 == x2 )
+ {
+ if ( y1 > y2 )
+ swap( ushort, y1, y2 )
+ DrawVLine( x1, y1, y2 - y1, color );
+ }
+ else
+ {
+ unsigned int usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+ Activate();
+ if ( abs( x2 - x1 ) > abs( y2 - y1 ) )
+ {
+ delta = ( double( y2 - y1 ) / double( x2 - x1 ) );
+ ty = double( y1 );
+ if ( x1 > x2 )
+ {
+ for ( int i = x1; i >= x2; i-- )
+ {
+ SetXY( i, int( ty + 0.5 ), i, int( ty + 0.5 ) );
+ SetPixelColor( usedColor );
+ ty = ty - delta;
+ }
+ }
+ else
+ {
+ for ( int i = x1; i <= x2; i++ )
+ {
+ SetXY( i, int( ty + 0.5 ), i, int( ty + 0.5 ) );
+ SetPixelColor( usedColor );
+ ty = ty + delta;
+ }
+ }
+ }
+ else
+ {
+ delta = ( float( x2 - x1 ) / float( y2 - y1 ) );
+ tx = float( x1 );
+ if ( y1 > y2 )
+ {
+ for ( int i = y2 + 1; i > y1; i-- )
+ {
+ SetXY( int( tx + 0.5 ), i, int( tx + 0.5 ), i );
+ SetPixelColor( usedColor );
+ tx = tx + delta;
+ }
+ }
+ else
+ {
+ for ( int i = y1; i < y2 + 1; i++ )
+ {
+ SetXY( int( tx + 0.5 ), i, int( tx + 0.5 ), i );
+ SetPixelColor( usedColor );
+ tx = tx + delta;
+ }
+ }
+ }
+ Deactivate();
+ }
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+void LCD::DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+
+ if ( x1 > x2 ) swap( ushort, x1, x2 )
+ if ( y1 > y2 ) swap( ushort, y1, y2 )
+
+ DrawHLine( x1, y1, x2 - x1, color );
+ DrawHLine( x1, y2, x2 - x1, color );
+ DrawVLine( x1, y1, y2 - y1, color );
+ DrawVLine( x2, y1, y2 - y1, color );
+
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+void LCD::DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
+{
+ if ( x1 > x2 ) swap( ushort, x1, x2 )
+ if ( y1 > y2 ) swap( ushort, y1, y2 )
+
+ if ( ( x2 - x1 ) > 4 && ( y2 - y1 ) > 4 )
+ {
+ DrawPixel( x1 + 1, y1 + 1, color );
+ DrawPixel( x2 - 1, y1 + 1, color );
+ DrawPixel( x1 + 1, y2 - 1, color );
+ DrawPixel( x2 - 1, y2 - 1, color );
+ DrawHLine( x1 + 2, y1, x2 - x1 - 4, color );
+ DrawHLine( x1 + 2, y2, x2 - x1 - 4, color );
+ DrawVLine( x1, y1 + 2, y2 - y1 - 4, color );
+ DrawVLine( x2, y1 + 2, y2 - y1 - 4, color );
+ }
+}
+
+void LCD::FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+
+ if ( x1 > x2 ) swap( ushort, x1, x2 );
+ if ( y1 > y2 ) swap( ushort, y1, y2 );
+
+ for ( int i = 0; i < ( ( y2 - y1 ) / 2 ) + 1; i++ )
+ {
+ DrawHLine( x1, y1 + i, x2 - x1, color );
+ DrawHLine( x1, y2 - i, x2 - x1, color );
+ }
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+void LCD::FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color )
+{
+ if ( x1 > x2 ) swap( ushort, x1, x2 )
+ if ( y1 > y2 ) swap( ushort, y1, y2 )
+
+ if ( ( x2 - x1 ) > 4 && ( y2 - y1 ) > 4 )
+ {
+ for ( int i = 0; i < ( ( y2 - y1 ) / 2 ) + 1; i++ )
+ {
+ switch ( i )
+ {
+ case 0:
+ DrawHLine( x1 + 2, y1 + i, x2 - x1 - 4, color );
+ DrawHLine( x1 + 2, y2 - i, x2 - x1 - 4, color );
+ break;
+
+ case 1:
+ DrawHLine( x1 + 1, y1 + i, x2 - x1 - 2, color );
+ DrawHLine( x1 + 1, y2 - i, x2 - x1 - 2, color );
+ break;
+
+ default:
+ DrawHLine( x1, y1 + i, x2 - x1, color );
+ DrawHLine( x1, y2 - i, x2 - x1, color );
+ break;
+ }
+ }
+ }
+}
+
+void LCD::DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color )
+{
+ int f = 1 - radius;
+ int ddF_x = 1;
+ int ddF_y = -2 * radius;
+ int x1 = 0;
+ int y1 = radius;
+ unsigned int usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+
+ Activate();
+ SetXY( x, y + radius, x, y + radius );
+ SetPixelColor( usedColor );
+ SetXY( x, y - radius, x, y - radius );
+ SetPixelColor( usedColor );
+ SetXY( x + radius, y, x + radius, y );
+ SetPixelColor( usedColor );
+ SetXY( x - radius, y, x - radius, y );
+ SetPixelColor( usedColor );
+
+ while ( x1 < y1 )
+ {
+ if ( f >= 0 )
+ {
+ y1--;
+ ddF_y += 2;
+ f += ddF_y;
+ }
+ x1++;
+ ddF_x += 2;
+ f += ddF_x;
+ SetXY( x + x1, y + y1, x + x1, y + y1 );
+ SetPixelColor( usedColor );
+ SetXY( x - x1, y + y1, x - x1, y + y1 );
+ SetPixelColor( usedColor );
+ SetXY( x + x1, y - y1, x + x1, y - y1 );
+ SetPixelColor( usedColor );
+ SetXY( x - x1, y - y1, x - x1, y - y1 );
+ SetPixelColor( usedColor );
+ SetXY( x + y1, y + x1, x + y1, y + x1 );
+ SetPixelColor( usedColor );
+ SetXY( x - y1, y + x1, x - y1, y + x1 );
+ SetPixelColor( usedColor );
+ SetXY( x + y1, y - x1, x + y1, y - x1 );
+ SetPixelColor( usedColor );
+ SetXY( x - y1, y - x1, x - y1, y - x1 );
+ SetPixelColor( usedColor );
+ }
+ Deactivate();
+}
+
+void LCD::FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color )
+{
+ unsigned int usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+ Activate();
+ for ( int y1 = -radius; y1 <= radius; y1++ )
+ for ( int x1 = -radius; x1 <= radius; x1++ )
+ if ( x1 * x1 + y1 * y1 <= radius * radius )
+ {
+ SetXY( x + x1, y + y1, x + x1, y + y1 );
+ SetPixelColor( usedColor );
+ }
+ Deactivate();
+}
+
+void LCD::Print( const char *str, unsigned short x, unsigned short y, int fgColor, int bgColor, unsigned short deg )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+
+ int stl, i;
+
+ stl = strlen( str );
+
+ if ( x == RIGHT )
+ x = GetWidth() - ( stl * _font->Width );
+ if ( x == CENTER )
+ x = ( GetWidth() - ( stl * _font->Width ) ) / 2;
+
+ for ( i = 0; i < stl; i++ )
+ if ( deg == 0 )
+ PrintChar( *str++, x + ( i * ( _font->Width ) ), y, fgColor, bgColor );
+ else
+ RotateChar( *str++, x, y, i, fgColor, bgColor, deg );
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+void LCD::DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned char scale )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+
+ int tx, ty, tc, tsx, tsy;
+
+ Activate();
+ if ( scale == 1 )
+ {
+ SetXY( x, y, x + img->Width - 1, y + img->Height - 1 );
+
+ if ( img->Format == RGB16 )
+ {
+ const unsigned short *pixel = ( const unsigned short* ) img->PixelData;
+ for ( tc = 0; tc < ( img->Width * img->Height ); tc++ )
+ SetPixelColor( *pixel++, img->Format );
+ }
+ else if ( img->Format == RGB18 )
+ {
+ const unsigned int *pixel = ( const unsigned int* ) img->PixelData;
+ for ( tc = 0; tc < ( img->Width * img->Height ); tc++ )
+ SetPixelColor( *pixel++, img->Format );
+ }
+ }
+ else
+ {
+ if ( img->Format == RGB16 )
+ {
+ const unsigned short *pixel = ( const unsigned short* ) img->PixelData;
+
+ for ( ty = 0; ty < img->Height; ty++ )
+ {
+ SetXY( x, y + ( ty * scale ), x + ( ( img->Width * scale ) - 1 ), y + ( ty * scale ) + scale );
+ for ( tsy = 0; tsy < scale; tsy++ )
+ {
+ for ( tx = 0; tx < img->Width; tx++ )
+ {
+ for ( tsx = 0; tsx < scale; tsx++ )
+ SetPixelColor( pixel[ ( ty * img->Width ) + tx ], img->Format );
+ }
+ }
+ }
+ }
+ else if ( img->Format == RGB18 )
+ {
+ const unsigned int *pixel = ( const unsigned int* ) img->PixelData;
+
+ for ( ty = 0; ty < img->Height; ty++ )
+ {
+ SetXY( x, y + ( ty * scale ), x + ( ( img->Width * scale ) - 1 ), y + ( ty * scale ) + scale );
+ for ( tsy = 0; tsy < scale; tsy++ )
+ {
+ for ( tx = 0; tx < img->Width; tx++ )
+ {
+ for ( tsx = 0; tsx < scale; tsx++ )
+ SetPixelColor( pixel[ ( ty * img->Width ) + tx ], img->Format );
+ }
+ }
+ }
+ }
+ }
+ Deactivate();
+ ///////////////////////////////
+ lcd_mutex.unlock();
+ ///////////////////////////////
+}
+
+void LCD::DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned short deg, unsigned short rox, unsigned short roy )
+{
+ //////////////////////
+ lcd_mutex.lock();
+ //////////////////////
+
+ int tx, ty, newx, newy;
+ double radian;
+ radian = deg * 0.0175;
+
+ if ( deg == 0 )
+ DrawBitmap( x, y, img );
+ else
+ {
+ Activate();
+
+ if ( img->Format == RGB16 )
+ {
+ const unsigned short *pixel = ( const unsigned short* ) img->PixelData;
+
+ for ( ty = 0; ty < img->Height; ty++ )
+ for ( tx = 0; tx < img->Width; tx++ )
+ {
+ newx = x + rox + ( ( ( tx - rox ) * cos( radian ) ) - ( ( ty - roy ) * sin( radian ) ) );
+ newy = y + roy + ( ( ( ty - roy ) * cos( radian ) ) + ( ( tx - rox ) * sin( radian ) ) );
+
+ SetXY( newx, newy, newx, newy );
+ SetPixelColor( pixel[ ( ty * img->Width ) + tx ], img->Format );
+ }
+ }
+ else if ( img->Format == RGB18 )
+ {
+ const unsigned int *pixel = ( const unsigned int* ) img->PixelData;
+
+ for ( ty = 0; ty < img->Height; ty++ )
+ for ( tx = 0; tx < img->Width; tx++ )
+ {
+ newx = x + rox + ( ( ( tx - rox ) * cos( radian ) ) - ( ( ty - roy ) * sin( radian ) ) );
+ newy = y + roy + ( ( ( ty - roy ) * cos( radian ) ) + ( ( tx - rox ) * sin( radian ) ) );
+
+ SetXY( newx, newy, newx, newy );
+ SetPixelColor( pixel[ ( ty * img->Width ) + tx ], img->Format );
+ }
+ }
+ Deactivate();
+ }
+ //////////////////////
+ lcd_mutex.unlock();
+ //////////////////////
+}
+
+inline
+void LCD::Activate( void )
+{
+ _lcd_pin_cs = LOW;
+}
+
+inline
+void LCD::Deactivate( void )
+{
+ _lcd_pin_cs = HIGH;
+}
+
+inline
+void LCD::WriteCmdData( unsigned short cmd, unsigned short data )
+{
+ WriteCmd( cmd );
+ WriteData( data );
+}
+
+inline
+void LCD::ClearXY( void )
+{
+ SetXY( 0, 0, GetWidth() - 1, GetHeight() - 1 );
+}
+
+void LCD::DrawHLine( unsigned short x, unsigned short y, unsigned short len, int color )
+{
+ unsigned int usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+
+ Activate();
+ SetXY( x, y, x + len, y );
+ for ( int i = 0; i < len + 1; i++ )
+ SetPixelColor( usedColor );
+ Deactivate();
+}
+
+void LCD::DrawVLine( unsigned short x, unsigned short y, unsigned short len, int color )
+{
+ unsigned int usedColor = color == -1 ? _background : color == -2 ? _foreground : ( unsigned int ) color;
+
+ Activate();
+ SetXY( x, y, x, y + len );
+ for ( int i = 0; i < len; i++ )
+ SetPixelColor( usedColor );
+ Deactivate();
+}
+
+void LCD::PrintChar( char c, unsigned short x, unsigned short y, int fgColor, int bgColor )
+{
+ uint8_t i, ch;
+ uint16_t j;
+ unsigned int usedColorFG = fgColor == -1 ? _background : fgColor == -2 ? _foreground : ( unsigned int ) fgColor;
+ unsigned int usedColorBG = bgColor == -1 ? _background : bgColor == -2 ? _foreground : ( unsigned int ) bgColor;
+
+ uint16_t totalCharBytes = ( _font->Width * _font->Height ) / 8;
+ int16_t position = _font->Position[ c - _font->Offset ];
+ if ( position == -1 ) position = 0; // will print space character
+
+ Activate();
+
+ SetXY( x, y, x + _font->Width - 1, y + _font->Height - 1 );
+
+ for ( j = 0; j < totalCharBytes; j++ )
+ {
+ ch = _font->Data[ position ];
+ for ( i = 0; i < 8; i++ )
+ {
+ if ( ( ch & ( 1 << ( 7 - i ) ) ) != 0 ) SetPixelColor( usedColorFG );
+ else SetPixelColor( usedColorBG );
+ }
+ position++;
+ }
+ Deactivate();
+}
+
+void LCD::RotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor, int bgColor, unsigned short deg )
+{
+ uint8_t i, j, ch;
+ int newx, newy;
+ double radian;
+ radian = deg * 0.0175;
+
+ unsigned int usedColorFG = fgColor == -1 ? _background : fgColor == -2 ? _foreground : ( unsigned int ) fgColor;
+ unsigned int usedColorBG = bgColor == -1 ? _background : bgColor == -2 ? _foreground : ( unsigned int ) bgColor;
+
+ int16_t position = _font->Position[ c - _font->Offset ];
+ if ( position == -1 ) position = 0; // will print space character
+
+ Activate();
+
+ for ( j = 0; j < _font->Height; j++ )
+ {
+ for ( uint16_t zz = 0; zz < ( ( double ) _font->Width / 8 ); zz++ )
+ {
+ ch = _font->Data[ position + zz ];
+ for ( i = 0; i < 8; i++ )
+ {
+ newx = x + ( ( ( i + ( zz * 8 ) + ( pos * _font->Width ) ) * cos( radian ) ) - ( ( j ) * sin( radian ) ) );
+ newy = y + ( ( ( j ) * cos( radian ) ) + ( ( i + ( zz * 8 ) + ( pos * _font->Width ) ) * sin( radian ) ) );
+
+ SetXY( newx, newy, newx + 1, newy + 1 );
+
+ if ( ( ch & ( 1 << ( 7 - i ) ) ) != 0 ) SetPixelColor( usedColorFG );
+ else SetPixelColor( usedColorBG );
+ }
+ }
+ position += ( _font->Width / 8 );
+ }
+
+ Deactivate();
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lcd_base.h Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,594 @@
+/** \file lcd_base.h
+ * \brief Base class for all LCD controller implementations.
+ * \copyright GNU Public License, v2. or later
+ *
+ * Generic object painting and screen control.
+ *
+ * This library is based on the Arduino/chipKIT UTFT library by Henning
+ * Karlsen, http://henningkarlsen.com/electronics/library.php?id=52
+ *
+ * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
+ *
+ * Copyright (C)2012 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+#ifndef TFTLCD_BASE_H
+#define TFTLCD_BASE_H
+
+#include "mbed.h"
+#include "terminus.h"
+#include "rtos.h"
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \def RGB(r,g,b)
+ * \brief Creates a RGB color from distinct bytes for the red, green and blue components.
+ *
+ * Displays which use 16 bits to assign colors to a specific pixel, use
+ * 5 bits for the red component, 6 bits for the green component and 5
+ * bits for the blue component. Displays which have 18-bit color depth
+ * use 6 bits for red, 6 bits for green and 6 bits for blue component.
+ * This macro preserves the full 24-bit color depth, but it is the responsibility
+ * of the respective driver to convert the color value to the correct format.
+ */
+#define RGB( r, g, b ) ( ( r ) << 16 ) | ( ( g ) << 8 ) | ( b )
+/** \def COLOR_BLACK
+ * \brief Shorthand for RGB( 0, 0, 0 ).
+ */
+#define COLOR_BLACK RGB( 0x00, 0x00, 0x00 )
+/** \def COLOR_WHITE
+ * \brief Shorthand for RGB( 255, 255, 255 ).
+ */
+#define COLOR_WHITE RGB( 0xFF, 0xFF, 0xFF )
+/** \def COLOR_RED
+ * \brief Shorthand for RGB( 255, 0, 0 ).
+ */
+#define COLOR_RED RGB( 0xFF, 0x00, 0x00 )
+/** \def COLOR_GREEN
+ * \brief Shorthand for RGB( 0, 255, 0 ).
+ */
+#define COLOR_GREEN RGB( 0x00, 0xFF, 0x00 )
+/** \def COLOR_BLUE
+ * \brief Shorthand for RGB( 0, 0, 255 ).
+ */
+#define COLOR_BLUE RGB( 0x00, 0x00, 0xFF )
+/** \def COLOR_CYAN
+ * \brief Shorthand for RGB( 0, 255, 255 )
+ */
+#define COLOR_CYAN RGB( 0x00, 0xFF, 0xFF )
+/** \def COLOR_MAGENTA
+ * \brief Shorthand for RGB( 255, 0, 255 )
+ */
+#define COLOR_MAGENTA RGB( 0xFF, 0x00, 0xFF )
+/** \def COLOR_YELLOW
+ * \brief Shorthand for RGB( 255, 255, 0 )
+ */
+#define COLOR_YELLOW RGB( 0xFF, 0xFF, 0x00 )
+
+
+/** \enum Orientation_enum
+ * \brief Display orientation.
+ */
+enum Orientation_enum
+{
+ PORTRAIT = 0, /**< Top row of the screen is at 12 o'clock. */
+ LANDSCAPE = 1, /**< Top row of the screen is at 9 o'clock. */
+ PORTRAIT_REV = 2, /**< Top row of the screen is at 6 o'clock. */
+ LANDSCAPE_REV = 3, /**< Top row of the screen is at 3 o'clock. */
+};
+/** \typedef orientation_t
+ * \brief Convenience shortcut for display orientation.
+ */
+typedef enum Orientation_enum orientation_t;
+
+/** \enum ColorDepth_enum
+ * \brief Color depth
+ */
+enum ColorDepth_enum
+{
+ RGB16, /**< 16-bit colors, pixels can have 65K+ distinct color values */
+ RGB18, /**< 18-bit colors, pixels can have 262K+ distinct color values */
+ RGB24, /**< 24-bit colors, full 8 bits per component, 16M+ distinct color values */
+};
+/** \typedef colordepth_t
+ * \brief Convenience shortcut for display color depth.
+ */
+typedef enum ColorDepth_enum colordepth_t;
+
+/** \enum Alignment_enum
+ * \brief Horizontal text alignment on the line.
+ */
+enum Alignment_enum
+{
+ LEFT = 0, /**< Left-oriented, naturally gravitate closer to the left edge of the screen. */
+ CENTER = 9998, /**< Center-oriented, try to fit in the middle of the available space with equal free space to the left and right of the text. */
+ RIGHT = 9999, /**< Right-oriented, naturally gravitate closer to the right edge of the screen, leaving any remaining free space to the left of the text. */
+};
+/** \typedef align_t
+ * \brief Convenience shortcut for text alignment.
+ */
+typedef enum Alignment_enum align_t;
+
+///** \struct Font_struct
+// * \brief Describes fonts and their properties.
+// * \sa Comments in fonts.h
+// */
+//struct Font_struct
+//{
+// const char* font; /**< A pointer to the first byte in the font. */
+// unsigned char width; /**< The width of each character, in pixels. */
+// unsigned char height; /**< Height of each character, in pixels. */
+// unsigned char offset; /**< Offset of the first character in the font. */
+// unsigned char numchars; /**< Count of the available characters in the font. */
+//};
+///** \typedef font_metrics_t
+// * \brief Convenience shortcut for fonts properties.
+// */
+//typedef struct Font_struct font_metrics_t;
+
+/** \struct Bitmap_struct
+ * \brief Describes an image.
+ */
+struct Bitmap_struct
+{
+ colordepth_t Format; /**< Color depth of the image. */
+ unsigned short Width; /**< Width of the image in pixels. */
+ unsigned short Height; /**< Height of the image in pixels. */
+ const void* PixelData; /**< Image pixel data. */
+};
+/** \typedef bitmap_t
+ * \brief Convenience shortcut bitmap type.
+ */
+typedef struct Bitmap_struct bitmap_t;
+
+/** \struct BacklightPwmCtrl_enum
+ * \brief Type of backlight control for the LCD.
+ *
+ * When the selected type is \c Constant, the pin is simply on or off - there is no gradation in the intensity of the display.
+ * In this case any free pin can be used to control the backlight. On the other hand, when PWM is used to control brightness,
+ * take care to use only PWM-able mbed pins (p21, p22, p23, p24, p25, and p26), any other pins won't work. It is assumed that
+ * you know what you are doing, so no check is done to prevent using a non-PWM pin as assigned control pin, when either \c Direct
+ * or \c Indirect option is used.
+ *
+ * \version 0.1
+ * \remark When choosing PWM to control the backlight, you have the option to choose the pin to either source (\c Direct) or sink
+ * (\c Indirect) the current for LCD brightness control. Be aware that the mbed pins can source (and probably sink when
+ * configured as inputs) only 4 mA @+3V3 VDD. So if you are intending to use a bigger LCD, whith more LEDs in its backlight
+ * implementation, you probably want to interface it through a small signal transistor or a small MOSFET, in order to be able
+ * to handle a higher current without damaging your mbed.
+ * \remark As of version 0.1 (2013-01-25) the Indirect method of PWM has not been implemented yet.
+ */
+enum BacklightPwmCtrl_enum
+{
+ Constant, /**< When the pin is a simple on/off switch. */
+ Direct, /**< Control the brightness with PWM, as the control pin is sourcing the current to drive the backlight LEDs. */
+ Indirect, /**< Control the brightness with PWM, as the control pin is sinking the current which drives the backlight LEDs. */
+};
+/** \typedef backlight_t
+ * \brief Convenience shortcut for the backlight control type.
+ */
+typedef BacklightPwmCtrl_enum backlight_t;
+
+
+/** Base class for LCD implementations.
+ *
+ * All separate LCD controller implementations have to subclass this one.
+ *
+ * \version 0.1
+ * \author Todor Todorov
+ */
+class LCD
+{
+public:
+
+ /** Initialize display.
+ *
+ * Wakes up the display from sleep, initializes power parameters.
+ * This function must be called first, befor any painting on the
+ * display is done, otherwise the positioning of graphical elements
+ * will not work properly and any paynt operation will not be visible
+ * or produce garbage.
+ *
+ * This function is controller-specific and needs to be implemented
+ * separately for each available display.
+ * \param oritentation The display orientation, landscape is default.
+ * \param colors The correct color depth to use for the pixel data.
+ */
+ virtual void Initialize( orientation_t orientation, colordepth_t colors ) = 0;
+
+ /** Puts the display to sleep.
+ *
+ * When the display is in sleep mode, its power consumption is
+ * minimized. Before new pixel data can be written to the display
+ * memory, the controller needs to be brought out of sleep mode.
+ * \sa #WakeUp( void );
+ * \remarks The result of this operation might not be exactly as
+ * expected. Putting the display to sleep will cause the
+ * controller to switch to the standard color of the LCD,
+ * so depending on whether the display is normally white,
+ * or normally dark, the screen might or might not go
+ * dark. Additional power saving can be achieved, if
+ * the backlight of the used display is not hardwired on
+ * the PCB and can be controlled via the BL pin.
+ * \remarks This function is controller-specific and needs to be
+ * implemented separately for each available display.
+ */
+ virtual void Sleep( void );
+
+ /** Wakes up the display from sleep mode.
+ *
+ * This function needs to be called before any other, when the
+ * display has been put into sleep mode by a previois call to
+ * #Sleep( void ).
+ * \remarks This function is controller-specific and needs to be
+ * implemented separately for each available display.
+ */
+ virtual void WakeUp( void );
+
+ /** Set the foreground color for painting.
+ *
+ * This is the default foreground color to be used in painting operations.
+ * If a specific output function allows for a different color to be specified
+ * in place, the new setting will be used for that single operation only and
+ * will not change this value.
+ *
+ * \param color The color to be used (24-bit color depth).
+ * \sa #RGB(r,g,b)
+ */
+ virtual void SetForeground( unsigned int color = COLOR_WHITE);
+
+ /** Set the background color for painting.
+ *
+ * This is the default color to be used for "empty" pixels while painting.
+ * If a particular function allows for a different value to be specified
+ * when the function is called, the new value will be used only for this
+ * single call and will not change this setting.
+ *
+ * \param color The background color (24-bit color depth).
+ * \sa #RGB(r,g,b)
+ */
+ virtual void SetBackground( unsigned int color = COLOR_BLACK );
+
+ /** Sets the font to be used for painting of text on the screen.
+ * \param font A pointer to the font data.
+ * \sa Comments in file fonts.h
+ */
+ virtual void SetFont( const font_t* font );
+
+ /** Gets the display width.
+ * \return Display width in pixels.
+ */
+ unsigned short GetWidth( void );
+
+ /** Gets the display height.
+ * \return Display height in pixels.
+ */
+ unsigned short GetHeight( void );
+
+ /** Gets the font width.
+ * \return The current font width.
+ */
+ uint8_t GetFontWidth( void );
+
+ /** Gets the font height.
+ * \return The current font height.
+ */
+ uint8_t GetFontHeight( void );
+
+ /** Fills the whole screen with a single color.
+ * \param color The color to be used. The value must be in RGB-565 format.
+ * \remarks The special values -1 and -2 signify the preset background and foreground colors, respectively.
+ * The backround color is the default.
+ */
+ virtual void FillScreen( int color = -1 );
+
+ /** Sets the backlight intensity in percent as a float value in the range [0.0,1.0].
+ * \param level The backligh intensity in percent, where 0.0 is off and 1.0 is full brightness.
+ */
+
+ virtual void SetBacklightLevel( float level );
+
+ /** Clears the screen.
+ *
+ * This is the same as calling #FillScreen() or #FillScreen( -1 ) to use the background color.
+ */
+ virtual void ClearScreen( void );
+
+ /** Draws a pixel at the specified location.
+ *
+ * By default the function will use the preset foreground color, but the background
+ * or a custom color could be used as well.
+ *
+ * \param x The horizontal offset of the pixel from the upper left corner of the screen.
+ * \param y The vertical offset of the pixel from the upper left corner of the screen.
+ * \param color The color to be used. Use a custom color, or -1 for background and -2 for foreground color.
+ */
+ virtual void DrawPixel( unsigned short x, unsigned short y, int color = -2 );
+
+ /** Draws a line.
+ *
+ * \param x1 Horizontal offset of the beginning point of the line.
+ * \param y1 Vertical offset of the beginning point of the line.
+ * \param x2 Horizontal offset of the end point of the line.
+ * \param y2 Verical offset of the end point of the line.
+ * \param color The color to use for painting, or -1 for background, or -2 for foreground.
+ */
+ virtual void DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
+
+ /** Paints a rectangle.
+ *
+ * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
+ * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
+ * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
+ * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
+
+ /** Paints a rectangle and fills it with the paint color.
+ *
+ * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
+ * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
+ * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
+ * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
+
+ /** Paints a rectangle with rounded corners.
+ *
+ * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
+ * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
+ * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
+ * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
+
+ /** Paints a rectangle with rounded corners and fills it with the paint color.
+ *
+ * \param x1 The horizontal offset of the beginning point of one of the rectangle's diagonals.
+ * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
+ * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
+ * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
+
+ /** Paints a circle.
+ *
+ * \param x The offset of the circle's center from the left edge of the screen.
+ * \param y The offset of the circle's center from the top edge of the screen.
+ * \param radius The circle's radius.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
+
+ /** Paints a circle and fills it with the paint color.
+ *
+ * \param x The offset of the circle's center from the left edge of the screen.
+ * \param y The offset of the circle's center from the top edge of the screen.
+ * \param radius The circle's radius.
+ * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
+ */
+ virtual void FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
+
+ /** Print a text on the screen.
+ *
+ * \param str The text.
+ * \param x The horizontal offset form the left edge of the screen. The special values LEFT, CENTER,
+ * or RIGHT can be used instead of pixel offset to indicate the text's horizontal alignment.
+ * \param y The vertical offset of the text from the top of the screen.
+ * \param fgColor The foreground to use for painting the text; -1 indicates background color, -2 the foreground setting, or custom color.
+ * \param bgColor The color to use for painting the empty pixels; -1 indicates the background color, -2 the foreground setting, or custom color.
+ * \param deg If different than 0, the text will be rotated at an angle this many degrees around its starting point. Default is not to ratate.
+ */
+ virtual void Print( const char *str, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
+
+ /** Draw an image on the screen.
+ *
+ * The pixels of the picture must be in the RGB-565 format. The data can be provided
+ * as an array in a source or a header file. To convert an image file to the appropriate
+ * format, a special utility must be utilized. One such tool is provided by Henning Karlsen,
+ * the author of the UTFT display liberary and can be downloaded for free from his web site:
+ * http://henningkarlsen.com/electronics/library.php?id=52
+ *
+ * \param x Horizontal offset of the first pixel of the image.
+ * \param y Vertical offset of the first pixel of the image.
+ * \param img Image data pointer.
+ * \param scale A value of 1 will produce an image with its original size, while a different value will scale the image.
+ */
+ virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned char scale = 1 );
+
+ /** Draw an image on the screen.
+ *
+ * The pixels of the picture must be in the RGB-565 format. The data can be provided
+ * as an array in a source or a header file. To convert an image file to the appropriate
+ * format, a special utility must be utilized. One such tool is provided by Henning Karlsen,
+ * the author of the UTFT display liberary and can be downloaded for free from his web site:
+ * http://henningkarlsen.com/electronics/library.php?id=52
+ *
+ * \param x Horizontal offset of the first pixel of the image.
+ * \param y Vertical offset of the first pixel of the image.
+ * \param img Image data pointer.
+ * \param deg Angle to rotate the image before painting on screen, in degrees.
+ * \param rox
+ * \param roy
+ */
+ virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned short deg, unsigned short rox, unsigned short roy );
+
+ /** Sends both command and data to the display controller.
+ *
+ * This is a helper utility function which combines the 2 functions above
+ * into one single convenience step.
+ *
+ * \param cmd The display command.
+ * \param data The display pixel data.
+ */
+ virtual void WriteCmdData( unsigned short cmd, unsigned short data );
+
+protected:
+ /** Creates an instance of the class.
+ *
+ * \param width Width of the display in pixels.
+ * \param height Height of the display in pixels.
+ * \param CS Pin connected to the CS input of the display.
+ * \param RS Pin connected to the RS input of the display.
+ * \param RESET Pin connected to the RESET input of the display.
+ * \param BL Pin connected to the circuit controlling the LCD's backlight.
+ * \param blType The type of backlight to be used.
+ * \param defaultBacklight The standard backlight intensity (if using PWM control), expressed in percent as float value from 0.0 to 1.0
+ */
+ LCD( unsigned short width, unsigned short height, PinName CS, PinName RS, PinName DIR, PinName EN, PinName LE, PinName BL, backlight_t blType, float defaultBacklight );
+
+ /** Activates the display for command/data transfer.
+ *
+ * Usually achieved by pulling the CS pin of the display low.
+ */
+ virtual void Activate( void );
+
+ /** Deactivates the display after data has been transmitted.
+ *
+ * Usually achieved by pulling the CS pin of the display high.
+ */
+ virtual void Deactivate( void );
+
+ /** Sends a command to the display.
+ *
+ * \param cmd The display command.
+ * \remarks Commands are controller-specific and this function needs to
+ * be implemented separately for each available controller.
+ */
+ virtual void WriteCmd( unsigned short cmd ) = 0;
+
+ /** Sends pixel data to the display.
+ *
+ * \param data The display data.
+ * \remarks Sendin data is controller-specific and this function needs to
+ * be implemented separately for each available controller.
+ */
+ virtual void WriteData( unsigned short data ) = 0;
+
+
+
+ /** Assigns a chunk of the display memory to receive data.
+ *
+ * When data is sent to the display after this function completes, the opertion will
+ * start from the begining of the assigned address (pixel position) and the pointer
+ * will be automatically incremented so that the next data write operation will continue
+ * with the next pixel from the memory block. If more data is written than available
+ * pixels, at the end of the block the pointer will jump back to its beginning and
+ * commence again, until the next address change command is sent to the display.
+ *
+ * \param x1 The X coordinate of the pixel at the beginning of the block.
+ * \param y1 The Y coordinate of the pixel at the beginning of the block.
+ * \param x2 The X coordinate of the pixel at the end of the block.
+ * \param y2 The Y coordinate of the pixel at the end of the block.
+ * \remarks Addressing commands are controller-specific and this function needs to be
+ * implemented separately for each available controller.
+ */
+ virtual void SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 ) = 0;
+
+ /** Resets the memory address for the next display write operation to the screen origins (0,0).
+ */
+ virtual void ClearXY( void );
+
+ /** Sets the color of the pixel at the address pointer of the controller.
+ *
+ * This function is to be provided by each implementation separately in
+ * order to account for different color depths used by the controller.
+ * \param color The color of the pixel.
+ * \param mode The depth (palette) of the color.
+ */
+ virtual void SetPixelColor( unsigned int color, colordepth_t mode = RGB24 ) = 0;
+
+ /** Draws a horizontal line.
+ *
+ * This is a utility function to draw horizontal-only lines
+ * for reduced code complexity and faster execution.
+ *
+ * \param x X coordinate of the starting point of the line.
+ * \param y Y coordinate of the starting point of the line.
+ * \param len Length of the line.
+ * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
+ * -1 switches to the default background color, or any custom color can be used.
+ */
+ virtual void DrawHLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
+
+ /** Draws a vertical line.
+ *
+ * This is a utility function to draw vertical-only lines
+ * for reduced code complexity and faster execution.
+ *
+ * \param x X coordinate of the starting point of the line.
+ * \param y Y coordinate of the starting point of the line.
+ * \param len Height of the line.
+ * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
+ * -1 switches to the default background color, or any custom color can be used.
+ */
+ virtual void DrawVLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
+
+ /** Prints a character at the given position and using the given color.
+ *
+ * \param c The character.
+ * \param x X coordinate of the character position.
+ * \param y Y coordinate of the character position.
+ * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
+ * -1 switches to the default background color, or any custom color can be used.
+ * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
+ * -2 switches to the default foreground color, or any custom color can be used.
+ */
+ virtual void PrintChar( char c, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1 );
+
+ /** Prints a character at the given position and using the given color and with the given rotation.
+ *
+ * \param c The character.
+ * \param x X coordinate of the character position.
+ * \param y Y coordinate of the character position.
+ * \param pos Position of the character in the string from which it originates (used to rotate a whole string).
+ * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
+ * -1 switches to the default background color, or any custom color can be used.
+ * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
+ * -2 switches to the default foreground color, or any custom color can be used.
+ * \param deg The angle at which to rotate.
+ */
+ virtual void RotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
+
+protected:
+ unsigned short _disp_width, _disp_height;
+ DigitalOut _lcd_pin_cs, _lcd_pin_rs, _lcd_pin_dir, _lcd_pin_en, _lcd_pin_le;
+ orientation_t _orientation;
+ colordepth_t _colorDepth;
+ unsigned int _foreground, _background;
+ const font_t* _font;
+ DigitalOut* _lcd_pin_bl;
+ PwmOut* _bl_pwm;
+ backlight_t _bl_type;
+ float _bl_pwm_default, _bl_pwm_current;
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TFTLCD_BASE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/terminus.cpp Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,543 @@
+#include <mbed.h>
+#include <terminus.h>
+
+const char TerminusFontBitmaps[] = {
+ // #32
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' '
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x20,0x00,0x00, // '!'
+ 0x00,0x50,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '"'
+ 0x00,0x00,0x50,0x50,0xF8,0x50,0x50,0xF8,0x50,0x50,0x00,0x00, // '#'
+//******************************************************new
+ // 0x00,0x00,0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'ü' '\xFC' '$' verwenden für 'ü'
+//**********************************************************
+ 0x00,0x00,0x20,0x70,0xA8,0xA0,0x70,0x28,0xA8,0x70,0x20,0x00, // '$'
+ 0x00,0x00,0x48,0xA8,0x50,0x10,0x20,0x28,0x54,0x48,0x00,0x00, // '%'
+ 0x00,0x00,0x20,0x50,0x50,0x20,0x68,0x90,0x90,0x68,0x00,0x00, // '&'
+ 0x00,0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '''
+ 0x00,0x00,0x10,0x20,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00, // '('
+ 0x00,0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00, // ')'
+ 0x00,0x00,0x00,0x00,0x50,0x20,0xF8,0x20,0x50,0x00,0x00,0x00, // '*'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0x00,0x00, // '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40,0x00, // ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00, // '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00, // '.'
+ 0x00,0x00,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00,0x00, // '/'
+ 0x00,0x00,0x70,0x88,0x98,0xA8,0xC8,0x88,0x88,0x70,0x00,0x00, // '0'
+ 0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // '1'
+ 0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00, // '2'
+ 0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00, // '3'
+ 0x00,0x00,0x08,0x18,0x28,0x48,0x88,0xF8,0x08,0x08,0x00,0x00, // '4'
+ 0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00, // '5'
+ 0x00,0x00,0x70,0x80,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00, // '6'
+ 0x00,0x00,0xF8,0x08,0x08,0x10,0x10,0x20,0x20,0x20,0x00,0x00, // '7'
+ 0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00, // '8'
+ 0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x08,0x70,0x00,0x00, // '9'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x00,0x00, // ':'
+ 0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x20,0x20,0x40,0x00, // ';'
+ 0x00,0x00,0x00,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x00,0x00, // '<'
+ 0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, // '='
+ 0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x10,0x20,0x40,0x00,0x00, // '>'
+ 0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x00,0x20,0x20,0x00,0x00, // '?'
+ 0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0x98,0x80,0x78,0x00,0x00, // '@'
+ 0x00,0x00,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'A'
+ 0x00,0x00,0xF0,0x88,0x88,0xF0,0x88,0x88,0x88,0xF0,0x00,0x00, // 'B'
+ 0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00, // 'C' '\x43'
+ 0x00,0x00,0xE0,0x90,0x88,0x88,0x88,0x88,0x90,0xE0,0x00,0x00, // 'D'
+ 0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0xF8,0x00,0x00, // 'E'
+ 0x00,0x00,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0x80,0x00,0x00, // 'F' '\x46'
+ 0x00,0x00,0x70,0x88,0x80,0x80,0xB8,0x88,0x88,0x70,0x00,0x00, // 'G'
+ 0x00,0x00,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x88,0x00,0x00, // 'H'
+ 0x00,0x00,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'I'
+ 0x00,0x00,0x38,0x10,0x10,0x10,0x10,0x90,0x90,0x60,0x00,0x00, // 'J'
+ 0x00,0x00,0x88,0x90,0xA0,0xC0,0xC0,0xA0,0x90,0x88,0x00,0x00, // 'K'
+ 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xF8,0x00,0x00, // 'L'
+ 0x00,0x00,0x88,0xD8,0xA8,0xA8,0x88,0x88,0x88,0x88,0x00,0x00, // 'M'
+ 0x00,0x00,0x88,0x88,0xC8,0xA8,0x98,0x88,0x88,0x88,0x00,0x00, // 'N'
+ 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'O'
+ 0x00,0x00,0xF0,0x88,0x88,0x88,0xF0,0x80,0x80,0x80,0x00,0x00, // 'P'
+ 0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0xA8,0x70,0x08,0x00, // 'Q'
+ 0x00,0x00,0xF0,0x88,0x88,0x88,0xF0,0xA0,0x90,0x88,0x00,0x00, // 'R'
+ 0x00,0x00,0x70,0x88,0x80,0x70,0x08,0x08,0x88,0x70,0x00,0x00, // 'S'
+ 0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // 'T'
+ 0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'U'
+ 0x00,0x00,0x88,0x88,0x88,0x50,0x50,0x50,0x20,0x20,0x00,0x00, // 'V'
+ 0x00,0x00,0x88,0x88,0x88,0x88,0xA8,0xA8,0xD8,0x88,0x00,0x00, // 'W'
+ 0x00,0x00,0x88,0x88,0x50,0x20,0x20,0x50,0x88,0x88,0x00,0x00, // 'X'
+ 0x00,0x00,0x88,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x00,0x00, // 'Y'
+ 0x00,0x00,0xF8,0x08,0x10,0x20,0x40,0x80,0x80,0xF8,0x00,0x00, // 'Z'
+ 0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x40,0x40,0x70,0x00,0x00, // '['
+ 0x00,0x00,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x00,0x00, // '\'
+ 0x00,0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00,0x00, // ']'
+ 0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00, // '_'
+ 0x40,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '`'
+ 0x00,0x00,0x00,0x00,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'a'
+ 0x00,0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x88,0xF0,0x00,0x00, // 'b'
+ 0x00,0x00,0x00,0x00,0x70,0x88,0x80,0x80,0x88,0x70,0x00,0x00, // 'c'
+ 0x00,0x00,0x08,0x08,0x78,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'd'
+ 0x00,0x00,0x00,0x00,0x70,0x88,0xF8,0x80,0x88,0x70,0x00,0x00, // 'e'
+ 0x00,0x00,0x18,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // 'f'
+ 0x00,0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x70, // 'g'
+ 0x00,0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x88,0x88,0x00,0x00, // 'h'
+ 0x00,0x20,0x20,0x00,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'i'
+ 0x00,0x08,0x08,0x00,0x18,0x08,0x08,0x08,0x08,0x08,0x48,0x30, // 'j'
+ 0x00,0x00,0x40,0x40,0x48,0x50,0x60,0x60,0x50,0x48,0x00,0x00, // 'k'
+ 0x00,0x00,0x60,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'l'
+ 0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // 'm'
+ 0x00,0x00,0x00,0x00,0xF0,0x88,0x88,0x88,0x88,0x88,0x00,0x00, // 'n'
+ 0x00,0x00,0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'o'
+ 0x00,0x00,0x00,0x00,0xF0,0x88,0x88,0x88,0x88,0xF0,0x80,0x80, // 'p'
+ 0x00,0x00,0x00,0x00,0x78,0x88,0x88,0x88,0x88,0x78,0x08,0x08, // 'q'
+ 0x00,0x00,0x00,0x00,0xB8,0xC0,0x80,0x80,0x80,0x80,0x00,0x00, // 'r'
+ 0x00,0x00,0x00,0x00,0x78,0x80,0x70,0x08,0x08,0xF0,0x00,0x00, // 's'
+ 0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x20,0x18,0x00,0x00, // 't'
+ 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'u'
+ 0x00,0x00,0x00,0x00,0x88,0x88,0x50,0x50,0x20,0x20,0x00,0x00, // 'v'
+ 0x00,0x00,0x00,0x00,0x88,0x88,0xA8,0xA8,0xA8,0x70,0x00,0x00, // 'w'
+ 0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x20,0x50,0x88,0x00,0x00, // 'x'
+ 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x88,0x78,0x08,0x70, // 'y'
+ 0x00,0x00,0x00,0x00,0xF8,0x10,0x20,0x40,0x80,0xF8,0x00,0x00, // 'z'
+ 0x00,0x00,0x18,0x20,0x20,0x40,0x20,0x20,0x20,0x18,0x00,0x00, // '{'
+ 0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // '|'
+ 0x00,0x00,0x60,0x10,0x10,0x08,0x10,0x10,0x10,0x60,0x00,0x00, // '}'
+ // #126
+ 0x00,0x48,0xA8,0x90,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '~'
+ // #128
+ 0x00,0x0C,0x16,0x20,0x60,0xFC,0x60,0xF8,0x10,0x0C,0x00,0x00, // '€' '\x80'
+ // #139
+ 0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x10,0x08,0x04,0x00,0x00, // '‹' '\x8B'
+ // #155
+ 0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x00,0x00, // '›' '\x9B'
+ // #160
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '' ( ) '\xA0'
+ /******************************************************************************/
+ // Zeichen mit Hexcode 0xA1 - 0xA6 durch Umlaute ersetzt, da bestimmte Umlaute mit
+ // hohem Hexcodewert wie 'ü' = 0xFC nicht richtig dargestellet werden
+
+ 0x50,0x50,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Ä' '\xA1' '\241'
+ 0x50,0x50,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ö' '\xA2' '\242'
+ 0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ü' '\xA3' '\243'
+ 0x00,0x00,0x50,0x50,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'ä' '\xA4' '\244'
+ 0x00,0x00,0x50,0x50,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ö' '\xA5' '\245'
+ 0x00,0x00,0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'ü' '\xA6' '\246'
+
+ /******************************************************************************/
+ //0x00,0x00,0x20,0x20,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // '¡' '\xA1'
+ //0x00,0x00,0x00,0x20,0x70,0xA8,0xA0,0xA0,0xA8,0x70,0x20,0x00, // '¢' '\xA2'
+ //0x00,0x00,0x30,0x48,0x40,0xF0,0x40,0x40,0x48,0xF8,0x00,0x00, // '£' '\xA3'
+ //0x00,0x00,0x00,0x48,0x30,0x48,0x48,0x30,0x48,0x00,0x00,0x00, // '¤' '\xA4'
+ //0x00,0x00,0x88,0x88,0x50,0x20,0x70,0x20,0x70,0x20,0x00,0x00, // '¥' '\xA5'
+ //0x00,0x00,0x20,0x20,0x20,0x00,0x00,0x20,0x20,0x20,0x00,0x00, // '¦' '\xA6'
+ 0x00,0x30,0x48,0x20,0x50,0x48,0x28,0x10,0x48,0x30,0x00,0x00, // '§' '\xA7'
+ 0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¨' '\xA8'
+ 0x00,0x00,0x78,0x84,0xB4,0xA4,0xA4,0xB4,0x84,0x78,0x00,0x00, // '©' '\xA9'
+ 0x30,0x08,0x38,0x48,0x38,0x00,0x78,0x00,0x00,0x00,0x00,0x00, // 'ª' '\xAA'
+ 0x00,0x00,0x00,0x14,0x28,0x50,0xA0,0x50,0x28,0x14,0x00,0x00, // '«' '\xAB'
+ 0x00,0x00,0x00,0x00,0xF8,0x08,0x08,0x08,0x00,0x00,0x00,0x00, // '¬' '\xAC'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00, // ' ' '\xAD'
+ 0x00,0x00,0x78,0x84,0xB4,0xAC,0xB4,0xAC,0x84,0x78,0x00,0x00, // '®' '\xAE'
+ 0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¯' '\xAF'
+ 0x00,0x20,0x50,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '°' '\xB0'
+ 0x00,0x00,0x00,0x20,0x20,0xF8,0x20,0x20,0x00,0xF8,0x00,0x00, // '±' '\xB1'
+ 0x00,0x30,0x48,0x10,0x20,0x78,0x00,0x00,0x00,0x00,0x00,0x00, // '²' '\xB2'
+ 0x00,0x70,0x08,0x30,0x08,0x70,0x00,0x00,0x00,0x00,0x00,0x00, // '³' '\xB3'
+ 0x10,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '´' '\xB4'
+ 0x00,0x00,0x00,0x00,0x88,0x88,0x88,0x88,0x98,0xE8,0x80,0x80, // 'µ' '\xB5'
+ 0x00,0x00,0x78,0xA8,0xA8,0xA8,0x68,0x28,0x28,0x28,0x00,0x00, // '¶' '\xB6'
+ 0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x00,0x00,0x00,0x00,0x00, // '·' '\xB7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x40, // '¸' '\xB8'
+ 0x00,0x20,0x60,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¹' '\xB9'
+ 0x30,0x48,0x48,0x48,0x30,0x00,0x78,0x00,0x00,0x00,0x00,0x00, // 'º' '\xBA'
+ 0x00,0x00,0x00,0xA0,0x50,0x28,0x14,0x28,0x50,0xA0,0x00,0x00, // '»' '\xBB'
+ 0x40,0xC0,0x40,0x48,0x10,0x20,0x48,0x98,0x28,0x78,0x08,0x08, // '¼' '\xBC'
+ 0x40,0xC0,0x44,0x48,0x10,0x20,0x40,0x98,0x24,0x08,0x10,0x3C, // '½' '\xBD'
+ 0xC0,0x20,0xC0,0x24,0xC8,0x10,0x24,0x4C,0x94,0x3C,0x04,0x04, // '¾' '\xBE'
+ 0x00,0x00,0x20,0x20,0x00,0x20,0x40,0x88,0x88,0x70,0x00,0x00, // '¿' '\xBF'
+ 0x40,0x20,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'À' '\xC0'
+ 0x10,0x20,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Á' '\xC1'
+ 0x20,0x50,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Â' '\xC2'
+ 0x28,0x50,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Ã' '\xC3'
+ 0x50,0x50,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Ä' '\xC4'
+ 0x20,0x50,0x70,0x88,0x88,0x88,0xF8,0x88,0x88,0x88,0x00,0x00, // 'Å' '\xC5'
+ 0x00,0x00,0x7C,0x90,0x90,0xFC,0x90,0x90,0x90,0x9C,0x00,0x00, // 'Æ' '\xC6'
+ 0x00,0x00,0x70,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x20,0x40, // 'Ç' '\xC7'
+ 0x40,0x20,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0xF8,0x00,0x00, // 'È' '\xC8'
+ 0x10,0x20,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0xF8,0x00,0x00, // 'É' '\xC9'
+ 0x20,0x50,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0xF8,0x00,0x00, // 'Ê' '\xCA'
+ 0x50,0x50,0xF8,0x80,0x80,0xF0,0x80,0x80,0x80,0xF8,0x00,0x00, // 'Ë' '\xCB'
+ 0x40,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'Ì' '\xCC'
+ 0x10,0x20,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'Í' '\xCD'
+ 0x20,0x50,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'Î' '\xCE'
+ 0x50,0x50,0x70,0x20,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'Ï' '\xCF'
+ 0x00,0x00,0xE0,0x90,0x88,0xE8,0x88,0x88,0x90,0xE0,0x00,0x00, // 'Ð' '\xD0'
+ 0x28,0x50,0x88,0x88,0xC8,0xA8,0x98,0x88,0x88,0x88,0x00,0x00, // 'Ñ' '\xD1'
+ 0x40,0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ò' '\xD2'
+ 0x10,0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ó' '\xD3'
+ 0x20,0x50,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ô' '\xD4'
+ 0x28,0x50,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Õ' '\xD5'
+ 0x50,0x50,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ö' '\xD6'
+ 0x00,0x00,0x00,0x00,0x88,0x50,0x20,0x50,0x88,0x00,0x00,0x00, // '×' '\xD7'
+ 0x00,0x00,0x74,0x88,0x98,0xA8,0xC8,0x88,0x88,0x70,0x00,0x00, // 'Ø' '\xD8'
+ 0x40,0x20,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ù' '\xD9'
+ 0x10,0x20,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ú' '\xDA'
+ 0x20,0x50,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Û' '\xDB'
+ 0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'Ü' '\xDC'
+ 0x10,0x20,0x88,0x88,0x50,0x50,0x20,0x20,0x20,0x20,0x00,0x00, // 'Ý' '\xDD'
+ 0x00,0x00,0x80,0xF0,0x88,0x88,0x88,0xF0,0x80,0x80,0x00,0x00, // 'Þ' '\xDE'
+ 0x00,0x00,0xE0,0x90,0x90,0xF0,0x88,0x88,0xC8,0xB0,0x00,0x00, // 'ß' '\xDF'
+ 0x00,0x00,0x40,0x20,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'à' '\xE0'
+ 0x00,0x00,0x10,0x20,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'á' '\xE1'
+ 0x00,0x00,0x20,0x50,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'â' '\xE2'
+ 0x00,0x00,0x28,0x50,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'ã' '\xE3'
+ 0x00,0x00,0x50,0x50,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'ä' '\xE4'
+ 0x00,0x00,0x20,0x50,0x70,0x08,0x78,0x88,0x88,0x78,0x00,0x00, // 'å' '\xE5'
+ 0x00,0x00,0x00,0x00,0x70,0x28,0x68,0xB0,0xA0,0x78,0x00,0x00, // 'æ' '\xE6'
+ 0x00,0x00,0x00,0x00,0x70,0x88,0x80,0x80,0x88,0x70,0x20,0x40, // 'ç' '\xE7'
+ 0x00,0x00,0x40,0x20,0x70,0x88,0xF8,0x80,0x88,0x70,0x00,0x00, // 'è' '\xE8'
+ 0x00,0x00,0x10,0x20,0x70,0x88,0xF8,0x80,0x88,0x70,0x00,0x00, // 'é' '\xE9'
+ 0x00,0x00,0x20,0x50,0x70,0x88,0xF8,0x80,0x88,0x70,0x00,0x00, // 'ê' '\xEA'
+ 0x00,0x00,0x50,0x50,0x70,0x88,0xF8,0x80,0x88,0x70,0x00,0x00, // 'ë' '\xEB'
+ 0x00,0x00,0x40,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'ì' '\xEC'
+ 0x00,0x00,0x10,0x20,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'í' '\xED'
+ 0x00,0x00,0x20,0x50,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'î' '\xEE'
+ 0x00,0x00,0x50,0x50,0x60,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 'ï' '\xEF'
+ 0x00,0xA0,0x40,0xA0,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ð' '\xF0'
+ 0x00,0x00,0x28,0x50,0xF0,0x88,0x88,0x88,0x88,0x88,0x00,0x00, // 'ñ' '\xF1'
+ 0x00,0x00,0x40,0x20,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ò' '\xF2'
+ 0x00,0x00,0x10,0x20,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ó' '\xF3'
+ 0x00,0x00,0x20,0x50,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ô' '\xF4'
+ 0x00,0x00,0x28,0x50,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'õ' '\xF5'
+ 0x00,0x00,0x50,0x50,0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 'ö' '\xF6'
+ 0x00,0x00,0x00,0x20,0x20,0x00,0xF8,0x00,0x20,0x20,0x00,0x00, // '÷' '\xF7'
+ 0x00,0x00,0x00,0x00,0x34,0x48,0x58,0x68,0x48,0xB0,0x00,0x00, // 'ø' '\xF8'
+ 0x00,0x00,0x40,0x20,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'ù' '\xF9'
+ 0x00,0x00,0x10,0x20,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'ú' '\xFA'
+ 0x00,0x00,0x20,0x50,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'û' '\xFB'
+ 0x00,0x00,0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x78,0x00,0x00, // 'ü' '\xFC'
+ 0x00,0x00,0x10,0x20,0x88,0x88,0x88,0x88,0x88,0x78,0x08,0x70, // 'ý' '\xFD'
+ 0x00,0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x88,0xF0,0x80,0x80, // 'þ' '\xFE'
+ 0x00,0x00,0x50,0x50,0x88,0x88,0x88,0x88,0x88,0x78,0x08,0x70, // 'ÿ' '\xFF'
+};
+
+const int16_t TerminusCharOffsets[] = {
+ 0,12,24,36, // 35
+ 48,60,72,84,96, // 40
+ 108,120,132,144,156, // 45
+ 168,180,192,204,216, // 50
+ 228,240,252,264,276, // 55
+ 288,300,312,324,336, // 60
+ 348,360,372,384,396, // 65
+ 408,420,432,444,456, // 70
+ 468,480,492,504,516, // 75
+ 528,540,552,564,576, // 80
+ 588,600,612,624,636, // 85
+ 648,660,672,684,696, // 90
+ 708,720,732,744,756, // 95
+ 768,780,792,804,816, // 100
+ 828,840,852,864,876, // 105
+ 888,900,912,924,936, // 110
+ 948,960,972,984,996, // 115
+ 1008,1020,1032,1044,1056, // 120
+ 1068,1080,1092,1104,1116, // 125
+ 1128, // 126
+ -1, // 127
+ 1140, // 128
+ -1, // 129
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, // 138
+ 1152, // 139
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 150
+ -1, -1, -1, -1, // 154
+ 1164, // 155
+ -1, -1, -1, -1, // 159
+ 1176, // 160
+ 1188,1200,1212,1224,1236, // 165
+ 1248,1260,1272,1284,1296, // 170
+ 1308,1320,1332,1344,1356, // 175
+ 1368,1380,1392,1404,1416, // 180
+ 1428,1440,1452,1464,1476, // 185
+ 1488,1500,1512,1524,1536, // 190
+ 1548,1560,1572,1584,1596, // 195
+ 1608,1620,1632,1644,1656, // 200
+ 1668,1680,1692,1704,1716, // 205
+ 1728,1740,1752,1764,1776, // 210
+ 1788,1800,1812,1824,1836, // 215
+ 1848,1860,1872,1884,1896, // 220
+ 1908,1920,1932,1944,1956, // 225
+ 1968,1980,1992,2004,2016, // 230
+ 2028,2040,2052,2064,2076, // 235
+ 2088,2100,2112,2124,2136, // 240
+ 2148,2160,2172,2184,2196, // 245
+ 2204,2216,2228,2240,2252, // 250
+ 2264,2276,2288,2300,2312, // 255
+};
+
+const font_t TerminusFont = {
+ .Offset = 32,
+ .Width = 8,
+ .Height = 12,
+ .Position = TerminusCharOffsets,
+ .Data = TerminusFontBitmaps
+};
+
+const char TerminusBigFontBitmaps[] = {
+ // 32
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '!'
+ 0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '"'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x7F,0xF0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x7F,0xF0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '#'
+ 0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x1F,0xE0,0x33,0x30,0x63,0x18,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x33,0x00,0x1F,0xE0,0x03,0x30,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x63,0x18,0x33,0x30,0x1F,0xE0,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '$'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x30,0x66,0x30,0x66,0x60,0x66,0x60,0x3C,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0xF0,0x19,0x98,0x19,0x98,0x31,0x98,0x30,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '%'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x30,0xC0,0x30,0xC0,0x30,0xC0,0x30,0xC0,0x19,0x80,0x0F,0x00,0x0E,0x00,0x1B,0x18,0x31,0x98,0x60,0xF0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xF0,0x31,0x98,0x1F,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '&'
+ 0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '('
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ')'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x18,0x60,0x0C,0xC0,0x07,0x80,0x03,0x00,0x7F,0xF8,0x03,0x00,0x07,0x80,0x0C,0xC0,0x18,0x60,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '*'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x7F,0xF8,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '+'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ','
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '-'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '.'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '/'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x70,0x60,0xF0,0x61,0xB0,0x63,0x30,0x66,0x30,0x6C,0x30,0x78,0x30,0x70,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '0'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x07,0x00,0x0F,0x00,0x1B,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '1'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '2'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x0F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '3'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x70,0x00,0xF0,0x01,0xB0,0x03,0x30,0x06,0x30,0x0C,0x30,0x18,0x30,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '4'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '5'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x30,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '6'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '7'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '8'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '9'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ':'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ';'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '<'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '='
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '>'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '?'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x30,0x30,0x60,0x18,0x60,0x18,0x61,0xF8,0x63,0x18,0x66,0x18,0x66,0x18,0x66,0x18,0x66,0x18,0x66,0x18,0x66,0x18,0x63,0x18,0x61,0xE8,0x60,0x00,0x60,0x00,0x30,0x00,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '@'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'A'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'B'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'C'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0xC0,0x60,0x60,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x60,0x60,0x61,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'D'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'E'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'F'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x63,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'G'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'H'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'I'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xF8,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x30,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'J'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x60,0x60,0xC0,0x61,0x80,0x63,0x00,0x66,0x00,0x6C,0x00,0x78,0x00,0x70,0x00,0x70,0x00,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'K'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'L'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x70,0x38,0x78,0x78,0x6C,0xD8,0x6C,0xD8,0x67,0x98,0x63,0x18,0x63,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'M'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x70,0x30,0x78,0x30,0x6C,0x30,0x66,0x30,0x63,0x30,0x61,0xB0,0x60,0xF0,0x60,0x70,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'N'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'O'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'P'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x63,0x30,0x31,0xE0,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x78,0x00,0x6C,0x00,0x66,0x00,0x63,0x00,0x61,0x80,0x60,0xC0,0x60,0x60,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'R'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'S'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'T'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'U'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x0D,0x80,0x0D,0x80,0x0D,0x80,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'V'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x63,0x18,0x63,0x18,0x67,0x98,0x6C,0xD8,0x6C,0xD8,0x78,0x78,0x70,0x38,0x60,0x18,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'W'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x30,0x60,0x30,0x60,0x18,0xC0,0x18,0xC0,0x0D,0x80,0x0D,0x80,0x07,0x00,0x07,0x00,0x0D,0x80,0x0D,0x80,0x18,0xC0,0x18,0xC0,0x30,0x60,0x30,0x60,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'X'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x30,0x30,0x30,0x30,0x18,0x60,0x18,0x60,0x0C,0xC0,0x0C,0xC0,0x07,0x80,0x07,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '['
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x00,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '\'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ']'
+ 0x00,0x00,0x00,0x00,0x02,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x30,0x60,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '^'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00, // '_'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '`'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'a'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'b'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'c'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'd'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'e'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF0,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x3F,0xC0,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'f'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x3F,0xC0,0x00,0x00, // 'g'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'h'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'i'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x18,0xC0,0x0F,0x80,0x00,0x00, // 'j'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x30,0x30,0x60,0x30,0xC0,0x31,0x80,0x33,0x00,0x36,0x00,0x3C,0x00,0x36,0x00,0x33,0x00,0x31,0x80,0x30,0xC0,0x30,0x60,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'k'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'l'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xE0,0x63,0x30,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'm'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'n'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'o'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00, // 'p'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x00, // 'q'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x67,0xF0,0x6C,0x00,0x78,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'r'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x00,0x60,0x00,0x30,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 's'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x3F,0xC0,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 't'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'u'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x0D,0x80,0x0D,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'v'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x33,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'w'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x18,0xC0,0x0D,0x80,0x07,0x00,0x0D,0x80,0x18,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'x'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x3F,0xC0,0x00,0x00, // 'y'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'z'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x1C,0x00,0x1C,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '{'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '|'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x01,0xC0,0x01,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '}'
+ // 126
+ 0x00,0x00,0x00,0x00,0x3C,0x30,0x66,0x30,0x63,0x30,0x63,0x30,0x61,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '~'
+ // 128
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x03,0x18,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xFF,0xF0,0x60,0x00,0x60,0x00,0xFF,0x80,0x18,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x01,0x84,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '€'
+ // 139
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '‹'
+ // 155
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x03,0x00,0x01,0x80,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x30,0x00,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '›'
+ // 160
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' '
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¡'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x1B,0x60,0x33,0x30,0x33,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x33,0x00,0x33,0x30,0x1B,0x60,0x0F,0xC0,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¢'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0xC0,0x18,0x60,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x3F,0x80,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x30,0x38,0x30,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '£'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x30,0x30,0x1F,0xE0,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x1F,0xE0,0x30,0x30,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¤'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x30,0x30,0x30,0x30,0x18,0x60,0x18,0x60,0x0C,0xC0,0x0C,0xC0,0x07,0x80,0x03,0x00,0x03,0x00,0x3F,0xF0,0x03,0x00,0x03,0x00,0x3F,0xF0,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¥'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¦'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0xC0,0x18,0x60,0x18,0x00,0x1C,0x00,0x0F,0x00,0x0D,0x80,0x18,0xC0,0x18,0x60,0x18,0x60,0x18,0x60,0x18,0x60,0x0C,0x60,0x06,0xC0,0x03,0xC0,0x00,0xE0,0x00,0x60,0x18,0x60,0x0C,0xC0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '§'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¨'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x60,0x30,0xCF,0x98,0xD8,0xD8,0xD8,0xD8,0xD8,0x18,0xD8,0x18,0xD8,0x18,0xD8,0x18,0xD8,0xD8,0xD8,0xD8,0xCF,0x98,0x60,0x30,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '©'
+ 0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x0F,0xF0,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x30,0x0F,0xF0,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ª'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x98,0x03,0x30,0x06,0x60,0x0C,0xC0,0x19,0x80,0x33,0x00,0x66,0x00,0x33,0x00,0x19,0x80,0x0C,0xC0,0x06,0x60,0x03,0x30,0x01,0x98,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '«'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¬'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ''
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xE0,0x60,0x30,0xDF,0x98,0xD8,0xD8,0xD8,0xD8,0xD8,0xD8,0xD8,0xD8,0xDF,0x98,0xDE,0x18,0xDB,0x18,0xD9,0x98,0xD8,0xD8,0x60,0x30,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '®'
+ 0x00,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¯'
+ 0x00,0x00,0x00,0x00,0x0F,0x80,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '°'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x7F,0xF8,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '±'
+ 0x00,0x00,0x00,0x00,0x0F,0x80,0x18,0xC0,0x18,0xC0,0x01,0x80,0x03,0x00,0x06,0x00,0x0C,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '²'
+ 0x00,0x00,0x00,0x00,0x0F,0x80,0x18,0xC0,0x00,0xC0,0x07,0x80,0x00,0xC0,0x00,0xC0,0x18,0xC0,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '³'
+ 0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '´'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x70,0x60,0xF0,0x61,0xB0,0x7F,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00, // 'µ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x63,0x18,0x3F,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¶'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '·'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x00,0x00, // '¸'
+ 0x00,0x00,0x00,0x00,0x03,0x00,0x07,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¹'
+ 0x00,0x00,0x0F,0xC0,0x18,0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x60,0x0F,0xC0,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'º'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x00,0x33,0x00,0x19,0x80,0x0C,0xC0,0x06,0x60,0x03,0x30,0x01,0x98,0x03,0x30,0x06,0x60,0x0C,0xC0,0x19,0x80,0x33,0x00,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '»'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x1C,0x00,0x3C,0x00,0x0C,0x00,0x0C,0x10,0x0C,0x30,0x0C,0x60,0x0C,0xC0,0x01,0x80,0x03,0x30,0x06,0x70,0x0C,0xF0,0x19,0xB0,0x33,0x30,0x66,0x30,0x47,0xF0,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¼'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x38,0x00,0x78,0x10,0x18,0x30,0x18,0x60,0x18,0xC0,0x19,0x80,0x1B,0x00,0x06,0x00,0x0C,0x00,0x1B,0xE0,0x36,0x30,0x66,0x30,0x40,0x60,0x00,0xC0,0x01,0x80,0x03,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '½'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x03,0x00,0x1E,0x00,0x03,0x08,0x03,0x18,0x63,0x30,0x3E,0x60,0x00,0xC0,0x01,0x98,0x03,0x38,0x06,0x78,0x0C,0xD8,0x19,0x98,0x33,0x18,0x63,0xF8,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¾'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '¿'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'À'
+ 0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Á'
+ 0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Â'
+ 0x1C,0x60,0x37,0x60,0x31,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ã'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ä'
+ 0x07,0x80,0x0C,0xC0,0x0C,0xC0,0x07,0x80,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Å'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF8,0x63,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xFF,0xF0,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Æ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x00,0x00, // 'Ç'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'È'
+ 0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'É'
+ 0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ê'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x80,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ë'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ì'
+ 0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x0F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Í'
+ 0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x0F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Î'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x0F,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ï'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x61,0xC0,0x60,0x60,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0xFE,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x60,0x60,0x61,0xC0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ð'
+ 0x1C,0x60,0x37,0x60,0x31,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x70,0x30,0x78,0x30,0x6C,0x30,0x66,0x30,0x63,0x30,0x61,0xB0,0x60,0xF0,0x60,0x70,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ñ'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ò'
+ 0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ó'
+ 0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ô'
+ 0x1C,0x60,0x37,0x60,0x31,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Õ'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ö'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x18,0x30,0x30,0x18,0x60,0x0C,0xC0,0x07,0x80,0x03,0x00,0x07,0x80,0x0C,0xC0,0x18,0x60,0x30,0x30,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '×'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x38,0x60,0x30,0x60,0x70,0x60,0xF0,0x61,0xB0,0x63,0x30,0x66,0x30,0x6C,0x30,0x78,0x30,0x70,0x30,0x60,0x30,0xE0,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ø'
+ 0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ù'
+ 0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ú'
+ 0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Û'
+ 0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ü'
+ 0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x60,0x18,0x60,0x18,0x30,0x30,0x30,0x30,0x18,0x60,0x18,0x60,0x0C,0xC0,0x0C,0xC0,0x07,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Ý'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'Þ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x60,0xC0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0xC0,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x70,0x30,0x6C,0x60,0x67,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ß'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'à'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'á'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'â'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x60,0x37,0x60,0x31,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ã'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ä'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x0C,0xC0,0x0C,0xC0,0x07,0x80,0x1F,0xC0,0x00,0x60,0x00,0x30,0x00,0x30,0x1F,0xF0,0x30,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'å'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7D,0xE0,0x07,0x30,0x03,0x18,0x03,0x18,0x03,0x18,0x3F,0x18,0x63,0xF8,0xC3,0x00,0xC3,0x00,0xC3,0x00,0xC3,0x00,0x63,0x98,0x3E,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'æ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x30,0x30,0x60,0x1F,0xC0,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x00,0x00, // 'ç'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'è'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'é'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ê'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x7F,0xF0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x30,0x30,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ë'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ì'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'í'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'î'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ï'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x80,0x0F,0x00,0x1E,0x00,0x33,0x00,0x01,0x80,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ð'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x60,0x66,0x60,0x63,0xC0,0x00,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ñ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ò'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ó'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ô'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x60,0x37,0x60,0x31,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'õ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x1F,0xC0,0x30,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x60,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ö'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '÷'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xD8,0x30,0x78,0x60,0x70,0x60,0xF0,0x61,0xB0,0x63,0x30,0x66,0x30,0x6C,0x30,0x78,0x30,0x70,0x30,0x60,0x30,0xF0,0x60,0xDF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ø'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ù'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ú'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x0D,0x80,0x18,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'û'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 'ü'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x3F,0xC0,0x00,0x00, // 'ý'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0xC0,0x60,0x60,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x60,0x7F,0xC0,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00, // 'þ'
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x00,0x00,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x60,0x30,0x30,0x30,0x1F,0xF0,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x60,0x3F,0xC0,0x00,0x00, // 'ÿ'
+};
+
+const int16_t TerminusBigCharOffsets[] = {
+ // 32
+ 0,56,112,168, // 35
+ 224,280,336,392,448, // 40
+ 504,560,616,672,728, // 50
+ 784,840,896,952,1008, // 55
+ 1064,1120,1176,1232,1288, // 60
+ 1344,1400,1456,1512,1568, // 65
+ 1624,1680,1736,1792,1848, // 70
+ 1904,1960,2016,2072,2128, // 75
+ 2184,2240,2296,2352,2408, // 80
+ 2464,2520,2576,2632,2688, // 85
+ 2744,2800,2856,2912,2968, // 90
+ 3024,3080,3136,3192,3248, // 95
+ 3304,3360,3416,3472,3528, // 100
+ 3584,3640,3696,3752,3808, // 105
+ 3864,3920,3976,4032,4088, // 110
+ 4144,4200,4256,4312,4368, // 115
+ 4424,4480,4536,4592,4648, // 120
+ 4704,4760,4816,4872,4928, // 125
+ 4984, // 126
+ -1, // 127
+ 5040, // 128
+ -1,-1, // 130
+ -1, -1, -1, -1, -1, -1, -1, -1, // 138
+ 5096, // 139
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // 150
+ -1, -1, -1, -1, // 154
+ 5152, // 155
+ -1, -1, -1, -1, // 159
+ 5208, // 160
+ 5264,5320,5376,5432,5488, // 165
+ 5544,5600,5656,5712,5768, // 170
+ 5824,5880,5936,5992,6048, // 175
+ 6104,6160,6216,6272,6328, // 180
+ 6384,6440,6496,6552,6608, // 185
+ 6664,6720,6776,6832,6888, // 190
+ 6944,7000,7056,7112,7168, // 195
+ 7224,7280,7336,7392,7448, // 200
+ 7504,7560,7616,7672,7728, // 205
+ 7784,7840,7896,7952,8008, // 210
+ 8064,8120,8176,8232,8288, // 215
+ 8344,8400,8456,8512,8568, // 220
+ 8624,8680,8736,8792,8848, // 225
+ 8904,8960,9016,9072,9128, // 230
+ 9184,9240,9296,9352,9408, // 235
+ 9464,9520,9576,9632,9688, // 240
+ 9744,9800,9856,9912,9968, // 245
+ 10024,10080,10136,10192,10248, // 250
+ 10304,10360,10416,10472,10528, // 255
+};
+
+const font_t TerminusBigFont = {
+ .Offset = 32,
+ .Width = 16,
+ .Height = 28,
+ .Position = TerminusBigCharOffsets,
+ .Data = TerminusBigFontBitmaps
+};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/terminus.h Tue May 12 19:13:04 2015 +0000
@@ -0,0 +1,55 @@
+/** \file terminus.h
+ * \brief Terminus fontrs for mbed TFTLCDD library
+ * \version 0.1
+ * \copyright GNU Public License, v2.
+ *
+ * This header provides 2 fixed-width fonts, both based on the
+ * free Terminus font. The smaller font is 8x12 pixels, and
+ * the big one is
+ *
+ * Copyright (C)2012 Todor Todorov.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to:
+ *
+ * Free Software Foundation, Inc.
+ * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
+ *
+ *********************************************************************/
+
+ #ifndef TFTLCD_TERMINUS_H
+ #define TFTLCD_TERMINUS_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct FontMetrics_struct
+{
+ uint8_t Offset;
+ uint8_t Width;
+ uint8_t Height;
+ const int16_t* Position;
+ const char* Data;
+} font_t;
+
+extern const font_t TerminusFont;
+
+extern const font_t TerminusBigFont;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TFTLCD_TERMINUS_H */