First project for DISCO_F746NG board

Dependents:   DISCO-F746NG_rtos_test EmbedSDE

Files at this revision

API Documentation at this revision

Comitter:
TuxLeon
Date:
Sun Feb 11 18:33:41 2018 +0000
Commit message:
first commit;

Changed in this revision

font12.c Show annotated file Show diff for this revision Revisions of this file
font16.c Show annotated file Show diff for this revision Revisions of this file
font20.c Show annotated file Show diff for this revision Revisions of this file
font24.c Show annotated file Show diff for this revision Revisions of this file
font8.c Show annotated file Show diff for this revision Revisions of this file
fonts.h Show annotated file Show diff for this revision Revisions of this file
ft5336.c Show annotated file Show diff for this revision Revisions of this file
ft5336.h Show annotated file Show diff for this revision Revisions of this file
rk043fn48h.h Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery.c Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery.h Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_lcd.c Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_lcd.h Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_sdram.c Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_sdram.h Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_ts.c Show annotated file Show diff for this revision Revisions of this file
stm32746g_discovery_ts.h Show annotated file Show diff for this revision Revisions of this file
ts.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 99b5a7505a7a font12.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font12.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,1464 @@
+/**
+  ******************************************************************************
+  * @file    Font12.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   This file provides text Font12 for STM32xx-EVAL's LCD driver. 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @brief      This file provides text Font12 for STM32xx-EVAL's LCD driver.
+  * @{
+  */  
+
+/** @defgroup FONTS_Private_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */ 
+  
+
+/** @defgroup FONTS_Private_Variables
+  * @{
+  */
+// 
+//  Font data for Courier New 12pt
+// 
+
+const uint8_t Font12_Table[] = 
+{
+	// @0 ' ' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @12 '!' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @24 '"' (7 pixels wide)
+	0x00, //        
+	0x6C, //  ## ## 
+	0x48, //  #  #  
+	0x48, //  #  #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @36 '#' (7 pixels wide)
+	0x00, //        
+	0x14, //    # # 
+	0x14, //    # # 
+	0x28, //   # #  
+	0x7C, //  ##### 
+	0x28, //   # #  
+	0x7C, //  ##### 
+	0x28, //   # #  
+	0x50, //  # #   
+	0x50, //  # #   
+	0x00, //        
+	0x00, //        
+
+	// @48 '$' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x38, //   ###  
+	0x40, //  #     
+	0x40, //  #     
+	0x38, //   ###  
+	0x48, //  #  #  
+	0x70, //  ###   
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+
+	// @60 '%' (7 pixels wide)
+	0x00, //        
+	0x20, //   #    
+	0x50, //  # #   
+	0x20, //   #    
+	0x0C, //     ## 
+	0x70, //  ###   
+	0x08, //     #  
+	0x14, //    # # 
+	0x08, //     #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @72 '&' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x18, //    ##  
+	0x20, //   #    
+	0x20, //   #    
+	0x54, //  # # # 
+	0x48, //  #  #  
+	0x34, //   ## # 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @84 ''' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @96 '(' (7 pixels wide)
+	0x00, //        
+	0x08, //     #  
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x08, //     #  
+	0x08, //     #  
+	0x00, //        
+
+	// @108 ')' (7 pixels wide)
+	0x00, //        
+	0x20, //   #    
+	0x20, //   #    
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x20, //   #    
+	0x20, //   #    
+	0x00, //        
+
+	// @120 '*' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x7C, //  ##### 
+	0x10, //    #   
+	0x28, //   # #  
+	0x28, //   # #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @132 '+' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0xFE, // #######
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @144 ',' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x18, //    ##  
+	0x10, //    #   
+	0x30, //   ##   
+	0x20, //   #    
+	0x00, //        
+
+	// @156 '-' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @168 '.' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x30, //   ##   
+	0x30, //   ##   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @180 '/' (7 pixels wide)
+	0x00, //        
+	0x04, //      # 
+	0x04, //      # 
+	0x08, //     #  
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x20, //   #    
+	0x20, //   #    
+	0x40, //  #     
+	0x00, //        
+	0x00, //        
+
+	// @192 '0' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @204 '1' (7 pixels wide)
+	0x00, //        
+	0x30, //   ##   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @216 '2' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x04, //      # 
+	0x08, //     #  
+	0x10, //    #   
+	0x20, //   #    
+	0x44, //  #   # 
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @228 '3' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x04, //      # 
+	0x18, //    ##  
+	0x04, //      # 
+	0x04, //      # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @240 '4' (7 pixels wide)
+	0x00, //        
+	0x0C, //     ## 
+	0x14, //    # # 
+	0x14, //    # # 
+	0x24, //   #  # 
+	0x44, //  #   # 
+	0x7E, //  ######
+	0x04, //      # 
+	0x0E, //     ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @252 '5' (7 pixels wide)
+	0x00, //        
+	0x3C, //   #### 
+	0x20, //   #    
+	0x20, //   #    
+	0x38, //   ###  
+	0x04, //      # 
+	0x04, //      # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @264 '6' (7 pixels wide)
+	0x00, //        
+	0x1C, //    ### 
+	0x20, //   #    
+	0x40, //  #     
+	0x78, //  ####  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @276 '7' (7 pixels wide)
+	0x00, //        
+	0x7C, //  ##### 
+	0x44, //  #   # 
+	0x04, //      # 
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @288 '8' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @300 '9' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x3C, //   #### 
+	0x04, //      # 
+	0x08, //     #  
+	0x70, //  ###   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @312 ':' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x30, //   ##   
+	0x30, //   ##   
+	0x00, //        
+	0x00, //        
+	0x30, //   ##   
+	0x30, //   ##   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @324 ';' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x18, //    ##  
+	0x18, //    ##  
+	0x00, //        
+	0x00, //        
+	0x18, //    ##  
+	0x30, //   ##   
+	0x20, //   #    
+	0x00, //        
+	0x00, //        
+
+	// @336 '<' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x0C, //     ## 
+	0x10, //    #   
+	0x60, //  ##    
+	0x80, // #      
+	0x60, //  ##    
+	0x10, //    #   
+	0x0C, //     ## 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @348 '=' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x7C, //  ##### 
+	0x00, //        
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @360 '>' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0xC0, // ##     
+	0x20, //   #    
+	0x18, //    ##  
+	0x04, //      # 
+	0x18, //    ##  
+	0x20, //   #    
+	0xC0, // ##     
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @372 '?' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x18, //    ##  
+	0x24, //   #  # 
+	0x04, //      # 
+	0x08, //     #  
+	0x10, //    #   
+	0x00, //        
+	0x30, //   ##   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @384 '@' (7 pixels wide)
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x4C, //  #  ## 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x4C, //  #  ## 
+	0x40, //  #     
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+
+	// @396 'A' (7 pixels wide)
+	0x00, //        
+	0x30, //   ##   
+	0x10, //    #   
+	0x28, //   # #  
+	0x28, //   # #  
+	0x28, //   # #  
+	0x7C, //  ##### 
+	0x44, //  #   # 
+	0xEE, // ### ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @408 'B' (7 pixels wide)
+	0x00, //        
+	0xF8, // #####  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x78, //  ####  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xF8, // #####  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @420 'C' (7 pixels wide)
+	0x00, //        
+	0x3C, //   #### 
+	0x44, //  #   # 
+	0x40, //  #     
+	0x40, //  #     
+	0x40, //  #     
+	0x40, //  #     
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @432 'D' (7 pixels wide)
+	0x00, //        
+	0xF0, // ####   
+	0x48, //  #  #  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x48, //  #  #  
+	0xF0, // ####   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @444 'E' (7 pixels wide)
+	0x00, //        
+	0xFC, // ###### 
+	0x44, //  #   # 
+	0x50, //  # #   
+	0x70, //  ###   
+	0x50, //  # #   
+	0x40, //  #     
+	0x44, //  #   # 
+	0xFC, // ###### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @456 'F' (7 pixels wide)
+	0x00, //        
+	0x7E, //  ######
+	0x22, //   #   #
+	0x28, //   # #  
+	0x38, //   ###  
+	0x28, //   # #  
+	0x20, //   #    
+	0x20, //   #    
+	0x70, //  ###   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @468 'G' (7 pixels wide)
+	0x00, //        
+	0x3C, //   #### 
+	0x44, //  #   # 
+	0x40, //  #     
+	0x40, //  #     
+	0x4E, //  #  ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @480 'H' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x7C, //  ##### 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xEE, // ### ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @492 'I' (7 pixels wide)
+	0x00, //        
+	0x7C, //  ##### 
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @504 'J' (7 pixels wide)
+	0x00, //        
+	0x3C, //   #### 
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x48, //  #  #  
+	0x48, //  #  #  
+	0x48, //  #  #  
+	0x30, //   ##   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @516 'K' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x48, //  #  #  
+	0x50, //  # #   
+	0x70, //  ###   
+	0x48, //  #  #  
+	0x44, //  #   # 
+	0xE6, // ###  ##
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @528 'L' (7 pixels wide)
+	0x00, //        
+	0x70, //  ###   
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x24, //   #  # 
+	0x24, //   #  # 
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @540 'M' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x6C, //  ## ## 
+	0x6C, //  ## ## 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xEE, // ### ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @552 'N' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x64, //  ##  # 
+	0x64, //  ##  # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x4C, //  #  ## 
+	0xEC, // ### ## 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @564 'O' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @576 'P' (7 pixels wide)
+	0x00, //        
+	0x78, //  ####  
+	0x24, //   #  # 
+	0x24, //   #  # 
+	0x24, //   #  # 
+	0x38, //   ###  
+	0x20, //   #    
+	0x20, //   #    
+	0x70, //  ###   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @588 'Q' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x1C, //    ### 
+	0x00, //        
+	0x00, //        
+
+	// @600 'R' (7 pixels wide)
+	0x00, //        
+	0xF8, // #####  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x78, //  ####  
+	0x48, //  #  #  
+	0x44, //  #   # 
+	0xE2, // ###   #
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @612 'S' (7 pixels wide)
+	0x00, //        
+	0x34, //   ## # 
+	0x4C, //  #  ## 
+	0x40, //  #     
+	0x38, //   ###  
+	0x04, //      # 
+	0x04, //      # 
+	0x64, //  ##  # 
+	0x58, //  # ##  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @624 'T' (7 pixels wide)
+	0x00, //        
+	0xFE, // #######
+	0x92, // #  #  #
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @636 'U' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @648 'V' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x28, //   # #  
+	0x28, //   # #  
+	0x28, //   # #  
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @660 'W' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x28, //   # #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @672 'X' (7 pixels wide)
+	0x00, //        
+	0xC6, // ##   ##
+	0x44, //  #   # 
+	0x28, //   # #  
+	0x10, //    #   
+	0x10, //    #   
+	0x28, //   # #  
+	0x44, //  #   # 
+	0xC6, // ##   ##
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @684 'Y' (7 pixels wide)
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x28, //   # #  
+	0x28, //   # #  
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @696 'Z' (7 pixels wide)
+	0x00, //        
+	0x7C, //  ##### 
+	0x44, //  #   # 
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x20, //   #    
+	0x44, //  #   # 
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @708 '[' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x38, //   ###  
+	0x00, //        
+
+	// @720 '\' (7 pixels wide)
+	0x00, //        
+	0x40, //  #     
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x10, //    #   
+	0x10, //    #   
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x00, //        
+	0x00, //        
+
+	// @732 ']' (7 pixels wide)
+	0x00, //        
+	0x38, //   ###  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x38, //   ###  
+	0x00, //        
+
+	// @744 '^' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x10, //    #   
+	0x28, //   # #  
+	0x44, //  #   # 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @756 '_' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xFE, // #######
+
+	// @768 '`' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x08, //     #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @780 'a' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x3C, //   #### 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x3E, //   #####
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @792 'b' (7 pixels wide)
+	0x00, //        
+	0xC0, // ##     
+	0x40, //  #     
+	0x58, //  # ##  
+	0x64, //  ##  # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xF8, // #####  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @804 'c' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x3C, //   #### 
+	0x44, //  #   # 
+	0x40, //  #     
+	0x40, //  #     
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @816 'd' (7 pixels wide)
+	0x00, //        
+	0x0C, //     ## 
+	0x04, //      # 
+	0x34, //   ## # 
+	0x4C, //  #  ## 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x3E, //   #####
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @828 'e' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x7C, //  ##### 
+	0x40, //  #     
+	0x40, //  #     
+	0x3C, //   #### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @840 'f' (7 pixels wide)
+	0x00, //        
+	0x1C, //    ### 
+	0x20, //   #    
+	0x7C, //  ##### 
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @852 'g' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x36, //   ## ##
+	0x4C, //  #  ## 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x3C, //   #### 
+	0x04, //      # 
+	0x38, //   ###  
+	0x00, //        
+
+	// @864 'h' (7 pixels wide)
+	0x00, //        
+	0xC0, // ##     
+	0x40, //  #     
+	0x58, //  # ##  
+	0x64, //  ##  # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xEE, // ### ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @876 'i' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x00, //        
+	0x70, //  ###   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @888 'j' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x00, //        
+	0x78, //  ####  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x08, //     #  
+	0x70, //  ###   
+	0x00, //        
+
+	// @900 'k' (7 pixels wide)
+	0x00, //        
+	0xC0, // ##     
+	0x40, //  #     
+	0x5C, //  # ### 
+	0x48, //  #  #  
+	0x70, //  ###   
+	0x50, //  # #   
+	0x48, //  #  #  
+	0xDC, // ## ### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @912 'l' (7 pixels wide)
+	0x00, //        
+	0x30, //   ##   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @924 'm' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xE8, // ### #  
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0xFE, // #######
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @936 'n' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xD8, // ## ##  
+	0x64, //  ##  # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0xEE, // ### ###
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @948 'o' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x38, //   ###  
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @960 'p' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xD8, // ## ##  
+	0x64, //  ##  # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x78, //  ####  
+	0x40, //  #     
+	0xE0, // ###    
+	0x00, //        
+
+	// @972 'q' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x36, //   ## ##
+	0x4C, //  #  ## 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x3C, //   #### 
+	0x04, //      # 
+	0x0E, //     ###
+	0x00, //        
+
+	// @984 'r' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x6C, //  ## ## 
+	0x30, //   ##   
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @996 's' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x3C, //   #### 
+	0x44, //  #   # 
+	0x38, //   ###  
+	0x04, //      # 
+	0x44, //  #   # 
+	0x78, //  ####  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1008 't' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x20, //   #    
+	0x7C, //  ##### 
+	0x20, //   #    
+	0x20, //   #    
+	0x20, //   #    
+	0x22, //   #   #
+	0x1C, //    ### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1020 'u' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xCC, // ##  ## 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x4C, //  #  ## 
+	0x36, //   ## ##
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1032 'v' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x44, //  #   # 
+	0x28, //   # #  
+	0x28, //   # #  
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1044 'w' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x54, //  # # # 
+	0x28, //   # #  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1056 'x' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xCC, // ##  ## 
+	0x48, //  #  #  
+	0x30, //   ##   
+	0x30, //   ##   
+	0x48, //  #  #  
+	0xCC, // ##  ## 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1068 'y' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0xEE, // ### ###
+	0x44, //  #   # 
+	0x24, //   #  # 
+	0x28, //   # #  
+	0x18, //    ##  
+	0x10, //    #   
+	0x10, //    #   
+	0x78, //  ####  
+	0x00, //        
+
+	// @1080 'z' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x7C, //  ##### 
+	0x48, //  #  #  
+	0x10, //    #   
+	0x20, //   #    
+	0x44, //  #   # 
+	0x7C, //  ##### 
+	0x00, //        
+	0x00, //        
+	0x00, //        
+
+	// @1092 '{' (7 pixels wide)
+	0x00, //        
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x20, //   #    
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x08, //     #  
+	0x00, //        
+
+	// @1104 '|' (7 pixels wide)
+	0x00, //        
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x00, //        
+	0x00, //        
+
+	// @1116 '}' (7 pixels wide)
+	0x00, //        
+	0x20, //   #    
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x08, //     #  
+	0x10, //    #   
+	0x10, //    #   
+	0x10, //    #   
+	0x20, //   #    
+	0x00, //        
+
+	// @1128 '~' (7 pixels wide)
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x24, //   #  # 
+	0x58, //  # ##  
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+	0x00, //        
+};
+
+sFONT Font12 = {
+  Font12_Table,
+  7, /* Width */
+  12, /* Height */
+};
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Functions
+  * @{
+  */
+    
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a font16.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font16.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,1844 @@
+/**
+  ******************************************************************************
+  * @file    font16.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   This file provides text font16 for STM32xx-EVAL's LCD driver. 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @brief      This file provides text font16 for STM32xx-EVAL's LCD driver.
+  * @{
+  */  
+
+/** @defgroup FONTS_Private_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */ 
+  
+
+/** @defgroup FONTS_Private_Variables
+  * @{
+  */
+// 
+//  Font data for Courier New 12pt
+// 
+
+const uint8_t Font16_Table[] = 
+{
+	// @0 ' ' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @32 '!' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @64 '"' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1D, 0xC0, //    ### ### 
+	0x1D, 0xC0, //    ### ### 
+	0x08, 0x80, //     #   #  
+	0x08, 0x80, //     #   #  
+	0x08, 0x80, //     #   #  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @96 '#' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0D, 0x80, //     ## ##  
+	0x0D, 0x80, //     ## ##  
+	0x0D, 0x80, //     ## ##  
+	0x0D, 0x80, //     ## ##  
+	0x3F, 0xC0, //   ######## 
+	0x1B, 0x00, //    ## ##   
+	0x3F, 0xC0, //   ######## 
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @128 '$' (11 pixels wide)
+	0x04, 0x00, //      #     
+	0x1F, 0x80, //    ######  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x38, 0x00, //   ###      
+	0x1E, 0x00, //    ####    
+	0x0F, 0x00, //     ####   
+	0x03, 0x80, //       ###  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x00, //   ######   
+	0x04, 0x00, //      #     
+	0x04, 0x00, //      #     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @160 '%' (11 pixels wide)
+	0x00, 0x00, //            
+	0x18, 0x00, //    ##      
+	0x24, 0x00, //   #  #     
+	0x24, 0x00, //   #  #     
+	0x18, 0xC0, //    ##   ## 
+	0x07, 0x80, //      ####  
+	0x1E, 0x00, //    ####    
+	0x31, 0x80, //   ##   ##  
+	0x02, 0x40, //       #  # 
+	0x02, 0x40, //       #  # 
+	0x01, 0x80, //        ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @192 '&' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x0F, 0x00, //     ####   
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x0C, 0x00, //     ##     
+	0x1D, 0x80, //    ### ##  
+	0x37, 0x00, //   ## ###   
+	0x33, 0x00, //   ##  ##   
+	0x1D, 0x80, //    ### ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @224 ''' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x07, 0x00, //      ###   
+	0x07, 0x00, //      ###   
+	0x02, 0x00, //       #    
+	0x02, 0x00, //       #    
+	0x02, 0x00, //       #    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @256 '(' (11 pixels wide)
+	0x00, 0x00, //            
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x06, 0x00, //      ##    
+	0x0E, 0x00, //     ###    
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0E, 0x00, //     ###    
+	0x06, 0x00, //      ##    
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @288 ')' (11 pixels wide)
+	0x00, 0x00, //            
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x0C, 0x00, //     ##     
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x1C, 0x00, //    ###     
+	0x18, 0x00, //    ##      
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @320 '*' (11 pixels wide)
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x3F, 0xC0, //   ######## 
+	0x3F, 0xC0, //   ######## 
+	0x0F, 0x00, //     ####   
+	0x1F, 0x80, //    ######  
+	0x19, 0x80, //    ##  ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @352 '+' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x04, 0x00, //      #     
+	0x04, 0x00, //      #     
+	0x04, 0x00, //      #     
+	0x3F, 0x80, //   #######  
+	0x04, 0x00, //      #     
+	0x04, 0x00, //      #     
+	0x04, 0x00, //      #     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @384 ',' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x04, 0x00, //      #     
+	0x0C, 0x00, //     ##     
+	0x08, 0x00, //     #      
+	0x08, 0x00, //     #      
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @416 '-' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x3F, 0x80, //   #######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @448 '.' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @480 '/' (11 pixels wide)
+	0x00, 0xC0, //         ## 
+	0x00, 0xC0, //         ## 
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @512 '0' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0E, 0x00, //     ###    
+	0x1B, 0x00, //    ## ##   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1B, 0x00, //    ## ##   
+	0x0E, 0x00, //     ###    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @544 '1' (11 pixels wide)
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x3E, 0x00, //   #####    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x3F, 0xC0, //   ######## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @576 '2' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0F, 0x00, //     ####   
+	0x19, 0x80, //    ##  ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x03, 0x00, //       ##   
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x18, 0x00, //    ##      
+	0x30, 0x00, //   ##       
+	0x3F, 0x80, //   #######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @608 '3' (11 pixels wide)
+	0x00, 0x00, //            
+	0x3F, 0x00, //   ######   
+	0x61, 0x80, //  ##    ##  
+	0x01, 0x80, //        ##  
+	0x03, 0x00, //       ##   
+	0x1F, 0x00, //    #####   
+	0x03, 0x80, //       ###  
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x61, 0x80, //  ##    ##  
+	0x3F, 0x00, //   ######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @640 '4' (11 pixels wide)
+	0x00, 0x00, //            
+	0x07, 0x00, //      ###   
+	0x07, 0x00, //      ###   
+	0x0F, 0x00, //     ####   
+	0x0B, 0x00, //     # ##   
+	0x1B, 0x00, //    ## ##   
+	0x13, 0x00, //    #  ##   
+	0x33, 0x00, //   ##  ##   
+	0x3F, 0x80, //   #######  
+	0x03, 0x00, //       ##   
+	0x0F, 0x80, //     #####  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @672 '5' (11 pixels wide)
+	0x00, 0x00, //            
+	0x1F, 0x80, //    ######  
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x1F, 0x00, //    #####   
+	0x11, 0x80, //    #   ##  
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x21, 0x80, //   #    ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @704 '6' (11 pixels wide)
+	0x00, 0x00, //            
+	0x07, 0x80, //      ####  
+	0x1C, 0x00, //    ###     
+	0x18, 0x00, //    ##      
+	0x30, 0x00, //   ##       
+	0x37, 0x00, //   ## ###   
+	0x39, 0x80, //   ###  ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x19, 0x80, //    ##  ##  
+	0x0F, 0x00, //     ####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @736 '7' (11 pixels wide)
+	0x00, 0x00, //            
+	0x7F, 0x00, //  #######   
+	0x43, 0x00, //  #    ##   
+	0x03, 0x00, //       ##   
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @768 '8' (11 pixels wide)
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @800 '9' (11 pixels wide)
+	0x00, 0x00, //            
+	0x1E, 0x00, //    ####    
+	0x33, 0x00, //   ##  ##   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0x80, //    ### ##  
+	0x01, 0x80, //        ##  
+	0x03, 0x00, //       ##   
+	0x07, 0x00, //      ###   
+	0x3C, 0x00, //   ####     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @832 ':' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @864 ';' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x04, 0x00, //      #     
+	0x08, 0x00, //     #      
+	0x08, 0x00, //     #      
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @896 '<' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0xC0, //         ## 
+	0x03, 0x00, //       ##   
+	0x04, 0x00, //      #     
+	0x18, 0x00, //    ##      
+	0x60, 0x00, //  ##        
+	0x18, 0x00, //    ##      
+	0x04, 0x00, //      #     
+	0x03, 0x00, //       ##   
+	0x00, 0xC0, //         ## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @928 '=' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0xC0, //  ######### 
+	0x00, 0x00, //            
+	0x7F, 0xC0, //  ######### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @960 '>' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x60, 0x00, //  ##        
+	0x18, 0x00, //    ##      
+	0x04, 0x00, //      #     
+	0x03, 0x00, //       ##   
+	0x00, 0xC0, //         ## 
+	0x03, 0x00, //       ##   
+	0x04, 0x00, //      #     
+	0x18, 0x00, //    ##      
+	0x60, 0x00, //  ##        
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @992 '?' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x01, 0x80, //        ##  
+	0x07, 0x00, //      ###   
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1024 '@' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0E, 0x00, //     ###    
+	0x11, 0x00, //    #   #   
+	0x21, 0x00, //   #    #   
+	0x21, 0x00, //   #    #   
+	0x27, 0x00, //   #  ###   
+	0x29, 0x00, //   # #  #   
+	0x29, 0x00, //   # #  #   
+	0x27, 0x00, //   #  ###   
+	0x20, 0x00, //   #        
+	0x11, 0x00, //    #   #   
+	0x0E, 0x00, //     ###    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1056 'A' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x3F, 0x00, //   ######   
+	0x0F, 0x00, //     ####   
+	0x09, 0x00, //     #  #   
+	0x19, 0x80, //    ##  ##  
+	0x19, 0x80, //    ##  ##  
+	0x1F, 0x80, //    ######  
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x79, 0xE0, //  ####  ####
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1088 'B' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x00, //  #######   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x00, //   ######   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x7F, 0x00, //  #######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1120 'C' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x40, //    ##### # 
+	0x30, 0xC0, //   ##    ## 
+	0x60, 0x40, //  ##      # 
+	0x60, 0x00, //  ##        
+	0x60, 0x00, //  ##        
+	0x60, 0x00, //  ##        
+	0x60, 0x40, //  ##      # 
+	0x30, 0x80, //   ##    #  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1152 'D' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x00, //  #######   
+	0x31, 0x80, //   ##   ##  
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x31, 0x80, //   ##   ##  
+	0x7F, 0x00, //  #######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1184 'E' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x80, //  ########  
+	0x30, 0x80, //   ##    #  
+	0x30, 0x80, //   ##    #  
+	0x32, 0x00, //   ##  #    
+	0x3E, 0x00, //   #####    
+	0x32, 0x00, //   ##  #    
+	0x30, 0x80, //   ##    #  
+	0x30, 0x80, //   ##    #  
+	0x7F, 0x80, //  ########  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1216 'F' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0xC0, //  ######### 
+	0x30, 0x40, //   ##     # 
+	0x30, 0x40, //   ##     # 
+	0x32, 0x00, //   ##  #    
+	0x3E, 0x00, //   #####    
+	0x32, 0x00, //   ##  #    
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x7C, 0x00, //  #####     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1248 'G' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1E, 0x80, //    #### #  
+	0x31, 0x80, //   ##   ##  
+	0x60, 0x80, //  ##     #  
+	0x60, 0x00, //  ##        
+	0x60, 0x00, //  ##        
+	0x67, 0xC0, //  ##  ##### 
+	0x61, 0x80, //  ##    ##  
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1280 'H' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x80, //   #######  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x7B, 0xC0, //  #### #### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1312 'I' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x3F, 0xC0, //   ######## 
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x3F, 0xC0, //   ######## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1344 'J' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0xC0, //    ####### 
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x63, 0x00, //  ##   ##   
+	0x63, 0x00, //  ##   ##   
+	0x63, 0x00, //  ##   ##   
+	0x3E, 0x00, //   #####    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1376 'K' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x33, 0x00, //   ##  ##   
+	0x36, 0x00, //   ## ##    
+	0x3C, 0x00, //   ####     
+	0x3E, 0x00, //   #####    
+	0x33, 0x00, //   ##  ##   
+	0x31, 0x80, //   ##   ##  
+	0x79, 0xC0, //  ####  ### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1408 'L' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7E, 0x00, //  ######    
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x40, //    ##    # 
+	0x18, 0x40, //    ##    # 
+	0x18, 0x40, //    ##    # 
+	0x7F, 0xC0, //  ######### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1440 'M' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0xE0, 0xE0, // ###     ###
+	0x60, 0xC0, //  ##     ## 
+	0x71, 0xC0, //  ###   ### 
+	0x7B, 0xC0, //  #### #### 
+	0x6A, 0xC0, //  ## # # ## 
+	0x6E, 0xC0, //  ## ### ## 
+	0x64, 0xC0, //  ##  #  ## 
+	0x60, 0xC0, //  ##     ## 
+	0xFB, 0xE0, // ##### #####
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1472 'N' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x73, 0xC0, //  ###  #### 
+	0x31, 0x80, //   ##   ##  
+	0x39, 0x80, //   ###  ##  
+	0x3D, 0x80, //   #### ##  
+	0x35, 0x80, //   ## # ##  
+	0x37, 0x80, //   ## ####  
+	0x33, 0x80, //   ##  ###  
+	0x31, 0x80, //   ##   ##  
+	0x79, 0x80, //  ####  ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1504 'O' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1536 'P' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x00, //  #######   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x00, //   ######   
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x7E, 0x00, //  ######    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1568 'Q' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x0C, 0xC0, //     ##  ## 
+	0x1F, 0x80, //    ######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1600 'R' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x00, //  #######   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3E, 0x00, //   #####    
+	0x33, 0x00, //   ##  ##   
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x7C, 0xE0, //  #####  ###
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1632 'S' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x80, //    ######  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x38, 0x00, //   ###      
+	0x1F, 0x00, //    #####   
+	0x03, 0x80, //       ###  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x00, //   ######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1664 'T' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x80, //  ########  
+	0x4C, 0x80, //  #  ##  #  
+	0x4C, 0x80, //  #  ##  #  
+	0x4C, 0x80, //  #  ##  #  
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x3F, 0x00, //   ######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1696 'U' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1728 'V' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x0A, 0x00, //     # #    
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1760 'W' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0xFB, 0xE0, // ##### #####
+	0x60, 0xC0, //  ##     ## 
+	0x64, 0xC0, //  ##  #  ## 
+	0x6E, 0xC0, //  ## ### ## 
+	0x6E, 0xC0, //  ## ### ## 
+	0x2A, 0x80, //   # # # #  
+	0x3B, 0x80, //   ### ###  
+	0x3B, 0x80, //   ### ###  
+	0x31, 0x80, //   ##   ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1792 'X' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x1B, 0x00, //    ## ##   
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x1B, 0x00, //    ## ##   
+	0x31, 0x80, //   ##   ##  
+	0x7B, 0xC0, //  #### #### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1824 'Y' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x79, 0xE0, //  ####  ####
+	0x30, 0xC0, //   ##    ## 
+	0x19, 0x80, //    ##  ##  
+	0x0F, 0x00, //     ####   
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x1F, 0x80, //    ######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1856 'Z' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x3F, 0x80, //   #######  
+	0x21, 0x80, //   #    ##  
+	0x23, 0x00, //   #   ##   
+	0x06, 0x00, //      ##    
+	0x04, 0x00, //      #     
+	0x0C, 0x00, //     ##     
+	0x18, 0x80, //    ##   #  
+	0x30, 0x80, //   ##    #  
+	0x3F, 0x80, //   #######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1888 '[' (11 pixels wide)
+	0x00, 0x00, //            
+	0x07, 0x80, //      ####  
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x07, 0x80, //      ####  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1920 '\' (11 pixels wide)
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x06, 0x00, //      ##    
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x00, 0xC0, //         ## 
+	0x00, 0xC0, //         ## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1952 ']' (11 pixels wide)
+	0x00, 0x00, //            
+	0x1E, 0x00, //    ####    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x1E, 0x00, //    ####    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @1984 '^' (11 pixels wide)
+	0x04, 0x00, //      #     
+	0x0A, 0x00, //     # #    
+	0x0A, 0x00, //     # #    
+	0x11, 0x00, //    #   #   
+	0x20, 0x80, //   #     #  
+	0x20, 0x80, //   #     #  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2016 '_' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0xFF, 0xE0, // ###########
+
+	// @2048 '`' (11 pixels wide)
+	0x08, 0x00, //     #      
+	0x04, 0x00, //      #     
+	0x02, 0x00, //       #    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2080 'a' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x1F, 0x80, //    ######  
+	0x31, 0x80, //   ##   ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0xC0, //    ### ### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2112 'b' (11 pixels wide)
+	0x00, 0x00, //            
+	0x70, 0x00, //  ###       
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x37, 0x00, //   ## ###   
+	0x39, 0x80, //   ###  ##  
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x39, 0x80, //   ###  ##  
+	0x77, 0x00, //  ### ###   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2144 'c' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1E, 0x80, //    #### #  
+	0x31, 0x80, //   ##   ##  
+	0x60, 0x80, //  ##     #  
+	0x60, 0x00, //  ##        
+	0x60, 0x80, //  ##     #  
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2176 'd' (11 pixels wide)
+	0x00, 0x00, //            
+	0x03, 0x80, //       ###  
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x1D, 0x80, //    ### ##  
+	0x33, 0x80, //   ##  ###  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0xC0, //    ### ### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2208 'e' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x60, 0xC0, //  ##     ## 
+	0x7F, 0xC0, //  ######### 
+	0x60, 0x00, //  ##        
+	0x30, 0xC0, //   ##    ## 
+	0x1F, 0x80, //    ######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2240 'f' (11 pixels wide)
+	0x00, 0x00, //            
+	0x07, 0xE0, //      ######
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x3F, 0x80, //   #######  
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x3F, 0x80, //   #######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2272 'g' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1D, 0xC0, //    ### ### 
+	0x33, 0x80, //   ##  ###  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0x80, //    ### ##  
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2304 'h' (11 pixels wide)
+	0x00, 0x00, //            
+	0x70, 0x00, //  ###       
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x37, 0x00, //   ## ###   
+	0x39, 0x80, //   ###  ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x7B, 0xC0, //  #### #### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2336 'i' (11 pixels wide)
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x00, 0x00, //            
+	0x1E, 0x00, //    ####    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x3F, 0xC0, //   ######## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2368 'j' (11 pixels wide)
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x00, 0x00, //            
+	0x3F, 0x00, //   ######   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x03, 0x00, //       ##   
+	0x3E, 0x00, //   #####    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2400 'k' (11 pixels wide)
+	0x00, 0x00, //            
+	0x70, 0x00, //  ###       
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x37, 0x80, //   ## ####  
+	0x36, 0x00, //   ## ##    
+	0x3C, 0x00, //   ####     
+	0x3C, 0x00, //   ####     
+	0x36, 0x00, //   ## ##    
+	0x33, 0x00, //   ##  ##   
+	0x77, 0xC0, //  ### ##### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2432 'l' (11 pixels wide)
+	0x00, 0x00, //            
+	0x1E, 0x00, //    ####    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x3F, 0xC0, //   ######## 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2464 'm' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7F, 0x80, //  ########  
+	0x36, 0xC0, //   ## ## ## 
+	0x36, 0xC0, //   ## ## ## 
+	0x36, 0xC0, //   ## ## ## 
+	0x36, 0xC0, //   ## ## ## 
+	0x36, 0xC0, //   ## ## ## 
+	0x76, 0xE0, //  ### ## ###
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2496 'n' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x77, 0x00, //  ### ###   
+	0x39, 0x80, //   ###  ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x7B, 0xC0, //  #### #### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2528 'o' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x00, //    #####   
+	0x31, 0x80, //   ##   ##  
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x60, 0xC0, //  ##     ## 
+	0x31, 0x80, //   ##   ##  
+	0x1F, 0x00, //    #####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2560 'p' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x77, 0x00, //  ### ###   
+	0x39, 0x80, //   ###  ##  
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x30, 0xC0, //   ##    ## 
+	0x39, 0x80, //   ###  ##  
+	0x37, 0x00, //   ## ###   
+	0x30, 0x00, //   ##       
+	0x30, 0x00, //   ##       
+	0x7C, 0x00, //  #####     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2592 'q' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1D, 0xC0, //    ### ### 
+	0x33, 0x80, //   ##  ###  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x61, 0x80, //  ##    ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0x80, //    ### ##  
+	0x01, 0x80, //        ##  
+	0x01, 0x80, //        ##  
+	0x07, 0xC0, //      ##### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2624 'r' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0x80, //  #### ###  
+	0x1C, 0xC0, //    ###  ## 
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x7F, 0x00, //  #######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2656 's' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x1F, 0x80, //    ######  
+	0x31, 0x80, //   ##   ##  
+	0x3C, 0x00, //   ####     
+	0x1F, 0x00, //    #####   
+	0x03, 0x80, //       ###  
+	0x31, 0x80, //   ##   ##  
+	0x3F, 0x00, //   ######   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2688 't' (11 pixels wide)
+	0x00, 0x00, //            
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x7F, 0x00, //  #######   
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x00, //    ##      
+	0x18, 0x80, //    ##   #  
+	0x0F, 0x00, //     ####   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2720 'u' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x73, 0x80, //  ###  ###  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x33, 0x80, //   ##  ###  
+	0x1D, 0xC0, //    ### ### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2752 'v' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x31, 0x80, //   ##   ##  
+	0x31, 0x80, //   ##   ##  
+	0x1B, 0x00, //    ## ##   
+	0x1B, 0x00, //    ## ##   
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2784 'w' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0xF1, 0xE0, // ####   ####
+	0x60, 0xC0, //  ##     ## 
+	0x64, 0xC0, //  ##  #  ## 
+	0x6E, 0xC0, //  ## ### ## 
+	0x3B, 0x80, //   ### ###  
+	0x3B, 0x80, //   ### ###  
+	0x31, 0x80, //   ##   ##  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2816 'x' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x7B, 0xC0, //  #### #### 
+	0x1B, 0x00, //    ## ##   
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x0E, 0x00, //     ###    
+	0x1B, 0x00, //    ## ##   
+	0x7B, 0xC0, //  #### #### 
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2848 'y' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x79, 0xE0, //  ####  ####
+	0x30, 0xC0, //   ##    ## 
+	0x19, 0x80, //    ##  ##  
+	0x19, 0x80, //    ##  ##  
+	0x0B, 0x00, //     # ##   
+	0x0F, 0x00, //     ####   
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x3E, 0x00, //   #####    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2880 'z' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x3F, 0x80, //   #######  
+	0x21, 0x80, //   #    ##  
+	0x03, 0x00, //       ##   
+	0x0E, 0x00, //     ###    
+	0x18, 0x00, //    ##      
+	0x30, 0x80, //   ##    #  
+	0x3F, 0x80, //   #######  
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2912 '{' (11 pixels wide)
+	0x00, 0x00, //            
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x18, 0x00, //    ##      
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x0C, 0x00, //     ##     
+	0x06, 0x00, //      ##    
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @2944 '|' (11 pixels wide)
+	0x00, 0x00, //            
+	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, //            
+
+	// @2976 '}' (11 pixels wide)
+	0x00, 0x00, //            
+	0x0C, 0x00, //     ##     
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x03, 0x00, //       ##   
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x06, 0x00, //      ##    
+	0x0C, 0x00, //     ##     
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+
+	// @3008 '~' (11 pixels wide)
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x18, 0x00, //    ##      
+	0x24, 0x80, //   #  #  #  
+	0x03, 0x00, //       ##   
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+	0x00, 0x00, //            
+};
+
+sFONT Font16 = {
+  Font16_Table,
+  11, /* Width */
+  16, /* Height */
+};
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Functions
+  * @{
+  */
+    
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a font20.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font20.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,2223 @@
+/**
+  ******************************************************************************
+  * @file    font20.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   This file provides text font20 for STM32xx-EVAL's LCD driver. 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @brief      This file provides text font20 for STM32xx-EVAL's LCD driver.
+  * @{
+  */  
+
+/** @defgroup FONTS_Private_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */ 
+  
+
+/** @defgroup FONTS_Private_Variables
+  * @{
+  */
+
+// Character bitmaps for Courier New 15pt
+const uint8_t Font20_Table[] = 
+{
+	// @0 ' ' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @40 '!' (14 pixels wide)
+	0x00, 0x00, //               
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x02, 0x00, //       #       
+	0x02, 0x00, //       #       
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @80 '"' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1C, 0xE0, //    ###  ###   
+	0x1C, 0xE0, //    ###  ###   
+	0x1C, 0xE0, //    ###  ###   
+	0x08, 0x40, //     #    #    
+	0x08, 0x40, //     #    #    
+	0x08, 0x40, //     #    #    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @120 '#' (14 pixels wide)
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @160 '$' (14 pixels wide)
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x07, 0xE0, //      ######   
+	0x0F, 0xE0, //     #######   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x00, //    ##         
+	0x1F, 0x00, //    #####      
+	0x0F, 0xC0, //     ######    
+	0x00, 0xE0, //         ###   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x1F, 0xC0, //    #######    
+	0x1F, 0x80, //    ######     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @200 '%' (14 pixels wide)
+	0x00, 0x00, //               
+	0x1C, 0x00, //    ###        
+	0x22, 0x00, //   #   #       
+	0x22, 0x00, //   #   #       
+	0x22, 0x00, //   #   #       
+	0x1C, 0x60, //    ###   ##   
+	0x01, 0xE0, //        ####   
+	0x0F, 0x80, //     #####     
+	0x3C, 0x00, //   ####        
+	0x31, 0xC0, //   ##   ###    
+	0x02, 0x20, //       #   #   
+	0x02, 0x20, //       #   #   
+	0x02, 0x20, //       #   #   
+	0x01, 0xC0, //        ###    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @240 '&' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0xE0, //       #####   
+	0x0F, 0xE0, //     #######   
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x06, 0x00, //      ##       
+	0x0F, 0x30, //     ####  ##  
+	0x1F, 0xF0, //    #########  
+	0x19, 0xE0, //    ##  ####   
+	0x18, 0xC0, //    ##   ##    
+	0x1F, 0xF0, //    #########  
+	0x07, 0xB0, //      #### ##  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @280 ''' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x01, 0x00, //        #      
+	0x01, 0x00, //        #      
+	0x01, 0x00, //        #      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @320 '(' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @360 ')' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @400 '*' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x1B, 0x60, //    ## ## ##   
+	0x1F, 0xE0, //    ########   
+	0x07, 0x80, //      ####     
+	0x07, 0x80, //      ####     
+	0x0F, 0xC0, //     ######    
+	0x0C, 0xC0, //     ##  ##    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @440 '+' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @480 ',' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x04, 0x00, //      #        
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @520 '-' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xE0, //   #########   
+	0x3F, 0xE0, //   #########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @560 '.' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @600 '/' (14 pixels wide)
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @640 '0' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 0x80, //     #####     
+	0x1F, 0xC0, //    #######    
+	0x18, 0xC0, //    ##   ##    
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x18, 0xC0, //    ##   ##    
+	0x1F, 0xC0, //    #######    
+	0x0F, 0x80, //     #####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @680 '1' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0x00, //       ##      
+	0x1F, 0x00, //    #####      
+	0x1F, 0x00, //    #####      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @720 '2' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 0x80, //     #####     
+	0x1F, 0xC0, //    #######    
+	0x38, 0xE0, //   ###   ###   
+	0x30, 0x60, //   ##     ##   
+	0x00, 0x60, //          ##   
+	0x00, 0xC0, //         ##    
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x0C, 0x00, //     ##        
+	0x18, 0x00, //    ##         
+	0x3F, 0xE0, //   #########   
+	0x3F, 0xE0, //   #########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @760 '3' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 0x80, //     #####     
+	0x3F, 0xC0, //   ########    
+	0x30, 0xE0, //   ##    ###   
+	0x00, 0x60, //          ##   
+	0x00, 0xE0, //         ###   
+	0x07, 0xC0, //      #####    
+	0x07, 0xC0, //      #####    
+	0x00, 0xE0, //         ###   
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x60, 0xE0, //  ##     ###   
+	0x7F, 0xC0, //  #########    
+	0x3F, 0x80, //   #######     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @800 '4' (14 pixels wide)
+	0x00, 0x00, //               
+	0x01, 0xC0, //        ###    
+	0x03, 0xC0, //       ####    
+	0x03, 0xC0, //       ####    
+	0x06, 0xC0, //      ## ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x18, 0xC0, //    ##   ##    
+	0x30, 0xC0, //   ##    ##    
+	0x3F, 0xE0, //   #########   
+	0x3F, 0xE0, //   #########   
+	0x00, 0xC0, //         ##    
+	0x03, 0xE0, //       #####   
+	0x03, 0xE0, //       #####   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @840 '5' (14 pixels wide)
+	0x00, 0x00, //               
+	0x1F, 0xC0, //    #######    
+	0x1F, 0xC0, //    #######    
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x1F, 0x80, //    ######     
+	0x1F, 0xC0, //    #######    
+	0x18, 0xE0, //    ##   ###   
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x30, 0xE0, //   ##    ###   
+	0x3F, 0xC0, //   ########    
+	0x1F, 0x80, //    ######     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @880 '6' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0xE0, //       #####   
+	0x0F, 0xE0, //     #######   
+	0x1E, 0x00, //    ####       
+	0x18, 0x00, //    ##         
+	0x38, 0x00, //   ###         
+	0x37, 0x80, //   ## ####     
+	0x3F, 0xC0, //   ########    
+	0x38, 0xE0, //   ###   ###   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x18, 0xE0, //    ##   ###   
+	0x1F, 0xC0, //    #######    
+	0x07, 0x80, //      ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @920 '7' (14 pixels wide)
+	0x00, 0x00, //               
+	0x3F, 0xE0, //   #########   
+	0x3F, 0xE0, //   #########   
+	0x30, 0x60, //   ##     ##   
+	0x00, 0x60, //          ##   
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @960 '8' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 0x80, //     #####     
+	0x1F, 0xC0, //    #######    
+	0x38, 0xE0, //   ###   ###   
+	0x30, 0x60, //   ##     ##   
+	0x38, 0xE0, //   ###   ###   
+	0x1F, 0xC0, //    #######    
+	0x1F, 0xC0, //    #######    
+	0x38, 0xE0, //   ###   ###   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x38, 0xE0, //   ###   ###   
+	0x1F, 0xC0, //    #######    
+	0x0F, 0x80, //     #####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1000 '9' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 0x00, //     ####      
+	0x1F, 0xC0, //    #######    
+	0x38, 0xC0, //   ###   ##    
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x38, 0xE0, //   ###   ###   
+	0x1F, 0xE0, //    ########   
+	0x0F, 0x60, //     #### ##   
+	0x00, 0xE0, //         ###   
+	0x00, 0xC0, //         ##    
+	0x03, 0xC0, //       ####    
+	0x3F, 0x80, //   #######     
+	0x3E, 0x00, //   #####       
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1040 ':' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x03, 0x80, //       ###     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1080 ';' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x01, 0xC0, //        ###    
+	0x01, 0xC0, //        ###    
+	0x01, 0xC0, //        ###    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x04, 0x00, //      #        
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1120 '<' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x30, //           ##  
+	0x00, 0xF0, //         ####  
+	0x03, 0xC0, //       ####    
+	0x07, 0x00, //      ###      
+	0x1C, 0x00, //    ###        
+	0x78, 0x00, //  ####         
+	0x1C, 0x00, //    ###        
+	0x07, 0x00, //      ###      
+	0x03, 0xC0, //       ####    
+	0x00, 0xF0, //         ####  
+	0x00, 0x30, //           ##  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1160 '=' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x7F, 0xF0, //  ###########  
+	0x7F, 0xF0, //  ###########  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x7F, 0xF0, //  ###########  
+	0x7F, 0xF0, //  ###########  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1200 '>' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x30, 0x00, //   ##          
+	0x3C, 0x00, //   ####        
+	0x0F, 0x00, //     ####      
+	0x03, 0x80, //       ###     
+	0x00, 0xE0, //         ###   
+	0x00, 0x78, //          #### 
+	0x00, 0xE0, //         ###   
+	0x03, 0x80, //       ###     
+	0x0F, 0x00, //     ####      
+	0x3C, 0x00, //   ####        
+	0x30, 0x00, //   ##          
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1240 '?' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x0F, 0x80, //     #####     
+	0x1F, 0xC0, //    #######    
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x00, 0x60, //          ##   
+	0x01, 0xC0, //        ###    
+	0x03, 0x80, //       ###     
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1280 '@' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0x80, //       ###     
+	0x0C, 0x80, //     ##  #     
+	0x08, 0x40, //     #    #    
+	0x10, 0x40, //    #     #    
+	0x10, 0x40, //    #     #    
+	0x11, 0xC0, //    #   ###    
+	0x12, 0x40, //    #  #  #    
+	0x12, 0x40, //    #  #  #    
+	0x12, 0x40, //    #  #  #    
+	0x11, 0xC0, //    #   ###    
+	0x10, 0x00, //    #          
+	0x08, 0x00, //     #         
+	0x08, 0x40, //     #    #    
+	0x07, 0x80, //      ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1320 'A' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0x80, //    ######     
+	0x1F, 0x80, //    ######     
+	0x03, 0x80, //       ###     
+	0x06, 0xC0, //      ## ##    
+	0x06, 0xC0, //      ## ##    
+	0x0C, 0xC0, //     ##  ##    
+	0x0C, 0x60, //     ##   ##   
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x30, 0x30, //   ##      ##  
+	0x78, 0x78, //  ####    #### 
+	0x78, 0x78, //  ####    #### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1360 'B' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0x80, //   #######     
+	0x3F, 0xC0, //   ########    
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0xE0, //    ##   ###   
+	0x1F, 0xC0, //    #######    
+	0x1F, 0xE0, //    ########   
+	0x18, 0x70, //    ##    ###  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x30, //    ##     ##  
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xE0, //   #########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1400 'C' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xB0, //      #### ##  
+	0x0F, 0xF0, //     ########  
+	0x1C, 0x70, //    ###   ###  
+	0x38, 0x30, //   ###     ##  
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x38, 0x30, //   ###     ##  
+	0x1C, 0x70, //    ###   ###  
+	0x0F, 0xE0, //     #######   
+	0x07, 0xC0, //      #####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1440 'D' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x7F, 0x80, //  ########     
+	0x7F, 0xC0, //  #########    
+	0x30, 0xE0, //   ##    ###   
+	0x30, 0x70, //   ##     ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x70, //   ##     ###  
+	0x30, 0xE0, //   ##    ###   
+	0x7F, 0xC0, //  #########    
+	0x7F, 0x80, //  ########     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1480 'E' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x30, //    ##     ##  
+	0x19, 0x80, //    ##  ##     
+	0x1F, 0x80, //    ######     
+	0x1F, 0x80, //    ######     
+	0x19, 0x80, //    ##  ##     
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x30, //    ##     ##  
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1520 'F' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x30, //    ##     ##  
+	0x19, 0x80, //    ##  ##     
+	0x1F, 0x80, //    ######     
+	0x1F, 0x80, //    ######     
+	0x19, 0x80, //    ##  ##     
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x3F, 0x00, //   ######      
+	0x3F, 0x00, //   ######      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1560 'G' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xB0, //      #### ##  
+	0x1F, 0xF0, //    #########  
+	0x18, 0x70, //    ##    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x31, 0xF8, //   ##   ###### 
+	0x31, 0xF8, //   ##   ###### 
+	0x30, 0x30, //   ##      ##  
+	0x18, 0x30, //    ##     ##  
+	0x1F, 0xF0, //    #########  
+	0x07, 0xC0, //      #####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1600 'H' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1640 'I' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1680 'J' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x03, 0xF8, //       ####### 
+	0x03, 0xF8, //       ####### 
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	0x30, 0xE0, //   ##    ###   
+	0x3F, 0xC0, //   ########    
+	0x0F, 0x80, //     #####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1720 'K' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3E, 0xF8, //   ##### ##### 
+	0x3E, 0xF8, //   ##### ##### 
+	0x18, 0xE0, //    ##   ###   
+	0x19, 0x80, //    ##  ##     
+	0x1B, 0x00, //    ## ##      
+	0x1F, 0x00, //    #####      
+	0x1D, 0x80, //    ### ##     
+	0x18, 0xC0, //    ##   ##    
+	0x18, 0xC0, //    ##   ##    
+	0x18, 0x60, //    ##    ##   
+	0x3E, 0x78, //   #####  #### 
+	0x3E, 0x38, //   #####   ### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1760 'L' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0x00, //   ######      
+	0x3F, 0x00, //   ######      
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x30, //     ##    ##  
+	0x0C, 0x30, //     ##    ##  
+	0x0C, 0x30, //     ##    ##  
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1800 'M' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0x78, //  ####    #### 
+	0x78, 0x78, //  ####    #### 
+	0x38, 0x70, //   ###    ###  
+	0x3C, 0xF0, //   ####  ####  
+	0x34, 0xB0, //   ## #  # ##  
+	0x37, 0xB0, //   ## #### ##  
+	0x37, 0xB0, //   ## #### ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x30, 0x30, //   ##      ##  
+	0x7C, 0xF8, //  #####  ##### 
+	0x7C, 0xF8, //  #####  ##### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1840 'N' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x39, 0xF0, //   ###  #####  
+	0x3D, 0xF0, //   #### #####  
+	0x1C, 0x60, //    ###   ##   
+	0x1E, 0x60, //    ####  ##   
+	0x1E, 0x60, //    ####  ##   
+	0x1B, 0x60, //    ## ## ##   
+	0x1B, 0x60, //    ## ## ##   
+	0x19, 0xE0, //    ##  ####   
+	0x19, 0xE0, //    ##  ####   
+	0x18, 0xE0, //    ##   ###   
+	0x3E, 0xE0, //   ##### ###   
+	0x3E, 0x60, //   #####  ##   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1880 'O' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x80, //      ####     
+	0x0F, 0xC0, //     ######    
+	0x1C, 0xE0, //    ###  ###   
+	0x38, 0x70, //   ###    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x70, //   ###    ###  
+	0x1C, 0xE0, //    ###  ###   
+	0x0F, 0xC0, //     ######    
+	0x07, 0x80, //      ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1920 'P' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xC0, //   ########    
+	0x3F, 0xE0, //   #########   
+	0x18, 0x70, //    ##    ###  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x70, //    ##    ###  
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xC0, //    #######    
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x3F, 0x00, //   ######      
+	0x3F, 0x00, //   ######      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @1960 'Q' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x80, //      ####     
+	0x0F, 0xC0, //     ######    
+	0x1C, 0xE0, //    ###  ###   
+	0x38, 0x70, //   ###    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x70, //   ###    ###  
+	0x1C, 0xE0, //    ###  ###   
+	0x0F, 0xC0, //     ######    
+	0x07, 0x80, //      ####     
+	0x07, 0xB0, //      #### ##  
+	0x0F, 0xF0, //     ########  
+	0x0C, 0xE0, //     ##  ###   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2000 'R' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xC0, //   ########    
+	0x3F, 0xE0, //   #########   
+	0x18, 0x70, //    ##    ###  
+	0x18, 0x30, //    ##     ##  
+	0x18, 0x70, //    ##    ###  
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xC0, //    #######    
+	0x18, 0xE0, //    ##   ###   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x70, //    ##    ###  
+	0x3E, 0x38, //   #####   ### 
+	0x3E, 0x18, //   #####    ## 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2040 'S' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x0F, 0xB0, //     ##### ##  
+	0x1F, 0xF0, //    #########  
+	0x38, 0x70, //   ###    ###  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x00, //   ###         
+	0x1F, 0x80, //    ######     
+	0x07, 0xE0, //      ######   
+	0x00, 0x70, //          ###  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x70, //   ###    ###  
+	0x3F, 0xE0, //   #########   
+	0x37, 0xC0, //   ## #####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2080 'T' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x0F, 0xC0, //     ######    
+	0x0F, 0xC0, //     ######    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2120 'U' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x1C, 0xE0, //    ###  ###   
+	0x0F, 0xC0, //     ######    
+	0x07, 0x80, //      ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2160 'V' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x30, 0x60, //   ##     ##   
+	0x30, 0x60, //   ##     ##   
+	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, //               
+
+	// @2200 'W' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x7C, 0x7C, //  #####   #####
+	0x7C, 0x7C, //  #####   #####
+	0x30, 0x18, //   ##       ## 
+	0x33, 0x98, //   ##  ###  ## 
+	0x33, 0x98, //   ##  ###  ## 
+	0x33, 0x98, //   ##  ###  ## 
+	0x36, 0xD8, //   ## ## ## ## 
+	0x16, 0xD0, //    # ## ## #  
+	0x1C, 0x70, //    ###   ###  
+	0x1C, 0x70, //    ###   ###  
+	0x1C, 0x70, //    ###   ###  
+	0x18, 0x30, //    ##     ##  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2240 'X' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x30, 0x60, //   ##     ##   
+	0x18, 0xC0, //    ##   ##    
+	0x0D, 0x80, //     ## ##     
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x0D, 0x80, //     ## ##     
+	0x18, 0xC0, //    ##   ##    
+	0x30, 0x60, //   ##     ##   
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2280 'Y' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x18, 0x60, //    ##    ##   
+	0x0C, 0xC0, //     ##  ##    
+	0x07, 0x80, //      ####     
+	0x07, 0x80, //      ####     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x0F, 0xC0, //     ######    
+	0x0F, 0xC0, //     ######    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2320 'Z' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0xC0, //    ##   ##    
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x0C, 0x60, //     ##   ##   
+	0x18, 0x60, //    ##    ##   
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2360 '[' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0xC0, //       ####    
+	0x03, 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, 0xC0, //       ####    
+	0x03, 0xC0, //       ####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2400 '\' (14 pixels wide)
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x01, 0x80, //        ##     
+	0x01, 0x80, //        ##     
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0x60, //          ##   
+	0x00, 0x60, //          ##   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2440 ']' (14 pixels wide)
+	0x00, 0x00, //               
+	0x0F, 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, //       ##      
+	0x0F, 0x00, //     ####      
+	0x0F, 0x00, //     ####      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2480 '^' (14 pixels wide)
+	0x00, 0x00, //               
+	0x02, 0x00, //       #       
+	0x07, 0x00, //      ###      
+	0x0D, 0x80, //     ## ##     
+	0x18, 0xC0, //    ##   ##    
+	0x30, 0x60, //   ##     ##   
+	0x20, 0x20, //   #       #   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2520 '_' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0xFF, 0xFC, // ##############
+	0xFF, 0xFC, // ##############
+
+	// @2560 '`' (14 pixels wide)
+	0x00, 0x00, //               
+	0x04, 0x00, //      #        
+	0x03, 0x00, //       ##      
+	0x00, 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, //               
+
+	// @2600 'a' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x0F, 0xC0, //     ######    
+	0x1F, 0xE0, //    ########   
+	0x00, 0x60, //          ##   
+	0x0F, 0xE0, //     #######   
+	0x1F, 0xE0, //    ########   
+	0x38, 0x60, //   ###    ##   
+	0x30, 0xE0, //   ##    ###   
+	0x3F, 0xF0, //   ##########  
+	0x1F, 0x70, //    ##### ###  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2640 'b' (14 pixels wide)
+	0x00, 0x00, //               
+	0x70, 0x00, //  ###          
+	0x70, 0x00, //  ###          
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x37, 0x80, //   ## ####     
+	0x3F, 0xE0, //   #########   
+	0x38, 0x60, //   ###    ##   
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x60, //   ###    ##   
+	0x7F, 0xE0, //  ##########   
+	0x77, 0x80, //  ### ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2680 'c' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xB0, //      #### ##  
+	0x1F, 0xF0, //    #########  
+	0x18, 0x30, //    ##     ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x38, 0x30, //   ###     ##  
+	0x1F, 0xF0, //    #########  
+	0x0F, 0xC0, //     ######    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2720 'd' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x70, //          ###  
+	0x00, 0x70, //          ###  
+	0x00, 0x30, //           ##  
+	0x00, 0x30, //           ##  
+	0x07, 0xB0, //      #### ##  
+	0x1F, 0xF0, //    #########  
+	0x18, 0x70, //    ##    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x70, //   ###    ###  
+	0x1F, 0xF8, //    ########## 
+	0x07, 0xB8, //      #### ### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2760 'e' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x80, //      ####     
+	0x1F, 0xE0, //    ########   
+	0x18, 0x60, //    ##    ##   
+	0x3F, 0xF0, //   ##########  
+	0x3F, 0xF0, //   ##########  
+	0x30, 0x00, //   ##          
+	0x18, 0x30, //    ##     ##  
+	0x1F, 0xF0, //    #########  
+	0x07, 0xC0, //      #####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2800 'f' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0xF0, //       ######  
+	0x07, 0xF0, //      #######  
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2840 'g' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xB8, //      #### ### 
+	0x1F, 0xF8, //    ########## 
+	0x18, 0x70, //    ##    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x18, 0x70, //    ##    ###  
+	0x1F, 0xF0, //    #########  
+	0x07, 0xB0, //      #### ##  
+	0x00, 0x30, //           ##  
+	0x00, 0x70, //          ###  
+	0x0F, 0xE0, //     #######   
+	0x0F, 0xC0, //     ######    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2880 'h' (14 pixels wide)
+	0x00, 0x00, //               
+	0x38, 0x00, //   ###         
+	0x38, 0x00, //   ###         
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x1B, 0xC0, //    ## ####    
+	0x1F, 0xE0, //    ########   
+	0x1C, 0x60, //    ###   ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2920 'i' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0x00, //    #####      
+	0x1F, 0x00, //    #####      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @2960 'j' (14 pixels wide)
+	0x00, 0x00, //               
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0xC0, //    #######    
+	0x1F, 0xC0, //    #######    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x00, 0xC0, //         ##    
+	0x01, 0xC0, //        ###    
+	0x3F, 0x80, //   #######     
+	0x3F, 0x00, //   ######      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3000 'k' (14 pixels wide)
+	0x00, 0x00, //               
+	0x38, 0x00, //   ###         
+	0x38, 0x00, //   ###         
+	0x18, 0x00, //    ##         
+	0x18, 0x00, //    ##         
+	0x1B, 0xE0, //    ## #####   
+	0x1B, 0xE0, //    ## #####   
+	0x1B, 0x00, //    ## ##      
+	0x1E, 0x00, //    ####       
+	0x1E, 0x00, //    ####       
+	0x1B, 0x00, //    ## ##      
+	0x19, 0x80, //    ##  ##     
+	0x39, 0xF0, //   ###  #####  
+	0x39, 0xF0, //   ###  #####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3040 'l' (14 pixels wide)
+	0x00, 0x00, //               
+	0x1F, 0x00, //    #####      
+	0x1F, 0x00, //    #####      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3080 'm' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x7E, 0xE0, //  ###### ###   
+	0x7F, 0xF0, //  ###########  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x33, 0x30, //   ##  ##  ##  
+	0x7B, 0xB8, //  #### ### ### 
+	0x7B, 0xB8, //  #### ### ### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3120 'n' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3B, 0xC0, //   ### ####    
+	0x3F, 0xE0, //   #########   
+	0x1C, 0x60, //    ###   ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3160 'o' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0x80, //      ####     
+	0x1F, 0xE0, //    ########   
+	0x18, 0x60, //    ##    ##   
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x18, 0x60, //    ##    ##   
+	0x1F, 0xE0, //    ########   
+	0x07, 0x80, //      ####     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3200 'p' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x77, 0x80, //  ### ####     
+	0x7F, 0xE0, //  ##########   
+	0x38, 0x60, //   ###    ##   
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x38, 0x60, //   ###    ##   
+	0x3F, 0xE0, //   #########   
+	0x37, 0x80, //   ## ####     
+	0x30, 0x00, //   ##          
+	0x30, 0x00, //   ##          
+	0x7C, 0x00, //  #####        
+	0x7C, 0x00, //  #####        
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3240 'q' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xB8, //      #### ### 
+	0x1F, 0xF8, //    ########## 
+	0x18, 0x70, //    ##    ###  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x30, 0x30, //   ##      ##  
+	0x18, 0x70, //    ##    ###  
+	0x1F, 0xF0, //    #########  
+	0x07, 0xB0, //      #### ##  
+	0x00, 0x30, //           ##  
+	0x00, 0x30, //           ##  
+	0x00, 0xF8, //         ##### 
+	0x00, 0xF8, //         ##### 
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3280 'r' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3C, 0xE0, //   ####  ###   
+	0x3D, 0xF0, //   #### #####  
+	0x0F, 0x30, //     ####  ##  
+	0x0E, 0x00, //     ###       
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x3F, 0xC0, //   ########    
+	0x3F, 0xC0, //   ########    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3320 's' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x07, 0xE0, //      ######   
+	0x1F, 0xE0, //    ########   
+	0x18, 0x60, //    ##    ##   
+	0x1E, 0x00, //    ####       
+	0x0F, 0xC0, //     ######    
+	0x01, 0xE0, //        ####   
+	0x18, 0x60, //    ##    ##   
+	0x1F, 0xE0, //    ########   
+	0x1F, 0x80, //    ######     
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3360 't' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x3F, 0xE0, //   #########   
+	0x3F, 0xE0, //   #########   
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x00, //     ##        
+	0x0C, 0x30, //     ##    ##  
+	0x0F, 0xF0, //     ########  
+	0x07, 0xC0, //      #####    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3400 'u' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x38, 0xE0, //   ###   ###   
+	0x38, 0xE0, //   ###   ###   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0x60, //    ##    ##   
+	0x18, 0xE0, //    ##   ###   
+	0x1F, 0xF0, //    #########  
+	0x0F, 0x70, //     #### ###  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3440 'v' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x30, 0x60, //   ##     ##   
+	0x18, 0xC0, //    ##   ##    
+	0x18, 0xC0, //    ##   ##    
+	0x0D, 0x80, //     ## ##     
+	0x0D, 0x80, //     ## ##     
+	0x07, 0x00, //      ###      
+	0x07, 0x00, //      ###      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3480 'w' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x32, 0x60, //   ##  #  ##   
+	0x32, 0x60, //   ##  #  ##   
+	0x37, 0xE0, //   ## ######   
+	0x1D, 0xC0, //    ### ###    
+	0x1D, 0xC0, //    ### ###    
+	0x18, 0xC0, //    ##   ##    
+	0x18, 0xC0, //    ##   ##    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3520 'x' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x0C, 0xC0, //     ##  ##    
+	0x07, 0x80, //      ####     
+	0x03, 0x00, //       ##      
+	0x07, 0x80, //      ####     
+	0x0C, 0xC0, //     ##  ##    
+	0x3C, 0xF0, //   ####  ####  
+	0x3C, 0xF0, //   ####  ####  
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3560 'y' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x78, 0xF0, //  ####   ####  
+	0x78, 0xF0, //  ####   ####  
+	0x30, 0x60, //   ##     ##   
+	0x18, 0xC0, //    ##   ##    
+	0x18, 0xC0, //    ##   ##    
+	0x0D, 0x80, //     ## ##     
+	0x0F, 0x80, //     #####     
+	0x07, 0x00, //      ###      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x0C, 0x00, //     ##        
+	0x7F, 0x00, //  #######      
+	0x7F, 0x00, //  #######      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3600 'z' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x18, 0xC0, //    ##   ##    
+	0x01, 0x80, //        ##     
+	0x03, 0x00, //       ##      
+	0x06, 0x00, //      ##       
+	0x0C, 0x60, //     ##   ##   
+	0x1F, 0xE0, //    ########   
+	0x1F, 0xE0, //    ########   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3640 '{' (14 pixels wide)
+	0x00, 0x00, //               
+	0x01, 0xC0, //        ###    
+	0x03, 0xC0, //       ####    
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x07, 0x00, //      ###      
+	0x0E, 0x00, //     ###       
+	0x07, 0x00, //      ###      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0x00, //       ##      
+	0x03, 0xC0, //       ####    
+	0x01, 0xC0, //        ###    
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3680 '|' (14 pixels wide)
+	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, //       ##      
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3720 '}' (14 pixels wide)
+	0x00, 0x00, //               
+	0x1C, 0x00, //    ###        
+	0x1E, 0x00, //    ####       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x07, 0x00, //      ###      
+	0x03, 0x80, //       ###     
+	0x07, 0x00, //      ###      
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x06, 0x00, //      ##       
+	0x1E, 0x00, //    ####       
+	0x1C, 0x00, //    ###        
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+
+	// @3760 '~' (14 pixels wide)
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x0E, 0x00, //     ###       
+	0x3F, 0x30, //   ######  ##  
+	0x33, 0xF0, //   ##  ######  
+	0x01, 0xE0, //        ####   
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+	0x00, 0x00, //               
+};
+
+
+sFONT Font20 = {
+  Font20_Table,
+  14, /* Width */
+  20, /* Height */
+};
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Functions
+  * @{
+  */
+    
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a font24.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font24.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,2600 @@
+/**
+  ******************************************************************************
+  * @file    font24.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   This file provides text font24 for STM32xx-EVAL's LCD driver. 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @brief      This file provides text font24 for STM32xx-EVAL's LCD driver.
+  * @{
+  */  
+
+/** @defgroup FONTS_Private_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */ 
+  
+
+/** @defgroup FONTS_Private_Variables
+  * @{
+  */
+const uint8_t Font24_Table [] = 
+{
+	// @0 ' ' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @72 '!' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x01, 0x00, 0x00, //        #         
+	0x01, 0x00, 0x00, //        #         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @144 '"' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x0E, 0x70, 0x00, //     ###  ###     
+	0x0E, 0x70, 0x00, //     ###  ###     
+	0x0E, 0x70, 0x00, //     ###  ###     
+	0x04, 0x20, 0x00, //      #    #      
+	0x04, 0x20, 0x00, //      #    #      
+	0x04, 0x20, 0x00, //      #    #      
+	0x04, 0x20, 0x00, //      #    #      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @216 '#' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @288 '$' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x07, 0xB0, 0x00, //      #### ##     
+	0x0F, 0xF0, 0x00, //     ########     
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x1C, 0x00, 0x00, //    ###           
+	0x0F, 0x80, 0x00, //     #####        
+	0x07, 0xE0, 0x00, //      ######      
+	0x00, 0xF0, 0x00, //         ####     
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x1C, 0x30, 0x00, //    ###    ##     
+	0x1C, 0x70, 0x00, //    ###   ###     
+	0x1F, 0xE0, 0x00, //    ########      
+	0x1B, 0xC0, 0x00, //    ## ####       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @360 '%' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0x80, 0x00, //      ####        
+	0x0F, 0xC0, 0x00, //     ######       
+	0x1C, 0xE0, 0x00, //    ###  ###      
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x1C, 0xE0, 0x00, //    ###  ###      
+	0x0F, 0xF8, 0x00, //     #########    
+	0x07, 0xE0, 0x00, //      ######      
+	0x1F, 0xF0, 0x00, //    #########     
+	0x07, 0x38, 0x00, //      ###  ###    
+	0x06, 0x18, 0x00, //      ##    ##    
+	0x06, 0x18, 0x00, //      ##    ##    
+	0x07, 0x38, 0x00, //      ###  ###    
+	0x03, 0xF0, 0x00, //       ######     
+	0x01, 0xE0, 0x00, //        ####      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @432 '&' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xF0, 0x00, //       ######     
+	0x07, 0xF0, 0x00, //      #######     
+	0x0C, 0x60, 0x00, //     ##   ##      
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x06, 0x00, 0x00, //      ##          
+	0x07, 0x00, 0x00, //      ###         
+	0x0F, 0x9C, 0x00, //     #####  ###   
+	0x1D, 0xFC, 0x00, //    ### #######   
+	0x18, 0xF0, 0x00, //    ##   ####     
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x07, 0xDC, 0x00, //      ##### ###   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @504 ''' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x01, 0x00, 0x00, //        #         
+	0x01, 0x00, 0x00, //        #         
+	0x01, 0x00, 0x00, //        #         
+	0x01, 0x00, 0x00, //        #         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @576 '(' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x38, 0x00, //           ###    
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0xF0, 0x00, //         ####     
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0xE0, 0x00, //         ###      
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x38, 0x00, //           ###    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @648 ')' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x18, 0x00, 0x00, //    ##            
+	0x1C, 0x00, 0x00, //    ###           
+	0x0E, 0x00, 0x00, //     ###          
+	0x0E, 0x00, 0x00, //     ###          
+	0x07, 0x00, 0x00, //      ###         
+	0x07, 0x00, 0x00, //      ###         
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x80, 0x00, //       ###        
+	0x07, 0x00, 0x00, //      ###         
+	0x07, 0x00, 0x00, //      ###         
+	0x0F, 0x00, 0x00, //     ####         
+	0x0E, 0x00, 0x00, //     ###          
+	0x1C, 0x00, 0x00, //    ###           
+	0x18, 0x00, 0x00, //    ##            
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @720 '*' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x1D, 0xB8, 0x00, //    ### ## ###    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x07, 0xE0, 0x00, //      ######      
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @792 '+' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 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, //                  
+
+	// @864 ',' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0xC0, 0x00, //         ##       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x03, 0x00, 0x00, //       ##         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @936 '-' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	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, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1008 '.' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	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, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1080 '/' (17 pixels wide)
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x38, 0x00, //           ###    
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0xC0, 0x00, //         ##       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x03, 0x00, 0x00, //       ##         
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x0E, 0x00, 0x00, //     ###          
+	0x0C, 0x00, 0x00, //     ##           
+	0x1C, 0x00, 0x00, //    ###           
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1152 '0' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x07, 0xE0, 0x00, //      ######      
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x07, 0xE0, 0x00, //      ######      
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1224 '1' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x80, 0x00, //         #        
+	0x07, 0x80, 0x00, //      ####        
+	0x1F, 0x80, 0x00, //    ######        
+	0x1D, 0x80, 0x00, //    ### ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1296 '2' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xC0, 0x00, //      #####       
+	0x1F, 0xF0, 0x00, //    #########     
+	0x38, 0x30, 0x00, //   ###     ##     
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x60, 0x00, //          ##      
+	0x01, 0xC0, 0x00, //        ###       
+	0x03, 0x80, 0x00, //       ###        
+	0x06, 0x00, 0x00, //      ##          
+	0x0C, 0x00, 0x00, //     ##           
+	0x18, 0x00, 0x00, //    ##            
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1368 '3' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x0F, 0xE0, 0x00, //     #######      
+	0x0C, 0x70, 0x00, //     ##   ###     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x60, 0x00, //          ##      
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xE0, 0x00, //       #####      
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF0, 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, //                  
+
+	// @1440 '4' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xE0, 0x00, //         ###      
+	0x01, 0xE0, 0x00, //        ####      
+	0x01, 0xE0, 0x00, //        ####      
+	0x03, 0x60, 0x00, //       ## ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x0C, 0x60, 0x00, //     ##   ##      
+	0x0C, 0x60, 0x00, //     ##   ##      
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x30, 0x60, 0x00, //   ##     ##      
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x00, 0x60, 0x00, //          ##      
+	0x03, 0xF8, 0x00, //       #######    
+	0x03, 0xF8, 0x00, //       #######    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1512 '5' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1F, 0xF0, 0x00, //    #########     
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x1B, 0xC0, 0x00, //    ## ####       
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1C, 0x30, 0x00, //    ###    ##     
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x3F, 0xF0, 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, //                  
+
+	// @1584 '6' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xF8, 0x00, //         #####    
+	0x03, 0xF8, 0x00, //       #######    
+	0x07, 0x00, 0x00, //      ###         
+	0x0E, 0x00, 0x00, //     ###          
+	0x0C, 0x00, 0x00, //     ##           
+	0x18, 0x00, 0x00, //    ##            
+	0x1B, 0xC0, 0x00, //    ## ####       
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1C, 0x30, 0x00, //    ###    ##     
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x38, 0x00, //     ##    ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x03, 0xE0, 0x00, //       #####      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1656 '7' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0xC0, 0x00, //         ##       
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1728 '8' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xE0, 0x00, //      ######      
+	0x0F, 0xF0, 0x00, //     ########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x07, 0xE0, 0x00, //      ######      
+	0x07, 0xE0, 0x00, //      ######      
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x07, 0xE0, 0x00, //      ######      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1800 '9' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xC0, 0x00, //      #####       
+	0x0F, 0xF0, 0x00, //     ########     
+	0x1C, 0x30, 0x00, //    ###    ##     
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x38, 0x00, //     ##    ###    
+	0x0F, 0xF8, 0x00, //     #########    
+	0x03, 0xD8, 0x00, //       #### ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0xE0, 0x00, //         ###      
+	0x1F, 0xC0, 0x00, //    #######       
+	0x1F, 0x00, 0x00, //    #####         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1872 ':' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @1944 ';' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xF0, 0x00, //         ####     
+	0x00, 0xF0, 0x00, //         ####     
+	0x00, 0xF0, 0x00, //         ####     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xE0, 0x00, //         ###      
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x02, 0x00, 0x00, //       #          
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2016 '<' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x1C, 0x00, //            ###   
+	0x00, 0x3C, 0x00, //           ####   
+	0x00, 0xF0, 0x00, //         ####     
+	0x03, 0xC0, 0x00, //       ####       
+	0x0F, 0x00, 0x00, //     ####         
+	0x3C, 0x00, 0x00, //   ####           
+	0xF0, 0x00, 0x00, // ####             
+	0x3C, 0x00, 0x00, //   ####           
+	0x0F, 0x00, 0x00, //     ####         
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0xF0, 0x00, //         ####     
+	0x00, 0x3C, 0x00, //           ####   
+	0x00, 0x1C, 0x00, //            ###   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2088 '=' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xFC, 0x00, //  #############   
+	0x7F, 0xFC, 0x00, //  #############   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xFC, 0x00, //  #############   
+	0x7F, 0xFC, 0x00, //  #############   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2160 '>' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x70, 0x00, 0x00, //  ###             
+	0x78, 0x00, 0x00, //  ####            
+	0x1E, 0x00, 0x00, //    ####          
+	0x07, 0x80, 0x00, //      ####        
+	0x01, 0xE0, 0x00, //        ####      
+	0x00, 0x78, 0x00, //          ####    
+	0x00, 0x1E, 0x00, //            ####  
+	0x00, 0x78, 0x00, //          ####    
+	0x01, 0xE0, 0x00, //        ####      
+	0x07, 0x80, 0x00, //      ####        
+	0x1E, 0x00, 0x00, //    ####          
+	0x78, 0x00, 0x00, //  ####            
+	0x70, 0x00, 0x00, //  ###             
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2232 '?' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xC0, 0x00, //      #####       
+	0x0F, 0xE0, 0x00, //     #######      
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0xE0, 0x00, //         ###      
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0x80, 0x00, //       ###        
+	0x03, 0x00, 0x00, //       ##         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0x00, 0x00, //      ###         
+	0x07, 0x00, 0x00, //      ###         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2304 '@' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xE0, 0x00, //       #####      
+	0x07, 0xF0, 0x00, //      #######     
+	0x0E, 0x38, 0x00, //     ###   ###    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x18, 0x78, 0x00, //    ##    ####    
+	0x18, 0xF8, 0x00, //    ##   #####    
+	0x19, 0xD8, 0x00, //    ##  ### ##    
+	0x19, 0x98, 0x00, //    ##  ##  ##    
+	0x19, 0x98, 0x00, //    ##  ##  ##    
+	0x19, 0x98, 0x00, //    ##  ##  ##    
+	0x18, 0xF8, 0x00, //    ##   #####    
+	0x18, 0x78, 0x00, //    ##    ####    
+	0x18, 0x00, 0x00, //    ##            
+	0x0C, 0x00, 0x00, //     ##           
+	0x0E, 0x18, 0x00, //     ###    ##    
+	0x07, 0xF8, 0x00, //      ########    
+	0x03, 0xE0, 0x00, //       #####      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2376 'A' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0x80, 0x00, //    ######        
+	0x1F, 0xC0, 0x00, //    #######       
+	0x01, 0xC0, 0x00, //        ###       
+	0x03, 0x60, 0x00, //       ## ##      
+	0x03, 0x60, 0x00, //       ## ##      
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x0F, 0xF8, 0x00, //     #########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0xFC, 0x7F, 0x00, // ######   ####### 
+	0xFC, 0x7F, 0x00, // ######   ####### 
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2448 'B' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xE0, 0x00, //  ##########      
+	0x7F, 0xF0, 0x00, //  ###########     
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x1C, 0x00, //    ##      ###   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x7F, 0xF8, 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, //                  
+
+	// @2520 'C' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xEC, 0x00, //       ##### ##   
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x0F, 0xF8, 0x00, //     #########    
+	0x03, 0xF0, 0x00, //       ######     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2592 'D' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xC0, 0x00, //  #########       
+	0x7F, 0xF0, 0x00, //  ###########     
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x7F, 0xF0, 0x00, //  ###########     
+	0x7F, 0xE0, 0x00, //  ##########      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2664 'E' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xF8, 0x00, //  ############    
+	0x7F, 0xF8, 0x00, //  ############    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x19, 0x98, 0x00, //    ##  ##  ##    
+	0x19, 0x80, 0x00, //    ##  ##        
+	0x1F, 0x80, 0x00, //    ######        
+	0x1F, 0x80, 0x00, //    ######        
+	0x19, 0x80, 0x00, //    ##  ##        
+	0x19, 0x98, 0x00, //    ##  ##  ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x7F, 0xF8, 0x00, //  ############    
+	0x7F, 0xF8, 0x00, //  ############    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2736 'F' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0xCC, 0x00, //     ##  ##  ##   
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0F, 0xC0, 0x00, //     ######       
+	0x0F, 0xC0, 0x00, //     ######       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x3F, 0xC0, 0x00, //   ########       
+	0x3F, 0xC0, 0x00, //   ########       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2808 'G' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xEC, 0x00, //       ##### ##   
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0xFE, 0x00, //   ##    #######  
+	0x30, 0xFE, 0x00, //   ##    #######  
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x38, 0x0C, 0x00, //   ###       ##   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x03, 0xF0, 0x00, //       ######     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2880 'H' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @2952 'I' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3024 'J' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xFE, 0x00, //      ##########  
+	0x07, 0xFE, 0x00, //      ##########  
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x30, 0x60, 0x00, //   ##     ##      
+	0x3F, 0xE0, 0x00, //   #########      
+	0x0F, 0x80, 0x00, //     #####        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3096 'K' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0x3E, 0x00, //  #######  #####  
+	0x7F, 0x3E, 0x00, //  #######  #####  
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x18, 0xC0, 0x00, //    ##   ##       
+	0x19, 0x80, 0x00, //    ##  ##        
+	0x1B, 0x80, 0x00, //    ## ###        
+	0x1F, 0xC0, 0x00, //    #######       
+	0x1C, 0xE0, 0x00, //    ###  ###      
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x7F, 0x1F, 0x00, //  #######   ##### 
+	0x7F, 0x1F, 0x00, //  #######   ##### 
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3168 'L' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0x80, 0x00, //  ########        
+	0x7F, 0x80, 0x00, //  ########        
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x7F, 0xFC, 0x00, //  #############   
+	0x7F, 0xFC, 0x00, //  #############   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3240 'M' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0xF0, 0x0F, 0x00, // ####        #### 
+	0xF8, 0x1F, 0x00, // #####      ##### 
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x3C, 0x3C, 0x00, //   ####    ####   
+	0x3C, 0x3C, 0x00, //   ####    ####   
+	0x36, 0x6C, 0x00, //   ## ##  ## ##   
+	0x36, 0x6C, 0x00, //   ## ##  ## ##   
+	0x33, 0xCC, 0x00, //   ##  ####  ##   
+	0x33, 0xCC, 0x00, //   ##  ####  ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0xFE, 0x7F, 0x00, // #######  ####### 
+	0xFE, 0x7F, 0x00, // #######  ####### 
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3312 'N' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x78, 0xFE, 0x00, //  ####   #######  
+	0x78, 0xFE, 0x00, //  ####   #######  
+	0x1C, 0x18, 0x00, //    ###     ##    
+	0x1E, 0x18, 0x00, //    ####    ##    
+	0x1F, 0x18, 0x00, //    #####   ##    
+	0x1B, 0x18, 0x00, //    ## ##   ##    
+	0x1B, 0x98, 0x00, //    ## ###  ##    
+	0x19, 0xD8, 0x00, //    ##  ### ##    
+	0x18, 0xD8, 0x00, //    ##   ## ##    
+	0x18, 0xF8, 0x00, //    ##   #####    
+	0x18, 0x78, 0x00, //    ##    ####    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x7F, 0x18, 0x00, //  #######   ##    
+	0x7F, 0x18, 0x00, //  #######   ##    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3384 'O' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x0F, 0xF0, 0x00, //     ########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3456 'P' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3F, 0xF0, 0x00, //   ##########     
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x0C, 0x1C, 0x00, //     ##     ###   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x0C, 0x00, //     ##      ##   
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x0F, 0xF8, 0x00, //     #########    
+	0x0F, 0xE0, 0x00, //     #######      
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x3F, 0xC0, 0x00, //   ########       
+	0x3F, 0xC0, 0x00, //   ########       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3528 'Q' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x0F, 0xF0, 0x00, //     ########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x07, 0xC0, 0x00, //      #####       
+	0x07, 0xCC, 0x00, //      #####  ##   
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x0C, 0x38, 0x00, //     ##    ###    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3600 'R' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0xE0, 0x00, //  ##########      
+	0x7F, 0xF0, 0x00, //  ###########     
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1F, 0xC0, 0x00, //    #######       
+	0x18, 0xE0, 0x00, //    ##   ###      
+	0x18, 0x70, 0x00, //    ##    ###     
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x7F, 0x1E, 0x00, //  #######   ####  
+	0x7F, 0x0E, 0x00, //  #######    ###  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3672 'S' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xD8, 0x00, //      ##### ##    
+	0x0F, 0xF8, 0x00, //     #########    
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1E, 0x00, 0x00, //    ####          
+	0x0F, 0xC0, 0x00, //     ######       
+	0x03, 0xF0, 0x00, //       ######     
+	0x00, 0x78, 0x00, //          ####    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1B, 0xE0, 0x00, //    ## #####      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3744 'T' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x0F, 0xF0, 0x00, //     ########     
+	0x0F, 0xF0, 0x00, //     ########     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3816 'U' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x0F, 0xF0, 0x00, //     ########     
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3888 'V' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7F, 0x7F, 0x00, //  ####### ####### 
+	0x7F, 0x7F, 0x00, //  ####### ####### 
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x03, 0x60, 0x00, //       ## ##      
+	0x03, 0x60, 0x00, //       ## ##      
+	0x03, 0x60, 0x00, //       ## ##      
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0xC0, 0x00, //        ###       
+	0x00, 0x80, 0x00, //         #        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @3960 'W' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0xFE, 0x3F, 0x80, // #######   #######
+	0xFE, 0x3F, 0x80, // #######   #######
+	0x30, 0x06, 0x00, //   ##         ##  
+	0x30, 0x06, 0x00, //   ##         ##  
+	0x30, 0x86, 0x00, //   ##    #    ##  
+	0x19, 0xCC, 0x00, //    ##  ###  ##   
+	0x19, 0xCC, 0x00, //    ##  ###  ##   
+	0x1B, 0x6C, 0x00, //    ## ## ## ##   
+	0x1B, 0x6C, 0x00, //    ## ## ## ##   
+	0x1E, 0x7C, 0x00, //    ####  #####   
+	0x0E, 0x38, 0x00, //     ###   ###    
+	0x0E, 0x38, 0x00, //     ###   ###    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4032 'X' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x03, 0xC0, 0x00, //       ####       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0xC0, 0x00, //       ####       
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4104 'Y' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7C, 0x7E, 0x00, //  #####   ######  
+	0x7C, 0x7E, 0x00, //  #####   ######  
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x03, 0xC0, 0x00, //       ####       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x0F, 0xF0, 0x00, //     ########     
+	0x0F, 0xF0, 0x00, //     ########     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4176 'Z' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x18, 0xC0, 0x00, //    ##   ##       
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x06, 0x18, 0x00, //      ##    ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4248 '[' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0xF0, 0x00, //        #####     
+	0x01, 0xF0, 0x00, //        #####     
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0xF0, 0x00, //        #####     
+	0x01, 0xF0, 0x00, //        #####     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4320 '\' (17 pixels wide)
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x1C, 0x00, 0x00, //    ###           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0E, 0x00, 0x00, //     ###          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x03, 0x00, 0x00, //       ##         
+	0x03, 0x00, 0x00, //       ##         
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0x70, 0x00, //          ###     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x38, 0x00, //           ###    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4392 ']' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x0F, 0x80, 0x00, //     #####        
+	0x0F, 0x80, 0x00, //     #####        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x0F, 0x80, 0x00, //     #####        
+	0x0F, 0x80, 0x00, //     #####        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4464 '^' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x80, 0x00, //         #        
+	0x01, 0xC0, 0x00, //        ###       
+	0x03, 0xE0, 0x00, //       #####      
+	0x07, 0x70, 0x00, //      ### ###     
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x10, 0x04, 0x00, //    #         #   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4536 '_' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0xFF, 0xFF, 0x00, // ################ 
+	0xFF, 0xFF, 0x00, // ################ 
+
+	// @4608 '`' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x03, 0x00, 0x00, //       ##         
+	0x03, 0x80, 0x00, //       ###        
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0x60, 0x00, //          ##      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4680 'a' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x0F, 0xC0, 0x00, //     ######       
+	0x1F, 0xE0, 0x00, //    ########      
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x07, 0xF0, 0x00, //      #######     
+	0x1F, 0xF0, 0x00, //    #########     
+	0x38, 0x30, 0x00, //   ###     ##     
+	0x30, 0x30, 0x00, //   ##      ##     
+	0x30, 0x70, 0x00, //   ##     ###     
+	0x1F, 0xFC, 0x00, //    ###########   
+	0x0F, 0xBC, 0x00, //     ##### ####   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4752 'b' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x78, 0x00, 0x00, //  ####            
+	0x78, 0x00, 0x00, //  ####            
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x1B, 0xE0, 0x00, //    ## #####      
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1C, 0x18, 0x00, //    ###     ##    
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x1C, 0x18, 0x00, //    ###     ##    
+	0x7F, 0xF8, 0x00, //  ############    
+	0x7B, 0xE0, 0x00, //  #### #####      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4824 'c' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xEC, 0x00, //       ##### ##   
+	0x0F, 0xFC, 0x00, //     ##########   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x38, 0x0C, 0x00, //   ###       ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x38, 0x0C, 0x00, //   ###       ##   
+	0x1C, 0x1C, 0x00, //    ###     ###   
+	0x0F, 0xF8, 0x00, //     #########    
+	0x03, 0xF0, 0x00, //       ######     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4896 'd' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x78, 0x00, //          ####    
+	0x00, 0x78, 0x00, //          ####    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x07, 0xD8, 0x00, //      ##### ##    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xFE, 0x00, //    ############  
+	0x07, 0xDE, 0x00, //      ##### ####  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @4968 'e' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xE0, 0x00, //      ######      
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x30, 0x00, 0x00, //   ##             
+	0x30, 0x00, 0x00, //   ##             
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x1F, 0xFC, 0x00, //    ###########   
+	0x07, 0xF0, 0x00, //      #######     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5040 'f' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0xFC, 0x00, //        #######   
+	0x03, 0xFC, 0x00, //       ########   
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x3F, 0xF8, 0x00, //   ###########    
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x3F, 0xF0, 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, //                  
+
+	// @5112 'g' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xDE, 0x00, //      ##### ####  
+	0x1F, 0xFE, 0x00, //    ############  
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x07, 0xD8, 0x00, //      ##### ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x38, 0x00, //           ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x0F, 0xC0, 0x00, //     ######       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5184 'h' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x78, 0x00, 0x00, //  ####            
+	0x78, 0x00, 0x00, //  ####            
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x1B, 0xE0, 0x00, //    ## #####      
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5256 'i' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0x80, 0x00, //    ######        
+	0x1F, 0x80, 0x00, //    ######        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5328 'j' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0xC0, 0x00, //         ##       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1F, 0xF0, 0x00, //    #########     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x30, 0x00, //           ##     
+	0x00, 0x70, 0x00, //          ###     
+	0x1F, 0xE0, 0x00, //    ########      
+	0x1F, 0x80, 0x00, //    ######        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5400 'k' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3C, 0x00, 0x00, //   ####           
+	0x3C, 0x00, 0x00, //   ####           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0xF8, 0x00, //     ##  #####    
+	0x0C, 0xF8, 0x00, //     ##  #####    
+	0x0C, 0xC0, 0x00, //     ##  ##       
+	0x0D, 0x80, 0x00, //     ## ##        
+	0x0F, 0x80, 0x00, //     #####        
+	0x0F, 0x00, 0x00, //     ####         
+	0x0F, 0x80, 0x00, //     #####        
+	0x0D, 0xC0, 0x00, //     ## ###       
+	0x0C, 0xE0, 0x00, //     ##  ###      
+	0x3C, 0x7C, 0x00, //   ####   #####   
+	0x3C, 0x7C, 0x00, //   ####   #####   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5472 'l' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0x80, 0x00, //    ######        
+	0x1F, 0x80, 0x00, //    ######        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x3F, 0xFC, 0x00, //   ############   
+	0x3F, 0xFC, 0x00, //   ############   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5544 'm' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0xF7, 0x78, 0x00, // #### ### ####    
+	0xFF, 0xFC, 0x00, // ##############   
+	0x39, 0xCC, 0x00, //   ###  ###  ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0x31, 0x8C, 0x00, //   ##   ##   ##   
+	0xFD, 0xEF, 0x00, // ###### #### #### 
+	0xFD, 0xEF, 0x00, // ###### #### #### 
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5616 'n' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7B, 0xE0, 0x00, //  #### #####      
+	0x7F, 0xF0, 0x00, //  ###########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x7E, 0x7E, 0x00, //  ######  ######  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5688 'o' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x03, 0xC0, 0x00, //       ####       
+	0x0F, 0xF0, 0x00, //     ########     
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x30, 0x0C, 0x00, //   ##        ##   
+	0x38, 0x1C, 0x00, //   ###      ###   
+	0x1C, 0x38, 0x00, //    ###    ###    
+	0x0F, 0xF0, 0x00, //     ########     
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5760 'p' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7B, 0xE0, 0x00, //  #### #####      
+	0x7F, 0xF8, 0x00, //  ############    
+	0x1C, 0x18, 0x00, //    ###     ##    
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x1C, 0x18, 0x00, //    ###     ##    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1B, 0xE0, 0x00, //    ## #####      
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x18, 0x00, 0x00, //    ##            
+	0x7F, 0x00, 0x00, //  #######         
+	0x7F, 0x00, 0x00, //  #######         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5832 'q' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xDE, 0x00, //      ##### ####  
+	0x1F, 0xFE, 0x00, //    ############  
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x30, 0x18, 0x00, //   ##       ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x07, 0xD8, 0x00, //      ##### ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0x18, 0x00, //            ##    
+	0x00, 0xFE, 0x00, //         #######  
+	0x00, 0xFE, 0x00, //         #######  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @5904 'r' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3E, 0x78, 0x00, //   #####  ####    
+	0x3E, 0xFC, 0x00, //   ##### ######   
+	0x07, 0xCC, 0x00, //      #####  ##   
+	0x07, 0x00, 0x00, //      ###         
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x06, 0x00, 0x00, //      ##          
+	0x3F, 0xF0, 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, //                  
+
+	// @5976 's' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0xF8, 0x00, //      ########    
+	0x0F, 0xF8, 0x00, //     #########    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x1F, 0x80, 0x00, //    ######        
+	0x0F, 0xF0, 0x00, //     ########     
+	0x00, 0xF8, 0x00, //         #####    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x1F, 0xF0, 0x00, //    #########     
+	0x1F, 0xE0, 0x00, //    ########      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6048 't' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x3F, 0xF0, 0x00, //   ##########     
+	0x3F, 0xF0, 0x00, //   ##########     
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x00, 0x00, //     ##           
+	0x0C, 0x1C, 0x00, //     ##     ###   
+	0x07, 0xFC, 0x00, //      #########   
+	0x03, 0xF0, 0x00, //       ######     
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6120 'u' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x78, 0x78, 0x00, //  ####    ####    
+	0x78, 0x78, 0x00, //  ####    ####    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x38, 0x00, //    ##     ###    
+	0x0F, 0xFE, 0x00, //     ###########  
+	0x07, 0xDE, 0x00, //      ##### ####  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6192 'v' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7C, 0x3E, 0x00, //  #####    #####  
+	0x7C, 0x3E, 0x00, //  #####    #####  
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x18, 0x18, 0x00, //    ##      ##    
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x07, 0xE0, 0x00, //      ######      
+	0x03, 0xC0, 0x00, //       ####       
+	0x03, 0xC0, 0x00, //       ####       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6264 'w' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x78, 0x3C, 0x00, //  ####     ####   
+	0x78, 0x3C, 0x00, //  ####     ####   
+	0x31, 0x18, 0x00, //   ##   #   ##    
+	0x33, 0x98, 0x00, //   ##  ###  ##    
+	0x33, 0x98, 0x00, //   ##  ###  ##    
+	0x1A, 0xB0, 0x00, //    ## # # ##     
+	0x1E, 0xF0, 0x00, //    #### ####     
+	0x1E, 0xF0, 0x00, //    #### ####     
+	0x1C, 0x60, 0x00, //    ###   ##      
+	0x0C, 0x60, 0x00, //     ##   ##      
+	0x0C, 0x60, 0x00, //     ##   ##      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6336 'x' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x3E, 0x7C, 0x00, //   #####  #####   
+	0x3E, 0x7C, 0x00, //   #####  #####   
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x03, 0xC0, 0x00, //       ####       
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0xC0, 0x00, //       ####       
+	0x06, 0x60, 0x00, //      ##  ##      
+	0x0C, 0x30, 0x00, //     ##    ##     
+	0x3E, 0x7C, 0x00, //   #####  #####   
+	0x3E, 0x7C, 0x00, //   #####  #####   
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6408 'y' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x7E, 0x1F, 0x00, //  ######    ##### 
+	0x7E, 0x1F, 0x00, //  ######    ##### 
+	0x18, 0x0C, 0x00, //    ##       ##   
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x06, 0x30, 0x00, //      ##   ##     
+	0x03, 0x60, 0x00, //       ## ##      
+	0x03, 0xE0, 0x00, //       #####      
+	0x01, 0xC0, 0x00, //        ###       
+	0x00, 0xC0, 0x00, //         ##       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x3F, 0xC0, 0x00, //   ########       
+	0x3F, 0xC0, 0x00, //   ########       
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6480 'z' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x18, 0x30, 0x00, //    ##     ##     
+	0x18, 0x60, 0x00, //    ##    ##      
+	0x00, 0xC0, 0x00, //         ##       
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x00, 0x00, //       ##         
+	0x06, 0x18, 0x00, //      ##    ##    
+	0x0C, 0x18, 0x00, //     ##     ##    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x1F, 0xF8, 0x00, //    ##########    
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6552 '{' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0xE0, 0x00, //         ###      
+	0x01, 0xE0, 0x00, //        ####      
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x03, 0x80, 0x00, //       ###        
+	0x07, 0x00, 0x00, //      ###         
+	0x03, 0x80, 0x00, //       ###        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0xE0, 0x00, //        ####      
+	0x00, 0xE0, 0x00, //         ###      
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6624 '|' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6696 '}' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x07, 0x00, 0x00, //      ###         
+	0x07, 0x80, 0x00, //      ####        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0xC0, 0x00, //        ###       
+	0x00, 0xE0, 0x00, //         ###      
+	0x01, 0xC0, 0x00, //        ###       
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x01, 0x80, 0x00, //        ##        
+	0x07, 0x80, 0x00, //      ####        
+	0x07, 0x00, 0x00, //      ###         
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+
+	// @6768 '~' (17 pixels wide)
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x00, 0x00, 0x00, //                  
+	0x0E, 0x00, 0x00, //     ###          
+	0x1F, 0x18, 0x00, //    #####   ##    
+	0x3B, 0xB8, 0x00, //   ### ### ###    
+	0x31, 0xF0, 0x00, //   ##   #####     
+	0x00, 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, //                  
+};
+
+sFONT Font24 = {
+  Font24_Table,
+  17, /* Width */
+  24, /* Height */
+};
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Functions
+  * @{
+  */
+    
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a font8.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/font8.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,1084 @@
+/**
+  ******************************************************************************
+  * @file    Font8.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   This file provides text Font8 for STM32xx-EVAL's LCD driver. 
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @brief      This file provides text Font8 for STM32xx-EVAL's LCD driver. 
+  * @{
+  */  
+
+/** @defgroup FONTS_Private_Types
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Defines
+  * @{
+  */
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Macros
+  * @{
+  */
+/**
+  * @}
+  */ 
+  
+
+/** @defgroup FONTS_Private_Variables
+  * @{
+  */
+// 
+//  Font data for Courier New 12pt
+// 
+
+const uint8_t Font8_Table[] = 
+{
+	// @0 ' ' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @8 '!' (5 pixels wide)
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @16 '"' (5 pixels wide)
+	0x50, //  # # 
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @24 '#' (5 pixels wide)
+	0x28, //   # #
+	0x50, //  # # 
+	0xF8, // #####
+	0x50, //  # # 
+	0xF8, // #####
+	0x50, //  # # 
+	0xA0, // # #  
+	0x00, //      
+
+	// @32 '$' (5 pixels wide)
+	0x20, //   #  
+	0x30, //   ## 
+	0x60, //  ##  
+	0x30, //   ## 
+	0x10, //    # 
+	0x60, //  ##  
+	0x20, //   #  
+	0x00, //      
+
+	// @40 '%' (5 pixels wide)
+	0x20, //   #  
+	0x20, //   #  
+	0x18, //    ##
+	0x60, //  ##  
+	0x10, //    # 
+	0x10, //    # 
+	0x00, //      
+	0x00, //      
+
+	// @48 '&' (5 pixels wide)
+	0x00, //      
+	0x38, //   ###
+	0x20, //   #  
+	0x60, //  ##  
+	0x50, //  # # 
+	0x78, //  ####
+	0x00, //      
+	0x00, //      
+
+	// @56 ''' (5 pixels wide)
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @64 '(' (5 pixels wide)
+	0x10, //    # 
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x10, //    # 
+	0x00, //      
+
+	// @72 ')' (5 pixels wide)
+	0x40, //  #   
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x40, //  #   
+	0x00, //      
+
+	// @80 '*' (5 pixels wide)
+	0x20, //   #  
+	0x70, //  ### 
+	0x20, //   #  
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @88 '+' (5 pixels wide)
+	0x00, //      
+	0x20, //   #  
+	0x20, //   #  
+	0xF8, // #####
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @96 ',' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x10, //    # 
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+
+	// @104 '-' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @112 '.' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @120 '/' (5 pixels wide)
+	0x10, //    # 
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x40, //  #   
+	0x40, //  #   
+	0x80, // #    
+	0x00, //      
+
+	// @128 '0' (5 pixels wide)
+	0x20, //   #  
+	0x50, //  # # 
+	0x50, //  # # 
+	0x50, //  # # 
+	0x50, //  # # 
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @136 '1' (5 pixels wide)
+	0x60, //  ##  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0xF8, // #####
+	0x00, //      
+	0x00, //      
+
+	// @144 '2' (5 pixels wide)
+	0x20, //   #  
+	0x50, //  # # 
+	0x20, //   #  
+	0x20, //   #  
+	0x40, //  #   
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @152 '3' (5 pixels wide)
+	0x20, //   #  
+	0x50, //  # # 
+	0x10, //    # 
+	0x20, //   #  
+	0x10, //    # 
+	0x60, //  ##  
+	0x00, //      
+	0x00, //      
+
+	// @160 '4' (5 pixels wide)
+	0x10, //    # 
+	0x30, //   ## 
+	0x50, //  # # 
+	0x78, //  ####
+	0x10, //    # 
+	0x38, //   ###
+	0x00, //      
+	0x00, //      
+
+	// @168 '5' (5 pixels wide)
+	0x70, //  ### 
+	0x40, //  #   
+	0x60, //  ##  
+	0x10, //    # 
+	0x50, //  # # 
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @176 '6' (5 pixels wide)
+	0x30, //   ## 
+	0x40, //  #   
+	0x60, //  ##  
+	0x50, //  # # 
+	0x50, //  # # 
+	0x60, //  ##  
+	0x00, //      
+	0x00, //      
+
+	// @184 '7' (5 pixels wide)
+	0x70, //  ### 
+	0x50, //  # # 
+	0x10, //    # 
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @192 '8' (5 pixels wide)
+	0x20, //   #  
+	0x50, //  # # 
+	0x20, //   #  
+	0x50, //  # # 
+	0x50, //  # # 
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @200 '9' (5 pixels wide)
+	0x30, //   ## 
+	0x50, //  # # 
+	0x50, //  # # 
+	0x30, //   ## 
+	0x10, //    # 
+	0x60, //  ##  
+	0x00, //      
+	0x00, //      
+
+	// @208 ':' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @216 ';' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x10, //    # 
+	0x00, //      
+	0x10, //    # 
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @224 '<' (5 pixels wide)
+	0x00, //      
+	0x10, //    # 
+	0x20, //   #  
+	0xC0, // ##   
+	0x20, //   #  
+	0x10, //    # 
+	0x00, //      
+	0x00, //      
+
+	// @232 '=' (5 pixels wide)
+	0x00, //      
+	0x70, //  ### 
+	0x00, //      
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @240 '>' (5 pixels wide)
+	0x00, //      
+	0x40, //  #   
+	0x20, //   #  
+	0x18, //    ##
+	0x20, //   #  
+	0x40, //  #   
+	0x00, //      
+	0x00, //      
+
+	// @248 '?' (5 pixels wide)
+	0x20, //   #  
+	0x50, //  # # 
+	0x10, //    # 
+	0x20, //   #  
+	0x00, //      
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @256 '@' (5 pixels wide)
+	0x30, //   ## 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x58, //  # ##
+	0x48, //  #  #
+	0x40, //  #   
+	0x38, //   ###
+	0x00, //      
+
+	// @264 'A' (5 pixels wide)
+	0x60, //  ##  
+	0x20, //   #  
+	0x50, //  # # 
+	0x70, //  ### 
+	0x88, // #   #
+	0xD8, // ## ##
+	0x00, //      
+	0x00, //      
+
+	// @272 'B' (5 pixels wide)
+	0xF0, // #### 
+	0x48, //  #  #
+	0x70, //  ### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0xF0, // #### 
+	0x00, //      
+	0x00, //      
+
+	// @280 'C' (5 pixels wide)
+	0x70, //  ### 
+	0x50, //  # # 
+	0x40, //  #   
+	0x40, //  #   
+	0x40, //  #   
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @288 'D' (5 pixels wide)
+	0xF0, // #### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0xF0, // #### 
+	0x00, //      
+	0x00, //      
+
+	// @296 'E' (5 pixels wide)
+	0xF8, // #####
+	0x48, //  #  #
+	0x60, //  ##  
+	0x40, //  #   
+	0x48, //  #  #
+	0xF8, // #####
+	0x00, //      
+	0x00, //      
+
+	// @304 'F' (5 pixels wide)
+	0xF8, // #####
+	0x48, //  #  #
+	0x60, //  ##  
+	0x40, //  #   
+	0x40, //  #   
+	0xE0, // ###  
+	0x00, //      
+	0x00, //      
+
+	// @312 'G' (5 pixels wide)
+	0x70, //  ### 
+	0x40, //  #   
+	0x40, //  #   
+	0x58, //  # ##
+	0x50, //  # # 
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @320 'H' (5 pixels wide)
+	0xE8, // ### #
+	0x48, //  #  #
+	0x78, //  ####
+	0x48, //  #  #
+	0x48, //  #  #
+	0xE8, // ### #
+	0x00, //      
+	0x00, //      
+
+	// @328 'I' (5 pixels wide)
+	0x70, //  ### 
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @336 'J' (5 pixels wide)
+	0x38, //   ###
+	0x10, //    # 
+	0x10, //    # 
+	0x50, //  # # 
+	0x50, //  # # 
+	0x20, //   #  
+	0x00, //      
+	0x00, //      
+
+	// @344 'K' (5 pixels wide)
+	0xD8, // ## ##
+	0x50, //  # # 
+	0x60, //  ##  
+	0x70, //  ### 
+	0x50, //  # # 
+	0xD8, // ## ##
+	0x00, //      
+	0x00, //      
+
+	// @352 'L' (5 pixels wide)
+	0xE0, // ###  
+	0x40, //  #   
+	0x40, //  #   
+	0x40, //  #   
+	0x48, //  #  #
+	0xF8, // #####
+	0x00, //      
+	0x00, //      
+
+	// @360 'M' (5 pixels wide)
+	0xD8, // ## ##
+	0xD8, // ## ##
+	0xD8, // ## ##
+	0xA8, // # # #
+	0x88, // #   #
+	0xD8, // ## ##
+	0x00, //      
+	0x00, //      
+
+	// @368 'N' (5 pixels wide)
+	0xD8, // ## ##
+	0x68, //  ## #
+	0x68, //  ## #
+	0x58, //  # ##
+	0x58, //  # ##
+	0xE8, // ### #
+	0x00, //      
+	0x00, //      
+
+	// @376 'O' (5 pixels wide)
+	0x30, //   ## 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @384 'P' (5 pixels wide)
+	0xF0, // #### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x70, //  ### 
+	0x40, //  #   
+	0xE0, // ###  
+	0x00, //      
+	0x00, //      
+
+	// @392 'Q' (5 pixels wide)
+	0x30, //   ## 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x30, //   ## 
+	0x18, //    ##
+	0x00, //      
+
+	// @400 'R' (5 pixels wide)
+	0xF0, // #### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x70, //  ### 
+	0x48, //  #  #
+	0xE8, // ### #
+	0x00, //      
+	0x00, //      
+
+	// @408 'S' (5 pixels wide)
+	0x70, //  ### 
+	0x50, //  # # 
+	0x20, //   #  
+	0x10, //    # 
+	0x50, //  # # 
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @416 'T' (5 pixels wide)
+	0xF8, // #####
+	0xA8, // # # #
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @424 'U' (5 pixels wide)
+	0xD8, // ## ##
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x48, //  #  #
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @432 'V' (5 pixels wide)
+	0xD8, // ## ##
+	0x88, // #   #
+	0x48, //  #  #
+	0x50, //  # # 
+	0x50, //  # # 
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @440 'W' (5 pixels wide)
+	0xD8, // ## ##
+	0x88, // #   #
+	0xA8, // # # #
+	0xA8, // # # #
+	0xA8, // # # #
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+
+	// @448 'X' (5 pixels wide)
+	0xD8, // ## ##
+	0x50, //  # # 
+	0x20, //   #  
+	0x20, //   #  
+	0x50, //  # # 
+	0xD8, // ## ##
+	0x00, //      
+	0x00, //      
+
+	// @456 'Y' (5 pixels wide)
+	0xD8, // ## ##
+	0x88, // #   #
+	0x50, //  # # 
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @464 'Z' (5 pixels wide)
+	0x78, //  ####
+	0x48, //  #  #
+	0x10, //    # 
+	0x20, //   #  
+	0x48, //  #  #
+	0x78, //  ####
+	0x00, //      
+	0x00, //      
+
+	// @472 '[' (5 pixels wide)
+	0x30, //   ## 
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x30, //   ## 
+	0x00, //      
+
+	// @480 '\' (5 pixels wide)
+	0x80, // #    
+	0x40, //  #   
+	0x40, //  #   
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x10, //    # 
+	0x00, //      
+
+	// @488 ']' (5 pixels wide)
+	0x60, //  ##  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x60, //  ##  
+	0x00, //      
+
+	// @496 '^' (5 pixels wide)
+	0x20, //   #  
+	0x20, //   #  
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @504 '_' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0xF8, // #####
+
+	// @512 '`' (5 pixels wide)
+	0x20, //   #  
+	0x10, //    # 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x00, //      
+
+	// @520 'a' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x30, //   ## 
+	0x10, //    # 
+	0x70, //  ### 
+	0x78, //  ####
+	0x00, //      
+	0x00, //      
+
+	// @528 'b' (5 pixels wide)
+	0xC0, // ##   
+	0x40, //  #   
+	0x70, //  ### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0xF0, // #### 
+	0x00, //      
+	0x00, //      
+
+	// @536 'c' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x70, //  ### 
+	0x40, //  #   
+	0x40, //  #   
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @544 'd' (5 pixels wide)
+	0x18, //    ##
+	0x08, //     #
+	0x38, //   ###
+	0x48, //  #  #
+	0x48, //  #  #
+	0x38, //   ###
+	0x00, //      
+	0x00, //      
+
+	// @552 'e' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x70, //  ### 
+	0x70, //  ### 
+	0x40, //  #   
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @560 'f' (5 pixels wide)
+	0x10, //    # 
+	0x20, //   #  
+	0x70, //  ### 
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @568 'g' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x38, //   ###
+	0x48, //  #  #
+	0x48, //  #  #
+	0x38, //   ###
+	0x08, //     #
+	0x30, //   ## 
+
+	// @576 'h' (5 pixels wide)
+	0xC0, // ##   
+	0x40, //  #   
+	0x70, //  ### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0xE8, // ### #
+	0x00, //      
+	0x00, //      
+
+	// @584 'i' (5 pixels wide)
+	0x20, //   #  
+	0x00, //      
+	0x60, //  ##  
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @592 'j' (5 pixels wide)
+	0x20, //   #  
+	0x00, //      
+	0x70, //  ### 
+	0x10, //    # 
+	0x10, //    # 
+	0x10, //    # 
+	0x10, //    # 
+	0x70, //  ### 
+
+	// @600 'k' (5 pixels wide)
+	0xC0, // ##   
+	0x40, //  #   
+	0x58, //  # ##
+	0x70, //  ### 
+	0x50, //  # # 
+	0xD8, // ## ##
+	0x00, //      
+	0x00, //      
+
+	// @608 'l' (5 pixels wide)
+	0x60, //  ##  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @616 'm' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xD0, // ## # 
+	0xA8, // # # #
+	0xA8, // # # #
+	0xA8, // # # #
+	0x00, //      
+	0x00, //      
+
+	// @624 'n' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xF0, // #### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0xC8, // ##  #
+	0x00, //      
+	0x00, //      
+
+	// @632 'o' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x30, //   ## 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @640 'p' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xF0, // #### 
+	0x48, //  #  #
+	0x48, //  #  #
+	0x70, //  ### 
+	0x40, //  #   
+	0xE0, // ###  
+
+	// @648 'q' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x38, //   ###
+	0x48, //  #  #
+	0x48, //  #  #
+	0x38, //   ###
+	0x08, //     #
+	0x18, //    ##
+
+	// @656 'r' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x78, //  ####
+	0x20, //   #  
+	0x20, //   #  
+	0x70, //  ### 
+	0x00, //      
+	0x00, //      
+
+	// @664 's' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x30, //   ## 
+	0x20, //   #  
+	0x10, //    # 
+	0x60, //  ##  
+	0x00, //      
+	0x00, //      
+
+	// @672 't' (5 pixels wide)
+	0x00, //      
+	0x40, //  #   
+	0xF0, // #### 
+	0x40, //  #   
+	0x48, //  #  #
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @680 'u' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xD8, // ## ##
+	0x48, //  #  #
+	0x48, //  #  #
+	0x38, //   ###
+	0x00, //      
+	0x00, //      
+
+	// @688 'v' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xC8, // ##  #
+	0x48, //  #  #
+	0x30, //   ## 
+	0x30, //   ## 
+	0x00, //      
+	0x00, //      
+
+	// @696 'w' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xD8, // ## ##
+	0xA8, // # # #
+	0xA8, // # # #
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+
+	// @704 'x' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x48, //  #  #
+	0x30, //   ## 
+	0x30, //   ## 
+	0x48, //  #  #
+	0x00, //      
+	0x00, //      
+
+	// @712 'y' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0xD8, // ## ##
+	0x50, //  # # 
+	0x50, //  # # 
+	0x20, //   #  
+	0x20, //   #  
+	0x60, //  ##  
+
+	// @720 'z' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x78, //  ####
+	0x50, //  # # 
+	0x28, //   # #
+	0x78, //  ####
+	0x00, //      
+	0x00, //      
+
+	// @728 '{' (5 pixels wide)
+	0x10, //    # 
+	0x20, //   #  
+	0x20, //   #  
+	0x60, //  ##  
+	0x20, //   #  
+	0x20, //   #  
+	0x10, //    # 
+	0x00, //      
+
+	// @736 '|' (5 pixels wide)
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x20, //   #  
+	0x00, //      
+
+	// @744 '}' (5 pixels wide)
+	0x40, //  #   
+	0x20, //   #  
+	0x20, //   #  
+	0x30, //   ## 
+	0x20, //   #  
+	0x20, //   #  
+	0x40, //  #   
+	0x00, //      
+
+	// @752 '~' (5 pixels wide)
+	0x00, //      
+	0x00, //      
+	0x00, //      
+	0x28, //   # #
+	0x50, //  # # 
+	0x00, //      
+	0x00, //      
+	0x00, //      
+};
+
+sFONT Font8 = {
+  Font8_Table,
+  5, /* Width */
+  8, /* Height */
+};
+
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Function_Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+
+/** @defgroup FONTS_Private_Functions
+  * @{
+  */
+    
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */  
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a fonts.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fonts.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,134 @@
+/**
+  ******************************************************************************
+  * @file    fonts.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    18-February-2014
+  * @brief   Header for fonts.c file
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FONTS_H
+#define __FONTS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h>
+
+/** @addtogroup Utilities
+  * @{
+  */
+  
+/** @addtogroup STM32_EVAL
+  * @{
+  */ 
+
+/** @addtogroup Common
+  * @{
+  */
+
+/** @addtogroup FONTS
+  * @{
+  */ 
+
+/** @defgroup FONTS_Exported_Types
+  * @{
+  */ 
+typedef struct _tFont
+{    
+  const uint8_t *table;
+  uint16_t Width;
+  uint16_t Height;
+  
+} sFONT;
+
+extern sFONT Font24;
+extern sFONT Font20;
+extern sFONT Font16;
+extern sFONT Font12;
+extern sFONT Font8;
+/**
+  * @}
+  */ 
+
+/** @defgroup FONTS_Exported_Constants
+  * @{
+  */ 
+#define LINE(x) ((x) * (((sFONT *)BSP_LCD_GetFont())->Height))
+
+/**
+  * @}
+  */ 
+
+/** @defgroup FONTS_Exported_Macros
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup FONTS_Exported_Functions
+  * @{
+  */ 
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+  
+#endif /* __FONTS_H */
+ 
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */      
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a ft5336.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ft5336.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,625 @@
+/**
+  ******************************************************************************
+  * @file    ft5336.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file provides a set of functions needed to manage the FT5336
+  *          touch screen devices.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "ft5336.h"
+
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup Component
+  * @{
+  */
+
+/** @defgroup FT5336
+  * @{
+  */
+
+/* Private typedef -----------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Types_Definitions
+  * @{
+  */
+
+/* Private define ------------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Defines
+  * @{
+  */
+
+/* Private macro -------------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Macros
+  * @{
+  */
+
+/* Private variables ---------------------------------------------------------*/
+
+/** @defgroup FT5336_Private_Variables
+  * @{
+  */
+
+/* Touch screen driver structure initialization */
+TS_DrvTypeDef ft5336_ts_drv =
+{
+  ft5336_Init,
+  ft5336_ReadID,
+  ft5336_Reset,
+
+  ft5336_TS_Start,
+  ft5336_TS_DetectTouch,
+  ft5336_TS_GetXY,
+
+  ft5336_TS_EnableIT,
+  ft5336_TS_ClearIT,
+  ft5336_TS_ITStatus,
+  ft5336_TS_DisableIT
+
+};
+
+/* Global ft5336 handle */
+static ft5336_handle_TypeDef ft5336_handle = { FT5336_I2C_NOT_INITIALIZED, 0, 0};
+
+/**
+  * @}
+  */
+
+/** @defgroup ft5336_Private_Function_Prototypes
+  * @{
+  */
+
+/* Private functions prototypes-----------------------------------------------*/
+
+/**
+  * @brief  Return the status of I2C was initialized or not.
+  * @param  None.
+  * @retval : I2C initialization status.
+  */
+static uint8_t ft5336_Get_I2C_InitializedStatus(void);
+
+/**
+  * @brief  I2C initialize if needed.
+  * @param  None.
+  * @retval : None.
+  */
+static void ft5336_I2C_InitializeIfRequired(void);
+
+/**
+  * @brief  Basic static configuration of TouchScreen
+  * @param  DeviceAddr: FT5336 Device address for communication on I2C Bus.
+  * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
+  */
+static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr);
+
+/** @defgroup ft5336_Private_Functions
+  * @{
+  */
+
+/** @defgroup ft5336_Public_Function_Body
+  * @{
+  */
+
+/* Public functions bodies-----------------------------------------------*/
+
+
+/**
+  * @brief  Initialize the ft5336 communication bus
+  *         from MCU to FT5336 : ie I2C channel initialization (if required).
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @retval None
+  */
+void ft5336_Init(uint16_t DeviceAddr)
+{
+  /* Wait at least 200ms after power up before accessing registers
+   * Trsi timing (Time of starting to report point after resetting) from FT5336GQQ datasheet */
+  TS_IO_Delay(200);
+
+  /* Initialize I2C link if needed */
+  ft5336_I2C_InitializeIfRequired();
+}
+
+/**
+  * @brief  Software Reset the ft5336.
+  *         @note : Not applicable to FT5336.
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @retval None
+  */
+void ft5336_Reset(uint16_t DeviceAddr)
+{
+  /* Do nothing */
+  /* No software reset sequence available in FT5336 IC */
+}
+
+/**
+  * @brief  Read the ft5336 device ID, pre initialize I2C in case of need to be
+  *         able to read the FT5336 device ID, and verify this is a FT5336.
+  * @param  DeviceAddr: I2C FT5336 Slave address.
+  * @retval The Device ID (two bytes).
+  */
+uint16_t ft5336_ReadID(uint16_t DeviceAddr)
+{
+  volatile uint8_t ucReadId = 0;
+  uint8_t nbReadAttempts = 0;
+  uint8_t bFoundDevice = 0; /* Device not found by default */
+
+  /* Initialize I2C link if needed */
+  ft5336_I2C_InitializeIfRequired();
+
+  /* At maximum 4 attempts to read ID : exit at first finding of the searched device ID */
+  for(nbReadAttempts = 0; ((nbReadAttempts < 3) && !(bFoundDevice)); nbReadAttempts++)
+  {
+    /* Read register FT5336_CHIP_ID_REG as DeviceID detection */
+    ucReadId = TS_IO_Read(DeviceAddr, FT5336_CHIP_ID_REG);
+
+    /* Found the searched device ID ? */
+    if(ucReadId == FT5336_ID_VALUE)
+    {
+      /* Set device as found */
+      bFoundDevice = 1;
+    }
+  }
+
+  /* Return the device ID value */
+  return (ucReadId);
+}
+
+/**
+  * @brief  Configures the touch Screen IC device to start detecting touches
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address).
+  * @retval None.
+  */
+void ft5336_TS_Start(uint16_t DeviceAddr)
+{
+  /* Minimum static configuration of FT5336 */
+  FT5336_ASSERT(ft5336_TS_Configure(DeviceAddr));
+
+  /* By default set FT5336 IC in Polling mode : no INT generation on FT5336 for new touch available */
+  /* Note TS_INT is active low                                                                      */
+  ft5336_TS_DisableIT(DeviceAddr);
+}
+
+/**
+  * @brief  Return if there is touches detected or not.
+  *         Try to detect new touches and forget the old ones (reset internal global
+  *         variables).
+  * @param  DeviceAddr: Device address on communication Bus.
+  * @retval : Number of active touches detected (can be 0, 1 or 2).
+  */
+uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr)
+{
+  volatile uint8_t nbTouch = 0;
+
+  /* Read register FT5336_TD_STAT_REG to check number of touches detection */
+  nbTouch = TS_IO_Read(DeviceAddr, FT5336_TD_STAT_REG);
+  nbTouch &= FT5336_TD_STAT_MASK;
+
+  if(nbTouch > FT5336_MAX_DETECTABLE_TOUCH)
+  {
+    /* If invalid number of touch detected, set it to zero */
+    nbTouch = 0;
+  }
+
+  /* Update ft5336 driver internal global : current number of active touches */
+  ft5336_handle.currActiveTouchNb = nbTouch;
+
+  /* Reset current active touch index on which to work on */
+  ft5336_handle.currActiveTouchIdx = 0;
+
+  return(nbTouch);
+}
+
+/**
+  * @brief  Get the touch screen X and Y positions values
+  *         Manage multi touch thanks to touch Index global
+  *         variable 'ft5336_handle.currActiveTouchIdx'.
+  * @param  DeviceAddr: Device address on communication Bus.
+  * @param  X: Pointer to X position value
+  * @param  Y: Pointer to Y position value
+  * @retval None.
+  */
+void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y)
+{
+  volatile uint8_t ucReadData = 0;
+  static uint16_t coord;
+  uint8_t regAddressXLow = 0;
+  uint8_t regAddressXHigh = 0;
+  uint8_t regAddressYLow = 0;
+  uint8_t regAddressYHigh = 0;
+
+  if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb)
+  {
+    switch(ft5336_handle.currActiveTouchIdx)
+    {
+    case 0 :
+      regAddressXLow  = FT5336_P1_XL_REG;
+      regAddressXHigh = FT5336_P1_XH_REG;
+      regAddressYLow  = FT5336_P1_YL_REG;
+      regAddressYHigh = FT5336_P1_YH_REG;
+      break;
+
+    case 1 :
+      regAddressXLow  = FT5336_P2_XL_REG;
+      regAddressXHigh = FT5336_P2_XH_REG;
+      regAddressYLow  = FT5336_P2_YL_REG;
+      regAddressYHigh = FT5336_P2_YH_REG;
+      break;
+
+    case 2 :
+      regAddressXLow  = FT5336_P3_XL_REG;
+      regAddressXHigh = FT5336_P3_XH_REG;
+      regAddressYLow  = FT5336_P3_YL_REG;
+      regAddressYHigh = FT5336_P3_YH_REG;
+      break;
+
+    case 3 :
+      regAddressXLow  = FT5336_P4_XL_REG;
+      regAddressXHigh = FT5336_P4_XH_REG;
+      regAddressYLow  = FT5336_P4_YL_REG;
+      regAddressYHigh = FT5336_P4_YH_REG;
+      break;
+
+    case 4 :
+      regAddressXLow  = FT5336_P5_XL_REG;
+      regAddressXHigh = FT5336_P5_XH_REG;
+      regAddressYLow  = FT5336_P5_YL_REG;
+      regAddressYHigh = FT5336_P5_YH_REG;
+      break;
+
+    case 5 :
+      regAddressXLow  = FT5336_P6_XL_REG;
+      regAddressXHigh = FT5336_P6_XH_REG;
+      regAddressYLow  = FT5336_P6_YL_REG;
+      regAddressYHigh = FT5336_P6_YH_REG;
+      break;
+
+    case 6 :
+      regAddressXLow  = FT5336_P7_XL_REG;
+      regAddressXHigh = FT5336_P7_XH_REG;
+      regAddressYLow  = FT5336_P7_YL_REG;
+      regAddressYHigh = FT5336_P7_YH_REG;
+      break;
+
+    case 7 :
+      regAddressXLow  = FT5336_P8_XL_REG;
+      regAddressXHigh = FT5336_P8_XH_REG;
+      regAddressYLow  = FT5336_P8_YL_REG;
+      regAddressYHigh = FT5336_P8_YH_REG;
+      break;
+
+    case 8 :
+      regAddressXLow  = FT5336_P9_XL_REG;
+      regAddressXHigh = FT5336_P9_XH_REG;
+      regAddressYLow  = FT5336_P9_YL_REG;
+      regAddressYHigh = FT5336_P9_YH_REG;
+      break;
+
+    case 9 :
+      regAddressXLow  = FT5336_P10_XL_REG;
+      regAddressXHigh = FT5336_P10_XH_REG;
+      regAddressYLow  = FT5336_P10_YL_REG;
+      regAddressYHigh = FT5336_P10_YH_REG;
+      break;
+
+    default :
+      break;
+
+    } /* end switch(ft5336_handle.currActiveTouchIdx) */
+
+    /* Read low part of X position */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressXLow);
+    coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
+
+    /* Read high part of X position */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
+    coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
+
+    /* Send back ready X position to caller */
+    *X = coord;
+
+    /* Read low part of Y position */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressYLow);
+    coord = (ucReadData & FT5336_TOUCH_POS_LSB_MASK) >> FT5336_TOUCH_POS_LSB_SHIFT;
+
+    /* Read high part of Y position */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressYHigh);
+    coord |= ((ucReadData & FT5336_TOUCH_POS_MSB_MASK) >> FT5336_TOUCH_POS_MSB_SHIFT) << 8;
+
+    /* Send back ready Y position to caller */
+    *Y = coord;
+
+    ft5336_handle.currActiveTouchIdx++; /* next call will work on next touch */
+
+  } /* of if(ft5336_handle.currActiveTouchIdx < ft5336_handle.currActiveTouchNb) */
+}
+
+/**
+  * @brief  Configure the FT5336 device to generate IT on given INT pin
+  *         connected to MCU as EXTI.
+  * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+  * @retval None
+  */
+void ft5336_TS_EnableIT(uint16_t DeviceAddr)
+{
+   uint8_t regValue = 0;
+   regValue = (FT5336_G_MODE_INTERRUPT_TRIGGER & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
+
+   /* Set interrupt trigger mode in FT5336_GMODE_REG */
+   TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
+}
+
+/**
+  * @brief  Configure the FT5336 device to stop generating IT on the given INT pin
+  *         connected to MCU as EXTI.
+  * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+  * @retval None
+  */
+void ft5336_TS_DisableIT(uint16_t DeviceAddr)
+{
+  uint8_t regValue = 0;
+  regValue = (FT5336_G_MODE_INTERRUPT_POLLING & (FT5336_G_MODE_INTERRUPT_MASK >> FT5336_G_MODE_INTERRUPT_SHIFT)) << FT5336_G_MODE_INTERRUPT_SHIFT;
+
+  /* Set interrupt polling mode in FT5336_GMODE_REG */
+  TS_IO_Write(DeviceAddr, FT5336_GMODE_REG, regValue);
+}
+
+/**
+  * @brief  Get IT status from FT5336 interrupt status registers
+  *         Should be called Following an EXTI coming to the MCU to know the detailed
+  *         reason of the interrupt.
+  *         @note : This feature is not applicable to FT5336.
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @retval TS interrupts status : always return 0 here
+  */
+uint8_t ft5336_TS_ITStatus(uint16_t DeviceAddr)
+{
+  /* Always return 0 as feature not applicable to FT5336 */
+  return 0;
+}
+
+/**
+  * @brief  Clear IT status in FT5336 interrupt status clear registers
+  *         Should be called Following an EXTI coming to the MCU.
+  *         @note : This feature is not applicable to FT5336.
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @retval None
+  */
+void ft5336_TS_ClearIT(uint16_t DeviceAddr)
+{
+  /* Nothing to be done here for FT5336 */
+}
+
+/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+/**
+  * @brief  Get the last touch gesture identification (zoom, move up/down...).
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @param  pGestureId : Pointer to get last touch gesture Identification.
+  * @retval None.
+  */
+void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId)
+{
+  volatile uint8_t ucReadData = 0;
+
+  ucReadData = TS_IO_Read(DeviceAddr, FT5336_GEST_ID_REG);
+
+  * pGestureId = ucReadData;
+}
+
+/**
+  * @brief  Get the touch detailed informations on touch number 'touchIdx' (0..1)
+  *         This touch detailed information contains :
+  *         - weight that was applied to this touch
+  *         - sub-area of the touch in the touch panel
+  *         - event of linked to the touch (press down, lift up, ...)
+  * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+  * @param  touchIdx : Passed index of the touch (0..1) on which we want to get the
+  *                    detailed information.
+  * @param  pWeight : Pointer to to get the weight information of 'touchIdx'.
+  * @param  pArea   : Pointer to to get the sub-area information of 'touchIdx'.
+  * @param  pEvent  : Pointer to to get the event information of 'touchIdx'.
+
+  * @retval None.
+  */
+void ft5336_TS_GetTouchInfo(uint16_t   DeviceAddr,
+                            uint32_t   touchIdx,
+                            uint32_t * pWeight,
+                            uint32_t * pArea,
+                            uint32_t * pEvent)
+{
+  volatile uint8_t ucReadData = 0;
+  uint8_t regAddressXHigh = 0;
+  uint8_t regAddressPWeight = 0;
+  uint8_t regAddressPMisc = 0;
+
+  if(touchIdx < ft5336_handle.currActiveTouchNb)
+  {
+    switch(touchIdx)
+    {
+    case 0 :
+      regAddressXHigh   = FT5336_P1_XH_REG;
+      regAddressPWeight = FT5336_P1_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P1_MISC_REG;
+      break;
+
+    case 1 :
+      regAddressXHigh   = FT5336_P2_XH_REG;
+      regAddressPWeight = FT5336_P2_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P2_MISC_REG;
+      break;
+
+    case 2 :
+      regAddressXHigh   = FT5336_P3_XH_REG;
+      regAddressPWeight = FT5336_P3_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P3_MISC_REG;
+      break;
+
+    case 3 :
+      regAddressXHigh   = FT5336_P4_XH_REG;
+      regAddressPWeight = FT5336_P4_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P4_MISC_REG;
+      break;
+
+    case 4 :
+      regAddressXHigh   = FT5336_P5_XH_REG;
+      regAddressPWeight = FT5336_P5_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P5_MISC_REG;
+      break;
+
+    case 5 :
+      regAddressXHigh   = FT5336_P6_XH_REG;
+      regAddressPWeight = FT5336_P6_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P6_MISC_REG;
+      break;
+
+    case 6 :
+      regAddressXHigh   = FT5336_P7_XH_REG;
+      regAddressPWeight = FT5336_P7_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P7_MISC_REG;
+      break;
+
+    case 7 :
+      regAddressXHigh   = FT5336_P8_XH_REG;
+      regAddressPWeight = FT5336_P8_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P8_MISC_REG;
+      break;
+
+    case 8 :
+      regAddressXHigh   = FT5336_P9_XH_REG;
+      regAddressPWeight = FT5336_P9_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P9_MISC_REG;
+      break;
+
+    case 9 :
+      regAddressXHigh   = FT5336_P10_XH_REG;
+      regAddressPWeight = FT5336_P10_WEIGHT_REG;
+      regAddressPMisc   = FT5336_P10_MISC_REG;
+      break;
+
+    default :
+      break;
+
+    } /* end switch(touchIdx) */
+
+    /* Read Event Id of touch index */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressXHigh);
+    * pEvent = (ucReadData & FT5336_TOUCH_EVT_FLAG_MASK) >> FT5336_TOUCH_EVT_FLAG_SHIFT;
+
+    /* Read weight of touch index */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressPWeight);
+    * pWeight = (ucReadData & FT5336_TOUCH_WEIGHT_MASK) >> FT5336_TOUCH_WEIGHT_SHIFT;
+
+    /* Read area of touch index */
+    ucReadData = TS_IO_Read(DeviceAddr, regAddressPMisc);
+    * pArea = (ucReadData & FT5336_TOUCH_AREA_MASK) >> FT5336_TOUCH_AREA_SHIFT;
+
+  } /* of if(touchIdx < ft5336_handle.currActiveTouchNb) */
+}
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/** @defgroup ft5336_Static_Function_Body
+  * @{
+  */
+
+/* Static functions bodies-----------------------------------------------*/
+
+
+/**
+  * @brief  Return the status of I2C was initialized or not.
+  * @param  None.
+  * @retval : I2C initialization status.
+  */
+static uint8_t ft5336_Get_I2C_InitializedStatus(void)
+{
+  return(ft5336_handle.i2cInitialized);
+}
+
+/**
+  * @brief  I2C initialize if needed.
+  * @param  None.
+  * @retval : None.
+  */
+static void ft5336_I2C_InitializeIfRequired(void)
+{
+  if(ft5336_Get_I2C_InitializedStatus() == FT5336_I2C_NOT_INITIALIZED)
+  {
+    /* Initialize TS IO BUS layer (I2C) */
+    TS_IO_Init();
+
+    /* Set state to initialized */
+    ft5336_handle.i2cInitialized = FT5336_I2C_INITIALIZED;
+  }
+}
+
+/**
+  * @brief  Basic static configuration of TouchScreen
+  * @param  DeviceAddr: FT5336 Device address for communication on I2C Bus.
+  * @retval Status FT5336_STATUS_OK or FT5336_STATUS_NOT_OK.
+  */
+static uint32_t ft5336_TS_Configure(uint16_t DeviceAddr)
+{
+  uint32_t status = FT5336_STATUS_OK;
+
+  /* Nothing special to be done for FT5336 */
+
+  return(status);
+}
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a ft5336.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ft5336.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,540 @@
+/**
+  ******************************************************************************
+  * @file    ft5336.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains all the functions prototypes for the
+  *          ft5336.c Touch screen driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FT5336_H
+#define __FT5336_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Set Multi-touch as supported */
+#if !defined(TS_MONO_TOUCH_SUPPORTED)
+#define TS_MULTI_TOUCH_SUPPORTED        1
+#endif /* TS_MONO_TOUCH_SUPPORTED */
+
+/* Includes ------------------------------------------------------------------*/
+#include "ts.h"
+
+/* Macros --------------------------------------------------------------------*/
+
+#if defined(FT5336_ENABLE_ASSERT)
+/* Assert activated */
+#define FT5336_ASSERT(__condition__)      do { if(__condition__) \
+                                               {  \
+                                                 while(1);  \
+                                               } \
+                                          }while(0)
+#else
+/* Assert not activated : macro has no effect */
+#define FT5336_ASSERT(__condition__)    do { if(__condition__) \
+                                             {  \
+                                                ;  \
+                                             } \
+                                            }while(0)
+#endif /* FT5336_ENABLE_ASSERT == 1 */
+
+/** @typedef ft5336_handle_TypeDef
+ *  ft5336 Handle definition.
+ */
+typedef struct
+{
+  uint8_t i2cInitialized;
+
+  /* field holding the current number of simultaneous active touches */
+  uint8_t currActiveTouchNb;
+
+  /* field holding the touch index currently managed */
+  uint8_t currActiveTouchIdx;
+
+} ft5336_handle_TypeDef;
+
+  /** @addtogroup BSP
+   * @{
+   */
+
+  /** @addtogroup Component
+   * @{
+   */
+
+  /** @defgroup FT5336
+   * @{
+   */
+
+  /* Exported types ------------------------------------------------------------*/
+
+  /** @defgroup FT5336_Exported_Types
+   * @{
+   */
+
+  /* Exported constants --------------------------------------------------------*/
+
+  /** @defgroup FT5336_Exported_Constants
+   * @{
+   */
+
+  /* I2C Slave address of touchscreen FocalTech FT5336 */
+#define FT5336_I2C_SLAVE_ADDRESS            ((uint8_t)0x70)
+
+  /* Maximum border values of the touchscreen pad */
+#define FT5336_MAX_WIDTH                    ((uint16_t)480)     /* Touchscreen pad max width   */
+#define FT5336_MAX_HEIGHT                   ((uint16_t)272)     /* Touchscreen pad max height  */
+
+  /* Possible values of driver functions return status */
+#define FT5336_STATUS_OK                    ((uint8_t)0x00)
+#define FT5336_STATUS_NOT_OK                ((uint8_t)0x01)
+
+  /* Possible values of global variable 'TS_I2C_Initialized' */
+#define FT5336_I2C_NOT_INITIALIZED          ((uint8_t)0x00)
+#define FT5336_I2C_INITIALIZED              ((uint8_t)0x01)
+
+  /* Max detectable simultaneous touches */
+#define FT5336_MAX_DETECTABLE_TOUCH         ((uint8_t)0x05)
+
+  /**
+   * @brief : Definitions for FT5336 I2C register addresses on 8 bit
+   **/
+
+  /* Current mode register of the FT5336 (R/W) */
+#define FT5336_DEV_MODE_REG                 ((uint8_t)0x00)
+
+  /* Possible values of FT5336_DEV_MODE_REG */
+#define FT5336_DEV_MODE_WORKING             ((uint8_t)0x00)
+#define FT5336_DEV_MODE_FACTORY             ((uint8_t)0x04)
+
+#define FT5336_DEV_MODE_MASK                ((uint8_t)0x07)
+#define FT5336_DEV_MODE_SHIFT               ((uint8_t)0x04)
+
+  /* Gesture ID register */
+#define FT5336_GEST_ID_REG                  ((uint8_t)0x01)
+
+  /* Possible values of FT5336_GEST_ID_REG */
+#define FT5336_GEST_ID_NO_GESTURE           ((uint8_t)0x00)
+#define FT5336_GEST_ID_MOVE_UP              ((uint8_t)0x10)
+#define FT5336_GEST_ID_MOVE_RIGHT           ((uint8_t)0x14)
+#define FT5336_GEST_ID_MOVE_DOWN            ((uint8_t)0x18)
+#define FT5336_GEST_ID_MOVE_LEFT            ((uint8_t)0x1C)
+#define FT5336_GEST_ID_SINGLE_CLICK         ((uint8_t)0x20)
+#define FT5336_GEST_ID_DOUBLE_CLICK         ((uint8_t)0x22)
+#define FT5336_GEST_ID_ROTATE_CLOCKWISE     ((uint8_t)0x28)
+#define FT5336_GEST_ID_ROTATE_C_CLOCKWISE   ((uint8_t)0x29)
+#define FT5336_GEST_ID_ZOOM_IN              ((uint8_t)0x40)
+#define FT5336_GEST_ID_ZOOM_OUT             ((uint8_t)0x49)
+
+  /* Touch Data Status register : gives number of active touch points (0..5) */
+#define FT5336_TD_STAT_REG                  ((uint8_t)0x02)
+
+  /* Values related to FT5336_TD_STAT_REG */
+#define FT5336_TD_STAT_MASK                 ((uint8_t)0x0F)
+#define FT5336_TD_STAT_SHIFT                ((uint8_t)0x00)
+
+  /* Values Pn_XH and Pn_YH related */
+#define FT5336_TOUCH_EVT_FLAG_PRESS_DOWN    ((uint8_t)0x00)
+#define FT5336_TOUCH_EVT_FLAG_LIFT_UP       ((uint8_t)0x01)
+#define FT5336_TOUCH_EVT_FLAG_CONTACT       ((uint8_t)0x02)
+#define FT5336_TOUCH_EVT_FLAG_NO_EVENT      ((uint8_t)0x03)
+
+#define FT5336_TOUCH_EVT_FLAG_SHIFT         ((uint8_t)0x06)
+#define FT5336_TOUCH_EVT_FLAG_MASK          ((uint8_t)(3 << FT5336_TOUCH_EVT_FLAG_SHIFT))
+
+#define FT5336_TOUCH_POS_MSB_MASK           ((uint8_t)0x0F)
+#define FT5336_TOUCH_POS_MSB_SHIFT          ((uint8_t)0x00)
+
+  /* Values Pn_XL and Pn_YL related */
+#define FT5336_TOUCH_POS_LSB_MASK           ((uint8_t)0xFF)
+#define FT5336_TOUCH_POS_LSB_SHIFT          ((uint8_t)0x00)
+
+#define FT5336_P1_XH_REG                    ((uint8_t)0x03)
+#define FT5336_P1_XL_REG                    ((uint8_t)0x04)
+#define FT5336_P1_YH_REG                    ((uint8_t)0x05)
+#define FT5336_P1_YL_REG                    ((uint8_t)0x06)
+
+/* Touch Pressure register value (R) */
+#define FT5336_P1_WEIGHT_REG                ((uint8_t)0x07)
+
+/* Values Pn_WEIGHT related  */
+#define FT5336_TOUCH_WEIGHT_MASK            ((uint8_t)0xFF)
+#define FT5336_TOUCH_WEIGHT_SHIFT           ((uint8_t)0x00)
+
+/* Touch area register */
+#define FT5336_P1_MISC_REG                  ((uint8_t)0x08)
+
+/* Values related to FT5336_Pn_MISC_REG */
+#define FT5336_TOUCH_AREA_MASK              ((uint8_t)(0x04 << 4))
+#define FT5336_TOUCH_AREA_SHIFT             ((uint8_t)0x04)
+
+#define FT5336_P2_XH_REG                    ((uint8_t)0x09)
+#define FT5336_P2_XL_REG                    ((uint8_t)0x0A)
+#define FT5336_P2_YH_REG                    ((uint8_t)0x0B)
+#define FT5336_P2_YL_REG                    ((uint8_t)0x0C)
+#define FT5336_P2_WEIGHT_REG                ((uint8_t)0x0D)
+#define FT5336_P2_MISC_REG                  ((uint8_t)0x0E)
+
+#define FT5336_P3_XH_REG                    ((uint8_t)0x0F)
+#define FT5336_P3_XL_REG                    ((uint8_t)0x10)
+#define FT5336_P3_YH_REG                    ((uint8_t)0x11)
+#define FT5336_P3_YL_REG                    ((uint8_t)0x12)
+#define FT5336_P3_WEIGHT_REG                ((uint8_t)0x13)
+#define FT5336_P3_MISC_REG                  ((uint8_t)0x14)
+
+#define FT5336_P4_XH_REG                    ((uint8_t)0x15)
+#define FT5336_P4_XL_REG                    ((uint8_t)0x16)
+#define FT5336_P4_YH_REG                    ((uint8_t)0x17)
+#define FT5336_P4_YL_REG                    ((uint8_t)0x18)
+#define FT5336_P4_WEIGHT_REG                ((uint8_t)0x19)
+#define FT5336_P4_MISC_REG                  ((uint8_t)0x1A)
+
+#define FT5336_P5_XH_REG                    ((uint8_t)0x1B)
+#define FT5336_P5_XL_REG                    ((uint8_t)0x1C)
+#define FT5336_P5_YH_REG                    ((uint8_t)0x1D)
+#define FT5336_P5_YL_REG                    ((uint8_t)0x1E)
+#define FT5336_P5_WEIGHT_REG                ((uint8_t)0x1F)
+#define FT5336_P5_MISC_REG                  ((uint8_t)0x20)
+
+#define FT5336_P6_XH_REG                    ((uint8_t)0x21)
+#define FT5336_P6_XL_REG                    ((uint8_t)0x22)
+#define FT5336_P6_YH_REG                    ((uint8_t)0x23)
+#define FT5336_P6_YL_REG                    ((uint8_t)0x24)
+#define FT5336_P6_WEIGHT_REG                ((uint8_t)0x25)
+#define FT5336_P6_MISC_REG                  ((uint8_t)0x26)
+
+#define FT5336_P7_XH_REG                    ((uint8_t)0x27)
+#define FT5336_P7_XL_REG                    ((uint8_t)0x28)
+#define FT5336_P7_YH_REG                    ((uint8_t)0x29)
+#define FT5336_P7_YL_REG                    ((uint8_t)0x2A)
+#define FT5336_P7_WEIGHT_REG                ((uint8_t)0x2B)
+#define FT5336_P7_MISC_REG                  ((uint8_t)0x2C)
+
+#define FT5336_P8_XH_REG                    ((uint8_t)0x2D)
+#define FT5336_P8_XL_REG                    ((uint8_t)0x2E)
+#define FT5336_P8_YH_REG                    ((uint8_t)0x2F)
+#define FT5336_P8_YL_REG                    ((uint8_t)0x30)
+#define FT5336_P8_WEIGHT_REG                ((uint8_t)0x31)
+#define FT5336_P8_MISC_REG                  ((uint8_t)0x32)
+
+#define FT5336_P9_XH_REG                    ((uint8_t)0x33)
+#define FT5336_P9_XL_REG                    ((uint8_t)0x34)
+#define FT5336_P9_YH_REG                    ((uint8_t)0x35)
+#define FT5336_P9_YL_REG                    ((uint8_t)0x36)
+#define FT5336_P9_WEIGHT_REG                ((uint8_t)0x37)
+#define FT5336_P9_MISC_REG                  ((uint8_t)0x38)
+
+#define FT5336_P10_XH_REG                   ((uint8_t)0x39)
+#define FT5336_P10_XL_REG                   ((uint8_t)0x3A)
+#define FT5336_P10_YH_REG                   ((uint8_t)0x3B)
+#define FT5336_P10_YL_REG                   ((uint8_t)0x3C)
+#define FT5336_P10_WEIGHT_REG               ((uint8_t)0x3D)
+#define FT5336_P10_MISC_REG                 ((uint8_t)0x3E)
+
+  /* Threshold for touch detection */
+#define FT5336_TH_GROUP_REG                 ((uint8_t)0x80)
+
+  /* Values FT5336_TH_GROUP_REG : threshold related  */
+#define FT5336_THRESHOLD_MASK               ((uint8_t)0xFF)
+#define FT5336_THRESHOLD_SHIFT              ((uint8_t)0x00)
+
+  /* Filter function coefficients */
+#define FT5336_TH_DIFF_REG                  ((uint8_t)0x85)
+
+  /* Control register */
+#define FT5336_CTRL_REG                     ((uint8_t)0x86)
+
+  /* Values related to FT5336_CTRL_REG */
+
+  /* Will keep the Active mode when there is no touching */
+#define FT5336_CTRL_KEEP_ACTIVE_MODE        ((uint8_t)0x00)
+
+  /* Switching from Active mode to Monitor mode automatically when there is no touching */
+#define FT5336_CTRL_KEEP_AUTO_SWITCH_MONITOR_MODE  ((uint8_t)0x01
+
+  /* The time period of switching from Active mode to Monitor mode when there is no touching */
+#define FT5336_TIMEENTERMONITOR_REG         ((uint8_t)0x87)
+
+  /* Report rate in Active mode */
+#define FT5336_PERIODACTIVE_REG             ((uint8_t)0x88)
+
+  /* Report rate in Monitor mode */
+#define FT5336_PERIODMONITOR_REG            ((uint8_t)0x89)
+
+  /* The value of the minimum allowed angle while Rotating gesture mode */
+#define FT5336_RADIAN_VALUE_REG             ((uint8_t)0x91)
+
+  /* Maximum offset while Moving Left and Moving Right gesture */
+#define FT5336_OFFSET_LEFT_RIGHT_REG        ((uint8_t)0x92)
+
+  /* Maximum offset while Moving Up and Moving Down gesture */
+#define FT5336_OFFSET_UP_DOWN_REG           ((uint8_t)0x93)
+
+  /* Minimum distance while Moving Left and Moving Right gesture */
+#define FT5336_DISTANCE_LEFT_RIGHT_REG      ((uint8_t)0x94)
+
+  /* Minimum distance while Moving Up and Moving Down gesture */
+#define FT5336_DISTANCE_UP_DOWN_REG         ((uint8_t)0x95)
+
+  /* Maximum distance while Zoom In and Zoom Out gesture */
+#define FT5336_DISTANCE_ZOOM_REG            ((uint8_t)0x96)
+
+  /* High 8-bit of LIB Version info */
+#define FT5336_LIB_VER_H_REG                ((uint8_t)0xA1)
+
+  /* Low 8-bit of LIB Version info */
+#define FT5336_LIB_VER_L_REG                ((uint8_t)0xA2)
+
+  /* Chip Selecting */
+#define FT5336_CIPHER_REG                   ((uint8_t)0xA3)
+
+  /* Interrupt mode register (used when in interrupt mode) */
+#define FT5336_GMODE_REG                    ((uint8_t)0xA4)
+
+#define FT5336_G_MODE_INTERRUPT_MASK        ((uint8_t)0x03)
+#define FT5336_G_MODE_INTERRUPT_SHIFT       ((uint8_t)0x00)
+
+  /* Possible values of FT5336_GMODE_REG */
+#define FT5336_G_MODE_INTERRUPT_POLLING     ((uint8_t)0x00)
+#define FT5336_G_MODE_INTERRUPT_TRIGGER     ((uint8_t)0x01)
+
+  /* Current power mode the FT5336 system is in (R) */
+#define FT5336_PWR_MODE_REG                 ((uint8_t)0xA5)
+
+  /* FT5336 firmware version */
+#define FT5336_FIRMID_REG                   ((uint8_t)0xA6)
+
+  /* FT5336 Chip identification register */
+#define FT5336_CHIP_ID_REG                  ((uint8_t)0xA8)
+
+  /*  Possible values of FT5336_CHIP_ID_REG */
+#define FT5336_ID_VALUE                     ((uint8_t)0x51)
+
+  /* Release code version */
+#define FT5336_RELEASE_CODE_ID_REG          ((uint8_t)0xAF)
+
+  /* Current operating mode the FT5336 system is in (R) */
+#define FT5336_STATE_REG                    ((uint8_t)0xBC)
+
+  /**
+   * @}
+   */
+
+  /* Exported macro ------------------------------------------------------------*/
+
+  /** @defgroup ft5336_Exported_Macros
+   * @{
+   */
+
+  /* Exported functions --------------------------------------------------------*/
+
+  /** @defgroup ft5336_Exported_Functions
+   * @{
+   */
+
+  /**
+   * @brief ft5336 Control functions
+   */
+
+
+/**
+ * @brief  Initialize the ft5336 communication bus
+ *         from MCU to FT5336 : ie I2C channel initialization (if required).
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Init(uint16_t DeviceAddr);
+
+/**
+ * @brief  Software Reset the ft5336.
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval None
+ */
+void ft5336_Reset(uint16_t DeviceAddr);
+
+/**
+ * @brief  Read the ft5336 device ID, pre initialize I2C in case of need to be
+ *         able to read the FT5336 device ID, and verify this is a FT5336.
+ * @param  DeviceAddr: I2C FT5336 Slave address.
+ * @retval The Device ID (two bytes).
+ */
+uint16_t ft5336_ReadID(uint16_t DeviceAddr);
+
+/**
+ * @brief  Configures the touch Screen IC device to start detecting touches
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address).
+ * @retval None.
+ */
+void ft5336_TS_Start(uint16_t DeviceAddr);
+
+/**
+ * @brief  Return if there is touches detected or not.
+ *         Try to detect new touches and forget the old ones (reset internal global
+ *         variables).
+ * @param  DeviceAddr: Device address on communication Bus.
+ * @retval : Number of active touches detected (can be 0, 1 or 2).
+ */
+uint8_t ft5336_TS_DetectTouch(uint16_t DeviceAddr);
+
+/**
+ * @brief  Get the touch screen X and Y positions values
+ *         Manage multi touch thanks to touch Index global
+ *         variable 'ft5336_handle.currActiveTouchIdx'.
+ * @param  DeviceAddr: Device address on communication Bus.
+ * @param  X: Pointer to X position value
+ * @param  Y: Pointer to Y position value
+ * @retval None.
+ */
+void ft5336_TS_GetXY(uint16_t DeviceAddr, uint16_t *X, uint16_t *Y);
+
+/**
+ * @brief  Configure the FT5336 device to generate IT on given INT pin
+ *         connected to MCU as EXTI.
+ * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_EnableIT(uint16_t DeviceAddr);
+
+/**
+ * @brief  Configure the FT5336 device to stop generating IT on the given INT pin
+ *         connected to MCU as EXTI.
+ * @param  DeviceAddr: Device address on communication Bus (Slave I2C address of FT5336).
+ * @retval None
+ */
+void ft5336_TS_DisableIT(uint16_t DeviceAddr);
+
+/**
+ * @brief  Get IT status from FT5336 interrupt status registers
+ *         Should be called Following an EXTI coming to the MCU to know the detailed
+ *         reason of the interrupt.
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval TS interrupts status
+ */
+uint8_t ft5336_TS_ITStatus (uint16_t DeviceAddr);
+
+/**
+ * @brief  Clear IT status in FT5336 interrupt status clear registers
+ *         Should be called Following an EXTI coming to the MCU.
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @retval TS interrupts status
+ */
+void ft5336_TS_ClearIT (uint16_t DeviceAddr);
+
+/**** NEW FEATURES enabled when Multi-touch support is enabled ****/
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+/**
+ * @brief  Get the last touch gesture identification (zoom, move up/down...).
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param  pGestureId : Pointer to get last touch gesture Identification.
+ * @retval None.
+ */
+void ft5336_TS_GetGestureID(uint16_t DeviceAddr, uint32_t * pGestureId);
+
+/**
+ * @brief  Get the touch detailed informations on touch number 'touchIdx' (0..1)
+ *         This touch detailed information contains :
+ *         - weight that was applied to this touch
+ *         - sub-area of the touch in the touch panel
+ *         - event of linked to the touch (press down, lift up, ...)
+ * @param  DeviceAddr: Device address on communication Bus (I2C slave address of FT5336).
+ * @param  touchIdx : Passed index of the touch (0..1) on which we want to get the
+ *                    detailed information.
+ * @param  pWeight : Pointer to to get the weight information of 'touchIdx'.
+ * @param  pArea   : Pointer to to get the sub-area information of 'touchIdx'.
+ * @param  pEvent  : Pointer to to get the event information of 'touchIdx'.
+
+ * @retval None.
+ */
+void ft5336_TS_GetTouchInfo(uint16_t   DeviceAddr,
+                            uint32_t   touchIdx,
+                            uint32_t * pWeight,
+                            uint32_t * pArea,
+                            uint32_t * pEvent);
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/* Imported TS IO functions --------------------------------------------------------*/
+
+/** @defgroup ft5336_Imported_Functions
+ * @{
+ */
+
+/* TouchScreen (TS) external IO functions */
+extern void     TS_IO_Init(void);
+extern void    TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+extern uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg);
+extern void    TS_IO_Delay(uint32_t Delay);
+
+  /**
+   * @}
+   */
+
+  /* Imported global variables --------------------------------------------------------*/
+
+  /** @defgroup ft5336_Imported_Globals
+   * @{
+   */
+
+
+/* Touch screen driver structure */
+extern TS_DrvTypeDef ft5336_ts_drv;
+
+  /**
+   * @}
+   */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __FT5336_H */
+
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a rk043fn48h.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rk043fn48h.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,121 @@
+/**
+  ******************************************************************************
+  * @file    rk043fn48h.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains all the constants parameters for the RK043FN48H-CT672B
+  *          LCD component.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __RK043FN48H_H
+#define __RK043FN48H_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 
+
+/* Includes ------------------------------------------------------------------*/  
+
+/** @addtogroup BSP
+  * @{
+  */ 
+
+/** @addtogroup Components
+  * @{
+  */ 
+  
+/** @addtogroup rk043fn48h
+  * @{
+  */
+
+/** @defgroup RK043FN48H_Exported_Types
+  * @{
+  */
+   
+/**
+  * @}
+  */ 
+
+/** @defgroup RK043FN48H_Exported_Constants
+  * @{
+  */
+
+/** 
+  * @brief  RK043FN48H Size  
+  */     
+#define  RK043FN48H_WIDTH    ((uint16_t)480)          /* LCD PIXEL WIDTH            */
+#define  RK043FN48H_HEIGHT   ((uint16_t)272)          /* LCD PIXEL HEIGHT           */
+
+/** 
+  * @brief  RK043FN48H Timing  
+  */     
+#define  RK043FN48H_HSYNC            ((uint16_t)41)   /* Horizontal synchronization */
+#define  RK043FN48H_HBP              ((uint16_t)13)   /* Horizontal back porch      */
+#define  RK043FN48H_HFP              ((uint16_t)32)   /* Horizontal front porch     */
+#define  RK043FN48H_VSYNC            ((uint16_t)10)   /* Vertical synchronization   */
+#define  RK043FN48H_VBP              ((uint16_t)2)    /* Vertical back porch        */
+#define  RK043FN48H_VFP              ((uint16_t)2)    /* Vertical front porch       */
+
+/** 
+  * @brief  RK043FN48H frequency divider  
+  */    
+#define  RK043FN48H_FREQUENCY_DIVIDER    5            /* LCD Frequency divider      */
+/**
+  * @}
+  */
+  
+/** @defgroup RK043FN48H_Exported_Functions
+  * @{
+  */
+
+/**
+  * @}
+  */    
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __RK043FN48H_H */
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,903 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file provides a set of firmware functions to manage LEDs, 
+  *          push-buttons and COM ports available on STM32746G-Discovery
+  *          board(MB1191) from STMicroelectronics.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery.h"
+
+// mbed function to replace HAL_Delay function
+void wait_ms(int ms);
+
+/** @addtogroup BSP
+  * @{
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL STM32746G_DISCOVERY_LOW_LEVEL
+  * @{
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_TypesDefinitions STM32746G_DISCOVERY_LOW_LEVEL Private Types Definitions
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Defines STM32746G_DISCOVERY_LOW_LEVEL Private Defines
+  * @{
+  */
+/**
+ * @brief STM32746G DISCOVERY BSP Driver version number V1.0.0
+   */
+#define __STM32746G_DISCO_BSP_VERSION_MAIN   (0x01) /*!< [31:24] main version */
+#define __STM32746G_DISCO_BSP_VERSION_SUB1   (0x00) /*!< [23:16] sub1 version */
+#define __STM32746G_DISCO_BSP_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
+#define __STM32746G_DISCO_BSP_VERSION_RC     (0x00) /*!< [7:0]  release candidate */
+#define __STM32746G_DISCO_BSP_VERSION         ((__STM32746G_DISCO_BSP_VERSION_MAIN << 24)\
+                                             |(__STM32746G_DISCO_BSP_VERSION_SUB1 << 16)\
+                                             |(__STM32746G_DISCO_BSP_VERSION_SUB2 << 8 )\
+                                             |(__STM32746G_DISCO_BSP_VERSION_RC))
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Macros STM32746G_DISCOVERY_LOW_LEVEL Private Macros
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_Variables STM32746G_DISCOVERY_LOW_LEVEL Private Variables
+  * @{
+  */
+
+const uint32_t GPIO_PIN[LEDn] = {LED1_PIN};
+
+GPIO_TypeDef* BUTTON_PORT[BUTTONn] = {WAKEUP_BUTTON_GPIO_PORT,
+                                      TAMPER_BUTTON_GPIO_PORT,
+                                      KEY_BUTTON_GPIO_PORT};
+
+const uint16_t BUTTON_PIN[BUTTONn] = {WAKEUP_BUTTON_PIN,
+                                      TAMPER_BUTTON_PIN,
+                                      KEY_BUTTON_PIN};
+
+const uint16_t BUTTON_IRQn[BUTTONn] = {WAKEUP_BUTTON_EXTI_IRQn,
+                                       TAMPER_BUTTON_EXTI_IRQn,
+                                       KEY_BUTTON_EXTI_IRQn};
+
+USART_TypeDef* COM_USART[COMn] = {DISCOVERY_COM1};
+
+GPIO_TypeDef* COM_TX_PORT[COMn] = {DISCOVERY_COM1_TX_GPIO_PORT};
+
+GPIO_TypeDef* COM_RX_PORT[COMn] = {DISCOVERY_COM1_RX_GPIO_PORT};
+
+const uint16_t COM_TX_PIN[COMn] = {DISCOVERY_COM1_TX_PIN};
+
+const uint16_t COM_RX_PIN[COMn] = {DISCOVERY_COM1_RX_PIN};
+
+const uint16_t COM_TX_AF[COMn] = {DISCOVERY_COM1_TX_AF};
+
+const uint16_t COM_RX_AF[COMn] = {DISCOVERY_COM1_RX_AF};
+
+static I2C_HandleTypeDef hI2cAudioHandler = {0};
+static I2C_HandleTypeDef hI2cExtHandler = {0};
+
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Private_FunctionPrototypes STM32746G_DISCOVERY_LOW_LEVEL Private Function Prototypes
+  * @{
+  */
+static void     I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler);
+static void     I2Cx_Init(I2C_HandleTypeDef *i2c_handler);
+
+static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
+static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg, uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length);
+static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials);
+static void              I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr);
+
+/* AUDIO IO functions */
+void            AUDIO_IO_Init(void);
+void            AUDIO_IO_DeInit(void);
+void            AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value);
+uint16_t        AUDIO_IO_Read(uint8_t Addr, uint16_t Reg);
+void            AUDIO_IO_Delay(uint32_t Delay);
+
+/* TOUCHSCREEN IO functions */
+void            TS_IO_Init(void);
+void            TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+uint8_t         TS_IO_Read(uint8_t Addr, uint8_t Reg);
+void            TS_IO_Delay(uint32_t Delay);
+
+/* CAMERA IO functions */
+void            CAMERA_IO_Init(void);
+void            CAMERA_Delay(uint32_t Delay);
+void            CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value);
+uint8_t         CAMERA_IO_Read(uint8_t Addr, uint8_t Reg);
+
+/* I2C EEPROM IO function */
+void                EEPROM_IO_Init(void);
+HAL_StatusTypeDef   EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
+HAL_StatusTypeDef   EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize);
+HAL_StatusTypeDef   EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials);
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions STM32746G_DISCOVERY_LOW_LEVELSTM32746G_DISCOVERY_LOW_LEVEL Exported Functions
+  * @{
+  */ 
+
+  /**
+  * @brief  This method returns the STM32746G DISCOVERY BSP Driver revision
+  * @retval version: 0xXYZR (8bits for each decimal, R for RC)
+  */
+uint32_t BSP_GetVersion(void)
+{
+  return __STM32746G_DISCO_BSP_VERSION;
+}
+
+/**
+  * @brief  Configures LED on GPIO.
+  * @param  Led: LED to be configured. 
+  *          This parameter can be one of the following values:
+  *            @arg  LED1
+  * @retval None
+  */
+void BSP_LED_Init(Led_TypeDef Led)
+{
+  GPIO_InitTypeDef  gpio_init_structure;
+  GPIO_TypeDef*     gpio_led;
+
+  if (Led == DISCO_LED1)
+  {
+    gpio_led = LED1_GPIO_PORT;
+    /* Enable the GPIO_LED clock */
+    LED1_GPIO_CLK_ENABLE();
+
+    /* Configure the GPIO_LED pin */
+    gpio_init_structure.Pin = GPIO_PIN[Led];
+    gpio_init_structure.Mode = GPIO_MODE_OUTPUT_PP;
+    gpio_init_structure.Pull = GPIO_PULLUP;
+    gpio_init_structure.Speed = GPIO_SPEED_HIGH;
+  
+    HAL_GPIO_Init(gpio_led, &gpio_init_structure);
+    
+    /* By default, turn off LED */
+    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+  }
+}
+
+/**
+  * @brief  DeInit LEDs.
+  * @param  Led: LED to be configured. 
+  *          This parameter can be one of the following values:
+  *            @arg  LED1
+  * @note Led DeInit does not disable the GPIO clock
+  * @retval None
+  */
+void BSP_LED_DeInit(Led_TypeDef Led)
+{
+  GPIO_InitTypeDef  gpio_init_structure;
+  GPIO_TypeDef*     gpio_led;
+
+  if (Led == DISCO_LED1)
+  {
+    gpio_led = LED1_GPIO_PORT;
+    /* Turn off LED */
+    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+    /* Configure the GPIO_LED pin */
+    gpio_init_structure.Pin = GPIO_PIN[Led];
+    HAL_GPIO_DeInit(gpio_led, gpio_init_structure.Pin);
+  }
+}
+
+/**
+  * @brief  Turns selected LED On.
+  * @param  Led: LED to be set on 
+  *          This parameter can be one of the following values:
+  *            @arg  LED1
+  * @retval None
+  */
+void BSP_LED_On(Led_TypeDef Led)
+{
+  GPIO_TypeDef*     gpio_led;
+
+  if (Led == DISCO_LED1)	/* Switch On LED connected to GPIO */
+  {
+    gpio_led = LED1_GPIO_PORT;
+    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_SET);
+  }
+}
+
+/**
+  * @brief  Turns selected LED Off. 
+  * @param  Led: LED to be set off
+  *          This parameter can be one of the following values:
+  *            @arg  LED1
+  * @retval None
+  */
+void BSP_LED_Off(Led_TypeDef Led)
+{
+  GPIO_TypeDef*     gpio_led;
+
+  if (Led == DISCO_LED1) /* Switch Off LED connected to GPIO */
+  {
+    gpio_led = LED1_GPIO_PORT;
+    HAL_GPIO_WritePin(gpio_led, GPIO_PIN[Led], GPIO_PIN_RESET);
+  }
+}
+
+/**
+  * @brief  Toggles the selected LED.
+  * @param  Led: LED to be toggled
+  *          This parameter can be one of the following values:
+  *            @arg  LED1
+  * @retval None
+  */
+void BSP_LED_Toggle(Led_TypeDef Led)
+{
+  GPIO_TypeDef*     gpio_led;
+
+  if (Led == DISCO_LED1)	/* Toggle LED connected to GPIO */
+  {
+    gpio_led = LED1_GPIO_PORT;
+    HAL_GPIO_TogglePin(gpio_led, GPIO_PIN[Led]);
+  }
+}
+
+/**
+  * @brief  Configures button GPIO and EXTI Line.
+  * @param  Button: Button to be configured
+  *          This parameter can be one of the following values:
+  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
+  *            @arg  BUTTON_TAMPER: Tamper Push Button  
+  *            @arg  BUTTON_KEY: Key Push Button
+  * @param  ButtonMode: Button mode
+  *          This parameter can be one of the following values:
+  *            @arg  BUTTON_MODE_GPIO: Button will be used as simple IO
+  *            @arg  BUTTON_MODE_EXTI: Button will be connected to EXTI line 
+  *                                    with interrupt generation capability
+  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons)
+  *       are mapped on the same push button named "User"
+  *       on the board serigraphy.
+  * @retval None
+  */
+void BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode)
+{
+  GPIO_InitTypeDef gpio_init_structure;
+  
+  /* Enable the BUTTON clock */
+  BUTTONx_GPIO_CLK_ENABLE(Button);
+  
+  if(ButtonMode == BUTTON_MODE_GPIO)
+  {
+    /* Configure Button pin as input */
+    gpio_init_structure.Pin = BUTTON_PIN[Button];
+    gpio_init_structure.Mode = GPIO_MODE_INPUT;
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FAST;
+    HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
+  }
+  
+  if(ButtonMode == BUTTON_MODE_EXTI)
+  {
+    /* Configure Button pin as input with External interrupt */
+    gpio_init_structure.Pin = BUTTON_PIN[Button];
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FAST;
+    
+    if(Button != BUTTON_WAKEUP)
+    {
+      gpio_init_structure.Mode = GPIO_MODE_IT_FALLING; 
+    }
+    else
+    {
+      gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
+    }
+    
+    HAL_GPIO_Init(BUTTON_PORT[Button], &gpio_init_structure);
+    
+    /* Enable and set Button EXTI Interrupt to the lowest priority */
+    HAL_NVIC_SetPriority((IRQn_Type)(BUTTON_IRQn[Button]), 0x0F, 0x00);
+    HAL_NVIC_EnableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
+  }
+}
+
+/**
+  * @brief  Push Button DeInit.
+  * @param  Button: Button to be configured
+  *          This parameter can be one of the following values:
+  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
+  *            @arg  BUTTON_TAMPER: Tamper Push Button  
+  *            @arg  BUTTON_KEY: Key Push Button
+  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) 
+  *       are mapped on the same push button named "User"
+  *       on the board serigraphy.
+  * @note PB DeInit does not disable the GPIO clock
+  * @retval None
+  */
+void BSP_PB_DeInit(Button_TypeDef Button)
+{
+    GPIO_InitTypeDef gpio_init_structure;
+
+    gpio_init_structure.Pin = BUTTON_PIN[Button];
+    HAL_NVIC_DisableIRQ((IRQn_Type)(BUTTON_IRQn[Button]));
+    HAL_GPIO_DeInit(BUTTON_PORT[Button], gpio_init_structure.Pin);
+}
+
+
+/**
+  * @brief  Returns the selected button state.
+  * @param  Button: Button to be checked
+  *          This parameter can be one of the following values:
+  *            @arg  BUTTON_WAKEUP: Wakeup Push Button 
+  *            @arg  BUTTON_TAMPER: Tamper Push Button 
+  *            @arg  BUTTON_KEY: Key Push Button
+  * @note On STM32746G-Discovery board, the three buttons (Wakeup, Tamper and key buttons) 
+  *       are mapped on the same push button named "User"
+  *       on the board serigraphy.
+  * @retval The Button GPIO pin value
+  */
+uint32_t BSP_PB_GetState(Button_TypeDef Button)
+{
+  return HAL_GPIO_ReadPin(BUTTON_PORT[Button], BUTTON_PIN[Button]);
+}
+
+/**
+  * @brief  Configures COM port.
+  * @param  COM: COM port to be configured.
+  *          This parameter can be one of the following values:
+  *            @arg  COM1 
+  *            @arg  COM2 
+  * @param  huart: Pointer to a UART_HandleTypeDef structure that contains the
+  *                configuration information for the specified USART peripheral.
+  * @retval None
+  */
+void BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *huart)
+{
+  GPIO_InitTypeDef gpio_init_structure;
+
+  /* Enable GPIO clock */
+  DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(COM);
+  DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(COM);
+
+  /* Enable USART clock */
+  DISCOVERY_COMx_CLK_ENABLE(COM);
+
+  /* Configure USART Tx as alternate function */
+  gpio_init_structure.Pin = COM_TX_PIN[COM];
+  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+  gpio_init_structure.Speed = GPIO_SPEED_FAST;
+  gpio_init_structure.Pull = GPIO_PULLUP;
+  gpio_init_structure.Alternate = COM_TX_AF[COM];
+  HAL_GPIO_Init(COM_TX_PORT[COM], &gpio_init_structure);
+
+  /* Configure USART Rx as alternate function */
+  gpio_init_structure.Pin = COM_RX_PIN[COM];
+  gpio_init_structure.Mode = GPIO_MODE_AF_PP;
+  gpio_init_structure.Alternate = COM_RX_AF[COM];
+  HAL_GPIO_Init(COM_RX_PORT[COM], &gpio_init_structure);
+
+  /* USART configuration */
+  huart->Instance = COM_USART[COM];
+  HAL_UART_Init(huart);
+}
+
+/**
+  * @brief  DeInit COM port.
+  * @param  COM: COM port to be configured.
+  *          This parameter can be one of the following values:
+  *            @arg  COM1 
+  *            @arg  COM2 
+  * @param  huart: Pointer to a UART_HandleTypeDef structure that contains the
+  *                configuration information for the specified USART peripheral.
+  * @retval None
+  */
+void BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart)
+{
+  /* USART configuration */
+  huart->Instance = COM_USART[COM];
+  HAL_UART_DeInit(huart);
+
+  /* Enable USART clock */
+  DISCOVERY_COMx_CLK_DISABLE(COM);
+
+  /* DeInit GPIO pins can be done in the application 
+     (by surcharging this __weak function) */
+
+  /* GPIO pins clock, DMA clock can be shut down in the application 
+     by surcharging this __weak function */
+}
+
+/*******************************************************************************
+                            BUS OPERATIONS
+*******************************************************************************/
+
+/******************************* I2C Routines *********************************/
+/**
+  * @brief  Initializes I2C MSP.
+  * @param  i2c_handler : I2C handler
+  * @retval None
+  */
+static void I2Cx_MspInit(I2C_HandleTypeDef *i2c_handler)
+{
+  GPIO_InitTypeDef  gpio_init_structure;
+  
+  if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
+  {
+    /* AUDIO and LCD I2C MSP init */
+
+    /*** Configure the GPIOs ***/
+    /* Enable GPIO clock */
+    DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
+
+    /* Configure I2C Tx as alternate function */
+    gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN;
+    gpio_init_structure.Mode = GPIO_MODE_AF_OD;
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FAST;
+    gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF;
+    HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+    /* Configure I2C Rx as alternate function */
+    gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN;
+    HAL_GPIO_Init(DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+    /*** Configure the I2C peripheral ***/
+    /* Enable I2C clock */
+    DISCOVERY_AUDIO_I2Cx_CLK_ENABLE();
+
+    /* Force the I2C peripheral clock reset */
+    DISCOVERY_AUDIO_I2Cx_FORCE_RESET();
+
+    /* Release the I2C peripheral clock reset */
+    DISCOVERY_AUDIO_I2Cx_RELEASE_RESET();
+
+    /* Enable and set I2Cx Interrupt to a lower priority */
+    HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x05, 0);
+    HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_EV_IRQn);
+
+    /* Enable and set I2Cx Interrupt to a lower priority */
+    HAL_NVIC_SetPriority(DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x05, 0);
+    HAL_NVIC_EnableIRQ(DISCOVERY_AUDIO_I2Cx_ER_IRQn);
+  }
+  else
+  {
+    /* External, camera and Arduino connector I2C MSP init */
+
+    /*** Configure the GPIOs ***/
+    /* Enable GPIO clock */
+    DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE();
+
+    /* Configure I2C Tx as alternate function */
+    gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SCL_PIN;
+    gpio_init_structure.Mode = GPIO_MODE_AF_OD;
+    gpio_init_structure.Pull = GPIO_NOPULL;
+    gpio_init_structure.Speed = GPIO_SPEED_FAST;
+    gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_SDA_AF;
+    HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+    /* Configure I2C Rx as alternate function */
+    gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SDA_PIN;
+    HAL_GPIO_Init(DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure);
+
+    /*** Configure the I2C peripheral ***/
+    /* Enable I2C clock */
+    DISCOVERY_EXT_I2Cx_CLK_ENABLE();
+
+    /* Force the I2C peripheral clock reset */
+    DISCOVERY_EXT_I2Cx_FORCE_RESET();
+
+    /* Release the I2C peripheral clock reset */
+    DISCOVERY_EXT_I2Cx_RELEASE_RESET();
+
+    /* Enable and set I2Cx Interrupt to a lower priority */
+    HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_EV_IRQn, 0x05, 0);
+    HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_EV_IRQn);
+
+    /* Enable and set I2Cx Interrupt to a lower priority */
+    HAL_NVIC_SetPriority(DISCOVERY_EXT_I2Cx_ER_IRQn, 0x05, 0);
+    HAL_NVIC_EnableIRQ(DISCOVERY_EXT_I2Cx_ER_IRQn);
+  }
+}
+
+/**
+  * @brief  Initializes I2C HAL.
+  * @param  i2c_handler : I2C handler
+  * @retval None
+  */
+static void I2Cx_Init(I2C_HandleTypeDef *i2c_handler)
+{
+  if(HAL_I2C_GetState(i2c_handler) == HAL_I2C_STATE_RESET)
+  {
+    if (i2c_handler == (I2C_HandleTypeDef*)(&hI2cAudioHandler))
+    {
+      /* Audio and LCD I2C configuration */
+      i2c_handler->Instance = DISCOVERY_AUDIO_I2Cx;
+    }
+    else
+    {
+      /* External, camera and Arduino connector  I2C configuration */
+      i2c_handler->Instance = DISCOVERY_EXT_I2Cx;
+    }
+    i2c_handler->Init.Timing           = DISCOVERY_I2Cx_TIMING;
+    i2c_handler->Init.OwnAddress1      = 0;
+    i2c_handler->Init.AddressingMode   = I2C_ADDRESSINGMODE_7BIT;
+    i2c_handler->Init.DualAddressMode  = I2C_DUALADDRESS_DISABLE;
+    i2c_handler->Init.OwnAddress2      = 0;
+    i2c_handler->Init.GeneralCallMode  = I2C_GENERALCALL_DISABLE;
+    i2c_handler->Init.NoStretchMode    = I2C_NOSTRETCH_DISABLE;
+
+    /* Init the I2C */
+    I2Cx_MspInit(i2c_handler);
+    HAL_I2C_Init(i2c_handler);
+  }
+}
+
+/**
+  * @brief  Reads multiple data.
+  * @param  i2c_handler : I2C handler
+  * @param  Addr: I2C address
+  * @param  Reg: Reg address 
+  * @param  MemAddress: Memory address 
+  * @param  Buffer: Pointer to data buffer
+  * @param  Length: Length of the data
+  * @retval Number of read data
+  */
+static HAL_StatusTypeDef I2Cx_ReadMultiple(I2C_HandleTypeDef *i2c_handler,
+                                           uint8_t Addr,
+                                           uint16_t Reg,
+                                           uint16_t MemAddress,
+                                           uint8_t *Buffer,
+                                           uint16_t Length)
+{
+  HAL_StatusTypeDef status = HAL_OK;
+
+  status = HAL_I2C_Mem_Read(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
+
+  /* Check the communication status */
+  if(status != HAL_OK)
+  {
+    /* I2C error occurred */
+    I2Cx_Error(i2c_handler, Addr);
+  }
+  return status;    
+}
+
+/**
+  * @brief  Writes a value in a register of the device through BUS in using DMA mode.
+  * @param  i2c_handler : I2C handler
+  * @param  Addr: Device address on BUS Bus.  
+  * @param  Reg: The target register address to write
+  * @param  MemAddress: Memory address 
+  * @param  Buffer: The target register value to be written 
+  * @param  Length: buffer size to be written
+  * @retval HAL status
+  */
+static HAL_StatusTypeDef I2Cx_WriteMultiple(I2C_HandleTypeDef *i2c_handler,
+                                            uint8_t Addr,
+                                            uint16_t Reg,
+                                            uint16_t MemAddress,
+                                            uint8_t *Buffer,
+                                            uint16_t Length)
+{
+  HAL_StatusTypeDef status = HAL_OK;
+  
+  status = HAL_I2C_Mem_Write(i2c_handler, Addr, (uint16_t)Reg, MemAddress, Buffer, Length, 1000);
+  
+  /* Check the communication status */
+  if(status != HAL_OK)
+  {
+    /* Re-Initiaize the I2C Bus */
+    I2Cx_Error(i2c_handler, Addr);
+  }
+  return status;
+}
+
+/**
+  * @brief  Checks if target device is ready for communication. 
+  * @note   This function is used with Memory devices
+  * @param  i2c_handler : I2C handler
+  * @param  DevAddress: Target device address
+  * @param  Trials: Number of trials
+  * @retval HAL status
+  */
+static HAL_StatusTypeDef I2Cx_IsDeviceReady(I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials)
+{ 
+  return (HAL_I2C_IsDeviceReady(i2c_handler, DevAddress, Trials, 1000));
+}
+
+/**
+  * @brief  Manages error callback by re-initializing I2C.
+  * @param  i2c_handler : I2C handler
+  * @param  Addr: I2C Address
+  * @retval None
+  */
+static void I2Cx_Error(I2C_HandleTypeDef *i2c_handler, uint8_t Addr)
+{
+  /* De-initialize the I2C communication bus */
+  HAL_I2C_DeInit(i2c_handler);
+  
+  /* Re-Initialize the I2C communication bus */
+  I2Cx_Init(i2c_handler);
+}
+
+/*******************************************************************************
+                            LINK OPERATIONS
+*******************************************************************************/
+
+/********************************* LINK AUDIO *********************************/
+
+/**
+  * @brief  Initializes Audio low level.
+  * @retval None
+  */
+void AUDIO_IO_Init(void) 
+{
+  I2Cx_Init(&hI2cAudioHandler);
+}
+
+/**
+  * @brief  Deinitializes Audio low level.
+  * @retval None
+  */
+void AUDIO_IO_DeInit(void)
+{
+}
+
+/**
+  * @brief  Writes a single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Reg address 
+  * @param  Value: Data to be written
+  * @retval None
+  */
+void AUDIO_IO_Write(uint8_t Addr, uint16_t Reg, uint16_t Value)
+{
+  uint16_t tmp = Value;
+  
+  Value = ((uint16_t)(tmp >> 8) & 0x00FF);
+  
+  Value |= ((uint16_t)(tmp << 8)& 0xFF00);
+  
+  I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT,(uint8_t*)&Value, 2);
+}
+
+/**
+  * @brief  Reads a single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Reg address 
+  * @retval Data to be read
+  */
+uint16_t AUDIO_IO_Read(uint8_t Addr, uint16_t Reg)
+{
+  uint16_t read_value = 0, tmp = 0;
+  
+  I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_16BIT, (uint8_t*)&read_value, 2);
+  
+  tmp = ((uint16_t)(read_value >> 8) & 0x00FF);
+  
+  tmp |= ((uint16_t)(read_value << 8)& 0xFF00);
+  
+  read_value = tmp;
+  
+  return read_value;
+}
+
+/**
+  * @brief  AUDIO Codec delay 
+  * @param  Delay: Delay in ms
+  * @retval None
+  */
+void AUDIO_IO_Delay(uint32_t Delay)
+{
+  //HAL_Delay(Delay);
+  wait_ms(Delay);
+}
+
+/********************************* LINK CAMERA ********************************/
+
+/**
+  * @brief  Initializes Camera low level.
+  * @retval None
+  */
+void CAMERA_IO_Init(void) 
+{
+  I2Cx_Init(&hI2cExtHandler);
+}
+
+/**
+  * @brief  Camera writes single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Register address 
+  * @param  Value: Data to be written
+  * @retval None
+  */
+void CAMERA_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
+{
+  I2Cx_WriteMultiple(&hI2cExtHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
+}
+
+/**
+  * @brief  Camera reads single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Register address 
+  * @retval Read data
+  */
+uint8_t CAMERA_IO_Read(uint8_t Addr, uint8_t Reg)
+{
+  uint8_t read_value = 0;
+
+  I2Cx_ReadMultiple(&hI2cExtHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
+
+  return read_value;
+}
+
+/**
+  * @brief  Camera delay 
+  * @param  Delay: Delay in ms
+  * @retval None
+  */
+void CAMERA_Delay(uint32_t Delay)
+{
+  //HAL_Delay(Delay);
+  wait_ms(Delay);
+}
+
+/******************************** LINK I2C EEPROM *****************************/
+
+/**
+  * @brief  Initializes peripherals used by the I2C EEPROM driver.
+  * @retval None
+  */
+void EEPROM_IO_Init(void)
+{
+  I2Cx_Init(&hI2cExtHandler);
+}
+
+/**
+  * @brief  Write data to I2C EEPROM driver in using DMA channel.
+  * @param  DevAddress: Target device address
+  * @param  MemAddress: Internal memory address
+  * @param  pBuffer: Pointer to data buffer
+  * @param  BufferSize: Amount of data to be sent
+  * @retval HAL status
+  */
+HAL_StatusTypeDef EEPROM_IO_WriteData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
+{
+  return (I2Cx_WriteMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
+}
+
+/**
+  * @brief  Read data from I2C EEPROM driver in using DMA channel.
+  * @param  DevAddress: Target device address
+  * @param  MemAddress: Internal memory address
+  * @param  pBuffer: Pointer to data buffer
+  * @param  BufferSize: Amount of data to be read
+  * @retval HAL status
+  */
+HAL_StatusTypeDef EEPROM_IO_ReadData(uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize)
+{
+  return (I2Cx_ReadMultiple(&hI2cExtHandler, DevAddress, MemAddress, I2C_MEMADD_SIZE_16BIT, pBuffer, BufferSize));
+}
+
+/**
+  * @brief  Checks if target device is ready for communication. 
+  * @note   This function is used with Memory devices
+  * @param  DevAddress: Target device address
+  * @param  Trials: Number of trials
+  * @retval HAL status
+  */
+HAL_StatusTypeDef EEPROM_IO_IsDeviceReady(uint16_t DevAddress, uint32_t Trials)
+{ 
+  return (I2Cx_IsDeviceReady(&hI2cExtHandler, DevAddress, Trials));
+}
+
+/********************************* LINK TOUCHSCREEN *********************************/
+
+/**
+  * @brief  Initializes Touchscreen low level.
+  * @retval None
+  */
+void TS_IO_Init(void)
+{
+  I2Cx_Init(&hI2cAudioHandler);
+}
+
+/**
+  * @brief  Writes a single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Reg address
+  * @param  Value: Data to be written
+  * @retval None
+  */
+void TS_IO_Write(uint8_t Addr, uint8_t Reg, uint8_t Value)
+{
+  I2Cx_WriteMultiple(&hI2cAudioHandler, Addr, (uint16_t)Reg, I2C_MEMADD_SIZE_8BIT,(uint8_t*)&Value, 1);
+}
+
+/**
+  * @brief  Reads a single data.
+  * @param  Addr: I2C address
+  * @param  Reg: Reg address
+  * @retval Data to be read
+  */
+uint8_t TS_IO_Read(uint8_t Addr, uint8_t Reg)
+{
+  uint8_t read_value = 0;
+
+  I2Cx_ReadMultiple(&hI2cAudioHandler, Addr, Reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*)&read_value, 1);
+
+  return read_value;
+}
+
+/**
+  * @brief  TS delay
+  * @param  Delay: Delay in ms
+  * @retval None
+  */
+void TS_IO_Delay(uint32_t Delay)
+{
+  //HAL_Delay(Delay);
+  wait_ms(Delay);
+}
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */    
+    
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,342 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains definitions for STM32746G_DISCOVERY's LEDs,
+  *          push-buttons and COM ports hardware resources.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+  
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_H
+#define __STM32746G_DISCOVERY_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f7xx_hal.h"
+   
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+      
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL
+  * @{
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Types STM32746G_DISCOVERY_LOW_LEVEL Exported Types
+  * @{
+  */
+typedef enum 
+{
+  DISCO_LED1 = 0,
+  LED_GREEN = DISCO_LED1,
+}Led_TypeDef;
+
+typedef enum 
+{  
+  BUTTON_WAKEUP = 0,
+  BUTTON_TAMPER = 1,
+  BUTTON_KEY = 2
+}Button_TypeDef;
+
+typedef enum 
+{  
+  BUTTON_MODE_GPIO = 0,
+  BUTTON_MODE_EXTI = 1
+}ButtonMode_TypeDef;
+
+typedef enum 
+{
+  COM1 = 0,
+  COM2 = 1
+}COM_TypeDef;
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Constants STM32746G_DISCOVERY_LOW_LEVEL Exported Constants
+  * @{
+  */ 
+
+/** 
+  * @brief  Define for STM32746G_DISCOVERY board
+  */ 
+#if !defined (USE_STM32746G_DISCO)
+ #define USE_STM32746G_DISCO
+#endif
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_LED
+  * @{
+  */
+
+#define LEDn                             ((uint8_t)1)
+
+#define LED1_GPIO_PORT                   GPIOI
+#define LED1_GPIO_CLK_ENABLE()           __HAL_RCC_GPIOI_CLK_ENABLE()
+#define LED1_GPIO_CLK_DISABLE()          __HAL_RCC_GPIOI_CLK_DISABLE()
+#define LED1_PIN                         GPIO_PIN_1
+
+/**
+  * @}
+  */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_BUTTON
+  * @{
+  */ 
+#define BUTTONn                             ((uint8_t)3) 
+
+/**
+  * @brief Wakeup push-button
+  */
+#define WAKEUP_BUTTON_PIN                   GPIO_PIN_11
+#define WAKEUP_BUTTON_GPIO_PORT             GPIOI
+#define WAKEUP_BUTTON_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOI_CLK_ENABLE()
+#define WAKEUP_BUTTON_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOI_CLK_DISABLE()
+#define WAKEUP_BUTTON_EXTI_IRQn             EXTI15_10_IRQn 
+
+/**
+  * @brief Tamper push-button
+  */
+#define TAMPER_BUTTON_PIN                    GPIO_PIN_11
+#define TAMPER_BUTTON_GPIO_PORT              GPIOI
+#define TAMPER_BUTTON_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOI_CLK_ENABLE()
+#define TAMPER_BUTTON_GPIO_CLK_DISABLE()     __HAL_RCC_GPIOI_CLK_DISABLE()
+#define TAMPER_BUTTON_EXTI_IRQn              EXTI15_10_IRQn
+
+/**
+  * @brief Key push-button
+  */
+#define KEY_BUTTON_PIN                       GPIO_PIN_11
+#define KEY_BUTTON_GPIO_PORT                 GPIOI
+#define KEY_BUTTON_GPIO_CLK_ENABLE()         __HAL_RCC_GPIOI_CLK_ENABLE()
+#define KEY_BUTTON_GPIO_CLK_DISABLE()        __HAL_RCC_GPIOI_CLK_DISABLE()
+#define KEY_BUTTON_EXTI_IRQn                 EXTI15_10_IRQn
+
+#define BUTTONx_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == 0) WAKEUP_BUTTON_GPIO_CLK_ENABLE(); else\
+                                                   if((__INDEX__) == 1) TAMPER_BUTTON_GPIO_CLK_ENABLE(); else\
+												                        KEY_BUTTON_GPIO_CLK_ENABLE(); } while(0)											   
+
+#define BUTTONx_GPIO_CLK_DISABLE(__INDEX__)    (((__INDEX__) == 0) ? WAKEUP_BUTTON_GPIO_CLK_DISABLE() :\
+                                                ((__INDEX__) == 1) ? TAMPER_BUTTON_GPIO_CLK_DISABLE() : KEY_BUTTON_GPIO_CLK_DISABLE())
+
+/**
+  * @}
+  */
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_SIGNAL
+  * @{
+  */
+#define SIGNALn                             ((uint8_t)1)
+
+/**
+  * @brief SD-detect signal
+  */
+#define SD_DETECT_PIN                        GPIO_PIN_13
+#define SD_DETECT_GPIO_PORT                  GPIOC
+#define SD_DETECT_GPIO_CLK_ENABLE()          __HAL_RCC_GPIOC_CLK_ENABLE()
+#define SD_DETECT_GPIO_CLK_DISABLE()         __HAL_RCC_GPIOC_CLK_DISABLE()
+#define SD_DETECT_EXTI_IRQn                  EXTI15_10_IRQn
+
+/**
+  * @brief Touch screen interrupt signal
+  */
+#define TS_INT_PIN                           GPIO_PIN_13
+#define TS_INT_GPIO_PORT                     GPIOI
+#define TS_INT_GPIO_CLK_ENABLE()             __HAL_RCC_GPIOI_CLK_ENABLE()
+#define TS_INT_GPIO_CLK_DISABLE()            __HAL_RCC_GPIOI_CLK_DISABLE()
+#define TS_INT_EXTI_IRQn                     EXTI15_10_IRQn
+
+/**
+  * @}
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_COM
+  * @{
+  */
+#define COMn                             ((uint8_t)1)
+
+/**
+ * @brief Definition for COM port1, connected to USART1
+ */ 
+#define DISCOVERY_COM1                          USART1
+#define DISCOVERY_COM1_CLK_ENABLE()             __HAL_RCC_USART1_CLK_ENABLE()
+#define DISCOVERY_COM1_CLK_DISABLE()            __HAL_RCC_USART1_CLK_DISABLE()
+
+#define DISCOVERY_COM1_TX_PIN                   GPIO_PIN_9
+#define DISCOVERY_COM1_TX_GPIO_PORT             GPIOA
+#define DISCOVERY_COM1_TX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOA_CLK_ENABLE()
+#define DISCOVERY_COM1_TX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOA_CLK_DISABLE()
+#define DISCOVERY_COM1_TX_AF                    GPIO_AF7_USART1
+
+#define DISCOVERY_COM1_RX_PIN                   GPIO_PIN_7
+#define DISCOVERY_COM1_RX_GPIO_PORT             GPIOB
+#define DISCOVERY_COM1_RX_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()
+#define DISCOVERY_COM1_RX_GPIO_CLK_DISABLE()    __HAL_RCC_GPIOB_CLK_DISABLE()
+#define DISCOVERY_COM1_RX_AF                    GPIO_AF7_USART1
+
+#define DISCOVERY_COM1_IRQn                     USART1_IRQn
+
+#define DISCOVERY_COMx_CLK_ENABLE(__INDEX__)            do { if((__INDEX__) == COM1) DISCOVERY_COM1_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_CLK_DISABLE(__INDEX__)           (((__INDEX__) == 0) ? DISCOVERY_COM1_CLK_DISABLE() : 0)
+
+#define DISCOVERY_COMx_TX_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == COM1) DISCOVERY_COM1_TX_GPIO_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_TX_GPIO_CLK_DISABLE(__INDEX__)   (((__INDEX__) == 0) ? DISCOVERY_COM1_TX_GPIO_CLK_DISABLE() : 0)
+
+#define DISCOVERY_COMx_RX_GPIO_CLK_ENABLE(__INDEX__)    do { if((__INDEX__) == COM1) DISCOVERY_COM1_RX_GPIO_CLK_ENABLE(); } while(0)
+#define DISCOVERY_COMx_RX_GPIO_CLK_DISABLE(__INDEX__)   (((__INDEX__) == 0) ? DISCOVERY_COM1_RX_GPIO_CLK_DISABLE() : 0)
+
+/* Exported constant IO ------------------------------------------------------*/
+
+#define LCD_I2C_ADDRESS                  ((uint16_t)0x70)
+#define CAMERA_I2C_ADDRESS               ((uint16_t)0x60)
+#define AUDIO_I2C_ADDRESS                ((uint16_t)0x34)
+#define EEPROM_I2C_ADDRESS_A01           ((uint16_t)0xA0)
+#define EEPROM_I2C_ADDRESS_A02           ((uint16_t)0xA6)
+#define TS_I2C_ADDRESS                   ((uint16_t)0x70)
+
+/* I2C clock speed configuration (in Hz) 
+   WARNING: 
+   Make sure that this define is not already declared in other files (ie. 
+   stm32746g_discovery.h file). It can be used in parallel by other modules. */
+#ifndef I2C_SPEED
+ #define I2C_SPEED                       ((uint32_t)100000)
+#endif /* I2C_SPEED */
+
+/* User can use this section to tailor I2Cx/I2Cx instance used and associated 
+   resources */
+/* Definition for AUDIO and LCD I2Cx resources */
+#define DISCOVERY_AUDIO_I2Cx                             I2C3
+#define DISCOVERY_AUDIO_I2Cx_CLK_ENABLE()                __HAL_RCC_I2C3_CLK_ENABLE()
+#define DISCOVERY_AUDIO_DMAx_CLK_ENABLE()                __HAL_RCC_DMA1_CLK_ENABLE()
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOH_CLK_ENABLE()
+
+#define DISCOVERY_AUDIO_I2Cx_FORCE_RESET()               __HAL_RCC_I2C3_FORCE_RESET()
+#define DISCOVERY_AUDIO_I2Cx_RELEASE_RESET()             __HAL_RCC_I2C3_RELEASE_RESET()
+
+/* Definition for I2Cx Pins */
+#define DISCOVERY_AUDIO_I2Cx_SCL_PIN                     GPIO_PIN_7
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT           GPIOH
+#define DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF                  GPIO_AF4_I2C3
+#define DISCOVERY_AUDIO_I2Cx_SDA_PIN                     GPIO_PIN_8
+
+/* I2C interrupt requests */
+#define DISCOVERY_AUDIO_I2Cx_EV_IRQn                     I2C3_EV_IRQn
+#define DISCOVERY_AUDIO_I2Cx_ER_IRQn                     I2C3_ER_IRQn
+
+/* Definition for external, camera and Arduino connector I2Cx resources */
+#define DISCOVERY_EXT_I2Cx                               I2C1
+#define DISCOVERY_EXT_I2Cx_CLK_ENABLE()                  __HAL_RCC_I2C1_CLK_ENABLE()
+#define DISCOVERY_EXT_DMAx_CLK_ENABLE()                  __HAL_RCC_DMA1_CLK_ENABLE()
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()     __HAL_RCC_GPIOB_CLK_ENABLE()
+
+#define DISCOVERY_EXT_I2Cx_FORCE_RESET()                 __HAL_RCC_I2C1_FORCE_RESET()
+#define DISCOVERY_EXT_I2Cx_RELEASE_RESET()               __HAL_RCC_I2C1_RELEASE_RESET()
+
+/* Definition for I2Cx Pins */
+#define DISCOVERY_EXT_I2Cx_SCL_PIN                       GPIO_PIN_8
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT             GPIOB
+#define DISCOVERY_EXT_I2Cx_SCL_SDA_AF                    GPIO_AF4_I2C1
+#define DISCOVERY_EXT_I2Cx_SDA_PIN                       GPIO_PIN_9
+
+/* I2C interrupt requests */
+#define DISCOVERY_EXT_I2Cx_EV_IRQn                       I2C1_EV_IRQn
+#define DISCOVERY_EXT_I2Cx_ER_IRQn                       I2C1_ER_IRQn
+
+/* I2C TIMING Register define when I2C clock source is SYSCLK */
+/* I2C TIMING is calculated from APB1 source clock = 50 MHz */
+/* Due to the big MOFSET capacity for adapting the camera level the rising time is very large (>1us) */
+/* 0x40912732 takes in account the big rising and aims a clock of 100khz */
+/* this value might be adapted when next Rev Birdie board is available */
+#ifndef DISCOVERY_I2Cx_TIMING  
+#define DISCOVERY_I2Cx_TIMING                      ((uint32_t)0x40912732)  
+#endif /* DISCOVERY_I2Cx_TIMING */
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+  
+/** @defgroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Macros STM32746G_DISCOVERY_LOW_LEVEL Exported Macros
+  * @{
+  */  
+/**
+  * @}
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY_LOW_LEVEL_Exported_Functions
+  * @{
+  */
+uint32_t  BSP_GetVersion(void);
+void      BSP_LED_Init(Led_TypeDef Led);
+void      BSP_LED_DeInit(Led_TypeDef Led);
+void      BSP_LED_On(Led_TypeDef Led);
+void      BSP_LED_Off(Led_TypeDef Led);
+void      BSP_LED_Toggle(Led_TypeDef Led);
+void      BSP_PB_Init(Button_TypeDef Button, ButtonMode_TypeDef ButtonMode);
+void      BSP_PB_DeInit(Button_TypeDef Button);
+uint32_t  BSP_PB_GetState(Button_TypeDef Button);
+void      BSP_COM_Init(COM_TypeDef COM, UART_HandleTypeDef *husart);
+void      BSP_COM_DeInit(COM_TypeDef COM, UART_HandleTypeDef *huart);
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_lcd.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_lcd.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,1553 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_lcd.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file includes the driver for Liquid Crystal Display (LCD) module
+  *          mounted on STM32746G-Discovery board.
+  @verbatim
+  1. How To use this driver:
+  --------------------------
+     - This driver is used to drive directly an LCD TFT using the LTDC controller.
+     - This driver uses timing and setting for RK043FN48H LCD.
+  
+  2. Driver description:
+  ---------------------
+    + Initialization steps:
+       o Initialize the LCD using the BSP_LCD_Init() function.
+       o Apply the Layer configuration using the BSP_LCD_LayerDefaultInit() function.    
+       o Select the LCD layer to be used using the BSP_LCD_SelectLayer() function.
+       o Enable the LCD display using the BSP_LCD_DisplayOn() function.
+  
+    + Options
+       o Configure and enable the color keying functionality using the 
+         BSP_LCD_SetColorKeying() function.
+       o Modify in the fly the transparency and/or the frame buffer address
+         using the following functions:
+         - BSP_LCD_SetTransparency()
+         - BSP_LCD_SetLayerAddress() 
+    
+    + Display on LCD
+       o Clear the hole LCD using BSP_LCD_Clear() function or only one specified string
+         line using the BSP_LCD_ClearStringLine() function.
+       o Display a character on the specified line and column using the BSP_LCD_DisplayChar()
+         function or a complete string line using the BSP_LCD_DisplayStringAtLine() function.
+       o Display a string line on the specified position (x,y in pixel) and align mode
+         using the BSP_LCD_DisplayStringAtLine() function.          
+       o Draw and fill a basic shapes (dot, line, rectangle, circle, ellipse, .. bitmap) 
+         on LCD using the available set of functions.       
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_lcd.h"
+#include "fonts.h"
+/*
+#include "font24.c"
+#include "font20.c"
+#include "font16.c"
+#include "font12.c"
+#include "font8.c"
+*/
+
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+    
+/** @addtogroup STM32746G_DISCOVERY_LCD
+  * @{
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_TypesDefinitions STM32746G_DISCOVERY_LCD Private Types Definitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Defines STM32746G_DISCOVERY LCD Private Defines
+  * @{
+  */
+#define POLY_X(Z)              ((int32_t)((Points + Z)->X))
+#define POLY_Y(Z)              ((int32_t)((Points + Z)->Y))      
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Macros STM32746G_DISCOVERY_LCD Private Macros
+  * @{
+  */
+#define ABS(X)  ((X) > 0 ? (X) : -(X))      
+/**
+  * @}
+  */ 
+    
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_Variables STM32746G_DISCOVERY_LCD Private Variables
+  * @{
+  */ 
+static LTDC_HandleTypeDef  hLtdcHandler;
+static DMA2D_HandleTypeDef hDma2dHandler;
+
+/* Default LCD configuration with LCD Layer 1 */
+static uint32_t            ActiveLayer = 0;
+static LCD_DrawPropTypeDef DrawProp[MAX_LAYER_NUMBER];
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Private_FunctionPrototypes STM32746G_DISCOVERY_LCD Private Function Prototypes
+  * @{
+  */ 
+static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c);
+static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3);
+static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex);
+static void LL_ConvertLineToARGB8888(void * pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode);
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Functions STM32746G_DISCOVERY_LCD Exported Functions
+  * @{
+  */
+
+/**
+  * @brief  Initializes the LCD.
+  * @retval LCD state
+  */
+uint8_t BSP_LCD_Init(void)
+{    
+  /* Select the used LCD */
+
+  /* The RK043FN48H LCD 480x272 is selected */
+  /* Timing Configuration */
+  hLtdcHandler.Init.HorizontalSync = (RK043FN48H_HSYNC - 1);
+  hLtdcHandler.Init.VerticalSync = (RK043FN48H_VSYNC - 1);
+  hLtdcHandler.Init.AccumulatedHBP = (RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
+  hLtdcHandler.Init.AccumulatedVBP = (RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
+  hLtdcHandler.Init.AccumulatedActiveH = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP - 1);
+  hLtdcHandler.Init.AccumulatedActiveW = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP - 1);
+  hLtdcHandler.Init.TotalHeigh = (RK043FN48H_HEIGHT + RK043FN48H_VSYNC + RK043FN48H_VBP + RK043FN48H_VFP - 1);
+  hLtdcHandler.Init.TotalWidth = (RK043FN48H_WIDTH + RK043FN48H_HSYNC + RK043FN48H_HBP + RK043FN48H_HFP - 1);
+  
+  /* LCD clock configuration */
+  BSP_LCD_ClockConfig(&hLtdcHandler, NULL);
+
+  /* Initialize the LCD pixel width and pixel height */
+  hLtdcHandler.LayerCfg->ImageWidth  = RK043FN48H_WIDTH;
+  hLtdcHandler.LayerCfg->ImageHeight = RK043FN48H_HEIGHT;
+
+  /* Background value */
+  hLtdcHandler.Init.Backcolor.Blue = 0;
+  hLtdcHandler.Init.Backcolor.Green = 0;
+  hLtdcHandler.Init.Backcolor.Red = 0;
+  
+  /* Polarity */
+  hLtdcHandler.Init.HSPolarity = LTDC_HSPOLARITY_AL;
+  hLtdcHandler.Init.VSPolarity = LTDC_VSPOLARITY_AL; 
+  hLtdcHandler.Init.DEPolarity = LTDC_DEPOLARITY_AL;  
+  hLtdcHandler.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
+  hLtdcHandler.Instance = LTDC;
+
+  if(HAL_LTDC_GetState(&hLtdcHandler) == HAL_LTDC_STATE_RESET)
+  {
+    /* Initialize the LCD Msp: this __weak function can be rewritten by the application */
+    BSP_LCD_MspInit(&hLtdcHandler, NULL);
+  }
+  HAL_LTDC_Init(&hLtdcHandler);
+
+  /* Assert display enable LCD_DISP pin */
+  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);
+
+  /* Assert backlight LCD_BL_CTRL pin */
+  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);
+
+#if !defined(DATA_IN_ExtSDRAM)
+  /* Initialize the SDRAM */
+  BSP_SDRAM_Init();
+#endif
+    
+  /* Initialize the font */
+  BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
+  
+  return LCD_OK;
+}
+
+/**
+  * @brief  DeInitializes the LCD.
+  * @retval LCD state
+  */
+uint8_t BSP_LCD_DeInit(void)
+{ 
+  /* Initialize the hLtdcHandler Instance parameter */
+  hLtdcHandler.Instance = LTDC;
+
+ /* Disable LTDC block */
+  __HAL_LTDC_DISABLE(&hLtdcHandler);
+
+  /* DeInit the LTDC */
+  HAL_LTDC_DeInit(&hLtdcHandler);
+
+  /* DeInit the LTDC MSP : this __weak function can be rewritten by the application */
+  BSP_LCD_MspDeInit(&hLtdcHandler, NULL);
+
+  return LCD_OK;
+}
+
+/**
+  * @brief  Gets the LCD X size.
+  * @retval Used LCD X size
+  */
+uint32_t BSP_LCD_GetXSize(void)
+{
+  return hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth;
+}
+
+/**
+  * @brief  Gets the LCD Y size.
+  * @retval Used LCD Y size
+  */
+uint32_t BSP_LCD_GetYSize(void)
+{
+  return hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight;
+}
+
+/**
+  * @brief  Set the LCD X size.
+  * @param  imageWidthPixels : image width in pixels unit
+  * @retval None
+  */
+void BSP_LCD_SetXSize(uint32_t imageWidthPixels)
+{
+  hLtdcHandler.LayerCfg[ActiveLayer].ImageWidth = imageWidthPixels;
+}
+
+/**
+  * @brief  Set the LCD Y size.
+  * @param  imageHeightPixels : image height in lines unit
+  * @retval None
+  */
+void BSP_LCD_SetYSize(uint32_t imageHeightPixels)
+{
+  hLtdcHandler.LayerCfg[ActiveLayer].ImageHeight = imageHeightPixels;
+}
+
+/**
+  * @brief  Initializes the LCD layer in ARGB8888 format (32 bits per pixel).
+  * @param  LayerIndex: Layer foreground or background
+  * @param  FB_Address: Layer frame buffer
+  * @retval None
+  */
+void BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FB_Address)
+{     
+  LCD_LayerCfgTypeDef  layer_cfg;
+
+  /* Layer Init */
+  layer_cfg.WindowX0 = 0;
+  layer_cfg.WindowX1 = BSP_LCD_GetXSize();
+  layer_cfg.WindowY0 = 0;
+  layer_cfg.WindowY1 = BSP_LCD_GetYSize(); 
+  layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_ARGB8888;
+  layer_cfg.FBStartAdress = FB_Address;
+  layer_cfg.Alpha = 255;
+  layer_cfg.Alpha0 = 0;
+  layer_cfg.Backcolor.Blue = 0;
+  layer_cfg.Backcolor.Green = 0;
+  layer_cfg.Backcolor.Red = 0;
+  layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+  layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+  layer_cfg.ImageWidth = BSP_LCD_GetXSize();
+  layer_cfg.ImageHeight = BSP_LCD_GetYSize();
+  
+  HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex); 
+
+  DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
+  DrawProp[LayerIndex].pFont     = &Font24;
+  DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; 
+}
+
+/**
+  * @brief  Initializes the LCD layer in RGB565 format (16 bits per pixel).
+  * @param  LayerIndex: Layer foreground or background
+  * @param  FB_Address: Layer frame buffer
+  * @retval None
+  */
+void BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address)
+{     
+  LCD_LayerCfgTypeDef  layer_cfg;
+
+  /* Layer Init */
+  layer_cfg.WindowX0 = 0;
+  layer_cfg.WindowX1 = BSP_LCD_GetXSize();
+  layer_cfg.WindowY0 = 0;
+  layer_cfg.WindowY1 = BSP_LCD_GetYSize(); 
+  layer_cfg.PixelFormat = LTDC_PIXEL_FORMAT_RGB565;
+  layer_cfg.FBStartAdress = FB_Address;
+  layer_cfg.Alpha = 255;
+  layer_cfg.Alpha0 = 0;
+  layer_cfg.Backcolor.Blue = 0;
+  layer_cfg.Backcolor.Green = 0;
+  layer_cfg.Backcolor.Red = 0;
+  layer_cfg.BlendingFactor1 = LTDC_BLENDING_FACTOR1_PAxCA;
+  layer_cfg.BlendingFactor2 = LTDC_BLENDING_FACTOR2_PAxCA;
+  layer_cfg.ImageWidth = BSP_LCD_GetXSize();
+  layer_cfg.ImageHeight = BSP_LCD_GetYSize();
+  
+  HAL_LTDC_ConfigLayer(&hLtdcHandler, &layer_cfg, LayerIndex); 
+
+  DrawProp[LayerIndex].BackColor = LCD_COLOR_WHITE;
+  DrawProp[LayerIndex].pFont     = &Font24;
+  DrawProp[LayerIndex].TextColor = LCD_COLOR_BLACK; 
+}
+
+/**
+  * @brief  Selects the LCD Layer.
+  * @param  LayerIndex: Layer foreground or background
+  * @retval None
+  */
+void BSP_LCD_SelectLayer(uint32_t LayerIndex)
+{
+  ActiveLayer = LayerIndex;
+} 
+
+/**
+  * @brief  Sets an LCD Layer visible
+  * @param  LayerIndex: Visible Layer
+  * @param  State: New state of the specified layer
+  *          This parameter can be one of the following values:
+  *            @arg  ENABLE
+  *            @arg  DISABLE 
+  * @retval None
+  */
+void BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State)
+{
+  if(State == ENABLE)
+  {
+    __HAL_LTDC_LAYER_ENABLE(&hLtdcHandler, LayerIndex);
+  }
+  else
+  {
+    __HAL_LTDC_LAYER_DISABLE(&hLtdcHandler, LayerIndex);
+  }
+  __HAL_LTDC_RELOAD_CONFIG(&hLtdcHandler);
+} 
+
+/**
+  * @brief  Configures the transparency.
+  * @param  LayerIndex: Layer foreground or background.
+  * @param  Transparency: Transparency
+  *           This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF 
+  * @retval None
+  */
+void BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency)
+{    
+  HAL_LTDC_SetAlpha(&hLtdcHandler, Transparency, LayerIndex);
+}
+
+/**
+  * @brief  Sets an LCD layer frame buffer address.
+  * @param  LayerIndex: Layer foreground or background
+  * @param  Address: New LCD frame buffer value      
+  * @retval None
+  */
+void BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address)
+{
+  HAL_LTDC_SetAddress(&hLtdcHandler, Address, LayerIndex);
+}
+
+/**
+  * @brief  Sets display window.
+  * @param  LayerIndex: Layer index
+  * @param  Xpos: LCD X position
+  * @param  Ypos: LCD Y position
+  * @param  Width: LCD window width
+  * @param  Height: LCD window height  
+  * @retval None
+  */
+void BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+  /* Reconfigure the layer size */
+  HAL_LTDC_SetWindowSize(&hLtdcHandler, Width, Height, LayerIndex);
+  
+  /* Reconfigure the layer position */
+  HAL_LTDC_SetWindowPosition(&hLtdcHandler, Xpos, Ypos, LayerIndex); 
+}
+
+/**
+  * @brief  Configures and sets the color keying.
+  * @param  LayerIndex: Layer foreground or background
+  * @param  RGBValue: Color reference
+  * @retval None
+  */
+void BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue)
+{  
+  /* Configure and Enable the color Keying for LCD Layer */
+  HAL_LTDC_ConfigColorKeying(&hLtdcHandler, RGBValue, LayerIndex);
+  HAL_LTDC_EnableColorKeying(&hLtdcHandler, LayerIndex);
+}
+
+/**
+  * @brief  Disables the color keying.
+  * @param  LayerIndex: Layer foreground or background
+  * @retval None
+  */
+void BSP_LCD_ResetColorKeying(uint32_t LayerIndex)
+{   
+  /* Disable the color Keying for LCD Layer */
+  HAL_LTDC_DisableColorKeying(&hLtdcHandler, LayerIndex);
+}
+
+/**
+  * @brief  Sets the LCD text color.
+  * @param  Color: Text color code ARGB(8-8-8-8)
+  * @retval None
+  */
+void BSP_LCD_SetTextColor(uint32_t Color)
+{
+  DrawProp[ActiveLayer].TextColor = Color;
+}
+
+/**
+  * @brief  Gets the LCD text color.
+  * @retval Used text color.
+  */
+uint32_t BSP_LCD_GetTextColor(void)
+{
+  return DrawProp[ActiveLayer].TextColor;
+}
+
+/**
+  * @brief  Sets the LCD background color.
+  * @param  Color: Layer background color code ARGB(8-8-8-8)
+  * @retval None
+  */
+void BSP_LCD_SetBackColor(uint32_t Color)
+{
+  DrawProp[ActiveLayer].BackColor = Color;
+}
+
+/**
+  * @brief  Gets the LCD background color.
+  * @retval Used background colour
+  */
+uint32_t BSP_LCD_GetBackColor(void)
+{
+  return DrawProp[ActiveLayer].BackColor;
+}
+
+/**
+  * @brief  Sets the LCD text font.
+  * @param  fonts: Layer font to be used
+  * @retval None
+  */
+void BSP_LCD_SetFont(sFONT *fonts)
+{
+  DrawProp[ActiveLayer].pFont = fonts;
+}
+
+/**
+  * @brief  Gets the LCD text font.
+  * @retval Used layer font
+  */
+sFONT *BSP_LCD_GetFont(void)
+{
+  return DrawProp[ActiveLayer].pFont;
+}
+
+/**
+  * @brief  Reads an LCD pixel.
+  * @param  Xpos: X position 
+  * @param  Ypos: Y position 
+  * @retval RGB pixel color
+  */
+uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos)
+{
+  uint32_t ret = 0;
+  
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
+  {
+    /* Read data value from SDRAM memory */
+    ret = *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));
+  }
+  else if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB888)
+  {
+    /* Read data value from SDRAM memory */
+    ret = (*(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) & 0x00FFFFFF);
+  }
+  else if((hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
+          (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
+          (hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_AL88))  
+  {
+    /* Read data value from SDRAM memory */
+    ret = *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));    
+  }
+  else
+  {
+    /* Read data value from SDRAM memory */
+    ret = *(__IO uint8_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos)));    
+  }
+  
+  return ret;
+}
+
+/**
+  * @brief  Clears the hole LCD.
+  * @param  Color: Color of the background
+  * @retval None
+  */
+void BSP_LCD_Clear(uint32_t Color)
+{ 
+  /* Clear the LCD */ 
+  LL_FillBuffer(ActiveLayer, (uint32_t *)(hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress), BSP_LCD_GetXSize(), BSP_LCD_GetYSize(), 0, Color);
+}
+
+/**
+  * @brief  Clears the selected line.
+  * @param  Line: Line to be cleared
+  * @retval None
+  */
+void BSP_LCD_ClearStringLine(uint32_t Line)
+{
+  uint32_t color_backup = DrawProp[ActiveLayer].TextColor;
+  DrawProp[ActiveLayer].TextColor = DrawProp[ActiveLayer].BackColor;
+  
+  /* Draw rectangle with background color */
+  BSP_LCD_FillRect(0, (Line * DrawProp[ActiveLayer].pFont->Height), BSP_LCD_GetXSize(), DrawProp[ActiveLayer].pFont->Height);
+  
+  DrawProp[ActiveLayer].TextColor = color_backup;
+  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);  
+}
+
+/**
+  * @brief  Displays one character.
+  * @param  Xpos: Start column address
+  * @param  Ypos: Line where to display the character shape.
+  * @param  Ascii: Character ascii code
+  *           This parameter must be a number between Min_Data = 0x20 and Max_Data = 0x7E 
+  * @retval None
+  */
+void BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii)
+{
+  DrawChar(Xpos, Ypos, &DrawProp[ActiveLayer].pFont->table[(Ascii-' ') *\
+    DrawProp[ActiveLayer].pFont->Height * ((DrawProp[ActiveLayer].pFont->Width + 7) / 8)]);
+}
+
+/**
+  * @brief  Displays characters on the LCD.
+  * @param  Xpos: X position (in pixel)
+  * @param  Ypos: Y position (in pixel)   
+  * @param  Text: Pointer to string to display on LCD
+  * @param  Mode: Display mode
+  *          This parameter can be one of the following values:
+  *            @arg  CENTER_MODE
+  *            @arg  RIGHT_MODE
+  *            @arg  LEFT_MODE   
+  * @retval None
+  */
+void BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode)
+{
+  uint16_t ref_column = 1, i = 0;
+  uint32_t size = 0, xsize = 0; 
+  uint8_t  *ptr = Text;
+  
+  /* Get the text size */
+  while (*ptr++) size ++ ;
+  
+  /* Characters number per line */
+  xsize = (BSP_LCD_GetXSize()/DrawProp[ActiveLayer].pFont->Width);
+  
+  switch (Mode)
+  {
+  case CENTER_MODE:
+    {
+      ref_column = Xpos + ((xsize - size)* DrawProp[ActiveLayer].pFont->Width) / 2;
+      break;
+    }
+  case LEFT_MODE:
+    {
+      ref_column = Xpos;
+      break;
+    }
+  case RIGHT_MODE:
+    {
+      ref_column = - Xpos + ((xsize - size)*DrawProp[ActiveLayer].pFont->Width);
+      break;
+    }    
+  default:
+    {
+      ref_column = Xpos;
+      break;
+    }
+  }
+  
+  /* Check that the Start column is located in the screen */
+  if ((ref_column < 1) || (ref_column >= 0x8000))
+  {
+    ref_column = 1;
+  }
+
+  /* Send the string character by character on LCD */
+  while ((*Text != 0) & (((BSP_LCD_GetXSize() - (i*DrawProp[ActiveLayer].pFont->Width)) & 0xFFFF) >= DrawProp[ActiveLayer].pFont->Width))
+  {
+    /* Display one character on LCD */
+    BSP_LCD_DisplayChar(ref_column, Ypos, *Text);
+    /* Decrement the column position by 16 */
+    ref_column += DrawProp[ActiveLayer].pFont->Width;
+    /* Point on the next character */
+    Text++;
+    i++;
+  }  
+}
+
+/**
+  * @brief  Displays a maximum of 60 characters on the LCD.
+  * @param  Line: Line where to display the character shape
+  * @param  ptr: Pointer to string to display on LCD
+  * @retval None
+  */
+void BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr)
+{  
+  BSP_LCD_DisplayStringAt(0, LINE(Line), ptr, LEFT_MODE);
+}
+
+/**
+  * @brief  Draws an horizontal line.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Length: Line length
+  * @retval None
+  */
+void BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+  uint32_t  Xaddress = 0;
+  
+  /* Get the line address */
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+  { /* RGB565 format */
+    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  else
+  { /* ARGB8888 format */
+    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  
+  /* Write line */
+  LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, Length, 1, 0, DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+  * @brief  Draws a vertical line.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Length: Line length
+  * @retval None
+  */
+void BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length)
+{
+  uint32_t  Xaddress = 0;
+  
+  /* Get the line address */
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+  { /* RGB565 format */
+    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  else
+  { /* ARGB8888 format */
+    Xaddress = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  
+  /* Write line */
+  LL_FillBuffer(ActiveLayer, (uint32_t *)Xaddress, 1, Length, (BSP_LCD_GetXSize() - 1), DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+  * @brief  Draws an uni-line (between two points).
+  * @param  x1: Point 1 X position
+  * @param  y1: Point 1 Y position
+  * @param  x2: Point 2 X position
+  * @param  y2: Point 2 Y position
+  * @retval None
+  */
+void BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
+{
+  int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, 
+  yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0, 
+  curpixel = 0;
+  
+  deltax = ABS(x2 - x1);        /* The difference between the x's */
+  deltay = ABS(y2 - y1);        /* The difference between the y's */
+  x = x1;                       /* Start x off at the first pixel */
+  y = y1;                       /* Start y off at the first pixel */
+  
+  if (x2 >= x1)                 /* The x-values are increasing */
+  {
+    xinc1 = 1;
+    xinc2 = 1;
+  }
+  else                          /* The x-values are decreasing */
+  {
+    xinc1 = -1;
+    xinc2 = -1;
+  }
+  
+  if (y2 >= y1)                 /* The y-values are increasing */
+  {
+    yinc1 = 1;
+    yinc2 = 1;
+  }
+  else                          /* The y-values are decreasing */
+  {
+    yinc1 = -1;
+    yinc2 = -1;
+  }
+  
+  if (deltax >= deltay)         /* There is at least one x-value for every y-value */
+  {
+    xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
+    yinc2 = 0;                  /* Don't change the y for every iteration */
+    den = deltax;
+    num = deltax / 2;
+    num_add = deltay;
+    num_pixels = deltax;         /* There are more x-values than y-values */
+  }
+  else                          /* There is at least one y-value for every x-value */
+  {
+    xinc2 = 0;                  /* Don't change the x for every iteration */
+    yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
+    den = deltay;
+    num = deltay / 2;
+    num_add = deltax;
+    num_pixels = deltay;         /* There are more y-values than x-values */
+  }
+  
+  for (curpixel = 0; curpixel <= num_pixels; curpixel++)
+  {
+    BSP_LCD_DrawPixel(x, y, DrawProp[ActiveLayer].TextColor);   /* Draw the current pixel */
+    num += num_add;                            /* Increase the numerator by the top of the fraction */
+    if (num >= den)                           /* Check if numerator >= denominator */
+    {
+      num -= den;                             /* Calculate the new numerator value */
+      x += xinc1;                             /* Change the x as appropriate */
+      y += yinc1;                             /* Change the y as appropriate */
+    }
+    x += xinc2;                               /* Change the x as appropriate */
+    y += yinc2;                               /* Change the y as appropriate */
+  }
+}
+
+/**
+  * @brief  Draws a rectangle.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Width: Rectangle width  
+  * @param  Height: Rectangle height
+  * @retval None
+  */
+void BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+  /* Draw horizontal lines */
+  BSP_LCD_DrawHLine(Xpos, Ypos, Width);
+  BSP_LCD_DrawHLine(Xpos, (Ypos+ Height), Width);
+  
+  /* Draw vertical lines */
+  BSP_LCD_DrawVLine(Xpos, Ypos, Height);
+  BSP_LCD_DrawVLine((Xpos + Width), Ypos, Height);
+}
+
+/**
+  * @brief  Draws a circle.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Radius: Circle radius
+  * @retval None
+  */
+void BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+  int32_t   decision;    /* Decision Variable */ 
+  uint32_t  current_x;   /* Current X Value */
+  uint32_t  current_y;   /* Current Y Value */
+  
+  decision = 3 - (Radius << 1);
+  current_x = 0;
+  current_y = Radius;
+  
+  while (current_x <= current_y)
+  {
+    BSP_LCD_DrawPixel((Xpos + current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos - current_x), (Ypos - current_y), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos + current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos - current_y), (Ypos - current_x), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos + current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos - current_x), (Ypos + current_y), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos + current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
+    
+    BSP_LCD_DrawPixel((Xpos - current_y), (Ypos + current_x), DrawProp[ActiveLayer].TextColor);
+    
+    if (decision < 0)
+    { 
+      decision += (current_x << 2) + 6;
+    }
+    else
+    {
+      decision += ((current_x - current_y) << 2) + 10;
+      current_y--;
+    }
+    current_x++;
+  } 
+}
+
+/**
+  * @brief  Draws an poly-line (between many points).
+  * @param  Points: Pointer to the points array
+  * @param  PointCount: Number of points
+  * @retval None
+  */
+void BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount)
+{
+  int16_t x = 0, y = 0;
+  
+  if(PointCount < 2)
+  {
+    return;
+  }
+  
+  BSP_LCD_DrawLine(Points->X, Points->Y, (Points+PointCount-1)->X, (Points+PointCount-1)->Y);
+  
+  while(--PointCount)
+  {
+    x = Points->X;
+    y = Points->Y;
+    Points++;
+    BSP_LCD_DrawLine(x, y, Points->X, Points->Y);
+  }
+}
+
+/**
+  * @brief  Draws an ellipse on LCD.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  XRadius: Ellipse X radius
+  * @param  YRadius: Ellipse Y radius
+  * @retval None
+  */
+void BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+  int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
+  float k = 0, rad1 = 0, rad2 = 0;
+  
+  rad1 = XRadius;
+  rad2 = YRadius;
+  
+  k = (float)(rad2/rad1);  
+  
+  do { 
+    BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
+    BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos+y), DrawProp[ActiveLayer].TextColor);
+    BSP_LCD_DrawPixel((Xpos+(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);
+    BSP_LCD_DrawPixel((Xpos-(uint16_t)(x/k)), (Ypos-y), DrawProp[ActiveLayer].TextColor);      
+    
+    e2 = err;
+    if (e2 <= x) {
+      err += ++x*2+1;
+      if (-y == x && e2 <= y) e2 = 0;
+    }
+    if (e2 > y) err += ++y*2+1;     
+  }
+  while (y <= 0);
+}
+
+/**
+  * @brief  Draws a pixel on LCD.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  RGB_Code: Pixel color in ARGB mode (8-8-8-8)
+  * @retval None
+  */
+void BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t RGB_Code)
+{
+  /* Write data value to all SDRAM memory */
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+  { /* RGB565 format */
+    *(__IO uint16_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (2*(Ypos*BSP_LCD_GetXSize() + Xpos))) = (uint16_t)RGB_Code;
+  }
+  else
+  { /* ARGB8888 format */
+    *(__IO uint32_t*) (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (4*(Ypos*BSP_LCD_GetXSize() + Xpos))) = RGB_Code;
+  }
+}
+
+/**
+  * @brief  Draws a bitmap picture loaded in the internal Flash in ARGB888 format (32 bits per pixel).
+  * @param  Xpos: Bmp X position in the LCD
+  * @param  Ypos: Bmp Y position in the LCD
+  * @param  pbmp: Pointer to Bmp picture address in the internal Flash
+  * @retval None
+  */
+void BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp)
+{
+  uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
+  uint32_t address;
+  uint32_t input_color_mode = 0;
+  
+  /* Get bitmap data address offset */
+  index = *(__IO uint16_t *) (pbmp + 10);
+  index |= (*(__IO uint16_t *) (pbmp + 12)) << 16;
+  
+  /* Read bitmap width */
+  width = *(uint16_t *) (pbmp + 18);
+  width |= (*(uint16_t *) (pbmp + 20)) << 16;
+  
+  /* Read bitmap height */
+  height = *(uint16_t *) (pbmp + 22);
+  height |= (*(uint16_t *) (pbmp + 24)) << 16; 
+  
+  /* Read bit/pixel */
+  bit_pixel = *(uint16_t *) (pbmp + 28);   
+  
+  /* Set the address */
+  address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
+  
+  /* Get the layer pixel format */    
+  if ((bit_pixel/8) == 4)
+  {
+    input_color_mode = CM_ARGB8888;
+  }
+  else if ((bit_pixel/8) == 2)
+  {
+    input_color_mode = CM_RGB565;   
+  }
+  else 
+  {
+    input_color_mode = CM_RGB888;
+  }
+  
+  /* Bypass the bitmap header */
+  pbmp += (index + (width * (height - 1) * (bit_pixel/8)));  
+  
+  /* Convert picture to ARGB8888 pixel format */
+  for(index=0; index < height; index++)
+  {
+    /* Pixel format conversion */
+    LL_ConvertLineToARGB8888((uint32_t *)pbmp, (uint32_t *)address, width, input_color_mode);
+    
+    /* Increment the source and destination buffers */
+    address+=  (BSP_LCD_GetXSize()*4);
+    pbmp -= width*(bit_pixel/8);
+  } 
+}
+
+/**
+  * @brief  Draws a full rectangle.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Width: Rectangle width  
+  * @param  Height: Rectangle height
+  * @retval None
+  */
+void BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height)
+{
+  uint32_t  x_address = 0;
+  
+  /* Set the text color */
+  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+  
+  /* Get the rectangle start address */
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+  { /* RGB565 format */
+    x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 2*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  else
+  { /* ARGB8888 format */
+    x_address = (hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress) + 4*(BSP_LCD_GetXSize()*Ypos + Xpos);
+  }
+  /* Fill the rectangle */
+  LL_FillBuffer(ActiveLayer, (uint32_t *)x_address, Width, Height, (BSP_LCD_GetXSize() - Width), DrawProp[ActiveLayer].TextColor);
+}
+
+/**
+  * @brief  Draws a full circle.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  Radius: Circle radius
+  * @retval None
+  */
+void BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius)
+{
+  int32_t  decision;     /* Decision Variable */ 
+  uint32_t  current_x;   /* Current X Value */
+  uint32_t  current_y;   /* Current Y Value */
+  
+  decision = 3 - (Radius << 1);
+  
+  current_x = 0;
+  current_y = Radius;
+  
+  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+  
+  while (current_x <= current_y)
+  {
+    if(current_y > 0) 
+    {
+      BSP_LCD_DrawHLine(Xpos - current_y, Ypos + current_x, 2*current_y);
+      BSP_LCD_DrawHLine(Xpos - current_y, Ypos - current_x, 2*current_y);
+    }
+    
+    if(current_x > 0) 
+    {
+      BSP_LCD_DrawHLine(Xpos - current_x, Ypos - current_y, 2*current_x);
+      BSP_LCD_DrawHLine(Xpos - current_x, Ypos + current_y, 2*current_x);
+    }
+    if (decision < 0)
+    { 
+      decision += (current_x << 2) + 6;
+    }
+    else
+    {
+      decision += ((current_x - current_y) << 2) + 10;
+      current_y--;
+    }
+    current_x++;
+  }
+  
+  BSP_LCD_SetTextColor(DrawProp[ActiveLayer].TextColor);
+  BSP_LCD_DrawCircle(Xpos, Ypos, Radius);
+}
+
+/**
+  * @brief  Draws a full poly-line (between many points).
+  * @param  Points: Pointer to the points array
+  * @param  PointCount: Number of points
+  * @retval None
+  */
+void BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount)
+{
+  int16_t X = 0, Y = 0, X2 = 0, Y2 = 0, X_center = 0, Y_center = 0, X_first = 0, Y_first = 0, pixelX = 0, pixelY = 0, counter = 0;
+  uint16_t  image_left = 0, image_right = 0, image_top = 0, image_bottom = 0;
+  
+  image_left = image_right = Points->X;
+  image_top= image_bottom = Points->Y;
+  
+  for(counter = 1; counter < PointCount; counter++)
+  {
+    pixelX = POLY_X(counter);
+    if(pixelX < image_left)
+    {
+      image_left = pixelX;
+    }
+    if(pixelX > image_right)
+    {
+      image_right = pixelX;
+    }
+    
+    pixelY = POLY_Y(counter);
+    if(pixelY < image_top)
+    { 
+      image_top = pixelY;
+    }
+    if(pixelY > image_bottom)
+    {
+      image_bottom = pixelY;
+    }
+  }  
+  
+  if(PointCount < 2)
+  {
+    return;
+  }
+  
+  X_center = (image_left + image_right)/2;
+  Y_center = (image_bottom + image_top)/2;
+  
+  X_first = Points->X;
+  Y_first = Points->Y;
+  
+  while(--PointCount)
+  {
+    X = Points->X;
+    Y = Points->Y;
+    Points++;
+    X2 = Points->X;
+    Y2 = Points->Y;    
+    
+    FillTriangle(X, X2, X_center, Y, Y2, Y_center);
+    FillTriangle(X, X_center, X2, Y, Y_center, Y2);
+    FillTriangle(X_center, X2, X, Y_center, Y2, Y);   
+  }
+  
+  FillTriangle(X_first, X2, X_center, Y_first, Y2, Y_center);
+  FillTriangle(X_first, X_center, X2, Y_first, Y_center, Y2);
+  FillTriangle(X_center, X2, X_first, Y_center, Y2, Y_first);   
+}
+
+/**
+  * @brief  Draws a full ellipse.
+  * @param  Xpos: X position
+  * @param  Ypos: Y position
+  * @param  XRadius: Ellipse X radius
+  * @param  YRadius: Ellipse Y radius  
+  * @retval None
+  */
+void BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius)
+{
+  int x = 0, y = -YRadius, err = 2-2*XRadius, e2;
+  float k = 0, rad1 = 0, rad2 = 0;
+  
+  rad1 = XRadius;
+  rad2 = YRadius;
+  
+  k = (float)(rad2/rad1);
+  
+  do 
+  {       
+    BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos+y), (2*(uint16_t)(x/k) + 1));
+    BSP_LCD_DrawHLine((Xpos-(uint16_t)(x/k)), (Ypos-y), (2*(uint16_t)(x/k) + 1));
+    
+    e2 = err;
+    if (e2 <= x) 
+    {
+      err += ++x*2+1;
+      if (-y == x && e2 <= y) e2 = 0;
+    }
+    if (e2 > y) err += ++y*2+1;
+  }
+  while (y <= 0);
+}
+
+/**
+  * @brief  Enables the display.
+  * @retval None
+  */
+void BSP_LCD_DisplayOn(void)
+{
+  /* Display On */
+  __HAL_LTDC_ENABLE(&hLtdcHandler);
+  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_SET);        /* Assert LCD_DISP pin */
+  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_SET);  /* Assert LCD_BL_CTRL pin */
+}
+
+/**
+  * @brief  Disables the display.
+  * @retval None
+  */
+void BSP_LCD_DisplayOff(void)
+{
+  /* Display Off */
+  __HAL_LTDC_DISABLE(&hLtdcHandler);
+  HAL_GPIO_WritePin(LCD_DISP_GPIO_PORT, LCD_DISP_PIN, GPIO_PIN_RESET);      /* De-assert LCD_DISP pin */
+  HAL_GPIO_WritePin(LCD_BL_CTRL_GPIO_PORT, LCD_BL_CTRL_PIN, GPIO_PIN_RESET);/* De-assert LCD_BL_CTRL pin */
+}
+
+/**
+  * @brief  Initializes the LTDC MSP.
+  * @param  hltdc: LTDC handle
+  * @param  Params
+  * @retval None
+  */
+__weak void BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+  GPIO_InitTypeDef gpio_init_structure;
+  
+  /* Enable the LTDC and DMA2D clocks */
+  __HAL_RCC_LTDC_CLK_ENABLE();
+  __HAL_RCC_DMA2D_CLK_ENABLE();
+  
+  /* Enable GPIOs clock */
+  __HAL_RCC_GPIOE_CLK_ENABLE();
+  __HAL_RCC_GPIOG_CLK_ENABLE();
+  __HAL_RCC_GPIOI_CLK_ENABLE();
+  __HAL_RCC_GPIOJ_CLK_ENABLE();
+  __HAL_RCC_GPIOK_CLK_ENABLE();
+  LCD_DISP_GPIO_CLK_ENABLE();
+  LCD_BL_CTRL_GPIO_CLK_ENABLE();
+
+  /*** LTDC Pins configuration ***/
+  /* GPIOE configuration */
+  gpio_init_structure.Pin       = GPIO_PIN_4;
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Pull      = GPIO_NOPULL;
+  gpio_init_structure.Speed     = GPIO_SPEED_FAST;
+  gpio_init_structure.Alternate = GPIO_AF14_LTDC;  
+  HAL_GPIO_Init(GPIOE, &gpio_init_structure);
+
+  /* GPIOG configuration */
+  gpio_init_structure.Pin       = GPIO_PIN_12;
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Alternate = GPIO_AF9_LTDC;
+  HAL_GPIO_Init(GPIOG, &gpio_init_structure);
+
+  /* GPIOI LTDC alternate configuration */
+  gpio_init_structure.Pin       = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | \
+                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+  HAL_GPIO_Init(GPIOI, &gpio_init_structure);
+
+  /* GPIOJ configuration */  
+  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
+                                  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
+                                  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
+                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+  HAL_GPIO_Init(GPIOJ, &gpio_init_structure);  
+
+  /* GPIOK configuration */  
+  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
+                                  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Alternate = GPIO_AF14_LTDC;
+  HAL_GPIO_Init(GPIOK, &gpio_init_structure);
+
+  /* LCD_DISP GPIO configuration */
+  gpio_init_structure.Pin       = LCD_DISP_PIN;     /* LCD_DISP pin has to be manually controlled */
+  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
+  HAL_GPIO_Init(LCD_DISP_GPIO_PORT, &gpio_init_structure);
+
+  /* LCD_BL_CTRL GPIO configuration */
+  gpio_init_structure.Pin       = LCD_BL_CTRL_PIN;  /* LCD_BL_CTRL pin has to be manually controlled */
+  gpio_init_structure.Mode      = GPIO_MODE_OUTPUT_PP;
+  HAL_GPIO_Init(LCD_BL_CTRL_GPIO_PORT, &gpio_init_structure);
+}
+
+/**
+  * @brief  DeInitializes BSP_LCD MSP.
+  * @param  hltdc: LTDC handle
+  * @param  Params
+  * @retval None
+  */
+__weak void BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+  GPIO_InitTypeDef  gpio_init_structure;
+
+  /* Disable LTDC block */
+  __HAL_LTDC_DISABLE(hltdc);
+
+  /* LTDC Pins deactivation */
+
+  /* GPIOE deactivation */
+  gpio_init_structure.Pin       = GPIO_PIN_4;
+  HAL_GPIO_DeInit(GPIOE, gpio_init_structure.Pin);
+
+  /* GPIOG deactivation */
+  gpio_init_structure.Pin       = GPIO_PIN_12;
+  HAL_GPIO_DeInit(GPIOG, gpio_init_structure.Pin);
+
+  /* GPIOI deactivation */
+  gpio_init_structure.Pin       = GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_12 | \
+                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+  HAL_GPIO_DeInit(GPIOI, gpio_init_structure.Pin);
+
+  /* GPIOJ deactivation */
+  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | \
+                                  GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7 | \
+                                  GPIO_PIN_8 | GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | \
+                                  GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15;
+  HAL_GPIO_DeInit(GPIOJ, gpio_init_structure.Pin);
+
+  /* GPIOK deactivation */
+  gpio_init_structure.Pin       = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_4 | \
+                                  GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
+  HAL_GPIO_DeInit(GPIOK, gpio_init_structure.Pin);
+
+  /* Disable LTDC clock */
+  __HAL_RCC_LTDC_CLK_DISABLE();
+
+  /* GPIO pins clock can be shut down in the application
+     by surcharging this __weak function */
+}
+
+/**
+  * @brief  Clock Config.
+  * @param  hltdc: LTDC handle
+  * @param  Params
+  * @note   This API is called by BSP_LCD_Init()
+  *         Being __weak it can be overwritten by the application
+  * @retval None
+  */
+__weak void BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params)
+{
+  static RCC_PeriphCLKInitTypeDef  periph_clk_init_struct;
+
+  /* RK043FN48H LCD clock configuration */
+  /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */
+  /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */
+  /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 Mhz */
+  /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6Mhz */
+  periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
+  periph_clk_init_struct.PLLSAI.PLLSAIN = 192;
+  periph_clk_init_struct.PLLSAI.PLLSAIR = RK043FN48H_FREQUENCY_DIVIDER;
+  periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_4;
+  HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct);
+}
+
+
+/*******************************************************************************
+                            Static Functions
+*******************************************************************************/
+
+/**
+  * @brief  Draws a character on LCD.
+  * @param  Xpos: Line where to display the character shape
+  * @param  Ypos: Start column address
+  * @param  c: Pointer to the character data
+  * @retval None
+  */
+static void DrawChar(uint16_t Xpos, uint16_t Ypos, const uint8_t *c)
+{
+  uint32_t i = 0, j = 0;
+  uint16_t height, width;
+  uint8_t  offset;
+  uint8_t  *pchar;
+  uint32_t line;
+  
+  height = DrawProp[ActiveLayer].pFont->Height;
+  width  = DrawProp[ActiveLayer].pFont->Width;
+  
+  offset =  8 *((width + 7)/8) -  width ;
+  
+  for(i = 0; i < height; i++)
+  {
+    pchar = ((uint8_t *)c + (width + 7)/8 * i);
+    
+    switch(((width + 7)/8))
+    {
+      
+    case 1:
+      line =  pchar[0];      
+      break;
+      
+    case 2:
+      line =  (pchar[0]<< 8) | pchar[1];      
+      break;
+      
+    case 3:
+    default:
+      line =  (pchar[0]<< 16) | (pchar[1]<< 8) | pchar[2];      
+      break;
+    } 
+    
+    for (j = 0; j < width; j++)
+    {
+      if(line & (1 << (width- j + offset- 1))) 
+      {
+        BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].TextColor);
+      }
+      else
+      {
+        BSP_LCD_DrawPixel((Xpos + j), Ypos, DrawProp[ActiveLayer].BackColor);
+      } 
+    }
+    Ypos++;
+  }
+}
+
+/**
+  * @brief  Fills a triangle (between 3 points).
+  * @param  x1: Point 1 X position
+  * @param  y1: Point 1 Y position
+  * @param  x2: Point 2 X position
+  * @param  y2: Point 2 Y position
+  * @param  x3: Point 3 X position
+  * @param  y3: Point 3 Y position
+  * @retval None
+  */
+static void FillTriangle(uint16_t x1, uint16_t x2, uint16_t x3, uint16_t y1, uint16_t y2, uint16_t y3)
+{ 
+  int16_t deltax = 0, deltay = 0, x = 0, y = 0, xinc1 = 0, xinc2 = 0, 
+  yinc1 = 0, yinc2 = 0, den = 0, num = 0, num_add = 0, num_pixels = 0,
+  curpixel = 0;
+  
+  deltax = ABS(x2 - x1);        /* The difference between the x's */
+  deltay = ABS(y2 - y1);        /* The difference between the y's */
+  x = x1;                       /* Start x off at the first pixel */
+  y = y1;                       /* Start y off at the first pixel */
+  
+  if (x2 >= x1)                 /* The x-values are increasing */
+  {
+    xinc1 = 1;
+    xinc2 = 1;
+  }
+  else                          /* The x-values are decreasing */
+  {
+    xinc1 = -1;
+    xinc2 = -1;
+  }
+  
+  if (y2 >= y1)                 /* The y-values are increasing */
+  {
+    yinc1 = 1;
+    yinc2 = 1;
+  }
+  else                          /* The y-values are decreasing */
+  {
+    yinc1 = -1;
+    yinc2 = -1;
+  }
+  
+  if (deltax >= deltay)         /* There is at least one x-value for every y-value */
+  {
+    xinc1 = 0;                  /* Don't change the x when numerator >= denominator */
+    yinc2 = 0;                  /* Don't change the y for every iteration */
+    den = deltax;
+    num = deltax / 2;
+    num_add = deltay;
+    num_pixels = deltax;         /* There are more x-values than y-values */
+  }
+  else                          /* There is at least one y-value for every x-value */
+  {
+    xinc2 = 0;                  /* Don't change the x for every iteration */
+    yinc1 = 0;                  /* Don't change the y when numerator >= denominator */
+    den = deltay;
+    num = deltay / 2;
+    num_add = deltax;
+    num_pixels = deltay;         /* There are more y-values than x-values */
+  }
+  
+  for (curpixel = 0; curpixel <= num_pixels; curpixel++)
+  {
+    BSP_LCD_DrawLine(x, y, x3, y3);
+    
+    num += num_add;              /* Increase the numerator by the top of the fraction */
+    if (num >= den)             /* Check if numerator >= denominator */
+    {
+      num -= den;               /* Calculate the new numerator value */
+      x += xinc1;               /* Change the x as appropriate */
+      y += yinc1;               /* Change the y as appropriate */
+    }
+    x += xinc2;                 /* Change the x as appropriate */
+    y += yinc2;                 /* Change the y as appropriate */
+  } 
+}
+
+/**
+  * @brief  Fills a buffer.
+  * @param  LayerIndex: Layer index
+  * @param  pDst: Pointer to destination buffer
+  * @param  xSize: Buffer width
+  * @param  ySize: Buffer height
+  * @param  OffLine: Offset
+  * @param  ColorIndex: Color index
+  * @retval None
+  */
+static void LL_FillBuffer(uint32_t LayerIndex, void *pDst, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t ColorIndex) 
+{
+  /* Register to memory mode with ARGB8888 as color Mode */ 
+  hDma2dHandler.Init.Mode         = DMA2D_R2M;
+  if(hLtdcHandler.LayerCfg[ActiveLayer].PixelFormat == LTDC_PIXEL_FORMAT_RGB565)
+  { /* RGB565 format */ 
+    hDma2dHandler.Init.ColorMode    = DMA2D_RGB565;
+  }
+  else
+  { /* ARGB8888 format */
+    hDma2dHandler.Init.ColorMode    = DMA2D_ARGB8888;
+  }
+  hDma2dHandler.Init.OutputOffset = OffLine;      
+  
+  hDma2dHandler.Instance = DMA2D;
+  
+  /* DMA2D Initialization */
+  if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) 
+  {
+    if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, LayerIndex) == HAL_OK) 
+    {
+      if (HAL_DMA2D_Start(&hDma2dHandler, ColorIndex, (uint32_t)pDst, xSize, ySize) == HAL_OK)
+      {
+        /* Polling For DMA transfer */  
+        HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
+      }
+    }
+  } 
+}
+
+/**
+  * @brief  Converts a line to an ARGB8888 pixel format.
+  * @param  pSrc: Pointer to source buffer
+  * @param  pDst: Output color
+  * @param  xSize: Buffer width
+  * @param  ColorMode: Input color mode   
+  * @retval None
+  */
+static void LL_ConvertLineToARGB8888(void *pSrc, void *pDst, uint32_t xSize, uint32_t ColorMode)
+{    
+  /* Configure the DMA2D Mode, Color Mode and output offset */
+  hDma2dHandler.Init.Mode         = DMA2D_M2M_PFC;
+  hDma2dHandler.Init.ColorMode    = DMA2D_ARGB8888;
+  hDma2dHandler.Init.OutputOffset = 0;     
+  
+  /* Foreground Configuration */
+  hDma2dHandler.LayerCfg[1].AlphaMode = DMA2D_NO_MODIF_ALPHA;
+  hDma2dHandler.LayerCfg[1].InputAlpha = 0xFF;
+  hDma2dHandler.LayerCfg[1].InputColorMode = ColorMode;
+  hDma2dHandler.LayerCfg[1].InputOffset = 0;
+  
+  hDma2dHandler.Instance = DMA2D; 
+  
+  /* DMA2D Initialization */
+  if(HAL_DMA2D_Init(&hDma2dHandler) == HAL_OK) 
+  {
+    if(HAL_DMA2D_ConfigLayer(&hDma2dHandler, 1) == HAL_OK) 
+    {
+      if (HAL_DMA2D_Start(&hDma2dHandler, (uint32_t)pSrc, (uint32_t)pDst, xSize, 1) == HAL_OK)
+      {
+        /* Polling For DMA transfer */  
+        HAL_DMA2D_PollForTransfer(&hDma2dHandler, 10);
+      }
+    }
+  } 
+}
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */
+  
+/**
+  * @}
+  */        
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_lcd.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_lcd.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,256 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_lcd.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains the common defines and functions prototypes for
+  *          the stm32746g_discovery_lcd.c driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */  
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_LCD_H
+#define __STM32746G_DISCOVERY_LCD_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 
+
+/* Includes ------------------------------------------------------------------*/
+/* Include LCD component Driver */
+/* LCD RK043FN48H-CT672B 4,3" 480x272 pixels */
+#include "rk043fn48h.h"
+
+/* Include SDRAM Driver */
+#include "stm32746g_discovery_sdram.h"
+ 
+#include "stm32746g_discovery.h"
+#include "fonts.h"
+  
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+    
+/** @addtogroup STM32746G_DISCOVERY_LCD
+  * @{
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Types STM32746G_DISCOVERY_LCD Exported Types
+  * @{
+  */  
+typedef struct 
+{ 
+  uint32_t TextColor; 
+  uint32_t BackColor;  
+  sFONT    *pFont;
+}LCD_DrawPropTypeDef;   
+   
+typedef struct 
+{
+  int16_t X;
+  int16_t Y;
+}Point, * pPoint; 
+   
+/** 
+  * @brief  Line mode structures definition  
+  */ 
+typedef enum
+{
+  CENTER_MODE             = 0x01,    /* Center mode */
+  RIGHT_MODE              = 0x02,    /* Right mode  */
+  LEFT_MODE               = 0x03     /* Left mode   */
+}Text_AlignModeTypdef;
+
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_LCD_Exported_Constants STM32746G_DISCOVERY_LCD Exported Constants
+  * @{
+  */ 
+#define MAX_LAYER_NUMBER       ((uint32_t)2)
+
+#define LCD_LayerCfgTypeDef    LTDC_LayerCfgTypeDef
+
+#define LTDC_ACTIVE_LAYER	     ((uint32_t)1) /* Layer 1 */
+/** 
+  * @brief  LCD status structure definition  
+  */     
+#define LCD_OK                 ((uint8_t)0x00)
+#define LCD_ERROR              ((uint8_t)0x01)
+#define LCD_TIMEOUT            ((uint8_t)0x02)
+
+/** 
+  * @brief  LCD FB_StartAddress  
+  */
+#define LCD_FB_START_ADDRESS       ((uint32_t)0xC0000000)
+
+/** 
+  * @brief  LCD color  
+  */ 
+#define LCD_COLOR_BLUE          ((uint32_t)0xFF0000FF)
+#define LCD_COLOR_GREEN         ((uint32_t)0xFF00FF00)
+#define LCD_COLOR_RED           ((uint32_t)0xFFFF0000)
+#define LCD_COLOR_CYAN          ((uint32_t)0xFF00FFFF)
+#define LCD_COLOR_MAGENTA       ((uint32_t)0xFFFF00FF)
+#define LCD_COLOR_YELLOW        ((uint32_t)0xFFFFFF00)
+#define LCD_COLOR_LIGHTBLUE     ((uint32_t)0xFF8080FF)
+#define LCD_COLOR_LIGHTGREEN    ((uint32_t)0xFF80FF80)
+#define LCD_COLOR_LIGHTRED      ((uint32_t)0xFFFF8080)
+#define LCD_COLOR_LIGHTCYAN     ((uint32_t)0xFF80FFFF)
+#define LCD_COLOR_LIGHTMAGENTA  ((uint32_t)0xFFFF80FF)
+#define LCD_COLOR_LIGHTYELLOW   ((uint32_t)0xFFFFFF80)
+#define LCD_COLOR_DARKBLUE      ((uint32_t)0xFF000080)
+#define LCD_COLOR_DARKGREEN     ((uint32_t)0xFF008000)
+#define LCD_COLOR_DARKRED       ((uint32_t)0xFF800000)
+#define LCD_COLOR_DARKCYAN      ((uint32_t)0xFF008080)
+#define LCD_COLOR_DARKMAGENTA   ((uint32_t)0xFF800080)
+#define LCD_COLOR_DARKYELLOW    ((uint32_t)0xFF808000)
+#define LCD_COLOR_WHITE         ((uint32_t)0xFFFFFFFF)
+#define LCD_COLOR_LIGHTGRAY     ((uint32_t)0xFFD3D3D3)
+#define LCD_COLOR_GRAY          ((uint32_t)0xFF808080)
+#define LCD_COLOR_DARKGRAY      ((uint32_t)0xFF404040)
+#define LCD_COLOR_BLACK         ((uint32_t)0xFF000000)
+#define LCD_COLOR_BROWN         ((uint32_t)0xFFA52A2A)
+#define LCD_COLOR_ORANGE        ((uint32_t)0xFFFFA500)
+#define LCD_COLOR_TRANSPARENT   ((uint32_t)0xFF000000)
+
+/** 
+  * @brief LCD default font 
+  */ 
+#define LCD_DEFAULT_FONT        Font24     
+
+/**
+  * @brief LCD special pins
+  */
+/* Display enable pin */
+#define LCD_DISP_PIN                    GPIO_PIN_12
+#define LCD_DISP_GPIO_PORT              GPIOI
+#define LCD_DISP_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOI_CLK_ENABLE()
+#define LCD_DISP_GPIO_CLK_DISABLE()     __HAL_RCC_GPIOI_CLK_DISABLE()
+
+/* Backlight control pin */
+#define LCD_BL_CTRL_PIN                  GPIO_PIN_3
+#define LCD_BL_CTRL_GPIO_PORT            GPIOK
+#define LCD_BL_CTRL_GPIO_CLK_ENABLE()    __HAL_RCC_GPIOK_CLK_ENABLE()
+#define LCD_BL_CTRL_GPIO_CLK_DISABLE()   __HAL_RCC_GPIOK_CLK_DISABLE()
+
+/**
+  * @}
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY_LCD_Exported_Functions
+  * @{
+  */
+uint8_t  BSP_LCD_Init(void);
+uint8_t  BSP_LCD_DeInit(void);
+uint32_t BSP_LCD_GetXSize(void);
+uint32_t BSP_LCD_GetYSize(void);
+void     BSP_LCD_SetXSize(uint32_t imageWidthPixels);
+void     BSP_LCD_SetYSize(uint32_t imageHeightPixels);
+
+/* Functions using the LTDC controller */
+void     BSP_LCD_LayerDefaultInit(uint16_t LayerIndex, uint32_t FrameBuffer);
+void     BSP_LCD_LayerRgb565Init(uint16_t LayerIndex, uint32_t FB_Address);
+void     BSP_LCD_SetTransparency(uint32_t LayerIndex, uint8_t Transparency);
+void     BSP_LCD_SetLayerAddress(uint32_t LayerIndex, uint32_t Address);
+void     BSP_LCD_SetColorKeying(uint32_t LayerIndex, uint32_t RGBValue);
+void     BSP_LCD_ResetColorKeying(uint32_t LayerIndex);
+void     BSP_LCD_SetLayerWindow(uint16_t LayerIndex, uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+
+void     BSP_LCD_SelectLayer(uint32_t LayerIndex);
+void     BSP_LCD_SetLayerVisible(uint32_t LayerIndex, FunctionalState State);
+
+void     BSP_LCD_SetTextColor(uint32_t Color);
+uint32_t BSP_LCD_GetTextColor(void);
+void     BSP_LCD_SetBackColor(uint32_t Color);
+uint32_t BSP_LCD_GetBackColor(void);
+void     BSP_LCD_SetFont(sFONT *fonts);
+sFONT    *BSP_LCD_GetFont(void);
+
+uint32_t BSP_LCD_ReadPixel(uint16_t Xpos, uint16_t Ypos);
+void     BSP_LCD_DrawPixel(uint16_t Xpos, uint16_t Ypos, uint32_t pixel);
+void     BSP_LCD_Clear(uint32_t Color);
+void     BSP_LCD_ClearStringLine(uint32_t Line);
+void     BSP_LCD_DisplayStringAtLine(uint16_t Line, uint8_t *ptr);
+void     BSP_LCD_DisplayStringAt(uint16_t Xpos, uint16_t Ypos, uint8_t *Text, Text_AlignModeTypdef Mode);
+void     BSP_LCD_DisplayChar(uint16_t Xpos, uint16_t Ypos, uint8_t Ascii);
+
+void     BSP_LCD_DrawHLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+void     BSP_LCD_DrawVLine(uint16_t Xpos, uint16_t Ypos, uint16_t Length);
+void     BSP_LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
+void     BSP_LCD_DrawRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+void     BSP_LCD_DrawCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+void     BSP_LCD_DrawPolygon(pPoint Points, uint16_t PointCount);
+void     BSP_LCD_DrawEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+void     BSP_LCD_DrawBitmap(uint32_t Xpos, uint32_t Ypos, uint8_t *pbmp);
+
+void     BSP_LCD_FillRect(uint16_t Xpos, uint16_t Ypos, uint16_t Width, uint16_t Height);
+void     BSP_LCD_FillCircle(uint16_t Xpos, uint16_t Ypos, uint16_t Radius);
+void     BSP_LCD_FillPolygon(pPoint Points, uint16_t PointCount);
+void     BSP_LCD_FillEllipse(int Xpos, int Ypos, int XRadius, int YRadius);
+
+void     BSP_LCD_DisplayOff(void);
+void     BSP_LCD_DisplayOn(void);
+
+/* These functions can be modified in case the current settings
+   need to be changed for specific application needs */
+void     BSP_LCD_MspInit(LTDC_HandleTypeDef *hltdc, void *Params);
+void     BSP_LCD_MspDeInit(LTDC_HandleTypeDef *hltdc, void *Params);
+void     BSP_LCD_ClockConfig(LTDC_HandleTypeDef *hltdc, void *Params);
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+  
+/**
+  * @}
+  */
+ 
+/**
+  * @}
+  */ 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_LCD_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_sdram.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_sdram.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,503 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_sdram.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file includes the SDRAM driver for the MT48LC4M32B2B5-7 memory 
+  *          device mounted on STM32746G-Discovery board.
+  @verbatim
+   1. How To use this driver:
+   --------------------------
+      - This driver is used to drive the MT48LC4M32B2B5-7 SDRAM external memory mounted
+        on STM32746G-Discovery board.
+      - This driver does not need a specific component driver for the SDRAM device
+        to be included with.
+   
+   2. Driver description:
+   ---------------------
+     + Initialization steps:
+        o Initialize the SDRAM external memory using the BSP_SDRAM_Init() function. This 
+          function includes the MSP layer hardware resources initialization and the
+          FMC controller configuration to interface with the external SDRAM memory.
+        o It contains the SDRAM initialization sequence to program the SDRAM external 
+          device using the function BSP_SDRAM_Initialization_sequence(). Note that this 
+          sequence is standard for all SDRAM devices, but can include some differences
+          from a device to another. If it is the case, the right sequence should be 
+          implemented separately.
+     
+     + SDRAM read/write operations
+        o SDRAM external memory can be accessed with read/write operations once it is
+          initialized.
+          Read/write operation can be performed with AHB access using the functions
+          BSP_SDRAM_ReadData()/BSP_SDRAM_WriteData(), or by DMA transfer using the functions
+          BSP_SDRAM_ReadData_DMA()/BSP_SDRAM_WriteData_DMA().
+        o The AHB access is performed with 32-bit width transaction, the DMA transfer
+          configuration is fixed at single (no burst) word transfer (see the 
+          SDRAM_MspInit() static function).
+        o User can implement his own functions for read/write access with his desired 
+          configurations.
+        o If interrupt mode is used for DMA transfer, the function BSP_SDRAM_DMA_IRQHandler()
+          is called in IRQ handler file, to serve the generated interrupt once the DMA 
+          transfer is complete.
+        o You can send a command to the SDRAM device in runtime using the function 
+          BSP_SDRAM_Sendcmd(), and giving the desired command as parameter chosen between 
+          the predefined commands of the "FMC_SDRAM_CommandTypeDef" structure. 
+ 
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_sdram.h"
+
+// mbed function to replace HAL_Delay function
+void wait_ms(int ms);
+
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */ 
+  
+/** @defgroup STM32746G_DISCOVERY_SDRAM STM32746G_DISCOVERY_SDRAM
+  * @{
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Types_Definitions STM32746G_DISCOVERY_SDRAM Private Types Definitions
+  * @{
+  */ 
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Defines STM32746G_DISCOVERY_SDRAM Private Defines
+  * @{
+  */
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Macros STM32746G_DISCOVERY_SDRAM Private Macros
+  * @{
+  */  
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Variables STM32746G_DISCOVERY_SDRAM Private Variables
+  * @{
+  */       
+static SDRAM_HandleTypeDef sdramHandle;
+static FMC_SDRAM_TimingTypeDef Timing;
+static FMC_SDRAM_CommandTypeDef Command;
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Private_Function_Prototypes STM32746G_DISCOVERY_SDRAM Private Function Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */
+    
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Functions STM32746G_DISCOVERY_SDRAM Exported Functions
+  * @{
+  */ 
+
+/**
+  * @brief  Initializes the SDRAM device.
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_Init(void)
+{ 
+  static uint8_t sdramstatus = SDRAM_ERROR;
+  /* SDRAM device configuration */
+  sdramHandle.Instance = FMC_SDRAM_DEVICE;
+    
+  /* Timing configuration for 100Mhz as SD clock frequency (System clock is up to 200Mhz) */
+  Timing.LoadToActiveDelay    = 2;
+  Timing.ExitSelfRefreshDelay = 7;
+  Timing.SelfRefreshTime      = 4;
+  Timing.RowCycleDelay        = 7;
+  Timing.WriteRecoveryTime    = 2;
+  Timing.RPDelay              = 2;
+  Timing.RCDDelay             = 2;
+  
+  sdramHandle.Init.SDBank             = FMC_SDRAM_BANK1;
+  sdramHandle.Init.ColumnBitsNumber   = FMC_SDRAM_COLUMN_BITS_NUM_8;
+  sdramHandle.Init.RowBitsNumber      = FMC_SDRAM_ROW_BITS_NUM_12;
+  sdramHandle.Init.MemoryDataWidth    = SDRAM_MEMORY_WIDTH;
+  sdramHandle.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
+  sdramHandle.Init.CASLatency         = FMC_SDRAM_CAS_LATENCY_2;
+  sdramHandle.Init.WriteProtection    = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
+  sdramHandle.Init.SDClockPeriod      = SDCLOCK_PERIOD;
+  sdramHandle.Init.ReadBurst          = FMC_SDRAM_RBURST_ENABLE;
+  sdramHandle.Init.ReadPipeDelay      = FMC_SDRAM_RPIPE_DELAY_0;
+  
+  /* SDRAM controller initialization */
+
+  BSP_SDRAM_MspInit(&sdramHandle, NULL); /* __weak function can be rewritten by the application */
+
+  if(HAL_SDRAM_Init(&sdramHandle, &Timing) != HAL_OK)
+  {
+    sdramstatus = SDRAM_ERROR;
+  }
+  else
+  {
+    sdramstatus = SDRAM_OK;
+  }
+  
+  /* SDRAM initialization sequence */
+  BSP_SDRAM_Initialization_sequence(REFRESH_COUNT);
+  
+  return sdramstatus;
+}
+
+/**
+  * @brief  DeInitializes the SDRAM device.
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_DeInit(void)
+{ 
+  static uint8_t sdramstatus = SDRAM_ERROR;
+  /* SDRAM device de-initialization */
+  sdramHandle.Instance = FMC_SDRAM_DEVICE;
+
+  if(HAL_SDRAM_DeInit(&sdramHandle) != HAL_OK)
+  {
+    sdramstatus = SDRAM_ERROR;
+  }
+  else
+  {
+    sdramstatus = SDRAM_OK;
+  }
+  
+  /* SDRAM controller de-initialization */
+  BSP_SDRAM_MspDeInit(&sdramHandle, NULL);
+  
+  return sdramstatus;
+}
+
+/**
+  * @brief  Programs the SDRAM device.
+  * @param  RefreshCount: SDRAM refresh counter value 
+  * @retval None
+  */
+void BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount)
+{
+  __IO uint32_t tmpmrd = 0;
+  
+  /* Step 1: Configure a clock configuration enable command */
+  Command.CommandMode            = FMC_SDRAM_CMD_CLK_ENABLE;
+  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
+  Command.AutoRefreshNumber      = 1;
+  Command.ModeRegisterDefinition = 0;
+
+  /* Send the command */
+  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+
+  /* Step 2: Insert 100 us minimum delay */ 
+  /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
+  //HAL_Delay(1);
+  wait_ms(1);
+    
+  /* Step 3: Configure a PALL (precharge all) command */ 
+  Command.CommandMode            = FMC_SDRAM_CMD_PALL;
+  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
+  Command.AutoRefreshNumber      = 1;
+  Command.ModeRegisterDefinition = 0;
+
+  /* Send the command */
+  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);  
+  
+  /* Step 4: Configure an Auto Refresh command */ 
+  Command.CommandMode            = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
+  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
+  Command.AutoRefreshNumber      = 8;
+  Command.ModeRegisterDefinition = 0;
+
+  /* Send the command */
+  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+  
+  /* Step 5: Program the external memory mode register */
+  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |\
+                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |\
+                     SDRAM_MODEREG_CAS_LATENCY_2           |\
+                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
+                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
+  
+  Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;
+  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
+  Command.AutoRefreshNumber      = 1;
+  Command.ModeRegisterDefinition = tmpmrd;
+
+  /* Send the command */
+  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);
+  
+  /* Step 6: Set the refresh rate counter */
+  /* Set the device refresh rate */
+  HAL_SDRAM_ProgramRefreshRate(&sdramHandle, RefreshCount); 
+}
+
+/**
+  * @brief  Reads an amount of data from the SDRAM memory in polling mode.
+  * @param  uwStartAddress: Read start address
+  * @param  pData: Pointer to data to be read  
+  * @param  uwDataSize: Size of read data from the memory
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+  if(HAL_SDRAM_Read_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+  {
+    return SDRAM_ERROR;
+  }
+  else
+  {
+    return SDRAM_OK;
+  } 
+}
+
+/**
+  * @brief  Reads an amount of data from the SDRAM memory in DMA mode.
+  * @param  uwStartAddress: Read start address
+  * @param  pData: Pointer to data to be read  
+  * @param  uwDataSize: Size of read data from the memory
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize)
+{
+  if(HAL_SDRAM_Read_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+  {
+    return SDRAM_ERROR;
+  }
+  else
+  {
+    return SDRAM_OK;
+  }     
+}
+
+/**
+  * @brief  Writes an amount of data to the SDRAM memory in polling mode.
+  * @param  uwStartAddress: Write start address
+  * @param  pData: Pointer to data to be written  
+  * @param  uwDataSize: Size of written data from the memory
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
+{
+  if(HAL_SDRAM_Write_32b(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+  {
+    return SDRAM_ERROR;
+  }
+  else
+  {
+    return SDRAM_OK;
+  }
+}
+
+/**
+  * @brief  Writes an amount of data to the SDRAM memory in DMA mode.
+  * @param  uwStartAddress: Write start address
+  * @param  pData: Pointer to data to be written  
+  * @param  uwDataSize: Size of written data from the memory
+  * @retval SDRAM status
+  */
+uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize) 
+{
+  if(HAL_SDRAM_Write_DMA(&sdramHandle, (uint32_t *)uwStartAddress, pData, uwDataSize) != HAL_OK)
+  {
+    return SDRAM_ERROR;
+  }
+  else
+  {
+    return SDRAM_OK;
+  } 
+}
+
+/**
+  * @brief  Sends command to the SDRAM bank.
+  * @param  SdramCmd: Pointer to SDRAM command structure 
+  * @retval SDRAM status
+  */  
+uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd)
+{
+  if(HAL_SDRAM_SendCommand(&sdramHandle, SdramCmd, SDRAM_TIMEOUT) != HAL_OK)
+  {
+    return SDRAM_ERROR;
+  }
+  else
+  {
+    return SDRAM_OK;
+  }
+}
+
+/**
+  * @brief  Handles SDRAM DMA transfer interrupt request.
+  * @retval None
+  */
+void BSP_SDRAM_DMA_IRQHandler(void)
+{
+  HAL_DMA_IRQHandler(sdramHandle.hdma); 
+}
+
+/**
+  * @brief  Initializes SDRAM MSP.
+  * @param  hsdram: SDRAM handle
+  * @param  Params
+  * @retval None
+  */
+__weak void BSP_SDRAM_MspInit(SDRAM_HandleTypeDef  *hsdram, void *Params)
+{  
+  static DMA_HandleTypeDef dma_handle;
+  GPIO_InitTypeDef gpio_init_structure;
+  
+  /* Enable FMC clock */
+  __HAL_RCC_FMC_CLK_ENABLE();
+  
+  /* Enable chosen DMAx clock */
+  __DMAx_CLK_ENABLE();
+
+  /* Enable GPIOs clock */
+  __HAL_RCC_GPIOC_CLK_ENABLE();
+  __HAL_RCC_GPIOD_CLK_ENABLE();
+  __HAL_RCC_GPIOE_CLK_ENABLE();
+  __HAL_RCC_GPIOF_CLK_ENABLE();
+  __HAL_RCC_GPIOG_CLK_ENABLE();
+  __HAL_RCC_GPIOH_CLK_ENABLE();
+  
+  /* Common GPIO configuration */
+  gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
+  gpio_init_structure.Pull      = GPIO_PULLUP;
+  gpio_init_structure.Speed     = GPIO_SPEED_FAST;
+  gpio_init_structure.Alternate = GPIO_AF12_FMC;
+  
+  /* GPIOC configuration */
+  gpio_init_structure.Pin   = GPIO_PIN_3;
+  HAL_GPIO_Init(GPIOC, &gpio_init_structure);
+
+  /* GPIOD configuration */
+  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9 |
+                              GPIO_PIN_10 | GPIO_PIN_14 | GPIO_PIN_15;
+  HAL_GPIO_Init(GPIOD, &gpio_init_structure);
+
+  /* GPIOE configuration */  
+  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_7| GPIO_PIN_8 | GPIO_PIN_9 |\
+                              GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
+                              GPIO_PIN_15;
+  HAL_GPIO_Init(GPIOE, &gpio_init_structure);
+  
+  /* GPIOF configuration */  
+  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2| GPIO_PIN_3 | GPIO_PIN_4 |\
+                              GPIO_PIN_5 | GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13 | GPIO_PIN_14 |\
+                              GPIO_PIN_15;
+  HAL_GPIO_Init(GPIOF, &gpio_init_structure);
+  
+  /* GPIOG configuration */  
+  gpio_init_structure.Pin   = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_4| GPIO_PIN_5 | GPIO_PIN_8 |\
+                              GPIO_PIN_15;
+  HAL_GPIO_Init(GPIOG, &gpio_init_structure);
+
+  /* GPIOH configuration */  
+  gpio_init_structure.Pin   = GPIO_PIN_3 | GPIO_PIN_5;
+  HAL_GPIO_Init(GPIOH, &gpio_init_structure); 
+  
+  /* Configure common DMA parameters */
+  dma_handle.Init.Channel             = SDRAM_DMAx_CHANNEL;
+  dma_handle.Init.Direction           = DMA_MEMORY_TO_MEMORY;
+  dma_handle.Init.PeriphInc           = DMA_PINC_ENABLE;
+  dma_handle.Init.MemInc              = DMA_MINC_ENABLE;
+  dma_handle.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
+  dma_handle.Init.MemDataAlignment    = DMA_MDATAALIGN_WORD;
+  dma_handle.Init.Mode                = DMA_NORMAL;
+  dma_handle.Init.Priority            = DMA_PRIORITY_HIGH;
+  dma_handle.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;         
+  dma_handle.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
+  dma_handle.Init.MemBurst            = DMA_MBURST_SINGLE;
+  dma_handle.Init.PeriphBurst         = DMA_PBURST_SINGLE; 
+  
+  dma_handle.Instance = SDRAM_DMAx_STREAM;
+  
+   /* Associate the DMA handle */
+  __HAL_LINKDMA(hsdram, hdma, dma_handle);
+  
+  /* Deinitialize the stream for new transfer */
+  HAL_DMA_DeInit(&dma_handle);
+  
+  /* Configure the DMA stream */
+  HAL_DMA_Init(&dma_handle); 
+  
+  /* NVIC configuration for DMA transfer complete interrupt */
+  HAL_NVIC_SetPriority(SDRAM_DMAx_IRQn, 5, 0);
+  HAL_NVIC_EnableIRQ(SDRAM_DMAx_IRQn);
+}
+
+/**
+  * @brief  DeInitializes SDRAM MSP.
+  * @param  hsdram: SDRAM handle
+  * @param  Params
+  * @retval None
+  */
+__weak void BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef  *hsdram, void *Params)
+{  
+    static DMA_HandleTypeDef dma_handle;
+  
+    /* Disable NVIC configuration for DMA interrupt */
+    HAL_NVIC_DisableIRQ(SDRAM_DMAx_IRQn);
+
+    /* Deinitialize the stream for new transfer */
+    dma_handle.Instance = SDRAM_DMAx_STREAM;
+    HAL_DMA_DeInit(&dma_handle);
+
+    /* GPIO pins clock, FMC clock and DMA clock can be shut down in the applications
+       by surcharging this __weak function */ 
+}
+
+/**
+  * @}
+  */  
+  
+/**
+  * @}
+  */ 
+  
+/**
+  * @}
+  */ 
+  
+/**
+  * @}
+  */ 
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_sdram.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_sdram.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,165 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_sdram.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains the common defines and functions prototypes for
+  *          the stm32746g_discovery_sdram.c driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_SDRAM_H
+#define __STM32746G_DISCOVERY_SDRAM_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif 
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32f7xx_hal.h"
+
+/** @addtogroup BSP
+  * @{
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+    
+/** @addtogroup STM32746G_DISCOVERY_SDRAM
+  * @{
+  */    
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Types STM32746G_DISCOVERY_SDRAM Exported Types
+  * @{
+  */
+
+/** 
+  * @brief  SDRAM status structure definition  
+  */     
+#define   SDRAM_OK         ((uint8_t)0x00)
+#define   SDRAM_ERROR      ((uint8_t)0x01)
+
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Constants STM32746G_DISCOVERY_SDRAM Exported Constants
+  * @{
+  */ 
+#define SDRAM_DEVICE_ADDR  ((uint32_t)0xC0000000)
+#define SDRAM_DEVICE_SIZE  ((uint32_t)0x800000)  /* SDRAM device size in MBytes */
+
+/* #define SDRAM_MEMORY_WIDTH            FMC_SDRAM_MEM_BUS_WIDTH_8  */
+#define SDRAM_MEMORY_WIDTH               FMC_SDRAM_MEM_BUS_WIDTH_16
+
+#define SDCLOCK_PERIOD                   FMC_SDRAM_CLOCK_PERIOD_2
+/* #define SDCLOCK_PERIOD                FMC_SDRAM_CLOCK_PERIOD_3 */   
+
+#define REFRESH_COUNT                    ((uint32_t)0x0603)   /* SDRAM refresh counter (100Mhz SD clock) */
+   
+#define SDRAM_TIMEOUT                    ((uint32_t)0xFFFF)
+
+/* DMA definitions for SDRAM DMA transfer */
+#define __DMAx_CLK_ENABLE                 __HAL_RCC_DMA2_CLK_ENABLE
+#define __DMAx_CLK_DISABLE                __HAL_RCC_DMA2_CLK_DISABLE
+#define SDRAM_DMAx_CHANNEL                DMA_CHANNEL_0
+#define SDRAM_DMAx_STREAM                 DMA2_Stream0  
+#define SDRAM_DMAx_IRQn                   DMA2_Stream0_IRQn
+#define SDRAM_DMAx_IRQHandler             DMA2_Stream0_IRQHandler  
+/**
+  * @}
+  */ 
+  
+/**
+  * @brief  FMC SDRAM Mode definition register defines
+  */
+#define SDRAM_MODEREG_BURST_LENGTH_1             ((uint16_t)0x0000)
+#define SDRAM_MODEREG_BURST_LENGTH_2             ((uint16_t)0x0001)
+#define SDRAM_MODEREG_BURST_LENGTH_4             ((uint16_t)0x0002)
+#define SDRAM_MODEREG_BURST_LENGTH_8             ((uint16_t)0x0004)
+#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL      ((uint16_t)0x0000)
+#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED     ((uint16_t)0x0008)
+#define SDRAM_MODEREG_CAS_LATENCY_2              ((uint16_t)0x0020)
+#define SDRAM_MODEREG_CAS_LATENCY_3              ((uint16_t)0x0030)
+#define SDRAM_MODEREG_OPERATING_MODE_STANDARD    ((uint16_t)0x0000)
+#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) 
+#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE     ((uint16_t)0x0200) 
+/**
+  * @}
+  */ 
+  
+/** @defgroup STM32746G_DISCOVERY_SDRAM_Exported_Macro STM32746G_DISCOVERY_SDRAM Exported Macro
+  * @{
+  */  
+/**
+  * @}
+  */ 
+   
+/** @addtogroup STM32746G_DISCOVERY_SDRAM_Exported_Functions
+  * @{
+  */  
+uint8_t BSP_SDRAM_Init(void);
+uint8_t BSP_SDRAM_DeInit(void);
+void    BSP_SDRAM_Initialization_sequence(uint32_t RefreshCount);
+uint8_t BSP_SDRAM_ReadData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_ReadData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_WriteData(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_WriteData_DMA(uint32_t uwStartAddress, uint32_t *pData, uint32_t uwDataSize);
+uint8_t BSP_SDRAM_Sendcmd(FMC_SDRAM_CommandTypeDef *SdramCmd);
+void    BSP_SDRAM_DMA_IRQHandler(void);  
+   
+/* These functions can be modified in case the current settings (e.g. DMA stream)
+   need to be changed for specific application needs */
+void    BSP_SDRAM_MspInit(SDRAM_HandleTypeDef  *hsdram, void *Params);
+void    BSP_SDRAM_MspDeInit(SDRAM_HandleTypeDef  *hsdram, void *Params);
+
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_SDRAM_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_ts.c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_ts.c	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,447 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_ts.c
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file provides a set of functions needed to manage the Touch 
+  *          Screen on STM32746G-Discovery board.
+  @verbatim
+   1. How To use this driver:
+   --------------------------
+      - This driver is used to drive the touch screen module of the STM32746G-Discovery
+        board on the RK043FN48H-CT672B 480x272 LCD screen with capacitive touch screen.
+      - The FT5336 component driver must be included in project files according to
+        the touch screen driver present on this board.
+   
+   2. Driver description:
+   ---------------------
+     + Initialization steps:
+        o Initialize the TS module using the BSP_TS_Init() function. This 
+          function includes the MSP layer hardware resources initialization and the
+          communication layer configuration to start the TS use. The LCD size properties
+          (x and y) are passed as parameters.
+        o If TS interrupt mode is desired, you must configure the TS interrupt mode
+          by calling the function BSP_TS_ITConfig(). The TS interrupt mode is generated
+          as an external interrupt whenever a touch is detected. 
+          The interrupt mode internally uses the IO functionalities driver driven by
+          the IO expander, to configure the IT line.
+     
+     + Touch screen use
+        o The touch screen state is captured whenever the function BSP_TS_GetState() is 
+          used. This function returns information about the last LCD touch occurred
+          in the TS_StateTypeDef structure.
+        o If TS interrupt mode is used, the function BSP_TS_ITGetStatus() is needed to get
+          the interrupt status. To clear the IT pending bits, you should call the 
+          function BSP_TS_ITClear().
+        o The IT is handled using the corresponding external interrupt IRQ handler,
+          the user IT callback treatment is implemented on the same external interrupt
+          callback.
+  @endverbatim
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery_ts.h"
+
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */ 
+  
+/** @defgroup STM32746G_DISCOVERY_TS STM32746G_DISCOVERY_TS
+  * @{
+  */   
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Types_Definitions STM32746G_DISCOVERY_TS Types Definitions
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Defines STM32746G_DISCOVERY_TS Types Defines
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Macros STM32746G_DISCOVERY_TS Private Macros
+  * @{
+  */ 
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
+  * @{
+  */
+  /**
+    * @}
+    */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Variables STM32746G_DISCOVERY_TS Private Variables
+  * @{
+  */ 
+static TS_DrvTypeDef *tsDriver;
+static uint16_t tsXBoundary, tsYBoundary; 
+static uint8_t  tsOrientation;
+static uint8_t  I2cAddress;
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Private_Function_Prototypes STM32746G_DISCOVERY_TS Private Function Prototypes
+  * @{
+  */ 
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Functions STM32746G_DISCOVERY_TS Exported Functions
+  * @{
+  */ 
+
+/**
+  * @brief  Initializes and configures the touch screen functionalities and 
+  *         configures all necessary hardware resources (GPIOs, I2C, clocks..).
+  * @param  ts_SizeX: Maximum X size of the TS area on LCD
+  * @param  ts_SizeY: Maximum Y size of the TS area on LCD
+  * @retval TS_OK if all initializations are OK. Other value if error.
+  */
+uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY)
+{
+  uint8_t status = TS_OK;
+  tsXBoundary = ts_SizeX;
+  tsYBoundary = ts_SizeY;
+  
+  /* Read ID and verify if the touch screen driver is ready */
+  ft5336_ts_drv.Init(TS_I2C_ADDRESS);
+  if(ft5336_ts_drv.ReadID(TS_I2C_ADDRESS) == FT5336_ID_VALUE)
+  { 
+    /* Initialize the TS driver structure */
+    tsDriver = &ft5336_ts_drv;
+    I2cAddress = TS_I2C_ADDRESS;
+    tsOrientation = TS_SWAP_XY;
+
+    /* Initialize the TS driver */
+    tsDriver->Start(I2cAddress);
+  }
+  else
+  {
+    status = TS_DEVICE_NOT_FOUND;
+  }
+
+  return status;
+}
+
+/**
+  * @brief  DeInitializes the TouchScreen.
+  * @retval TS state
+  */
+uint8_t BSP_TS_DeInit(void)
+{ 
+  /* Actually ts_driver does not provide a DeInit function */
+  return TS_OK;
+}
+
+/**
+  * @brief  Configures and enables the touch screen interrupts.
+  * @retval TS_OK if all initializations are OK. Other value if error.
+  */
+uint8_t BSP_TS_ITConfig(void)
+{
+  GPIO_InitTypeDef gpio_init_structure;
+
+  /* Configure Interrupt mode for SD detection pin */
+  gpio_init_structure.Pin = TS_INT_PIN;
+  gpio_init_structure.Pull = GPIO_NOPULL;
+  gpio_init_structure.Speed = GPIO_SPEED_FAST;
+  gpio_init_structure.Mode = GPIO_MODE_IT_RISING;
+  HAL_GPIO_Init(TS_INT_GPIO_PORT, &gpio_init_structure);
+
+  /* Enable and set Touch screen EXTI Interrupt to the lowest priority */
+  HAL_NVIC_SetPriority((IRQn_Type)(TS_INT_EXTI_IRQn), 0x0F, 0x00);
+  HAL_NVIC_EnableIRQ((IRQn_Type)(TS_INT_EXTI_IRQn));
+
+  /* Enable the TS ITs */
+  tsDriver->EnableIT(I2cAddress);
+
+  return TS_OK;  
+}
+
+/**
+  * @brief  Gets the touch screen interrupt status.
+  * @retval TS_OK if all initializations are OK. Other value if error.
+  */
+uint8_t BSP_TS_ITGetStatus(void)
+{
+  /* Return the TS IT status */
+  return (tsDriver->GetITStatus(I2cAddress));
+}
+
+/**
+  * @brief  Returns status and positions of the touch screen.
+  * @param  TS_State: Pointer to touch screen current state structure
+  * @retval TS_OK if all initializations are OK. Other value if error.
+  */
+uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State)
+{
+  static uint32_t _x[TS_MAX_NB_TOUCH] = {0, 0};
+  static uint32_t _y[TS_MAX_NB_TOUCH] = {0, 0};
+  uint8_t ts_status = TS_OK;
+  uint16_t x[TS_MAX_NB_TOUCH];
+  uint16_t y[TS_MAX_NB_TOUCH];
+  uint16_t brute_x[TS_MAX_NB_TOUCH];
+  uint16_t brute_y[TS_MAX_NB_TOUCH];
+  uint16_t x_diff;
+  uint16_t y_diff;
+  uint32_t index;
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+  uint32_t weight = 0;
+  uint32_t area = 0;
+  uint32_t event = 0;
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+  /* Check and update the number of touches active detected */
+  TS_State->touchDetected = tsDriver->DetectTouch(I2cAddress);
+  
+  if(TS_State->touchDetected)
+  {
+    for(index=0; index < TS_State->touchDetected; index++)
+    {
+      /* Get each touch coordinates */
+      tsDriver->GetXY(I2cAddress, &(brute_x[index]), &(brute_y[index]));
+
+      if(tsOrientation == TS_SWAP_NONE)
+      {
+        x[index] = brute_x[index];
+        y[index] = brute_y[index];
+      }
+
+      if(tsOrientation & TS_SWAP_X)
+      {
+        x[index] = 4096 - brute_x[index];
+      }
+
+      if(tsOrientation & TS_SWAP_Y)
+      {
+        y[index] = 4096 - brute_y[index];
+      }
+
+      if(tsOrientation & TS_SWAP_XY)
+      {
+        y[index] = brute_x[index];
+        x[index] = brute_y[index];
+      }
+
+      x_diff = x[index] > _x[index]? (x[index] - _x[index]): (_x[index] - x[index]);
+      y_diff = y[index] > _y[index]? (y[index] - _y[index]): (_y[index] - y[index]);
+
+      if ((x_diff + y_diff) > 5)
+      {
+        _x[index] = x[index];
+        _y[index] = y[index];
+      }
+
+      if(I2cAddress == FT5336_I2C_SLAVE_ADDRESS)
+      {
+        TS_State->touchX[index] = x[index];
+        TS_State->touchY[index] = y[index];
+      }
+      else
+      {
+        /* 2^12 = 4096 : indexes are expressed on a dynamic of 4096 */
+        TS_State->touchX[index] = (tsXBoundary * _x[index]) >> 12;
+        TS_State->touchY[index] = (tsYBoundary * _y[index]) >> 12;
+      }
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+
+      /* Get touch info related to the current touch */
+      ft5336_TS_GetTouchInfo(I2cAddress, index, &weight, &area, &event);
+
+      /* Update TS_State structure */
+      TS_State->touchWeight[index] = weight;
+      TS_State->touchArea[index]   = area;
+
+      /* Remap touch event */
+      switch(event)
+      {
+        case FT5336_TOUCH_EVT_FLAG_PRESS_DOWN	:
+          TS_State->touchEventId[index] = TOUCH_EVENT_PRESS_DOWN;
+          break;
+        case FT5336_TOUCH_EVT_FLAG_LIFT_UP :
+          TS_State->touchEventId[index] = TOUCH_EVENT_LIFT_UP;
+          break;
+        case FT5336_TOUCH_EVT_FLAG_CONTACT :
+          TS_State->touchEventId[index] = TOUCH_EVENT_CONTACT;
+          break;
+        case FT5336_TOUCH_EVT_FLAG_NO_EVENT :
+          TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
+          break;
+        default :
+          ts_status = TS_ERROR;
+          break;
+      } /* of switch(event) */
+
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+    } /* of for(index=0; index < TS_State->touchDetected; index++) */
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+    /* Get gesture Id */
+    ts_status = BSP_TS_Get_GestureId(TS_State);
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+  } /* end of if(TS_State->touchDetected != 0) */
+
+  return (ts_status);
+}
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+/**
+  * @brief  Update gesture Id following a touch detected.
+  * @param  TS_State: Pointer to touch screen current state structure
+  * @retval TS_OK if all initializations are OK. Other value if error.
+  */
+uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State)
+{
+  uint32_t gestureId = 0;
+  uint8_t  ts_status = TS_OK;
+
+  /* Get gesture Id */
+  ft5336_TS_GetGestureID(I2cAddress, &gestureId);
+
+  /* Remap gesture Id to a TS_GestureIdTypeDef value */
+  switch(gestureId)
+  {
+    case FT5336_GEST_ID_NO_GESTURE :
+      TS_State->gestureId = GEST_ID_NO_GESTURE;
+      break;
+    case FT5336_GEST_ID_MOVE_UP :
+      TS_State->gestureId = GEST_ID_MOVE_UP;
+      break;
+    case FT5336_GEST_ID_MOVE_RIGHT :
+      TS_State->gestureId = GEST_ID_MOVE_RIGHT;
+      break;
+    case FT5336_GEST_ID_MOVE_DOWN :
+      TS_State->gestureId = GEST_ID_MOVE_DOWN;
+      break;
+    case FT5336_GEST_ID_MOVE_LEFT :
+      TS_State->gestureId = GEST_ID_MOVE_LEFT;
+      break;
+    case FT5336_GEST_ID_ZOOM_IN :
+      TS_State->gestureId = GEST_ID_ZOOM_IN;
+      break;
+    case FT5336_GEST_ID_ZOOM_OUT :
+      TS_State->gestureId = GEST_ID_ZOOM_OUT;
+      break;
+    default :
+      ts_status = TS_ERROR;
+      break;
+  } /* of switch(gestureId) */
+
+  return(ts_status);
+}
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+/**
+  * @brief  Clears all touch screen interrupts.
+  */
+void BSP_TS_ITClear(void)
+{
+  /* Clear TS IT pending bits */
+  tsDriver->ClearIT(I2cAddress); 
+}
+
+
+/** @defgroup STM32756G_DISCOVERY_TS_Private_Functions TS Private Functions
+  * @{
+  */
+
+
+/**
+  * @brief  Function used to reset all touch data before a new acquisition
+  *         of touch information.
+  * @param  TS_State: Pointer to touch screen current state structure
+  * @retval TS_OK if OK, TE_ERROR if problem found.
+  */
+uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State)
+{
+  uint8_t ts_status = TS_ERROR;
+  uint32_t index;
+
+  if (TS_State != (TS_StateTypeDef *)NULL)
+  {
+    TS_State->gestureId = GEST_ID_NO_GESTURE;
+    TS_State->touchDetected = 0;
+
+    for(index = 0; index < TS_MAX_NB_TOUCH; index++)
+    {
+      TS_State->touchX[index]       = 0;
+      TS_State->touchY[index]       = 0;
+      TS_State->touchArea[index]    = 0;
+      TS_State->touchEventId[index] = TOUCH_EVENT_NO_EVT;
+      TS_State->touchWeight[index]  = 0;
+    }
+
+    ts_status = TS_OK;
+
+  } /* of if (TS_State != (TS_StateTypeDef *)NULL) */
+
+  return (ts_status);
+}
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */  
+
+/**
+  * @}
+  */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a stm32746g_discovery_ts.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stm32746g_discovery_ts.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,214 @@
+/**
+  ******************************************************************************
+  * @file    stm32746g_discovery_ts.h
+  * @author  MCD Application Team
+  * @version V1.0.0
+  * @date    25-June-2015
+  * @brief   This file contains the common defines and functions prototypes for
+  *          the stm32746g_discovery_ts.c driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */ 
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __STM32746G_DISCOVERY_TS_H
+#define __STM32746G_DISCOVERY_TS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif   
+   
+/* Includes ------------------------------------------------------------------*/
+#include "stm32746g_discovery.h"
+/* Include touch screen FT5336 component Driver */
+#include "ft5336.h"
+   
+/** @addtogroup BSP
+  * @{
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY
+  * @{
+  */
+    
+/** @addtogroup STM32746G_DISCOVERY_TS
+  * @{
+  */
+
+ /** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
+   * @{
+   */
+
+/** @brief With FT5336 : maximum 5 touches detected simultaneously
+  */
+#define TS_MAX_NB_TOUCH                 ((uint32_t) FT5336_MAX_DETECTABLE_TOUCH)
+
+#define TS_NO_IRQ_PENDING               ((uint8_t) 0)
+#define TS_IRQ_PENDING                  ((uint8_t) 1)
+
+#define TS_SWAP_NONE                    ((uint8_t) 0x01)
+#define TS_SWAP_X                       ((uint8_t) 0x02)
+#define TS_SWAP_Y                       ((uint8_t) 0x04)
+#define TS_SWAP_XY                      ((uint8_t) 0x08)
+
+/**
+  * @}
+  */
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Types  STM32746G_DISCOVERY_TS Exported Types
+  * @{
+  */
+/**
+*  @brief TS_StateTypeDef
+*  Define TS State structure
+*/
+typedef struct
+{
+  uint8_t  touchDetected;                /*!< Total number of active touches detected at last scan */
+  uint16_t touchX[TS_MAX_NB_TOUCH];      /*!< Touch X[0], X[1] coordinates on 12 bits */
+  uint16_t touchY[TS_MAX_NB_TOUCH];      /*!< Touch Y[0], Y[1] coordinates on 12 bits */
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+  uint8_t  touchWeight[TS_MAX_NB_TOUCH]; /*!< Touch_Weight[0], Touch_Weight[1] : weight property of touches */
+  uint8_t  touchEventId[TS_MAX_NB_TOUCH];     /*!< Touch_EventId[0], Touch_EventId[1] : take value of type @ref TS_TouchEventTypeDef */
+  uint8_t  touchArea[TS_MAX_NB_TOUCH];   /*!< Touch_Area[0], Touch_Area[1] : touch area of each touch */
+  uint32_t gestureId; /*!< type of gesture detected : take value of type @ref TS_GestureIdTypeDef */
+#endif  /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+} TS_StateTypeDef;
+
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Exported_Constants STM32746G_DISCOVERY_TS Exported Constants
+  * @{
+  */
+
+typedef enum 
+{
+  TS_OK                = 0x00, /*!< Touch Ok */
+  TS_ERROR             = 0x01, /*!< Touch Error */
+  TS_TIMEOUT           = 0x02, /*!< Touch Timeout */
+  TS_DEVICE_NOT_FOUND  = 0x03  /*!< Touchscreen device not found */
+}TS_StatusTypeDef;
+
+/**
+ *  @brief TS_GestureIdTypeDef
+ *  Define Possible managed gesture identification values returned by touch screen
+ *  driver.
+ */
+typedef enum
+{
+  GEST_ID_NO_GESTURE = 0x00, /*!< Gesture not defined / recognized */
+  GEST_ID_MOVE_UP    = 0x01, /*!< Gesture Move Up */
+  GEST_ID_MOVE_RIGHT = 0x02, /*!< Gesture Move Right */
+  GEST_ID_MOVE_DOWN  = 0x03, /*!< Gesture Move Down */
+  GEST_ID_MOVE_LEFT  = 0x04, /*!< Gesture Move Left */
+  GEST_ID_ZOOM_IN    = 0x05, /*!< Gesture Zoom In */
+  GEST_ID_ZOOM_OUT   = 0x06, /*!< Gesture Zoom Out */
+  GEST_ID_NB_MAX     = 0x07  /*!< max number of gesture id */
+
+} TS_GestureIdTypeDef;
+
+/**
+ *  @brief TS_TouchEventTypeDef
+ *  Define Possible touch events kind as returned values
+ *  by touch screen IC Driver.
+ */
+typedef enum
+{
+  TOUCH_EVENT_NO_EVT        = 0x00, /*!< Touch Event : undetermined */
+  TOUCH_EVENT_PRESS_DOWN    = 0x01, /*!< Touch Event Press Down */
+  TOUCH_EVENT_LIFT_UP       = 0x02, /*!< Touch Event Lift Up */
+  TOUCH_EVENT_CONTACT       = 0x03, /*!< Touch Event Contact */
+  TOUCH_EVENT_NB_MAX        = 0x04  /*!< max number of touch events kind */
+
+} TS_TouchEventTypeDef;
+/**
+  * @}
+  */ 
+
+/** @defgroup STM32746G_DISCOVERY_TS_Imported_Variables STM32746G_DISCOVERY_TS Imported Variables
+  * @{
+  */ 
+/**
+ *  @brief Table for touchscreen event information display on LCD :
+ *  table indexed on enum @ref TS_TouchEventTypeDef information
+ */
+extern char * ts_event_string_tab[TOUCH_EVENT_NB_MAX];
+
+/**
+ *  @brief Table for touchscreen gesture Id information display on LCD : table indexed
+ *  on enum @ref TS_GestureIdTypeDef information
+ */
+extern char * ts_gesture_id_string_tab[GEST_ID_NB_MAX];
+/**
+  * @}
+  */ 
+
+/** @addtogroup STM32746G_DISCOVERY_TS_Exported_Functions
+  * @{
+  */
+uint8_t BSP_TS_Init(uint16_t ts_SizeX, uint16_t ts_SizeY);
+uint8_t BSP_TS_DeInit(void);
+uint8_t BSP_TS_GetState(TS_StateTypeDef *TS_State);
+
+#if (TS_MULTI_TOUCH_SUPPORTED == 1)
+uint8_t BSP_TS_Get_GestureId(TS_StateTypeDef *TS_State);
+#endif /* TS_MULTI_TOUCH_SUPPORTED == 1 */
+
+uint8_t BSP_TS_ITConfig(void);
+uint8_t BSP_TS_ITGetStatus(void);
+void    BSP_TS_ITClear(void);
+uint8_t BSP_TS_ResetTouchData(TS_StateTypeDef *TS_State);
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */ 
+
+/**
+  * @}
+  */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __STM32746G_DISCOVERY_TS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff -r 000000000000 -r 99b5a7505a7a ts.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ts.h	Sun Feb 11 18:33:41 2018 +0000
@@ -0,0 +1,107 @@
+/**
+  ******************************************************************************
+  * @file    ts.h
+  * @author  MCD Application Team
+  * @version V4.0.0
+  * @date    22-June-2015
+  * @brief   This file contains all the functions prototypes for the Touch Screen driver.
+  ******************************************************************************
+  * @attention
+  *
+  * <h2><center>&copy; COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
+  *
+  * Redistribution and use in source and binary forms, with or without modification,
+  * are permitted provided that the following conditions are met:
+  *   1. Redistributions of source code must retain the above copyright notice,
+  *      this list of conditions and the following disclaimer.
+  *   2. Redistributions in binary form must reproduce the above copyright notice,
+  *      this list of conditions and the following disclaimer in the documentation
+  *      and/or other materials provided with the distribution.
+  *   3. Neither the name of STMicroelectronics nor the names of its contributors
+  *      may be used to endorse or promote products derived from this software
+  *      without specific prior written permission.
+  *
+  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  *
+  ******************************************************************************
+  */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __TS_H
+#define __TS_H
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include <stdint.h> 
+
+/** @addtogroup BSP
+  * @{
+  */
+
+/** @addtogroup Components
+  * @{
+  */
+    
+/** @addtogroup TS
+  * @{
+  */
+
+/** @defgroup TS_Exported_Types
+  * @{
+  */
+
+/** @defgroup TS_Driver_structure  Touch Sensor Driver structure
+  * @{
+  */
+typedef struct
+{  
+  void       (*Init)(uint16_t);
+  uint16_t   (*ReadID)(uint16_t);
+  void       (*Reset)(uint16_t);
+  void       (*Start)(uint16_t);
+  uint8_t    (*DetectTouch)(uint16_t);
+  void       (*GetXY)(uint16_t, uint16_t*, uint16_t*);
+  void       (*EnableIT)(uint16_t);
+  void       (*ClearIT)(uint16_t);
+  uint8_t    (*GetITStatus)(uint16_t);
+  void       (*DisableIT)(uint16_t);
+}TS_DrvTypeDef;
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+/**
+  * @}
+  */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TS_H */
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/