See changelog v0.9.8
authorKevin Townsend <kevin@ktownsend.com>
Fri, 9 Mar 2012 13:00:19 +0000 (14:00 +0100)
committerKevin Townsend <kevin@ktownsend.com>
Fri, 9 Mar 2012 13:00:19 +0000 (14:00 +0100)
145 files changed:
ChangeLog.txt
Makefile
build/codelite/LPC1343 Workspace.workspace.session
build/codelite/LPC1343_CodeBase.project
build/crossworks/LPC1343_CodeBase.hzp
build/crossworks/LPC1343_CodeBase.hzs
drivers/displays/bitmap/readme.txt [new file with mode: 0644]
drivers/displays/bitmap/sharpmem/sharpmem.c [new file with mode: 0644]
drivers/displays/bitmap/sharpmem/sharpmem.h [new file with mode: 0644]
drivers/displays/bitmap/ssd1306/ssd1306.c [new file with mode: 0644]
drivers/displays/bitmap/ssd1306/ssd1306.h [new file with mode: 0644]
drivers/displays/bitmap/st7565/st7565.c [new file with mode: 0644]
drivers/displays/bitmap/st7565/st7565.h [new file with mode: 0644]
drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c [new file with mode: 0644]
drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h [new file with mode: 0644]
drivers/displays/icons16.h [new file with mode: 0644]
drivers/displays/smallfonts.c [new file with mode: 0644]
drivers/displays/smallfonts.h [new file with mode: 0644]
drivers/displays/tft/bmp.c [new file with mode: 0644]
drivers/displays/tft/bmp.h [new file with mode: 0644]
drivers/displays/tft/colors.h [new file with mode: 0644]
drivers/displays/tft/dialogues/alphanumeric.c [new file with mode: 0644]
drivers/displays/tft/dialogues/alphanumeric.h [new file with mode: 0644]
drivers/displays/tft/drawing.c [new file with mode: 0644]
drivers/displays/tft/drawing.h [new file with mode: 0644]
drivers/displays/tft/fonts/bitmapfonts.h [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusans9.c [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusans9.h [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansbold9.c [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansbold9.h [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusanscondensed9.c [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusanscondensed9.h [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansmono8.c [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansmono8.h [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansmonobold8.c [new file with mode: 0644]
drivers/displays/tft/fonts/dejavusansmonobold8.h [new file with mode: 0644]
drivers/displays/tft/fonts/verdana14.c [new file with mode: 0644]
drivers/displays/tft/fonts/verdana14.h [new file with mode: 0644]
drivers/displays/tft/fonts/verdana9.c [new file with mode: 0644]
drivers/displays/tft/fonts/verdana9.h [new file with mode: 0644]
drivers/displays/tft/fonts/verdanabold14.c [new file with mode: 0644]
drivers/displays/tft/fonts/verdanabold14.h [new file with mode: 0644]
drivers/displays/tft/hw/ILI9325.c [new file with mode: 0644]
drivers/displays/tft/hw/ILI9325.h [new file with mode: 0644]
drivers/displays/tft/hw/ILI9328.c [new file with mode: 0644]
drivers/displays/tft/hw/ILI9328.h [new file with mode: 0644]
drivers/displays/tft/hw/hx8340b.c [new file with mode: 0644]
drivers/displays/tft/hw/hx8340b.h [new file with mode: 0644]
drivers/displays/tft/hw/readme.txt [new file with mode: 0644]
drivers/displays/tft/hw/ssd1331.c [new file with mode: 0644]
drivers/displays/tft/hw/ssd1331.h [new file with mode: 0644]
drivers/displays/tft/hw/ssd1351.c [new file with mode: 0644]
drivers/displays/tft/hw/ssd1351.h [new file with mode: 0644]
drivers/displays/tft/hw/st7735.c [new file with mode: 0644]
drivers/displays/tft/hw/st7735.h [new file with mode: 0644]
drivers/displays/tft/hw/st7783.c [new file with mode: 0644]
drivers/displays/tft/hw/st7783.h [new file with mode: 0644]
drivers/displays/tft/hw/template.c [new file with mode: 0644]
drivers/displays/tft/lcd.h [new file with mode: 0644]
drivers/displays/tft/readme.txt [new file with mode: 0644]
drivers/displays/tft/touchscreen.c [new file with mode: 0644]
drivers/displays/tft/touchscreen.h [new file with mode: 0644]
drivers/lcd/bitmap/readme.txt [deleted file]
drivers/lcd/bitmap/sharpmem/sharpmem.c [deleted file]
drivers/lcd/bitmap/sharpmem/sharpmem.h [deleted file]
drivers/lcd/bitmap/ssd1306/ssd1306.c [deleted file]
drivers/lcd/bitmap/ssd1306/ssd1306.h [deleted file]
drivers/lcd/bitmap/st7565/st7565.c [deleted file]
drivers/lcd/bitmap/st7565/st7565.h [deleted file]
drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c [deleted file]
drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h [deleted file]
drivers/lcd/icons16.h [deleted file]
drivers/lcd/smallfonts.c [deleted file]
drivers/lcd/smallfonts.h [deleted file]
drivers/lcd/tft/bmp.c [deleted file]
drivers/lcd/tft/bmp.h [deleted file]
drivers/lcd/tft/colors.h [deleted file]
drivers/lcd/tft/dialogues/alphanumeric.c [deleted file]
drivers/lcd/tft/dialogues/alphanumeric.h [deleted file]
drivers/lcd/tft/drawing.c [deleted file]
drivers/lcd/tft/drawing.h [deleted file]
drivers/lcd/tft/fonts/bitmapfonts.h [deleted file]
drivers/lcd/tft/fonts/dejavusans9.c [deleted file]
drivers/lcd/tft/fonts/dejavusans9.h [deleted file]
drivers/lcd/tft/fonts/dejavusansbold9.c [deleted file]
drivers/lcd/tft/fonts/dejavusansbold9.h [deleted file]
drivers/lcd/tft/fonts/dejavusanscondensed9.c [deleted file]
drivers/lcd/tft/fonts/dejavusanscondensed9.h [deleted file]
drivers/lcd/tft/fonts/dejavusansmono8.c [deleted file]
drivers/lcd/tft/fonts/dejavusansmono8.h [deleted file]
drivers/lcd/tft/fonts/dejavusansmonobold8.c [deleted file]
drivers/lcd/tft/fonts/dejavusansmonobold8.h [deleted file]
drivers/lcd/tft/fonts/verdana14.c [deleted file]
drivers/lcd/tft/fonts/verdana14.h [deleted file]
drivers/lcd/tft/fonts/verdana9.c [deleted file]
drivers/lcd/tft/fonts/verdana9.h [deleted file]
drivers/lcd/tft/fonts/verdanabold14.c [deleted file]
drivers/lcd/tft/fonts/verdanabold14.h [deleted file]
drivers/lcd/tft/hw/ILI9325.c [deleted file]
drivers/lcd/tft/hw/ILI9325.h [deleted file]
drivers/lcd/tft/hw/ILI9328.c [deleted file]
drivers/lcd/tft/hw/ILI9328.h [deleted file]
drivers/lcd/tft/hw/hx8340b.c [deleted file]
drivers/lcd/tft/hw/hx8340b.h [deleted file]
drivers/lcd/tft/hw/readme.txt [deleted file]
drivers/lcd/tft/hw/ssd1331.c [deleted file]
drivers/lcd/tft/hw/ssd1331.h [deleted file]
drivers/lcd/tft/hw/ssd1351.c [deleted file]
drivers/lcd/tft/hw/ssd1351.h [deleted file]
drivers/lcd/tft/hw/st7735.c [deleted file]
drivers/lcd/tft/hw/st7735.h [deleted file]
drivers/lcd/tft/hw/st7783.c [deleted file]
drivers/lcd/tft/hw/st7783.h [deleted file]
drivers/lcd/tft/hw/template.c [deleted file]
drivers/lcd/tft/lcd.h [deleted file]
drivers/lcd/tft/readme.txt [deleted file]
drivers/lcd/tft/touchscreen.c [deleted file]
drivers/lcd/tft/touchscreen.h [deleted file]
main.c
project/commands/cmd_sysinfo.c
project/commands/drawing/cmd_backlight.c
project/commands/drawing/cmd_bmp.c
project/commands/drawing/cmd_button.c
project/commands/drawing/cmd_calibrate.c
project/commands/drawing/cmd_circle.c
project/commands/drawing/cmd_clear.c
project/commands/drawing/cmd_gettext.c
project/commands/drawing/cmd_line.c
project/commands/drawing/cmd_orientation.c
project/commands/drawing/cmd_pixel.c
project/commands/drawing/cmd_progress.c
project/commands/drawing/cmd_rectangle.c
project/commands/drawing/cmd_roundedcorner.c
project/commands/drawing/cmd_text.c
project/commands/drawing/cmd_textw.c
project/commands/drawing/cmd_triangle.c
project/commands/drawing/cmd_tsthreshhold.c
project/commands/drawing/cmd_tswait.c
projectconfig.h
sysinit.c
tools/examples/lcd/tft/basic_ui/main.c
tools/examples/lcd/tft/drawing_basic/main.c
tools/examples/lcd/tft/oscilloscope/main.c
tools/examples/lcd/tft/touchscreen/main.c
tools/readme.txt

index 5075668..d89d321 100644 (file)
@@ -1,5 +1,7 @@
 v0.9.8 - Ongoing
 ================
+- *** Renamed '/drivers/lcd' to '/drivers/display' ***
+- Added driver for HX8340-B based LCDs
 - Added flag to projectconfig.h to disable the default
   GPIO IRQ Handler functions in code/gpio/gpio.c
 - Added driver for Samsung VFD displays from Adafruit
index 14e1c26..d8b61f3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -63,8 +63,8 @@ VPATH += drivers/rtc/isl12022m
 OBJS += isl12022m.o
 
 # TFT LCD support
-VPATH += drivers/lcd/tft drivers/lcd/tft/hw drivers/lcd/tft/fonts
-VPATH += drivers/lcd/tft/dialogues
+VPATH += drivers/displays/tft drivers/displays/tft/hw drivers/displays/tft/fonts
+VPATH += drivers/displays/tft/dialogues
 OBJS += drawing.o touchscreen.o bmp.o alphanumeric.o
 OBJS += dejavusans9.o dejavusansbold9.o dejavusanscondensed9.o
 OBJS += dejavusansmono8.o dejavusansmonobold8.o
@@ -79,9 +79,15 @@ OBJS += ILI9328.o
 # OBJS += st7783.o
 
 # Bitmap/Monochrome LCD support (ST7565, SSD1306, etc.)
-VPATH += drivers/lcd drivers/lcd/bitmap/st7565
-VPATH += drivers/lcd/bitmap/ssd1306
-OBJS += smallfonts.o st7565.o ssd1306.o
+VPATH += drivers/displays
+VPATH += drivers/displays/bitmap/sharpmem
+VPATH += drivers/displays/bitmap/st7565
+VPATH += drivers/displays/bitmap/ssd1306
+OBJS += smallfonts.o sharpmem.o st7565.o ssd1306.o
+
+#Character Displays (VFD text displays, etc.)
+VPATH += drivers/displays/character/samsung_20T202DA2JA
+OBJS += samsung_20T202DA2JA.o
 
 # ChaN FatFS and SD card support
 VPATH += drivers/fatfs
index 07cea37..5865baa 100644 (file)
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <Session Name="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\build\codelite\LPC1343 Workspace.workspace">
-  <int Value="2" Name="m_selectedTab"/>
+  <int Value="1" Name="m_selectedTab"/>
   <wxString Value="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\build\codelite\LPC1343 Workspace.workspace" Name="m_workspaceName"/>
   <TabInfoArray Name="TabInfoArray">
     <TabInfo>
       <wxString Value="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\Makefile" Name="FileName"/>
-      <int Value="42" Name="FirstVisibleLine"/>
-      <int Value="60" Name="CurrentLine"/>
+      <int Value="71" Name="FirstVisibleLine"/>
+      <int Value="90" Name="CurrentLine"/>
       <wxArrayString Name="Bookmarks"/>
     </TabInfo>
     <TabInfo>
       <wxString Value="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\projectconfig.h" Name="FileName"/>
-      <int Value="9" Name="FirstVisibleLine"/>
-      <int Value="27" Name="CurrentLine"/>
+      <int Value="0" Name="FirstVisibleLine"/>
+      <int Value="5" Name="CurrentLine"/>
       <wxArrayString Name="Bookmarks"/>
     </TabInfo>
     <TabInfo>
       <wxString Value="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\main.c" Name="FileName"/>
-      <int Value="1" Name="FirstVisibleLine"/>
-      <int Value="35" Name="CurrentLine"/>
+      <int Value="9" Name="FirstVisibleLine"/>
+      <int Value="28" Name="CurrentLine"/>
       <wxArrayString Name="Bookmarks"/>
     </TabInfo>
   </TabInfoArray>
index 1b12a41..1a37ab1 100644 (file)
       <File Name="../../drivers/fatfs/integer.h"/>
       <File Name="../../drivers/fatfs/mmc.c"/>
     </VirtualDirectory>
-    <VirtualDirectory Name="lcd">
+    <VirtualDirectory Name="displays">
       <VirtualDirectory Name="tft">
         <VirtualDirectory Name="hw">
-          <File Name="../../drivers/lcd/tft/hw/ILI9325.c"/>
-          <File Name="../../drivers/lcd/tft/hw/ILI9325.h"/>
-          <File Name="../../drivers/lcd/tft/hw/st7783.c"/>
-          <File Name="../../drivers/lcd/tft/hw/st7783.h"/>
-          <File Name="../../drivers/lcd/tft/hw/st7735.c"/>
-          <File Name="../../drivers/lcd/tft/hw/st7735.h"/>
-          <File Name="../../drivers/lcd/tft/hw/ILI9328.c"/>
-          <File Name="../../drivers/lcd/tft/hw/ILI9328.h"/>
-          <File Name="../../drivers/lcd/tft/hw/ssd1331.c"/>
-          <File Name="../../drivers/lcd/tft/hw/ssd1331.h"/>
-          <File Name="../../drivers/lcd/tft/hw/ssd1351.c"/>
-          <File Name="../../drivers/lcd/tft/hw/ssd1351.h"/>
+          <File Name="../../drivers/displays/tft/hw/hx8340b.c"/>
+          <File Name="../../drivers/displays/tft/hw/hx8340b.h"/>
+          <File Name="../../drivers/displays/tft/hw/ILI9325.c"/>
+          <File Name="../../drivers/displays/tft/hw/ILI9325.h"/>
+          <File Name="../../drivers/displays/tft/hw/ILI9328.c"/>
+          <File Name="../../drivers/displays/tft/hw/ILI9328.h"/>
+          <File Name="../../drivers/displays/tft/hw/readme.txt"/>
+          <File Name="../../drivers/displays/tft/hw/ssd1331.c"/>
+          <File Name="../../drivers/displays/tft/hw/ssd1331.h"/>
+          <File Name="../../drivers/displays/tft/hw/ssd1351.c"/>
+          <File Name="../../drivers/displays/tft/hw/ssd1351.h"/>
+          <File Name="../../drivers/displays/tft/hw/st7735.c"/>
+          <File Name="../../drivers/displays/tft/hw/st7735.h"/>
+          <File Name="../../drivers/displays/tft/hw/st7783.c"/>
+          <File Name="../../drivers/displays/tft/hw/st7783.h"/>
         </VirtualDirectory>
         <VirtualDirectory Name="fonts">
-          <File Name="../../drivers/lcd/tft/fonts/bitmapfonts.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusans9.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusans9.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansbold9.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansbold9.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusanscondensed9.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusanscondensed9.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansmono8.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansmono8.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansmonobold8.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/dejavusansmonobold8.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdana9.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdana9.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdana14.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdana14.h"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdanabold14.c"/>
-          <File Name="../../drivers/lcd/tft/fonts/verdanabold14.h"/>
+          <File Name="../../drivers/displays/tft/fonts/bitmapfonts.h"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusans9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusans9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansbold9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansbold9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusanscondensed9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusanscondensed9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansmono8.c"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansmono8.h"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansmonobold8.c"/>
+          <File Name="../../drivers/displays/tft/fonts/dejavusansmonobold8.h"/>
+          <File Name="../../drivers/displays/tft/fonts/veramono9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/veramono9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/veramono11.c"/>
+          <File Name="../../drivers/displays/tft/fonts/veramono11.h"/>
+          <File Name="../../drivers/displays/tft/fonts/veramonobold9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/veramonobold9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/veramonobold11.c"/>
+          <File Name="../../drivers/displays/tft/fonts/veramonobold11.h"/>
+          <File Name="../../drivers/displays/tft/fonts/verdana9.c"/>
+          <File Name="../../drivers/displays/tft/fonts/verdana9.h"/>
+          <File Name="../../drivers/displays/tft/fonts/verdana14.c"/>
+          <File Name="../../drivers/displays/tft/fonts/verdana14.h"/>
+          <File Name="../../drivers/displays/tft/fonts/verdanabold14.c"/>
+          <File Name="../../drivers/displays/tft/fonts/verdanabold14.h"/>
         </VirtualDirectory>
-        <File Name="../../drivers/lcd/tft/drawing.c"/>
-        <File Name="../../drivers/lcd/tft/drawing.h"/>
-        <File Name="../../drivers/lcd/tft/lcd.h"/>
-        <File Name="../../drivers/lcd/tft/touchscreen.c"/>
-        <File Name="../../drivers/lcd/tft/touchscreen.h"/>
-        <File Name="../../drivers/lcd/tft/colors.h"/>
-        <File Name="../../drivers/lcd/tft/bmp.c"/>
-        <File Name="../../drivers/lcd/tft/bmp.h"/>
         <VirtualDirectory Name="dialogues">
-          <File Name="../../drivers/lcd/tft/dialogues/alphanumeric.c"/>
-          <File Name="../../drivers/lcd/tft/dialogues/alphanumeric.h"/>
+          <File Name="../../drivers/displays/tft/dialogues/alphanumeric.c"/>
+          <File Name="../../drivers/displays/tft/dialogues/alphanumeric.h"/>
         </VirtualDirectory>
+        <File Name="../../drivers/displays/tft/bmp.c"/>
+        <File Name="../../drivers/displays/tft/bmp.h"/>
+        <File Name="../../drivers/displays/tft/colors.h"/>
+        <File Name="../../drivers/displays/tft/drawing.c"/>
+        <File Name="../../drivers/displays/tft/drawing.h"/>
+        <File Name="../../drivers/displays/tft/lcd.h"/>
+        <File Name="../../drivers/displays/tft/readme.txt"/>
+        <File Name="../../drivers/displays/tft/touchscreen.c"/>
+        <File Name="../../drivers/displays/tft/touchscreen.h"/>
       </VirtualDirectory>
       <VirtualDirectory Name="bitmap">
         <VirtualDirectory Name="st7565">
-          <File Name="../../drivers/lcd/bitmap/ST7565/ST7565.c"/>
-          <File Name="../../drivers/lcd/bitmap/ST7565/ST7565.h"/>
+          <File Name="../../drivers/displays/bitmap/st7565/st7565.c"/>
+          <File Name="../../drivers/displays/bitmap/st7565/st7565.h"/>
         </VirtualDirectory>
         <VirtualDirectory Name="ssd1306">
-          <File Name="../../drivers/lcd/bitmap/ssd1306/ssd1306.c"/>
-          <File Name="../../drivers/lcd/bitmap/ssd1306/ssd1306.h"/>
+          <File Name="../../drivers/displays/bitmap/ssd1306/ssd1306.c"/>
+          <File Name="../../drivers/displays/bitmap/ssd1306/ssd1306.h"/>
+        </VirtualDirectory>
+        <VirtualDirectory Name="sharpmem">
+          <File Name="../../drivers/displays/bitmap/sharpmem/sharpmem.c"/>
+          <File Name="../../drivers/displays/bitmap/sharpmem/sharpmem.h"/>
+        </VirtualDirectory>
+      </VirtualDirectory>
+      <File Name="../../drivers/displays/icons16.h"/>
+      <File Name="../../drivers/displays/smallfonts.c"/>
+      <File Name="../../drivers/displays/smallfonts.h"/>
+      <VirtualDirectory Name="character">
+        <VirtualDirectory Name="samsung_20T202DA2JA">
+          <File Name="../../drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c"/>
+          <File Name="../../drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h"/>
         </VirtualDirectory>
       </VirtualDirectory>
-      <File Name="../../drivers/lcd/smallfonts.c"/>
-      <File Name="../../drivers/lcd/smallfonts.h"/>
     </VirtualDirectory>
     <VirtualDirectory Name="motor">
       <VirtualDirectory Name="stepper">
index 365f647..1ebe6dd 100644 (file)
             <file file_name="../../drivers/sensors/tcs3414/tcs3414.c"/>
           </folder>
         </folder>
-        <folder Name="lcd" file_name="">
+        <folder Name="displays" file_name="">
           <folder Name="bitmap">
             <folder Name="st7565">
-              <file file_name="../../drivers/lcd/bitmap/st7565/st7565.c"/>
+              <file file_name="../../drivers/displays/bitmap/st7565/st7565.c"/>
             </folder>
             <folder Name="ssd1306">
-              <file file_name="../../drivers/lcd/bitmap/ssd1306/ssd1306.c"/>
+              <file file_name="../../drivers/displays/bitmap/ssd1306/ssd1306.c"/>
             </folder>
             <folder Name="sharpmem">
-              <file file_name="../../drivers/lcd/bitmap/sharpmem/sharpmem.c"/>
+              <file file_name="../../drivers/displays/bitmap/sharpmem/sharpmem.c"/>
             </folder>
           </folder>
           <folder Name="tft">
             <folder Name="hw">
-              <file file_name="../../drivers/lcd/tft/hw/ILI9325.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
+              <file file_name="../../drivers/displays/tft/hw/hx8340b.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
+                <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
-              <file file_name="../../drivers/lcd/tft/hw/st7735.c">
+              <file file_name="../../drivers/displays/tft/hw/ILI9325.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
                 <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
-              <file file_name="../../drivers/lcd/tft/hw/st7783.c">
+              <file file_name="../../drivers/displays/tft/hw/ILI9328.c">
+                <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
+              </file>
+              <file file_name="../../drivers/displays/tft/hw/ssd1331.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
                 <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
-              <file file_name="../../drivers/lcd/tft/hw/ILI9328.c">
+              <file file_name="../../drivers/displays/tft/hw/ssd1351.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="Release" gcc_optimization_level="Level 1"/>
+                <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
-              <file file_name="../../drivers/lcd/tft/hw/ssd1331.c">
+              <file file_name="../../drivers/displays/tft/hw/st7735.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
                 <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
-              <file file_name="../../drivers/lcd/tft/hw/ssd1351.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
+              <file file_name="../../drivers/displays/tft/hw/st7783.c">
                 <configuration Name="THUMB Flash Release" build_exclude_from_build="Yes"/>
+                <configuration Name="THUMB Flash Debug" build_exclude_from_build="Yes"/>
               </file>
             </folder>
             <folder Name="fonts">
-              <file file_name="../../drivers/lcd/tft/fonts/dejavusansmono8.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-              </file>
-              <file file_name="../../drivers/lcd/tft/fonts/dejavusansmonobold8.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-              </file>
-              <file file_name="../../drivers/lcd/tft/fonts/dejavusanscondensed9.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-              </file>
-              <file file_name="../../drivers/lcd/tft/fonts/dejavusans9.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-              </file>
-              <file file_name="../../drivers/lcd/tft/fonts/dejavusansbold9.c">
-                <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-                <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-              </file>
-              <file file_name="../../drivers/lcd/tft/fonts/verdana9.c"/>
-              <file file_name="../../drivers/lcd/tft/fonts/verdanabold14.c"/>
-              <file file_name="../../drivers/lcd/tft/fonts/verdana14.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/dejavusans9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/dejavusansbold9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/dejavusanscondensed9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/dejavusansmono8.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/dejavusansmonobold8.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/veramono9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/veramono11.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/veramonobold9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/veramonobold11.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/verdana9.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/verdana14.c"/>
+              <file file_name="../../drivers/displays/tft/fonts/verdanabold14.c"/>
             </folder>
-            <file file_name="../../drivers/lcd/tft/drawing.c">
-              <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-            </file>
-            <file file_name="../../drivers/lcd/tft/touchscreen.c">
-              <configuration Name="THUMB Flash Debug" build_exclude_from_build="No"/>
-              <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-            </file>
-            <file file_name="../../drivers/lcd/tft/bmp.c"/>
             <folder Name="dialogues">
-              <file file_name="../../drivers/lcd/tft/dialogues/alphanumeric.c"/>
+              <file file_name="../../drivers/displays/tft/dialogues/alphanumeric.c"/>
             </folder>
-            <file file_name="../../drivers/lcd/tft/colors.h"/>
-            <file file_name="../../drivers/lcd/tft/lcd.h"/>
+            <file file_name="../../drivers/displays/tft/bmp.c"/>
+            <file file_name="../../drivers/displays/tft/colors.h"/>
+            <file file_name="../../drivers/displays/tft/drawing.c"/>
+            <file file_name="../../drivers/displays/tft/lcd.h"/>
+            <file file_name="../../drivers/displays/tft/touchscreen.c"/>
           </folder>
-          <file file_name="../../drivers/lcd/smallfonts.c">
-            <configuration Name="THUMB Flash Release" build_exclude_from_build="No"/>
-          </file>
-          <file file_name="../../drivers/lcd/icons16.h"/>
           <folder Name="character">
             <folder Name="samsung_20T202DA2JA">
-              <file file_name="../../drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c"/>
+              <file file_name="../../drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c"/>
             </folder>
           </folder>
+          <file file_name="../../drivers/displays/icons16.h"/>
+          <file file_name="../../drivers/displays/smallfonts.c"/>
         </folder>
         <folder Name="fatfs" file_name="">
           <file file_name="../../drivers/fatfs/ff.c">
   <configuration Name="Debug" build_debug_information="Yes" c_preprocessor_definitions="DEBUG" gcc_optimization_level="None" hidden="Yes" link_include_startup_code="No"/>
   <configuration Name="THUMB Flash Release" inherited_configurations="THUMB;Flash;Release"/>
   <configuration Name="Release" build_debug_information="No" build_remove_unused_symbols="Yes" c_additional_options="-g1" c_preprocessor_definitions="NDEBUG;STARTUP_FROM_RESET" gcc_optimization_level="Optimize For Size" hidden="Yes" link_include_startup_code="No"/>
-  <configuration Name="Common" arm_linker_allow_multiple_definition="Yes" c_user_include_directories="$(ProjectDir)/../../;$(ProjectDir)/../../Project/;$(ProjectDir)/../../core/freakusb/usb/;$(ProjectDir)/../../core/freakusb/class/CDC/;$(ProjectDir)/../../core/freakusb/hw/lpc1343/"/>
+  <configuration Name="Common" arm_linker_allow_multiple_definition="Yes" c_user_include_directories="$(ProjectDir)/../../;$(ProjectDir)/../../Project/"/>
 </solution>
index a4b16dc..ece19cd 100644 (file)
   <ProjectSessionItem path="LPC1343_CodeBase" name="unnamed" />
   <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase" name="unnamed" />
   <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;core" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;core;gpio" name="unnamed" />
   <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;lcd" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;lcd;bitmap" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;lcd;bitmap;ssd1306" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;lcd;character" name="unnamed" />
-  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;lcd;character;samsung_20T202DA2JA" name="unnamed" />
+  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;displays" name="unnamed" />
+  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;displays;tft" name="unnamed" />
+  <ProjectSessionItem path="LPC1343_CodeBase;LPC1343_CodeBase;Source Files;drivers;displays;tft;hw" name="unnamed" />
  </Project>
  <Register1>
   <RegisterWindow openNodes="USB;USB/USBRxPLen;USB/USBTxPLen;USB/USBCtrl" binaryNodes="" hiddenNodes="" unsignedNodes="" visibleGroups="CPU;USB" decimalNodes="" octalNodes="" asciiNodes="" />
@@ -75,8 +71,6 @@
  <Watch4>
   <Watches active="0" update="Never" />
  </Watch4>
- <Files>
-  <SessionOpenFile useTextEdit="1" useBinaryEdit="0" codecName="Latin1" x="28" debugPath="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\main.c" y="45" path="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\main.c" left="0" selected="1" name="unnamed" top="39" />
- </Files>
- <ARMCrossStudioWindow activeProject="LPC1343_CodeBase" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\drivers\lcd\character\samsung_20T202DA2JA" fileDialogDefaultFilter="" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Release" />
+ <Files/>
+ <ARMCrossStudioWindow activeProject="LPC1343_CodeBase" autoConnectTarget="SEGGER J-Link" debugSearchFileMap="" fileDialogInitialDirectory="C:\Dropbox\microBuilder\Code\LPC1343\LPC1343_CodeBase_GIT\drivers\displays\tft\hw" fileDialogDefaultFilter="" autoConnectCapabilities="388991" debugSearchPath="" buildConfiguration="THUMB Flash Release" />
 </session>
diff --git a/drivers/displays/bitmap/readme.txt b/drivers/displays/bitmap/readme.txt
new file mode 100644 (file)
index 0000000..8b144a0
--- /dev/null
@@ -0,0 +1,12 @@
+Bitmap LCDs
+===========
+
+This folder contains drivers for 1-bit graphic LCDs (128x64 pixel ST7565, etc.)
+or text-only displays.  They are placed in a seperate folder because the
+drawing routines are handled quite differently than the generic drawing code
+for 16-bit TFT LCDs.
+
+ST7565             Driver for  128x64 pixel I2C-based displays (available from
+                   Adafruit Industries, for example).
+SSD1306            Driver for 128x64 pixel OLED displays (also available from
+                   Adafruit Industries).
diff --git a/drivers/displays/bitmap/sharpmem/sharpmem.c b/drivers/displays/bitmap/sharpmem/sharpmem.c
new file mode 100644 (file)
index 0000000..43e4821
--- /dev/null
@@ -0,0 +1,384 @@
+/**************************************************************************/
+/*! 
+    @file     sharpmem.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for Sharp Memory Displays.
+    
+    This driver uses a bit-banged 3-pin SPI interface.  For the SPI
+    interface, the select line (CS) is active high, and the clock 
+    line (SCK) is active high.  
+    
+    Note: The LCD expects the address and data
+    bits to arrive LSB, though the M3 shifts the bits out MSB so they
+    need to be switched in SW first.
+
+    @section  EXAMPLE
+    @code
+
+    sharpmemInit();
+    sharpmemEnable(true);
+  
+    // Render some text and a line into the image buffer
+    uint32_t i;
+    sharpmemDrawString(1, 10, "5x8 System", Font_System5x8);
+    sharpmemDrawString(1, 20, "7x8 System", Font_System7x8);
+    for (i = 0; i < 96; i++)
+    {
+      sharpmemDrawPixel(i, i);
+    }
+  
+    while(1)
+    {
+      // Screen must be refreshed at least once per second
+      sharpmemRefresh();
+      systickDelay(1000);
+    }
+
+    @endcode
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "sharpmem.h"
+
+#include "core/systick/systick.h"
+#include "core/gpio/gpio.h"
+#include "drivers/displays/smallfonts.h"
+
+#define TOGGLE_VCOM   do { _sharpmem_vcom = _sharpmem_vcom ? 0x00 : SHARPMEM_BIT_VCOM; } while(0);
+
+static uint8_t _sharpmembuffer[(SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8];
+static volatile uint8_t _sharpmem_vcom = SHARPMEM_BIT_VCOM;
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Swaps the bit order from MSB to LSB, since the LCD expects LSB,
+            but the M3 shifts bits out MSB.
+*/
+/**************************************************************************/
+uint8_t sharpmemSwap(uint8_t data)
+{
+  uint8_t out = 0;
+  if (data)
+  {
+    if(data & 0x01) out |= 0x80;
+    if(data & 0x02) out |= 0x40;
+    if(data & 0x04) out |= 0x20;
+    if(data & 0x08) out |= 0x10;
+    if(data & 0x10) out |= 0x08;
+    if(data & 0x20) out |= 0x04;
+    if(data & 0x40) out |= 0x02;
+    if(data & 0x80) out |= 0x01;
+  }
+
+  return out;
+}
+
+/*************************************************/
+void sharpmemSendByte(uint8_t data)
+{
+  uint8_t i = 0;
+
+  // Make sure clock pin starts low
+  CLR_SCLK;
+
+  // Write from MSB to LSB
+  // LCD expects LSB first
+  for (i=0; i<8; i++) 
+  { 
+    if (data & 0x80) 
+    { 
+      SET_MOSI;
+    } 
+    else 
+    { 
+      CLR_MOSI;
+    } 
+    // Clock is active high
+    SET_SCLK;
+    data <<= 1; 
+    __asm volatile("nop");
+    CLR_SCLK;
+  } 
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a single graphic character using the supplied font
+*/
+/**************************************************************************/
+static void sharpmemDrawChar(uint16_t x, uint16_t y, const char c, struct FONT_DEF font)
+{
+  uint8_t col, column[font.u8Width];
+
+  // Check if the requested character is available
+  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
+  {
+    // Retrieve appropriate columns from font data
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
+    }
+  }
+  else
+  {    
+    // Requested character is not available in this font ... send a space instead
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = 0xFF;    // Send solid space
+    }
+  }
+
+  // Render each column
+  uint16_t xoffset, yoffset;
+  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
+  {
+    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
+    {
+      uint8_t bit = 0x00;
+      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
+      bit = (bit >> 7);                                   // Shift current row but right (results in 0x01 for black, and 0x00 for white)
+      if (bit)
+      {
+        sharpmemDrawPixel(x + xoffset, y + yoffset);
+      }
+    }
+  }
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/*************************************************/
+void sharpmemInit(void)
+{
+  // Set control pins to output
+  gpioSetDir(SHARPMEM_PORT, SHARPMEM_SCLK_PIN, 1);
+  gpioSetDir(SHARPMEM_PORT, SHARPMEM_MOSI_PIN, 1);
+  gpioSetDir(SHARPMEM_PORT, SHARPMEM_CS_PIN, 1);
+  gpioSetDir(SHARPMEM_PORT, SHARPMEM_DISP_PIN, 1);
+
+  // Set pins to default state
+  CLR_SCLK;
+  CLR_MOSI;
+  CLR_CS;
+  CLR_DISP;
+  
+  // Set the vcom bit to a defined state
+  _sharpmem_vcom = SHARPMEM_BIT_VCOM;
+
+  // Clear the display and turn it off by default
+  sharpmemClearScreen();
+  sharpmemEnable(false);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Turns the display on or off (memory is retained even when the
+           display is off)
+
+    @param[in]  enabled
+                Whether the display should be on (TRUE/1) or off (FALSE/0)
+*/
+/**************************************************************************/
+void sharpmemEnable(bool enable)
+{
+  if (enable)
+  {
+    SET_DISP;
+  }
+  else
+  {
+    CLR_DISP;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief Draws a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0 based)
+    @param[in]  y
+                The y position (0 based)
+*/
+/**************************************************************************/
+void sharpmemDrawPixel(uint16_t x, uint16_t y) 
+{
+  if ((x >= SHARPMEM_LCDWIDTH) || (y >= SHARPMEM_LCDHEIGHT))
+    return;
+
+  _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] |= (1 << x % 8);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0 based)
+    @param[in]  y
+                The y position (0 based)
+*/
+/**************************************************************************/
+void sharpmemClearPixel(uint16_t x, uint16_t y) 
+{
+  if ((x >= SHARPMEM_LCDWIDTH) || (y >= SHARPMEM_LCDHEIGHT))
+    return;
+
+  _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] &= ~(1 << x % 8);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Gets the value (1 or 0) of the specified pixel from the buffer
+
+    @param[in]  x
+                The x position (0 based)
+    @param[in]  y
+                The y position (0 based)
+
+    @return     1 if the pixel is enabled, 0 if disabled
+*/
+/**************************************************************************/
+uint8_t sharpmemGetPixel(uint16_t x, uint16_t y)
+{
+  if ((x >=SHARPMEM_LCDWIDTH) || (y >=SHARPMEM_LCDHEIGHT)) return 0;
+  return _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] & (1 << x % 8) ? 1 : 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears the screen
+*/
+/**************************************************************************/
+void sharpmemClearScreen() 
+{
+  memset(_sharpmembuffer, 0x00, (SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8);
+  // Send the clear screen command rather than doing a HW refresh (quicker)
+  SET_CS;
+  sharpmemSendByte(_sharpmem_vcom | SHARPMEM_BIT_CLEAR);
+  sharpmemSendByte(0x00);
+  TOGGLE_VCOM;
+  CLR_CS;  
+}
+
+/**************************************************************************/
+/*! 
+    @brief Renders the contents of the pixel buffer on the LCD
+*/
+/**************************************************************************/
+void sharpmemRefresh(void) 
+{
+  uint16_t i, totalbytes, currentline, oldline;  
+  totalbytes = (SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8;
+
+  // Send the write command
+  SET_CS;
+  sharpmemSendByte(SHARPMEM_BIT_WRITECMD | _sharpmem_vcom);
+  TOGGLE_VCOM;
+
+  // Send the address for line 1
+  oldline = currentline = 1;
+  sharpmemSendByte(sharpmemSwap(currentline));
+
+  // Send image buffer
+  for (i=0; i<totalbytes; i++)
+  {
+    sharpmemSendByte(sharpmemSwap(_sharpmembuffer[i]));
+    currentline = ((i+1)/(SHARPMEM_LCDWIDTH/8)) + 1;
+    if(currentline != oldline)
+    {
+      // Send end of line and address bytes
+      sharpmemSendByte(0x00);
+      if (currentline <= SHARPMEM_LCDHEIGHT)
+      {
+        sharpmemSendByte(sharpmemSwap(currentline));
+      }
+      oldline = currentline;
+    }
+  }
+
+  // Send another trailing 8 bits for the last line
+  sharpmemSendByte(0x00);
+  CLR_CS;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a string using the supplied font data.
+
+    @param[in]  x
+                Starting x co-ordinate
+    @param[in]  y
+                Starting y co-ordinate
+    @param[in]  text
+                The string to render
+    @param[in]  font
+                Pointer to the FONT_DEF to use when drawing the string
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/bitmap/sharpmem/sharpmem.h"
+    #include "drivers/displays/smallfonts.h"
+    
+    // Configure the pins and initialise the LCD screen
+    sharpmemInit();
+
+    // Render some text on the screen
+    sharpmemDrawString(1, 10, "5x8 System", Font_System5x8);
+    sharpmemDrawString(1, 20, "7x8 System", Font_System7x8);
+
+    // Refresh the screen to see the results
+    sharpmemRefresh();
+
+    @endcode
+*/
+/**************************************************************************/
+void sharpmemDrawString(uint16_t x, uint16_t y, const char* text, struct FONT_DEF font)
+{
+  uint8_t l;
+  for (l = 0; l < strlen(text); l++)
+  {
+    sharpmemDrawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
+  }
+}
diff --git a/drivers/displays/bitmap/sharpmem/sharpmem.h b/drivers/displays/bitmap/sharpmem/sharpmem.h
new file mode 100644 (file)
index 0000000..5f446b1
--- /dev/null
@@ -0,0 +1,95 @@
+/**************************************************************************/
+/*! 
+    @file     sharpmem.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SHARPMEM_H__
+#define __SHARPMEM_H__
+
+#include "projectconfig.h"
+#include "drivers/displays/smallfonts.h"
+
+/**************************************************************************
+    Sharp Memory Display Connector
+    -----------------------------------------------------------------------
+    Pin   Function        Notes
+    ===   ==============  ===============================
+      1   VIN             1.0-5.0V (Boost Supply)
+      2   VDD             5.0V (Boost output, or 5V supply)
+      3   GND
+      4   SCLK            Serial Clock
+      5   MOSI            Serial Data Input
+      6   CS              Serial Chip Select
+      7   EXTCOMIN        External COM Inversion Signal
+      8   DISP            Display On(High)/Off(Low)
+      9   EXTMODE         COM Inversion Select (Low = SW clock/serial)
+
+ **************************************************************************/
+
+// LCD Dimensions
+#define SHARPMEM_LCDWIDTH       (96)
+#define SHARPMEM_LCDHEIGHT      (96) 
+
+// Control pins
+#define SHARPMEM_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
+#define SHARPMEM_PORT            (2)
+#define SHARPMEM_SCLK_PIN        (1)
+#define SHARPMEM_MOSI_PIN        (2)
+#define SHARPMEM_CS_PIN          (3)
+#define SHARPMEM_DISP_PIN        (4)
+
+// Macros for control line state
+#define CLR_SCLK    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_SCLK_PIN); } while(0)
+#define SET_SCLK    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_SCLK_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_SCLK_PIN); } while(0)
+#define CLR_MOSI    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_MOSI_PIN); } while(0)
+#define SET_MOSI    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_MOSI_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_MOSI_PIN); } while(0)
+#define CLR_CS      do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_CS_PIN); } while(0)
+#define SET_CS      do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_CS_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_CS_PIN); } while(0)
+#define CLR_DISP    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_DISP_PIN); } while(0)
+#define SET_DISP    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_DISP_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_DISP_PIN); } while(0)
+
+#define SHARPMEM_BIT_WRITECMD   (0x80)
+#define SHARPMEM_BIT_VCOM       (0x40)
+#define SHARPMEM_BIT_CLEAR      (0x20)
+
+// Method Prototypes
+void    sharpmemInit(void);
+void    sharpmemEnable(bool enable);
+void    sharpmemDrawPixel(uint16_t x, uint16_t y);
+void    sharpmemClearPixel(uint16_t x, uint16_t y);
+uint8_t sharpmemGetPixel(uint16_t x, uint16_t y);
+void    sharpmemClearScreen();
+void    sharpmemRefresh(void);
+void    sharpmemDrawString(uint16_t x, uint16_t y, const char* text, struct FONT_DEF font);
+
+#endif
diff --git a/drivers/displays/bitmap/ssd1306/ssd1306.c b/drivers/displays/bitmap/ssd1306/ssd1306.c
new file mode 100644 (file)
index 0000000..e5bf364
--- /dev/null
@@ -0,0 +1,443 @@
+/**************************************************************************/
+/*! 
+    @file     ssd1306.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section DESCRIPTION
+
+    Driver for 128x64 OLED display based on the SSD1306 controller.
+
+    This driver is based on the SSD1306 Library from Limor Fried
+    (Adafruit Industries) at: https://github.com/adafruit/SSD1306  
+    
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "ssd1306.h"
+
+#include "core/gpio/gpio.h"
+#include "core/systick/systick.h"
+#include "drivers/displays/smallfonts.h"
+
+void ssd1306SendByte(uint8_t byte);
+
+#define CMD(c)        do { gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
+                           gpioSetValue( SSD1306_DC_PORT, SSD1306_DC_PIN, 0 ); \
+                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 0 ); \
+                           ssd1306SendByte( c ); \
+                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
+                         } while (0);
+#define DATA(c)       do { gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
+                           gpioSetValue( SSD1306_DC_PORT, SSD1306_DC_PIN, 1 ); \
+                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 0 ); \
+                           ssd1306SendByte( c ); \
+                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
+                         } while (0);
+#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
+
+uint8_t _ssd1306buffer[SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8];
+
+/**************************************************************************/
+/* Private Methods                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief Simulates an SPI write using GPIO
+
+    @param[in]  byte
+                The byte to send
+*/
+/**************************************************************************/
+void ssd1306SendByte(uint8_t byte)
+{
+  int8_t i;
+
+  // Make sure clock pin starts high
+  gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 1);
+
+  // Write from MSB to LSB
+  for (i=7; i>=0; i--) 
+  {
+    // Set clock pin low
+    gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 0);
+    // Set data pin high or low depending on the value of the current bit
+    gpioSetValue(SSD1306_SDAT_PORT, SSD1306_SDAT_PIN, byte & (1 << i) ? 1 : 0);
+    // Set clock pin high
+    gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 1);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a single graphic character using the supplied font
+*/
+/**************************************************************************/
+static void ssd1306DrawChar(uint16_t x, uint16_t y, uint8_t c, struct FONT_DEF font)
+{
+  uint8_t col, column[font.u8Width];
+
+  // Make sure we are exceeding the display limits
+  // This also gets checked in ssd1306DrawPixel, but if we start
+  // outside the limits we can avoid some unecessary work at the outset
+  if ((x > SSD1306_LCDWIDTH) || (y > SSD1306_LCDHEIGHT))
+    return;
+
+  // Check if the requested character is available
+  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
+  {
+    // Retrieve appropriate columns from font data
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
+    }
+  }
+  else
+  {    
+    // Requested character is not available in this font ... send a space instead
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = 0xFF;    // Send solid space
+    }
+  }
+
+  // Render each column
+  uint16_t xoffset, yoffset;
+  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
+  {
+    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
+    {
+      uint8_t bit = 0x00;
+      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
+      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
+      if (bit)
+      {
+        ssd1306DrawPixel(x + xoffset, y + yoffset);
+      }
+    }
+  }
+}
+
+/**************************************************************************/
+/* Public Methods                                                         */
+/**************************************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief Initialises the SSD1306 LCD display
+*/
+/**************************************************************************/
+void ssd1306Init(uint8_t vccstate)
+{
+  // Set all pins to output
+  gpioSetDir(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1306_SDAT_PORT, SSD1306_SDAT_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1306_DC_PORT, SSD1306_DC_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1306_RST_PORT, SSD1306_RST_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1306_CS_PORT, SSD1306_CS_PIN, gpioDirection_Output);
+
+  // Reset the LCD
+  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 1);
+  DELAY(1);
+  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 0);
+  DELAY(10);
+  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 1);
+
+  #if defined SSD1306_128_32
+    // Init sequence taken from datasheet for UG-2832HSWEG04 (128x32 OLED module)
+    CMD(SSD1306_DISPLAYOFF);                    // 0xAE
+    CMD(SSD1306_SETDISPLAYCLOCKDIV);            // 0xD5
+    CMD(0x80);                                  // the suggested ratio 0x80
+    CMD(SSD1306_SETMULTIPLEX);                  // 0xA8
+    CMD(0x1F);                                  // 31
+    CMD(SSD1306_SETDISPLAYOFFSET);              // 0xD3
+    CMD(0x0);                                   // no offset
+    CMD(SSD1306_SETSTARTLINE | 0x0);            // line #0
+    CMD(SSD1306_CHARGEPUMP);                    // 0x8D
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x10) }
+    else 
+      { CMD(0x14) }
+    CMD(SSD1306_MEMORYMODE);                    // 0x20
+    CMD(0x00);                                  // 0x0 act like ks0108
+    CMD(SSD1306_SEGREMAP | 0x1);
+    CMD(SSD1306_COMSCANDEC);
+    CMD(SSD1306_SETCOMPINS);                    // 0xDA
+    CMD(0x02);
+    CMD(SSD1306_SETCONTRAST);                   // 0x81
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x9F) }
+    else 
+      { CMD(0xCF) }
+    CMD(SSD1306_SETPRECHARGE);                  // 0xd9
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x22) }
+    else 
+      { CMD(0xF1) }
+    CMD(SSD1306_SETVCOMDETECT);                 // 0xDB
+    CMD(0x40);
+    CMD(SSD1306_DISPLAYALLON_RESUME);           // 0xA4
+    CMD(SSD1306_NORMALDISPLAY);                 // 0xA6
+  #endif
+
+  #if defined SSD1306_128_64
+    // Init sequence taken from datasheet for UG-2864HSWEG01 (128x64 OLED module)
+    CMD(SSD1306_DISPLAYOFF);                    // 0xAE
+    CMD(SSD1306_SETDISPLAYCLOCKDIV);            // 0xD5
+    CMD(0x80);                                  // the suggested ratio 0x80
+    CMD(SSD1306_SETMULTIPLEX);                  // 0xA8
+    CMD(0x3F);                                  // 63
+    CMD(SSD1306_SETDISPLAYOFFSET);              // 0xD3
+    CMD(0x0);                                   // no offset
+    CMD(SSD1306_SETSTARTLINE | 0x0);            // line #0
+    CMD(SSD1306_CHARGEPUMP);                    // 0x8D
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x10) }
+    else 
+      { CMD(0x14) }
+    CMD(SSD1306_MEMORYMODE);                    // 0x20
+    CMD(0x00);                                  // 0x0 act like ks0108
+    CMD(SSD1306_SEGREMAP | 0x1);
+    CMD(SSD1306_COMSCANDEC);
+    CMD(SSD1306_SETCOMPINS);                    // 0xDA
+    CMD(0x12);
+    CMD(SSD1306_SETCONTRAST);                   // 0x81
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x9F) }
+    else 
+      { CMD(0xCF) }
+    CMD(SSD1306_SETPRECHARGE);                  // 0xd9
+    if (vccstate == SSD1306_EXTERNALVCC) 
+      { CMD(0x22) }
+    else 
+      { CMD(0xF1) }
+    CMD(SSD1306_SETVCOMDETECT);                 // 0xDB
+    CMD(0x40);
+    CMD(SSD1306_DISPLAYALLON_RESUME);           // 0xA4
+    CMD(SSD1306_NORMALDISPLAY);                 // 0xA6
+  #endif
+
+  // Enabled the OLED panel
+  CMD(SSD1306_DISPLAYON);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Draws a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+*/
+/**************************************************************************/
+void ssd1306DrawPixel(uint8_t x, uint8_t y) 
+{
+  if ((x >= SSD1306_LCDWIDTH) || (y >= SSD1306_LCDHEIGHT))
+    return;
+
+  _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] |= (1 << y%8);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+*/
+/**************************************************************************/
+void ssd1306ClearPixel(uint8_t x, uint8_t y) 
+{
+  if ((x >= SSD1306_LCDWIDTH) || (y >= SSD1306_LCDHEIGHT))
+    return;
+
+  _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] &= ~(1 << y%8); 
+}
+
+/**************************************************************************/
+/*! 
+    @brief Gets the value (1 or 0) of the specified pixel from the buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+
+    @return     1 if the pixel is enabled, 0 if disabled
+*/
+/**************************************************************************/
+uint8_t ssd1306GetPixel(uint8_t x, uint8_t y)
+{
+  if ((x >= SSD1306_LCDWIDTH) || (y >=SSD1306_LCDHEIGHT)) return 0;
+  return _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] & (1 << y%8) ? 1 : 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears the screen
+*/
+/**************************************************************************/
+void ssd1306ClearScreen() 
+{
+  memset(_ssd1306buffer, 0, 1024);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Renders the contents of the pixel buffer on the LCD
+*/
+/**************************************************************************/
+void ssd1306Refresh(void) 
+{
+  CMD(SSD1306_SETLOWCOLUMN | 0x0);  // low col = 0
+  CMD(SSD1306_SETHIGHCOLUMN | 0x0);  // hi col = 0
+  CMD(SSD1306_SETSTARTLINE | 0x0); // line #0
+
+  uint16_t i;
+  for (i=0; i<1024; i++) 
+  {
+    DATA(_ssd1306buffer[i]);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a string using the supplied font data.
+
+    @param[in]  x
+                Starting x co-ordinate
+    @param[in]  y
+                Starting y co-ordinate
+    @param[in]  text
+                The string to render
+    @param[in]  font
+                Pointer to the FONT_DEF to use when drawing the string
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/bitmap/ssd1306/ssd1306.h"
+    #include "drivers/displays/smallfonts.h"
+    
+    // Configure the pins and initialise the LCD screen
+    ssd1306Init(SSD1306_INTERNALVCC);
+
+    // Render some text on the screen
+    ssd1306DrawString(1, 10, "5x8 System", Font_System5x8);
+    ssd1306DrawString(1, 20, "7x8 System", Font_System7x8);
+
+    // Refresh the screen to see the results
+    ssd1306Refresh();
+
+    @endcode
+*/
+/**************************************************************************/
+void ssd1306DrawString(uint16_t x, uint16_t y, char* text, struct FONT_DEF font)
+{
+  uint8_t l;
+  for (l = 0; l < strlen(text); l++)
+  {
+    ssd1306DrawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Shifts the contents of the frame buffer up the specified
+            number of pixels
+
+    @param[in]  height
+                The number of pixels to shift the frame buffer up, leaving
+                a blank space at the bottom of the frame buffer x pixels
+                high
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/bitmap/ssd1306/ssd1306.h"
+    #include "drivers/displays/smallfonts.h"
+    
+    // Configure the pins and initialise the LCD screen
+    ssd1306Init(SSD1306_INTERNALVCC);
+
+    // Continually write some text, scrolling upward one line each time
+    while (1)
+    {
+      // Shift the buffer up 8 pixels (adjust for font-height)
+      ssd1306ShiftFrameBuffer(8);
+      // Render some text on the screen with different fonts
+      ssd1306DrawString(1, 56, "INSERT TEXT HERE", Font_System5x8);
+      // Refresh the screen to see the results
+      ssd1306Refresh();    
+      // Wait a bit before writing the next line
+      systickDelay(1000);
+    }
+
+    @endcode
+*/
+/**************************************************************************/
+void ssd1306ShiftFrameBuffer( uint8_t height )
+{
+  if (height == 0) return;
+  if (height >= SSD1306_LCDHEIGHT)
+  {
+    // Clear the entire frame buffer
+    ssd1306ClearScreen();
+    return;
+  }
+
+  // This is horribly inefficient, but at least easy to understand
+  // In a production environment, this should be significantly optimised
+
+  uint8_t y, x;
+  for (y = 0; y < SSD1306_LCDHEIGHT; y++)
+  {
+    for (x = 0; x < SSD1306_LCDWIDTH; x++)
+    {
+      if ((SSD1306_LCDHEIGHT - 1) - y > height)
+      {
+        // Shift height from further ahead in the buffer
+        ssd1306GetPixel(x, y + height) ? ssd1306DrawPixel(x, y) : ssd1306ClearPixel(x, y);
+      }
+      else
+      {
+        // Clear the entire line
+        ssd1306ClearPixel(x, y);
+      }
+    }
+  }
+}
diff --git a/drivers/displays/bitmap/ssd1306/ssd1306.h b/drivers/displays/bitmap/ssd1306/ssd1306.h
new file mode 100644 (file)
index 0000000..7fb7c33
--- /dev/null
@@ -0,0 +1,129 @@
+/**************************************************************************/
+/*! 
+    @file     ssd1306.h
+    @author   K. Townsend (microBuilder.eu)
+    @date     18 January 2012
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SSD1306_H__
+#define __SSD1306_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/smallfonts.h"
+
+/*=========================================================================
+    SSD1306 Displays
+    -----------------------------------------------------------------------
+    The driver is used in multiple displays (128x64, 128x32, etc.).
+    Select the appropriate display below to create an appropriately
+    sized framebuffer, etc.
+
+    SSD1306_128_64  128x64 pixel display
+
+    SSD1306_128_32  128x32 pixel display
+
+    You also need to set the LCDWIDTH and LCDHEIGHT defines to an 
+    appropriate size
+
+    -----------------------------------------------------------------------*/
+    // #define SSD1306_128_64
+    #define SSD1306_128_32
+/*=========================================================================*/
+
+#if defined SSD1306_128_64 && defined SSD1306_128_32
+  #error "Only one SSD1306 display can be specified at once in ssd1306.h"
+#endif
+#if !defined SSD1306_128_64 && !defined SSD1306_128_32
+  #error "At least one SSD1306 display must be specified in ssd1306.h"
+#endif
+
+#if defined SSD1306_128_64
+  #define SSD1306_LCDWIDTH                  128
+  #define SSD1306_LCDHEIGHT                 64
+#endif
+#if defined SSD1306_128_32
+  #define SSD1306_LCDWIDTH                  128
+  #define SSD1306_LCDHEIGHT                 32
+#endif
+
+// Pin Definitions
+#define SSD1306_DC_PORT                    (2)     // Data/Command
+#define SSD1306_DC_PIN                     (1)
+#define SSD1306_RST_PORT                   (2)     // Reset
+#define SSD1306_RST_PIN                    (2)
+#define SSD1306_CS_PORT                    (2)     // Select
+#define SSD1306_CS_PIN                     (3)
+#define SSD1306_SCLK_PORT                  (2)     // Serial Clock
+#define SSD1306_SCLK_PIN                   (5)
+#define SSD1306_SDAT_PORT                  (2)     // Serial Data
+#define SSD1306_SDAT_PIN                   (6)
+
+
+// Commands
+#define SSD1306_SETCONTRAST               0x81
+#define SSD1306_DISPLAYALLON_RESUME       0xA4
+#define SSD1306_DISPLAYALLON              0xA5
+#define SSD1306_NORMALDISPLAY             0xA6
+#define SSD1306_INVERTDISPLAY             0xA7
+#define SSD1306_DISPLAYOFF                0xAE
+#define SSD1306_DISPLAYON                 0xAF
+#define SSD1306_SETDISPLAYOFFSET          0xD3
+#define SSD1306_SETCOMPINS                0xDA
+#define SSD1306_SETVCOMDETECT             0xDB
+#define SSD1306_SETDISPLAYCLOCKDIV        0xD5
+#define SSD1306_SETPRECHARGE              0xD9
+#define SSD1306_SETMULTIPLEX              0xA8
+#define SSD1306_SETLOWCOLUMN              0x00
+#define SSD1306_SETHIGHCOLUMN             0x10
+#define SSD1306_SETSTARTLINE              0x40
+#define SSD1306_MEMORYMODE                0x20
+#define SSD1306_COMSCANINC                0xC0
+#define SSD1306_COMSCANDEC                0xC8
+#define SSD1306_SEGREMAP                  0xA0
+#define SSD1306_CHARGEPUMP                0x8D
+#define SSD1306_EXTERNALVCC               0x1
+#define SSD1306_INTERNALVCC               0x2
+#define SSD1306_SWITCHCAPVCC              0x2
+
+// Initialisation/Config Prototypes
+void    ssd1306Init ( uint8_t vccstate );
+void    ssd1306DrawPixel ( uint8_t x, uint8_t y );
+void    ssd1306ClearPixel ( uint8_t x, uint8_t y );
+uint8_t ssd1306GetPixel ( uint8_t x, uint8_t y );
+void    ssd1306ClearScreen ( void );
+void    ssd1306Refresh ( void );
+void    ssd1306DrawString( uint16_t x, uint16_t y, char* text, struct FONT_DEF font );
+void    ssd1306ShiftFrameBuffer( uint8_t height );
+
+#endif
diff --git a/drivers/displays/bitmap/st7565/st7565.c b/drivers/displays/bitmap/st7565/st7565.c
new file mode 100644 (file)
index 0000000..d8b125e
--- /dev/null
@@ -0,0 +1,445 @@
+/**************************************************************************/
+/*! 
+    @file     ST7565.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section DESCRIPTION
+
+    Driver for 128x64 pixel display based on the ST7565 LCD controller.
+
+    This driver is based on the ST7565 Library from Limor Fried
+    (Adafruit Industries) at: http://github.com/adafruit/ST7565-LCD/    
+    
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "st7565.h"
+
+#include "core/gpio/gpio.h"
+#include "core/systick/systick.h"
+#include "drivers/displays/smallfonts.h"
+
+void sendByte(uint8_t byte);
+
+#define CMD(c)        do { gpioSetValue( ST7565_A0_PORT, ST7565_A0_PIN, 0 ); sendByte( c ); } while (0);
+#define DATA(d)       do { gpioSetValue( ST7565_A0_PORT, ST7565_A0_PIN, 1 ); sendByte( d ); } while (0);
+#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
+
+uint8_t _st7565buffer[128*64/8];
+
+/**************************************************************************/
+/* Private Methods                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief Renders the buffer contents
+
+    @param[in]  buffer
+                Pointer to the buffer containing the raw pixel data
+*/
+/**************************************************************************/
+void writeBuffer(uint8_t *buffer) 
+{
+  uint8_t c, p;
+  int pagemap[] = { 3, 2, 1, 0, 7, 6, 5, 4 };
+
+  for(p = 0; p < 8; p++) 
+  {
+    CMD(ST7565_CMD_SET_PAGE | pagemap[p]);
+    CMD(ST7565_CMD_SET_COLUMN_LOWER | (0x0 & 0xf));
+    CMD(ST7565_CMD_SET_COLUMN_UPPER | ((0x0 >> 4) & 0xf));
+    CMD(ST7565_CMD_RMW);
+    DATA(0xff);
+    
+    for(c = 0; c < 128; c++) 
+    {
+      DATA(buffer[(128*p)+c]);
+    }
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief Simulates an SPI write using GPIO
+
+    @param[in]  byte
+                The byte to send
+*/
+/**************************************************************************/
+void sendByte(uint8_t byte)
+{
+  int8_t i;
+
+  // Note: This code can be optimised to avoid the branches by setting
+  // GPIO registers directly, but we'll leave it as is for the moment
+  // for simplicity sake
+
+  // Make sure clock pin starts high
+  gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
+
+  // Write from MSB to LSB
+  for (i=7; i>=0; i--) 
+  {
+    // Set clock pin low
+    gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 0);
+    // Set data pin high or low depending on the value of the current bit
+    gpioSetValue(ST7565_SDAT_PORT, ST7565_SDAT_PIN, byte & (1 << i) ? 1 : 0);
+    // Set clock pin high
+    gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a single graphic character using the supplied font
+*/
+/**************************************************************************/
+void drawChar(uint16_t x, uint16_t y, uint8_t c, struct FONT_DEF font)
+{
+  uint8_t col, column[font.u8Width];
+
+  // Check if the requested character is available
+  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
+  {
+    // Retrieve appropriate columns from font data
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
+    }
+  }
+  else
+  {    
+    // Requested character is not available in this font ... send a space instead
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = 0xFF;    // Send solid space
+    }
+  }
+
+  // Render each column
+  uint16_t xoffset, yoffset;
+  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
+  {
+    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
+    {
+      uint8_t bit = 0x00;
+      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
+      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
+      if (bit)
+      {
+        st7565DrawPixel(x + xoffset, y + yoffset);
+      }
+    }
+  }
+}
+
+/**************************************************************************/
+/* Public Methods                                                         */
+/**************************************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief Initialises the ST7565 LCD display
+*/
+/**************************************************************************/
+void st7565Init(void)
+{
+  // Note: This can be optimised to set all pins to output and high
+  // in two commands by manipulating the registers directly (assuming
+  // that the pins are located in the same GPIO bank).  The code is left
+  // as is for clarity sake in case the pins are not all located in the
+  // same bank.
+
+  // Set clock pin to output and high
+  gpioSetDir(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
+  gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
+
+  // Set data pin to output and high
+  gpioSetDir(ST7565_SDAT_PORT, ST7565_SDAT_PIN, 1);
+  gpioSetValue(ST7565_SDAT_PORT, ST7565_SDAT_PIN, 1);
+
+  // Configure backlight pin to output and set high (off)
+  gpioSetDir(ST7565_BL_PORT, ST7565_BL_PIN, 1);
+  gpioSetValue(ST7565_BL_PORT, ST7565_BL_PIN, 1);
+
+  // Configure A0 pin to output and set high
+  gpioSetDir(ST7565_A0_PORT, ST7565_A0_PIN, 1);
+  gpioSetValue(ST7565_A0_PORT, ST7565_A0_PIN, 1);
+
+  // Configure Reset pin and set high
+  gpioSetDir(ST7565_RST_PORT, ST7565_RST_PIN, 1);
+  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 1);
+
+  // Configure select pin and set high
+  gpioSetDir(ST7565_CS_PORT, ST7565_CS_PIN, 1);
+  gpioSetValue(ST7565_CS_PORT, ST7565_CS_PIN, 1);
+
+  // Reset
+  gpioSetValue(ST7565_CS_PORT, ST7565_CS_PIN, 0);     // Set CS low
+  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 0);   // Set reset low
+  DELAY(500 / CFG_SYSTICK_DELAY_IN_MS);               // Wait 500mS
+  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 1);   // Set reset high
+
+  // Configure Display
+  CMD(ST7565_CMD_SET_BIAS_7);                         // LCD Bias Select
+  CMD(ST7565_CMD_SET_ADC_NORMAL);                     // ADC Select
+  CMD(ST7565_CMD_SET_COM_NORMAL);                     // SHL Select
+  CMD(ST7565_CMD_SET_DISP_START_LINE);                // Initial Display Line
+  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x04);           // Turn on voltage converter (VC=1, VR=0, VF=0)
+  DELAY(50 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 50mS
+  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x06);           // Turn on voltage regulator (VC=1, VR=1, VF=0)
+  DELAY(50 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 50mS
+  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x07);           // Turn on voltage follower
+  DELAY(10 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 10mS
+  CMD(ST7565_CMD_SET_RESISTOR_RATIO | 0x6);           // Set LCD operating voltage
+
+  // Turn display on
+  CMD(ST7565_CMD_DISPLAY_ON);
+  CMD(ST7565_CMD_SET_ALLPTS_NORMAL);
+  st7565SetBrightness(0x18);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Enables or disables the backlight
+*/
+/**************************************************************************/
+void st7565Backlight(bool state)
+{
+  gpioSetValue( ST7565_BL_PORT, ST7565_BL_PIN, state ? 0 : 1 );
+}
+
+/**************************************************************************/
+/*! 
+    @brief Sets the display brightness
+*/
+/**************************************************************************/
+void st7565SetBrightness(uint8_t val)
+{
+  CMD(ST7565_CMD_SET_VOLUME_FIRST);
+  CMD(ST7565_CMD_SET_VOLUME_SECOND | (val & 0x3f));
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears the screen
+*/
+/**************************************************************************/
+void st7565ClearScreen(void) 
+{
+  memset(&_st7565buffer, 0x00, 128*64/8);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Renders the contents of the pixel buffer on the LCD
+*/
+/**************************************************************************/
+void st7565Refresh(void)
+{
+  writeBuffer(_st7565buffer);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Draws a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+*/
+/**************************************************************************/
+void st7565DrawPixel(uint8_t x, uint8_t y) 
+{
+  if ((x >= 128) || (y >= 64))
+    return;
+
+  // x is which column
+  _st7565buffer[x+ (y/8)*128] |= (1 << (7-(y%8)));
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears a single pixel in image buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+*/
+/**************************************************************************/
+void st7565ClearPixel(uint8_t x, uint8_t y)
+{
+  if ((x >= 128) || (y >= 64))
+    return;
+
+  // x is which column
+  _st7565buffer[x+ (y/8)*128] &= ~(1 << (7-(y%8)));
+}
+
+/**************************************************************************/
+/*! 
+    @brief Gets the value (1 or 0) of the specified pixel from the buffer
+
+    @param[in]  x
+                The x position (0..127)
+    @param[in]  y
+                The y position (0..63)
+
+    @return     1 if the pixel is enabled, 0 if disabled
+*/
+/**************************************************************************/
+uint8_t st7565GetPixel(uint8_t x, uint8_t y)
+{
+  if ((x >= 128) || (y >= 64)) return 0;
+  return _st7565buffer[x+ (y/8)*128] & (1 << (7-(y%8)));
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a string using the supplied font data.
+
+    @param[in]  x
+                Starting x co-ordinate
+    @param[in]  y
+                Starting y co-ordinate
+    @param[in]  text
+                The string to render
+    @param[in]  font
+                Pointer to the FONT_DEF to use when drawing the string
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/bitmap/st7565/st7565.h"
+    #include "drivers/displays/smallfonts.h"
+    
+    // Configure the pins and initialise the LCD screen
+    st7565Init();
+
+    // Enable the backlight
+    st7565BLEnable();
+
+    // Render some text on the screen with different fonts
+    st7565DrawString(1, 1, "3X6 SYSTEM", Font_System3x6);   // 3x6 is UPPER CASE only
+    st7565DrawString(1, 10, "5x8 System", Font_System5x8);
+    st7565DrawString(1, 20, "7x8 System", Font_System7x8);
+
+    // Refresh the screen to see the results
+    st7565Refresh();
+
+    @endcode
+*/
+/**************************************************************************/
+void st7565DrawString(uint16_t x, uint16_t y, char* text, struct FONT_DEF font)
+{
+  uint8_t l;
+  for (l = 0; l < strlen(text); l++)
+  {
+    drawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Shifts the contents of the frame buffer up the specified
+            number of pixels
+
+    @param[in]  height
+                The number of pixels to shift the frame buffer up, leaving
+                a blank space at the bottom of the frame buffer x pixels
+                high
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/bitmap/st7565/st7565.h"
+    #include "drivers/displays/smallfonts.h"
+    
+    // Configure the pins and initialise the LCD screen
+    st7565Init();
+
+    // Enable the backlight
+    st7565BLEnable();
+
+    // Continually write some text, scrolling upward one line each time
+    while (1)
+    {
+      // Shift the buffer up 8 pixels (adjust for font-height)
+      st7565ShiftFrameBuffer(8);
+      // Render some text on the screen with different fonts
+      st7565DrawString(1, 56, "INSERT TEXT HERE", Font_System3x6);   // 3x6 is UPPER CASE only
+      // Refresh the screen to see the results
+      st7565Refresh();    
+      // Wait a bit before writing the next line
+      systickDelay(1000);
+    }
+
+    @endcode
+*/
+/**************************************************************************/
+void st7565ShiftFrameBuffer( uint8_t height )
+{
+  if (height == 0) return;
+  if (height >= 64)
+  {
+    // Clear the entire frame buffer
+    st7565ClearScreen();
+    return;
+  }
+
+  // This is horribly inefficient, but at least easy to understand
+  // In a production environment, this should be significantly optimised
+
+  uint8_t y, x;
+  for (y = 0; y < 64; y++)
+  {
+    for (x = 0; x < 128; x++)
+    {
+      if (63 - y > height)
+      {
+        // Shift height from further ahead in the buffer
+        st7565GetPixel(x, y + height) ? st7565DrawPixel(x, y) : st7565ClearPixel(x, y);
+      }
+      else
+      {
+        // Clear the entire line
+        st7565ClearPixel(x, y);
+      }
+    }
+  }
+}
+
diff --git a/drivers/displays/bitmap/st7565/st7565.h b/drivers/displays/bitmap/st7565/st7565.h
new file mode 100644 (file)
index 0000000..4d2ca7b
--- /dev/null
@@ -0,0 +1,109 @@
+/**************************************************************************/
+/*! 
+    @file     ST7565.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __ST7565_H__
+#define __ST7565_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/smallfonts.h"
+
+// Pin Definitions
+#define ST7565_A0_PORT                    (2)     // Register Select Pin (A0)
+#define ST7565_A0_PIN                     (1)
+#define ST7565_RST_PORT                   (2)     // Reset
+#define ST7565_RST_PIN                    (2)
+#define ST7565_CS_PORT                    (2)     // Select
+#define ST7565_CS_PIN                     (3)
+#define ST7565_BL_PORT                    (2)     // Backlight
+#define ST7565_BL_PIN                     (4)
+#define ST7565_SCLK_PORT                  (2)     // Serial Clock
+#define ST7565_SCLK_PIN                   (5)
+#define ST7565_SDAT_PORT                  (2)     // Serial Data
+#define ST7565_SDAT_PIN                   (6)
+
+// Commands
+#define ST7565_CMD_DISPLAY_OFF            0xAE
+#define ST7565_CMD_DISPLAY_ON             0xAF
+#define ST7565_CMD_SET_DISP_START_LINE    0x40
+#define ST7565_CMD_SET_PAGE               0xB0
+#define ST7565_CMD_SET_COLUMN_UPPER       0x10
+#define ST7565_CMD_SET_COLUMN_LOWER       0x00
+#define ST7565_CMD_SET_ADC_NORMAL         0xA0
+#define ST7565_CMD_SET_ADC_REVERSE        0xA1
+#define ST7565_CMD_SET_DISP_NORMAL        0xA6
+#define ST7565_CMD_SET_DISP_REVERSE       0xA7
+#define ST7565_CMD_SET_ALLPTS_NORMAL      0xA4
+#define ST7565_CMD_SET_ALLPTS_ON          0xA5
+#define ST7565_CMD_SET_BIAS_9             0xA2 
+#define ST7565_CMD_SET_BIAS_7             0xA3
+#define ST7565_CMD_RMW                    0xE0
+#define ST7565_CMD_RMW_CLEAR              0xEE
+#define ST7565_CMD_INTERNAL_RESET         0xE2
+#define ST7565_CMD_SET_COM_NORMAL         0xC0
+#define ST7565_CMD_SET_COM_REVERSE        0xC8
+#define ST7565_CMD_SET_POWER_CONTROL      0x28
+#define ST7565_CMD_SET_RESISTOR_RATIO     0x20
+#define ST7565_CMD_SET_VOLUME_FIRST       0x81
+#define ST7565_CMD_SET_VOLUME_SECOND      0
+#define ST7565_CMD_SET_STATIC_OFF         0xAC
+#define ST7565_CMD_SET_STATIC_ON          0xAD
+#define ST7565_CMD_SET_STATIC_REG         0x0
+#define ST7565_CMD_SET_BOOSTER_FIRST      0xF8
+#define ST7565_CMD_SET_BOOSTER_234        0
+#define ST7565_CMD_SET_BOOSTER_5          1
+#define ST7565_CMD_SET_BOOSTER_6          3
+#define ST7565_CMD_NOP                    0xE3
+#define ST7565_CMD_TEST                   0xF0
+
+// Initialisation/Config Prototypes
+void st7565Init( void );
+void st7565Command( uint8_t c );
+void st7565Data( uint8_t d );
+void st7565SetBrightness( uint8_t val );
+
+// Backlight Prototypes
+void st7565Backlight(bool state);
+
+// Drawing Prototypes
+void st7565ClearScreen( void );
+void st7565Refresh( void );
+void st7565DrawPixel( uint8_t x, uint8_t y );
+void st7565ClearPixel( uint8_t x, uint8_t y );
+uint8_t st7565GetPixel( uint8_t x, uint8_t y );
+void st7565DrawString( uint16_t x, uint16_t y, char* text, struct FONT_DEF font );
+void st7565ShiftFrameBuffer( uint8_t pixels );
+
+#endif
diff --git a/drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c b/drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c
new file mode 100644 (file)
index 0000000..2175916
--- /dev/null
@@ -0,0 +1,374 @@
+/**************************************************************************/
+/*! 
+    @file     samsung_20T202DA2JA.c
+    @author   Original source : Limor Fried/ladyada (Adafruit Industries)
+              LPC1343 port    : K. Townsend
+
+    @section DESCRIPTION
+
+    Driver for Samsung 20T202DA2JA 20x2 VFD display module.
+
+    This driver is based on the SPI_VFD Library from Limor Fried
+    (Adafruit Industries) at: https://github.com/adafruit/SPI_VFD  
+
+    The displays can be purchased at:
+    https://www.adafruit.com/products/347
+    
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012 Adafruit Industries
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "samsung_20T202DA2JA.h"
+
+#include "core/gpio/gpio.h"
+#include "core/systick/systick.h"
+
+/**************************************************************************/
+/* Private Methods                                                        */
+/**************************************************************************/
+
+uint8_t samsungvfd_displayfunction;
+uint8_t samsungvfd_displaycontrol;
+uint8_t samsungvfd_displaymode;
+uint8_t samsungvfd_initialized;
+uint8_t samsungvfd_numlines, samsungvfd_currline;
+
+/**************************************************************************/
+/*! 
+    @brief Low-level SPI bit-banging routing
+*/
+/**************************************************************************/
+static inline void samsungvfd_sendByte(uint8_t c) {
+  int8_t i;
+
+  // Make sure clock pin starts high
+  gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
+
+  // Write from MSB to LSB
+  for (i=7; i>=0; i--) 
+  {
+    // Set clock pin low
+    gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 0);
+    // Set data pin high or low depending on the value of the current bit
+    gpioSetValue(SAMSUNGVFD_SIO_PORT, SAMSUNGVFD_SIO_PIN, c & (1 << i) ? 1 : 0);
+    // Set clock pin high
+    gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief Sends a command to the VFD display
+*/
+/**************************************************************************/
+void samsungvfd_command(uint8_t value) 
+{
+  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
+  samsungvfd_sendByte(SAMSUNGVFD_SPICOMMAND);
+  samsungvfd_sendByte(value);
+  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Initialises the VFD character display
+*/
+/**************************************************************************/
+void samsungvfd_begin(uint8_t cols, uint8_t lines, uint8_t brightness) 
+{
+  // set number of lines
+  if (lines > 1)
+    samsungvfd_displayfunction = SAMSUNGVFD_2LINE;
+  else
+    samsungvfd_displayfunction = SAMSUNGVFD_1LINE;
+
+  if (brightness>SAMSUNGVFD_BRIGHTNESS25)      //catch bad values
+    brightness = SAMSUNGVFD_BRIGHTNESS100;
+
+  // set the brightness and push the linecount with VFD_SETFUNCTION
+  samsungvfdSetBrightness(brightness);
+  
+  samsungvfd_numlines = lines;
+  samsungvfd_currline = 0;
+  
+  // Initialize to default text direction (for romance languages#include "SPI_VFD.h"
+  samsungvfd_displaymode = SAMSUNGVFD_ENTRYLEFT | SAMSUNGVFD_ENTRYSHIFTDECREMENT;
+  // set the entry mode
+  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
+
+  samsungvfd_command(SAMSUNGVFD_SETDDRAMADDR);  // go to address 0
+
+  // turn the display on with no cursor or blinking default
+  samsungvfd_displaycontrol = SAMSUNGVFD_DISPLAYON; 
+  samsungvfdDisplay();
+
+  samsungvfdClear();
+  samsungvfdHome();
+}
+
+/**************************************************************************/
+/* Public Methods                                                         */
+/**************************************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief Initialises the VFD character display
+*/
+/**************************************************************************/
+void samsungvfdInit(uint8_t brightness)
+{
+  // Set all pins to output
+  gpioSetDir(SAMSUNGVFD_SIO_PORT, SAMSUNGVFD_SIO_PIN, gpioDirection_Output);
+  gpioSetDir(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, gpioDirection_Output);
+  gpioSetDir(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, gpioDirection_Output);
+
+  // Set strobe and clock pins high by default
+  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
+  gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
+
+  // Default to 2x20 display (SAMSUNG 20T202DA2JA)
+  samsungvfd_begin(20, 2, brightness);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Writes a single character to the VFD display
+*/
+/**************************************************************************/
+void samsungvfdWrite(uint8_t value) 
+{
+  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
+  samsungvfd_sendByte(SAMSUNGVFD_SPIDATA);
+  samsungvfd_sendByte(value);
+  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Writes a full string to the VFD display
+*/
+/**************************************************************************/
+void samsungvfdWriteString(const char * str)
+{
+  while(*str)
+  {
+    gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
+    samsungvfd_sendByte(SAMSUNGVFD_SPIDATA);
+    samsungvfd_sendByte(*str++);
+    gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief Sets the display brightness
+*/
+/**************************************************************************/
+void samsungvfdSetBrightness(uint8_t brightness)
+{
+  // set the brightness (only if a valid value is passed
+  if (brightness <= SAMSUNGVFD_BRIGHTNESS25) 
+  {
+    samsungvfd_displayfunction &= ~SAMSUNGVFD_BRIGHTNESS25;
+    samsungvfd_displayfunction |= brightness;
+
+    samsungvfd_command(SAMSUNGVFD_FUNCTIONSET | samsungvfd_displayfunction);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief Quickly turn the display off
+*/
+/**************************************************************************/
+void samsungvfdNoDisplay(void) 
+{
+  samsungvfd_displaycontrol &= ~SAMSUNGVFD_DISPLAYON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Quickly turn the display on
+*/
+/**************************************************************************/
+void samsungvfdDisplay(void) 
+{
+  samsungvfd_displaycontrol |= SAMSUNGVFD_DISPLAYON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Turns the cursor off
+*/
+/**************************************************************************/
+void samsungvfdNoCursor(void) 
+{
+  samsungvfd_displaycontrol &= ~SAMSUNGVFD_CURSORON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Enables the cursor
+*/
+/**************************************************************************/
+void samsungvfdCursor(void) 
+{
+  samsungvfd_displaycontrol |= SAMSUNGVFD_CURSORON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Disable cursor blinking
+*/
+/**************************************************************************/
+void samsungvfdNoBlink(void) 
+{
+  samsungvfd_displaycontrol &= ~SAMSUNGVFD_BLINKON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Enable cursor blinking
+*/
+/**************************************************************************/
+void samsungvfdBlink(void) 
+{
+  samsungvfd_displaycontrol |= SAMSUNGVFD_BLINKON;
+  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Scroll the display left without changing the RAM
+*/
+/**************************************************************************/
+void samsungvfdScrollDisplayLeft(void) 
+{
+  samsungvfd_command(SAMSUNGVFD_CURSORSHIFT | SAMSUNGVFD_DISPLAYMOVE | SAMSUNGVFD_MOVELEFT);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Scroll the display right without changing the RAM
+*/
+/**************************************************************************/
+void samsungvfdScrollDisplayRight(void) 
+{
+  samsungvfd_command(SAMSUNGVFD_CURSORSHIFT | SAMSUNGVFD_DISPLAYMOVE | SAMSUNGVFD_MOVERIGHT);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Cause text to flow left to right
+*/
+/**************************************************************************/
+void samsungvfdLeftToRight(void) 
+{
+  samsungvfd_displaymode |= SAMSUNGVFD_ENTRYLEFT;
+  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Cause text to flow from right to left
+*/
+/**************************************************************************/
+void samsungvfdRightToLeft(void) 
+{
+  samsungvfd_displaymode &= ~SAMSUNGVFD_ENTRYLEFT;
+  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Right justify text from the cursor
+*/
+/**************************************************************************/
+void samsungvfdAutoscroll(void) 
+{
+  samsungvfd_displaymode |= SAMSUNGVFD_ENTRYSHIFTINCREMENT;
+  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Left justify text from the cursor
+*/
+/**************************************************************************/
+void samsungvfdNoAutoscroll(void) 
+{
+  samsungvfd_displaymode &= ~SAMSUNGVFD_ENTRYSHIFTINCREMENT;
+  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
+}
+
+/**************************************************************************/
+/*! 
+    @brief Clears the display
+*/
+/**************************************************************************/
+void samsungvfdClear(void)
+{
+  samsungvfd_command(SAMSUNGVFD_CLEARDISPLAY);  // clear display, set cursor position to zero
+  systickDelay(2);                              // this command takes a long time!
+}
+
+/**************************************************************************/
+/*! 
+    @brief Places the cursor at 0, 0
+*/
+/**************************************************************************/
+void samsungvfdHome(void)
+{
+  samsungvfd_command(SAMSUNGVFD_RETURNHOME);    // Set cursor position to zero
+  systickDelay(2);                              // this command takes a long time!
+}
+
+/**************************************************************************/
+/*! 
+    @brief Sets the cursor to the specified row and column position
+*/
+/**************************************************************************/
+void samsungvfdSetCursor(uint8_t row, uint8_t col)
+{
+  int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
+  if ( row > samsungvfd_numlines ) 
+  {
+    row = samsungvfd_numlines-1;                // we count rows starting w/0
+  }
+  
+  samsungvfd_command(SAMSUNGVFD_SETDDRAMADDR | (col + row_offsets[row]));
+}
+
diff --git a/drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h b/drivers/displays/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h
new file mode 100644 (file)
index 0000000..d8780a2
--- /dev/null
@@ -0,0 +1,112 @@
+/**************************************************************************/
+/*! 
+    @file     samsung_20T202DA2JA.h
+    @author   Original source : Limor Fried/ladyada (Adafruit Industries)
+              LPC1343 port    : K. Townsend
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012 Adafruit Industries
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SAMSUNG_20T202DA2JA__
+#define __SAMSUNG_20T202DA2JA__
+
+#include "projectconfig.h"
+
+// Pin Definitions
+#define SAMSUNGVFD_SIO_PORT               (2)    // Data
+#define SAMSUNGVFD_SIO_PIN                (1)
+#define SAMSUNGVFD_STB_PORT               (2)    // Strobe
+#define SAMSUNGVFD_STB_PIN                (2)
+#define SAMSUNGVFD_SCK_PORT               (2)    // Clock
+#define SAMSUNGVFD_SCK_PIN                (3)
+
+// Commands
+#define SAMSUNGVFD_CLEARDISPLAY           0x01
+#define SAMSUNGVFD_RETURNHOME             0x02
+#define SAMSUNGVFD_ENTRYMODESET           0x04
+#define SAMSUNGVFD_DISPLAYCONTROL         0x08
+#define SAMSUNGVFD_CURSORSHIFT            0x10
+#define SAMSUNGVFD_FUNCTIONSET            0x30
+#define SAMSUNGVFD_SETCGRAMADDR           0x40
+#define SAMSUNGVFD_SETDDRAMADDR           0x80
+
+// flags for display entry mode
+#define SAMSUNGVFD_ENTRYRIGHT             0x00
+#define SAMSUNGVFD_ENTRYLEFT              0x02
+#define SAMSUNGVFD_ENTRYSHIFTINCREMENT    0x01
+#define SAMSUNGVFD_ENTRYSHIFTDECREMENT    0x00
+
+// flags for display on/off control
+#define SAMSUNGVFD_DISPLAYON              0x04
+#define SAMSUNGVFD_DISPLAYOFF             0x00
+#define SAMSUNGVFD_CURSORON               0x02
+#define SAMSUNGVFD_CURSOROFF              0x00
+#define SAMSUNGVFD_BLINKON                0x01
+#define SAMSUNGVFD_BLINKOFF               0x00
+
+// flags for display/cursor shift
+#define SAMSUNGVFD_DISPLAYMOVE            0x08
+#define SAMSUNGVFD_CURSORMOVE             0x00
+#define SAMSUNGVFD_MOVERIGHT              0x04
+#define SAMSUNGVFD_MOVELEFT               0x00
+
+// flags for function set
+#define SAMSUNGVFD_2LINE                  0x08
+#define SAMSUNGVFD_1LINE                  0x00
+#define SAMSUNGVFD_BRIGHTNESS25           0x03
+#define SAMSUNGVFD_BRIGHTNESS50           0x02
+#define SAMSUNGVFD_BRIGHTNESS75           0x01
+#define SAMSUNGVFD_BRIGHTNESS100          0x00
+
+#define SAMSUNGVFD_SPICOMMAND             0xF8
+#define SAMSUNGVFD_SPIDATA                0xFA
+
+// Initialisation/Config Prototypes
+void samsungvfdInit ( uint8_t brightness );
+void samsungvfdWrite ( uint8_t value ); 
+void samsungvfdWriteString( const char * str );
+void samsungvfdSetBrightness ( uint8_t brightness );
+void samsungvfdNoDisplay ( void );
+void samsungvfdDisplay ( void );
+void samsungvfdNoCursor ( void ); 
+void samsungvfdCursor ( void ); 
+void samsungvfdNoBlink ( void );
+void samsungvfdBlink ( void );
+void samsungvfdScrollDisplayLeft ( void );
+void samsungvfdScrollDisplayRight ( void );
+void samsungvfdLeftToRight ( void );
+void samsungvfdRightToLeft ( void );
+void samsungvfdAutoscroll ( void );
+void samsungvfdNoAutoscroll ( void );
+void samsungvfdClear ( void );
+void samsungvfdHome ( void );
+void samsungvfdSetCursor ( uint8_t row, uint8_t col );
+
+#endif
diff --git a/drivers/displays/icons16.h b/drivers/displays/icons16.h
new file mode 100644 (file)
index 0000000..e37f074
--- /dev/null
@@ -0,0 +1,62 @@
+/**************************************************************************/
+/*! 
+    @file     icons16.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+
+/*
+    All icons have been converted from the GentleFace Toolbar Icon Set,
+    licensed under the Creative Commons Attribution-NonCommercial License.
+    for more information see: http://www.gentleface.com/free_icon_set.html
+*/
+
+// Each icon used will consume 32 bytes of flash memory
+
+#ifndef __ICONS16_H__
+#define __ICONS16_H__
+
+uint16_t icons16_alert[16]            = { 0x0000, 0x0000, 0x0180, 0x03C0, 0x03C0, 0x0660, 0x0660, 0x0E70, 0x0E70, 0x1E78, 0x3E7C, 0x3FFC, 0x7E7E, 0x7E7E, 0xFFFF, 0x0000 };
+uint16_t icons16_alert_interior[16]   = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0180, 0x0180, 0x0000, 0x0000 };
+uint16_t icons16_info[16]             = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3F3E, 0x7F3F, 0x7FFF, 0x7F3F, 0x7F3F, 0x7F3F, 0x7F3F, 0x7F3F, 0x3F3E, 0x1FFC, 0x0FF8, 0x07F0 };
+uint16_t icons16_info_interior[16]    = { 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0, 0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000 };
+uint16_t icons16_failed[16]           = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3FFE, 0x79CF, 0x788F, 0x7C1F, 0x7E3F, 0x7C1F, 0x788F, 0x79CF, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0 };
+uint16_t icons16_failed_interior[16]  = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0630, 0x0770, 0x03E0, 0x01C0, 0x03E0, 0x0770, 0x0630, 0x0000, 0x0000, 0x0000, 0x0000 };
+uint16_t icons16_passed[16]           = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3FFE, 0x7FEF, 0x7FC7, 0x7F8F, 0x731F, 0x783F, 0x7C7F, 0x7EFF, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0 };
+uint16_t icons16_passed_interior[16]  = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0038, 0x0070, 0x0CE0, 0x07C0, 0x0380, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000 };
+uint16_t icons16_pointer[16]          = { 0x07C0, 0x1FF0, 0x3FF8, 0x3FF8, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x3FF8, 0x1FF0, 0x0FE0, 0x07C0, 0x0380, 0x0100 };
+uint16_t icons16_pointer_dot[16]      = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0380, 0x07C0, 0x07C0, 0x07C0, 0x0380, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
+uint16_t icons16_tag[16]              = { 0xFF00, 0xFF80, 0xCFC0, 0xCFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0x7FFE, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0, 0x03E0, 0x01C0, 0x0000 };
+uint16_t icons16_tag_dot[16]          = { 0x0000, 0x0000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
+uint16_t icons16_tools[16]            = { 0x118C, 0x118C, 0x11FC, 0x11FC, 0x10F8, 0x1070, 0x1070, 0x3870, 0x1070, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870 };
+
+#endif
diff --git a/drivers/displays/smallfonts.c b/drivers/displays/smallfonts.c
new file mode 100644 (file)
index 0000000..5a185f8
--- /dev/null
@@ -0,0 +1,556 @@
+/* Partially based on original code for the KS0108 by Stephane Rey */
+
+/**************************************************************************/
+/*! 
+    @file     smallfonts.c
+    @author   K. Townsend (microBuilder.eu)
+    @date     22 March 2010
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "sysdefs.h"
+#include "smallfonts.h"
+
+/* Global variables */
+const struct FONT_DEF Font_System3x6    = {3, 6, 32, 96,  au8FontSystem3x6};
+const struct FONT_DEF Font_System5x8    = {5, 8, 32, 128, au8FontSystem5x8};
+const struct FONT_DEF Font_System7x8    = {7, 8, 32, 128, au8FontSystem7x8};
+const struct FONT_DEF Font_8x8          = {8, 8, 32, 128, au8Font8x8};
+const struct FONT_DEF Font_8x8Thin      = {8, 8, 32, 128, au8Font8x8Thin};
+
+/* System 3x6 - UPPER CASE ONLY */
+const uint8_t au8FontSystem3x6[]= {
+    0x00,0x00,0x00, /* Space */         
+    0x00,0x5C,0x00, /* ! */                         
+    0x0C,0x00,0x0C, /* " */                         
+    0x7C,0x28,0x7C, /* # */                         
+    0x7C,0x44,0x7C, /* 0x */                        
+    0x24,0x10,0x48, /* % */                         
+    0x28,0x54,0x08, /* & */                         
+    0x00,0x0C,0x00, /* ' */                         
+    0x38,0x44,0x00, /* ( */                         
+    0x44,0x38,0x00, /* ) */                         
+    0x20,0x10,0x08, /* // */                        
+    0x10,0x38,0x10, /* + */                         
+    0x80,0x40,0x00, /* , */                         
+    0x10,0x10,0x10, /* - */                         
+    0x00,0x40,0x00, /* . */                         
+    0x20,0x10,0x08, /* / */    
+    0x38,0x44,0x38, /* 0 */                     
+    0x00,0x7C,0x00, /* 1 */                         
+    0x64,0x54,0x48, /* 2 */                         
+    0x44,0x54,0x28, /* 3 */                         
+    0x1C,0x10,0x7C, /* 4 */                         
+    0x4C,0x54,0x24, /* 5 */                         
+    0x38,0x54,0x20, /* 6 */                         
+    0x04,0x74,0x0C, /* 7 */                         
+    0x28,0x54,0x28, /* 8 */                         
+    0x08,0x54,0x38, /* 9 */                         
+    0x00,0x50,0x00, /* : */                         
+    0x80,0x50,0x00, /* ; */                         
+    0x10,0x28,0x44, /* < */                         
+    0x28,0x28,0x28, /* = */                  
+    0x44,0x28,0x10, /* > */                        
+    0x04,0x54,0x08, /* ? */                         
+    0x38,0x4C,0x5C, /* @ */                          
+    0x78,0x14,0x78, /* A */                         
+    0x7C,0x54,0x28, /* B */                         
+    0x38,0x44,0x44, /* C */                         
+    0x7C,0x44,0x38, /* D */                         
+    0x7C,0x54,0x44, /* E */                         
+    0x7C,0x14,0x04, /* F */                         
+    0x38,0x44,0x34, /* G */                         
+    0x7C,0x10,0x7C, /* H */                         
+    0x00,0x7C,0x00, /* I */                         
+    0x20,0x40,0x3C, /* J */                         
+    0x7C,0x10,0x6C, /* K */                         
+    0x7C,0x40,0x40, /* L */                         
+    0x7C,0x08,0x7C, /* M */                         
+    0x7C,0x04,0x7C, /* N */                         
+    0x7C,0x44,0x7C, /* O */                         
+    0x7C,0x14,0x08, /* P */                 
+    0x38,0x44,0x78, /* Q */                         
+    0x7C,0x14,0x68, /* R */                         
+    0x48,0x54,0x24, /* S */                         
+    0x04,0x7C,0x04, /* T */                         
+    0x7C,0x40,0x7C, /* U */                         
+    0x3C,0x40,0x3C, /* V */                         
+    0x7C,0x20,0x7C, /* W */                         
+    0x6C,0x10,0x6C, /* X */                         
+    0x1C,0x60,0x1C, /* Y */                         
+    0x64,0x54,0x4C, /* Z */                         
+    0x7C,0x44,0x00, /* [ */                         
+    0x08,0x10,0x20, /* \ */                         
+    0x44,0x7C,0x00, /* ] */                         
+    0x08,0x04,0x08, /* ^ */                         
+    0x80,0x80,0x80, /* _ */                         
+    0x04,0x08,0x00  /* ` */                 
+};
+
+/* System 5x8 */
+const uint8_t au8FontSystem5x8[]= 
+{
+    0x00,0x00,0x00,0x00,0x00, /* Space */
+    0x00,0x00,0x4f,0x00,0x00, /* ! */
+    0x00,0x07,0x00,0x07,0x00, /* " */
+    0x14,0x7f,0x14,0x7f,0x14, /* # */
+    0x24,0x2a,0x7f,0x2a,0x12, /* 0x */
+    0x23,0x13,0x08,0x64,0x62, /* % */
+    0x36,0x49,0x55,0x22,0x20, /* & */
+    0x00,0x05,0x03,0x00,0x00, /* ' */
+    0x00,0x1c,0x22,0x41,0x00, /* ( */
+    0x00,0x41,0x22,0x1c,0x00, /* ) */
+    0x14,0x08,0x3e,0x08,0x14, /* // */
+    0x08,0x08,0x3e,0x08,0x08, /* + */
+    0x50,0x30,0x00,0x00,0x00, /* , */
+    0x08,0x08,0x08,0x08,0x08, /* - */ 
+    0x00,0x60,0x60,0x00,0x00, /* . */
+    0x20,0x10,0x08,0x04,0x02, /* / */
+    0x3e,0x51,0x49,0x45,0x3e, /* 0 */
+    0x00,0x42,0x7f,0x40,0x00, /* 1 */
+    0x42,0x61,0x51,0x49,0x46, /* 2 */
+    0x21,0x41,0x45,0x4b,0x31, /* 3 */
+    0x18,0x14,0x12,0x7f,0x10, /* 4 */
+    0x27,0x45,0x45,0x45,0x39, /* 5 */
+    0x3c,0x4a,0x49,0x49,0x30, /* 6 */
+    0x01,0x71,0x09,0x05,0x03, /* 7 */
+    0x36,0x49,0x49,0x49,0x36, /* 8 */
+    0x06,0x49,0x49,0x29,0x1e, /* 9 */
+    0x00,0x36,0x36,0x00,0x00, /* : */
+    0x00,0x56,0x36,0x00,0x00, /* ; */
+    0x08,0x14,0x22,0x41,0x00, /* < */
+    0x14,0x14,0x14,0x14,0x14, /* = */
+    0x00,0x41,0x22,0x14,0x08, /* > */
+    0x02,0x01,0x51,0x09,0x06, /* ? */
+    0x3e,0x41,0x5d,0x55,0x1e, /* @ */
+    0x7e,0x11,0x11,0x11,0x7e, /* A */
+    0x7f,0x49,0x49,0x49,0x36, /* B */
+    0x3e,0x41,0x41,0x41,0x22, /* C */
+    0x7f,0x41,0x41,0x22,0x1c, /* D */
+    0x7f,0x49,0x49,0x49,0x41, /* E */
+    0x7f,0x09,0x09,0x09,0x01, /* F */
+    0x3e,0x41,0x49,0x49,0x7a, /* G */
+    0x7f,0x08,0x08,0x08,0x7f, /* H */
+    0x00,0x41,0x7f,0x41,0x00, /* I */
+    0x20,0x40,0x41,0x3f,0x01, /* J */
+    0x7f,0x08,0x14,0x22,0x41, /* K */
+    0x7f,0x40,0x40,0x40,0x40, /* L */
+    0x7f,0x02,0x0c,0x02,0x7f, /* M */
+    0x7f,0x04,0x08,0x10,0x7f, /* N */
+    0x3e,0x41,0x41,0x41,0x3e, /* O */
+    0x7f,0x09,0x09,0x09,0x06, /* P */
+    0x3e,0x41,0x51,0x21,0x5e, /* Q */
+    0x7f,0x09,0x19,0x29,0x46, /* R */
+    0x26,0x49,0x49,0x49,0x32, /* S */
+    0x01,0x01,0x7f,0x01,0x01, /* T */
+    0x3f,0x40,0x40,0x40,0x3f, /* U */
+    0x1f,0x20,0x40,0x20,0x1f, /* V */
+    0x3f,0x40,0x38,0x40,0x3f, /* W */
+    0x63,0x14,0x08,0x14,0x63, /* X */
+    0x07,0x08,0x70,0x08,0x07, /* Y */
+    0x61,0x51,0x49,0x45,0x43, /* Z */
+    0x00,0x7f,0x41,0x41,0x00, /* [ */
+    0x02,0x04,0x08,0x10,0x20, /* \ */ 
+    0x00,0x41,0x41,0x7f,0x00, /* ] */
+    0x04,0x02,0x01,0x02,0x04, /* ^ */
+    0x40,0x40,0x40,0x40,0x40, /* _ */
+    0x00,0x00,0x03,0x05,0x00, /* ` */
+    0x20,0x54,0x54,0x54,0x78, /* a */
+    0x7F,0x44,0x44,0x44,0x38, /* b */
+    0x38,0x44,0x44,0x44,0x44, /* c */
+    0x38,0x44,0x44,0x44,0x7f, /* d */
+    0x38,0x54,0x54,0x54,0x18, /* e */
+    0x04,0x04,0x7e,0x05,0x05, /* f */
+    0x08,0x54,0x54,0x54,0x3c, /* g */
+    0x7f,0x08,0x04,0x04,0x78, /* h */
+    0x00,0x44,0x7d,0x40,0x00, /* i */
+    0x20,0x40,0x44,0x3d,0x00, /* j */
+    0x7f,0x10,0x28,0x44,0x00, /* k */
+    0x00,0x41,0x7f,0x40,0x00, /* l */
+    0x7c,0x04,0x7c,0x04,0x78, /* m */
+    0x7c,0x08,0x04,0x04,0x78, /* n */
+    0x38,0x44,0x44,0x44,0x38, /* o */
+    0x7c,0x14,0x14,0x14,0x08, /* p */
+    0x08,0x14,0x14,0x14,0x7c, /* q */
+    0x7c,0x08,0x04,0x04,0x00, /* r */
+    0x48,0x54,0x54,0x54,0x24, /* s */
+    0x04,0x04,0x3f,0x44,0x44, /* t */
+    0x3c,0x40,0x40,0x20,0x7c, /* u */
+    0x1c,0x20,0x40,0x20,0x1c, /* v */
+    0x3c,0x40,0x30,0x40,0x3c, /* w */
+    0x44,0x28,0x10,0x28,0x44, /* x */
+    0x0c,0x50,0x50,0x50,0x3c, /* y */
+    0x44,0x64,0x54,0x4c,0x44, /* z */
+    0x08,0x36,0x41,0x41,0x00, /* { */
+    0x00,0x00,0x77,0x00,0x00, /* | */
+    0x00,0x41,0x41,0x36,0x08, /* } */
+    0x08,0x08,0x2a,0x1c,0x08, /* <- */
+    0x08,0x1c,0x2a,0x08,0x08, /* -> */
+    0xff,0xff,0xff,0xff,0xff, /* \7f */
+};
+
+/* System 7x8 */
+const uint8_t au8FontSystem7x8[]= 
+{
+     0,   0,   0,   0,   0,   0,   0, //' '
+     0,   6,  95,  95,   6,   0,   0, //'!'
+     0,   7,   7,   0,   7,   7,   0, //'"'
+    20, 127, 127,  20, 127, 127,  20, //'#'
+    36,  46, 107, 107,  58,  18,   0, //'$'
+    70, 102,  48,  24,  12, 102,  98, //'%'
+    48, 122,  79,  93,  55, 122,  72, //'&'
+     4,   7,   3,   0,   0,   0,   0, //'''
+     0,  28,  62,  99,  65,   0,   0, //'('
+     0,  65,  99,  62,  28,   0,   0, //')'
+     8,  42,  62,  28,  28,  62,  42, //'*'
+     8,   8,  62,  62,   8,   8,   0, //'+'
+     0, 128, 224,  96,   0,   0,   0, //','
+     8,   8,   8,   8,   8,   8,   0, //'-'
+     0,   0,  96,  96,   0,   0,   0, //'.'
+    96,  48,  24,  12,   6,   3,   1, //'/'
+    62, 127, 113,  89,  77, 127,  62, //'0'
+    64,  66, 127, 127,  64,  64,   0, //'1'
+    98, 115,  89,  73, 111, 102,   0, //'2'
+    34,  99,  73,  73, 127,  54,   0, //'3'
+    24,  28,  22,  83, 127, 127,  80, //'4'
+    39, 103,  69,  69, 125,  57,   0, //'5'
+    60, 126,  75,  73, 121,  48,   0, //'6'
+     3,   3, 113, 121,  15,   7,   0, //'7'
+    54, 127,  73,  73, 127,  54,   0, //'8'
+     6,  79,  73, 105,  63,  30,   0, //'9'
+     0,   0, 102, 102,   0,   0,   0, //':'
+     0, 128, 230, 102,   0,   0,   0, //';'
+     8,  28,  54,  99,  65,   0,   0, //'<'
+    36,  36,  36,  36,  36,  36,   0, //'='
+     0,  65,  99,  54,  28,   8,   0, //'>'
+     2,   3,  81,  89,  15,   6,   0, //'?'
+    62, 127,  65,  93,  93,  31,  30, //'@'
+    124,126,  19,  19, 126, 124,   0, //'A'
+    65, 127, 127,  73,  73, 127,  54, //'B'
+    28,  62,  99,  65,  65,  99,  34, //'C'
+    65, 127, 127,  65,  99,  62,  28, //'D'
+    65, 127, 127,  73,  93,  65,  99, //'E'
+    65, 127, 127,  73,  29,   1,   3, //'F'
+    28,  62,  99,  65,  81, 115, 114, //'G'
+    127,127,   8,   8, 127, 127,   0, //'H'
+     0,  65, 127, 127,  65,   0,   0, //'I'
+    48, 112,  64,  65, 127,  63,   1, //'J'
+    65, 127, 127,   8,  28, 119,  99, //'K'
+    65, 127, 127,  65,  64,  96, 112, //'L'
+    127,127,  14,  28,  14, 127, 127, //'M'
+    127,127,   6,  12,  24, 127, 127, //'N'
+    28,  62,  99,  65,  99,  62,  28, //'O'
+    65, 127, 127,  73,   9,  15,   6, //'P'
+    30,  63,  33, 113, 127,  94,   0, //'Q'
+    65, 127, 127,   9,  25, 127, 102, //'R'
+    38, 111,  77,  89, 115,  50,   0, //'S'
+     3,  65, 127, 127,  65,   3,   0, //'T'
+    127,127,  64,  64, 127, 127,   0, //'U'
+    31,  63,  96,  96,  63,  31,   0, //'V'
+    127,127,  48,  24,  48, 127, 127, //'W'
+    67, 103,  60,  24,  60, 103,  67, //'X'
+     7,  79, 120, 120,  79,   7,   0, //'Y'
+    71,  99, 113,  89,  77, 103, 115, //'Z'
+     0, 127, 127,  65,  65,   0,   0, //'['
+     1,   3,   6,  12,  24,  48,  96, //'\'
+     0,  65,  65, 127, 127,   0,   0, //']'
+     8,  12,   6,   3,   6,  12,   8, //'^'
+    128,128, 128, 128, 128, 128, 128, //'_'
+     0,   0,   3,   7,   4,   0,   0, //'`'
+    32, 116,  84,  84,  60, 120,  64, //'a'
+    65, 127,  63,  72,  72, 120,  48, //'b'
+    56, 124,  68,  68, 108,  40,   0, //'c'
+    48, 120,  72,  73,  63, 127,  64, //'d'
+    56, 124,  84,  84,  92,  24,   0, //'e'
+    72, 126, 127,  73,   3,   2,   0, //'f'
+    56, 188, 164, 164, 252, 120,   0, //'g'
+    65, 127, 127,   8,   4, 124, 120, //'h'
+     0,  68, 125, 125,  64,   0,   0, //'i'
+    96, 224, 128, 128, 253, 125,   0, //'j'
+    65, 127, 127,  16,  56, 108,  68, //'k'
+     0,  65, 127, 127,  64,   0,   0, //'l'
+    120,124,  28,  56,  28, 124, 120, //'m'
+    124,124,   4,   4, 124, 120,   0, //'n'
+    56, 124,  68,  68, 124,  56,   0, //'o'
+    0,  252, 252, 164,  36,  60,  24, //'p'
+    24,  60,  36, 164, 248, 252, 132, //'q'
+    68, 124, 120,  76,   4,  28,  24, //'r'
+    72,  92,  84,  84, 116,  36,   0, //'s'
+     0,   4,  62, 127,  68,  36,   0, //'t'
+    60, 124,  64,  64,  60, 124,  64, //'u'
+    28,  60,  96,  96,  60,  28,   0, //'v'
+    60, 124, 112,  56, 112, 124,  60, //'w'
+    68, 108,  56,  16,  56, 108,  68, //'x'
+    60, 188, 160, 160, 252, 124,   0, //'y'
+    76, 100, 116,  92,  76, 100,   0, //'z'
+     8,   8,  62, 119,  65,  65,   0, //'{'
+     0,   0,   0, 119, 119,   0,   0, //'|'
+    65,  65, 119,  62,   8,   8,   0, //'}'
+     2,   3,   1,   3,   2,   3,   1, //'~'
+    255,129, 129, 129, 129, 129, 255, //'\7f'
+    14, 159, 145, 177, 251,  74,   0 //'Á'
+};
+  
+/* 8x8 Normal */
+const uint8_t au8Font8x8[]= {
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,       // ASCII -  32
+    0x00,0x00,0x00,0x5F,0x5F,0x00,0x00,0x00,       // ASCII -  33
+    0x00,0x00,0x03,0x07,0x00,0x07,0x03,0x00,       // ASCII -  34
+    0x00,0x10,0x74,0x1C,0x77,0x1C,0x17,0x04,       // ASCII -  35
+    0x00,0x24,0x2E,0x2A,0x7F,0x2A,0x3A,0x10,       // ASCII -  36
+    0x00,0x4C,0x6A,0x76,0x1A,0x6A,0x56,0x33,       // ASCII -  37
+    0x00,0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48,       // ASCII -  38
+    0x00,0x00,0x04,0x07,0x03,0x00,0x00,0x00,       // ASCII -  39
+    0x00,0x00,0x00,0x1C,0x3E,0x63,0x41,0x00,       // ASCII -  40
+    0x00,0x00,0x41,0x63,0x3E,0x1C,0x00,0x00,       // ASCII -  41
+    0x00,0x08,0x2A,0x3E,0x1C,0x3E,0x2A,0x08,       // ASCII -  42
+    0x00,0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,       // ASCII -  43
+    0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,       // ASCII -  44
+    0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,       // ASCII -  45
+    0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,       // ASCII -  46
+    0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,       // ASCII -  47
+    0x00,0x1C,0x3E,0x61,0x43,0x3E,0x1C,0x00,       // ASCII -  48
+    0x00,0x00,0x44,0x7F,0x7F,0x40,0x00,0x00,       // ASCII -  49
+    0x00,0x46,0x67,0x71,0x59,0x4F,0x66,0x00,       // ASCII -  50
+    0x00,0x22,0x63,0x49,0x4D,0x7F,0x32,0x00,       // ASCII -  51
+    0x00,0x18,0x1C,0x52,0x7F,0x7F,0x50,0x00,       // ASCII -  52
+    0x00,0x2F,0x6F,0x45,0x45,0x7D,0x39,0x00,       // ASCII -  53
+    0x00,0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00,       // ASCII -  54
+    0x00,0x07,0x43,0x71,0x7D,0x0F,0x03,0x00,       // ASCII -  55
+    0x00,0x36,0x7F,0x4D,0x59,0x7F,0x36,0x00,       // ASCII -  56
+    0x00,0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00,       // ASCII -  57
+    0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,       // ASCII -  58
+    0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,       // ASCII -  59
+    0x00,0x00,0x08,0x1C,0x36,0x63,0x41,0x00,       // ASCII -  60
+    0x00,0x14,0x14,0x14,0x14,0x14,0x14,0x00,       // ASCII -  61
+    0x00,0x00,0x41,0x63,0x36,0x1C,0x08,0x00,       // ASCII -  62
+    0x00,0x02,0x07,0x51,0x59,0x0F,0x06,0x00,       // ASCII -  63
+    0x00,0x3E,0x41,0x5D,0x55,0x5D,0x51,0x1E,       // ASCII -  64
+    0x00,0x40,0x70,0x1D,0x17,0x1F,0x78,0x60,       // ASCII -  65
+    0x00,0x41,0x7F,0x7F,0x49,0x4F,0x7E,0x30,       // ASCII -  66
+    0x00,0x1C,0x3E,0x63,0x41,0x41,0x42,0x27,       // ASCII -  67
+    0x00,0x41,0x7F,0x7F,0x41,0x63,0x3E,0x1C,       // ASCII -  68
+    0x00,0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,       // ASCII -  69
+    0x00,0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03,       // ASCII -  70
+    0x00,0x1C,0x3E,0x63,0x41,0x51,0x72,0x77,       // ASCII -  71
+    0x00,0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,       // ASCII -  72
+    0x00,0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,       // ASCII -  73
+    0x00,0x30,0x70,0x41,0x41,0x7F,0x3F,0x01,       // ASCII -  74
+    0x00,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x41,       // ASCII -  75
+    0x00,0x41,0x7F,0x7F,0x41,0x40,0x60,0x70,       // ASCII -  76
+    0x00,0x7F,0x7E,0x0C,0x18,0x0C,0x7E,0x7F,       // ASCII -  77
+    0x00,0x7F,0x7E,0x0C,0x18,0x30,0x7F,0x7F,       // ASCII -  78
+    0x00,0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C,       // ASCII -  79
+    0x00,0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06,       // ASCII -  80
+    0x00,0x1C,0x3E,0x63,0x51,0x63,0x3E,0x1C,       // ASCII -  81
+    0x00,0x7F,0x7F,0x09,0x19,0x7F,0x66,0x40,       // ASCII -  82
+    0x00,0x66,0x6F,0x4D,0x59,0x7B,0x33,0x00,       // ASCII -  83
+    0x00,0x03,0x41,0x7F,0x7F,0x41,0x03,0x00,       // ASCII -  84
+    0x00,0x3F,0x7F,0x40,0x40,0x40,0x7F,0x3F,       // ASCII -  85
+    0x00,0x03,0x0F,0x3D,0x70,0x1D,0x07,0x01,       // ASCII -  86
+    0x00,0x0F,0x7F,0x30,0x1C,0x30,0x7F,0x0F,       // ASCII -  87
+    0x00,0x63,0x77,0x1C,0x1C,0x77,0x63,0x00,       // ASCII -  88
+    0x01,0x03,0x47,0x7C,0x78,0x47,0x03,0x01,       // ASCII -  89
+    0x00,0x67,0x73,0x59,0x4D,0x67,0x73,0x00,       // ASCII -  90
+    0x00,0x00,0x00,0x7F,0x7F,0x41,0x41,0x00,       // ASCII -  91
+    0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60,       // ASCII -  92
+    0x00,0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,       // ASCII -  93
+    0x00,0x00,0x04,0x06,0x03,0x06,0x04,0x00,       // ASCII -  94
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,       // ASCII -  95
+    0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00,       // ASCII -  96
+    0x00,0x68,0x6C,0x54,0x54,0x3C,0x78,0x40,       // ASCII -  97
+    0x00,0x41,0x7F,0x3F,0x6C,0x44,0x7C,0x38,       // ASCII -  98
+    0x00,0x38,0x7C,0x44,0x44,0x6C,0x2C,0x00,       // ASCII -  99
+    0x00,0x38,0x7C,0x44,0x49,0x3F,0x7F,0x40,       // ASCII - 100
+    0x00,0x38,0x7C,0x54,0x54,0x5C,0x58,0x00,       // ASCII - 101
+    0x00,0x00,0x48,0x7E,0x7F,0x49,0x0B,0x02,       // ASCII - 102
+    0x00,0x48,0x7C,0x34,0x34,0x2C,0x68,0x44,       // ASCII - 103
+    0x00,0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78,       // ASCII - 104
+    0x00,0x00,0x44,0x7D,0x7D,0x40,0x00,0x00,       // ASCII - 105
+    0x00,0x60,0x60,0x04,0x7D,0x7D,0x00,0x00,       // ASCII - 106
+    0x00,0x41,0x7F,0x7F,0x10,0x78,0x6C,0x44,       // ASCII - 107
+    0x00,0x00,0x41,0x7F,0x7F,0x40,0x00,0x00,       // ASCII - 108
+    0x00,0x7C,0x7C,0x0C,0x78,0x0C,0x7C,0x78,       // ASCII - 109
+    0x00,0x44,0x7C,0x7C,0x08,0x04,0x7C,0x78,       // ASCII - 110
+    0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,       // ASCII - 111
+    0x00,0x04,0x7C,0x78,0x24,0x24,0x3C,0x18,       // ASCII - 112
+    0x00,0x18,0x3C,0x24,0x24,0x78,0x7C,0x00,       // ASCII - 113
+    0x00,0x44,0x7C,0x78,0x4C,0x04,0x1C,0x18,       // ASCII - 114
+    0x00,0x48,0x5C,0x5C,0x74,0x74,0x24,0x00,       // ASCII - 115
+    0x00,0x00,0x04,0x3E,0x7F,0x44,0x24,0x00,       // ASCII - 116
+    0x00,0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,       // ASCII - 117
+    0x00,0x04,0x1C,0x3C,0x60,0x30,0x1C,0x04,       // ASCII - 118
+    0x00,0x1C,0x7C,0x30,0x1C,0x30,0x7C,0x1C,       // ASCII - 119
+    0x00,0x44,0x6C,0x3C,0x10,0x78,0x6C,0x44,       // ASCII - 120
+    0x00,0x44,0x4C,0x1C,0x70,0x64,0x1C,0x0C,       // ASCII - 121
+    0x00,0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00,       // ASCII - 122
+    0x00,0x08,0x08,0x3E,0x77,0x41,0x41,0x00,       // ASCII - 123
+    0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,       // ASCII - 124
+    0x00,0x41,0x41,0x77,0x3E,0x08,0x08,0x00,       // ASCII - 125
+    0x00,0x02,0x01,0x01,0x03,0x02,0x02,0x01,       // ASCII - 126
+    0x00,0x60,0x78,0x4E,0x47,0x5E,0x78,0x60,       // ASCII - 127
+    0x00,0x1C,0x3E,0x23,0x41,0x41,0x42,0x27,       // ASCII - 128
+    0x00,0x3D,0x7D,0x40,0x41,0x3D,0x7C,0x40,       // ASCII - 129
+};
+
+/* 8x8 Thin */
+const uint8_t au8Font8x8Thin[]= {
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,
+    0x00,0x14,0x7F,0x14,0x14,0x7F,0x14,0x00,
+    0x00,0x24,0x2A,0x6B,0x6B,0x2A,0x12,0x00,
+    0x00,0x46,0x26,0x10,0x08,0x64,0x62,0x00,
+    0x30,0x4A,0x45,0x4D,0x32,0x48,0x48,0x00,
+    0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x00,
+    0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00,
+    0x08,0x2A,0x1C,0x1C,0x1C,0x2A,0x08,0x00,
+    0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,
+    0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
+    0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
+    0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
+    0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,
+    0x00,0x3E,0x61,0x51,0x49,0x45,0x3E,0x00,
+    0x00,0x44,0x42,0x7F,0x40,0x40,0x00,0x00,
+    0x00,0x62,0x51,0x51,0x49,0x49,0x66,0x00,
+    0x00,0x22,0x41,0x49,0x49,0x49,0x36,0x00,
+    0x10,0x18,0x14,0x52,0x7F,0x50,0x10,0x00,
+    0x00,0x27,0x45,0x45,0x45,0x45,0x39,0x00,
+    0x00,0x3C,0x4A,0x49,0x49,0x49,0x30,0x00,
+    0x00,0x03,0x01,0x71,0x09,0x05,0x03,0x00,
+    0x00,0x36,0x49,0x49,0x49,0x49,0x36,0x00,
+    0x00,0x06,0x49,0x49,0x49,0x29,0x1E,0x00,
+    0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x80,0x66,0x00,0x00,0x00,0x00,
+    0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,
+    0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00,
+    0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x00,
+    0x00,0x02,0x01,0x01,0x51,0x09,0x06,0x00,
+    0x00,0x3E,0x41,0x5D,0x55,0x55,0x1E,0x00,
+    0x00,0x7C,0x12,0x11,0x11,0x12,0x7C,0x00,
+    0x00,0x41,0x7F,0x49,0x49,0x49,0x36,0x00,
+    0x00,0x1C,0x22,0x41,0x41,0x41,0x22,0x00,
+    0x00,0x41,0x7F,0x41,0x41,0x22,0x1C,0x00,
+    0x00,0x41,0x7F,0x49,0x5D,0x41,0x63,0x00,
+    0x00,0x41,0x7F,0x49,0x1D,0x01,0x03,0x00,
+    0x00,0x1C,0x22,0x41,0x51,0x51,0x72,0x00,
+    0x00,0x7F,0x08,0x08,0x08,0x08,0x7F,0x00,
+    0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00,
+    0x00,0x30,0x40,0x40,0x41,0x3F,0x01,0x00,
+    0x00,0x41,0x7F,0x08,0x14,0x22,0x41,0x40,
+    0x00,0x41,0x7F,0x41,0x40,0x40,0x60,0x00,
+    0x00,0x7F,0x01,0x02,0x04,0x02,0x01,0x7F,
+    0x00,0x7F,0x01,0x02,0x04,0x08,0x7F,0x00,
+    0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,0x00,
+    0x00,0x41,0x7F,0x49,0x09,0x09,0x06,0x00,
+    0x00,0x1E,0x21,0x21,0x31,0x21,0x5E,0x40,
+    0x00,0x41,0x7F,0x49,0x19,0x29,0x46,0x00,
+    0x00,0x26,0x49,0x49,0x49,0x49,0x32,0x00,
+    0x00,0x03,0x01,0x41,0x7F,0x41,0x01,0x03,
+    0x00,0x3F,0x40,0x40,0x40,0x40,0x3F,0x00,
+    0x00,0x0F,0x10,0x20,0x40,0x20,0x10,0x0F,
+    0x00,0x3F,0x40,0x40,0x38,0x40,0x40,0x3F,
+    0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41,
+    0x00,0x01,0x02,0x44,0x78,0x44,0x02,0x01,
+    0x00,0x43,0x61,0x51,0x49,0x45,0x43,0x61,
+    0x00,0x7F,0x41,0x41,0x41,0x00,0x00,0x00,
+    0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
+    0x00,0x41,0x41,0x41,0x7F,0x00,0x00,0x00,
+    0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00,
+    0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
+    0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,
+    0x00,0x20,0x54,0x54,0x54,0x54,0x78,0x40,
+    0x00,0x01,0x7F,0x30,0x48,0x48,0x48,0x30,
+    0x00,0x38,0x44,0x44,0x44,0x44,0x28,0x00,
+    0x00,0x30,0x48,0x48,0x48,0x31,0x7F,0x40,
+    0x00,0x38,0x54,0x54,0x54,0x54,0x18,0x00,
+    0x00,0x00,0x48,0x7E,0x49,0x01,0x02,0x00,
+    0x00,0x98,0xA4,0xA4,0xA4,0xA4,0x78,0x04,
+    0x00,0x41,0x7F,0x08,0x04,0x04,0x78,0x00,
+    0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00,
+    0x00,0x60,0x80,0x80,0x80,0x84,0x7D,0x00,
+    0x00,0x01,0x7F,0x10,0x28,0x44,0x40,0x00,
+    0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00,
+    0x00,0x7C,0x04,0x04,0x78,0x04,0x04,0x78,
+    0x00,0x7C,0x08,0x04,0x04,0x04,0x78,0x00,
+    0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,
+    0x00,0x84,0xFC,0x98,0x24,0x24,0x18,0x00,
+    0x00,0x18,0x24,0x24,0x98,0xFC,0x84,0x00,
+    0x00,0x44,0x7C,0x48,0x04,0x04,0x18,0x00,
+    0x00,0x48,0x54,0x54,0x54,0x54,0x24,0x00,
+    0x00,0x04,0x04,0x3F,0x44,0x44,0x20,0x00,
+    0x00,0x3C,0x40,0x40,0x40,0x20,0x7C,0x00,
+    0x00,0x0C,0x10,0x20,0x40,0x20,0x10,0x0C,
+    0x00,0x3C,0x40,0x40,0x38,0x40,0x40,0x3C,
+    0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,
+    0x00,0x9C,0xA0,0xA0,0xA0,0xA0,0x7C,0x00,
+    0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00,
+    0x00,0x08,0x08,0x36,0x41,0x41,0x00,0x00,
+    0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x41,0x41,0x36,0x08,0x08,0x00,
+    0x00,0x02,0x01,0x01,0x02,0x02,0x01,0x00,
+    0x00,0x70,0x48,0x44,0x42,0x44,0x48,0x70,
+    0x00,0x0E,0x91,0x91,0xB1,0xB1,0x4A,0x00,
+    0x00,0x3A,0x40,0x40,0x40,0x7A,0x40,0x00,
+    0x00,0x38,0x54,0x54,0x55,0x55,0x18,0x00,
+    0x00,0x22,0x55,0x55,0x55,0x79,0x42,0x00,
+    0x00,0x21,0x54,0x54,0x54,0x78,0x41,0x00,
+    0x00,0x20,0x55,0x55,0x54,0x78,0x40,0x00,
+    0x00,0x20,0x54,0x55,0x54,0x78,0x40,0x00,
+    0x00,0x18,0x24,0xA4,0xA4,0xE4,0x40,0x00,
+    0x00,0x3A,0x55,0x55,0x55,0x55,0x1A,0x00,
+    0x00,0x39,0x54,0x54,0x54,0x54,0x19,0x00,
+    0x00,0x38,0x55,0x55,0x54,0x54,0x18,0x00,
+    0x00,0x00,0x01,0x44,0x7C,0x41,0x00,0x00,
+    0x02,0x01,0x45,0x7D,0x41,0x01,0x02,0x00,
+    0x00,0x00,0x01,0x45,0x7C,0x40,0x00,0x00,
+    0x00,0x79,0x14,0x12,0x12,0x14,0x79,0x00,
+    0x00,0x70,0x28,0x2B,0x2B,0x28,0x70,0x00,
+    0x00,0x44,0x7C,0x54,0x55,0x45,0x00,0x00,
+    0x00,0x20,0x54,0x54,0x58,0x38,0x54,0x54,
+    0x00,0x7C,0x0A,0x09,0x09,0x7F,0x49,0x49,
+    0x00,0x30,0x4A,0x49,0x49,0x4A,0x30,0x00,
+    0x00,0x32,0x48,0x48,0x48,0x48,0x32,0x00,
+    0x00,0x30,0x49,0x4A,0x48,0x48,0x30,0x00,
+    0x00,0x38,0x42,0x41,0x41,0x42,0x38,0x00,
+    0x00,0x38,0x41,0x42,0x40,0x40,0x38,0x00,
+    0x00,0x1A,0xA0,0xA0,0xA0,0xA0,0x7A,0x00,
+    0x00,0x19,0x24,0x42,0x42,0x24,0x19,0x00,
+    0x00,0x3D,0x40,0x40,0x40,0x40,0x3D,0x00,
+    0x00,0x18,0x24,0x24,0xE7,0x24,0x24,0x00,
+    0x00,0x68,0x5E,0x49,0x41,0x42,0x20,0x00,
+    0x00,0x15,0x16,0x7C,0x16,0x15,0x00,0x00,
+    0x81,0xFF,0x85,0x05,0x17,0xFA,0x90,0x50,
+    0x40,0x88,0x88,0x7F,0x09,0x09,0x02,0x00,
+    0x00,0x20,0x54,0x54,0x55,0x79,0x40,0x00,
+};
diff --git a/drivers/displays/smallfonts.h b/drivers/displays/smallfonts.h
new file mode 100644 (file)
index 0000000..e0c2a9f
--- /dev/null
@@ -0,0 +1,68 @@
+/**************************************************************************/
+/*! 
+    @file     smallfonts.h
+    @author   K. Townsend (microBuilder.eu)
+    @date     22 March 2010
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SMALLFONTS_H_
+#define __SMALLFONTS_H_
+
+/* Partially based on original code for the KS0108 by Stephane Rey */
+/* Current version by Kevin Townsend */
+/* Last Updated: 12 May 2009 */
+
+#include "projectconfig.h"
+
+struct FONT_DEF 
+{
+    uint8_t u8Width;           /* Character width for storage         */
+    uint8_t u8Height;          /* Character height for storage        */
+    uint8_t u8FirstChar;     /* The first character available       */
+    uint8_t u8LastChar;      /* The last character available        */
+    const uint8_t *au8FontTable;   /* Font table start address in memory  */
+};
+
+extern const struct FONT_DEF Font_System3x6;
+extern const struct FONT_DEF Font_System5x8;
+extern const struct FONT_DEF Font_System7x8;
+extern const struct FONT_DEF Font_8x8;
+extern const struct FONT_DEF Font_8x8Thin;
+
+extern const uint8_t au8FontSystem3x6[];
+extern const uint8_t au8FontSystem5x8[];
+extern const uint8_t au8FontSystem7x8[];
+extern const uint8_t au8Font8x8[];
+extern const uint8_t au8Font8x8Thin[];
+
+#endif
diff --git a/drivers/displays/tft/bmp.c b/drivers/displays/tft/bmp.c
new file mode 100644 (file)
index 0000000..a378a86
--- /dev/null
@@ -0,0 +1,351 @@
+/**************************************************************************/
+/*! 
+    @file     bmp.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @brief    Loads uncomprssed 24-bit windows bitmaps images
+
+    Based on the information available at:
+    http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/
+    and some sample code written by Michael Sweet
+       
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "bmp.h"
+
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/lcd.h"
+
+// Only include read support if CFG_SDCARD is defined
+#ifdef CFG_SDCARD
+  #include "drivers/fatfs/diskio.h"
+  #include "drivers/fatfs/ff.h"
+  static FATFS Fatfs[1];
+  #if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
+       static FILINFO Finfo;
+       static FIL bmpSDFile;
+  #endif
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Private Methods ------------------------------ */
+/*                                                                        */
+/**************************************************************************/
+bmp_error_t bmpParseBitmap(uint16_t x, uint16_t y, FIL file)
+{
+  UINT              bytesRead;
+  bmp_header_t      header;
+  bmp_infoheader_t  infoHeader;
+
+  // Read the file header
+  // ToDo: Optimise this to read buffer once and parse it
+  f_read(&file, &header.type, sizeof(header.type), &bytesRead);
+  f_read(&file, &header.size, sizeof(header.size), &bytesRead);
+  f_read(&file, &header.reserved1, sizeof(header.reserved1), &bytesRead);
+  f_read(&file, &header.reserved2, sizeof(header.reserved2), &bytesRead);
+  f_read(&file, &header.offset, sizeof(header.offset), &bytesRead);
+
+  // Make sure this is a bitmap (first two bytes = 'BM' or 0x4D42 on little-endian systems)
+  if (header.type != 0x4D42) return BMP_ERROR_NOTABITMAP;
+
+  // Read the info header
+  // ToDo: Optimise this to read buffer once and parse it
+  f_read(&file, &infoHeader.size, sizeof(infoHeader.size), &bytesRead);
+  f_read(&file, &infoHeader.width, sizeof(infoHeader.width), &bytesRead);
+  f_read(&file, &infoHeader.height, sizeof(infoHeader.height), &bytesRead);
+  f_read(&file, &infoHeader.planes, sizeof(infoHeader.planes), &bytesRead);
+  f_read(&file, &infoHeader.bits, sizeof(infoHeader.bits), &bytesRead);
+  f_read(&file, &infoHeader.compression, sizeof(infoHeader.compression), &bytesRead);
+  f_read(&file, &infoHeader.imagesize, sizeof(infoHeader.imagesize), &bytesRead);
+  f_read(&file, &infoHeader.xresolution, sizeof(infoHeader.xresolution), &bytesRead);
+  f_read(&file, &infoHeader.yresolution, sizeof(infoHeader.yresolution), &bytesRead);
+  f_read(&file, &infoHeader.ncolours, sizeof(infoHeader.ncolours), &bytesRead);
+  f_read(&file, &infoHeader.importantcolours, sizeof(infoHeader.importantcolours), &bytesRead);
+
+  // Make sure that this is a 24-bit image
+  if (infoHeader.bits != 24) 
+    return BMP_ERROR_INVALIDBITDEPTH;
+
+  // Check image dimensions
+  if ((infoHeader.width > lcdGetWidth()) | (infoHeader.height > lcdGetHeight()))
+    return BMP_ERROR_INVALIDDIMENSIONS;
+
+  // Make sure image is not compressed
+  if (infoHeader.compression != BMP_COMPRESSION_NONE) 
+    return BMP_ERROR_COMPRESSEDDATA;
+
+  // Read 24-bit image data
+  uint32_t px, py;
+  FRESULT res;
+  uint8_t buffer[infoHeader.width * 3];
+  for (py = infoHeader.height; py > 0; py--)
+  {
+    // Read one row at a time
+    res = f_read(&file, &buffer, infoHeader.width * 3, &bytesRead);
+    if (res || bytesRead == 0)
+    {
+      // Error or EOF
+      return BMP_ERROR_PREMATUREEOF;
+    }
+    for (px = 0; px < infoHeader.width; px++)
+    {
+      // Render pixel
+      // ToDo: This is a brutally slow way of rendering bitmaps ...
+      //        update to pass one row of data at a time
+      drawPixel(x + px, y + py - 1, drawRGB24toRGB565(buffer[(px * 3) + 2], buffer[(px * 3) + 1], buffer[(px * 3)]));
+    }
+  }
+
+  return BMP_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Public Methods ------------------------------- */
+/*                                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Loads a 24-bit Windows bitmap image from an SD card and
+            renders it
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/bmp.h"
+
+    bmp_error_t error;
+
+    // Draw image.bmp (from the root folder) starting at pixel 0,0
+    error = bmpDrawBitmap(0, 0, "/image.bmp");
+
+    // Check 'error' for problems such as BMP_ERROR_FILENOTFOUND
+
+    @endcode
+*/
+/**************************************************************************/
+bmp_error_t bmpDrawBitmap(uint16_t x, uint16_t y, const char* filename)
+{
+  bmp_error_t error = BMP_ERROR_NONE;
+  DSTATUS stat;
+  BYTE res;
+
+  stat = disk_initialize(0);
+
+  if ((stat & STA_NOINIT) || (stat & STA_NODISK))
+  {
+    // Card not initialised or no disk present
+    return BMP_ERROR_SDINITFAIL;
+  }
+
+  if (stat == 0)
+  {
+    // Try to mount drive
+    res = f_mount(0, &Fatfs[0]);
+    if (res != FR_OK) 
+    {
+      // Failed to mount 0:
+      return BMP_ERROR_SDINITFAIL;
+    }
+    if (res == FR_OK)
+    {
+      // Try to open the requested file
+      FIL imgfile;  
+      if(f_open(&imgfile, filename, FA_READ | FA_OPEN_EXISTING) != FR_OK) 
+      {  
+        // Unable to open the requested file
+        return BMP_ERROR_FILENOTFOUND;
+      }
+      // Try to render the specified image
+      error = bmpParseBitmap(x, y, imgfile);
+      // Close file
+      f_close(&imgfile);
+      // Unmount drive
+      f_mount(0,0);
+       // Return results
+      return error;
+    }
+  }
+
+  // Return OK signal
+  return BMP_ERROR_NONE;
+}
+
+#if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
+/**************************************************************************/
+/*!
+    @brief  Writes the contents of the LCD screen to a 24-bit bitmap
+            images.  CFG_SDCARD_READONLY must be set to '0' to be able
+            to use this function.
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/bmp.h"
+
+    bmp_error_t error;
+
+    // Note: The LED stays on while the image is being written since
+    //       it can take quite a while to read the entire screen
+    //       pixel by pixel and write the data to the SD card
+
+    // Turn the LED on to signal busy state
+    gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_ON); 
+    // Write the screen contents to a bitmap image
+    error = bmpSaveScreenshot("capture.bmp");
+    // Turn the LED off to indicate that the capture is complete
+    gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_OFF); 
+
+    // Check 'error' for problems
+
+    @endcode
+*/
+/**************************************************************************/
+bmp_error_t bmpSaveScreenshot(const char* filename)
+{
+  DSTATUS stat;
+  bmp_error_t error = BMP_ERROR_NONE;
+  bmp_header_t header;
+  bmp_infoheader_t infoHeader;
+  uint32_t lcdWidth, lcdHeight, x, y, bgra32;
+  UINT bytesWritten;
+  uint16_t rgb565, eof;
+  uint8_t r, g, b;
+
+  // Create a new file (Crossworks only)
+  stat = disk_initialize(0);
+  if (stat & STA_NOINIT) 
+  {
+    return BMP_ERROR_SDINITFAIL;
+  }
+  if (stat & STA_NODISK) 
+  {
+    return BMP_ERROR_SDINITFAIL;
+  }
+  if (stat == 0)
+  {
+    // SD card sucessfully initialised
+    DSTATUS stat;
+    DWORD p2;
+    WORD w1;
+    BYTE res, b1;
+    DIR dir; 
+    // Try to mount drive
+    res = f_mount(0, &Fatfs[0]);
+    if (res != FR_OK) 
+    {
+      return BMP_ERROR_SDINITFAIL;
+    }
+    if (res == FR_OK)
+    {
+      // Create a file (overwriting any existing file!)
+      if(f_open(&bmpSDFile, filename, FA_READ | FA_WRITE | FA_CREATE_ALWAYS)!=FR_OK) 
+      {  
+        return BMP_ERROR_UNABLETOCREATEFILE; 
+      }
+    }
+  }
+
+  lcdWidth = lcdGetWidth();
+  lcdHeight = lcdGetHeight();
+
+  // Create header
+  header.type = 0x4d42;   // 'BM'
+  header.size = (lcdWidth * lcdHeight * 3) + sizeof(header) + sizeof(infoHeader);   // File size in bytes
+  header.reserved1 = 0;
+  header.reserved2 = 0;
+  header.offset = 0x36;   // Offset in bytes to the image data
+  
+  // Create infoheader
+  infoHeader.size = sizeof(infoHeader);
+  infoHeader.width = lcdWidth;
+  infoHeader.height = lcdHeight;
+  infoHeader.planes = 1;
+  infoHeader.bits = 24;
+  infoHeader.compression = BMP_COMPRESSION_NONE;
+  infoHeader.imagesize = (lcdWidth * lcdHeight * 3) + 2;  // 3 bytes per pixel + 2 bytes for EOF
+  infoHeader.xresolution = 0x0B12;
+  infoHeader.yresolution = 0x0B12;
+  infoHeader.ncolours = 0;
+  infoHeader.importantcolours = 0;
+
+  // Write header to disk
+  f_write(&bmpSDFile, &header.type, sizeof(header.type), &bytesWritten);
+  f_write(&bmpSDFile, &header.size, sizeof(header.size), &bytesWritten);
+  f_write(&bmpSDFile, &header.reserved1, sizeof(header.reserved1), &bytesWritten);
+  f_write(&bmpSDFile, &header.reserved2, sizeof(header.reserved2), &bytesWritten);
+  f_write(&bmpSDFile, &header.offset, sizeof(header.offset), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.size, sizeof(infoHeader.size), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.width, sizeof(infoHeader.width), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.height, sizeof(infoHeader.height), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.planes, sizeof(infoHeader.planes), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.bits, sizeof(infoHeader.bits), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.compression, sizeof(infoHeader.compression), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.imagesize, sizeof(infoHeader.imagesize), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.xresolution, sizeof(infoHeader.xresolution), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.yresolution, sizeof(infoHeader.yresolution), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.ncolours, sizeof(infoHeader.ncolours), &bytesWritten);
+  f_write(&bmpSDFile, &infoHeader.importantcolours, sizeof(infoHeader.importantcolours), &bytesWritten);
+
+  // Write image data to disk (starting from bottom row)
+  for (y = lcdHeight; y != 0; y--)
+  {
+    for (x = 0; x < lcdWidth; x++)
+    {
+      rgb565 = lcdGetPixel(x, y - 1);               // Get RGB565 pixel
+      bgra32 = drawRGB565toBGRA32(rgb565);          // Convert RGB565 to 24-bit color
+      r = (bgra32 & 0x00FF0000) >> 16;
+      g = (bgra32 & 0x0000FF00) >> 8;
+      b = (bgra32 & 0x000000FF);
+      f_write(&bmpSDFile, &b, 1, &bytesWritten);    // Write RGB data
+      f_write(&bmpSDFile, &g, 1, &bytesWritten);
+      f_write(&bmpSDFile, &r, 1, &bytesWritten);
+    }    
+  }
+  
+  // Write EOF (2 bytes)
+  eof = 0x0000;
+  f_write(&bmpSDFile, &eof, 2, &bytesWritten);
+
+  // Close the file
+  f_close(&bmpSDFile);
+
+  // Return OK signal
+  return BMP_ERROR_NONE;
+}
+#endif  // End of read-only check to write bitmaps
+
+#endif  // End of CFG_SDCARD check
diff --git a/drivers/displays/tft/bmp.h b/drivers/displays/tft/bmp.h
new file mode 100644 (file)
index 0000000..f734047
--- /dev/null
@@ -0,0 +1,150 @@
+/**************************************************************************/
+/*! 
+    @file     bmp.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __BMP_H__
+#define __BMP_H__
+
+#include "projectconfig.h"
+
+/**************************************************************************
+    Windows Bitmap File Format
+    -----------------------------------------------------------------------
+    Windows bitmap images are relatively easy to work with because the
+    format is basic and requires limited overhead to work with (in
+    practice, image data is very rarely compressed).  Bitmap files have
+    the following structure:
+
+    --------------------------
+    |          Header        |        14 bytes
+    |-------------------------
+    |        Info Header     |        40 bytes
+    -----------------------
+    |    Palette (optional)  |
+    |-------------------------
+    |       Image Data       |
+    --------------------------
+
+    For more information on the bitmap file format, see:
+    http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/
+
+ **************************************************************************/
+
+
+/**************************************************************************/
+/*!
+    @brief  14-byte Windows bitmap header
+*/
+/**************************************************************************/
+typedef struct 
+{
+  uint16_t type;                      /* Magic identifier            */
+  uint32_t size;                      /* File size in bytes          */
+  uint16_t reserved1;
+  uint16_t reserved2;
+  uint32_t offset;                    /* Offset to image data, bytes */
+} bmp_header_t;
+
+/**************************************************************************/
+/*!
+    @brief  40-byte Windows bitmap info header
+*/
+/**************************************************************************/
+typedef struct 
+{
+  uint32_t size;                      /* Header size in bytes      */
+  int32_t  width;                     /* Width of the image        */
+  int32_t  height;                    /* Height of image           */
+  uint16_t planes;                    /* Number of colour planes   */
+  uint16_t bits;                      /* Bits per pixel            */
+  uint32_t compression;               /* Compression type          */
+  uint32_t imagesize;                 /* Image size in bytes       */
+  int32_t  xresolution;               /* Pixels per meter          */
+  int32_t  yresolution;               /* Pixels per meter          */
+  uint32_t ncolours;                  /* Number of colours         */
+  uint32_t importantcolours;          /* Important colours         */
+} bmp_infoheader_t;
+
+/**************************************************************************/
+/*!
+    @brief  Describes the different compression methods available in
+            Windows bitmap images, though compression is not currently
+            supported by this code.
+*/
+/**************************************************************************/
+typedef enum
+{
+  BMP_COMPRESSION_NONE = 0,
+  BMP_COMPRESSION_RLE8 = 1,
+  BMP_COMPRESSION_RLE4 = 2,
+  BMP_COMPRESSION_RGBMASK = 3
+} bmp_compression_t;
+
+/**************************************************************************/
+/*!
+    @brief  24-bit pixel data
+*/
+/**************************************************************************/
+typedef struct
+{
+  uint8_t rgbBlue;                    /* Blue value */
+  uint8_t rgbGreen;                   /* Green value */
+  uint8_t rgbRed;                     /* Red value */
+} bmp_rgbdata_t;
+
+/**************************************************************************/
+/*!
+    @brief  Error return codes when processing bitmap images
+*/
+/**************************************************************************/
+typedef enum
+{
+  BMP_ERROR_NONE = 0,
+  BMP_ERROR_SDINITFAIL = 1,
+  BMP_ERROR_FILENOTFOUND = 2,
+  BMP_ERROR_UNABLETOCREATEFILE = 3,
+  BMP_ERROR_NOTABITMAP = 10,          /* First two bytes of the image not 'BM' */
+  BMP_ERROR_INVALIDBITDEPTH = 11,     /* Image is not 24-bits */
+  BMP_ERROR_COMPRESSEDDATA = 12,      /* Image contains compressed data (not supported) */
+  BMP_ERROR_INVALIDDIMENSIONS = 13,   /* Image is > CFG_TFTLCD_WIDTH pixels wide or > CFG_TFTLCD_HEIGHT pixels high */
+  BMP_ERROR_PREMATUREEOF = 14         /* EOF reached unexpectedly in pixel data */
+} bmp_error_t;
+
+bmp_error_t bmpDrawBitmap(uint16_t x, uint16_t y, const char* filename);
+
+#if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
+bmp_error_t bmpSaveScreenshot(const char* filename);
+#endif
+
+#endif
diff --git a/drivers/displays/tft/colors.h b/drivers/displays/tft/colors.h
new file mode 100644 (file)
index 0000000..eb39265
--- /dev/null
@@ -0,0 +1,94 @@
+/**************************************************************************/
+/*! 
+    @file     colors.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @brief    Common 16-bit RGB565 color definitions
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __COLORS_H__
+#define __COLORS_H__
+
+#include "projectconfig.h"
+
+// Basic Color definitions
+#define        COLOR_BLACK                         (uint16_t)(0x0000)
+#define        COLOR_BLUE                          (uint16_t)(0x001F)
+#define        COLOR_RED                           (uint16_t)(0xF800)
+#define        COLOR_GREEN                         (uint16_t)(0x07E0)
+#define COLOR_CYAN                          (uint16_t)(0x07FF)
+#define COLOR_MAGENTA                       (uint16_t)(0xF81F)
+#define COLOR_YELLOW                        (uint16_t)(0xFFE0)
+#define COLOR_WHITE                         (uint16_t)(0xFFFF)
+
+// Grayscale Values
+#define COLOR_GRAY_15                       (uint16_t)(0x0861)    //  15  15  15
+#define COLOR_GRAY_30                       (uint16_t)(0x18E3)    //  30  30  30
+#define COLOR_GRAY_50                       (uint16_t)(0x3186)    //  50  50  50
+#define COLOR_GRAY_80                       (uint16_t)(0x528A)    //  80  80  80
+#define COLOR_GRAY_128                      (uint16_t)(0x8410)    // 128 128 128
+#define COLOR_GRAY_200                      (uint16_t)(0xCE59)    // 200 200 200
+#define COLOR_GRAY_225                      (uint16_t)(0xE71C)    // 225 225 225
+
+// Color Palettes
+#define COLOR_THEME_LIMEGREEN_BASE          (uint16_t)(0xD7F0)    // 211 255 130
+#define COLOR_THEME_LIMEGREEN_DARKER        (uint16_t)(0x8DE8)    // 137 188  69
+#define COLOR_THEME_LIMEGREEN_LIGHTER       (uint16_t)(0xEFF9)    // 238 255 207
+#define COLOR_THEME_LIMEGREEN_SHADOW        (uint16_t)(0x73EC)    // 119 127 103
+#define COLOR_THEME_LIMEGREEN_ACCENT        (uint16_t)(0xAE6D)    // 169 204 104
+
+#define COLOR_THEME_VIOLET_BASE             (uint16_t)(0x8AEF)    // 143  94 124
+#define COLOR_THEME_VIOLET_DARKER           (uint16_t)(0x4187)    //  66  49  59
+#define COLOR_THEME_VIOLET_LIGHTER          (uint16_t)(0xC475)    // 194 142 174
+#define COLOR_THEME_VIOLET_SHADOW           (uint16_t)(0x40E6)    //  66  29  52
+#define COLOR_THEME_VIOLET_ACCENT           (uint16_t)(0xC992)    // 204  50 144
+
+#define COLOR_THEME_EARTHY_BASE             (uint16_t)(0x6269)    //  97  79  73
+#define COLOR_THEME_EARTHY_DARKER           (uint16_t)(0x3103)    //  48  35  31
+#define COLOR_THEME_EARTHY_LIGHTER          (uint16_t)(0x8C30)    // 140 135 129
+#define COLOR_THEME_EARTHY_SHADOW           (uint16_t)(0xAB29)    // 173 102  79
+#define COLOR_THEME_EARTHY_ACCENT           (uint16_t)(0xFE77)    // 250 204 188
+
+#define COLOR_THEME_SKYBLUE_BASE            (uint16_t)(0x95BF)    // 150 180 255
+#define COLOR_THEME_SKYBLUE_DARKER          (uint16_t)(0x73B0)    // 113 118 131
+#define COLOR_THEME_SKYBLUE_LIGHTER         (uint16_t)(0xE75F)    // 227 235 255
+#define COLOR_THEME_SKYBLUE_SHADOW          (uint16_t)(0x4ACF)    //  75  90 127
+#define COLOR_THEME_SKYBLUE_ACCENT          (uint16_t)(0xB5F9)    // 182 188 204
+
+// Using these values allows you to update the entire UI color scheme in one location
+#define COLOR_THEME_DEFAULT_BASE            COLOR_THEME_LIMEGREEN_BASE
+#define COLOR_THEME_DEFAULT_DARKER          COLOR_THEME_LIMEGREEN_DARKER
+#define COLOR_THEME_DEFAULT_LIGHTER         COLOR_THEME_LIMEGREEN_LIGHTER
+#define COLOR_THEME_DEFAULT_SHADOW          COLOR_THEME_LIMEGREEN_SHADOW
+#define COLOR_THEME_DEFAULT_ACCENT          COLOR_THEME_LIMEGREEN_ACCENT
+
+#endif
diff --git a/drivers/displays/tft/dialogues/alphanumeric.c b/drivers/displays/tft/dialogues/alphanumeric.c
new file mode 100644 (file)
index 0000000..f2f5d5c
--- /dev/null
@@ -0,0 +1,364 @@
+/**************************************************************************/
+/*! 
+    @file     alphanumeric.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @brief    Shows an alpha-numeric input dialogue
+
+    @section Example
+
+    @code 
+    #include "drivers/displays/tft/dialogues/alphanumeric.h"
+
+    // Print results from an alpha-numeric dialogue
+    char* results = alphaShowDialogue();
+    printf("%s\r\n", results);
+
+    @endcode
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "alphanumeric.h"
+
+#include "core/systick/systick.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/touchscreen.h"
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+
+// Background and text input region colors
+#define ALPHA_COLOR_BACKGROUND    COLOR_GRAY_15
+#define ALPHA_COLOR_INPUTFILL     COLOR_GRAY_30
+#define ALPHA_COLOR_INPUTTEXT     COLOR_WHITE
+// Button colors
+#define ALPHA_COLOR_BTN_BORDER    COLOR_GRAY_30
+#define ALPHA_COLOR_BTN_FILL      COLOR_GRAY_30
+#define ALPHA_COLOR_BTN_FONT      COLOR_WHITE
+// Active button colors
+#define ALPHA_COLOR_BTNEN_BORDER  COLOR_THEME_DEFAULT_DARKER
+#define ALPHA_COLOR_BTNEN_FILL    COLOR_THEME_DEFAULT_BASE
+#define ALPHA_COLOR_BTNEN_FONT    COLOR_BLACK
+
+/* This kind of messes with your head, but defining the pixel locations
+   this way allows the calculator example to be rendered on another
+   TFT LCD with a different screen resolution or orientation without 
+   having to rewrite all the individual pixel-level code                  */
+
+#define ALPHA_BTN_SPACING   (5)
+#define ALPHA_BTN_WIDTH     ((lcdGetWidth() - (ALPHA_BTN_SPACING * 6)) / 5)
+#define ALPHA_KEYPAD_TOP    ((lcdGetHeight() / 7) + (ALPHA_BTN_SPACING * 2))
+#define ALPHA_BTN_HEIGHT    (((lcdGetHeight() - ALPHA_KEYPAD_TOP) - (ALPHA_BTN_SPACING * 7)) / 6)
+// #define ALPHA_BTN_WIDTH     ((240 - (ALPHA_BTN_SPACING * 6)) / 5)
+// #define ALPHA_KEYPAD_TOP    ((320 / 6) + (ALPHA_BTN_SPACING * 2))
+// #define ALPHA_BTN_HEIGHT    (((320 - ALPHA_KEYPAD_TOP) - (ALPHA_BTN_SPACING * 7)) / 6)
+
+/* X/Y positions for buttons */
+#define ALPHA_ROW1_TOP      (ALPHA_KEYPAD_TOP + ALPHA_BTN_SPACING)
+#define ALPHA_ROW2_TOP      (ALPHA_KEYPAD_TOP + ALPHA_BTN_HEIGHT + (ALPHA_BTN_SPACING * 2))
+#define ALPHA_ROW3_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 2) + ((ALPHA_BTN_SPACING) *  3)))
+#define ALPHA_ROW4_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 3) + ((ALPHA_BTN_SPACING) *  4)))
+#define ALPHA_ROW5_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 4) + ((ALPHA_BTN_SPACING) *  5)))
+#define ALPHA_ROW6_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 5) + ((ALPHA_BTN_SPACING) *  6)))
+#define ALPHA_COL1_LEFT     (ALPHA_BTN_SPACING)
+#define ALPHA_COL2_LEFT     ((ALPHA_BTN_SPACING * 2) + ALPHA_BTN_WIDTH)
+#define ALPHA_COL3_LEFT     ((ALPHA_BTN_SPACING * 3) + (ALPHA_BTN_WIDTH * 2))
+#define ALPHA_COL4_LEFT     ((ALPHA_BTN_SPACING * 4) + (ALPHA_BTN_WIDTH * 3))
+#define ALPHA_COL5_LEFT     ((ALPHA_BTN_SPACING * 5) + (ALPHA_BTN_WIDTH * 4))
+
+/* Control which 'page' is currently shown on the keypad */
+static uint8_t alphaPage = 0;
+
+/* Keeps track of the string contents */
+static uint8_t alphaString[80];
+static uint8_t *alphaString_ptr;
+
+/* For quick retrieval of button X/Y locqtions */
+uint32_t alphaBtnX[5], alphaBtnY[6];
+
+/* Array showing which characters should be displayed on each alphaPage */
+/* You can rearrange the keypad by modifying the array contents below   */
+/* --------------------    --------------------   --------------------   --------------------
+    A   B   C   D BACK      a   b   c   d BACK      .   ,   :   ; BACK     7   8   9     BACK
+    E   F   G   H   I       e   f   g   h   i       '   "   (   )          4   5   6            
+    J   K   L   M   N       j   k   l   m   n       ?   !   {   }          7   8   9            
+    O   P   Q   R   S       o   p   q   r   s       #   &   @   ~          .   0  SPC           
+    T   U   V   W SHFT      t   u   v   w SHFT      %   =   /   \  SHFT                  SHFT   
+    X   Y   Z  SPC OK       x   y   z  SPC OK       +   -   _  SPC  OK                    OK      
+   --------------------    --------------------   --------------------   -------------------- */
+char alphaKeys[4][6][5] =  {  {  { 'A', 'B', 'C', 'D', '<' },
+                                 { 'E', 'F', 'G', 'H', 'I' },
+                                 { 'J', 'K', 'L', 'M', 'N' },
+                                 { 'O', 'P', 'Q', 'R', 'S' },
+                                 { 'T', 'U', 'V', 'W', '*' },
+                                 { 'X', 'Y', 'Z', ' ', '>' }   },
+
+                              {  { 'a', 'b', 'c', 'd', '<' }, 
+                                 { 'e', 'f', 'g', 'h', 'i' },
+                                 { 'j', 'k', 'l', 'm', 'n' },
+                                 { 'o', 'p', 'q', 'r', 's' },
+                                 { 't', 'u', 'v', 'w', '*' },
+                                 { 'x', 'y', 'z', ' ', '>' }  },
+
+                              {  { '.', ',', ':', ';', '<' }, 
+                                 { '\'', '\"', '(', ')', ' ' },
+                                 { '?', '!', '{', '}', ' ' },
+                                 { '#', '&', '@', '~', ' ' },
+                                 { '%', '=', '/', '\\', '*' },
+                                 { '+', '-', '_', ' ', '>' }  },
+
+                              {  { '7', '8', '9', ' ', '<' }, 
+                                 { '4', '5', '6', ' ', ' ' },
+                                 { '1', '2', '3', ' ', ' ' },
+                                 { '.', '0', ' ', ' ', ' ' },
+                                 { ' ', ' ', ' ', ' ', '*'},
+                                 { ' ', ' ', ' ', ' ', '>' }  }  };
+
+/**************************************************************************/
+/*! 
+    @brief  Renders the UI
+*/
+/**************************************************************************/
+void alphaRenderButton(uint8_t alphaPage, uint8_t col, uint8_t row, bool selected)
+{
+  // Set colors depending on button state
+  uint16_t border, fill, font;
+  if (selected)
+  {
+    border = ALPHA_COLOR_BTNEN_BORDER;
+    fill = ALPHA_COLOR_BTNEN_FILL;
+    font = ALPHA_COLOR_BTNEN_FONT;
+  }
+  else
+  {
+    border = ALPHA_COLOR_BTN_BORDER;
+    fill = ALPHA_COLOR_BTN_FILL;
+    font = ALPHA_COLOR_BTN_FONT;
+  }
+
+  char c = alphaKeys[alphaPage][row][col];
+  char key[2] = { alphaKeys[alphaPage][row][col], '\0' };
+  // Handle special characters
+  switch (c)
+  {
+    case '<':
+      // Backspace
+      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, NULL); 
+      drawArrow (alphaBtnX[col] + ALPHA_BTN_WIDTH / 2 - 3, alphaBtnY[row] + ALPHA_BTN_HEIGHT / 2, 7, DRAW_DIRECTION_LEFT, font);
+      break;
+    case '*':
+      // Page Shift
+      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, NULL); 
+      drawArrow (alphaBtnX[col] + ALPHA_BTN_WIDTH / 2, (alphaBtnY[row] + ALPHA_BTN_HEIGHT / 2) - 3, 7, DRAW_DIRECTION_UP, font);
+      break;
+    case '>':
+      // OK
+      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, "OK"); 
+      break;
+    default:
+      // Standard character
+      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, key); 
+      break;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders the UI
+*/
+/**************************************************************************/
+void alphaRefreshScreen(void)
+{
+  uint8_t x, y;
+
+  /* Draw keypad */
+  for (y = 0; y < 6; y++)
+  {
+    for (x = 0; x < 5; x++)
+    {
+      alphaRenderButton(alphaPage, x, y, false);
+    }
+  }
+
+  /* Render Text */
+  drawRectangleRounded(ALPHA_BTN_SPACING, ALPHA_BTN_SPACING, lcdGetWidth() - 1 - ALPHA_BTN_SPACING, ALPHA_KEYPAD_TOP - ALPHA_BTN_SPACING, ALPHA_COLOR_INPUTFILL, 10, DRAW_ROUNDEDCORNERS_ALL);
+  drawString(ALPHA_BTN_SPACING * 3, ALPHA_BTN_SPACING * 3, ALPHA_COLOR_INPUTTEXT, &dejaVuSans9ptFontInfo, (char *)&alphaString);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Processes the supplied touch data
+*/
+/**************************************************************************/
+char alphaHandleTouchEvent(void)
+{
+  tsTouchData_t data;
+  char result = '\0';
+  uint8_t row, col;
+  int32_t tsError = -1;
+
+  // Blocking delay until a valid touch event occurs
+  while (tsError)
+  {
+    tsError = tsWaitForEvent(&data, 0);
+  }
+
+  // Attempt to convert touch data to char
+  if ((data.ylcd < ALPHA_ROW1_TOP) || (data.ylcd > ALPHA_ROW6_TOP + ALPHA_BTN_HEIGHT))
+  {
+    return result;
+  }
+
+  // Get column
+  if ((data.xlcd > alphaBtnX[0]) && (data.xlcd < alphaBtnX[0] + ALPHA_BTN_WIDTH))
+    col = 0;
+  else if ((data.xlcd > alphaBtnX[1]) && (data.xlcd < alphaBtnX[1] + ALPHA_BTN_WIDTH))
+    col = 1;
+  else if ((data.xlcd > alphaBtnX[2]) && (data.xlcd < alphaBtnX[2] + ALPHA_BTN_WIDTH))
+    col = 2;
+  else if ((data.xlcd > alphaBtnX[3]) && (data.xlcd < alphaBtnX[3] + ALPHA_BTN_WIDTH))
+    col = 3;
+  else if ((data.xlcd > ALPHA_COL5_LEFT) && (data.xlcd < ALPHA_COL5_LEFT + ALPHA_BTN_WIDTH))
+    col = 4;
+  else
+    return result;
+
+  // Get row
+  if ((data.ylcd > ALPHA_ROW1_TOP) && (data.ylcd < ALPHA_ROW1_TOP + ALPHA_BTN_HEIGHT))
+    row = 0;
+  else if ((data.ylcd > ALPHA_ROW2_TOP) && (data.ylcd < ALPHA_ROW2_TOP + ALPHA_BTN_HEIGHT))
+    row = 1;
+  else if ((data.ylcd > ALPHA_ROW3_TOP) && (data.ylcd < ALPHA_ROW3_TOP + ALPHA_BTN_HEIGHT))
+    row = 2;
+  else if ((data.ylcd > ALPHA_ROW4_TOP) && (data.ylcd < ALPHA_ROW4_TOP + ALPHA_BTN_HEIGHT))
+    row = 3;
+  else if ((data.ylcd > ALPHA_ROW5_TOP) && (data.ylcd < ALPHA_ROW5_TOP + ALPHA_BTN_HEIGHT))
+    row = 4;
+  else if ((data.ylcd > ALPHA_ROW6_TOP) && (data.ylcd < ALPHA_ROW6_TOP + ALPHA_BTN_HEIGHT))
+    row = 5;
+  else
+    return result;
+
+  // Match found ... update button and process the results
+  alphaRenderButton(alphaPage, col, row, true);
+  result = alphaKeys[alphaPage][row][col];
+  
+  if (result == '<')
+  {
+    // Trim character if backspace was pressed
+    if (alphaString_ptr > alphaString)
+    {
+      alphaString_ptr--;
+      *alphaString_ptr = '\0';
+    }
+  }
+  else if (result == '*')
+  {
+    // Switch page if the shift button was pressed
+    alphaPage++;
+    if (alphaPage > 3)
+    {
+      alphaPage = 0;
+    }
+    // Update the UI
+    alphaRefreshScreen();
+  }
+  else if (result == '>')
+  {
+    // OK button
+    systickDelay(CFG_TFTLCD_TS_KEYPADDELAY);
+    return '>';
+  }
+  else
+  {
+    // Add text to string buffer
+    *alphaString_ptr++ = result;
+  }
+
+  // Brief delay
+  systickDelay(CFG_TFTLCD_TS_KEYPADDELAY);
+
+  // Return button to deselected state
+  alphaRefreshScreen();
+  return result;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Displays the dialogue box and waits for valid user input
+
+    @section Example
+
+    @code 
+    #include "drivers/displays/tft/dialogues/alphanumeric.h"
+
+    // Print results from an alpha-numeric dialogue
+    char* results = alphaShowDialogue();
+    printf("%s\r\n", results);
+
+    @endcode
+*/
+/**************************************************************************/
+char* alphaShowDialogue(void)
+{
+  char result;
+
+  /* These need to be instantiated here since the width and height of 
+     the lcd is retrieved dynamically depending on screen orientation */
+  alphaBtnX[0] = ALPHA_COL1_LEFT;
+  alphaBtnX[1] = ALPHA_COL2_LEFT;
+  alphaBtnX[2] = ALPHA_COL3_LEFT;
+  alphaBtnX[3] = ALPHA_COL4_LEFT;
+  alphaBtnX[4] = ALPHA_COL5_LEFT;
+  alphaBtnY[0] = ALPHA_ROW1_TOP;
+  alphaBtnY[1] = ALPHA_ROW2_TOP;
+  alphaBtnY[2] = ALPHA_ROW3_TOP;
+  alphaBtnY[3] = ALPHA_ROW4_TOP;
+  alphaBtnY[4] = ALPHA_ROW5_TOP;
+  alphaBtnY[5] = ALPHA_ROW6_TOP;
+
+  /* Initialise the string buffer */
+  memset(&alphaString[0], 0, sizeof(alphaString));
+  alphaString_ptr = alphaString;
+  alphaPage = 0;
+
+  /* Draw the background and render the buttons */
+  drawFill(ALPHA_COLOR_BACKGROUND);
+  alphaRefreshScreen();
+
+  /* Capture results until the 'OK' button is pressed */
+  while(1)
+  {
+    result = alphaHandleTouchEvent();
+    if (result == '>') return (char *)&alphaString;
+  }
+}
diff --git a/drivers/displays/tft/dialogues/alphanumeric.h b/drivers/displays/tft/dialogues/alphanumeric.h
new file mode 100644 (file)
index 0000000..13353f8
--- /dev/null
@@ -0,0 +1,43 @@
+/**************************************************************************/
+/*! 
+    @file     alphanumeric.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __DIALOGUE_ALPHANUMERIC_H__
+#define __DIALOGUE_ALPHANUMERIC_H__
+
+#include "projectconfig.h"
+
+char * alphaShowDialogue(void);
+
+#endif
diff --git a/drivers/displays/tft/drawing.c b/drivers/displays/tft/drawing.c
new file mode 100644 (file)
index 0000000..5e1f0e9
--- /dev/null
@@ -0,0 +1,1407 @@
+/**************************************************************************/
+/*! 
+    @file     drawing.c
+    @author   K. Townsend (microBuilder.eu)
+
+    drawLine and drawCircle adapted from a tutorial by Leonard McMillan:
+    http://www.cs.unc.edu/~mcmillan/
+
+    drawString based on an example from Eran Duchan:
+    http://www.pavius.net/downloads/tools/53-the-dot-factory
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include <string.h>
+
+#include "drawing.h"
+
+#ifdef CFG_SDCARD
+  #include "bmp.h"
+#endif
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Private Methods ------------------------------ */
+/*                                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Swaps values a and b
+*/
+/**************************************************************************/
+void drawSwap(uint32_t a, uint32_t b)
+{
+  uint32_t t;
+  t = a;
+  a = b;
+  b = t;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a single bitmap character
+*/
+/**************************************************************************/
+void drawCharBitmap(const uint16_t xPixel, const uint16_t yPixel, uint16_t color, const char *glyph, uint8_t cols, uint8_t rows)
+{
+  uint16_t currentY, currentX, indexIntoGlyph;
+  uint16_t _row, _col, _colPages;
+
+  // set initial current y
+  currentY = yPixel;
+  currentX = xPixel;
+
+  // Figure out how many columns worth of data we have
+  if (cols % 8)
+    _colPages = cols / 8 + 1;
+  else
+    _colPages = cols / 8;
+
+  for (_row = 0; _row < rows; _row++)
+  {
+    for (_col = 0; _col < _colPages; _col++)
+    {
+      if (_row == 0)
+        indexIntoGlyph = _col;
+      else
+        indexIntoGlyph = (_row * _colPages) + _col;
+
+      currentY = yPixel + _row;
+      currentX = xPixel + (_col*8);
+      // send the data byte
+      if (glyph[indexIntoGlyph] & (0X80)) drawPixel(currentX, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X40)) drawPixel(currentX+1, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X20)) drawPixel(currentX+2, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X10)) drawPixel(currentX+3, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X08)) drawPixel(currentX+4, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X04)) drawPixel(currentX+5, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X02)) drawPixel(currentX+6, currentY, color);
+      if (glyph[indexIntoGlyph] & (0X01)) drawPixel(currentX+7, currentY, color);
+    }
+  }
+}
+
+#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
+/**************************************************************************/
+/*!
+    @brief  Draws a single smallfont character
+*/
+/**************************************************************************/
+void drawCharSmall(uint16_t x, uint16_t y, uint16_t color, uint8_t c, struct FONT_DEF font)
+{
+  uint8_t col, column[font.u8Width];
+
+  // Check if the requested character is available
+  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
+  {
+    // Retrieve appropriate columns from font data
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
+    }
+  }
+  else
+  {    
+    // Requested character is not available in this font ... send a space instead
+    for (col = 0; col < font.u8Width; col++)
+    {
+      column[col] = 0xFF;    // Send solid space
+    }
+  }
+
+  // Render each column
+  uint16_t xoffset, yoffset;
+  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
+  {
+    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
+    {
+      uint8_t bit = 0x00;
+      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
+      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
+      if (bit)
+      {
+        drawPixel(x + xoffset, y + yoffset, color);
+      }
+    }
+  }
+}
+#endif
+
+/**************************************************************************/
+/*!
+    @brief  Helper method to accurately draw individual circle points
+*/
+/**************************************************************************/
+void drawCirclePoints(int cx, int cy, int x, int y, uint16_t color)
+{    
+  if (x == 0) 
+  {
+      drawPixel(cx, cy + y, color);
+      drawPixel(cx, cy - y, color);
+      drawPixel(cx + y, cy, color);
+      drawPixel(cx - y, cy, color);
+  } 
+  else if (x == y) 
+  {
+      drawPixel(cx + x, cy + y, color);
+      drawPixel(cx - x, cy + y, color);
+      drawPixel(cx + x, cy - y, color);
+      drawPixel(cx - x, cy - y, color);
+  } 
+  else if (x < y) 
+  {
+      drawPixel(cx + x, cy + y, color);
+      drawPixel(cx - x, cy + y, color);
+      drawPixel(cx + x, cy - y, color);
+      drawPixel(cx - x, cy - y, color);
+      drawPixel(cx + y, cy + x, color);
+      drawPixel(cx - y, cy + x, color);
+      drawPixel(cx + y, cy - x, color);
+      drawPixel(cx - y, cy - x, color);
+  }
+}
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Public Methods ------------------------------- */
+/*                                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Draws a single pixel at the specified location
+
+    @param[in]  x
+                Horizontal position
+    @param[in]  y
+                Vertical position
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  if ((x >= lcdGetWidth()) || (y >= lcdGetHeight()))
+  {
+    // Pixel out of range
+    return;
+  }
+
+  // Redirect to LCD
+  lcdDrawPixel(x, y, color);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Fills the screen with the specified color
+
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawFill(uint16_t color)
+{
+  lcdFillRGB(color);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a simple color test pattern
+*/
+/**************************************************************************/
+void drawTestPattern(void)
+{
+  lcdTest();
+}
+
+#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
+/**************************************************************************/
+/*!
+    @brief  Draws a string using a small font (6 of 8 pixels high).
+
+    @param[in]  x
+                Starting x co-ordinate
+    @param[in]  y
+                Starting y co-ordinate
+    @param[in]  color
+                Color to use when rendering the font
+    @param[in]  text
+                The string to render
+    @param[in]  font
+                Pointer to the FONT_DEF to use when drawing the string
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/fonts/smallfonts.h"
+    
+    drawStringSmall(1, 210, COLOR_WHITE, "5x8 System (Max 40 Characters)", Font_System5x8);
+    drawStringSmall(1, 220, COLOR_WHITE, "7x8 System (Max 30 Characters)", Font_System7x8);
+
+    @endcode
+*/
+/**************************************************************************/
+void drawStringSmall(uint16_t x, uint16_t y, uint16_t color, char* text, struct FONT_DEF font)
+{
+  uint8_t l;
+  for (l = 0; l < strlen(text); l++)
+  {
+    drawCharSmall(x + (l * (font.u8Width + 1)), y, color, text[l], font);
+  }
+}
+#endif
+
+/**************************************************************************/
+/*!
+    @brief  Draws a string using the supplied font
+
+    @param[in]  x
+                Starting x co-ordinate
+    @param[in]  y
+                Starting y co-ordinate
+    @param[in]  color
+                Color to use when rendering the font
+    @param[in]  fontInfo
+                Pointer to the FONT_INFO to use when drawing the string
+    @param[in]  str
+                The string to render
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/fonts/dejavusans9.h"
+    
+    drawString(0, 90,  COLOR_BLACK, &dejaVuSans9ptFontInfo, "DejaVu Sans 9");
+    drawString(0, 105, COLOR_BLACK, &dejaVuSans9ptFontInfo, "123456789012345678901234567890");
+
+    @endcode
+*/
+/**************************************************************************/
+void drawString(uint16_t x, uint16_t y, uint16_t color, const FONT_INFO *fontInfo, char *str)
+{
+  uint16_t currentX, charWidth, characterToOutput;
+  const FONT_CHAR_INFO *charInfo;
+  uint16_t charOffset;
+
+  // set current x, y to that of requested
+  currentX = x;
+
+  // while not NULL
+  while (*str != '\0')
+  {
+    // get character to output
+    characterToOutput = *str;
+    
+    // get char info
+    charInfo = fontInfo->charInfo;
+    
+    // some fonts have character descriptors, some don't
+    if (charInfo != NULL)
+    {
+      // get correct char offset
+      charInfo += (characterToOutput - fontInfo->startChar);
+      
+      // get width from char info
+      charWidth = charInfo->widthBits;
+      
+      // get offset from char info
+      charOffset = charInfo->offset;
+    }        
+    else
+    {
+      // if no char info, char width is always 5
+      charWidth = 5;
+      
+      // char offset - assume 5 * letter offset
+      charOffset = (characterToOutput - fontInfo->startChar) * 5;
+    }        
+    
+    // Send individual characters
+    // We need to manually calculate width in pages since this is screwy with variable width fonts
+    //uint8_t heightPages = charWidth % 8 ? charWidth / 8 : charWidth / 8 + 1;
+    drawCharBitmap(currentX, y, color, (const char *)(&fontInfo->data[charOffset]), charWidth, fontInfo->height);
+
+    // next char X
+    currentX += charWidth + 1;
+    
+    // next char
+    str++;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Returns the width in pixels of a string when it is rendered
+
+    This method can be used to determine whether a string will fit
+    inside a specific area, or if it needs to be broken up into multiple
+    lines to be properly rendered on the screen.
+
+    This function only applied to bitmap fonts (which can have variable
+    widths).  All smallfonts (if available) are fixed width and can
+    easily have their width calculated without costly functions like
+    this one.
+
+    @param[in]  fontInfo
+                Pointer to the FONT_INFO for the font that will be used
+    @param[in]  str
+                The string that will be rendered
+*/
+/**************************************************************************/
+uint16_t drawGetStringWidth(const FONT_INFO *fontInfo, char *str)
+{
+  uint16_t width = 0;
+  uint32_t currChar;
+  uint32_t startChar = fontInfo->startChar;
+
+  // until termination
+  for (currChar = *str; currChar; currChar = *(++str))
+  {
+    // if char info exists for the font, use width from there
+    if (fontInfo->charInfo != NULL)
+    {
+      width += fontInfo->charInfo[currChar - startChar].widthBits + 1;
+    }
+    else
+    {
+      width += 5 + 1;
+    }
+  }
+
+  /* return the width */
+  return width > 0 ? width - 1 : width;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a bresenham line
+
+    @param[in]  x0
+                Starting x co-ordinate
+    @param[in]  y0
+                Starting y co-ordinate
+    @param[in]  x1
+                Ending x co-ordinate
+    @param[in]  y1
+                Ending y co-ordinate
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawLine ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color )
+{
+  drawLineDotted(x0, y0, x1, y1, 0, 1, color);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a bresenham line with a fixed pattern of empty
+            and solid pixels
+
+    Based on: http://www.cs.unc.edu/~mcmillan/comp136/Lecture6/Lines.html
+
+    @param[in]  x0
+                Starting x co-ordinate
+    @param[in]  y0
+                Starting y co-ordinate
+    @param[in]  x1
+                Ending x co-ordinate
+    @param[in]  y1
+                Ending y co-ordinate
+    @param[in]  empty
+                The number of 'empty' pixels to render
+    @param[in]  solid
+                The number of 'solid' pixels to render
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawLineDotted ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t empty, uint16_t solid, uint16_t color )
+{
+  if (solid == 0)
+  {
+    return;
+  }
+
+  // If a negative y int was passed in it will overflow to 65K something
+  // Ugly, but drawCircleFilled() can pass in negative values so we need
+  // to check the values here
+  y0 = y0 > 65000 ? 0 : y0;
+  y1 = y1 > 65000 ? 0 : y1;
+
+  // Check if we can use the optimised horizontal line method
+  if ((y0 == y1) && (empty == 0))
+  {
+    lcdDrawHLine(x0, x1, y0, color);
+    return;
+  }
+
+  // Check if we can use the optimised vertical line method.
+  // This can make a huge difference in performance, but may
+  // not work properly on every LCD controller:
+  if ((x0 == x1) && (empty == 0))
+  {
+    // Warning: This may actually be slower than drawing individual pixels on 
+    // short lines ... Set a minimum line size to use the 'optimised' method
+    // (which changes the screen orientation) ?
+    lcdDrawVLine(x0, y0, y1, color);
+    return;
+  }
+
+  // Draw non-horizontal or dotted line
+  int dy = y1 - y0;
+  int dx = x1 - x0;
+  int stepx, stepy;
+  int emptycount, solidcount;
+
+  if (dy < 0) { dy = -dy;  stepy = -1; } else { stepy = 1; }
+  if (dx < 0) { dx = -dx;  stepx = -1; } else { stepx = 1; }
+  dy <<= 1;                               // dy is now 2*dy
+  dx <<= 1;                               // dx is now 2*dx
+
+  emptycount = empty;
+  solidcount = solid;
+
+  drawPixel(x0, y0, color);               // always start with solid pixels
+  solidcount--;
+  if (dx > dy) 
+  {
+    int fraction = dy - (dx >> 1);        // same as 2*dy - dx
+    while (x0 != x1) 
+    {
+      if (fraction >= 0) 
+      {
+        y0 += stepy;
+        fraction -= dx;                   // same as fraction -= 2*dx
+      }
+      x0 += stepx;
+      fraction += dy;                     // same as fraction -= 2*dy
+      if (empty == 0)
+      {
+        // always draw a pixel ... no dotted line requested
+        drawPixel(x0, y0, color);
+      }
+      else if (solidcount)
+      {
+        // Draw solid pxiel and decrement counter
+        drawPixel(x0, y0, color);
+        solidcount--;
+      }
+      else if(emptycount)
+      {
+        // Empty pixel ... don't draw anything an decrement counter
+        emptycount--;
+      }
+      else
+      {
+        // Reset counters and draw solid pixel
+        emptycount = empty;
+        solidcount = solid;
+        drawPixel(x0, y0, color);
+        solidcount--;
+      }
+    }
+  } 
+  else 
+  {
+    int fraction = dx - (dy >> 1);
+    while (y0 != y1) 
+    {
+      if (fraction >= 0) 
+      {
+        x0 += stepx;
+        fraction -= dy;
+      }
+      y0 += stepy;
+      fraction += dx;
+      if (empty == 0)
+      {
+        // always draw a pixel ... no dotted line requested
+        drawPixel(x0, y0, color);
+      }
+      if (solidcount)
+      {
+        // Draw solid pxiel and decrement counter
+        drawPixel(x0, y0, color);
+        solidcount--;
+      }
+      else if(emptycount)
+      {
+        // Empty pixel ... don't draw anything an decrement counter
+        emptycount--;
+      }
+      else
+      {
+        // Reset counters and draw solid pixel
+        emptycount = empty;
+        solidcount = solid;
+        drawPixel(x0, y0, color);
+        solidcount--;
+      }
+    }
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a circle
+
+    Based on: http://www.cs.unc.edu/~mcmillan/comp136/Lecture7/circle.html
+
+    @param[in]  xCenter
+                The horizontal center of the circle
+    @param[in]  yCenter
+                The vertical center of the circle
+    @param[in]  radius
+                The circle's radius in pixels
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawCircle (uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color)
+{
+  int x = 0;
+  int y = radius;
+  int p = (5 - radius*4)/4;
+
+  drawCirclePoints(xCenter, yCenter, x, y, color);
+  while (x < y) 
+  {
+    x++;
+    if (p < 0) 
+    {
+      p += 2*x+1;
+    } 
+    else 
+    {
+      y--;
+      p += 2*(x-y)+1;
+    }
+    drawCirclePoints(xCenter, yCenter, x, y, color);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a filled circle
+
+    @param[in]  xCenter
+                The horizontal center of the circle
+    @param[in]  yCenter
+                The vertical center of the circle
+    @param[in]  radius
+                The circle's radius in pixels
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawCircleFilled (uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color)
+{
+  int16_t f = 1 - radius;
+  int16_t ddF_x = 1;
+  int16_t ddF_y = -2 * radius;
+  int16_t x = 0;
+  int16_t y = radius;
+  int16_t xc_px, yc_my, xc_mx, xc_py, yc_mx, xc_my;
+  int16_t lcdWidth = lcdGetWidth();
+
+  if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter-radius, xCenter, (yCenter-radius) + (2*radius), color);
+  
+  while (x<y) 
+  {
+    if (f >= 0) 
+    {
+      y--;
+      ddF_y += 2;
+      f += ddF_y;
+    }
+    x++;
+    ddF_x += 2;
+    f += ddF_x;
+
+    xc_px = xCenter+x;
+    xc_mx = xCenter-x;
+    xc_py = xCenter+y;
+    xc_my = xCenter-y;
+    yc_mx = yCenter-x;
+    yc_my = yCenter-y;
+
+    // Make sure X positions are not negative or too large or the pixels will
+    // overflow.  Y overflow is handled in drawLine().
+    if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yc_my, xc_px, yc_my + 2*y, color);
+    if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yc_my, xc_mx, yc_my + 2*y, color);
+    if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yc_mx, xc_py, yc_mx + 2*x, color);
+    if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yc_mx, xc_my, yc_mx + 2*x, color);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a filled rounded corner
+
+    @param[in]  xCenter
+                The horizontal center of the circle
+    @param[in]  yCenter
+                The vertical center of the circle
+    @param[in]  radius
+                The circle's radius in pixels
+    @param[in]  position
+                The position of the corner, which affects how it will
+                be rendered
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawCornerFilled (uint16_t xCenter, uint16_t yCenter, uint16_t radius, drawCornerPosition_t position, uint16_t color)
+{
+  int16_t f = 1 - radius;
+  int16_t ddF_x = 1;
+  int16_t ddF_y = -2 * radius;
+  int16_t x = 0;
+  int16_t y = radius;
+  int16_t xc_px, yc_my, xc_mx, xc_py, yc_mx, xc_my;
+  int16_t lcdWidth = lcdGetWidth();
+
+  switch (position)
+  {
+    case DRAW_CORNERPOSITION_TOPRIGHT:
+    case DRAW_CORNERPOSITION_TOPLEFT:
+      if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter-radius, xCenter, yCenter, color);
+      break;
+    case DRAW_CORNERPOSITION_BOTTOMRIGHT:
+    case DRAW_CORNERPOSITION_BOTTOMLEFT:
+      if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter, xCenter, (yCenter-radius) + (2*radius), color);
+      break;
+  }
+  
+  while (x<y) 
+  {
+    if (f >= 0) 
+    {
+      y--;
+      ddF_y += 2;
+      f += ddF_y;
+    }
+    x++;
+    ddF_x += 2;
+    f += ddF_x;
+
+    xc_px = xCenter+x;
+    xc_mx = xCenter-x;
+    xc_py = xCenter+y;
+    xc_my = xCenter-y;
+    yc_mx = yCenter-x;
+    yc_my = yCenter-y;
+
+    switch (position)
+    {
+      case DRAW_CORNERPOSITION_TOPRIGHT:
+        if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yc_my, xc_px, yCenter, color);
+        if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yc_mx, xc_py, yCenter, color);
+        break;
+      case DRAW_CORNERPOSITION_BOTTOMRIGHT:
+        if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yCenter, xc_px, yc_my + 2*y, color);
+        if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yCenter, xc_py, yc_mx + 2*x, color);
+        break;
+      case DRAW_CORNERPOSITION_TOPLEFT:
+        if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yc_my, xc_mx, yCenter, color);
+        if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yc_mx, xc_my, yCenter, color);
+        break;
+      case DRAW_CORNERPOSITION_BOTTOMLEFT:
+        if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yCenter, xc_mx, yc_my + 2*y, color);
+        if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yCenter, xc_my, yc_mx + 2*x, color);
+        break;
+    }
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a simple arrow of the specified width
+
+    @param[in]  x
+                X co-ordinate of the smallest point of the arrow
+    @param[in]  y
+                Y co-ordinate of the smallest point of the arrow
+    @param[in]  size
+                Total width/height of the arrow in pixels
+    @param[in]  direction
+                The direction that the arrow is pointing
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawArrow(uint16_t x, uint16_t y, uint16_t size, drawDirection_t direction, uint16_t color)
+{
+  drawPixel(x, y, color);
+
+  if (size == 1)
+  {
+    return;
+  }
+
+  uint32_t i;
+  switch (direction)
+  {
+    case DRAW_DIRECTION_LEFT:
+      for (i = 1; i<size; i++)
+      {
+        drawLine(x+i, y-i, x+i, y+i, color);
+      }
+      break;
+    case DRAW_DIRECTION_RIGHT:
+      for (i = 1; i<size; i++)
+      {
+        drawLine(x-i, y-i, x-i, y+i, color);
+      }
+      break;
+    case DRAW_DIRECTION_UP:
+      for (i = 1; i<size; i++)
+      {
+        drawLine(x-i, y+i, x+i, y+i, color);
+      }
+      break;
+    case DRAW_DIRECTION_DOWN:
+      for (i = 1; i<size; i++)
+      {
+        drawLine(x-i, y-i, x+i, y-i, color);
+      }
+      break;
+    default:
+      break;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a simple (empty) rectangle
+
+    @param[in]  x0
+                Starting x co-ordinate
+    @param[in]  y0
+                Starting y co-ordinate
+    @param[in]  x1
+                Ending x co-ordinate
+    @param[in]  y1
+                Ending y co-ordinate
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawRectangle ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
+{
+  uint16_t x, y;
+
+  if (y1 < y0)
+  {
+    // Switch y1 and y0
+    y = y1;
+    y1 = y0;
+    y0 = y;
+  }
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  drawLine (x0, y0, x1, y0, color);
+  drawLine (x1, y0, x1, y1, color);
+  drawLine (x1, y1, x0, y1, color);
+  drawLine (x0, y1, x0, y0, color);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a filled rectangle
+
+    @param[in]  x0
+                Starting x co-ordinate
+    @param[in]  y0
+                Starting y co-ordinate
+    @param[in]  x1
+                Ending x co-ordinate
+    @param[in]  y1
+                Ending y co-ordinate
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawRectangleFilled ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
+{
+  int height;
+  uint16_t x, y;
+
+  if (y1 < y0)
+  {
+    // Switch y1 and y0
+    y = y1;
+    y1 = y0;
+    y0 = y;
+  }
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  height = y1 - y0;
+  for (height = y0; y1 > height - 1; ++height)
+  {
+    drawLine(x0, height, x1, height, color);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a filled rectangle with rounded corners
+
+    @param[in]  x0
+                Starting x co-ordinate
+    @param[in]  y0
+                Starting y co-ordinate
+    @param[in]  x1
+                Ending x co-ordinate
+    @param[in]  y1
+                Ending y co-ordinate
+    @param[in]  color
+                Color used when drawing
+    @param[in]  radius
+                Corner radius in pixels
+    @param[in]  corners
+                Which corners to round
+*/
+/**************************************************************************/
+void drawRectangleRounded ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color, uint16_t radius, drawRoundedCorners_t corners )
+{
+  int height;
+  uint16_t y;
+
+  if (corners == DRAW_ROUNDEDCORNERS_NONE)
+  {
+    drawRectangleFilled(x0, y0, x1, y1, color);
+    return;
+  }
+
+  // Calculate height
+  if (y1 < y0)
+  {
+    y = y1;
+    y1 = y0;
+    y0 = y;
+  }
+  height = y1 - y0;
+
+  // Check radius
+  if (radius > height / 2)
+  {
+    radius = height / 2;
+  }
+  radius -= 1;
+
+  // Draw body  
+  drawRectangleFilled(x0 + radius, y0, x1 - radius, y1, color);
+
+  switch (corners)
+  {
+    case DRAW_ROUNDEDCORNERS_ALL:
+      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
+      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
+      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
+      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
+      if (radius*2+1 < height)
+      {
+        drawRectangleFilled(x0, y0 + radius, x0 + radius, y1 - radius, color);
+        drawRectangleFilled(x1 - radius, y0 + radius, x1, y1 - radius, color);
+      }
+      break;
+    case DRAW_ROUNDEDCORNERS_TOP:
+      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
+      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
+      drawRectangleFilled(x0, y0 + radius, x0 + radius, y1, color); 
+      drawRectangleFilled(x1 - radius, y0 + radius, x1, y1, color); 
+      break;
+    case DRAW_ROUNDEDCORNERS_BOTTOM:
+      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
+      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
+      drawRectangleFilled(x0, y0, x0 + radius, y1 - radius, color);
+      drawRectangleFilled(x1 - radius, y0, x1, y1 - radius, color);
+      break;
+    case DRAW_ROUNDEDCORNERS_LEFT:
+      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
+      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
+      if (radius*2+1 < height)
+      {
+        drawRectangleFilled(x0, y0 + radius, x0 + radius, y1 - radius, color);
+      }
+      drawRectangleFilled(x1 - radius, y0, x1, y1, color);
+      break;
+    case DRAW_ROUNDEDCORNERS_RIGHT:
+      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
+      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
+      if (radius*2+1 < height)
+      {
+        drawRectangleFilled(x1 - radius, y0 + radius, x1, y1 - radius, color);
+      }
+      drawRectangleFilled(x0, y0, x0 + radius, y1, color);
+      break;
+    default:
+      break;
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a triangle
+
+    @param[in]  x0
+                x co-ordinate for point 0
+    @param[in]  y0
+                y co-ordinate for point 0
+    @param[in]  x1
+                x co-ordinate for point 1
+    @param[in]  y1
+                y co-ordinate for point 1
+    @param[in]  x2
+                x co-ordinate for point 2
+    @param[in]  y2
+                y co-ordinate for point 2
+    @param[in]  color
+                Color used when drawing
+*/
+/**************************************************************************/
+void drawTriangle ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+  drawLine(x0, y0, x1, y1, color);
+  drawLine(x1, y1, x2, y2, color);
+  drawLine(x2, y2, x0, y0, color);  
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a filled triangle
+
+    @param[in]  x0
+                x co-ordinate for point 0
+    @param[in]  y0
+                y co-ordinate for point 0
+    @param[in]  x1
+                x co-ordinate for point 1
+    @param[in]  y1
+                y co-ordinate for point 1
+    @param[in]  x2
+                x co-ordinate for point 2
+    @param[in]  y2
+                y co-ordinate for point 2
+    @param[in]  color
+                Fill color
+
+    @section Example
+
+    @code
+
+    // Draw a white triangle
+    drawTriangleFilled ( 100, 10, 20, 120, 230, 290, COLOR_WHITE);
+    // Draw black circles at each point of the triangle
+    drawCircleFilled(100, 10, 2, COLOR_BLACK);
+    drawCircleFilled(20, 120, 2, COLOR_BLACK);
+    drawCircleFilled(230, 290, 2, COLOR_BLACK);
+
+    @endcode
+*/
+/**************************************************************************/
+void drawTriangleFilled ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
+{
+  // Re-order vertices by ascending Y values (smallest first)
+  if (y0 > y1) {
+    drawSwap(y0, y1); drawSwap(x0, x1);
+  }
+  if (y1 > y2) {
+    drawSwap(y2, y1); drawSwap(x2, x1);
+  }
+  if (y0 > y1) {
+    drawSwap(y0, y1); drawSwap(x0, x1);
+  }
+
+  int32_t dx1, dx2, dx3;    // Interpolation deltas
+  int32_t sx1, sx2, sy;     // Scanline co-ordinates
+
+  sx1=sx2=x0 * 1000;        // Use fixed point math for x axis values
+  sy=y0;
+
+  // Calculate interpolation deltas
+  if (y1-y0 > 0) dx1=((x1-x0)*1000)/(y1-y0);
+    else dx1=0;
+  if (y2-y0 > 0) dx2=((x2-x0)*1000)/(y2-y0);
+    else dx2=0;
+  if (y2-y1 > 0) dx3=((x2-x1)*1000)/(y2-y1);
+    else dx3=0;
+
+  // Render scanlines (horizontal lines are the fastest rendering method)
+  if (dx1 > dx2) 
+  {
+    for(; sy<=y1; sy++, sx1+=dx2, sx2+=dx1)
+    {
+      drawLine(sx1/1000, sy, sx2/1000, sy, color);
+    }
+    sx2 = x1*1000;
+    sy = y1;
+    for(; sy<=y2; sy++, sx1+=dx2, sx2+=dx3)
+    {
+      drawLine(sx1/1000, sy, sx2/1000, sy, color);
+    }
+  } 
+  else 
+  {
+    for(; sy<=y1; sy++, sx1+=dx1, sx2+=dx2)
+    {
+      drawLine(sx1/1000, sy, sx2/1000, sy, color);
+    }
+    sx1 = x1*1000;
+    sy = y1;
+    for(; sy<=y2; sy++, sx1+=dx3, sx2+=dx2)
+    {
+      drawLine(sx1/1000, sy, sx2/1000, sy, color);
+    }
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Converts a 24-bit RGB color to an equivalent 16-bit RGB565 value
+
+    @param[in]  r
+                8-bit red
+    @param[in]  g
+                8-bit green
+    @param[in]  b
+                8-bit blue
+
+    @section Example
+
+    @code 
+
+    // Get 16-bit equivalent of 24-bit color
+    uint16_t gray = drawRGB24toRGB565(0x33, 0x33, 0x33);
+
+    @endcode
+*/
+/**************************************************************************/
+uint16_t drawRGB24toRGB565(uint8_t r, uint8_t g, uint8_t b)
+{
+  return ((r / 8) << 11) | ((g / 4) << 5) | (b / 8);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Converts a 16-bit RGB565 color to a standard 32-bit BGRA32
+            color (with alpha set to 0xFF)
+
+    @param[in]  color
+                16-bit rgb565 color
+
+    @section Example
+
+    @code 
+
+    // First convert 24-bit color to RGB565
+    uint16_t rgb565 = drawRGB24toRGB565(0xFF, 0x00, 0x00);
+  
+    // Convert RGB565 color back to BGRA32
+    uint32_t bgra32 = drawRGB565toBGRA32(rgb565);
+  
+    // Display results
+    printf("BGRA32: 0x%08X R: %u G: %u B: %u A: %u \r\n", 
+        bgra32, 
+        (bgra32 & 0x000000FF),        // Blue
+        (bgra32 & 0x0000FF00) >> 8,   // Green
+        (bgra32 & 0x00FF0000) >> 16,  // Red
+        (bgra32 & 0xFF000000) >> 24); // Alpha
+
+    @endcode
+*/
+/**************************************************************************/
+uint32_t drawRGB565toBGRA32(uint16_t color)
+{
+  uint32_t bits = (uint32_t)color;
+  uint32_t blue = bits & 0x001F;     // 5 bits blue
+  uint32_t green = bits & 0x07E0;    // 6 bits green
+  uint32_t red = bits & 0xF800;      // 5 bits red
+
+  // Return shifted bits with alpha set to 0xFF
+  return (red << 8) | (green << 5) | (blue << 3) | 0xFF000000;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Reverses a 16-bit color from BGR to RGB
+*/
+/**************************************************************************/
+uint16_t drawBGR2RGB(uint16_t color)
+{   
+  uint16_t r, g, b;   
+   
+  b = (color>>0)  & 0x1f;   
+  g = (color>>5)  & 0x3f;   
+  r = (color>>11) & 0x1f;   
+     
+  return( (b<<11) + (g<<5) + (r<<0) );
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a progress bar with rounded corners
+
+    @param[in]  x
+                Starting x location
+    @param[in]  y
+                Starting y location
+    @param[in]  width
+                Total width of the progress bar in pixels
+    @param[in]  height
+                Total height of the progress bar in pixels
+    @param[in]  borderCorners
+                The type of rounded corners to render with the progress bar border
+    @param[in]  progressCorners
+                The type of rounded corners to render with the inner progress bar
+    @param[in]  borderColor
+                16-bit color for the outer border
+    @param[in]  borderFillColor
+                16-bit color for the interior of the outer border
+    @param[in]  progressBorderColor
+                16-bit color for the progress bar's border
+    @param[in]  progressFillColor
+                16-bit color for the inner bar's fill
+    @param[in]  progress
+                Progress percentage (between 0 and 100)
+
+    @section Example
+
+    @code 
+    #include "drivers/displays/tft/drawing.h"
+
+    // Draw a the progress bar (150x15 pixels large, starting at X:10, Y:195
+    // with rounded corners on the top and showing 72% progress)
+    drawProgressBar(10, 195, 150, 15, DRAW_ROUNDEDCORNERS_TOP, DRAW_ROUNDEDCORNERS_TOP, COLOR_DARKERGRAY, COLOR_DARKGRAY, COLOR_LIMEGREENDIM, COLOR_LIMEGREEN, 72 );
+
+    @endcode
+*/
+/**************************************************************************/
+void drawProgressBar ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, drawRoundedCorners_t borderCorners, drawRoundedCorners_t progressCorners, uint16_t borderColor, uint16_t borderFillColor, uint16_t progressBorderColor, uint16_t progressFillColor, uint8_t progress )
+{
+  // Draw border with rounded corners
+  drawRectangleRounded(x, y, x + width, y + height, borderColor, 5, borderCorners);
+  drawRectangleRounded(x+1, y+1, x + width - 1, y + height - 1, borderFillColor, 5, borderCorners);
+
+  // Progress bar
+  if (progress > 0 && progress <= 100)
+  {
+    // Calculate bar size
+    uint16_t bw;
+    bw = (width - 6);   // bar at 100%
+    if (progress != 100)
+    {
+      bw = (bw * progress) / 100;
+    } 
+    drawRectangleRounded(x + 3, y + 3, bw + x + 3, y + height - 3, progressBorderColor, 5, progressCorners);
+    drawRectangleRounded(x + 4, y + 4, bw + x + 3 - 1, y + height - 4, progressFillColor, 5, progressCorners);
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Draws a simple button
+
+    @param[in]  x
+                Starting x location
+    @param[in]  y
+                Starting y location
+    @param[in]  width
+                Total width of the button in pixels
+    @param[in]  height
+                Total height of the button in pixels
+    @param[in]  fontInfo
+                Pointer to the FONT_INFO used to render the button text
+    @param[in]  fontHeight
+                The height in pixels of the font (used for centering)
+    @param[in]  borderclr
+                The rgb565 border color
+    @param[in]  fillclr
+                The rgb565 background color
+    @param[in]  fontclr
+                The rgb565 font color
+    @param[in]  text
+                The text to render on the button
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/drawing.h"  
+    #include "drivers/displays/tft/fonts/dejavusans9.h"
+
+    // Draw two buttons using Vera Sans Bold 9
+    drawButton(20, 195, 200, 35, &dejaVuSans9ptFontInfo, 7, COLOR_GRAY_80, COLOR_GRAY_80, COLOR_WHITE, "System Settings");
+    drawButton(20, 235, 200, 35, &dejaVuSans9ptFontInfo, 7, COLOR_THEME_LIMEGREEN_DARKER, COLOR_THEME_LIMEGREEN_BASE, COLOR_BLACK, "System Settings");
+
+    @endcode
+*/
+/**************************************************************************/
+void drawButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const FONT_INFO *fontInfo, uint16_t fontHeight, uint16_t borderclr, uint16_t fillclr, uint16_t fontclr, char* text)
+{
+  // Border
+  drawRectangleRounded(x, y, x + width, y + height, borderclr, 5, DRAW_ROUNDEDCORNERS_ALL);
+  // Fill
+  drawRectangleRounded(x+2, y+2, x+width-2, y+height-2, fillclr, 5, DRAW_ROUNDEDCORNERS_ALL);
+
+  // Render text
+  if (text != NULL)
+  {
+    uint16_t textWidth = drawGetStringWidth(&*fontInfo, text);
+    uint16_t xStart = x + (width / 2) - (textWidth / 2);
+    uint16_t yStart = y + (height / 2) - (fontHeight / 2) + 1;
+    drawString(xStart, yStart, fontclr, &*fontInfo, text);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a 16x16 monochrome icon using the supplied uint16_t
+            array.
+
+    @param[in]  x
+                The horizontal location to start rendering from
+    @param[in]  x
+                The vertical location to start rendering from
+    @param[in]  color
+                The RGB565 color to use when rendering the icon
+    @param[in]  icon
+                The uint16_t array containing the 16x16 image data
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/drawing.h"  
+    #include "drivers/displays/icons16.h"
+
+    // Renders the info icon, which has two seperate parts ... the exterior
+    // and a seperate interior mask if you want to fill the contents with a
+    // different color
+    drawIcon16(132, 202, COLOR_BLUE, icons16_info);
+    drawIcon16(132, 202, COLOR_WHITE, icons16_info_interior);
+
+    @endcode
+*/
+/**************************************************************************/
+void drawIcon16(uint16_t x, uint16_t y, uint16_t color, uint16_t icon[])
+{
+  int i;
+  for (i = 0; i<16; i++)
+  {
+    if (icon[i] & (0X8000)) drawPixel(x, y+i, color);
+    if (icon[i] & (0X4000)) drawPixel(x+1, y+i, color);
+    if (icon[i] & (0X2000)) drawPixel(x+2, y+i, color);
+    if (icon[i] & (0X1000)) drawPixel(x+3, y+i, color);
+    if (icon[i] & (0X0800)) drawPixel(x+4, y+i, color);
+    if (icon[i] & (0X0400)) drawPixel(x+5, y+i, color);
+    if (icon[i] & (0X0200)) drawPixel(x+6, y+i, color);
+    if (icon[i] & (0X0100)) drawPixel(x+7, y+i, color);
+    if (icon[i] & (0X0080)) drawPixel(x+8, y+i, color);
+    if (icon[i] & (0x0040)) drawPixel(x+9, y+i, color);
+    if (icon[i] & (0X0020)) drawPixel(x+10, y+i, color);
+    if (icon[i] & (0X0010)) drawPixel(x+11, y+i, color);
+    if (icon[i] & (0X0008)) drawPixel(x+12, y+i, color);
+    if (icon[i] & (0X0004)) drawPixel(x+13, y+i, color);
+    if (icon[i] & (0X0002)) drawPixel(x+14, y+i, color);
+    if (icon[i] & (0X0001)) drawPixel(x+15, y+i, color);
+  }
+}
+
+#ifdef CFG_SDCARD
+/**************************************************************************/
+/*!
+    @brief  Loads a 24-bit Windows bitmap image from an SD card and
+            renders it
+
+    @section Example
+
+    @code 
+
+    #include "drivers/displays/tft/drawing.h"
+
+    // Draw image.bmp (from the root folder) starting at pixel 0,0
+    bmp_error_t error = drawBitmapImage(0, 0, "/image.bmp");
+
+    if (error)
+    {
+      switch (error)
+      {
+        case BMP_ERROR_SDINITFAIL:
+          break;
+        case BMP_ERROR_FILENOTFOUND:
+          break;
+        case BMP_ERROR_NOTABITMAP:
+          // First two bytes of image not 'BM'
+          break;
+        case BMP_ERROR_INVALIDBITDEPTH:
+          // Image is not 24-bits
+          break;
+        case BMP_ERROR_COMPRESSEDDATA:
+          // Image contains compressed data
+          break;
+        case BMP_ERROR_INVALIDDIMENSIONS:
+          // Width or Height is > LCD size
+          break;
+        case BMP_ERROR_PREMATUREEOF:
+          // EOF unexpectedly reached in pixel data
+          break;
+      }
+    }
+        
+    @endcode
+*/
+/**************************************************************************/
+bmp_error_t drawBitmapImage(uint16_t x, uint16_t y, char *filename)
+{
+  return bmpDrawBitmap(x, y, filename);
+}
+
+#endif
diff --git a/drivers/displays/tft/drawing.h b/drivers/displays/tft/drawing.h
new file mode 100644 (file)
index 0000000..188686a
--- /dev/null
@@ -0,0 +1,118 @@
+/**************************************************************************/
+/*! 
+    @file     drawing.h
+    @author   K. Townsend (microBuilder.eu)
+    @date     22 March 2010
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __DRAWING_H__
+#define __DRAWING_H__
+
+#include "projectconfig.h"
+#include "lcd.h"
+#include "colors.h"
+#include "drivers/displays/tft/fonts/bitmapfonts.h"
+
+#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
+  #include "drivers/displays/smallfonts.h"
+#endif
+
+#ifdef CFG_SDCARD
+  #include "bmp.h"
+#endif
+
+typedef struct
+{
+  uint8_t red;
+  uint8_t green;
+  uint8_t blue;
+} drawColorRGB24_t;
+
+typedef enum
+{
+  DRAW_ROUNDEDCORNERS_NONE    = 0,
+  DRAW_ROUNDEDCORNERS_ALL     = 1,
+  DRAW_ROUNDEDCORNERS_TOP     = 2,
+  DRAW_ROUNDEDCORNERS_BOTTOM  = 3,
+  DRAW_ROUNDEDCORNERS_LEFT    = 4,
+  DRAW_ROUNDEDCORNERS_RIGHT   = 5
+} drawRoundedCorners_t;
+
+typedef enum
+{
+  DRAW_CORNERPOSITION_TOPLEFT     = 0,
+  DRAW_CORNERPOSITION_TOPRIGHT    = 1,
+  DRAW_CORNERPOSITION_BOTTOMLEFT  = 2,
+  DRAW_CORNERPOSITION_BOTTOMRIGHT = 3
+} drawCornerPosition_t;
+
+typedef enum
+{
+  DRAW_DIRECTION_LEFT,
+  DRAW_DIRECTION_RIGHT,
+  DRAW_DIRECTION_UP,
+  DRAW_DIRECTION_DOWN
+} drawDirection_t;
+
+void      drawTestPattern      ( void );
+void      drawPixel            ( uint16_t x, uint16_t y, uint16_t color );
+void      drawFill             ( uint16_t color );
+void      drawLine             ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
+void      drawLineDotted       ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t space, uint16_t solid, uint16_t color );
+void      drawCircle           ( uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color );
+void      drawCircleFilled     ( uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color );
+void      drawCornerFilled     (uint16_t xCenter, uint16_t yCenter, uint16_t radius, drawCornerPosition_t position, uint16_t color);
+void      drawArrow            ( uint16_t x, uint16_t y, uint16_t size, drawDirection_t, uint16_t color );
+void      drawRectangle        ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
+void      drawRectangleFilled  ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
+void      drawRectangleRounded ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color, uint16_t radius, drawRoundedCorners_t corners );
+void      drawTriangle         ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void      drawTriangleFilled   ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
+void      drawString           ( uint16_t x, uint16_t y, uint16_t color, const FONT_INFO *fontInfo, char *str );
+uint16_t  drawGetStringWidth   ( const FONT_INFO *fontInfo, char *str );
+void      drawProgressBar      ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, drawRoundedCorners_t borderCorners, drawRoundedCorners_t progressCorners, uint16_t borderColor, uint16_t borderFillColor, uint16_t progressBorderColor, uint16_t progressFillColor, uint8_t progress );
+void      drawButton           ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, const FONT_INFO *fontInfo, uint16_t fontHeight, uint16_t borderclr, uint16_t fillclr, uint16_t fontclr, char* text );
+void      drawIcon16           ( uint16_t x, uint16_t y, uint16_t color, uint16_t icon[] );
+uint16_t  drawRGB24toRGB565    ( uint8_t r, uint8_t g, uint8_t b );
+uint32_t  drawRGB565toBGRA32   ( uint16_t color );
+uint16_t  drawBGR2RGB          ( uint16_t color );
+
+#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
+void      drawStringSmall      ( uint16_t x, uint16_t y, uint16_t color, char* text, struct FONT_DEF font );
+#endif
+
+#if defined CFG_SDCARD
+bmp_error_t   drawBitmapImage  ( uint16_t x, uint16_t y, char *filename );
+#endif
+
+#endif
diff --git a/drivers/displays/tft/fonts/bitmapfonts.h b/drivers/displays/tft/fonts/bitmapfonts.h
new file mode 100644 (file)
index 0000000..68f234d
--- /dev/null
@@ -0,0 +1,68 @@
+/**************************************************************************/
+/*! 
+    @file     bitmapfonts.h
+    @author   K. Townsend (microBuilder.eu)
+    @date     22 March 2010
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __BITMAPFONTS_H__
+#define __BITMAPFONTS_H__
+
+#include "projectconfig.h"
+
+/**************************************************************************/
+/*! 
+    @brief Describes a single character's display information
+*/
+/**************************************************************************/
+typedef struct
+{
+  const uint8_t widthBits;              // width, in bits (or pixels), of the character
+  const uint16_t offset;                // offset of the character's bitmap, in bytes, into the the FONT_INFO's data array
+} FONT_CHAR_INFO;      
+
+/**************************************************************************/
+/*! 
+    @brief Describes a single font
+*/
+/**************************************************************************/
+typedef struct
+{
+  const uint8_t           height;       // height of the font's characters
+  const uint8_t           startChar;    // the first character in the font (e.g. in charInfo and data)
+  const uint8_t           endChar;      // the last character in the font (e.g. in charInfo and data)
+  const FONT_CHAR_INFO*          charInfo;     // pointer to array of char information
+  const uint8_t*          data;         // pointer to generated array of character visual representation
+} FONT_INFO;
+
+#endif
diff --git a/drivers/displays/tft/fonts/dejavusans9.c b/drivers/displays/tft/fonts/dejavusans9.c
new file mode 100644 (file)
index 0000000..1c5210b
--- /dev/null
@@ -0,0 +1,1545 @@
+#include "dejavusans9.h"
+
+/* 
+**  Font data for DejaVu Sans 9pt
+*/
+
+/* Character bitmaps for DejaVu Sans 9pt */
+const uint8_t dejaVuSans9ptBitmaps[] = 
+{
+       /* @0 ' ' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @13 '!' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @26 '"' (3 pixels wide) */
+       0x00, /*          */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @39 '#' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x12, /*    #  #  */
+       0x14, /*    # #   */
+       0x7F, /*  ####### */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0xFE, /* #######  */
+       0x28, /*   # #    */
+       0x48, /*  #  #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @52 '$' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x70, /*  ###     */
+       0xA8, /* # # #    */
+       0xA0, /* # #      */
+       0xE0, /* ###      */
+       0x38, /*   ###    */
+       0x28, /*   # #    */
+       0xA8, /* # # #    */
+       0x70, /*  ###     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+
+       /* @65 '%' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x61, 0x00, /*  ##    #         */
+       0x92, 0x00, /* #  #  #          */
+       0x92, 0x00, /* #  #  #          */
+       0x94, 0x00, /* #  # #           */
+       0x6D, 0x80, /*  ## ## ##        */
+       0x0A, 0x40, /*     # #  #       */
+       0x12, 0x40, /*    #  #  #       */
+       0x12, 0x40, /*    #  #  #       */
+       0x21, 0x80, /*   #    ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @91 '&' (8 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x48, /*  #  #    */
+       0x40, /*  #       */
+       0x60, /*  ##      */
+       0x51, /*  # #   # */
+       0x89, /* #   #  # */
+       0x86, /* #    ##  */
+       0xC4, /* ##   #   */
+       0x7B, /*  #### ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @104 ''' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @117 '(' (3 pixels wide) */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @130 ')' (3 pixels wide) */
+       0xC0, /* ##       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @143 '*' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0xA8, /* # # #    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0xA8, /* # # #    */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @156 '+' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @169 ',' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @182 '-' (3 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @195 '.' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @208 '/' (4 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @221 '0' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x48, /*  #  #    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x48, /*  #  #    */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @234 '1' (5 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @247 '2' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x8C, /* #   ##   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @260 '3' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x38, /*   ###    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @273 '4' (6 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x28, /*   # #    */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x88, /* #   #    */
+       0xFC, /* ######   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @286 '5' (6 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x0C, /*     ##   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x8C, /* #   ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @299 '6' (6 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x80, /* #        */
+       0xB8, /* # ###    */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x4C, /*  #  ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 '7' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @325 '8' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @338 '9' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0xC8, /* ##  #    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0x74, /*  ### #   */
+       0x04, /*      #   */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @351 ':' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @364 ';' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @377 '<' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x03, /*       ## */
+       0x1E, /*    ####  */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0x1E, /*    ####  */
+       0x03, /*       ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @390 '=' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @403 '>' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x78, /*  ####    */
+       0x07, /*      ### */
+       0x07, /*      ### */
+       0x78, /*  ####    */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @416 '?' (5 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @429 '@' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1F, 0x00, /*    #####         */
+       0x20, 0xC0, /*   #     ##       */
+       0x40, 0x40, /*  #       #       */
+       0x8F, 0x20, /* #   ####  #      */
+       0x91, 0x20, /* #  #   #  #      */
+       0x91, 0x20, /* #  #   #  #      */
+       0x91, 0x40, /* #  #   # #       */
+       0x8F, 0x80, /* #   #####        */
+       0x40, 0x00, /*  #               */
+       0x20, 0x80, /*   #     #        */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+
+       /* @455 'A' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x42, /*  #    #  */
+       0x7E, /*  ######  */
+       0x42, /*  #    #  */
+       0x81, /* #      # */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @468 'B' (6 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @481 'C' (6 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @494 'D' (7 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @507 'E' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @520 'F' (5 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @533 'G' (7 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x8E, /* #   ###  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @546 'H' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0xFE, /* #######  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @559 'I' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @572 'J' (3 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @585 'K' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @598 'L' (5 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @611 'M' (8 pixels wide) */
+       0x00, /*          */
+       0x81, /* #      # */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xA5, /* # #  # # */
+       0xA5, /* # #  # # */
+       0x99, /* #  ##  # */
+       0x99, /* #  ##  # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @624 'N' (7 pixels wide) */
+       0x00, /*          */
+       0xC2, /* ##    #  */
+       0xC2, /* ##    #  */
+       0xA2, /* # #   #  */
+       0xA2, /* # #   #  */
+       0x92, /* #  #  #  */
+       0x8A, /* #   # #  */
+       0x8A, /* #   # #  */
+       0x86, /* #    ##  */
+       0x86, /* #    ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @637 'O' (7 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @650 'P' (6 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @663 'Q' (7 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x08, /*     #    */
+       0x04, /*      #   */
+       0x00, /*          */
+
+       /* @676 'R' (7 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @689 'S' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x80, /* #        */
+       0xC0, /* ##       */
+       0x78, /*  ####    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @702 'T' (7 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @715 'U' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0xC6, /* ##   ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @728 'V' (8 pixels wide) */
+       0x00, /*          */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @741 'W' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x84, 0x20, /* #    #    #      */
+       0x44, 0x40, /*  #   #   #       */
+       0x44, 0x40, /*  #   #   #       */
+       0x4A, 0x40, /*  #  # #  #       */
+       0x2A, 0x80, /*   # # # #        */
+       0x2A, 0x80, /*   # # # #        */
+       0x2A, 0x80, /*   # # # #        */
+       0x11, 0x00, /*    #   #         */
+       0x11, 0x00, /*    #   #         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @767 'X' (7 pixels wide) */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0x44, /*  #   #   */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x44, /*  #   #   */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @780 'Y' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @793 'Z' (7 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x02, /*       #  */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @806 '[' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @819 '\' (4 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @832 ']' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @845 '^' (6 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x48, /*  #  #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @858 '_' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+
+       /* @871 '`' (2 pixels wide) */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @884 'a' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x04, /*      #   */
+       0x7C, /*  #####   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @897 'b' (6 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @910 'c' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0xC8, /* ##  #    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xC8, /* ##  #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @923 'd' (6 pixels wide) */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x7C, /*  #####   */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @936 'e' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0xC4, /* ##   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @949 'f' (4 pixels wide) */
+       0x30, /*   ##     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xF0, /* ####     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @962 'g' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0x7C, /*  #####   */
+       0x04, /*      #   */
+       0x4C, /*  #  ##   */
+       0x38, /*   ###    */
+
+       /* @975 'h' (6 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @988 'i' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1001 'j' (2 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+
+       /* @1014 'k' (5 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1027 'l' (1 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1040 'm' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF7, 0x00, /* #### ###         */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1066 'n' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1079 'o' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 'p' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1105 'q' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xCC, /* ##  ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xCC, /* ##  ##   */
+       0x7C, /*  #####   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+
+       /* @1118 'r' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB0, /* # ##     */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1131 's' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x80, /* #        */
+       0x70, /*  ###     */
+       0x08, /*     #    */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1144 't' (4 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xF0, /* ####     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1157 'u' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1170 'v' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1183 'w' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x55, 0x00, /*  # # # #         */
+       0x55, 0x00, /*  # # # #         */
+       0x55, 0x00, /*  # # # #         */
+       0x22, 0x00, /*   #   #          */
+       0x22, 0x00, /*   #   #          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1209 'x' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x30, /*   ##     */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1222 'y' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x28, /*   # #    */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+
+       /* @1235 'z' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1248 '{' (5 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x38, /*   ###    */
+       0x00, /*          */
+
+       /* @1261 '|' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1274 '}' (5 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xE0, /* ###      */
+       0x00, /*          */
+
+       /* @1287 '~' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x71, /*  ###   # */
+       0x8E, /* #   ###  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for DejaVu Sans 9pt */
+/* { [Char width in bits], [Offset into dejaVuSans9ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO dejaVuSans9ptDescriptors[] = 
+{
+       {5, 0},                 /*   */ 
+       {1, 13},                /* ! */ 
+       {3, 26},                /* " */ 
+       {8, 39},                /* # */ 
+       {5, 52},                /* $ */ 
+       {10, 65},               /* % */ 
+       {8, 91},                /* & */ 
+       {1, 104},               /* ' */ 
+       {3, 117},               /* ( */ 
+       {3, 130},               /* ) */ 
+       {5, 143},               /* * */ 
+       {7, 156},               /* + */ 
+       {1, 169},               /* , */ 
+       {3, 182},               /* - */ 
+       {1, 195},               /* . */ 
+       {4, 208},               /* / */ 
+       {6, 221},               /* 0 */ 
+       {5, 234},               /* 1 */ 
+       {6, 247},               /* 2 */ 
+       {6, 260},               /* 3 */ 
+       {6, 273},               /* 4 */ 
+       {6, 286},               /* 5 */ 
+       {6, 299},               /* 6 */ 
+       {6, 312},               /* 7 */ 
+       {6, 325},               /* 8 */ 
+       {6, 338},               /* 9 */ 
+       {1, 351},               /* : */ 
+       {1, 364},               /* ; */ 
+       {8, 377},               /* < */ 
+       {8, 390},               /* = */ 
+       {8, 403},               /* > */ 
+       {5, 416},               /* ? */ 
+       {11, 429},              /* @ */ 
+       {8, 455},               /* A */ 
+       {6, 468},               /* B */ 
+       {6, 481},               /* C */ 
+       {7, 494},               /* D */ 
+       {6, 507},               /* E */ 
+       {5, 520},               /* F */ 
+       {7, 533},               /* G */ 
+       {7, 546},               /* H */ 
+       {1, 559},               /* I */ 
+       {3, 572},               /* J */ 
+       {6, 585},               /* K */ 
+       {5, 598},               /* L */ 
+       {8, 611},               /* M */ 
+       {7, 624},               /* N */ 
+       {7, 637},               /* O */ 
+       {6, 650},               /* P */ 
+       {7, 663},               /* Q */ 
+       {7, 676},               /* R */ 
+       {6, 689},               /* S */ 
+       {7, 702},               /* T */ 
+       {7, 715},               /* U */ 
+       {8, 728},               /* V */ 
+       {11, 741},              /* W */ 
+       {7, 767},               /* X */ 
+       {7, 780},               /* Y */ 
+       {7, 793},               /* Z */ 
+       {2, 806},               /* [ */ 
+       {4, 819},               /* \ */ 
+       {2, 832},               /* ] */ 
+       {6, 845},               /* ^ */ 
+       {6, 858},               /* _ */ 
+       {2, 871},               /* ` */ 
+       {6, 884},               /* a */ 
+       {6, 897},               /* b */ 
+       {5, 910},               /* c */ 
+       {6, 923},               /* d */ 
+       {6, 936},               /* e */ 
+       {4, 949},               /* f */ 
+       {6, 962},               /* g */ 
+       {6, 975},               /* h */ 
+       {1, 988},               /* i */ 
+       {2, 1001},              /* j */ 
+       {5, 1014},              /* k */ 
+       {1, 1027},              /* l */ 
+       {9, 1040},              /* m */ 
+       {6, 1066},              /* n */ 
+       {6, 1079},              /* o */ 
+       {6, 1092},              /* p */ 
+       {6, 1105},              /* q */ 
+       {4, 1118},              /* r */ 
+       {5, 1131},              /* s */ 
+       {4, 1144},              /* t */ 
+       {6, 1157},              /* u */ 
+       {6, 1170},              /* v */ 
+       {9, 1183},              /* w */ 
+       {6, 1209},              /* x */ 
+       {6, 1222},              /* y */ 
+       {5, 1235},              /* z */ 
+       {5, 1248},              /* { */ 
+       {1, 1261},              /* | */ 
+       {5, 1274},              /* } */ 
+       {8, 1287},              /* ~ */ 
+};
+
+/* Font information for DejaVu Sans 9pt */
+const FONT_INFO dejaVuSans9ptFontInfo =
+{
+       13, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       dejaVuSans9ptDescriptors, /*  Character descriptor array */
+       dejaVuSans9ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/dejavusans9.h b/drivers/displays/tft/fonts/dejavusans9.h
new file mode 100644 (file)
index 0000000..c5f4af0
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __DEJA_VU_SANS_9__
+#define __DEJA_VU_SANS_9__
+
+#include "bitmapfonts.h"
+
+extern const uint8_t dejaVuSans9ptCharBitmaps[];
+extern const FONT_CHAR_INFO dejaVuSans9ptCharDescriptors[];
+extern const FONT_INFO dejaVuSans9ptFontInfo;
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/dejavusansbold9.c b/drivers/displays/tft/fonts/dejavusansbold9.c
new file mode 100644 (file)
index 0000000..bd18637
--- /dev/null
@@ -0,0 +1,1545 @@
+#include "dejavusansbold9.h"
+
+/* 
+**  Font data for DejaVu Sans Bold 9pt
+*/
+
+/* Character bitmaps for DejaVu Sans Bold 9pt */
+const uint8_t dejaVuSansBold9ptBitmaps[] = 
+{
+       /* @0 ' ' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @13 '!' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @26 '"' (3 pixels wide) */
+       0x00, /*          */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @39 '#' (8 pixels wide) */
+       0x00, /*          */
+       0x12, /*    #  #  */
+       0x16, /*    # ##  */
+       0x7F, /*  ####### */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0xFE, /* #######  */
+       0x68, /*  ## #    */
+       0x68, /*  ## #    */
+       0x48, /*  #  #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @52 '$' (7 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0xD0, /* ## #     */
+       0xF0, /* ####     */
+       0xFC, /* ######   */
+       0x7E, /*  ######  */
+       0x1E, /*    ####  */
+       0x16, /*    # ##  */
+       0xFC, /* ######   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+
+       /* @65 '%' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x71, 0x00, /*  ###   #         */
+       0x89, 0x00, /* #   #  #         */
+       0x8A, 0x00, /* #   # #          */
+       0x8E, 0x00, /* #   ###          */
+       0x75, 0xC0, /*  ### # ###       */
+       0x0E, 0x20, /*     ###   #      */
+       0x0A, 0x20, /*     # #   #      */
+       0x12, 0x20, /*    #  #   #      */
+       0x11, 0xC0, /*    #   ###       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @91 '&' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x38, 0x00, /*   ###            */
+       0x64, 0x00, /*  ##  #           */
+       0x60, 0x00, /*  ##              */
+       0x30, 0x00, /*   ##             */
+       0x79, 0x80, /*  ####  ##        */
+       0xDD, 0x80, /* ## ### ##        */
+       0xCF, 0x00, /* ##  ####         */
+       0xC7, 0x00, /* ##   ###         */
+       0x7D, 0x80, /*  ##### ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @117 ''' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @130 '(' (4 pixels wide) */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @143 ')' (4 pixels wide) */
+       0xE0, /* ###      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @156 '*' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0xA8, /* # # #    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0xA8, /* # # #    */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @169 '+' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @182 ',' (3 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x00, /*          */
+
+       /* @195 '-' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @208 '.' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @221 '/' (4 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @234 '0' (7 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x6C, /*  ## ##   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x6C, /*  ## ##   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @247 '1' (6 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @260 '2' (7 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x86, /* #    ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @273 '3' (7 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x86, /* #    ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x3C, /*   ####   */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x86, /* #    ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @286 '4' (7 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x3C, /*   ####   */
+       0x2C, /*   # ##   */
+       0x4C, /*  #  ##   */
+       0xCC, /* ##  ##   */
+       0x8C, /* #   ##   */
+       0xFE, /* #######  */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @299 '5' (7 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0x0E, /*     ###  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x0E, /*     ###  */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 '6' (7 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x46, /*  #   ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @325 '7' (7 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @338 '8' (7 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x38, /*   ###    */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @351 '9' (7 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0xC4, /* ##   #   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @364 ':' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @377 ';' (3 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x00, /*          */
+
+       /* @390 '<' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x01, /*        # */
+       0x0F, /*     #### */
+       0x78, /*  ####    */
+       0xC0, /* ##       */
+       0x78, /*  ####    */
+       0x0F, /*     #### */
+       0x01, /*        # */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @403 '=' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @416 '>' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0xF0, /* ####     */
+       0x1E, /*    ####  */
+       0x03, /*       ## */
+       0x1E, /*    ####  */
+       0xF0, /* ####     */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @429 '?' (5 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @442 '@' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x21, 0x80, /*   #    ##        */
+       0x40, 0x80, /*  #      #        */
+       0x8E, 0x40, /* #   ###  #       */
+       0x92, 0x40, /* #  #  #  #       */
+       0x92, 0x40, /* #  #  #  #       */
+       0x92, 0xC0, /* #  #  # ##       */
+       0x8F, 0x80, /* #   #####        */
+       0x40, 0x00, /*  #               */
+       0x21, 0x00, /*   #    #         */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+
+       /* @468 'A' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x63, 0x00, /*  ##   ##         */
+       0x7F, 0x00, /*  #######         */
+       0x63, 0x00, /*  ##   ##         */
+       0xC1, 0x80, /* ##     ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @494 'B' (7 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @507 'C' (7 pixels wide) */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x62, /*  ##   #  */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x62, /*  ##   #  */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @520 'D' (8 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @533 'E' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @546 'F' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @559 'G' (8 pixels wide) */
+       0x00, /*          */
+       0x3F, /*   ###### */
+       0x61, /*  ##    # */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC7, /* ##   ### */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0x63, /*  ##   ## */
+       0x3F, /*   ###### */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @572 'H' (8 pixels wide) */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xFF, /* ######## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @585 'I' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @598 'J' (4 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xE0, /* ###      */
+       0x00, /*          */
+
+       /* @611 'K' (8 pixels wide) */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0xC6, /* ##   ##  */
+       0xCC, /* ##  ##   */
+       0xD8, /* ## ##    */
+       0xF0, /* ####     */
+       0xD8, /* ## ##    */
+       0xCC, /* ##  ##   */
+       0xC6, /* ##   ##  */
+       0xC3, /* ##    ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @624 'L' (6 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @637 'M' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE1, 0xC0, /* ###    ###       */
+       0xE1, 0xC0, /* ###    ###       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xD2, 0xC0, /* ## #  # ##       */
+       0xDE, 0xC0, /* ## #### ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @663 'N' (8 pixels wide) */
+       0x00, /*          */
+       0xE3, /* ###   ## */
+       0xE3, /* ###   ## */
+       0xF3, /* ####  ## */
+       0xD3, /* ## #  ## */
+       0xDB, /* ## ## ## */
+       0xCB, /* ##  # ## */
+       0xCF, /* ##  #### */
+       0xC7, /* ##   ### */
+       0xC7, /* ##   ### */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @676 'O' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x3E, 0x00, /*   #####          */
+       0x63, 0x00, /*  ##   ##         */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x3E, 0x00, /*   #####          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @702 'P' (7 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @715 'Q' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x3E, 0x00, /*   #####          */
+       0x63, 0x00, /*  ##   ##         */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x3E, 0x00, /*   #####          */
+       0x06, 0x00, /*      ##          */
+       0x03, 0x00, /*       ##         */
+       0x00, 0x00, /*                  */
+
+       /* @741 'R' (8 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0xCC, /* ##  ##   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC3, /* ##    ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @754 'S' (7 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xC4, /* ##   #   */
+       0xC0, /* ##       */
+       0xF0, /* ####     */
+       0x7C, /*  #####   */
+       0x0E, /*     ###  */
+       0x06, /*      ##  */
+       0x86, /* #    ##  */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @767 'T' (8 pixels wide) */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @780 'U' (8 pixels wide) */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @793 'V' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @819 'W' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC6, 0x30, /* ##   ##   ##     */
+       0xC6, 0x30, /* ##   ##   ##     */
+       0x6F, 0x60, /*  ## #### ##      */
+       0x6F, 0x60, /*  ## #### ##      */
+       0x69, 0x60, /*  ## #  # ##      */
+       0x79, 0xE0, /*  ####  ####      */
+       0x39, 0xC0, /*   ###  ###       */
+       0x30, 0xC0, /*   ##    ##       */
+       0x30, 0xC0, /*   ##    ##       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @845 'X' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x1C, 0x00, /*    ###           */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x63, 0x00, /*  ##   ##         */
+       0xC1, 0x80, /* ##     ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @871 'Y' (8 pixels wide) */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @884 'Z' (8 pixels wide) */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0x03, /*       ## */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @897 '[' (4 pixels wide) */
+       0xF0, /* ####     */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @910 '\' (4 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0xC0, /* ##       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @923 ']' (4 pixels wide) */
+       0xF0, /* ####     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @936 '^' (6 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @949 '_' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+
+       /* @962 '`' (3 pixels wide) */
+       0xC0, /* ##       */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @975 'a' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x46, /*  #   ##  */
+       0x06, /*      ##  */
+       0x7E, /*  ######  */
+       0xC6, /* ##   ##  */
+       0xCE, /* ##  ###  */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @988 'b' (7 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1001 'c' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x64, /*  ##  #   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x64, /*  ##  #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1014 'd' (7 pixels wide) */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x7E, /*  ######  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1027 'e' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x64, /*  ##  #   */
+       0xC6, /* ##   ##  */
+       0xFE, /* #######  */
+       0xC0, /* ##       */
+       0x62, /*  ##   #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1040 'f' (5 pixels wide) */
+       0x38, /*   ###    */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xF8, /* #####    */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1053 'g' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0xE6, /* ###  ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x46, /*  #   ##  */
+       0x3C, /*   ####   */
+
+       /* @1066 'h' (7 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0xE6, /* ###  ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1079 'i' (2 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 'j' (3 pixels wide) */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+
+       /* @1105 'k' (7 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xCC, /* ##  ##   */
+       0xD8, /* ## ##    */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xD8, /* ## ##    */
+       0xCC, /* ##  ##   */
+       0xC6, /* ##   ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1118 'l' (2 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1131 'm' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1157 'n' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xE6, /* ###  ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1170 'o' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1183 'p' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+
+       /* @1196 'q' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+
+       /* @1209 'r' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0xE0, /* ###      */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1222 's' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0xC4, /* ##   #   */
+       0xC0, /* ##       */
+       0x78, /*  ####    */
+       0x0C, /*     ##   */
+       0x8C, /* #   ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1235 't' (5 pixels wide) */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xF8, /* #####    */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1248 'u' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xCE, /* ##  ###  */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1261 'v' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1274 'w' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xDE, 0xC0, /* ## #### ##       */
+       0x5E, 0x80, /*  # #### #        */
+       0x73, 0x80, /*  ###  ###        */
+       0x73, 0x80, /*  ###  ###        */
+       0x33, 0x00, /*   ##  ##         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1300 'x' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0x6C, /*  ## ##   */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x6C, /*  ## ##   */
+       0xC6, /* ##   ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1313 'y' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x3C, /*   ####   */
+       0x38, /*   ###    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+
+       /* @1326 'z' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1339 '{' (6 pixels wide) */
+       0x1C, /*    ###   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xE0, /* ###      */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1352 '|' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1365 '}' (6 pixels wide) */
+       0xE0, /* ###      */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x1C, /*    ###   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1378 '~' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x71, /*  ###   # */
+       0x8E, /* #   ###  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for DejaVu Sans Bold 9pt */
+/* { [Char width in bits], [Offset into dejaVuSans9ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO dejaVuSansBold9ptDescriptors[] = 
+{
+       {5, 0},                 /*   */ 
+       {2, 13},                /* ! */ 
+       {3, 26},                /* " */ 
+       {8, 39},                /* # */ 
+       {7, 52},                /* $ */ 
+       {11, 65},               /* % */ 
+       {9, 91},                /* & */ 
+       {1, 117},               /* ' */ 
+       {4, 130},               /* ( */ 
+       {4, 143},               /* ) */ 
+       {5, 156},               /* * */ 
+       {7, 169},               /* + */ 
+       {3, 182},               /* , */ 
+       {4, 195},               /* - */ 
+       {2, 208},               /* . */ 
+       {4, 221},               /* / */ 
+       {7, 234},               /* 0 */ 
+       {6, 247},               /* 1 */ 
+       {7, 260},               /* 2 */ 
+       {7, 273},               /* 3 */ 
+       {7, 286},               /* 4 */ 
+       {7, 299},               /* 5 */ 
+       {7, 312},               /* 6 */ 
+       {7, 325},               /* 7 */ 
+       {7, 338},               /* 8 */ 
+       {7, 351},               /* 9 */ 
+       {2, 364},               /* : */ 
+       {3, 377},               /* ; */ 
+       {8, 390},               /* < */ 
+       {8, 403},               /* = */ 
+       {8, 416},               /* > */ 
+       {5, 429},               /* ? */ 
+       {10, 442},              /* @ */ 
+       {9, 468},               /* A */ 
+       {7, 494},               /* B */ 
+       {7, 507},               /* C */ 
+       {8, 520},               /* D */ 
+       {6, 533},               /* E */ 
+       {6, 546},               /* F */ 
+       {8, 559},               /* G */ 
+       {8, 572},               /* H */ 
+       {2, 585},               /* I */ 
+       {4, 598},               /* J */ 
+       {8, 611},               /* K */ 
+       {6, 624},               /* L */ 
+       {10, 637},              /* M */ 
+       {8, 663},               /* N */ 
+       {9, 676},               /* O */ 
+       {7, 702},               /* P */ 
+       {9, 715},               /* Q */ 
+       {8, 741},               /* R */ 
+       {7, 754},               /* S */ 
+       {8, 767},               /* T */ 
+       {8, 780},               /* U */ 
+       {9, 793},               /* V */ 
+       {12, 819},              /* W */ 
+       {9, 845},               /* X */ 
+       {8, 871},               /* Y */ 
+       {8, 884},               /* Z */ 
+       {4, 897},               /* [ */ 
+       {4, 910},               /* \ */ 
+       {4, 923},               /* ] */ 
+       {6, 936},               /* ^ */ 
+       {6, 949},               /* _ */ 
+       {3, 962},               /* ` */ 
+       {7, 975},               /* a */ 
+       {7, 988},               /* b */ 
+       {6, 1001},              /* c */ 
+       {7, 1014},              /* d */ 
+       {7, 1027},              /* e */ 
+       {5, 1040},              /* f */ 
+       {7, 1053},              /* g */ 
+       {7, 1066},              /* h */ 
+       {2, 1079},              /* i */ 
+       {3, 1092},              /* j */ 
+       {7, 1105},              /* k */ 
+       {2, 1118},              /* l */ 
+       {10, 1131},             /* m */ 
+       {7, 1157},              /* n */ 
+       {7, 1170},              /* o */ 
+       {7, 1183},              /* p */ 
+       {7, 1196},              /* q */ 
+       {5, 1209},              /* r */ 
+       {6, 1222},              /* s */ 
+       {5, 1235},              /* t */ 
+       {7, 1248},              /* u */ 
+       {7, 1261},              /* v */ 
+       {10, 1274},             /* w */ 
+       {7, 1300},              /* x */ 
+       {7, 1313},              /* y */ 
+       {6, 1326},              /* z */ 
+       {6, 1339},              /* { */ 
+       {1, 1352},              /* | */ 
+       {6, 1365},              /* } */ 
+       {8, 1378},              /* ~ */ 
+};
+
+/* Font information for DejaVu Sans Bold 9pt */
+const FONT_INFO dejaVuSansBold9ptFontInfo =
+{
+       13, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       dejaVuSansBold9ptDescriptors, /*  Character descriptor array */
+       dejaVuSansBold9ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/dejavusansbold9.h b/drivers/displays/tft/fonts/dejavusansbold9.h
new file mode 100644 (file)
index 0000000..d4b6490
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __DEJA_VU_SANS_BOLD_9__
+#define __DEJA_VU_SANS_BOLD_9__
+
+#include "bitmapfonts.h"
+
+extern const uint8_t dejaVuSansBold9ptCharBitmaps[];
+extern const FONT_CHAR_INFO dejaVuSansBold9ptCharDescriptors[];
+extern const FONT_INFO dejaVuSansBold9ptFontInfo;
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/dejavusanscondensed9.c b/drivers/displays/tft/fonts/dejavusanscondensed9.c
new file mode 100644 (file)
index 0000000..1f2b834
--- /dev/null
@@ -0,0 +1,1545 @@
+#include "dejavusanscondensed9.h"
+
+/* 
+**  Font data for DejaVu Sans Condensed 9pt
+*/
+
+/* Character bitmaps for DejaVu Sans Condensed 9pt */
+const uint8_t dejaVuSansCondensed9ptBitmaps[] = 
+{
+       /* @0 ' ' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @13 '!' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @26 '"' (3 pixels wide) */
+       0x00, /*          */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @39 '#' (7 pixels wide) */
+       0x00, /*          */
+       0x14, /*    # #   */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0xFE, /* #######  */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0xFE, /* #######  */
+       0x48, /*  #  #    */
+       0x50, /*  # #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @52 '$' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x70, /*  ###     */
+       0xA8, /* # # #    */
+       0xA0, /* # #      */
+       0xE0, /* ###      */
+       0x38, /*   ###    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0xF0, /* ####     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+
+       /* @65 '%' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE2, 0x00, /* ###   #          */
+       0xA4, 0x00, /* # #  #           */
+       0xA4, 0x00, /* # #  #           */
+       0xA8, 0x00, /* # # #            */
+       0xCA, 0x00, /* ##  # #          */
+       0x15, 0x00, /*    # # #         */
+       0x14, 0x80, /*    # #  #        */
+       0x24, 0x80, /*   #  #  #        */
+       0x43, 0x00, /*  #    ##         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @91 '&' (7 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xA2, /* # #   #  */
+       0x94, /* #  # #   */
+       0x8C, /* #   ##   */
+       0x8C, /* #   ##   */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @104 ''' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @117 '(' (2 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+
+       /* @130 ')' (2 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+
+       /* @143 '*' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0xA8, /* # # #    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0x28, /*   # #    */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @156 '+' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @169 ',' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @182 '-' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @195 '.' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @208 '/' (4 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @221 '0' (5 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @234 '1' (5 pixels wide) */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0xA0, /* # #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @247 '2' (5 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x98, /* #  ##    */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @260 '3' (5 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x18, /*    ##    */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0x70, /*  ###     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @273 '4' (5 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x90, /* #  #     */
+       0x90, /* #  #     */
+       0xF8, /* #####    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @286 '5' (5 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xE0, /* ###      */
+       0x18, /*    ##    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @299 '6' (5 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xB0, /* # ##     */
+       0xC8, /* ##  #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 '7' (5 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @325 '8' (5 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @338 '9' (5 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x98, /* #  ##    */
+       0x78, /*  ####    */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @351 ':' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @364 ';' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @377 '<' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x02, /*       #  */
+       0x1C, /*    ###   */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0x38, /*   ###    */
+       0x06, /*      ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @390 '=' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @403 '>' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x70, /*  ###     */
+       0x0C, /*     ##   */
+       0x06, /*      ##  */
+       0x38, /*   ###    */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @416 '?' (4 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @429 '@' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3E, 0x00, /*   #####          */
+       0x41, 0x00, /*  #     #         */
+       0x9A, 0x80, /* #  ## # #        */
+       0xA6, 0x80, /* # #  ## #        */
+       0xA2, 0x80, /* # #   # #        */
+       0xA2, 0x80, /* # #   # #        */
+       0x97, 0x00, /* #  # ###         */
+       0x88, 0x00, /* #   #            */
+       0x40, 0x00, /*  #               */
+       0x3E, 0x00, /*   #####          */
+       0x00, 0x00, /*                  */
+
+       /* @455 'A' (7 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x18, /*    ##    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x24, /*   #  #   */
+       0x44, /*  #   #   */
+       0x7C, /*  #####   */
+       0x42, /*  #    #  */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @468 'B' (6 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @481 'C' (6 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0xC4, /* ##   #   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xC0, /* ##       */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @494 'D' (7 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x8C, /* #   ##   */
+       0x84, /* #    #   */
+       0x86, /* #    ##  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @507 'E' (5 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @520 'F' (5 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF0, /* ####     */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @533 'G' (6 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0xC4, /* ##   #   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x8C, /* #   ##   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xC4, /* ##   #   */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @546 'H' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xFC, /* ######   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @559 'I' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @572 'J' (3 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xE0, /* ###      */
+       0x00, /*          */
+
+       /* @585 'K' (6 pixels wide) */
+       0x00, /*          */
+       0x8C, /* #   ##   */
+       0x98, /* #  ##    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x8C, /* #   ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @598 'L' (5 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @611 'M' (7 pixels wide) */
+       0x00, /*          */
+       0xC2, /* ##    #  */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xAA, /* # # # #  */
+       0xAA, /* # # # #  */
+       0xAA, /* # # # #  */
+       0x92, /* #  #  #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @624 'N' (6 pixels wide) */
+       0x00, /*          */
+       0xC4, /* ##   #   */
+       0xC4, /* ##   #   */
+       0xE4, /* ###  #   */
+       0xA4, /* # #  #   */
+       0xB4, /* # ## #   */
+       0x94, /* #  # #   */
+       0x94, /* #  # #   */
+       0x8C, /* #   ##   */
+       0x8C, /* #   ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @637 'O' (7 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0xC4, /* ##   #   */
+       0x86, /* #    ##  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x86, /* #    ##  */
+       0xC4, /* ##   #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @650 'P' (5 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x98, /* #  ##    */
+       0xE0, /* ###      */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @663 'Q' (7 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0xC4, /* ##   #   */
+       0x86, /* #    ##  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x86, /* #    ##  */
+       0xC4, /* ##   #   */
+       0x78, /*  ####    */
+       0x08, /*     #    */
+       0x04, /*      #   */
+       0x00, /*          */
+
+       /* @676 'R' (6 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF0, /* ####     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x8C, /* #   ##   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @689 'S' (5 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x88, /* #   #    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x70, /*  ###     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @702 'T' (7 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @715 'U' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @728 'V' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x42, /*  #    #  */
+       0x46, /*  #   ##  */
+       0x44, /*  #   #   */
+       0x24, /*   #  #   */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @741 'W' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x84, 0x40, /* #    #   #       */
+       0x4C, 0x40, /*  #  ##   #       */
+       0x4C, 0x40, /*  #  ##   #       */
+       0x4A, 0x40, /*  #  # #  #       */
+       0x4A, 0x80, /*  #  # # #        */
+       0x32, 0x80, /*   ##  # #        */
+       0x32, 0x80, /*   ##  # #        */
+       0x31, 0x80, /*   ##   ##        */
+       0x31, 0x00, /*   ##   #         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @767 'X' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0xC8, /* ##  #    */
+       0x58, /*  # ##    */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x70, /*  ###     */
+       0x58, /*  # ##    */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @780 'Y' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x44, /*  #   #   */
+       0x48, /*  #  #    */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @793 'Z' (7 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @806 '[' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @819 '\' (3 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @832 ']' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @845 '^' (7 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x28, /*   # #    */
+       0x44, /*  #   #   */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @858 '_' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+
+       /* @871 '`' (2 pixels wide) */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @884 'a' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x90, /* #  #     */
+       0x08, /*     #    */
+       0xF8, /* #####    */
+       0x88, /* #   #    */
+       0x98, /* #  ##    */
+       0xE8, /* ### #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @897 'b' (5 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xB0, /* # ##     */
+       0xC8, /* ##  #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @910 'c' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @923 'd' (5 pixels wide) */
+       0x00, /*          */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x68, /*  ## #    */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @936 'e' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @949 'f' (4 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x40, /*  #       */
+       0xF0, /* ####     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @962 'g' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x68, /*  ## #    */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x98, /* #  ##    */
+       0x68, /*  ## #    */
+       0x08, /*     #    */
+       0x90, /* #  #     */
+       0x60, /*  ##      */
+
+       /* @975 'h' (5 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xB0, /* # ##     */
+       0xD8, /* ## ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @988 'i' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1001 'j' (2 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+
+       /* @1014 'k' (5 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x98, /* #  ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1027 'l' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1040 'm' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xB3, 0x00, /* # ##  ##         */
+       0xDD, 0x00, /* ## ### #         */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1066 'n' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB0, /* # ##     */
+       0xD8, /* ## ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1079 'o' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 'p' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB0, /* # ##     */
+       0xC8, /* ##  #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF0, /* ####     */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1105 'q' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x68, /*  ## #    */
+       0x98, /* #  ##    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+
+       /* @1118 'r' (3 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1131 's' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x90, /* #  #     */
+       0x80, /* #        */
+       0xE0, /* ###      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1144 't' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0xF0, /* ####     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1157 'u' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1170 'v' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x44, /*  #   #   */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x28, /*   # #    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1183 'w' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x89, /* #   #  # */
+       0x49, /*  #  #  # */
+       0x59, /*  # ##  # */
+       0x55, /*  # # # # */
+       0x56, /*  # # ##  */
+       0x26, /*   #  ##  */
+       0x22, /*   #   #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1196 'x' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0x70, /*  ###     */
+       0x20, /*   #      */
+       0x60, /*  ##      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1209 'y' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x44, /*  #   #   */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x28, /*   # #    */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+
+       /* @1222 'z' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1235 '{' (5 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x38, /*   ###    */
+       0x00, /*          */
+
+       /* @1248 '|' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1261 '}' (5 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @1274 '~' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x9E, /* #  ####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for DejaVu Sans Condensed 9pt */
+/* { [Char width in bits], [Offset into dejaVuSansCondensed9ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO dejaVuSansCondensed9ptDescriptors[] = 
+{
+       {5, 0},                 /*   */ 
+       {1, 13},                /* ! */ 
+       {3, 26},                /* " */ 
+       {7, 39},                /* # */ 
+       {5, 52},                /* $ */ 
+       {9, 65},                /* % */ 
+       {7, 91},                /* & */ 
+       {1, 104},               /* ' */ 
+       {2, 117},               /* ( */ 
+       {2, 130},               /* ) */ 
+       {5, 143},               /* * */ 
+       {7, 156},               /* + */ 
+       {1, 169},               /* , */ 
+       {2, 182},               /* - */ 
+       {1, 195},               /* . */ 
+       {4, 208},               /* / */ 
+       {5, 221},               /* 0 */ 
+       {5, 234},               /* 1 */ 
+       {5, 247},               /* 2 */ 
+       {5, 260},               /* 3 */ 
+       {5, 273},               /* 4 */ 
+       {5, 286},               /* 5 */ 
+       {5, 299},               /* 6 */ 
+       {5, 312},               /* 7 */ 
+       {5, 325},               /* 8 */ 
+       {5, 338},               /* 9 */ 
+       {1, 351},               /* : */ 
+       {1, 364},               /* ; */ 
+       {7, 377},               /* < */ 
+       {7, 390},               /* = */ 
+       {7, 403},               /* > */ 
+       {4, 416},               /* ? */ 
+       {9, 429},               /* @ */ 
+       {7, 455},               /* A */ 
+       {6, 468},               /* B */ 
+       {6, 481},               /* C */ 
+       {7, 494},               /* D */ 
+       {5, 507},               /* E */ 
+       {5, 520},               /* F */ 
+       {6, 533},               /* G */ 
+       {6, 546},               /* H */ 
+       {1, 559},               /* I */ 
+       {3, 572},               /* J */ 
+       {6, 585},               /* K */ 
+       {5, 598},               /* L */ 
+       {7, 611},               /* M */ 
+       {6, 624},               /* N */ 
+       {7, 637},               /* O */ 
+       {5, 650},               /* P */ 
+       {7, 663},               /* Q */ 
+       {6, 676},               /* R */ 
+       {5, 689},               /* S */ 
+       {7, 702},               /* T */ 
+       {6, 715},               /* U */ 
+       {7, 728},               /* V */ 
+       {10, 741},              /* W */ 
+       {6, 767},               /* X */ 
+       {6, 780},               /* Y */ 
+       {7, 793},               /* Z */ 
+       {2, 806},               /* [ */ 
+       {3, 819},               /* \ */ 
+       {2, 832},               /* ] */ 
+       {7, 845},               /* ^ */ 
+       {6, 858},               /* _ */ 
+       {2, 871},               /* ` */ 
+       {5, 884},               /* a */ 
+       {5, 897},               /* b */ 
+       {4, 910},               /* c */ 
+       {5, 923},               /* d */ 
+       {5, 936},               /* e */ 
+       {4, 949},               /* f */ 
+       {5, 962},               /* g */ 
+       {5, 975},               /* h */ 
+       {1, 988},               /* i */ 
+       {2, 1001},              /* j */ 
+       {5, 1014},              /* k */ 
+       {1, 1027},              /* l */ 
+       {9, 1040},              /* m */ 
+       {5, 1066},              /* n */ 
+       {5, 1079},              /* o */ 
+       {5, 1092},              /* p */ 
+       {5, 1105},              /* q */ 
+       {3, 1118},              /* r */ 
+       {4, 1131},              /* s */ 
+       {4, 1144},              /* t */ 
+       {5, 1157},              /* u */ 
+       {6, 1170},              /* v */ 
+       {8, 1183},              /* w */ 
+       {5, 1196},              /* x */ 
+       {6, 1209},              /* y */ 
+       {5, 1222},              /* z */ 
+       {5, 1235},              /* { */ 
+       {1, 1248},              /* | */ 
+       {5, 1261},              /* } */ 
+       {7, 1274},              /* ~ */ 
+};
+
+/* Font information for DejaVu Sans Condensed 9pt */
+const FONT_INFO dejaVuSansCondensed9ptFontInfo =
+{
+       13, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       dejaVuSansCondensed9ptDescriptors, /*  Character descriptor array */
+       dejaVuSansCondensed9ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/dejavusanscondensed9.h b/drivers/displays/tft/fonts/dejavusanscondensed9.h
new file mode 100644 (file)
index 0000000..a07c51f
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __DEJA_VU_SANS_CONDENSED_9__
+#define __DEJA_VU_SANS_CONDENSED_9__
+
+#include "bitmapfonts.h"
+
+extern const uint8_t dejaVuSansCondensed9ptCharBitmaps[];
+extern const FONT_CHAR_INFO dejaVuSansCondensed9ptCharDescriptors[];
+extern const FONT_INFO dejaVuSansCondensed9ptFontInfo;
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/dejavusansmono8.c b/drivers/displays/tft/fonts/dejavusansmono8.c
new file mode 100644 (file)
index 0000000..13dccb9
--- /dev/null
@@ -0,0 +1,1450 @@
+#include "dejavusansmono8.h"
+
+/* 
+**  Font data for DejaVu Sans Mono 8pt
+*/
+
+/* Character bitmaps for DejaVu Sans Mono 8pt */
+const uint8_t dejaVuSansMono8ptBitmaps[] = 
+{
+       /* @0 ' ' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @12 '!' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @24 '"' (8 pixels wide) */
+       0x00, /*          */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @36 '#' (8 pixels wide) */
+       0x00, /*          */
+       0x14, /*    # #   */
+       0x24, /*   #  #   */
+       0x7E, /*  ######  */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0xFC, /* ######   */
+       0x48, /*  #  #    */
+       0x50, /*  # #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @48 '$' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x3C, /*   ####   */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x38, /*   ###    */
+       0x14, /*    # #   */
+       0x14, /*    # #   */
+       0x78, /*  ####    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+
+       /* @60 '%' (8 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0xA0, /* # #      */
+       0xE4, /* ###  #   */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0xDC, /* ## ###   */
+       0x14, /*    # #   */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @72 '&' (8 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x30, /*   ##     */
+       0x5A, /*  # ## #  */
+       0x4A, /*  #  # #  */
+       0x44, /*  #   #   */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @84 ''' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @96 '(' (8 pixels wide) */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @108 ')' (8 pixels wide) */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @120 '*' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x54, /*  # # #   */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x54, /*  # # #   */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @132 '+' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @144 ',' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @156 '-' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @168 '.' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @180 '/' (8 pixels wide) */
+       0x00, /*          */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @192 '0' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x42, /*  #    #  */
+       0x4A, /*  #  # #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @204 '1' (8 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @216 '2' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x02, /*       #  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @228 '3' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x02, /*       #  */
+       0x3C, /*   ####   */
+       0x06, /*      ##  */
+       0x02, /*       #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @240 '4' (8 pixels wide) */
+       0x00, /*          */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x14, /*    # #   */
+       0x24, /*   #  #   */
+       0x64, /*  ##  #   */
+       0x7E, /*  ######  */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @252 '5' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x7C, /*  #####   */
+       0x06, /*      ##  */
+       0x02, /*       #  */
+       0x02, /*       #  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @264 '6' (8 pixels wide) */
+       0x00, /*          */
+       0x1E, /*    ####  */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x5C, /*  # ###   */
+       0x62, /*  ##   #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @276 '7' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @288 '8' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @300 '9' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x3E, /*   #####  */
+       0x02, /*       #  */
+       0x04, /*      #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 ':' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @324 ';' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @336 '<' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x02, /*       #  */
+       0x1C, /*    ###   */
+       0x60, /*  ##      */
+       0x18, /*    ##    */
+       0x06, /*      ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @348 '=' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @360 '>' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x38, /*   ###    */
+       0x06, /*      ##  */
+       0x18, /*    ##    */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @372 '?' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x04, /*      #   */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @384 '@' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x26, /*   #  ##  */
+       0x42, /*  #    #  */
+       0x4E, /*  #  ###  */
+       0x52, /*  # #  #  */
+       0x52, /*  # #  #  */
+       0x4E, /*  #  ###  */
+       0x60, /*  ##      */
+       0x20, /*   #      */
+       0x1C, /*    ###   */
+       0x00, /*          */
+
+       /* @396 'A' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @408 'B' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7C, /*  #####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @420 'C' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x22, /*   #   #  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x22, /*   #   #  */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @432 'D' (8 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x44, /*  #   #   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x44, /*  #   #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @444 'E' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x7E, /*  ######  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @456 'F' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x7E, /*  ######  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @468 'G' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x22, /*   #   #  */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x46, /*  #   ##  */
+       0x42, /*  #    #  */
+       0x22, /*   #   #  */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @480 'H' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7E, /*  ######  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @492 'I' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @504 'J' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @516 'K' (8 pixels wide) */
+       0x00, /*          */
+       0x44, /*  #   #   */
+       0x48, /*  #  #    */
+       0x50, /*  # #     */
+       0x60, /*  ##      */
+       0x50, /*  # #     */
+       0x48, /*  #  #    */
+       0x44, /*  #   #   */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @528 'L' (8 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @540 'M' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x5A, /*  # ## #  */
+       0x5A, /*  # ## #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @552 'N' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x62, /*  ##   #  */
+       0x52, /*  # #  #  */
+       0x52, /*  # #  #  */
+       0x4A, /*  #  # #  */
+       0x4A, /*  #  # #  */
+       0x46, /*  #   ##  */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @564 'O' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @576 'P' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7C, /*  #####   */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @588 'Q' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x06, /*      ##  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @600 'R' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7C, /*  #####   */
+       0x44, /*  #   #   */
+       0x42, /*  #    #  */
+       0x41, /*  #     # */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @612 'S' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x40, /*  #       */
+       0x78, /*  ####    */
+       0x06, /*      ##  */
+       0x02, /*       #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @624 'T' (8 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @636 'U' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @648 'V' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @660 'W' (8 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x92, /* #  #  #  */
+       0x92, /* #  #  #  */
+       0xAA, /* # # # #  */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @672 'X' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x42, /*  #    #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @684 'Y' (8 pixels wide) */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0x44, /*  #   #   */
+       0x28, /*   # #    */
+       0x38, /*   ###    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @696 'Z' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @708 '[' (8 pixels wide) */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @720 '\' (8 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x04, /*      #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @732 ']' (8 pixels wide) */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @744 '^' (8 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x48, /*  #  #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @756 '_' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFE, /* #######  */
+
+       /* @768 '`' (8 pixels wide) */
+       0x10, /*    #     */
+       0x08, /*     #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @780 'a' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x04, /*      #   */
+       0x3C, /*   ####   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @792 'b' (8 pixels wide) */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x78, /*  ####    */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @804 'c' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x60, /*  ##      */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @816 'd' (8 pixels wide) */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x3C, /*   ####   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @828 'e' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x7C, /*  #####   */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @840 'f' (8 pixels wide) */
+       0x0C, /*     ##   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @852 'g' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x04, /*      #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+
+       /* @864 'h' (8 pixels wide) */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x58, /*  # ##    */
+       0x64, /*  ##  #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @876 'i' (8 pixels wide) */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @888 'j' (8 pixels wide) */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x60, /*  ##      */
+       0x00, /*          */
+
+       /* @900 'k' (8 pixels wide) */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x48, /*  #  #    */
+       0x50, /*  # #     */
+       0x60, /*  ##      */
+       0x50, /*  # #     */
+       0x48, /*  #  #    */
+       0x44, /*  #   #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @912 'l' (8 pixels wide) */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @924 'm' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x54, /*  # # #   */
+       0x54, /*  # # #   */
+       0x54, /*  # # #   */
+       0x54, /*  # # #   */
+       0x54, /*  # # #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @936 'n' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x58, /*  # ##    */
+       0x64, /*  ##  #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @948 'o' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @960 'p' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x78, /*  ####    */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+
+       /* @972 'q' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x00, /*          */
+
+       /* @984 'r' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x24, /*   #  #   */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @996 's' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x40, /*  #       */
+       0x70, /*  ###     */
+       0x0C, /*     ##   */
+       0x04, /*      #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1008 't' (8 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xF8, /* #####    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1020 'u' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1032 'v' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1044 'w' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x54, /*  # # #   */
+       0x54, /*  # # #   */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1056 'x' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x6C, /*  ## ##   */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x28, /*   # #    */
+       0x6C, /*  ## ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1068 'y' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x44, /*  #   #   */
+       0x48, /*  #  #    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x60, /*  ##      */
+       0x00, /*          */
+
+       /* @1080 'z' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 '{' (8 pixels wide) */
+       0x1C, /*    ###   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x60, /*  ##      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1104 '|' (8 pixels wide) */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+
+       /* @1116 '}' (8 pixels wide) */
+       0x70, /*  ###     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x0C, /*     ##   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1128 '~' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x0E, /*     ###  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for DejaVu Sans Mono 8pt */
+/* { [Char width in bits], [Offset into dejaVuSansMono8ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO dejaVuSansMono8ptDescriptors[] = 
+{
+       {8, 0},                 /*   */ 
+       {8, 12},                /* ! */ 
+       {8, 24},                /* " */ 
+       {8, 36},                /* # */ 
+       {8, 48},                /* $ */ 
+       {8, 60},                /* % */ 
+       {8, 72},                /* & */ 
+       {8, 84},                /* ' */ 
+       {8, 96},                /* ( */ 
+       {8, 108},               /* ) */ 
+       {8, 120},               /* * */ 
+       {8, 132},               /* + */ 
+       {8, 144},               /* , */ 
+       {8, 156},               /* - */ 
+       {8, 168},               /* . */ 
+       {8, 180},               /* / */ 
+       {8, 192},               /* 0 */ 
+       {8, 204},               /* 1 */ 
+       {8, 216},               /* 2 */ 
+       {8, 228},               /* 3 */ 
+       {8, 240},               /* 4 */ 
+       {8, 252},               /* 5 */ 
+       {8, 264},               /* 6 */ 
+       {8, 276},               /* 7 */ 
+       {8, 288},               /* 8 */ 
+       {8, 300},               /* 9 */ 
+       {8, 312},               /* : */ 
+       {8, 324},               /* ; */ 
+       {8, 336},               /* < */ 
+       {8, 348},               /* = */ 
+       {8, 360},               /* > */ 
+       {8, 372},               /* ? */ 
+       {8, 384},               /* @ */ 
+       {8, 396},               /* A */ 
+       {8, 408},               /* B */ 
+       {8, 420},               /* C */ 
+       {8, 432},               /* D */ 
+       {8, 444},               /* E */ 
+       {8, 456},               /* F */ 
+       {8, 468},               /* G */ 
+       {8, 480},               /* H */ 
+       {8, 492},               /* I */ 
+       {8, 504},               /* J */ 
+       {8, 516},               /* K */ 
+       {8, 528},               /* L */ 
+       {8, 540},               /* M */ 
+       {8, 552},               /* N */ 
+       {8, 564},               /* O */ 
+       {8, 576},               /* P */ 
+       {8, 588},               /* Q */ 
+       {8, 600},               /* R */ 
+       {8, 612},               /* S */ 
+       {8, 624},               /* T */ 
+       {8, 636},               /* U */ 
+       {8, 648},               /* V */ 
+       {8, 660},               /* W */ 
+       {8, 672},               /* X */ 
+       {8, 684},               /* Y */ 
+       {8, 696},               /* Z */ 
+       {8, 708},               /* [ */ 
+       {8, 720},               /* \ */ 
+       {8, 732},               /* ] */ 
+       {8, 744},               /* ^ */ 
+       {8, 756},               /* _ */ 
+       {8, 768},               /* ` */ 
+       {8, 780},               /* a */ 
+       {8, 792},               /* b */ 
+       {8, 804},               /* c */ 
+       {8, 816},               /* d */ 
+       {8, 828},               /* e */ 
+       {8, 840},               /* f */ 
+       {8, 852},               /* g */ 
+       {8, 864},               /* h */ 
+       {8, 876},               /* i */ 
+       {8, 888},               /* j */ 
+       {8, 900},               /* k */ 
+       {8, 912},               /* l */ 
+       {8, 924},               /* m */ 
+       {8, 936},               /* n */ 
+       {8, 948},               /* o */ 
+       {8, 960},               /* p */ 
+       {8, 972},               /* q */ 
+       {8, 984},               /* r */ 
+       {8, 996},               /* s */ 
+       {8, 1008},              /* t */ 
+       {8, 1020},              /* u */ 
+       {8, 1032},              /* v */ 
+       {8, 1044},              /* w */ 
+       {8, 1056},              /* x */ 
+       {8, 1068},              /* y */ 
+       {8, 1080},              /* z */ 
+       {8, 1092},              /* { */ 
+       {8, 1104},              /* | */ 
+       {8, 1116},              /* } */ 
+       {8, 1128},              /* ~ */ 
+};
+
+/* Font information for DejaVu Sans Mono 8pt */
+const FONT_INFO dejaVuSansMono8ptFontInfo =
+{
+       12, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       dejaVuSansMono8ptDescriptors, /*  Character descriptor array */
+       dejaVuSansMono8ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/dejavusansmono8.h b/drivers/displays/tft/fonts/dejavusansmono8.h
new file mode 100644 (file)
index 0000000..3310409
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __DEJA_VU_SANS_MONO_8__
+#define __DEJA_VU_SANS_MONO_8__
+
+#include "bitmapfonts.h"
+
+extern const uint8_t dejaVuSansMono8ptCharBitmaps[];
+extern const FONT_CHAR_INFO dejaVuSansMono8ptCharDescriptors[];
+extern const FONT_INFO dejaVuSansMono8ptFontInfo;
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/dejavusansmonobold8.c b/drivers/displays/tft/fonts/dejavusansmonobold8.c
new file mode 100644 (file)
index 0000000..bc05313
--- /dev/null
@@ -0,0 +1,1450 @@
+#include "dejavusansmonobold8.h"
+
+/* 
+**  Font data for DejaVu Sans Mono Bold 8pt
+*/
+
+/* Character bitmaps for DejaVu Sans Mono Bold 8pt */
+const uint8_t dejaVuSansMonoBold8ptBitmaps[] = 
+{
+       /* @0 ' ' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @12 '!' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @24 '"' (8 pixels wide) */
+       0x00, /*          */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @36 '#' (8 pixels wide) */
+       0x00, /*          */
+       0x14, /*    # #   */
+       0x34, /*   ## #   */
+       0x7E, /*  ######  */
+       0x28, /*   # #    */
+       0x28, /*   # #    */
+       0xFC, /* ######   */
+       0x58, /*  # ##    */
+       0x50, /*  # #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @48 '$' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x38, /*   ###    */
+       0x50, /*  # #     */
+       0x78, /*  ####    */
+       0x3C, /*   ####   */
+       0x14, /*    # #   */
+       0x54, /*  # # #   */
+       0x38, /*   ###    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+
+       /* @60 '%' (8 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0xA0, /* # #      */
+       0xE4, /* ###  #   */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0xDC, /* ## ###   */
+       0x14, /*    # #   */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @72 '&' (8 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x7A, /*  #### #  */
+       0x6A, /*  ## # #  */
+       0x6E, /*  ## ###  */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @84 ''' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @96 '(' (8 pixels wide) */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x18, /*    ##    */
+       0x08, /*     #    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @108 ')' (8 pixels wide) */
+       0x20, /*   #      */
+       0x30, /*   ##     */
+       0x10, /*    #     */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @120 '*' (8 pixels wide) */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x54, /*  # # #   */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x54, /*  # # #   */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @132 '+' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x7C, /*  #####   */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @144 ',' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+
+       /* @156 '-' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @168 '.' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @180 '/' (8 pixels wide) */
+       0x00, /*          */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @192 '0' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x6E, /*  ## ###  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @204 '1' (8 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @216 '2' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @228 '3' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x38, /*   ###    */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @240 '4' (8 pixels wide) */
+       0x00, /*          */
+       0x0C, /*     ##   */
+       0x1C, /*    ###   */
+       0x3C, /*   ####   */
+       0x2C, /*   # ##   */
+       0x4C, /*  #  ##   */
+       0x7E, /*  ######  */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @252 '5' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @264 '6' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @276 '7' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x1C, /*    ###   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @288 '8' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x18, /*    ##    */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @300 '9' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x06, /*      ##  */
+       0x0E, /*     ###  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 ':' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @324 ';' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+
+       /* @336 '<' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x02, /*       #  */
+       0x1E, /*    ####  */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0x1E, /*    ####  */
+       0x02, /*       #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @348 '=' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @360 '>' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x78, /*  ####    */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x78, /*  ####    */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @372 '?' (8 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x58, /*  # ##    */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @384 '@' (8 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x44, /*  #   #   */
+       0x9C, /* #  ###   */
+       0xA4, /* # #  #   */
+       0xA4, /* # #  #   */
+       0xA4, /* # #  #   */
+       0x9C, /* #  ###   */
+       0x44, /*  #   #   */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @396 'A' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @408 'B' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x78, /*  ####    */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @420 'C' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x32, /*   ##  #  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x32, /*   ##  #  */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @432 'D' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @444 'E' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @456 'F' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @468 'G' (8 pixels wide) */
+       0x00, /*          */
+       0x1C, /*    ###   */
+       0x32, /*   ##  #  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x6E, /*  ## ###  */
+       0x66, /*  ##  ##  */
+       0x36, /*   ## ##  */
+       0x1E, /*    ####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @480 'H' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7E, /*  ######  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @492 'I' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @504 'J' (8 pixels wide) */
+       0x00, /*          */
+       0x1E, /*    ####  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x46, /*  #   ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @516 'K' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x6C, /*  ## ##   */
+       0x68, /*  ## #    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x6C, /*  ## ##   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @528 'L' (8 pixels wide) */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @540 'M' (8 pixels wide) */
+       0x00, /*          */
+       0x42, /*  #    #  */
+       0x66, /*  ##  ##  */
+       0x7E, /*  ######  */
+       0x7E, /*  ######  */
+       0x7E, /*  ######  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @552 'N' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x76, /*  ### ##  */
+       0x76, /*  ### ##  */
+       0x76, /*  ### ##  */
+       0x6E, /*  ## ###  */
+       0x6E, /*  ## ###  */
+       0x6E, /*  ## ###  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @564 'O' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @576 'P' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7C, /*  #####   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @588 'Q' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x04, /*      #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @600 'R' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x78, /*  ####    */
+       0x64, /*  ##  #   */
+       0x66, /*  ##  ##  */
+       0x63, /*  ##   ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @612 'S' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x62, /*  ##   #  */
+       0x60, /*  ##      */
+       0x78, /*  ####    */
+       0x1E, /*    ####  */
+       0x06, /*      ##  */
+       0x46, /*  #   ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @624 'T' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @636 'U' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @648 'V' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @660 'W' (8 pixels wide) */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0xD6, /* ## # ##  */
+       0xD6, /* ## # ##  */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @672 'X' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x3C, /*   ####   */
+       0x24, /*   #  #   */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @684 'Y' (8 pixels wide) */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @696 'Z' (8 pixels wide) */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @708 '[' (8 pixels wide) */
+       0x38, /*   ###    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @720 '\' (8 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x04, /*      #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @732 ']' (8 pixels wide) */
+       0x38, /*   ###    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @744 '^' (8 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x78, /*  ####    */
+       0xCC, /* ##  ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @756 '_' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFE, /* #######  */
+
+       /* @768 '`' (8 pixels wide) */
+       0x60, /*  ##      */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @780 'a' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x06, /*      ##  */
+       0x3E, /*   #####  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @792 'b' (8 pixels wide) */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @804 'c' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x70, /*  ###     */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @816 'd' (8 pixels wide) */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x3E, /*   #####  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @828 'e' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x7E, /*  ######  */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @840 'f' (8 pixels wide) */
+       0x1C, /*    ###   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x7C, /*  #####   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @852 'g' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x06, /*      ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+
+       /* @864 'h' (8 pixels wide) */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @876 'i' (8 pixels wide) */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @888 'j' (8 pixels wide) */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x70, /*  ###     */
+       0x00, /*          */
+
+       /* @900 'k' (8 pixels wide) */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x6C, /*  ## ##   */
+       0x68, /*  ## #    */
+       0x78, /*  ####    */
+       0x68, /*  ## #    */
+       0x6C, /*  ## ##   */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @912 'l' (8 pixels wide) */
+       0xF0, /* ####     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @924 'm' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x6A, /*  ## # #  */
+       0x6A, /*  ## # #  */
+       0x6A, /*  ## # #  */
+       0x6A, /*  ## # #  */
+       0x6A, /*  ## # #  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @936 'n' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @948 'o' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @960 'p' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x7C, /*  #####   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+
+       /* @972 'q' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x00, /*          */
+
+       /* @984 'r' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @996 's' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x62, /*  ##   #  */
+       0x78, /*  ####    */
+       0x1E, /*    ####  */
+       0x46, /*  #   ##  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1008 't' (8 pixels wide) */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xFC, /* ######   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1020 'u' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x3E, /*   #####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1032 'v' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x66, /*  ##  ##  */
+       0x24, /*   #  #   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1044 'w' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC6, /* ##   ##  */
+       0xC6, /* ##   ##  */
+       0x54, /*  # # #   */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x6C, /*  ## ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1056 'x' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x3C, /*   ####   */
+       0x66, /*  ##  ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1068 'y' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x66, /*  ##  ##  */
+       0x24, /*   #  #   */
+       0x2C, /*   # ##   */
+       0x3C, /*   ####   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x10, /*    #     */
+       0x70, /*  ###     */
+       0x00, /*          */
+
+       /* @1080 'z' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x7E, /*  ######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 '{' (8 pixels wide) */
+       0x1E, /*    ####  */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x60, /*  ##      */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x1E, /*    ####  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1104 '|' (8 pixels wide) */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+
+       /* @1116 '}' (8 pixels wide) */
+       0x78, /*  ####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x06, /*      ##  */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1128 '~' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x0E, /*     ###  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for DejaVu Sans Mono Bold 8pt */
+/* { [Char width in bits], [Offset into dejaVuSansMono8ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO dejaVuSansMonoBold8ptDescriptors[] = 
+{
+       {8, 0},                 /*   */ 
+       {8, 12},                /* ! */ 
+       {8, 24},                /* " */ 
+       {8, 36},                /* # */ 
+       {8, 48},                /* $ */ 
+       {8, 60},                /* % */ 
+       {8, 72},                /* & */ 
+       {8, 84},                /* ' */ 
+       {8, 96},                /* ( */ 
+       {8, 108},               /* ) */ 
+       {8, 120},               /* * */ 
+       {8, 132},               /* + */ 
+       {8, 144},               /* , */ 
+       {8, 156},               /* - */ 
+       {8, 168},               /* . */ 
+       {8, 180},               /* / */ 
+       {8, 192},               /* 0 */ 
+       {8, 204},               /* 1 */ 
+       {8, 216},               /* 2 */ 
+       {8, 228},               /* 3 */ 
+       {8, 240},               /* 4 */ 
+       {8, 252},               /* 5 */ 
+       {8, 264},               /* 6 */ 
+       {8, 276},               /* 7 */ 
+       {8, 288},               /* 8 */ 
+       {8, 300},               /* 9 */ 
+       {8, 312},               /* : */ 
+       {8, 324},               /* ; */ 
+       {8, 336},               /* < */ 
+       {8, 348},               /* = */ 
+       {8, 360},               /* > */ 
+       {8, 372},               /* ? */ 
+       {8, 384},               /* @ */ 
+       {8, 396},               /* A */ 
+       {8, 408},               /* B */ 
+       {8, 420},               /* C */ 
+       {8, 432},               /* D */ 
+       {8, 444},               /* E */ 
+       {8, 456},               /* F */ 
+       {8, 468},               /* G */ 
+       {8, 480},               /* H */ 
+       {8, 492},               /* I */ 
+       {8, 504},               /* J */ 
+       {8, 516},               /* K */ 
+       {8, 528},               /* L */ 
+       {8, 540},               /* M */ 
+       {8, 552},               /* N */ 
+       {8, 564},               /* O */ 
+       {8, 576},               /* P */ 
+       {8, 588},               /* Q */ 
+       {8, 600},               /* R */ 
+       {8, 612},               /* S */ 
+       {8, 624},               /* T */ 
+       {8, 636},               /* U */ 
+       {8, 648},               /* V */ 
+       {8, 660},               /* W */ 
+       {8, 672},               /* X */ 
+       {8, 684},               /* Y */ 
+       {8, 696},               /* Z */ 
+       {8, 708},               /* [ */ 
+       {8, 720},               /* \ */ 
+       {8, 732},               /* ] */ 
+       {8, 744},               /* ^ */ 
+       {8, 756},               /* _ */ 
+       {8, 768},               /* ` */ 
+       {8, 780},               /* a */ 
+       {8, 792},               /* b */ 
+       {8, 804},               /* c */ 
+       {8, 816},               /* d */ 
+       {8, 828},               /* e */ 
+       {8, 840},               /* f */ 
+       {8, 852},               /* g */ 
+       {8, 864},               /* h */ 
+       {8, 876},               /* i */ 
+       {8, 888},               /* j */ 
+       {8, 900},               /* k */ 
+       {8, 912},               /* l */ 
+       {8, 924},               /* m */ 
+       {8, 936},               /* n */ 
+       {8, 948},               /* o */ 
+       {8, 960},               /* p */ 
+       {8, 972},               /* q */ 
+       {8, 984},               /* r */ 
+       {8, 996},               /* s */ 
+       {8, 1008},              /* t */ 
+       {8, 1020},              /* u */ 
+       {8, 1032},              /* v */ 
+       {8, 1044},              /* w */ 
+       {8, 1056},              /* x */ 
+       {8, 1068},              /* y */ 
+       {8, 1080},              /* z */ 
+       {8, 1092},              /* { */ 
+       {8, 1104},              /* | */ 
+       {8, 1116},              /* } */ 
+       {8, 1128},              /* ~ */ 
+};
+
+/* Font information for DejaVu Sans Mono Bold 8pt */
+const FONT_INFO dejaVuSansMonoBold8ptFontInfo =
+{
+       12, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       dejaVuSansMonoBold8ptDescriptors, /*  Character descriptor array */
+       dejaVuSansMonoBold8ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/dejavusansmonobold8.h b/drivers/displays/tft/fonts/dejavusansmonobold8.h
new file mode 100644 (file)
index 0000000..4a38f88
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef __DEJA_VU_SANS_MONO_BOLD_8__
+#define __DEJA_VU_SANS_MONO_BOLD_8__
+
+#include "bitmapfonts.h"
+
+extern const uint8_t dejaVuSansMonoBold8ptCharBitmaps[];
+extern const FONT_CHAR_INFO dejaVuSansMonoBold8ptCharDescriptors[];
+extern const FONT_INFO dejaVuSansMonoBold8ptFontInfo;
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/verdana14.c b/drivers/displays/tft/fonts/verdana14.c
new file mode 100644 (file)
index 0000000..1a6d8c8
--- /dev/null
@@ -0,0 +1,2115 @@
+#include "verdana14.h"
+
+/* 
+**  Font data for Verdana 14pt
+*/
+
+/* Character bitmaps for Verdana 14pt */
+const uint8_t verdana14ptBitmaps[] = 
+{
+       /* @0 ' ' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @19 '!' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @38 '"' (6 pixels wide) */
+       0xCC, /* ##  ##   */
+       0xCC, /* ##  ##   */
+       0xCC, /* ##  ##   */
+       0xCC, /* ##  ##   */
+       0xCC, /* ##  ##   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @57 '#' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x04, 0x40, /*      #   #       */
+       0x04, 0x40, /*      #   #       */
+       0x08, 0x80, /*     #   #        */
+       0x08, 0x80, /*     #   #        */
+       0x7F, 0xF0, /*  ###########     */
+       0x08, 0x80, /*     #   #        */
+       0x08, 0x80, /*     #   #        */
+       0x11, 0x00, /*    #   #         */
+       0x11, 0x00, /*    #   #         */
+       0xFF, 0xE0, /* ###########      */
+       0x11, 0x00, /*    #   #         */
+       0x11, 0x00, /*    #   #         */
+       0x22, 0x00, /*   #   #          */
+       0x22, 0x00, /*   #   #          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @95 '$' (9 pixels wide) */
+       0x08, 0x00, /*     #            */
+       0x08, 0x00, /*     #            */
+       0x08, 0x00, /*     #            */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0x80, /*  ########        */
+       0xC8, 0x00, /* ##  #            */
+       0xC8, 0x00, /* ##  #            */
+       0xE8, 0x00, /* ### #            */
+       0x7C, 0x00, /*  #####           */
+       0x1F, 0x00, /*    #####         */
+       0x09, 0x80, /*     #  ##        */
+       0x09, 0x80, /*     #  ##        */
+       0x89, 0x80, /* #   #  ##        */
+       0xFF, 0x00, /* ########         */
+       0x7E, 0x00, /*  ######          */
+       0x08, 0x00, /*     #            */
+       0x08, 0x00, /*     #            */
+       0x08, 0x00, /*     #            */
+       0x00, 0x00, /*                  */
+
+       /* @133 '%' (18 pixels wide) */
+       0x00, 0x00, 0x00, /*                          */
+       0x7C, 0x18, 0x00, /*  #####     ##            */
+       0x44, 0x10, 0x00, /*  #   #     #             */
+       0xC6, 0x30, 0x00, /* ##   ##   ##             */
+       0xC6, 0x20, 0x00, /* ##   ##   #              */
+       0xC6, 0x60, 0x00, /* ##   ##  ##              */
+       0xC6, 0x40, 0x00, /* ##   ##  #               */
+       0x44, 0x4F, 0x80, /*  #   #   #  #####        */
+       0x7C, 0x88, 0x80, /*  #####  #   #   #        */
+       0x00, 0x98, 0xC0, /*         #  ##   ##       */
+       0x01, 0x98, 0xC0, /*        ##  ##   ##       */
+       0x01, 0x18, 0xC0, /*        #   ##   ##       */
+       0x03, 0x18, 0xC0, /*       ##   ##   ##       */
+       0x02, 0x08, 0x80, /*       #     #   #        */
+       0x06, 0x0F, 0x80, /*      ##     #####        */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+
+       /* @190 '&' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x7F, 0x00, /*  #######         */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x3E, 0x00, /*   #####          */
+       0x3C, 0x60, /*   ####   ##      */
+       0x66, 0x60, /*  ##  ##  ##      */
+       0xC3, 0x60, /* ##    ## ##      */
+       0xC1, 0xE0, /* ##     ####      */
+       0xC0, 0xC0, /* ##      ##       */
+       0xE1, 0xE0, /* ###    ####      */
+       0x7F, 0x30, /*  #######  ##     */
+       0x3E, 0x18, /*   #####    ##    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @228 ''' (2 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @247 '(' (6 pixels wide) */
+       0x1C, /*    ###   */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x30, /*   ##     */
+       0x18, /*    ##    */
+       0x1C, /*    ###   */
+
+       /* @266 ')' (6 pixels wide) */
+       0xE0, /* ###      */
+       0x60, /*  ##      */
+       0x30, /*   ##     */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+
+       /* @285 '*' (9 pixels wide) */
+       0x08, 0x00, /*     #            */
+       0x88, 0x80, /* #   #   #        */
+       0xEB, 0x80, /* ### # ###        */
+       0x3E, 0x00, /*   #####          */
+       0x08, 0x00, /*     #            */
+       0x3E, 0x00, /*   #####          */
+       0xEB, 0x80, /* ### # ###        */
+       0x88, 0x80, /* #   #   #        */
+       0x08, 0x00, /*     #            */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @323 '+' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @361 ',' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @380 '-' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @399 '.' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @418 '/' (8 pixels wide) */
+       0x03, /*       ## */
+       0x07, /*      ### */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x0E, /*     ###  */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x1C, /*    ###   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x38, /*   ###    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @437 '0' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x61, 0x80, /*  ##    ##        */
+       0x7F, 0x80, /*  ########        */
+       0x1E, 0x00, /*    ####          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @475 '1' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0xF8, /* #####    */
+       0xF8, /* #####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @494 '2' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x7C, 0x00, /*  #####           */
+       0xFE, 0x00, /* #######          */
+       0x87, 0x00, /* #    ###         */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x06, 0x00, /*      ##          */
+       0x0C, 0x00, /*     ##           */
+       0x18, 0x00, /*    ##            */
+       0x30, 0x00, /*   ##             */
+       0x60, 0x00, /*  ##              */
+       0xC0, 0x00, /* ##               */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @532 '3' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x7E, 0x00, /*  ######          */
+       0xFF, 0x00, /* ########         */
+       0x83, 0x80, /* #     ###        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x03, 0x00, /*       ##         */
+       0x1E, 0x00, /*    ####          */
+       0x1F, 0x00, /*    #####         */
+       0x03, 0x80, /*       ###        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x83, 0x80, /* #     ###        */
+       0xFF, 0x00, /* ########         */
+       0x7E, 0x00, /*  ######          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @570 '4' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x03, 0x00, /*       ##         */
+       0x07, 0x00, /*      ###         */
+       0x0F, 0x00, /*     ####         */
+       0x1F, 0x00, /*    #####         */
+       0x1B, 0x00, /*    ## ##         */
+       0x33, 0x00, /*   ##  ##         */
+       0x73, 0x00, /*  ###  ##         */
+       0xE3, 0x00, /* ###   ##         */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @608 '5' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x7F, 0x80, /*  ########        */
+       0x7F, 0x80, /*  ########        */
+       0x60, 0x00, /*  ##              */
+       0x60, 0x00, /*  ##              */
+       0x60, 0x00, /*  ##              */
+       0x7E, 0x00, /*  ######          */
+       0x7F, 0x00, /*  #######         */
+       0x03, 0x80, /*       ###        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x83, 0x00, /* #     ##         */
+       0xFF, 0x00, /* ########         */
+       0x7C, 0x00, /*  #####           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @646 '6' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0F, 0x80, /*     #####        */
+       0x3F, 0x80, /*   #######        */
+       0x30, 0x00, /*   ##             */
+       0x60, 0x00, /*  ##              */
+       0xC0, 0x00, /* ##               */
+       0xDF, 0x00, /* ## #####         */
+       0xFF, 0x80, /* #########        */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x61, 0x80, /*  ##    ##        */
+       0x7F, 0x80, /*  ########        */
+       0x1E, 0x00, /*    ####          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @684 '7' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x01, 0x80, /*        ##        */
+       0x03, 0x00, /*       ##         */
+       0x03, 0x00, /*       ##         */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x30, 0x00, /*   ##             */
+       0x30, 0x00, /*   ##             */
+       0x70, 0x00, /*  ###             */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @722 '8' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x3F, 0x00, /*   ######         */
+       0x7F, 0x80, /*  ########        */
+       0xE1, 0xC0, /* ###    ###       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x79, 0x80, /*  ####  ##        */
+       0x3E, 0x00, /*   #####          */
+       0x67, 0x80, /*  ##  ####        */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xE1, 0xC0, /* ###    ###       */
+       0x7F, 0x80, /*  ########        */
+       0x3F, 0x00, /*   ######         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @760 '9' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xE0, 0xC0, /* ###     ##       */
+       0x7F, 0xC0, /*  #########       */
+       0x3E, 0xC0, /*   ##### ##       */
+       0x00, 0xC0, /*         ##       */
+       0x01, 0x80, /*        ##        */
+       0x03, 0x80, /*       ###        */
+       0x7F, 0x00, /*  #######         */
+       0x7C, 0x00, /*  #####           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @798 ':' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @817 ';' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x40, /*  #       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @836 '<' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x60, /*          ##      */
+       0x01, 0xE0, /*        ####      */
+       0x07, 0x80, /*      ####        */
+       0x1E, 0x00, /*    ####          */
+       0x78, 0x00, /*  ####            */
+       0xE0, 0x00, /* ###              */
+       0x78, 0x00, /*  ####            */
+       0x1E, 0x00, /*    ####          */
+       0x07, 0x80, /*      ####        */
+       0x01, 0xE0, /*        ####      */
+       0x00, 0x60, /*          ##      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @874 '=' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @912 '>' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xC0, 0x00, /* ##               */
+       0xF0, 0x00, /* ####             */
+       0x3C, 0x00, /*   ####           */
+       0x0F, 0x00, /*     ####         */
+       0x03, 0xC0, /*       ####       */
+       0x00, 0xE0, /*         ###      */
+       0x03, 0xC0, /*       ####       */
+       0x0F, 0x00, /*     ####         */
+       0x3C, 0x00, /*   ####           */
+       0xF0, 0x00, /* ####             */
+       0xC0, 0x00, /* ##               */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @950 '?' (8 pixels wide) */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0xFE, /* #######  */
+       0x87, /* #    ### */
+       0x03, /*       ## */
+       0x03, /*       ## */
+       0x06, /*      ##  */
+       0x0E, /*     ###  */
+       0x38, /*   ###    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @969 '@' (16 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x07, 0xE0, /*      ######      */
+       0x1C, 0x18, /*    ###     ##    */
+       0x30, 0x0C, /*   ##        ##   */
+       0x60, 0x06, /*  ##          ##  */
+       0x63, 0xF6, /*  ##   ###### ##  */
+       0xC6, 0x33, /* ##   ##   ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0x66, 0x72, /*  ##  ##  ###  #  */
+       0x63, 0xBE, /*  ##   ### #####  */
+       0x30, 0x00, /*   ##             */
+       0x1C, 0x10, /*    ###     #     */
+       0x07, 0xF0, /*      #######     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1007 'A' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x0D, 0x80, /*     ## ##        */
+       0x0D, 0x80, /*     ## ##        */
+       0x0D, 0x80, /*     ## ##        */
+       0x18, 0xC0, /*    ##   ##       */
+       0x18, 0xC0, /*    ##   ##       */
+       0x30, 0x60, /*   ##     ##      */
+       0x3F, 0xE0, /*   #########      */
+       0x3F, 0xE0, /*   #########      */
+       0x60, 0x30, /*  ##       ##     */
+       0x60, 0x30, /*  ##       ##     */
+       0x60, 0x30, /*  ##       ##     */
+       0xC0, 0x18, /* ##         ##    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1045 'B' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFE, 0x00, /* #######          */
+       0xFF, 0x80, /* #########        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC3, 0x00, /* ##    ##         */
+       0xFE, 0x00, /* #######          */
+       0xFF, 0x80, /* #########        */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC1, 0xC0, /* ##     ###       */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x00, /* ########         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1083 'C' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0F, 0xC0, /*     ######       */
+       0x3F, 0xE0, /*   #########      */
+       0x70, 0x20, /*  ###      #      */
+       0x60, 0x00, /*  ##              */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0x60, 0x00, /*  ##              */
+       0x70, 0x20, /*  ###      #      */
+       0x3F, 0xE0, /*   #########      */
+       0x0F, 0x80, /*     #####        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1121 'D' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0x80, /* #########        */
+       0xC1, 0xE0, /* ##     ####      */
+       0xC0, 0x60, /* ##       ##      */
+       0xC0, 0x70, /* ##       ###     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x70, /* ##       ###     */
+       0xC0, 0x60, /* ##       ##      */
+       0xC1, 0xC0, /* ##     ###       */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x00, /* ########         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1159 'E' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1197 'F' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0x00, /* ########         */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1235 'G' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0F, 0xE0, /*     #######      */
+       0x3F, 0xF8, /*   ###########    */
+       0x78, 0x18, /*  ####      ##    */
+       0x60, 0x00, /*  ##              */
+       0xE0, 0x00, /* ###              */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC1, 0xF8, /* ##     ######    */
+       0xC1, 0xF8, /* ##     ######    */
+       0xE0, 0x18, /* ###        ##    */
+       0x60, 0x18, /*  ##        ##    */
+       0x78, 0x18, /*  ####      ##    */
+       0x3F, 0xF8, /*   ###########    */
+       0x0F, 0xE0, /*     #######      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1273 'H' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1311 'I' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1330 'J' (7 pixels wide) */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x3E, /*   #####  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x0E, /*     ###  */
+       0xFC, /* ######   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1349 'K' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC0, 0xE0, /* ##      ###      */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC3, 0x80, /* ##    ###        */
+       0xC7, 0x00, /* ##   ###         */
+       0xCE, 0x00, /* ##  ###          */
+       0xDC, 0x00, /* ## ###           */
+       0xF8, 0x00, /* #####            */
+       0xFC, 0x00, /* ######           */
+       0xEC, 0x00, /* ### ##           */
+       0xC6, 0x00, /* ##   ##          */
+       0xC3, 0x00, /* ##    ##         */
+       0xC3, 0x80, /* ##    ###        */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC0, 0xE0, /* ##      ###      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1387 'L' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1425 'M' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE0, 0x70, /* ###      ###     */
+       0xE0, 0x70, /* ###      ###     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xD0, 0xB0, /* ## #    # ##     */
+       0xD9, 0xB0, /* ## ##  ## ##     */
+       0xC9, 0x30, /* ##  #  #  ##     */
+       0xCD, 0x30, /* ##  ## #  ##     */
+       0xCF, 0x30, /* ##  ####  ##     */
+       0xC6, 0x30, /* ##   ##   ##     */
+       0xC6, 0x30, /* ##   ##   ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0xC0, 0x30, /* ##        ##     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1463 'N' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE0, 0xC0, /* ###     ##       */
+       0xF0, 0xC0, /* ####    ##       */
+       0xF0, 0xC0, /* ####    ##       */
+       0xD0, 0xC0, /* ## #    ##       */
+       0xD8, 0xC0, /* ## ##   ##       */
+       0xC8, 0xC0, /* ##  #   ##       */
+       0xCC, 0xC0, /* ##  ##  ##       */
+       0xC4, 0xC0, /* ##   #  ##       */
+       0xC6, 0xC0, /* ##   ## ##       */
+       0xC2, 0xC0, /* ##    # ##       */
+       0xC3, 0xC0, /* ##    ####       */
+       0xC3, 0xC0, /* ##    ####       */
+       0xC1, 0xC0, /* ##     ###       */
+       0xC1, 0xC0, /* ##     ###       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1501 'O' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0F, 0x80, /*     #####        */
+       0x3F, 0xE0, /*   #########      */
+       0x70, 0x70, /*  ###     ###     */
+       0x60, 0x30, /*  ##       ##     */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0x60, 0x30, /*  ##       ##     */
+       0x70, 0x70, /*  ###     ###     */
+       0x3F, 0xE0, /*   #########      */
+       0x0F, 0x80, /*     #####        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1539 'P' (8 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xFE, /* #######  */
+       0xC7, /* ##   ### */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC7, /* ##   ### */
+       0xFE, /* #######  */
+       0xFC, /* ######   */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1558 'Q' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0F, 0x80, /*     #####        */
+       0x3F, 0xE0, /*   #########      */
+       0x70, 0x70, /*  ###     ###     */
+       0x60, 0x30, /*  ##       ##     */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0xC0, 0x18, /* ##         ##    */
+       0x60, 0x30, /*  ##       ##     */
+       0x70, 0x70, /*  ###     ###     */
+       0x3F, 0xE0, /*   #########      */
+       0x0F, 0x80, /*     #####        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0xC0, /*        ###       */
+       0x00, 0xF8, /*         #####    */
+       0x00, 0x78, /*          ####    */
+
+       /* @1596 'R' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFE, 0x00, /* #######          */
+       0xFF, 0x00, /* ########         */
+       0xC3, 0x80, /* ##    ###        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC3, 0x80, /* ##    ###        */
+       0xFF, 0x00, /* ########         */
+       0xFC, 0x00, /* ######           */
+       0xC6, 0x00, /* ##   ##          */
+       0xC7, 0x00, /* ##   ###         */
+       0xC3, 0x00, /* ##    ##         */
+       0xC1, 0x80, /* ##     ##        */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xE0, /* ##      ###      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1634 'S' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0xC0, /*  #########       */
+       0xE0, 0x40, /* ###      #       */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xE0, 0x00, /* ###              */
+       0x7F, 0x00, /*  #######         */
+       0x1F, 0xC0, /*    #######       */
+       0x00, 0xE0, /*         ###      */
+       0x00, 0x60, /*          ##      */
+       0x00, 0x60, /*          ##      */
+       0xC0, 0xE0, /* ##      ###      */
+       0xFF, 0xC0, /* ##########       */
+       0x7F, 0x00, /*  #######         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1672 'T' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1710 'U' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x61, 0x80, /*  ##    ##        */
+       0x7F, 0x80, /*  ########        */
+       0x3F, 0x00, /*   ######         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1748 'V' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xC0, 0x18, /* ##         ##    */
+       0x60, 0x30, /*  ##       ##     */
+       0x60, 0x30, /*  ##       ##     */
+       0x60, 0x30, /*  ##       ##     */
+       0x30, 0x60, /*   ##     ##      */
+       0x30, 0x60, /*   ##     ##      */
+       0x38, 0xE0, /*   ###   ###      */
+       0x18, 0xC0, /*    ##   ##       */
+       0x18, 0xC0, /*    ##   ##       */
+       0x0D, 0x80, /*     ## ##        */
+       0x0D, 0x80, /*     ## ##        */
+       0x0D, 0x80, /*     ## ##        */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1786 'W' (17 pixels wide) */
+       0x00, 0x00, 0x00, /*                          */
+       0xC1, 0xC1, 0x80, /* ##     ###     ##        */
+       0xC1, 0xC1, 0x80, /* ##     ###     ##        */
+       0x61, 0x43, 0x00, /*  ##    # #    ##         */
+       0x61, 0x43, 0x00, /*  ##    # #    ##         */
+       0x61, 0x63, 0x00, /*  ##    # ##   ##         */
+       0x63, 0x63, 0x00, /*  ##   ## ##   ##         */
+       0x32, 0x26, 0x00, /*   ##  #   #  ##          */
+       0x32, 0x26, 0x00, /*   ##  #   #  ##          */
+       0x32, 0x36, 0x00, /*   ##  #   ## ##          */
+       0x36, 0x36, 0x00, /*   ## ##   ## ##          */
+       0x1E, 0x14, 0x00, /*    ####    # #           */
+       0x1C, 0x1C, 0x00, /*    ###     ###           */
+       0x1C, 0x1C, 0x00, /*    ###     ###           */
+       0x0C, 0x1C, 0x00, /*     ##     ###           */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+
+       /* @1843 'X' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE0, 0xE0, /* ###     ###      */
+       0x60, 0xC0, /*  ##     ##       */
+       0x31, 0x80, /*   ##   ##        */
+       0x31, 0x80, /*   ##   ##        */
+       0x1B, 0x00, /*    ## ##         */
+       0x0A, 0x00, /*     # #          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0B, 0x00, /*     # ##         */
+       0x1B, 0x00, /*    ## ##         */
+       0x31, 0x80, /*   ##   ##        */
+       0x31, 0x80, /*   ##   ##        */
+       0x60, 0xC0, /*  ##     ##       */
+       0xE0, 0xE0, /* ###     ###      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1881 'Y' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE0, 0x70, /* ###      ###     */
+       0x60, 0x60, /*  ##      ##      */
+       0x30, 0xC0, /*   ##    ##       */
+       0x30, 0xC0, /*   ##    ##       */
+       0x19, 0x80, /*    ##  ##        */
+       0x1F, 0x80, /*    ######        */
+       0x0F, 0x00, /*     ####         */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1919 'Z' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0xE0, /*         ###      */
+       0x01, 0xC0, /*        ###       */
+       0x03, 0x80, /*       ###        */
+       0x07, 0x00, /*      ###         */
+       0x06, 0x00, /*      ##          */
+       0x0C, 0x00, /*     ##           */
+       0x1C, 0x00, /*    ###           */
+       0x38, 0x00, /*   ###            */
+       0x70, 0x00, /*  ###             */
+       0xE0, 0x00, /* ###              */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1957 '[' (5 pixels wide) */
+       0xF8, /* #####    */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xF8, /* #####    */
+
+       /* @1976 '\' (8 pixels wide) */
+       0xC0, /* ##       */
+       0xE0, /* ###      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x70, /*  ###     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x38, /*   ###    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x1C, /*    ###   */
+       0x0C, /*     ##   */
+       0x0C, /*     ##   */
+       0x0E, /*     ###  */
+       0x06, /*      ##  */
+       0x06, /*      ##  */
+       0x07, /*      ### */
+       0x03, /*       ## */
+       0x00, /*          */
+
+       /* @1995 ']' (5 pixels wide) */
+       0xF8, /* #####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0xF8, /* #####    */
+
+       /* @2014 '^' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x06, 0x00, /*      ##          */
+       0x0F, 0x00, /*     ####         */
+       0x19, 0x80, /*    ##  ##        */
+       0x11, 0x80, /*    #   ##        */
+       0x30, 0xC0, /*   ##    ##       */
+       0x60, 0x60, /*  ##      ##      */
+       0xC0, 0x30, /* ##        ##     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2052 '_' (12 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, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0x00, 0x00, /*                  */
+
+       /* @2090 '`' (4 pixels wide) */
+       0xE0, /* ###      */
+       0x60, /*  ##      */
+       0x30, /*   ##     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2109 'a' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x7F, /*  ####### */
+       0x03, /*       ## */
+       0x03, /*       ## */
+       0x3F, /*   ###### */
+       0x7F, /*  ####### */
+       0xE3, /* ###   ## */
+       0xC3, /* ##    ## */
+       0xC7, /* ##   ### */
+       0xFF, /* ######## */
+       0x7B, /*  #### ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2128 'b' (9 pixels wide) */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xDE, 0x00, /* ## ####          */
+       0xFF, 0x00, /* ########         */
+       0xE3, 0x80, /* ###   ###        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC3, 0x00, /* ##    ##         */
+       0xFF, 0x00, /* ########         */
+       0xDE, 0x00, /* ## ####          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2166 'c' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x1E, /*    ####  */
+       0x7F, /*  ####### */
+       0x61, /*  ##    # */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x61, /*  ##    # */
+       0x7F, /*  ####### */
+       0x1E, /*    ####  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2185 'd' (9 pixels wide) */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xE3, 0x80, /* ###   ###        */
+       0x7F, 0x80, /*  ########        */
+       0x3D, 0x80, /*   #### ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2223 'e' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x7F, 0x00, /*  #######         */
+       0x63, 0x80, /*  ##   ###        */
+       0xC1, 0x80, /* ##     ##        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0x60, 0x80, /*  ##     #        */
+       0x7F, 0x80, /*  ########        */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2261 'f' (6 pixels wide) */
+       0x3C, /*   ####   */
+       0x7C, /*  #####   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xF8, /* #####    */
+       0xF8, /* #####    */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2280 'g' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xE3, 0x80, /* ###   ###        */
+       0x7F, 0x80, /*  ########        */
+       0x3D, 0x80, /*   #### ##        */
+       0x01, 0x80, /*        ##        */
+       0x03, 0x80, /*       ###        */
+       0x7F, 0x00, /*  #######         */
+       0x7E, 0x00, /*  ######          */
+
+       /* @2318 'h' (8 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xDE, /* ## ####  */
+       0xFF, /* ######## */
+       0xE3, /* ###   ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2337 'i' (2 pixels wide) */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2356 'j' (5 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0xF8, /* #####    */
+       0xF0, /* ####     */
+
+       /* @2375 'k' (9 pixels wide) */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC3, 0x80, /* ##    ###        */
+       0xC3, 0x00, /* ##    ##         */
+       0xC6, 0x00, /* ##   ##          */
+       0xCC, 0x00, /* ##  ##           */
+       0xD8, 0x00, /* ## ##            */
+       0xF8, 0x00, /* #####            */
+       0xF8, 0x00, /* #####            */
+       0xCC, 0x00, /* ##  ##           */
+       0xC6, 0x00, /* ##   ##          */
+       0xC7, 0x00, /* ##   ###         */
+       0xC3, 0x80, /* ##    ###        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2413 'l' (2 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2432 'm' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xDE, 0x78, /* ## ####  ####    */
+       0xFF, 0xFC, /* ##############   */
+       0xE3, 0x8C, /* ###   ###   ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2470 'n' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xDE, /* ## ####  */
+       0xFF, /* ######## */
+       0xE3, /* ###   ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2489 'o' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0xC0, 0xC0, /* ##      ##       */
+       0x61, 0x80, /*  ##    ##        */
+       0x7F, 0x80, /*  ########        */
+       0x1E, 0x00, /*    ####          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2527 'p' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xDE, 0x00, /* ## ####          */
+       0xFF, 0x00, /* ########         */
+       0xE3, 0x80, /* ###   ###        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC3, 0x00, /* ##    ##         */
+       0xFF, 0x00, /* ########         */
+       0xFE, 0x00, /* #######          */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+       0xC0, 0x00, /* ##               */
+
+       /* @2565 'q' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0x80, /*  ########        */
+       0x61, 0x80, /*  ##    ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xC1, 0x80, /* ##     ##        */
+       0xE3, 0x80, /* ###   ###        */
+       0x7F, 0x80, /*  ########        */
+       0x3D, 0x80, /*   #### ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+       0x01, 0x80, /*        ##        */
+
+       /* @2603 'r' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xDC, /* ## ###   */
+       0xFC, /* ######   */
+       0xE0, /* ###      */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2622 's' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x7F, /*  ####### */
+       0xC1, /* ##     # */
+       0xC0, /* ##       */
+       0xF0, /* ####     */
+       0x7E, /*  ######  */
+       0x0F, /*     #### */
+       0x03, /*       ## */
+       0x83, /* #     ## */
+       0xFE, /* #######  */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2641 't' (6 pixels wide) */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0x7C, /*  #####   */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2660 'u' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xC7, /* ##   ### */
+       0x7F, /*  ####### */
+       0x7B, /*  #### ## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2679 'v' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x22, 0x00, /*   #   #          */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x14, 0x00, /*    # #           */
+       0x14, 0x00, /*    # #           */
+       0x1C, 0x00, /*    ###           */
+       0x08, 0x00, /*     #            */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2717 'w' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0xC3, 0x0C, /* ##    ##    ##   */
+       0x63, 0x98, /*  ##   ###  ##    */
+       0x67, 0x98, /*  ##  ####  ##    */
+       0x64, 0x98, /*  ##  #  #  ##    */
+       0x64, 0x98, /*  ##  #  #  ##    */
+       0x2C, 0xD0, /*   # ##  ## #     */
+       0x38, 0x50, /*   ###    # #     */
+       0x38, 0x70, /*   ###    ###     */
+       0x38, 0x70, /*   ###    ###     */
+       0x18, 0x20, /*    ##     #      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2755 'x' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xE3, 0x80, /* ###   ###        */
+       0x63, 0x00, /*  ##   ##         */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x1C, 0x00, /*    ###           */
+       0x08, 0x00, /*     #            */
+       0x1C, 0x00, /*    ###           */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x63, 0x00, /*  ##   ##         */
+       0xE3, 0x80, /* ###   ###        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2793 'y' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xC1, 0x80, /* ##     ##        */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x63, 0x00, /*  ##   ##         */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x36, 0x00, /*   ## ##          */
+       0x14, 0x00, /*    # #           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x08, 0x00, /*     #            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x30, 0x00, /*   ##             */
+       0x30, 0x00, /*   ##             */
+
+       /* @2831 'z' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x07, /*      ### */
+       0x06, /*      ##  */
+       0x0C, /*     ##   */
+       0x18, /*    ##    */
+       0x30, /*   ##     */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2850 '{' (9 pixels wide) */
+       0x03, 0x80, /*       ###        */
+       0x06, 0x00, /*      ##          */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x18, 0x00, /*    ##            */
+       0xE0, 0x00, /* ###              */
+       0x18, 0x00, /*    ##            */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x0C, 0x00, /*     ##           */
+       0x06, 0x00, /*      ##          */
+       0x03, 0x80, /*       ###        */
+
+       /* @2888 '|' (2 pixels wide) */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+       0xC0, /* ##       */
+
+       /* @2907 '}' (9 pixels wide) */
+       0xE0, 0x00, /* ###              */
+       0x30, 0x00, /*   ##             */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x0C, 0x00, /*     ##           */
+       0x03, 0x80, /*       ###        */
+       0x0C, 0x00, /*     ##           */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x18, 0x00, /*    ##            */
+       0x30, 0x00, /*   ##             */
+       0xE0, 0x00, /* ###              */
+
+       /* @2945 '~' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x38, 0x30, /*   ###     ##     */
+       0x7C, 0x30, /*  #####    ##     */
+       0xE6, 0x70, /* ###  ##  ###     */
+       0xC3, 0xE0, /* ##    #####      */
+       0xC1, 0xC0, /* ##     ###       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+};
+
+/* Character descriptors for Verdana 14pt */
+/* { [Char width in bits], [Offset into verdana14ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO verdana14ptDescriptors[] = 
+{
+       {5, 0},                 /*   */ 
+       {2, 19},                /* ! */ 
+       {6, 38},                /* " */ 
+       {12, 57},               /* # */ 
+       {9, 95},                /* $ */ 
+       {18, 133},              /* % */ 
+       {13, 190},              /* & */ 
+       {2, 228},               /* ' */ 
+       {6, 247},               /* ( */ 
+       {6, 266},               /* ) */ 
+       {9, 285},               /* * */ 
+       {12, 323},              /* + */ 
+       {4, 361},               /* , */ 
+       {6, 380},               /* - */ 
+       {2, 399},               /* . */ 
+       {8, 418},               /* / */ 
+       {10, 437},              /* 0 */ 
+       {8, 475},               /* 1 */ 
+       {9, 494},               /* 2 */ 
+       {9, 532},               /* 3 */ 
+       {10, 570},              /* 4 */ 
+       {9, 608},               /* 5 */ 
+       {10, 646},              /* 6 */ 
+       {9, 684},               /* 7 */ 
+       {10, 722},              /* 8 */ 
+       {10, 760},              /* 9 */ 
+       {2, 798},               /* : */ 
+       {4, 817},               /* ; */ 
+       {11, 836},              /* < */ 
+       {11, 874},              /* = */ 
+       {11, 912},              /* > */ 
+       {8, 950},               /* ? */ 
+       {16, 969},              /* @ */ 
+       {13, 1007},             /* A */ 
+       {10, 1045},             /* B */ 
+       {11, 1083},             /* C */ 
+       {12, 1121},             /* D */ 
+       {9, 1159},              /* E */ 
+       {9, 1197},              /* F */ 
+       {13, 1235},             /* G */ 
+       {10, 1273},             /* H */ 
+       {6, 1311},              /* I */ 
+       {7, 1330},              /* J */ 
+       {11, 1349},             /* K */ 
+       {9, 1387},              /* L */ 
+       {12, 1425},             /* M */ 
+       {10, 1463},             /* N */ 
+       {13, 1501},             /* O */ 
+       {8, 1539},              /* P */ 
+       {13, 1558},             /* Q */ 
+       {11, 1596},             /* R */ 
+       {11, 1634},             /* S */ 
+       {12, 1672},             /* T */ 
+       {10, 1710},             /* U */ 
+       {13, 1748},             /* V */ 
+       {17, 1786},             /* W */ 
+       {11, 1843},             /* X */ 
+       {12, 1881},             /* Y */ 
+       {11, 1919},             /* Z */ 
+       {5, 1957},              /* [ */ 
+       {8, 1976},              /* \ */ 
+       {5, 1995},              /* ] */ 
+       {12, 2014},             /* ^ */ 
+       {12, 2052},             /* _ */ 
+       {4, 2090},              /* ` */ 
+       {8, 2109},              /* a */ 
+       {9, 2128},              /* b */ 
+       {8, 2166},              /* c */ 
+       {9, 2185},              /* d */ 
+       {9, 2223},              /* e */ 
+       {6, 2261},              /* f */ 
+       {9, 2280},              /* g */ 
+       {8, 2318},              /* h */ 
+       {2, 2337},              /* i */ 
+       {5, 2356},              /* j */ 
+       {9, 2375},              /* k */ 
+       {2, 2413},              /* l */ 
+       {14, 2432},             /* m */ 
+       {8, 2470},              /* n */ 
+       {10, 2489},             /* o */ 
+       {9, 2527},              /* p */ 
+       {9, 2565},              /* q */ 
+       {6, 2603},              /* r */ 
+       {8, 2622},              /* s */ 
+       {6, 2641},              /* t */ 
+       {8, 2660},              /* u */ 
+       {9, 2679},              /* v */ 
+       {14, 2717},             /* w */ 
+       {9, 2755},              /* x */ 
+       {9, 2793},              /* y */ 
+       {8, 2831},              /* z */ 
+       {9, 2850},              /* { */ 
+       {2, 2888},              /* | */ 
+       {9, 2907},              /* } */ 
+       {12, 2945},             /* ~ */ 
+};
+
+/* Font information for Verdana 14pt */
+const FONT_INFO verdana14ptFontInfo =
+{
+       19, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       verdana14ptDescriptors, /*  Character descriptor array */
+       verdana14ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/verdana14.h b/drivers/displays/tft/fonts/verdana14.h
new file mode 100644 (file)
index 0000000..9a84419
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __VERDANA_14__
+#define __VERDANA_14__
+
+#include "bitmapfonts.h"
+
+/* Font data for Verdana 14pt */
+extern const uint8_t verdana14ptBitmaps[];
+extern const FONT_INFO verdana14ptFontInfo;
+extern const FONT_CHAR_INFO verdana14ptDescriptors[];
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/verdana9.c b/drivers/displays/tft/fonts/verdana9.c
new file mode 100644 (file)
index 0000000..42f5792
--- /dev/null
@@ -0,0 +1,1450 @@
+#include "verdana9.h"
+
+/* 
+**  Font data for Verdana 9pt
+*/
+
+/* Character bitmaps for Verdana 9pt */
+const uint8_t verdana9ptBitmaps[] = 
+{
+       /* @0 ' ' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @12 '!' (1 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @24 '"' (4 pixels wide) */
+       0x90, /* #  #     */
+       0x90, /* #  #     */
+       0x90, /* #  #     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @36 '#' (8 pixels wide) */
+       0x00, /*          */
+       0x12, /*    #  #  */
+       0x12, /*    #  #  */
+       0x24, /*   #  #   */
+       0x7F, /*  ####### */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0xFE, /* #######  */
+       0x48, /*  #  #    */
+       0x48, /*  #  #    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @48 '$' (6 pixels wide) */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x7C, /*  #####   */
+       0xA0, /* # #      */
+       0xA0, /* # #      */
+       0x60, /*  ##      */
+       0x38, /*   ###    */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0xF8, /* #####    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+
+       /* @60 '%' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x61, 0x00, /*  ##    #         */
+       0x92, 0x00, /* #  #  #          */
+       0x92, 0x00, /* #  #  #          */
+       0x94, 0x00, /* #  # #           */
+       0x64, 0xC0, /*  ##  #  ##       */
+       0x05, 0x20, /*      # #  #      */
+       0x09, 0x20, /*     #  #  #      */
+       0x09, 0x20, /*     #  #  #      */
+       0x10, 0xC0, /*    #    ##       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @84 '&' (8 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x72, /*  ###  #  */
+       0x8A, /* #   # #  */
+       0x84, /* #    #   */
+       0x86, /* #    ##  */
+       0x79, /*  ####  # */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @96 ''' (1 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @108 '(' (3 pixels wide) */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+
+       /* @120 ')' (3 pixels wide) */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+
+       /* @132 '*' (5 pixels wide) */
+       0x20, /*   #      */
+       0xA8, /* # # #    */
+       0x70, /*  ###     */
+       0xA8, /* # # #    */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @144 '+' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @156 ',' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+
+       /* @168 '-' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @180 '.' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @192 '/' (5 pixels wide) */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+
+       /* @204 '0' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @216 '1' (5 pixels wide) */
+       0x00, /*          */
+       0x20, /*   #      */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @228 '2' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x30, /*   ##     */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @240 '3' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x38, /*   ###    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @252 '4' (7 pixels wide) */
+       0x00, /*          */
+       0x08, /*     #    */
+       0x18, /*    ##    */
+       0x28, /*   # #    */
+       0x48, /*  #  #    */
+       0x88, /* #   #    */
+       0xFE, /* #######  */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @264 '5' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @276 '6' (6 pixels wide) */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @288 '7' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @300 '8' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @312 '9' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x7C, /*  #####   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @324 ':' (1 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @336 ';' (2 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x80, /* #        */
+
+       /* @348 '<' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x06, /*      ##  */
+       0x18, /*    ##    */
+       0x60, /*  ##      */
+       0x80, /* #        */
+       0x60, /*  ##      */
+       0x18, /*    ##    */
+       0x06, /*      ##  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @360 '=' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @372 '>' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xC0, /* ##       */
+       0x30, /*   ##     */
+       0x0C, /*     ##   */
+       0x02, /*       #  */
+       0x0C, /*     ##   */
+       0x30, /*   ##     */
+       0xC0, /* ##       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @384 '?' (5 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @396 '@' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x61, 0x80, /*  ##    ##        */
+       0x4E, 0x80, /*  #  ### #        */
+       0x92, 0x40, /* #  #  #  #       */
+       0x92, 0x40, /* #  #  #  #       */
+       0x92, 0x40, /* #  #  #  #       */
+       0x92, 0x40, /* #  #  #  #       */
+       0x4F, 0x80, /*  #  #####        */
+       0x60, 0x00, /*  ##              */
+       0x1E, 0x00, /*    ####          */
+       0x00, 0x00, /*                  */
+
+       /* @420 'A' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x7E, /*  ######  */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @432 'B' (6 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @444 'C' (7 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @456 'D' (7 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @468 'E' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @480 'F' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @492 'G' (7 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x8E, /* #   ###  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @504 'H' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0xFE, /* #######  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @516 'I' (3 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @528 'J' (4 pixels wide) */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @540 'K' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @552 'L' (6 pixels wide) */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @564 'M' (8 pixels wide) */
+       0x00, /*          */
+       0xC3, /* ##    ## */
+       0xC3, /* ##    ## */
+       0xA5, /* # #  # # */
+       0xA5, /* # #  # # */
+       0xA5, /* # #  # # */
+       0x99, /* #  ##  # */
+       0x99, /* #  ##  # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @576 'N' (7 pixels wide) */
+       0x00, /*          */
+       0xC2, /* ##    #  */
+       0xC2, /* ##    #  */
+       0xA2, /* # #   #  */
+       0xA2, /* # #   #  */
+       0x92, /* #  #  #  */
+       0x8A, /* #   # #  */
+       0x8A, /* #   # #  */
+       0x86, /* #    ##  */
+       0x86, /* #    ##  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @588 'O' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @600 'P' (6 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @612 'Q' (8 pixels wide) */
+       0x00, /*          */
+       0x3C, /*   ####   */
+       0x42, /*  #    #  */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x42, /*  #    #  */
+       0x3C, /*   ####   */
+       0x04, /*      #   */
+       0x03, /*       ## */
+
+       /* @624 'R' (7 pixels wide) */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x84, /* #    #   */
+       0x82, /* #     #  */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @636 'S' (6 pixels wide) */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x78, /*  ####    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @648 'T' (7 pixels wide) */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @660 'U' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x82, /* #     #  */
+       0x44, /*  #   #   */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @672 'V' (8 pixels wide) */
+       0x00, /*          */
+       0x81, /* #      # */
+       0x81, /* #      # */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x42, /*  #    #  */
+       0x24, /*   #  #   */
+       0x24, /*   #  #   */
+       0x18, /*    ##    */
+       0x18, /*    ##    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @684 'W' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x84, 0x20, /* #    #    #      */
+       0x84, 0x20, /* #    #    #      */
+       0x8A, 0x20, /* #   # #   #      */
+       0x8A, 0x20, /* #   # #   #      */
+       0x4A, 0x40, /*  #  # #  #       */
+       0x51, 0x40, /*  # #   # #       */
+       0x51, 0x40, /*  # #   # #       */
+       0x20, 0x80, /*   #     #        */
+       0x20, 0x80, /*   #     #        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @708 'X' (6 pixels wide) */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x48, /*  #  #    */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x30, /*   ##     */
+       0x48, /*  #  #    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @720 'Y' (7 pixels wide) */
+       0x00, /*          */
+       0x82, /* #     #  */
+       0x44, /*  #   #   */
+       0x44, /*  #   #   */
+       0x28, /*   # #    */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @732 'Z' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0x04, /*      #   */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xFC, /* ######   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @744 '[' (3 pixels wide) */
+       0xE0, /* ###      */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xE0, /* ###      */
+
+       /* @756 '\' (5 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x10, /*    #     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+
+       /* @768 ']' (3 pixels wide) */
+       0xE0, /* ###      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xE0, /* ###      */
+
+       /* @780 '^' (8 pixels wide) */
+       0x00, /*          */
+       0x18, /*    ##    */
+       0x24, /*   #  #   */
+       0x42, /*  #    #  */
+       0x81, /* #      # */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @792 '_' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFF, /* ######## */
+
+       /* @804 '`' (2 pixels wide) */
+       0x80, /* #        */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @816 'a' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x7C, /*  #####   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x7C, /*  #####   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @828 'b' (6 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @840 'c' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x70, /*  ###     */
+       0x88, /* #   #    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x88, /* #   #    */
+       0x70, /*  ###     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @852 'd' (6 pixels wide) */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+       0x7C, /*  #####   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @864 'e' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xFC, /* ######   */
+       0x80, /* #        */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @876 'f' (4 pixels wide) */
+       0x30, /*   ##     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xF0, /* ####     */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @888 'g' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x04, /*      #   */
+       0x78, /*  ####    */
+
+       /* @900 'h' (6 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @912 'i' (1 pixels wide) */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @924 'j' (3 pixels wide) */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+       0x60, /*  ##      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+
+       /* @936 'k' (5 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x88, /* #   #    */
+       0x90, /* #  #     */
+       0xA0, /* # #      */
+       0xC0, /* ##       */
+       0xA0, /* # #      */
+       0x90, /* #  #     */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @948 'l' (1 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @960 'm' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF7, 0x00, /* #### ###         */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @984 'n' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @996 'o' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1008 'p' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB8, /* # ###    */
+       0xC4, /* ##   #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0xF8, /* #####    */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1020 'q' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x7C, /*  #####   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x04, /*      #   */
+       0x04, /*      #   */
+
+       /* @1032 'r' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xB0, /* # ##     */
+       0xC0, /* ##       */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1044 's' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x70, /*  ###     */
+       0x08, /*     #    */
+       0x08, /*     #    */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1056 't' (5 pixels wide) */
+       0x00, /*          */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0xF8, /* #####    */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x40, /*  #       */
+       0x38, /*   ###    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1068 'u' (6 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x84, /* #    #   */
+       0x8C, /* #   ##   */
+       0x74, /*  ### #   */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1080 'v' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1092 'w' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x88, 0x80, /* #   #   #        */
+       0x88, 0x80, /* #   #   #        */
+       0x55, 0x00, /*  # # # #         */
+       0x55, 0x00, /*  # # # #         */
+       0x55, 0x00, /*  # # # #         */
+       0x22, 0x00, /*   #   #          */
+       0x22, 0x00, /*   #   #          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1116 'x' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x50, /*  # #     */
+       0x20, /*   #      */
+       0x50, /*  # #     */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1128 'y' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x88, /* #   #    */
+       0x88, /* #   #    */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x50, /*  # #     */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x40, /*  #       */
+
+       /* @1140 'z' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF8, /* #####    */
+       0x08, /*     #    */
+       0x10, /*    #     */
+       0x20, /*   #      */
+       0x40, /*  #       */
+       0x80, /* #        */
+       0xF8, /* #####    */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1152 '{' (5 pixels wide) */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x18, /*    ##    */
+
+       /* @1164 '|' (1 pixels wide) */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+       0x80, /* #        */
+
+       /* @1176 '}' (5 pixels wide) */
+       0xC0, /* ##       */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x18, /*    ##    */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0x20, /*   #      */
+       0xC0, /* ##       */
+
+       /* @1188 '~' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x61, /*  ##    # */
+       0x99, /* #  ##  # */
+       0x86, /* #    ##  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+};
+
+/* Character descriptors for Verdana 9pt */
+/* { [Char width in bits], [Offset into verdana9ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO verdana9ptDescriptors[] = 
+{
+       {8, 0},                 /*   */ 
+       {1, 12},                /* ! */ 
+       {4, 24},                /* " */ 
+       {8, 36},                /* # */ 
+       {6, 48},                /* $ */ 
+       {11, 60},               /* % */ 
+       {8, 84},                /* & */ 
+       {1, 96},                /* ' */ 
+       {3, 108},               /* ( */ 
+       {3, 120},               /* ) */ 
+       {5, 132},               /* * */ 
+       {7, 144},               /* + */ 
+       {2, 156},               /* , */ 
+       {4, 168},               /* - */ 
+       {1, 180},               /* . */ 
+       {5, 192},               /* / */ 
+       {6, 204},               /* 0 */ 
+       {5, 216},               /* 1 */ 
+       {6, 228},               /* 2 */ 
+       {6, 240},               /* 3 */ 
+       {7, 252},               /* 4 */ 
+       {6, 264},               /* 5 */ 
+       {6, 276},               /* 6 */ 
+       {6, 288},               /* 7 */ 
+       {6, 300},               /* 8 */ 
+       {6, 312},               /* 9 */ 
+       {1, 324},               /* : */ 
+       {2, 336},               /* ; */ 
+       {7, 348},               /* < */ 
+       {7, 360},               /* = */ 
+       {7, 372},               /* > */ 
+       {5, 384},               /* ? */ 
+       {10, 396},              /* @ */ 
+       {8, 420},               /* A */ 
+       {6, 432},               /* B */ 
+       {7, 444},               /* C */ 
+       {7, 456},               /* D */ 
+       {6, 468},               /* E */ 
+       {6, 480},               /* F */ 
+       {7, 492},               /* G */ 
+       {7, 504},               /* H */ 
+       {3, 516},               /* I */ 
+       {4, 528},               /* J */ 
+       {6, 540},               /* K */ 
+       {6, 552},               /* L */ 
+       {8, 564},               /* M */ 
+       {7, 576},               /* N */ 
+       {8, 588},               /* O */ 
+       {6, 600},               /* P */ 
+       {8, 612},               /* Q */ 
+       {7, 624},               /* R */ 
+       {6, 636},               /* S */ 
+       {7, 648},               /* T */ 
+       {7, 660},               /* U */ 
+       {8, 672},               /* V */ 
+       {11, 684},              /* W */ 
+       {6, 708},               /* X */ 
+       {7, 720},               /* Y */ 
+       {6, 732},               /* Z */ 
+       {3, 744},               /* [ */ 
+       {5, 756},               /* \ */ 
+       {3, 768},               /* ] */ 
+       {8, 780},               /* ^ */ 
+       {8, 792},               /* _ */ 
+       {2, 804},               /* ` */ 
+       {6, 816},               /* a */ 
+       {6, 828},               /* b */ 
+       {5, 840},               /* c */ 
+       {6, 852},               /* d */ 
+       {6, 864},               /* e */ 
+       {4, 876},               /* f */ 
+       {6, 888},               /* g */ 
+       {6, 900},               /* h */ 
+       {1, 912},               /* i */ 
+       {3, 924},               /* j */ 
+       {5, 936},               /* k */ 
+       {1, 948},               /* l */ 
+       {9, 960},               /* m */ 
+       {6, 984},               /* n */ 
+       {6, 996},               /* o */ 
+       {6, 1008},              /* p */ 
+       {6, 1020},              /* q */ 
+       {4, 1032},              /* r */ 
+       {5, 1044},              /* s */ 
+       {5, 1056},              /* t */ 
+       {6, 1068},              /* u */ 
+       {5, 1080},              /* v */ 
+       {9, 1092},              /* w */ 
+       {5, 1116},              /* x */ 
+       {5, 1128},              /* y */ 
+       {5, 1140},              /* z */ 
+       {5, 1152},              /* { */ 
+       {1, 1164},              /* | */ 
+       {5, 1176},              /* } */ 
+       {8, 1188},              /* ~ */ 
+};
+
+/* Font information for Verdana 9pt */
+const FONT_INFO verdana9ptFontInfo =
+{
+       12, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       verdana9ptDescriptors, /*  Character descriptor array */
+       verdana9ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/verdana9.h b/drivers/displays/tft/fonts/verdana9.h
new file mode 100644 (file)
index 0000000..57fcfe0
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __VERDANA_9__
+#define __VERDANA_9__
+
+#include "bitmapfonts.h"
+
+/* Font data for Verdana 9pt */
+extern const uint8_t verdana9ptBitmaps[];
+extern const FONT_INFO verdana9ptFontInfo;
+extern const FONT_CHAR_INFO verdana9ptDescriptors[];
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/fonts/verdanabold14.c b/drivers/displays/tft/fonts/verdanabold14.c
new file mode 100644 (file)
index 0000000..5882f5e
--- /dev/null
@@ -0,0 +1,2210 @@
+#include "verdanabold14.h"
+
+/* 
+**  Font data for Verdana Bold 14pt
+*/
+
+/* Character bitmaps for Verdana Bold 14pt */
+const uint8_t verdanabold14ptBitmaps[] = 
+{
+       /* @0 ' ' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @20 '!' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @40 '"' (8 pixels wide) */
+       0x00, /*          */
+       0xE7, /* ###  ### */
+       0xE7, /* ###  ### */
+       0xE7, /* ###  ### */
+       0xE7, /* ###  ### */
+       0xE7, /* ###  ### */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @60 '#' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x06, 0x30, /*      ##   ##     */
+       0x06, 0x30, /*      ##   ##     */
+       0x0E, 0x60, /*     ###  ##      */
+       0x7F, 0xFC, /*  #############   */
+       0x7F, 0xFC, /*  #############   */
+       0x0C, 0x60, /*     ##   ##      */
+       0x0C, 0x60, /*     ##   ##      */
+       0x18, 0xC0, /*    ##   ##       */
+       0xFF, 0xF8, /* #############    */
+       0xFF, 0xF8, /* #############    */
+       0x18, 0xC0, /*    ##   ##       */
+       0x18, 0xC0, /*    ##   ##       */
+       0x31, 0x80, /*   ##   ##        */
+       0x31, 0x80, /*   ##   ##        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @100 '$' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x1F, 0xE0, /*    ########      */
+       0x7F, 0xE0, /*  ##########      */
+       0xFF, 0xE0, /* ###########      */
+       0xF6, 0x00, /* #### ##          */
+       0xFE, 0x00, /* #######          */
+       0x7F, 0xC0, /*  #########       */
+       0x3F, 0xF0, /*   ##########     */
+       0x07, 0xF0, /*      #######     */
+       0xC6, 0xF0, /* ##   ## ####     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xE0, /* ###########      */
+       0x7F, 0x80, /*  ########        */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x06, 0x00, /*      ##          */
+       0x00, 0x00, /*                  */
+
+       /* @140 '%' (22 pixels wide) */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x3C, 0x03, 0x00, /*   ####        ##         */
+       0x7E, 0x06, 0x00, /*  ######      ##          */
+       0xE7, 0x0E, 0x00, /* ###  ###    ###          */
+       0xE7, 0x0C, 0x00, /* ###  ###    ##           */
+       0xE7, 0x18, 0x00, /* ###  ###   ##            */
+       0xE7, 0x18, 0xF0, /* ###  ###   ##   ####     */
+       0xE7, 0x31, 0xF8, /* ###  ###  ##   ######    */
+       0x7E, 0x33, 0x9C, /*  ######   ##  ###  ###   */
+       0x3C, 0x63, 0x9C, /*   ####   ##   ###  ###   */
+       0x00, 0x63, 0x9C, /*          ##   ###  ###   */
+       0x00, 0xC3, 0x9C, /*         ##    ###  ###   */
+       0x01, 0xC3, 0x9C, /*        ###    ###  ###   */
+       0x01, 0x81, 0xF8, /*        ##      ######    */
+       0x03, 0x00, 0xF0, /*       ##        ####     */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+
+       /* @200 '&' (15 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x00, /*    #####         */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0xC0, /*  #########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0x7B, 0xC0, /*  #### ####       */
+       0x3B, 0x80, /*   ### ###        */
+       0x3F, 0x3C, /*   ######  ####   */
+       0x7E, 0x3C, /*  ######   ####   */
+       0xF7, 0xBC, /* #### #### ####   */
+       0xF3, 0xFC, /* ####  ########   */
+       0xF9, 0xF8, /* #####  ######    */
+       0xFF, 0xF8, /* #############    */
+       0x7F, 0xF8, /*  ############    */
+       0x1F, 0x3E, /*    #####  #####  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @240 ''' (3 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @260 '(' (7 pixels wide) */
+       0x00, /*          */
+       0x1E, /*    ####  */
+       0x3C, /*   ####   */
+       0x38, /*   ###    */
+       0x78, /*  ####    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0x78, /*  ####    */
+       0x38, /*   ###    */
+       0x3C, /*   ####   */
+       0x1E, /*    ####  */
+
+       /* @280 ')' (7 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0x78, /*  ####    */
+       0x38, /*   ###    */
+       0x3C, /*   ####   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x0E, /*     ###  */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x3C, /*   ####   */
+       0x38, /*   ###    */
+       0x78, /*  ####    */
+       0xF0, /* ####     */
+
+       /* @300 '*' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x0C, 0x00, /*     ##           */
+       0x4C, 0x80, /*  #  ##  #        */
+       0xED, 0xC0, /* ### ## ###       */
+       0x3F, 0x00, /*   ######         */
+       0x1E, 0x00, /*    ####          */
+       0x3F, 0x00, /*   ######         */
+       0xED, 0xC0, /* ### ## ###       */
+       0x4C, 0x80, /*  #  ##  #        */
+       0x0C, 0x00, /*     ##           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @340 '+' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0xFF, 0xF8, /* #############    */
+       0xFF, 0xF8, /* #############    */
+       0xFF, 0xF8, /* #############    */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @380 ',' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @400 '-' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xFE, /* #######  */
+       0xFE, /* #######  */
+       0xFE, /* #######  */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @420 '.' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @440 '/' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x01, 0xC0, /*        ###       */
+       0x03, 0x80, /*       ###        */
+       0x03, 0x80, /*       ###        */
+       0x03, 0x80, /*       ###        */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x38, 0x00, /*   ###            */
+       0x38, 0x00, /*   ###            */
+       0x70, 0x00, /*  ###             */
+       0x70, 0x00, /*  ###             */
+       0x70, 0x00, /*  ###             */
+       0xE0, 0x00, /* ###              */
+       0x00, 0x00, /*                  */
+
+       /* @480 '0' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x80, /*    ######        */
+       0x3F, 0xC0, /*   ########       */
+       0x7F, 0xE0, /*  ##########      */
+       0xF9, 0xF0, /* #####  #####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF9, 0xF0, /* #####  #####     */
+       0x7F, 0xE0, /*  ##########      */
+       0x3F, 0xC0, /*   ########       */
+       0x1F, 0x80, /*    ######        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @520 '1' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0xFE, 0x00, /* #######          */
+       0xFE, 0x00, /* #######          */
+       0xFE, 0x00, /* #######          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @560 '2' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x7F, 0x00, /*  #######         */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xC0, /* ##########       */
+       0x87, 0xC0, /* #    #####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x0F, 0x00, /*     ####         */
+       0x3E, 0x00, /*   #####          */
+       0x78, 0x00, /*  ####            */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @600 '3' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x7F, 0xC0, /*  #########       */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xF0, /* ############     */
+       0xC0, 0xF0, /* ##      ####     */
+       0x00, 0xF0, /*         ####     */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0x80, /*     #####        */
+       0x0F, 0xE0, /*     #######      */
+       0x00, 0xF0, /*         ####     */
+       0x00, 0xF0, /*         ####     */
+       0xC1, 0xF0, /* ##     #####     */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x7F, 0x80, /*  ########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @640 '4' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0xC0, /*      #####       */
+       0x07, 0xC0, /*      #####       */
+       0x0F, 0xC0, /*     ######       */
+       0x1F, 0xC0, /*    #######       */
+       0x3B, 0xC0, /*   ### ####       */
+       0x33, 0xC0, /*   ##  ####       */
+       0x63, 0xC0, /*  ##   ####       */
+       0xE3, 0xC0, /* ###   ####       */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @680 '5' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x7F, 0xE0, /*  ##########      */
+       0x7F, 0xE0, /*  ##########      */
+       0x7F, 0xE0, /*  ##########      */
+       0x78, 0x00, /*  ####            */
+       0x78, 0x00, /*  ####            */
+       0x7F, 0x80, /*  ########        */
+       0x7F, 0xC0, /*  #########       */
+       0x7F, 0xE0, /*  ##########      */
+       0x01, 0xE0, /*        ####      */
+       0x01, 0xE0, /*        ####      */
+       0xC3, 0xE0, /* ##    #####      */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0x7F, 0x00, /*  #######         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @720 '6' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0xE0, /*      ######      */
+       0x1F, 0xE0, /*    ########      */
+       0x3F, 0xE0, /*   #########      */
+       0x7C, 0x00, /*  #####           */
+       0xF8, 0x00, /* #####            */
+       0xF7, 0xC0, /* #### #####       */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xF0, /* ############     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF8, 0xF0, /* #####   ####     */
+       0x7F, 0xE0, /*  ##########      */
+       0x3F, 0xE0, /*   #########      */
+       0x1F, 0x80, /*    ######        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @760 '7' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x01, 0xF0, /*        #####     */
+       0x01, 0xE0, /*        ####      */
+       0x03, 0xE0, /*       #####      */
+       0x07, 0xC0, /*      #####       */
+       0x07, 0x80, /*      ####        */
+       0x0F, 0x80, /*     #####        */
+       0x0F, 0x00, /*     ####         */
+       0x1F, 0x00, /*    #####         */
+       0x3E, 0x00, /*   #####          */
+       0x3E, 0x00, /*   #####          */
+       0x7C, 0x00, /*  #####           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @800 '8' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x80, /*    ######        */
+       0x7F, 0xE0, /*  ##########      */
+       0xFF, 0xF0, /* ############     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0x7F, 0xE0, /*  ##########      */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0xE0, /*  ##########      */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF8, 0xF0, /* #####   ####     */
+       0xFF, 0xF0, /* ############     */
+       0x7F, 0xE0, /*  ##########      */
+       0x1F, 0x80, /*    ######        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @840 '9' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x80, /*    ######        */
+       0x7F, 0xC0, /*  #########       */
+       0x7F, 0xE0, /*  ##########      */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xFF, 0xF0, /* ############     */
+       0x7F, 0xF0, /*  ###########     */
+       0x3E, 0xF0, /*   ##### ####     */
+       0x01, 0xE0, /*        ####      */
+       0x03, 0xE0, /*       #####      */
+       0x7F, 0xC0, /*  #########       */
+       0x7F, 0x80, /*  ########        */
+       0x7E, 0x00, /*  ######          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @880 ':' (4 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @900 ';' (5 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x38, /*   ###    */
+       0x70, /*  ###     */
+       0x70, /*  ###     */
+       0x60, /*  ##      */
+       0x60, /*  ##      */
+       0xE0, /* ###      */
+       0xC0, /* ##       */
+       0x00, /*          */
+
+       /* @920 '<' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x10, /*            #     */
+       0x00, 0xF0, /*         ####     */
+       0x03, 0xF0, /*       ######     */
+       0x0F, 0xE0, /*     #######      */
+       0x7F, 0x00, /*  #######         */
+       0xFC, 0x00, /* ######           */
+       0xFC, 0x00, /* ######           */
+       0x7F, 0x00, /*  #######         */
+       0x0F, 0xE0, /*     #######      */
+       0x03, 0xF0, /*       ######     */
+       0x00, 0xF0, /*         ####     */
+       0x00, 0x10, /*            #     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @960 '=' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1000 '>' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x80, 0x00, /* #                */
+       0xF0, 0x00, /* ####             */
+       0xFC, 0x00, /* ######           */
+       0x7F, 0x00, /*  #######         */
+       0x0F, 0xE0, /*     #######      */
+       0x03, 0xF0, /*       ######     */
+       0x03, 0xF0, /*       ######     */
+       0x0F, 0xE0, /*     #######      */
+       0x7F, 0x00, /*  #######         */
+       0xFC, 0x00, /* ######           */
+       0xF0, 0x00, /* ####             */
+       0x80, 0x00, /* #                */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1040 '?' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x7F, 0x00, /*  #######         */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xC0, /* ##########       */
+       0x83, 0xC0, /* #     ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x07, 0x80, /*      ####        */
+       0x1F, 0x00, /*    #####         */
+       0x3C, 0x00, /*   ####           */
+       0x38, 0x00, /*   ###            */
+       0x38, 0x00, /*   ###            */
+       0x00, 0x00, /*                  */
+       0x3C, 0x00, /*   ####           */
+       0x3C, 0x00, /*   ####           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1080 '@' (16 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0xE0, /*      ######      */
+       0x1F, 0xF8, /*    ##########    */
+       0x3C, 0x1C, /*   ####     ###   */
+       0x73, 0xFE, /*  ###  #########  */
+       0x67, 0xF6, /*  ##  ####### ##  */
+       0xE6, 0x33, /* ###  ##   ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCC, 0x33, /* ##  ##    ##  ## */
+       0xCE, 0x33, /* ##  ###   ##  ## */
+       0x67, 0xFE, /*  ##  ##########  */
+       0x73, 0xFE, /*  ###  #########  */
+       0x3C, 0x10, /*   ####     #     */
+       0x1F, 0xF0, /*    #########     */
+       0x07, 0xF0, /*      #######     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1120 'A' (15 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0xC0, /*      #####       */
+       0x07, 0xC0, /*      #####       */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0xE0, /*     #######      */
+       0x1E, 0xF0, /*    #### ####     */
+       0x1E, 0xF0, /*    #### ####     */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x3C, 0x78, /*   ####   ####    */
+       0x3F, 0xF8, /*   ###########    */
+       0x7F, 0xFC, /*  #############   */
+       0x7F, 0xFC, /*  #############   */
+       0x78, 0x3C, /*  ####     ####   */
+       0xF0, 0x1E, /* ####       ####  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1160 'B' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xE0, /* ###########      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1200 'C' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x0F, 0xE0, /*     #######      */
+       0x3F, 0xF0, /*   ##########     */
+       0x7F, 0xF0, /*  ###########     */
+       0x7C, 0x30, /*  #####    ##     */
+       0xF8, 0x00, /* #####            */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF8, 0x00, /* #####            */
+       0x7C, 0x30, /*  #####    ##     */
+       0x7F, 0xF0, /*  ###########     */
+       0x3F, 0xF0, /*   ##########     */
+       0x0F, 0xE0, /*     #######      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1240 'D' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xF0, /* ############     */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF0, 0xF8, /* ####    #####    */
+       0xF0, 0x78, /* ####     ####    */
+       0xF0, 0x78, /* ####     ####    */
+       0xF0, 0x78, /* ####     ####    */
+       0xF0, 0x78, /* ####     ####    */
+       0xF0, 0xF8, /* ####    #####    */
+       0xF1, 0xF0, /* ####   #####     */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1280 'E' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1320 'F' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1360 'G' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x0F, 0xE0, /*     #######      */
+       0x1F, 0xF8, /*    ##########    */
+       0x7F, 0xF8, /*  ############    */
+       0x7C, 0x18, /*  #####     ##    */
+       0xF8, 0x00, /* #####            */
+       0xF0, 0x00, /* ####             */
+       0xF1, 0xF8, /* ####   ######    */
+       0xF1, 0xF8, /* ####   ######    */
+       0xF1, 0xF8, /* ####   ######    */
+       0xF8, 0x78, /* #####    ####    */
+       0x7C, 0x78, /*  #####   ####    */
+       0x7F, 0xF8, /*  ############    */
+       0x3F, 0xF8, /*   ###########    */
+       0x0F, 0xE0, /*     #######      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1400 'H' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1440 'I' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0x3C, /*   ####   */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @1460 'J' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0x80, /*   #######        */
+       0x3F, 0x80, /*   #######        */
+       0x3F, 0x80, /*   #######        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x0F, 0x80, /*     #####        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x00, /* ########         */
+       0xFC, 0x00, /* ######           */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1500 'K' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0xF8, /* ####    #####    */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF3, 0xE0, /* ####  #####      */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0x00, /* ########         */
+       0xFF, 0x80, /* #########        */
+       0xF7, 0xC0, /* #### #####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF0, 0xF0, /* ####    ####     */
+       0xF0, 0xF8, /* ####    #####    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1540 'L' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1580 'M' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF8, 0x7C, /* #####    #####   */
+       0xF8, 0x7C, /* #####    #####   */
+       0xF8, 0x7C, /* #####    #####   */
+       0xFC, 0xFC, /* ######  ######   */
+       0xFC, 0xFC, /* ######  ######   */
+       0xFC, 0xFC, /* ######  ######   */
+       0xF7, 0xBC, /* #### #### ####   */
+       0xF7, 0xBC, /* #### #### ####   */
+       0xF7, 0xBC, /* #### #### ####   */
+       0xF3, 0x3C, /* ####  ##  ####   */
+       0xF3, 0x3C, /* ####  ##  ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1620 'N' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF8, 0xF0, /* #####   ####     */
+       0xF8, 0xF0, /* #####   ####     */
+       0xFC, 0xF0, /* ######  ####     */
+       0xFC, 0xF0, /* ######  ####     */
+       0xFE, 0xF0, /* ####### ####     */
+       0xFE, 0xF0, /* ####### ####     */
+       0xF6, 0xF0, /* #### ## ####     */
+       0xF7, 0xF0, /* #### #######     */
+       0xF3, 0xF0, /* ####  ######     */
+       0xF3, 0xF0, /* ####  ######     */
+       0xF3, 0xF0, /* ####  ######     */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF0, 0xF0, /* ####    ####     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1660 'O' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x0F, 0xC0, /*     ######       */
+       0x3F, 0xF0, /*   ##########     */
+       0x7F, 0xF8, /*  ############    */
+       0x78, 0x78, /*  ####    ####    */
+       0xF8, 0x7C, /* #####    #####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF8, 0x7C, /* #####    #####   */
+       0x78, 0x78, /*  ####    ####    */
+       0x7F, 0xF8, /*  ############    */
+       0x3F, 0xF0, /*   ##########     */
+       0x0F, 0xC0, /*     ######       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1700 'P' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xE0, /* ###########      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0x00, /* ########         */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1740 'Q' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x0F, 0xC0, /*     ######       */
+       0x3F, 0xF0, /*   ##########     */
+       0x7F, 0xF8, /*  ############    */
+       0x78, 0x78, /*  ####    ####    */
+       0xF8, 0x7C, /* #####    #####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF0, 0x3C, /* ####      ####   */
+       0xF8, 0x7C, /* #####    #####   */
+       0x78, 0x78, /*  ####    ####    */
+       0x7F, 0xF8, /*  ############    */
+       0x3F, 0xF0, /*   ##########     */
+       0x0F, 0xC0, /*     ######       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xFC, /*       ########   */
+       0x01, 0xFC, /*        #######   */
+       0x00, 0xFC, /*         ######   */
+
+       /* @1780 'R' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0xE0, /* ###########      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xFF, 0xC0, /* ##########       */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0xF7, 0xC0, /* #### #####       */
+       0xF7, 0xC0, /* #### #####       */
+       0xF3, 0xE0, /* ####  #####      */
+       0xF1, 0xF0, /* ####   #####     */
+       0xF0, 0xF8, /* ####    #####    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1820 'S' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0xC0, /*    #######       */
+       0x7F, 0xE0, /*  ##########      */
+       0xFF, 0xE0, /* ###########      */
+       0xF0, 0x60, /* ####     ##      */
+       0xF0, 0x00, /* ####             */
+       0xFF, 0x00, /* ########         */
+       0x7F, 0xC0, /*  #########       */
+       0x3F, 0xE0, /*   #########      */
+       0x07, 0xF0, /*      #######     */
+       0x00, 0xF0, /*         ####     */
+       0xC0, 0xF0, /* ##      ####     */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x7F, 0x80, /*  ########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1860 'T' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0xFF, 0xF0, /* ############     */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1900 'U' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0x7F, 0xC0, /*  #########       */
+       0x7F, 0xC0, /*  #########       */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1940 'V' (15 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0x1E, /* ####       ####  */
+       0x78, 0x3C, /*  ####     ####   */
+       0x78, 0x3C, /*  ####     ####   */
+       0x7C, 0x7C, /*  #####   #####   */
+       0x3C, 0x78, /*   ####   ####    */
+       0x3C, 0x78, /*   ####   ####    */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x1E, 0xF0, /*    #### ####     */
+       0x1E, 0xF0, /*    #### ####     */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0xE0, /*     #######      */
+       0x07, 0xC0, /*      #####       */
+       0x07, 0xC0, /*      #####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @1980 'W' (19 pixels wide) */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
+       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
+       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
+       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
+       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
+       0x79, 0xB3, 0xC0, /*  ####  ## ##  ####       */
+       0x39, 0xB7, 0x80, /*   ###  ## ## ####        */
+       0x3D, 0xB7, 0x80, /*   #### ## ## ####        */
+       0x3F, 0xBF, 0x80, /*   ####### #######        */
+       0x3F, 0xBF, 0x80, /*   ####### #######        */
+       0x1F, 0x3F, 0x00, /*    #####  ######         */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+
+       /* @2040 'X' (15 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF8, 0x3E, /* #####     #####  */
+       0x7C, 0x7C, /*  #####   #####   */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x1F, 0xF0, /*    #########     */
+       0x0F, 0xE0, /*     #######      */
+       0x07, 0xC0, /*      #####       */
+       0x0F, 0xE0, /*     #######      */
+       0x0F, 0xE0, /*     #######      */
+       0x1F, 0xF0, /*    #########     */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x3E, 0xF8, /*   ##### #####    */
+       0x7C, 0x7C, /*  #####   #####   */
+       0xF8, 0x3E, /* #####     #####  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2080 'Y' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF8, 0x7C, /* #####    #####   */
+       0x78, 0x78, /*  ####    ####    */
+       0x7C, 0xF8, /*  #####  #####    */
+       0x3C, 0xF0, /*   ####  ####     */
+       0x1F, 0xE0, /*    ########      */
+       0x1F, 0xE0, /*    ########      */
+       0x0F, 0xC0, /*     ######       */
+       0x0F, 0xC0, /*     ######       */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x07, 0x80, /*      ####        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2120 'Z' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x03, 0xE0, /*       #####      */
+       0x07, 0xC0, /*      #####       */
+       0x0F, 0x80, /*     #####        */
+       0x1F, 0x00, /*    #####         */
+       0x1F, 0x00, /*    #####         */
+       0x3E, 0x00, /*   #####          */
+       0x7C, 0x00, /*  #####           */
+       0xF8, 0x00, /* #####            */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2160 '[' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+
+       /* @2180 '\' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xE0, 0x00, /* ###              */
+       0x70, 0x00, /*  ###             */
+       0x70, 0x00, /*  ###             */
+       0x70, 0x00, /*  ###             */
+       0x38, 0x00, /*   ###            */
+       0x38, 0x00, /*   ###            */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x07, 0x00, /*      ###         */
+       0x07, 0x00, /*      ###         */
+       0x03, 0x80, /*       ###        */
+       0x03, 0x80, /*       ###        */
+       0x03, 0x80, /*       ###        */
+       0x01, 0xC0, /*        ###       */
+       0x00, 0x00, /*                  */
+
+       /* @2220 ']' (6 pixels wide) */
+       0x00, /*          */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0x1C, /*    ###   */
+       0xFC, /* ######   */
+       0xFC, /* ######   */
+
+       /* @2240 '^' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x07, 0x00, /*      ###         */
+       0x0F, 0x80, /*     #####        */
+       0x0F, 0x80, /*     #####        */
+       0x1D, 0xC0, /*    ### ###       */
+       0x38, 0xE0, /*   ###   ###      */
+       0x38, 0xE0, /*   ###   ###      */
+       0x70, 0x70, /*  ###     ###     */
+       0xE0, 0x38, /* ###       ###    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2280 '_' (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, /*                  */
+       0xFF, 0xFC, /* ##############   */
+       0xFF, 0xFC, /* ##############   */
+       0x00, 0x00, /*                  */
+
+       /* @2320 '`' (6 pixels wide) */
+       0xF0, /* ####     */
+       0x70, /*  ###     */
+       0x38, /*   ###    */
+       0x1C, /*    ###   */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2340 'a' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x7F, 0x00, /*  #######         */
+       0x7F, 0x80, /*  ########        */
+       0x43, 0xC0, /*  #    ####       */
+       0x03, 0xC0, /*       ####       */
+       0x3F, 0xC0, /*   ########       */
+       0x7F, 0xC0, /*  #########       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xFF, 0xC0, /* ##########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2380 'b' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF7, 0x00, /* #### ###         */
+       0xFF, 0x80, /* #########        */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x00, /* ########         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2420 'c' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x00, /*    #####         */
+       0x7F, 0x80, /*  ########        */
+       0x79, 0x80, /*  ####  ##        */
+       0xF0, 0x80, /* ####    #        */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x80, /* ####    #        */
+       0x78, 0x80, /*  ####   #        */
+       0x7F, 0x80, /*  ########        */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2460 'd' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x3F, 0xC0, /*   ########       */
+       0x7F, 0xC0, /*  #########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0x7F, 0xC0, /*  #########       */
+       0x3B, 0xC0, /*   ### ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2500 'e' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x80, /*    ######        */
+       0x3F, 0xC0, /*   ########       */
+       0x71, 0xE0, /*  ###   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xFF, 0xE0, /* ###########      */
+       0xFF, 0xE0, /* ###########      */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x20, /* ####      #      */
+       0x78, 0x60, /*  ####    ##      */
+       0x3F, 0xE0, /*   #########      */
+       0x1F, 0xC0, /*    #######       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2540 'f' (7 pixels wide) */
+       0x00, /*          */
+       0x3E, /*   #####  */
+       0x7E, /*  ######  */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0xFE, /* #######  */
+       0xFE, /* #######  */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2560 'g' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0xC0, /*   ########       */
+       0x7F, 0xC0, /*  #########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0x7F, 0xC0, /*  #########       */
+       0x3B, 0xC0, /*   ### ####       */
+       0x03, 0xC0, /*       ####       */
+       0x47, 0xC0, /*  #   #####       */
+       0x7F, 0x80, /*  ########        */
+       0x7F, 0x00, /*  #######         */
+
+       /* @2600 'h' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0xC0, /* ##########       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2640 'i' (4 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2660 'j' (7 pixels wide) */
+       0x00, /*          */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x00, /*          */
+       0x7E, /*  ######  */
+       0x7E, /*  ######  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0x1E, /*    ####  */
+       0xFC, /* ######   */
+       0xF8, /* #####    */
+
+       /* @2680 'k' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF3, 0xE0, /* ####  #####      */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0x00, /* ########         */
+       0xFE, 0x00, /* #######          */
+       0xFE, 0x00, /* #######          */
+       0xFF, 0x00, /* ########         */
+       0xF7, 0x00, /* #### ###         */
+       0xF7, 0x80, /* #### ####        */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xE0, /* ####  #####      */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2720 'l' (4 pixels wide) */
+       0x00, /*          */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2740 'm' (16 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF7, 0x1C, /* #### ###   ###   */
+       0xFF, 0xBE, /* ######### #####  */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0xF3, 0xCF, /* ####  ####  #### */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2780 'n' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0xC0, /* ##########       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2820 'o' (11 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x1F, 0x00, /*    #####         */
+       0x7F, 0xC0, /*  #########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0xF1, 0xE0, /* ####   ####      */
+       0x7B, 0xC0, /*  #### ####       */
+       0x7F, 0xC0, /*  #########       */
+       0x1F, 0x00, /*    #####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @2860 'p' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF7, 0x00, /* #### ###         */
+       0xFF, 0x80, /* #########        */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF7, 0x80, /* #### ####        */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x00, /* ########         */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+       0xF0, 0x00, /* ####             */
+
+       /* @2900 'q' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0xC0, /*   ########       */
+       0x7F, 0xC0, /*  #########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0x7F, 0xC0, /*  #########       */
+       0x3B, 0xC0, /*   ### ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+       0x03, 0xC0, /*       ####       */
+
+       /* @2940 'r' (7 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0xF6, /* #### ##  */
+       0xFE, /* #######  */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0xF0, /* ####     */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @2960 's' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3F, 0x80, /*   #######        */
+       0x7F, 0x80, /*  ########        */
+       0xF0, 0x80, /* ####    #        */
+       0xF0, 0x00, /* ####             */
+       0xFE, 0x00, /* #######          */
+       0x7F, 0x00, /*  #######         */
+       0x3F, 0x80, /*   #######        */
+       0x87, 0x80, /* #    ####        */
+       0xC7, 0x80, /* ##   ####        */
+       0xFF, 0x00, /* ########         */
+       0x7E, 0x00, /*  ######          */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @3000 't' (8 pixels wide) */
+       0x00, /*          */
+       0x00, /*          */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0xFF, /* ######## */
+       0xFF, /* ######## */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x78, /*  ####    */
+       0x7F, /*  ####### */
+       0x1F, /*    ##### */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+       0x00, /*          */
+
+       /* @3020 'u' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xF3, 0xC0, /* ####  ####       */
+       0xFF, 0xC0, /* ##########       */
+       0x7B, 0xC0, /*  #### ####       */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @3060 'v' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0xF0, /* ####    ####     */
+       0x79, 0xE0, /*  ####  ####      */
+       0x79, 0xE0, /*  ####  ####      */
+       0x79, 0xE0, /*  ####  ####      */
+       0x3F, 0xC0, /*   ########       */
+       0x3F, 0xC0, /*   ########       */
+       0x3F, 0xC0, /*   ########       */
+       0x1F, 0x80, /*    ######        */
+       0x1F, 0x80, /*    ######        */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @3100 'w' (19 pixels wide) */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
+       0xF8, 0xF3, 0xE0, /* #####   ####  #####      */
+       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
+       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
+       0x79, 0xB3, 0xC0, /*  ####  ## ##  ####       */
+       0x3D, 0xB7, 0x80, /*   #### ## ## ####        */
+       0x3F, 0xBF, 0x80, /*   ####### #######        */
+       0x3F, 0xBF, 0x80, /*   ####### #######        */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x1F, 0x1F, 0x00, /*    #####   #####         */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+       0x00, 0x00, 0x00, /*                          */
+
+       /* @3160 'x' (13 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF8, 0xF8, /* #####   #####    */
+       0x78, 0xF0, /*  ####   ####     */
+       0x3D, 0xE0, /*   #### ####      */
+       0x1F, 0xC0, /*    #######       */
+       0x1F, 0xC0, /*    #######       */
+       0x0F, 0x80, /*     #####        */
+       0x1F, 0xC0, /*    #######       */
+       0x1F, 0xC0, /*    #######       */
+       0x3D, 0xE0, /*   #### ####      */
+       0x78, 0xF0, /*  ####   ####     */
+       0xF8, 0xF8, /* #####   #####    */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @3200 'y' (12 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xF0, 0xF0, /* ####    ####     */
+       0x70, 0xE0, /*  ###    ###      */
+       0x79, 0xE0, /*  ####  ####      */
+       0x79, 0xE0, /*  ####  ####      */
+       0x39, 0xC0, /*   ###  ###       */
+       0x3F, 0xC0, /*   ########       */
+       0x3F, 0x80, /*   #######        */
+       0x1F, 0x80, /*    ######        */
+       0x1F, 0x80, /*    ######        */
+       0x0F, 0x00, /*     ####         */
+       0x0F, 0x00, /*     ####         */
+       0x0E, 0x00, /*     ###          */
+       0x1E, 0x00, /*    ####          */
+       0x1E, 0x00, /*    ####          */
+       0x3C, 0x00, /*   ####           */
+
+       /* @3240 'z' (9 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x07, 0x00, /*      ###         */
+       0x0F, 0x00, /*     ####         */
+       0x1E, 0x00, /*    ####          */
+       0x1C, 0x00, /*    ###           */
+       0x3C, 0x00, /*   ####           */
+       0x78, 0x00, /*  ####            */
+       0x70, 0x00, /*  ###             */
+       0xFF, 0x80, /* #########        */
+       0xFF, 0x80, /* #########        */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+
+       /* @3280 '{' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x03, 0xC0, /*       ####       */
+       0x07, 0xC0, /*      #####       */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x1C, 0x00, /*    ###           */
+       0xF8, 0x00, /* #####            */
+       0xF8, 0x00, /* #####            */
+       0x1C, 0x00, /*    ###           */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0E, 0x00, /*     ###          */
+       0x0F, 0x00, /*     ####         */
+       0x07, 0xC0, /*      #####       */
+       0x03, 0xC0, /*       ####       */
+
+       /* @3320 '|' (3 pixels wide) */
+       0x00, /*          */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+       0xE0, /* ###      */
+
+       /* @3340 '}' (10 pixels wide) */
+       0x00, 0x00, /*                  */
+       0xF0, 0x00, /* ####             */
+       0xF8, 0x00, /* #####            */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x0E, 0x00, /*     ###          */
+       0x07, 0xC0, /*      #####       */
+       0x07, 0xC0, /*      #####       */
+       0x0E, 0x00, /*     ###          */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x1C, 0x00, /*    ###           */
+       0x3C, 0x00, /*   ####           */
+       0xF8, 0x00, /* #####            */
+       0xF0, 0x00, /* ####             */
+
+       /* @3380 '~' (14 pixels wide) */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x3C, 0x1C, /*   ####     ###   */
+       0x7F, 0x1C, /*  #######   ###   */
+       0x7F, 0x9C, /*  ########  ###   */
+       0xE7, 0xF8, /* ###  ########    */
+       0xE3, 0xF8, /* ###   #######    */
+       0xE0, 0xF0, /* ###     ####     */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+       0x00, 0x00, /*                  */
+};
+
+/* Character descriptors for Verdana 14pt */
+/* { [Char width in bits], [Offset into verdanabold14ptCharBitmaps in bytes] } */
+const FONT_CHAR_INFO verdanabold14ptDescriptors[] = 
+{
+       {4, 0},                 /*   */ 
+       {4, 20},                /* ! */ 
+       {8, 40},                /* " */ 
+       {14, 60},               /* # */ 
+       {12, 100},              /* $ */ 
+       {22, 140},              /* % */ 
+       {15, 200},              /* & */ 
+       {3, 240},               /* ' */ 
+       {7, 260},               /* ( */ 
+       {7, 280},               /* ) */ 
+       {10, 300},              /* * */ 
+       {13, 340},              /* + */ 
+       {5, 380},               /* , */ 
+       {7, 400},               /* - */ 
+       {4, 420},               /* . */ 
+       {10, 440},              /* / */ 
+       {12, 480},              /* 0 */ 
+       {10, 520},              /* 1 */ 
+       {11, 560},              /* 2 */ 
+       {12, 600},              /* 3 */ 
+       {12, 640},              /* 4 */ 
+       {11, 680},              /* 5 */ 
+       {12, 720},              /* 6 */ 
+       {12, 760},              /* 7 */ 
+       {12, 800},              /* 8 */ 
+       {12, 840},              /* 9 */ 
+       {4, 880},               /* : */ 
+       {5, 900},               /* ; */ 
+       {12, 920},              /* < */ 
+       {12, 960},              /* = */ 
+       {12, 1000},             /* > */ 
+       {10, 1040},             /* ? */ 
+       {16, 1080},             /* @ */ 
+       {15, 1120},             /* A */ 
+       {11, 1160},             /* B */ 
+       {12, 1200},             /* C */ 
+       {13, 1240},             /* D */ 
+       {10, 1280},             /* E */ 
+       {9, 1320},              /* F */ 
+       {13, 1360},             /* G */ 
+       {12, 1400},             /* H */ 
+       {8, 1440},              /* I */ 
+       {9, 1460},              /* J */ 
+       {13, 1500},             /* K */ 
+       {10, 1540},             /* L */ 
+       {14, 1580},             /* M */ 
+       {12, 1620},             /* N */ 
+       {14, 1660},             /* O */ 
+       {11, 1700},             /* P */ 
+       {14, 1740},             /* Q */ 
+       {13, 1780},             /* R */ 
+       {12, 1820},             /* S */ 
+       {12, 1860},             /* T */ 
+       {11, 1900},             /* U */ 
+       {15, 1940},             /* V */ 
+       {19, 1980},             /* W */ 
+       {15, 2040},             /* X */ 
+       {14, 2080},             /* Y */ 
+       {11, 2120},             /* Z */ 
+       {6, 2160},              /* [ */ 
+       {10, 2180},             /* \ */ 
+       {6, 2220},              /* ] */ 
+       {13, 2240},             /* ^ */ 
+       {14, 2280},             /* _ */ 
+       {6, 2320},              /* ` */ 
+       {10, 2340},             /* a */ 
+       {10, 2380},             /* b */ 
+       {9, 2420},              /* c */ 
+       {10, 2460},             /* d */ 
+       {11, 2500},             /* e */ 
+       {7, 2540},              /* f */ 
+       {10, 2560},             /* g */ 
+       {10, 2600},             /* h */ 
+       {4, 2640},              /* i */ 
+       {7, 2660},              /* j */ 
+       {11, 2680},             /* k */ 
+       {4, 2720},              /* l */ 
+       {16, 2740},             /* m */ 
+       {10, 2780},             /* n */ 
+       {11, 2820},             /* o */ 
+       {10, 2860},             /* p */ 
+       {10, 2900},             /* q */ 
+       {7, 2940},              /* r */ 
+       {9, 2960},              /* s */ 
+       {8, 3000},              /* t */ 
+       {10, 3020},             /* u */ 
+       {12, 3060},             /* v */ 
+       {19, 3100},             /* w */ 
+       {13, 3160},             /* x */ 
+       {12, 3200},             /* y */ 
+       {9, 3240},              /* z */ 
+       {10, 3280},             /* { */ 
+       {3, 3320},              /* | */ 
+       {10, 3340},             /* } */ 
+       {14, 3380},             /* ~ */ 
+};
+
+/* Font information for Verdana Bold 14pt */
+const FONT_INFO verdanabold14ptFontInfo =
+{
+       20, /*  Character height */
+       ' ', /*  Start character */
+       '~', /*  End character */
+       verdanabold14ptDescriptors, /*  Character descriptor array */
+       verdanabold14ptBitmaps, /*  Character bitmap array */
+};
diff --git a/drivers/displays/tft/fonts/verdanabold14.h b/drivers/displays/tft/fonts/verdanabold14.h
new file mode 100644 (file)
index 0000000..0474fc7
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef __VERDANA_BOLD_14__
+#define __VERDANA_BOLD_14__
+
+#include "bitmapfonts.h"
+
+/* Font data for Verdana Bold 14pt */
+extern const uint8_t verdanabold14ptBitmaps[];
+extern const FONT_INFO verdanabold14ptFontInfo;
+extern const FONT_CHAR_INFO verdanabold14ptDescriptors[];
+
+#endif
\ No newline at end of file
diff --git a/drivers/displays/tft/hw/ILI9325.c b/drivers/displays/tft/hw/ILI9325.c
new file mode 100644 (file)
index 0000000..7489b85
--- /dev/null
@@ -0,0 +1,647 @@
+/**************************************************************************/
+/*! 
+    @file     ILI9325.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for ILI9325 240x320 pixel TFT LCD displays.
+    
+    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
+    Should also work with SPFD5408B or OTM3225A-based LCDs, though
+    there are sometimes minor differences (for example vertical scrolling
+    via register 0x6A isn't supported on all controllers).
+
+    @section  UPDATES
+
+    26-11-2010: ili9325ReadData contributed by Adafruit Industries
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "ILI9325.h"
+#include "core/systick/systick.h"
+#include "drivers/displays/tft/touchscreen.h"
+
+// Uncomment this to use faster inline methods, but requires more flash
+// #define ILI9235_USE_INLINE_METHODS (1)
+
+static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t ili9325Properties = { 240, 320, TRUE, TRUE, TRUE };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Causes a brief delay (10 ticks per unit)
+*/
+/**************************************************************************/
+#if !defined ILI9235_USE_INLINE_METHODS
+void ili9325Delay(unsigned int t)
+{
+  unsigned char t1;
+  while(t--)
+  for ( t1=10; t1 > 0; t1-- )
+  {
+    __asm("nop");
+  }
+}
+#else
+static inline uint32_t ili9325Delay(unsigned int t)     { unsigned char t1; while(t--) for ( t1=10; t1 > 0; t1-- ) { __asm("nop"); } }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Writes the supplied 16-bit command using an 8-bit interface
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9325WriteCmd(uint16_t command) 
+{
+  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
+  // (versus 36 compiled with no optimisations).  I'm not sure it
+  // can be improved further, so that means 25 cycles/350nS for
+  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
+  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
+  // Set color [cmd+data]) (times assumes 72MHz clock).
+
+  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
+  ILI9325_GPIO2DATA_DATA = (command >> (8 - ILI9325_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ILI9325_GPIO2DATA_DATA = command << ILI9325_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
+}
+#else
+static inline void ili9325WriteCmd(uint16_t command) { CLR_CS_CD_SET_RD_WR; ILI9325_GPIO2DATA_DATA = (command >> (8 - ILI9325_DATA_OFFSET)); CLR_WR; SET_WR; ILI9325_GPIO2DATA_DATA = command << ILI9325_DATA_OFFSET; CLR_WR; SET_WR_CS; }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Writes the supplied 16-bit data using an 8-bit interface
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9325WriteData(uint16_t data)
+{
+  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
+  ILI9325_GPIO2DATA_DATA = (data >> (8 - ILI9325_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ILI9325_GPIO2DATA_DATA = data << ILI9325_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
+}
+#else
+static inline void ili9325WriteData(uint16_t data) {   CLR_CS_SET_CD_RD_WR; ILI9325_GPIO2DATA_DATA = (data >> (8 - ILI9325_DATA_OFFSET)); CLR_WR; SET_WR; ILI9325_GPIO2DATA_DATA = data << ILI9325_DATA_OFFSET; CLR_WR; SET_WR_CS; }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value from the 8-bit data bus
+*/
+/**************************************************************************/
+uint16_t ili9325ReadData(void)
+{
+  // ToDo: Optimise this method!
+
+  uint16_t high, low;
+  high = low = 0;
+  uint16_t d;
+
+  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
+  CLR_CS;
+  
+  // set inputs
+  ILI9325_GPIO2DATA_SETINPUT;
+  CLR_RD;
+  ili9325Delay(100);
+  high = ILI9325_GPIO2DATA_DATA;  
+  high >>= ILI9325_DATA_OFFSET;
+  high &= 0xFF;
+  SET_RD;
+  
+  CLR_RD;
+  ili9325Delay(100);
+  low = ILI9325_GPIO2DATA_DATA;
+  low >>= ILI9325_DATA_OFFSET;
+  low &=0xFF;
+  SET_RD;
+  
+  SET_CS;
+  ILI9325_GPIO2DATA_SETOUTPUT;
+
+  d = high;
+  d <<= 8;
+  d |= low;
+  
+  return d;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value
+*/
+/**************************************************************************/
+uint16_t ili9325Read(uint16_t addr)
+{
+  ili9325WriteCmd(addr);
+  return ili9325ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sends a 16-bit command + 16-bit data
+*/
+/**************************************************************************/
+void ili9325Command(uint16_t command, uint16_t data)
+{
+  ili9325WriteCmd(command);
+  ili9325WriteData(data);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the 16-bit (4-hexdigit) controller code
+*/
+/**************************************************************************/
+uint16_t ili9325Type(void)
+{
+  ili9325WriteCmd(ILI9325_COMMANDS_DRIVERCODEREAD);
+  return ili9325ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the specified X/Y position
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9325SetCursor(uint16_t x, uint16_t y)
+{
+  uint16_t al, ah;
+  
+  if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE)
+  {
+    al = y;
+    ah = x;
+  }
+  else
+  {
+    al = x;
+    ah = y;
+  }
+
+  ili9325Command(ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET, al);
+  ili9325Command(ILI9325_COMMANDS_VERTICALGRAMADDRESSSET, ah);
+}
+#else
+static inline void ili9325SetCursor(uint16_t x, uint16_t y) { uint16_t al, ah; if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE) { al = y; ah = x; } else { al = x; ah = y; }; ili9325WriteCmd(ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET); ili9325WriteData(al); ili9325WriteCmd(ILI9325_COMMANDS_VERTICALGRAMADDRESSSET); ili9325WriteData(ah); }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Sends the initialisation sequence to the display controller
+*/
+/**************************************************************************/
+void ili9325InitDisplay(void)
+{
+  // Clear data line
+  GPIO_GPIO2DATA &= ~ILI9325_DATA_MASK;
+    
+  SET_RD;
+  SET_WR;
+  SET_CS;
+  SET_CD;
+
+  // Reset display
+  CLR_RESET;
+  ili9325Delay(10000);
+  SET_RESET;
+  ili9325Delay(500);
+
+  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1, 0x0100);  // Driver Output Control Register (R01h)
+  ili9325Command(ILI9325_COMMANDS_LCDDRIVINGCONTROL, 0x0700);     // LCD Driving Waveform Control (R02h)
+  ili9325Command(ILI9325_COMMANDS_ENTRYMODE, 0x1030);             // Entry Mode (R03h)  
+  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL2, 0x0302);
+  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL3, 0x0000);
+  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL4, 0x0000);       // Fmark On
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL1, 0x0000);         // Power Control 1 (R10h)
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL3, 0x0000);         // Power Control 3 (R12h)
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL4, 0x0000);         // Power Control 4 (R13h)
+  ili9325Delay(1000);  
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL1, 0x14B0);         // Power Control 1 (R10h)  
+  ili9325Delay(500);  
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)  
+  ili9325Delay(500);  
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL3, 0x008E);         // Power Control 3 (R12h)
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL4, 0x0C00);         // Power Control 4 (R13h)
+  ili9325Command(ILI9325_COMMANDS_POWERCONTROL7, 0x0015);         // NVM read data 2 (R29h)
+  ili9325Delay(500);
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL1, 0x0000);         // Gamma Control 1
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL2, 0x0107);         // Gamma Control 2
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL3, 0x0000);         // Gamma Control 3
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL4, 0x0203);         // Gamma Control 4
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL5, 0x0402);         // Gamma Control 5
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL6, 0x0000);         // Gamma Control 6
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL7, 0x0207);         // Gamma Control 7
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL8, 0x0000);         // Gamma Control 8
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL9, 0x0203);         // Gamma Control 9
+  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL10, 0x0403);        // Gamma Control 10
+  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, 0x0000);                      // Window Horizontal RAM Address Start (R50h)
+  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION, ili9325Properties.width - 1);   // Window Horizontal RAM Address End (R51h)
+  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION, 0X0000);                        // Window Vertical RAM Address Start (R52h)
+  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION, ili9325Properties.height - 1);    // Window Vertical RAM Address End (R53h)
+  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL2, 0xa700);    // Driver Output Control (R60h)
+  ili9325Command(ILI9325_COMMANDS_BASEIMAGEDISPLAYCONTROL, 0x0003); // Driver Output Control (R61h) - enable VLE
+  ili9325Command(ILI9325_COMMANDS_PANELINTERFACECONTROL1, 0X0010);  // Panel Interface Control 1 (R90h)
+
+  // Display On
+  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL1, 0x0133);     // Display Control (R07h)
+  ili9325Delay(500);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the home position (0,0)
+*/
+/**************************************************************************/
+void ili9325Home(void)
+{
+  ili9325SetCursor(0, 0);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);            // Write Data to GRAM (R22h)
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the window confines
+*/
+/**************************************************************************/
+void ili9325SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
+{
+  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, x0);
+  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION, x1);
+  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION, y0);
+  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION, y1);
+  ili9325SetCursor(x0, y0);
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Configures any pins or HW and initialises the LCD controller
+*/
+/**************************************************************************/
+void lcdInit(void)
+{
+  // Set control line pins to output
+  gpioSetDir(ILI9325_CS_PORT, ILI9325_CS_PIN, 1);
+  gpioSetDir(ILI9325_CD_PORT, ILI9325_CD_PIN, 1);
+  gpioSetDir(ILI9325_WR_PORT, ILI9325_WR_PIN, 1);
+  gpioSetDir(ILI9325_RD_PORT, ILI9325_RD_PIN, 1);
+  
+  // Set data port pins to output
+  ILI9325_GPIO2DATA_SETOUTPUT;
+
+  // Disable pullups
+  ILI9325_DISABLEPULLUPS();
+  
+  // Set backlight pin to output and turn it on
+  gpioSetDir(ILI9325_BL_PORT, ILI9325_BL_PIN, 1);      // set to output
+  lcdBacklight(TRUE);
+
+  // Set reset pin to output
+  gpioSetDir(ILI9325_RES_PORT, ILI9325_RES_PIN, 1);    // Set to output
+  gpioSetValue(ILI9325_RES_PORT, ILI9325_RES_PIN, 0);  // Low to reset
+  systickDelay(50);
+  gpioSetValue(ILI9325_RES_PORT, ILI9325_RES_PIN, 1);  // High to exit
+
+  // Initialize the display
+  ili9325InitDisplay();
+
+  systickDelay(50);
+
+  // Set lcd to default orientation
+  lcdSetOrientation(lcdOrientation);
+
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+  
+  // Initialise the touch screen (and calibrate if necessary)
+  tsInit();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Enables or disables the LCD backlight
+*/
+/**************************************************************************/
+void lcdBacklight(bool state)
+{
+  // Set the backlight
+  gpioSetValue(ILI9325_BL_PORT, ILI9325_BL_PIN, state ? 0 : 1);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a simple test pattern on the LCD
+*/
+/**************************************************************************/
+void lcdTest(void)
+{
+  uint32_t i,j;
+  ili9325Home();
+  
+  for(i=0;i<320;i++)
+  {
+    for(j=0;j<240;j++)
+    {
+      if(i>279)ili9325WriteData(COLOR_WHITE);
+      else if(i>239)ili9325WriteData(COLOR_BLUE);
+      else if(i>199)ili9325WriteData(COLOR_GREEN);
+      else if(i>159)ili9325WriteData(COLOR_CYAN);
+      else if(i>119)ili9325WriteData(COLOR_RED);
+      else if(i>79)ili9325WriteData(COLOR_MAGENTA);
+      else if(i>39)ili9325WriteData(COLOR_YELLOW);
+      else ili9325WriteData(COLOR_BLACK);
+    }
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Fills the LCD with the specified 16-bit color
+*/
+/**************************************************************************/
+void lcdFillRGB(uint16_t data)
+{
+  unsigned int i;
+  ili9325Home();
+  
+  uint32_t pixels = 320*240;
+  for ( i=0; i < pixels; i++ )
+  {
+    ili9325WriteData(data);
+  } 
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a single pixel at the specified X/Y location
+*/
+/**************************************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  ili9325SetCursor(x, y);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
+  ili9325WriteData(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  uint32_t i = 0;
+  ili9325SetCursor(x, y);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
+  do
+  {
+    ili9325WriteData(data[i]);
+    i++;
+  } while (i<len);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a horizontal line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t x, pixels;
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  // Check limits
+  if (x1 >= lcdGetWidth())
+  {
+    x1 = lcdGetWidth() - 1;
+  }
+  if (x0 >= lcdGetWidth())
+  {
+    x0 = lcdGetWidth() - 1;
+  }
+
+  ili9325SetCursor(x0, y);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
+  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+  {
+    ili9325WriteData(color);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a vertical line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  lcdOrientation_t oldOrientation = lcdOrientation;
+
+  if (oldOrientation == LCD_ORIENTATION_PORTRAIT)
+  {
+    lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
+    lcdDrawHLine(y0, y1, lcdGetHeight() - (x + 1), color);
+  }
+  else
+  {
+    lcdSetOrientation(LCD_ORIENTATION_PORTRAIT);
+    lcdDrawHLine(lcdGetWidth() - (y0 + 1), lcdGetWidth() - (y1 + 1), x, color);
+  }
+
+  // Switch orientation back
+  lcdSetOrientation(oldOrientation);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the 16-bit color of the pixel at the specified location
+*/
+/**************************************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  uint16_t preFetch = 0;
+
+  ili9325SetCursor(x, y);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
+  preFetch = ili9325ReadData();
+
+  // Eeek ... why does this need to be done twice for a proper value?!?
+  ili9325SetCursor(x, y);
+  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
+  return ili9325ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the LCD orientation to horizontal and vertical
+*/
+/**************************************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  uint16_t entryMode = 0x1030;
+  uint16_t outputControl = 0x0100;
+
+  switch (orientation)
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      entryMode = 0x1030;
+      outputControl = 0x0100;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+      entryMode = 0x1028;
+      outputControl = 0x0000;
+      break;
+  }
+
+  ili9325Command(ILI9325_COMMANDS_ENTRYMODE, entryMode);
+  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1, outputControl);
+  lcdOrientation = orientation;
+
+  ili9325SetCursor(0, 0);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the current screen orientation (horizontal or vertical)
+*/
+/**************************************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the width in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetWidth(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return ili9325Properties.width;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return ili9325Properties.height;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the height in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetHeight(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return ili9325Properties.height;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return ili9325Properties.width;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Scrolls the contents of the LCD screen vertically the
+            specified number of pixels using a HW optimised routine
+*/
+/**************************************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  int16_t y = pixels;
+  while (y < 0)
+    y += 320;
+  while (y >= 320)
+    y -= 320;
+  ili9325WriteCmd(ILI9325_COMMANDS_VERTICALSCROLLCONTROL);
+  ili9325WriteData(y);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the controller's 16-bit (4 hexdigit) ID
+*/
+/**************************************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return ili9325Type();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
+            generic capabilities and dimensions
+*/
+/**************************************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+    return ili9325Properties;
+}
diff --git a/drivers/displays/tft/hw/ILI9325.h b/drivers/displays/tft/hw/ILI9325.h
new file mode 100644 (file)
index 0000000..5c62dc3
--- /dev/null
@@ -0,0 +1,185 @@
+/**************************************************************************/
+/*! 
+    @file     ILI9325.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __ILI9325_H__
+#define __ILI9325_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/tft/lcd.h"
+#include "core/gpio/gpio.h"
+
+// Control pins
+#define ILI9325_CS_PORT           1     // CS (LCD Pin 7)
+#define ILI9325_CS_PIN            8
+#define ILI9325_CD_PORT           1     // CS/RS (LCD Pin 8)
+#define ILI9325_CD_PIN            9
+#define ILI9325_WR_PORT           1     // WR (LCD Pin 9)
+#define ILI9325_WR_PIN            10
+#define ILI9325_RD_PORT           1     // RD (LCD Pin 10)
+#define ILI9325_RD_PIN            11
+
+// These combined pin definitions are for optimisation purposes.
+// If the pin values above are modified the bit equivalents
+// below will also need to be updated
+#define ILI9325_CS_CD_PINS        0x300   // 8 + 9
+#define ILI9325_RD_WR_PINS        0xC00   // 11 + 10
+#define ILI9325_WR_CS_PINS        0x500   // 10 + 8
+#define ILI9325_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
+#define ILI9325_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
+
+// Backlight and Reset pins
+#define ILI9325_RES_PORT          3     // LCD Reset  (LCD Pin 31)
+#define ILI9325_RES_PIN           3
+#define ILI9325_BL_PORT           2     // Backlight Enable (LCD Pin 16)
+#define ILI9325_BL_PIN            9
+
+// Data pins
+// Note: data pins must be consecutive and on the same port
+#define ILI9325_DATA_PORT         2     // 8-Pin Data Port
+#define ILI9325_DATA_PIN1         1
+#define ILI9325_DATA_PIN2         2
+#define ILI9325_DATA_PIN3         3
+#define ILI9325_DATA_PIN4         4
+#define ILI9325_DATA_PIN5         5
+#define ILI9325_DATA_PIN6         6
+#define ILI9325_DATA_PIN7         7
+#define ILI9325_DATA_PIN8         8
+#define ILI9325_DATA_MASK         0x000001FE
+#define ILI9325_DATA_OFFSET       1    // Offset = PIN1
+
+// Placed here to try to keep all pin specific values in header file
+#define ILI9325_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
+
+// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
+#define ILI9325_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ILI9325_DATA_MASK << 2))))
+#define ILI9325_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_WR_PIN) << 2))))
+#define ILI9325_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_CD_PIN) << 2))))
+#define ILI9325_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_CS_PIN) << 2))))
+#define ILI9325_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_RD_PIN) << 2))))
+#define ILI9325_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ILI9325_RES_PIN) << 2))))
+#define ILI9325_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CS_CD_PINS) << 2))))
+#define ILI9325_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_RD_WR_PINS) << 2))))
+#define ILI9325_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_WR_CS_PINS) << 2))))
+#define ILI9325_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CD_RD_WR_PINS) << 2))))
+#define ILI9325_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CS_CD_RD_WR_PINS) << 2))))
+
+// Macros to set data bus direction to input/output
+#define ILI9325_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ILI9325_DATA_MASK
+#define ILI9325_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ILI9325_DATA_MASK
+
+// Macros for control line state
+#define CLR_CD          ILI9325_GPIO1DATA_CD = (0)
+#define SET_CD          ILI9325_GPIO1DATA_CD = (1 << ILI9325_CD_PIN)
+#define CLR_CS          ILI9325_GPIO1DATA_CS = (0)
+#define SET_CS          ILI9325_GPIO1DATA_CS = (1 << ILI9325_CS_PIN)
+#define CLR_WR          ILI9325_GPIO1DATA_WR = (0)
+#define SET_WR          ILI9325_GPIO1DATA_WR = (1 << ILI9325_WR_PIN)
+#define CLR_RD          ILI9325_GPIO1DATA_RD = (0)
+#define SET_RD          ILI9325_GPIO1DATA_RD = (1 << ILI9325_RD_PIN)
+#define CLR_RESET       ILI9325_GPIO3DATA_RES = (0)
+#define SET_RESET       ILI9325_GPIO3DATA_RES = (1 << ILI9325_RES_PIN)
+
+// These 'combined' macros are defined to improve code performance by
+// reducing the number of instructions in heavily used functions
+#define CLR_CS_CD           ILI9325_GPIO1DATA_CS_CD = (0);
+#define SET_RD_WR           ILI9325_GPIO1DATA_RD_WR = (ILI9325_RD_WR_PINS);
+#define SET_WR_CS           ILI9325_GPIO1DATA_WR_CS = (ILI9325_WR_CS_PINS);
+#define SET_CD_RD_WR        ILI9325_GPIO1DATA_CD_RD_WR = (ILI9325_CD_RD_WR_PINS);
+#define CLR_CS_CD_SET_RD_WR ILI9325_GPIO1DATA_CS_CD_RD_WR = (ILI9325_RD_WR_PINS);
+#define CLR_CS_SET_CD_RD_WR ILI9325_GPIO1DATA_CS_CD_RD_WR = (ILI9325_CD_RD_WR_PINS);
+
+enum
+{
+  ILI9325_COMMANDS_DRIVERCODEREAD                 = 0x0000,
+  ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1           = 0x0001,
+  ILI9325_COMMANDS_LCDDRIVINGCONTROL              = 0x0002,
+  ILI9325_COMMANDS_ENTRYMODE                      = 0x0003,
+  ILI9325_COMMANDS_RESIZECONTROL                  = 0x0004,
+  ILI9325_COMMANDS_DISPLAYCONTROL1                = 0x0007,
+  ILI9325_COMMANDS_DISPLAYCONTROL2                = 0x0008,
+  ILI9325_COMMANDS_DISPLAYCONTROL3                = 0x0009,
+  ILI9325_COMMANDS_DISPLAYCONTROL4                = 0x000A,
+  ILI9325_COMMANDS_RGBDISPLAYINTERFACECONTROL1    = 0x000C,
+  ILI9325_COMMANDS_FRAMEMAKERPOSITION             = 0x000D,
+  ILI9325_COMMANDS_RGBDISPLAYINTERFACECONTROL2    = 0x000F,
+  ILI9325_COMMANDS_POWERCONTROL1                  = 0x0010,
+  ILI9325_COMMANDS_POWERCONTROL2                  = 0x0011,
+  ILI9325_COMMANDS_POWERCONTROL3                  = 0x0012,
+  ILI9325_COMMANDS_POWERCONTROL4                  = 0x0013,
+  ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET       = 0x0020,
+  ILI9325_COMMANDS_VERTICALGRAMADDRESSSET         = 0x0021,
+  ILI9325_COMMANDS_WRITEDATATOGRAM                = 0x0022,
+  ILI9325_COMMANDS_POWERCONTROL7                  = 0x0029,
+  ILI9325_COMMANDS_FRAMERATEANDCOLORCONTROL       = 0x002B,
+  ILI9325_COMMANDS_GAMMACONTROL1                  = 0x0030,
+  ILI9325_COMMANDS_GAMMACONTROL2                  = 0x0031,
+  ILI9325_COMMANDS_GAMMACONTROL3                  = 0x0032,
+  ILI9325_COMMANDS_GAMMACONTROL4                  = 0x0035,
+  ILI9325_COMMANDS_GAMMACONTROL5                  = 0x0036,
+  ILI9325_COMMANDS_GAMMACONTROL6                  = 0x0037,
+  ILI9325_COMMANDS_GAMMACONTROL7                  = 0x0038,
+  ILI9325_COMMANDS_GAMMACONTROL8                  = 0x0039,
+  ILI9325_COMMANDS_GAMMACONTROL9                  = 0x003C,
+  ILI9325_COMMANDS_GAMMACONTROL10                 = 0x003D,
+  ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION = 0x0050,
+  ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION   = 0x0051,
+  ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION   = 0x0052,
+  ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION     = 0x0053,
+  ILI9325_COMMANDS_DRIVEROUTPUTCONTROL2           = 0x0060,
+  ILI9325_COMMANDS_BASEIMAGEDISPLAYCONTROL        = 0x0061,
+  ILI9325_COMMANDS_VERTICALSCROLLCONTROL          = 0x006A,
+  ILI9325_COMMANDS_PARTIALIMAGE1DISPLAYPOSITION   = 0x0080,
+  ILI9325_COMMANDS_PARTIALIMAGE1AREASTARTLINE     = 0x0081,
+  ILI9325_COMMANDS_PARTIALIMAGE1AREAENDLINE       = 0x0082,
+  ILI9325_COMMANDS_PARTIALIMAGE2DISPLAYPOSITION   = 0x0083,
+  ILI9325_COMMANDS_PARTIALIMAGE2AREASTARTLINE     = 0x0084,
+  ILI9325_COMMANDS_PARTIALIMAGE2AREAENDLINE       = 0x0085,
+  ILI9325_COMMANDS_PANELINTERFACECONTROL1         = 0x0090,
+  ILI9325_COMMANDS_PANELINTERFACECONTROL2         = 0x0092,
+  ILI9325_COMMANDS_PANELINTERFACECONTROL4         = 0x0095,
+  ILI9325_COMMANDS_OTPVCMPROGRAMMINGCONTROL       = 0x00A1,
+  ILI9325_COMMANDS_OTPVCMSTATUSANDENABLE          = 0x00A2,
+  ILI9325_COMMANDS_OTPPROGRAMMINGIDKEY            = 0x00A5
+};
+
+#endif
diff --git a/drivers/displays/tft/hw/ILI9328.c b/drivers/displays/tft/hw/ILI9328.c
new file mode 100644 (file)
index 0000000..ca7ec20
--- /dev/null
@@ -0,0 +1,639 @@
+/**************************************************************************/
+/*! 
+    @file     ILI9328.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for ILI9328 240x320 pixel TFT LCD displays.
+    
+    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "ILI9328.h"
+#include "core/systick/systick.h"
+#include "drivers/displays/tft/touchscreen.h"
+
+// Uncomment this to use faster inline methods, but requires more flash
+#define ILI9238_USE_INLINE_METHODS (1)
+
+static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t ili9328Properties = { 240, 320, TRUE, TRUE, TRUE };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Causes a brief delay (10 ticks per unit)
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9328Delay(unsigned int t)
+{
+  unsigned char t1;
+  while(t--)
+  for ( t1=10; t1 > 0; t1-- )
+  {
+    __asm("nop");
+  }
+}
+#else
+static inline void ili9328Delay(unsigned int t)     { unsigned char t1; while(t--) for ( t1=10; t1 > 0; t1-- ) { __asm("nop"); } }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Writes the supplied 16-bit command using an 8-bit interface
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9328WriteCmd(uint16_t command) 
+{
+  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
+  // (versus 36 compiled with no optimisations).  I'm not sure it
+  // can be improved further, so that means 25 cycles/350nS for
+  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
+  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
+  // Set color [cmd+data]) (times assumes 72MHz clock).
+
+  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
+  ILI9328_GPIO2DATA_DATA = (command >> (8 - ILI9328_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ILI9328_GPIO2DATA_DATA = command << ILI9328_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
+}
+#else
+static inline void ili9328WriteCmd(uint16_t command) { CLR_CS_CD_SET_RD_WR; ILI9328_GPIO2DATA_DATA = (command >> (8 - ILI9328_DATA_OFFSET)); CLR_WR; SET_WR; ILI9328_GPIO2DATA_DATA = command << ILI9328_DATA_OFFSET; CLR_WR; SET_WR_CS; }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Writes the supplied 16-bit data using an 8-bit interface
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9328WriteData(uint16_t data)
+{
+  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
+  ILI9328_GPIO2DATA_DATA = (data >> (8 - ILI9328_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ILI9328_GPIO2DATA_DATA = data << ILI9328_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
+}
+#else
+static inline void ili9328WriteData(uint16_t data) {   CLR_CS_SET_CD_RD_WR; ILI9328_GPIO2DATA_DATA = (data >> (8 - ILI9328_DATA_OFFSET)); CLR_WR; SET_WR; ILI9328_GPIO2DATA_DATA = data << ILI9328_DATA_OFFSET; CLR_WR; SET_WR_CS; }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value from the 8-bit data bus
+*/
+/**************************************************************************/
+uint16_t ili9328ReadData(void)
+{
+  // ToDo: Optimise this method!
+
+  uint16_t high, low;
+  high = low = 0;
+  uint16_t d;
+
+  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
+  CLR_CS;
+  
+  // set inputs
+  ILI9328_GPIO2DATA_SETINPUT;
+  CLR_RD;
+  ili9328Delay(100);
+  high = ILI9328_GPIO2DATA_DATA;  
+  high >>= ILI9328_DATA_OFFSET;
+  high &= 0xFF;
+  SET_RD;
+  
+  CLR_RD;
+  ili9328Delay(100);
+  low = ILI9328_GPIO2DATA_DATA;
+  low >>= ILI9328_DATA_OFFSET;
+  low &=0xFF;
+  SET_RD;
+  
+  SET_CS;
+  ILI9328_GPIO2DATA_SETOUTPUT;
+
+  d = high;
+  d <<= 8;
+  d |= low;
+  
+  return d;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value
+*/
+/**************************************************************************/
+uint16_t ili9328Read(uint16_t addr)
+{
+  ili9328WriteCmd(addr);
+  return ili9328ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sends a 16-bit command + 16-bit data
+*/
+/**************************************************************************/
+void ili9328Command(uint16_t command, uint16_t data)
+{
+  ili9328WriteCmd(command);
+  ili9328WriteData(data);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the 16-bit (4-hexdigit) controller code
+*/
+/**************************************************************************/
+uint16_t ili9328Type(void)
+{
+  ili9328WriteCmd(ILI9328_COMMANDS_DRIVERCODEREAD);
+  return ili9328ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the specified X/Y position
+*/
+/**************************************************************************/
+#if !defined ILI9238_USE_INLINE_METHODS
+void ili9328SetCursor(uint16_t x, uint16_t y)
+{
+  uint16_t al, ah;
+  
+  if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE)
+  {
+    al = y;
+    ah = x;
+  }
+  else
+  {
+    al = x;
+    ah = y;
+  }
+
+  ili9328Command(ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET, al);
+  ili9328Command(ILI9328_COMMANDS_VERTICALGRAMADDRESSSET, ah);
+}
+#else
+static inline void ili9328SetCursor(uint16_t x, uint16_t y) { uint16_t al, ah; if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE) { al = y; ah = x; } else { al = x; ah = y; }; ili9328WriteCmd(ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET); ili9328WriteData(al); ili9328WriteCmd(ILI9328_COMMANDS_VERTICALGRAMADDRESSSET); ili9328WriteData(ah); }
+#endif
+
+/**************************************************************************/
+/*! 
+    @brief  Sends the initialisation sequence to the display controller
+*/
+/**************************************************************************/
+void ili9328InitDisplay(void)
+{
+  // Clear data line
+  GPIO_GPIO2DATA &= ~ILI9328_DATA_MASK;
+    
+  SET_RD;
+  SET_WR;
+  SET_CS;
+  SET_CD;
+
+  // Reset display
+  CLR_RESET;
+  ili9328Delay(100);
+  SET_RESET;
+  ili9328Delay(1000);
+
+  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1, 0x0100);  // Driver Output Control Register (R01h)
+  ili9328Command(ILI9328_COMMANDS_LCDDRIVINGCONTROL, 0x0700);     // LCD Driving Waveform Control (R02h)
+  ili9328Command(ILI9328_COMMANDS_ENTRYMODE, 0x1030);             // Entry Mode (R03h)  
+  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL2, 0x0302);
+  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL3, 0x0000);
+  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL4, 0x0000);       // Fmark On
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL1, 0x0000);         // Power Control 1 (R10h)
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL3, 0x0000);         // Power Control 3 (R12h)
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL4, 0x0000);         // Power Control 4 (R13h)
+  ili9328Delay(1000);  
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL1, 0x14B0);         // Power Control 1 (R10h)  
+  ili9328Delay(500);  
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)  
+  ili9328Delay(500);  
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL3, 0x008E);         // Power Control 3 (R12h)
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL4, 0x0C00);         // Power Control 4 (R13h)
+  ili9328Command(ILI9328_COMMANDS_POWERCONTROL7, 0x0015);         // NVM read data 2 (R29h)
+  ili9328Delay(500);
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL1, 0x0000);         // Gamma Control 1
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL2, 0x0107);         // Gamma Control 2
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL3, 0x0000);         // Gamma Control 3
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL4, 0x0203);         // Gamma Control 4
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL5, 0x0402);         // Gamma Control 5
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL6, 0x0000);         // Gamma Control 6
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL7, 0x0207);         // Gamma Control 7
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL8, 0x0000);         // Gamma Control 8
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL9, 0x0203);         // Gamma Control 9
+  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL10, 0x0403);        // Gamma Control 10
+  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, 0x0000);                      // Window Horizontal RAM Address Start (R50h)
+  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION, ili9328Properties.width - 1);   // Window Horizontal RAM Address End (R51h)
+  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION, 0X0000);                        // Window Vertical RAM Address Start (R52h)
+  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION, ili9328Properties.height - 1);    // Window Vertical RAM Address End (R53h)
+  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL2, 0xa700);    // Driver Output Control (R60h)
+  ili9328Command(ILI9328_COMMANDS_BASEIMAGEDISPLAYCONTROL, 0x0003); // Driver Output Control (R61h) - enable VLE
+  ili9328Command(ILI9328_COMMANDS_PANELINTERFACECONTROL1, 0X0010);  // Panel Interface Control 1 (R90h)
+
+  // Display On
+  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL1, 0x0133);     // Display Control (R07h)
+  ili9328Delay(500);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the home position (0,0)
+*/
+/**************************************************************************/
+void ili9328Home(void)
+{
+  ili9328SetCursor(0, 0);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);            // Write Data to GRAM (R22h)
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the window confines
+*/
+/**************************************************************************/
+void ili9328SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
+{
+  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, x0);
+  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION, x1);
+  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION, y0);
+  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION, y1);
+  ili9328SetCursor(x0, y0);
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Configures any pins or HW and initialises the LCD controller
+*/
+/**************************************************************************/
+void lcdInit(void)
+{
+  // Set control line pins to output
+  gpioSetDir(ILI9328_CS_PORT, ILI9328_CS_PIN, 1);
+  gpioSetDir(ILI9328_CD_PORT, ILI9328_CD_PIN, 1);
+  gpioSetDir(ILI9328_WR_PORT, ILI9328_WR_PIN, 1);
+  gpioSetDir(ILI9328_RD_PORT, ILI9328_RD_PIN, 1);
+  
+  // Set data port pins to output
+  ILI9328_GPIO2DATA_SETOUTPUT;
+
+  // Disable pullups
+  ILI9328_DISABLEPULLUPS();
+  
+  // Set backlight pin to output and turn it on
+  gpioSetDir(ILI9328_BL_PORT, ILI9328_BL_PIN, 1);      // set to output
+  lcdBacklight(TRUE);
+
+  // Set reset pin to output
+  gpioSetDir(ILI9328_RES_PORT, ILI9328_RES_PIN, 1);    // Set to output
+  gpioSetValue(ILI9328_RES_PORT, ILI9328_RES_PIN, 0);  // Low to reset
+  systickDelay(50);
+  gpioSetValue(ILI9328_RES_PORT, ILI9328_RES_PIN, 1);  // High to exit
+
+  // Initialize the display
+  ili9328InitDisplay();
+
+  systickDelay(50);
+
+  // Set lcd to default orientation
+  lcdSetOrientation(lcdOrientation);
+
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+  
+  // Initialise the touch screen (and calibrate if necessary)
+  tsInit();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Enables or disables the LCD backlight
+*/
+/**************************************************************************/
+void lcdBacklight(bool state)
+{
+  // Set the backlight
+  gpioSetValue(ILI9328_BL_PORT, ILI9328_BL_PIN, state ? 0 : 1);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a simple test pattern on the LCD
+*/
+/**************************************************************************/
+void lcdTest(void)
+{
+  uint32_t i,j;
+  ili9328Home();
+  
+  for(i=0;i<320;i++)
+  {
+    for(j=0;j<240;j++)
+    {
+      if(i>279)ili9328WriteData(COLOR_WHITE);
+      else if(i>239)ili9328WriteData(COLOR_BLUE);
+      else if(i>199)ili9328WriteData(COLOR_GREEN);
+      else if(i>159)ili9328WriteData(COLOR_CYAN);
+      else if(i>119)ili9328WriteData(COLOR_RED);
+      else if(i>79)ili9328WriteData(COLOR_MAGENTA);
+      else if(i>39)ili9328WriteData(COLOR_YELLOW);
+      else ili9328WriteData(COLOR_BLACK);
+    }
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Fills the LCD with the specified 16-bit color
+*/
+/**************************************************************************/
+void lcdFillRGB(uint16_t data)
+{
+  unsigned int i;
+  ili9328Home();
+  
+  uint32_t pixels = 320*240;
+  for ( i=0; i < pixels; i++ )
+  {
+    ili9328WriteData(data);
+  } 
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a single pixel at the specified X/Y location
+*/
+/**************************************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  ili9328SetCursor(x, y);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
+  ili9328WriteData(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  uint32_t i = 0;
+  ili9328SetCursor(x, y);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
+  do
+  {
+    ili9328WriteData(data[i]);
+    i++;
+  } while (i<len);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a horizontal line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t x, pixels;
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  // Check limits
+  if (x1 >= lcdGetWidth())
+  {
+    x1 = lcdGetWidth() - 1;
+  }
+  if (x0 >= lcdGetWidth())
+  {
+    x0 = lcdGetWidth() - 1;
+  }
+
+  ili9328SetCursor(x0, y);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
+  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+  {
+    ili9328WriteData(color);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a vertical line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  lcdOrientation_t oldOrientation = lcdOrientation;
+
+  if (oldOrientation == LCD_ORIENTATION_PORTRAIT)
+  {
+    lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
+    lcdDrawHLine(y0, y1, lcdGetHeight() - (x + 1), color);
+  }
+  else
+  {
+    lcdSetOrientation(LCD_ORIENTATION_PORTRAIT);
+    lcdDrawHLine(lcdGetWidth() - (y0 + 1), lcdGetWidth() - (y1 + 1), x, color);
+  }
+
+  // Switch orientation back
+  lcdSetOrientation(oldOrientation);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the 16-bit color of the pixel at the specified location
+*/
+/**************************************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  ili9328SetCursor(x, y);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
+  // prefetch
+  ili9328ReadData();
+
+  // Eeek ... why does this need to be done twice for a proper value?!?
+  ili9328SetCursor(x, y);
+  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
+  return ili9328ReadData();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the LCD orientation to horizontal and vertical
+*/
+/**************************************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  uint16_t entryMode = 0x1030;
+  uint16_t outputControl = 0x0100;
+
+  switch (orientation)
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      entryMode = 0x1030;
+      outputControl = 0x0100;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+      entryMode = 0x1028;
+      outputControl = 0x0000;
+      break;
+  }
+
+  ili9328Command(ILI9328_COMMANDS_ENTRYMODE, entryMode);
+  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1, outputControl);
+  lcdOrientation = orientation;
+
+  ili9328SetCursor(0, 0);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the current screen orientation (horizontal or vertical)
+*/
+/**************************************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the width in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetWidth(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return ili9328Properties.width;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return ili9328Properties.height;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the height in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetHeight(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return ili9328Properties.height;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return ili9328Properties.width;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Scrolls the contents of the LCD screen vertically the
+            specified number of pixels using a HW optimised routine
+*/
+/**************************************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  int16_t y = pixels;
+  while (y < 0)
+    y += 320;
+  while (y >= 320)
+    y -= 320;
+  ili9328WriteCmd(ILI9328_COMMANDS_VERTICALSCROLLCONTROL);
+  ili9328WriteData(y);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the controller's 16-bit (4 hexdigit) ID
+*/
+/**************************************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return ili9328Type();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
+            generic capabilities and dimensions
+*/
+/**************************************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+    return ili9328Properties;
+}
diff --git a/drivers/displays/tft/hw/ILI9328.h b/drivers/displays/tft/hw/ILI9328.h
new file mode 100644 (file)
index 0000000..23b98c7
--- /dev/null
@@ -0,0 +1,186 @@
+/**************************************************************************/
+/*! 
+    @file     ILI9328.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __ILI9328_H__
+#define __ILI9328_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/tft/lcd.h"
+#include "core/gpio/gpio.h"
+
+// Control pins
+#define ILI9328_CS_PORT           1     // CS (LCD Pin 7)
+#define ILI9328_CS_PIN            8
+#define ILI9328_CD_PORT           1     // CS/RS (LCD Pin 8)
+#define ILI9328_CD_PIN            9
+#define ILI9328_WR_PORT           1     // WR (LCD Pin 9)
+#define ILI9328_WR_PIN            10
+#define ILI9328_RD_PORT           1     // RD (LCD Pin 10)
+#define ILI9328_RD_PIN            11
+
+// These combined pin definitions are for optimisation purposes.
+// If the pin values above are modified the bit equivalents
+// below will also need to be updated
+#define ILI9328_CS_CD_PINS        0x300   // 8 + 9
+#define ILI9328_RD_WR_PINS        0xC00   // 11 + 10
+#define ILI9328_WR_CS_PINS        0x500   // 10 + 8
+#define ILI9328_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
+#define ILI9328_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
+
+// Backlight and Reset pins
+#define ILI9328_RES_PORT          3     // LCD Reset  (LCD Pin 31)
+#define ILI9328_RES_PIN           3
+#define ILI9328_BL_PORT           2     // Backlight Enable (LCD Pin 16)
+#define ILI9328_BL_PIN            9
+
+// Data pins
+// Note: data pins must be consecutive and on the same port
+#define ILI9328_DATA_PORT         2     // 8-Pin Data Port
+#define ILI9328_DATA_PIN1         1
+#define ILI9328_DATA_PIN2         2
+#define ILI9328_DATA_PIN3         3
+#define ILI9328_DATA_PIN4         4
+#define ILI9328_DATA_PIN5         5
+#define ILI9328_DATA_PIN6         6
+#define ILI9328_DATA_PIN7         7
+#define ILI9328_DATA_PIN8         8
+#define ILI9328_DATA_MASK         0x000001FE
+#define ILI9328_DATA_OFFSET       1    // Offset = PIN1
+
+// Placed here to try to keep all pin specific values in header file
+#define ILI9328_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
+
+// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
+#define ILI9328_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ILI9328_DATA_MASK << 2))))
+#define ILI9328_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_WR_PIN) << 2))))
+#define ILI9328_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_CD_PIN) << 2))))
+#define ILI9328_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_CS_PIN) << 2))))
+#define ILI9328_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_RD_PIN) << 2))))
+#define ILI9328_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ILI9328_RES_PIN) << 2))))
+#define ILI9328_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CS_CD_PINS) << 2))))
+#define ILI9328_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_RD_WR_PINS) << 2))))
+#define ILI9328_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_WR_CS_PINS) << 2))))
+#define ILI9328_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CD_RD_WR_PINS) << 2))))
+#define ILI9328_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CS_CD_RD_WR_PINS) << 2))))
+
+// Macros to set data bus direction to input/output
+#define ILI9328_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ILI9328_DATA_MASK
+#define ILI9328_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ILI9328_DATA_MASK
+
+// Macros for control line state
+// NOPs required since the bit-banding is too fast for some ILI9328s to handle :(
+#define CLR_CD          ILI9328_GPIO1DATA_CD = (0); __asm volatile("nop");
+#define SET_CD          ILI9328_GPIO1DATA_CD = (1 << ILI9328_CD_PIN); __asm volatile("nop");
+#define CLR_CS          ILI9328_GPIO1DATA_CS = (0); __asm volatile("nop");
+#define SET_CS          ILI9328_GPIO1DATA_CS = (1 << ILI9328_CS_PIN); __asm volatile("nop");
+#define CLR_WR          ILI9328_GPIO1DATA_WR = (0); __asm volatile("nop");
+#define SET_WR          ILI9328_GPIO1DATA_WR = (1 << ILI9328_WR_PIN); __asm volatile("nop");
+#define CLR_RD          ILI9328_GPIO1DATA_RD = (0); __asm volatile("nop");
+#define SET_RD          ILI9328_GPIO1DATA_RD = (1 << ILI9328_RD_PIN); __asm volatile("nop");
+#define CLR_RESET       ILI9328_GPIO3DATA_RES = (0); __asm volatile("nop");
+#define SET_RESET       ILI9328_GPIO3DATA_RES = (1 << ILI9328_RES_PIN); __asm volatile("nop");
+
+// These 'combined' macros are defined to improve code performance by
+// reducing the number of instructions in heavily used functions
+#define CLR_CS_CD           ILI9328_GPIO1DATA_CS_CD = (0); __asm volatile("nop");
+#define SET_RD_WR           ILI9328_GPIO1DATA_RD_WR = (ILI9328_RD_WR_PINS); __asm volatile("nop");
+#define SET_WR_CS           ILI9328_GPIO1DATA_WR_CS = (ILI9328_WR_CS_PINS); __asm volatile("nop");
+#define SET_CD_RD_WR        ILI9328_GPIO1DATA_CD_RD_WR = (ILI9328_CD_RD_WR_PINS); __asm volatile("nop");
+#define CLR_CS_CD_SET_RD_WR ILI9328_GPIO1DATA_CS_CD_RD_WR = (ILI9328_RD_WR_PINS); __asm volatile("nop");
+#define CLR_CS_SET_CD_RD_WR ILI9328_GPIO1DATA_CS_CD_RD_WR = (ILI9328_CD_RD_WR_PINS); __asm volatile("nop");
+
+enum
+{
+  ILI9328_COMMANDS_DRIVERCODEREAD                 = 0x0000,
+  ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1           = 0x0001,
+  ILI9328_COMMANDS_LCDDRIVINGCONTROL              = 0x0002,
+  ILI9328_COMMANDS_ENTRYMODE                      = 0x0003,
+  ILI9328_COMMANDS_RESIZECONTROL                  = 0x0004,
+  ILI9328_COMMANDS_DISPLAYCONTROL1                = 0x0007,
+  ILI9328_COMMANDS_DISPLAYCONTROL2                = 0x0008,
+  ILI9328_COMMANDS_DISPLAYCONTROL3                = 0x0009,
+  ILI9328_COMMANDS_DISPLAYCONTROL4                = 0x000A,
+  ILI9328_COMMANDS_RGBDISPLAYINTERFACECONTROL1    = 0x000C,
+  ILI9328_COMMANDS_FRAMEMAKERPOSITION             = 0x000D,
+  ILI9328_COMMANDS_RGBDISPLAYINTERFACECONTROL2    = 0x000F,
+  ILI9328_COMMANDS_POWERCONTROL1                  = 0x0010,
+  ILI9328_COMMANDS_POWERCONTROL2                  = 0x0011,
+  ILI9328_COMMANDS_POWERCONTROL3                  = 0x0012,
+  ILI9328_COMMANDS_POWERCONTROL4                  = 0x0013,
+  ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET       = 0x0020,
+  ILI9328_COMMANDS_VERTICALGRAMADDRESSSET         = 0x0021,
+  ILI9328_COMMANDS_WRITEDATATOGRAM                = 0x0022,
+  ILI9328_COMMANDS_POWERCONTROL7                  = 0x0029,
+  ILI9328_COMMANDS_FRAMERATEANDCOLORCONTROL       = 0x002B,
+  ILI9328_COMMANDS_GAMMACONTROL1                  = 0x0030,
+  ILI9328_COMMANDS_GAMMACONTROL2                  = 0x0031,
+  ILI9328_COMMANDS_GAMMACONTROL3                  = 0x0032,
+  ILI9328_COMMANDS_GAMMACONTROL4                  = 0x0035,
+  ILI9328_COMMANDS_GAMMACONTROL5                  = 0x0036,
+  ILI9328_COMMANDS_GAMMACONTROL6                  = 0x0037,
+  ILI9328_COMMANDS_GAMMACONTROL7                  = 0x0038,
+  ILI9328_COMMANDS_GAMMACONTROL8                  = 0x0039,
+  ILI9328_COMMANDS_GAMMACONTROL9                  = 0x003C,
+  ILI9328_COMMANDS_GAMMACONTROL10                 = 0x003D,
+  ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION = 0x0050,
+  ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION   = 0x0051,
+  ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION   = 0x0052,
+  ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION     = 0x0053,
+  ILI9328_COMMANDS_DRIVEROUTPUTCONTROL2           = 0x0060,
+  ILI9328_COMMANDS_BASEIMAGEDISPLAYCONTROL        = 0x0061,
+  ILI9328_COMMANDS_VERTICALSCROLLCONTROL          = 0x006A,
+  ILI9328_COMMANDS_PARTIALIMAGE1DISPLAYPOSITION   = 0x0080,
+  ILI9328_COMMANDS_PARTIALIMAGE1AREASTARTLINE     = 0x0081,
+  ILI9328_COMMANDS_PARTIALIMAGE1AREAENDLINE       = 0x0082,
+  ILI9328_COMMANDS_PARTIALIMAGE2DISPLAYPOSITION   = 0x0083,
+  ILI9328_COMMANDS_PARTIALIMAGE2AREASTARTLINE     = 0x0084,
+  ILI9328_COMMANDS_PARTIALIMAGE2AREAENDLINE       = 0x0085,
+  ILI9328_COMMANDS_PANELINTERFACECONTROL1         = 0x0090,
+  ILI9328_COMMANDS_PANELINTERFACECONTROL2         = 0x0092,
+  ILI9328_COMMANDS_PANELINTERFACECONTROL4         = 0x0095,
+  ILI9328_COMMANDS_OTPVCMPROGRAMMINGCONTROL       = 0x00A1,
+  ILI9328_COMMANDS_OTPVCMSTATUSANDENABLE          = 0x00A2,
+  ILI9328_COMMANDS_OTPPROGRAMMINGIDKEY            = 0x00A5
+};
+
+#endif
diff --git a/drivers/displays/tft/hw/hx8340b.c b/drivers/displays/tft/hw/hx8340b.c
new file mode 100644 (file)
index 0000000..f6a7223
--- /dev/null
@@ -0,0 +1,515 @@
+/**************************************************************************/
+/*! 
+    @file     hx8340b.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for HX8340B 176x220 pixel TFT LCD displays.
+    
+    This driver uses a bit-banged SPI interface and a 16-bit RGB565
+    colour palette.
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012 Kevin Townsend
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "hx8340b.h"
+#include "core/systick/systick.h"
+#include "core/gpio/gpio.h"
+
+static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t hx8340bProperties = { 176, 220, FALSE, FALSE, FALSE };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/*************************************************/
+void hx8340bWriteCmd(uint8_t command) 
+{
+  CLR_CS;
+
+  CLR_SDI;
+  CLR_SCL;
+  SET_SCL;
+
+  uint8_t i = 0;
+  for (i=0; i<8; i++) 
+  { 
+    if (command & 0x80) 
+    { 
+      SET_SDI;   
+    } 
+    else 
+    { 
+      CLR_SDI; 
+    } 
+    CLR_SCL; 
+    command <<= 1; 
+    SET_SCL;
+  } 
+  SET_CS; 
+}
+
+/*************************************************/
+void hx8340bWriteData(uint8_t data)
+{
+  CLR_CS;
+
+  SET_SDI;
+  CLR_SCL;
+  SET_SCL;
+
+  uint8_t i = 0;
+  for (i=0; i<8; i++) 
+  { 
+    if (data & 0x80) 
+    { 
+      SET_SDI;
+    } 
+    else 
+    { 
+      CLR_SDI;
+    } 
+    CLR_SCL;
+    data <<= 1; 
+    SET_SCL;    
+  } 
+  SET_CS;
+}
+
+/*************************************************/
+void hx8340bWriteData16(uint16_t data)
+{
+  hx8340bWriteData((data>>8) & 0xFF);
+  hx8340bWriteData(data & 0xFF);
+}
+
+/*************************************************/
+void hx8340bWriteRegister(uint8_t reg, uint8_t value)
+{
+  hx8340bWriteCmd(reg);
+  hx8340bWriteCmd(value);
+}
+
+/*************************************************/
+void hx8340bInitDisplay(void)
+{
+#if defined HX8340B_ICVERSION_T
+  // Power Settings
+  hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x02);        // 0x18: Frequency = 100% (60fps) 
+  hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x00);        // 0x21: Disable Internal Oscillator
+  hx8340bWriteRegister(HX8340B_VCOMCONTROL1, 0x30);       // 0x23: VCOM Offset voltage
+  hx8340bWriteRegister(HX8340B_VCOMCONTROL2, 0x36);       // 0x24: VCOM High Voltage
+  hx8340bWriteRegister(HX8340B_VCOMCONTROL3, 0x1a);       // 0x25: VCOM Low Voltage
+
+  // Power Supply Settings
+  hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x44);        // 0x18: Frequency = 100% (60fps) (Internal 2.52MHz RC oscillator is +/-5% and made need to be tuned)
+  hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x01);        // 0x21: Enable Internal Oscillator
+  hx8340bWriteRegister(HX8340B_DISPLAYMODECONTROL, 0x00); // 0x01: Partial mode off, Sleep off, Scroll off, Invert off, Idle off
+  hx8340bWriteRegister(HX8340B_MEMACCESSCONTROL, 0x08);   // 0x16: Read/Write scanning direction and color order (0x08 = BGR, 0x00 = RGB)
+  hx8340bWriteRegister(HX8340B_COLMOD, 0x55);             // 0x17: RGB Data Format - 0x55 = 16bpp, 0x66 = 18bpp
+  hx8340bWriteRegister(HX8340B_POWERCONTROL5, 0x03);      // 0x1C: Current driving the power-supply op-amp, 0x03 = medium
+  hx8340bWriteRegister(HX8340B_POWERCONTROL1, 0x06);      // 0x19: B0 = DDVDH Step-up on/off, B1 = VGH/VGL step-up off/on, B2 = VCL step-up off/on (0x06 = all on)
+  systickDelay(6);
+
+  // Driving Settings
+  hx8340bWriteRegister(HX8340B_POWERCONTROL_INT1, 0x00);  // 0x60
+  hx8340bWriteRegister(HX8340B_POWERCONTROL_INT2, 0x06);  // 0x61
+  hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT1, 0x00); // 0x62
+  hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT2, 0xC8); // 0x63
+
+  // Gamma Settings
+  hx8340bWriteRegister(0x40,0x70);
+  hx8340bWriteRegister(0x41,0x51);
+  hx8340bWriteRegister(0x42,0x36);
+  hx8340bWriteRegister(0x43,0x04);
+  hx8340bWriteRegister(0x44,0x3B);
+  hx8340bWriteRegister(0x45,0x0E);
+  hx8340bWriteRegister(0x46,0x01);
+  hx8340bWriteRegister(0x47,0x1D);
+  hx8340bWriteRegister(0x48,0x09);
+  hx8340bWriteRegister(0x50,0x72);
+  hx8340bWriteRegister(0x51,0x20);
+  hx8340bWriteRegister(0x52,0x60);
+  hx8340bWriteRegister(0x53,0x01);
+  hx8340bWriteRegister(0x54,0x33);
+  hx8340bWriteRegister(0x55,0x0E);
+  hx8340bWriteRegister(0x56,0x02);
+  hx8340bWriteRegister(0x57,0x73);
+  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0x84);  // 0x26: B3 = display off/on (1 = on, 0 = off), also controls gate for VGH/VGL
+  systickDelay(40);
+  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xB8);  // 0x26: Display on
+  systickDelay(40);
+  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xBC);
+
+  // Set GRAM Area
+  hx8340bWriteRegister(HX8340B_COLADDR_START2, 0x00);
+  hx8340bWriteRegister(HX8340B_COLADDR_START1, 0x00);
+  hx8340bWriteRegister(HX8340B_COLADDR_END2, 0x00);
+  hx8340bWriteRegister(HX8340B_COLADDR_END1, 0xAF);     // 175
+  hx8340bWriteRegister(HX8340B_ROWADDR_START2, 0x00);
+  hx8340bWriteRegister(HX8340B_ROWADDR_START1, 0x00);
+  hx8340bWriteRegister(HX8340B_ROWADDR_END2, 0x00);
+  hx8340bWriteRegister(HX8340B_ROWADDR_END1, 0xDB);     // 219
+
+  hx8340bWriteCmd(HX8340B_SRAMWRITECONTROL);
+#endif
+
+#if defined HX8340B_ICVERSION_N
+  hx8340bWriteCmd(HX8340B_N_SETEXTCMD); 
+  hx8340bWriteData(0xFF);
+  hx8340bWriteData(0x83);
+  hx8340bWriteData(0x40); 
+
+  hx8340bWriteCmd(HX8340B_N_SPLOUT); 
+  systickDelay(100);
+
+  hx8340bWriteCmd(0xCA);                  // Undocumented register?
+  hx8340bWriteData(0x70);
+  hx8340bWriteData(0x00);
+  hx8340bWriteData(0xD9); 
+  hx8340bWriteData(0x01);
+  hx8340bWriteData(0x11); 
+  
+  hx8340bWriteCmd(0xC9);                  // Undocumented register?
+  hx8340bWriteData(0x90);
+  hx8340bWriteData(0x49);
+  hx8340bWriteData(0x10); 
+  hx8340bWriteData(0x28);
+  hx8340bWriteData(0x28); 
+  hx8340bWriteData(0x10); 
+  hx8340bWriteData(0x00); 
+  hx8340bWriteData(0x06);
+  systickDelay(20);
+
+  hx8340bWriteCmd(HX8340B_N_SETGAMMAP);
+  hx8340bWriteData(0x60);
+  hx8340bWriteData(0x71);
+  hx8340bWriteData(0x01); 
+  hx8340bWriteData(0x0E);
+  hx8340bWriteData(0x05); 
+  hx8340bWriteData(0x02); 
+  hx8340bWriteData(0x09); 
+  hx8340bWriteData(0x31);
+  hx8340bWriteData(0x0A);
+  
+  hx8340bWriteCmd(HX8340B_N_SETGAMMAN); 
+  hx8340bWriteData(0x67);
+  hx8340bWriteData(0x30);
+  hx8340bWriteData(0x61); 
+  hx8340bWriteData(0x17);
+  hx8340bWriteData(0x48); 
+  hx8340bWriteData(0x07); 
+  hx8340bWriteData(0x05); 
+  hx8340bWriteData(0x33); 
+  systickDelay(10);
+
+  hx8340bWriteCmd(HX8340B_N_SETPWCTR5); 
+  hx8340bWriteData(0x35);
+  hx8340bWriteData(0x20);
+  hx8340bWriteData(0x45); 
+  
+  hx8340bWriteCmd(HX8340B_N_SETPWCTR4); 
+  hx8340bWriteData(0x33);
+  hx8340bWriteData(0x25);
+  hx8340bWriteData(0x4c); 
+  systickDelay(10);
+
+  hx8340bWriteCmd(HX8340B_N_COLMOD);      // Color Mode
+  hx8340bWriteData(0x05);                 // 0x05 = 16bpp, 0x06 = 18bpp
+
+  hx8340bWriteCmd(HX8340B_N_DISPON); 
+  systickDelay(10);
+
+  hx8340bWriteCmd(HX8340B_N_CASET); 
+  hx8340bWriteData(0x00);
+  hx8340bWriteData(0x00);
+  hx8340bWriteData(0x00); 
+  hx8340bWriteData(0xaf);                 // 175
+
+  hx8340bWriteCmd(HX8340B_N_PASET); 
+  hx8340bWriteData(0x00);
+  hx8340bWriteData(0x00);
+  hx8340bWriteData(0x00); 
+  hx8340bWriteData(0xdb);                // 219
+
+  hx8340bWriteCmd(HX8340B_N_RAMWR); 
+#endif
+}
+
+/*************************************************/
+void hx8340bHome(void)
+{
+#if defined HX8340B_ICVERSION_N
+   hx8340bWriteCmd(HX8340B_N_CASET);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0xaf);  
+   hx8340bWriteCmd(HX8340B_N_PASET);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0x00);
+   hx8340bWriteData(0xdb);     
+#endif
+}
+
+/*************************************************/
+static inline void hx8340bSetPosition(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1)
+{
+#if defined HX8340B_ICVERSION_N
+  hx8340bWriteCmd(HX8340B_N_CASET);
+  hx8340bWriteData(x0>>8);
+  hx8340bWriteData(x0);
+  hx8340bWriteData(x1>>8);
+  hx8340bWriteData(x1);
+  
+  hx8340bWriteCmd(HX8340B_N_PASET);
+  hx8340bWriteData(y0>>8);
+  hx8340bWriteData(y0);
+  hx8340bWriteData(y1>>8);
+  hx8340bWriteData(y1);
+
+  hx8340bWriteCmd(HX8340B_N_RAMWR);
+#endif
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/*************************************************/
+void lcdInit(void)
+{
+  // Set control pins to output
+  gpioSetDir(HX8340B_PORT, HX8340B_SDI_PIN, 1);
+  gpioSetDir(HX8340B_PORT, HX8340B_SCL_PIN, 1);
+  gpioSetDir(HX8340B_PORT, HX8340B_CS_PIN, 1);
+  gpioSetDir(HX8340B_PORT, HX8340B_RES_PIN, 1);
+  gpioSetDir(HX8340B_PORT, HX8340B_BL_PIN, 1);
+
+  // Set pins low by default (except reset)
+  CLR_SDI;
+  CLR_SCL;
+  CLR_CS;
+  CLR_BL;
+  SET_RES;
+  
+  // Turn backlight on
+  lcdBacklight(TRUE);
+
+  // Reset display
+  SET_RES;
+  systickDelay(100);
+  CLR_RES;
+  systickDelay(50);
+  SET_RES;
+  systickDelay(50);
+
+  // Run LCD init sequence
+  hx8340bInitDisplay();
+
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+}
+
+/*************************************************/
+void lcdBacklight(bool state)
+{
+  // Set the backlight
+  // Note: Depending on the type of transistor used
+  // to control the backlight, you made need to invert
+  // the values below
+  if (state)
+    // CLR_BL;
+    SET_BL;
+  else
+    // SET_BL;
+    CLR_BL;
+}
+
+/*************************************************/
+void lcdTest(void)
+{
+#if defined HX8340B_ICVERSION_N
+  lcdFillRGB(COLOR_GREEN);
+#endif
+}
+
+/*************************************************/
+void lcdFillRGB(uint16_t color)
+{
+#if defined HX8340B_ICVERSION_N
+  uint8_t i,j;
+  for (i=0;i<220;i++)
+  {
+    for (j=0;j<176;j++)
+    {
+      hx8340bWriteData16(color);
+    }
+  }
+#endif
+}
+
+/*************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  hx8340bSetPosition(x, y, x+1, y+1);
+  hx8340bWriteData16(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  // ToDo: Optimise this function ... currently only a placeholder
+  uint32_t i = 0;
+  do
+  {
+    lcdDrawPixel(x+i, y, data[i]);
+    i++;
+  } while (i<len);
+}
+
+/*************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t x, pixels;
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  // Check limits
+  if (x1 >= lcdGetWidth())
+  {
+    x1 = lcdGetWidth() - 1;
+  }
+  if (x0 >= lcdGetWidth())
+  {
+    x0 = lcdGetWidth() - 1;
+  }
+
+  hx8340bSetPosition(x0, y, x1, y+1);
+  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+  {
+    hx8340bWriteData16(color);
+  }
+}
+
+/*************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t y, pixels;
+
+  if (y1 < y0)
+  {
+    // Switch y1 and y0
+    y = y1;
+    y1 = y0;
+    y0 = y;
+  }
+
+  // Check limits
+  if (y1 >= lcdGetHeight())
+  {
+    y1 = lcdGetHeight() - 1;
+  }
+  if (y0 >= lcdGetHeight())
+  {
+    y0 = lcdGetHeight() - 1;
+  }
+
+  for (pixels = 0; pixels < y1 - y0 + 1; pixels++)
+  {
+    hx8340bSetPosition(x, y0+pixels, x+1, y0+pixels+1);
+    hx8340bWriteData16(color);
+  }
+}
+
+/*************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  // ToDo
+  return 0;
+}
+
+/*************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  // ToDo
+}
+
+/*************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/*************************************************/
+uint16_t lcdGetWidth(void)
+{
+  return hx8340bProperties.width;
+}
+
+/*************************************************/
+uint16_t lcdGetHeight(void)
+{
+  return hx8340bProperties.height;
+}
+
+/*************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  // ToDo
+}
+
+/*************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return 0x8340;
+}
+
+/*************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+  return hx8340bProperties;
+}
diff --git a/drivers/displays/tft/hw/hx8340b.h b/drivers/displays/tft/hw/hx8340b.h
new file mode 100644 (file)
index 0000000..d425324
--- /dev/null
@@ -0,0 +1,203 @@
+/**************************************************************************/
+/*! 
+    @file     hx8340b.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __HX8340B_H__
+#define __HX8340B_H__
+
+#include "projectconfig.h"
+#include "drivers/displays/tft/lcd.h"
+
+#define HX8340B_ICVERSION_N
+// #define HX8340B_ICVERSION_T
+
+#if defined HX8340B_ICVERSION_N && defined HX8340B_ICVERSION_T
+  #error "Only one IC version can be set for HX8340B (HX8340B_ICVERSION_N or HX8340B_ICVERSION_T)"
+#endif
+#if !defined HX8340B_ICVERSION_N && !defined HX8340B_ICVERSION_T
+  #error "HX8340B_ICVERSION_N or HX8340B_ICVERSION_T must be defined for HW8340 LCDs"
+#endif
+
+/**************************************************************************
+    BTL221722-276L CONNECTOR (Use HX8340B_ICVERSION_N)
+    -----------------------------------------------------------------------
+    Pin   Function        Notes
+    ===   ==============  ===============================
+      1   VSS
+      2   NC
+      3   LED A/+         Vf 3.3V
+      4   VDD             2.8-3.3V
+      5   CS
+      6   SDI             Serial Data
+      7   SCL             Serial Clock
+      8   RS              Not used
+      9   RESET
+     10   VDD             2.8-3.3V
+     11   LED K1
+     12   LED K2
+     13   LED K3
+     14   VSS
+
+ **************************************************************************/
+
+// Control pins
+#define HX8340B_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
+#define HX8340B_PORT            (2)
+#define HX8340B_SDI_PIN         (2)
+#define HX8340B_SCL_PIN         (3)
+#define HX8340B_CS_PIN          (4)
+#define HX8340B_RES_PIN         (5)
+#define HX8340B_BL_PIN          (6)
+
+// Macros for control line state
+#define CLR_SDI     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); } while(0)
+#define SET_SDI     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SDI_PIN); } while(0)
+#define CLR_SCL     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); } while(0)
+#define SET_SCL     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SCL_PIN); } while(0)
+#define CLR_CS      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); } while(0)
+#define SET_CS      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_CS_PIN); } while(0)
+#define CLR_RES     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); } while(0)
+#define SET_RES     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_RES_PIN); } while(0)
+#define CLR_BL      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); } while(0)
+#define SET_BL      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_BL_PIN); } while(0)
+
+// HX8340-B(N) Commands (used by BTL221722-276L)
+#define HX8340B_N_NOP                     (0x00)
+#define HX8340B_N_SWRESET                 (0x01)
+#define HX8340B_N_RDDIDIF                 (0x04)
+#define HX8340B_N_RDDST                   (0x09)
+#define HX8340B_N_RDDPM                   (0x0A)
+#define HX8340B_N_RDDMADCTL               (0x0B)
+#define HX8340B_N_RDDCOLMOD               (0x0C)
+#define HX8340B_N_RDDIM                   (0x0D)
+#define HX8340B_N_RDDSM                   (0x0E)
+#define HX8340B_N_RDDSDR                  (0x0F)
+#define HX8340B_N_SLPIN                   (0x10)
+#define HX8340B_N_SPLOUT                  (0x11)
+#define HX8340B_N_PTLON                   (0x12)
+#define HX8340B_N_NORON                   (0x13)
+#define HX8340B_N_INVOFF                  (0x20)
+#define HX8340B_N_INVON                   (0x21)
+#define HX8340B_N_GAMSET                  (0x26)
+#define HX8340B_N_DISPOFF                 (0x28)
+#define HX8340B_N_DISPON                  (0x29)
+#define HX8340B_N_CASET                   (0x2A)
+#define HX8340B_N_PASET                   (0x2B)
+#define HX8340B_N_RAMWR                   (0x2C)
+#define HX8340B_N_RAMRD                   (0x2E)
+#define HX8340B_N_RGBSET                  (0x2D)
+#define HX8340B_N_PLTAR                   (0x30)
+#define HX8340B_N_VSCRDEF                 (0x33)
+#define HX8340B_N_TEOFF                   (0x34)
+#define HX8340B_N_TEON                    (0x35)
+#define HX8340B_N_MADCTL                  (0x36)
+#define HX8340B_N_VSCRSADD                (0x37)
+#define HX8340B_N_IDMOFF                  (0x38)
+#define HX8340B_N_IDMON                   (0x39)
+#define HX8340B_N_COLMOD                  (0x3A)
+#define HX8340B_N_RDID1                   (0xDA)
+#define HX8340B_N_RDID2                   (0xDB)
+#define HX8340B_N_RDID3                   (0xDC)
+#define HX8340B_N_SETOSC                  (0xB0)
+#define HX8340B_N_SETPWCTR1               (0xB1)
+#define HX8340B_N_SETPWCTR2               (0xB2)
+#define HX8340B_N_SETPWCTR3               (0xB3)
+#define HX8340B_N_SETPWCTR4               (0xB4)
+#define HX8340B_N_SETPWCTR5               (0xB5)
+#define HX8340B_N_SETDISCTRL              (0xB6)
+#define HX8340B_N_SETFRMCTRL              (0xB7)
+#define HX8340B_N_SETDISCYCCTRL           (0xB8)
+#define HX8340B_N_SETINVCTRL              (0xB9)
+#define HX8340B_N_RGBBPCTR                (0xBA)
+#define HX8340B_N_SETRGBIF                (0xBB)
+#define HX8340B_N_SETDODC                 (0xBC)
+#define HX8340B_N_SETINTMODE              (0xBD)
+#define HX8340B_N_SETPANEL                (0xBE)
+#define HX8340B_N_SETOTP                  (0xC7)
+#define HX8340B_N_SETONOFF                (0xC0)
+#define HX8340B_N_SETEXTCMD               (0xC1)
+#define HX8340B_N_SETGAMMAP               (0xC2)
+#define HX8340B_N_SETGAMMAN               (0xC3)
+
+// HX8340-B(T) Commands
+#define HX8340B_T_DISPLAYMODECONTROL      (0x01)
+#define HX8340B_T_COLADDR_START2          (0x02)
+#define HX8340B_T_COLADDR_START1          (0x03)
+#define HX8340B_T_COLADDR_END2            (0x04)
+#define HX8340B_T_COLADDR_END1            (0x05)
+#define HX8340B_T_ROWADDR_START2          (0x06)
+#define HX8340B_T_ROWADDR_START1          (0x07)
+#define HX8340B_T_ROWADDR_END2            (0x08)
+#define HX8340B_T_ROWADDR_END1            (0x09)
+#define HX8340B_T_MEMACCESSCONTROL        (0x16)
+#define HX8340B_T_COLMOD                  (0x17)
+#define HX8340B_T_OSCCONTROLA             (0x18)
+#define HX8340B_T_POWERCONTROL1           (0x19)
+#define HX8340B_T_POWERCONTROL3           (0x1A)
+#define HX8340B_T_POWERCONTROL4           (0x1B)
+#define HX8340B_T_POWERCONTROL5           (0x1C)
+#define HX8340B_T_POWERCONTROL6           (0x1D)
+#define HX8340B_T_POWERCONTROL7           (0x1E)
+#define HX8340B_T_POWERCONTROL8           (0x1F)
+#define HX8340B_T_POWERCONTROL9           (0x20)
+#define HX8340B_T_OSCCONTROLB             (0x21)
+#define HX8340B_T_SRAMWRITECONTROL        (0x22)
+#define HX8340B_T_VCOMCONTROL1            (0x23)
+#define HX8340B_T_VCOMCONTROL2            (0x24)
+#define HX8340B_T_VCOMCONTROL3            (0x25)
+#define HX8340B_T_DISPLAYCONTROL1         (0x26)
+#define HX8340B_T_DISPLAYCONTROL2         (0x27)
+#define HX8340B_T_FRAMERATECONTROL1       (0x28)
+#define HX8340B_T_FRAMERATECONTROL2       (0x29)
+#define HX8340B_T_FRAMERATECONTROL3       (0x2A)
+#define HX8340B_T_FRAMERATECONTROL4       (0x2B)
+#define HX8340B_T_DISPLAYINVERSION        (0x2F)
+#define HX8340B_T_RGBINTERFACECONTROL1    (0x31)
+#define HX8340B_T_RGBINTERFACECONTROL2    (0x32)
+#define HX8340B_T_RGBINTERFACECONTROL3    (0x33)
+#define HX8340B_T_RGBINTERFACECONTROL4    (0x34)
+#define HX8340B_T_OUTPUTSDIRECTION        (0x35)
+#define HX8340B_T_INTERFACEMODE           (0x36)
+#define HX8340B_T_NWNBPANELSET            (0x37)
+#define HX8340B_T_OTPCONTROL1             (0x38)
+#define HX8340B_T_OTPCONTROL2             (0x39)
+#define HX8340B_T_OTPCONTROL3             (0x3A)
+#define HX8340B_T_POWERCONTROL_INT1       (0x60)
+#define HX8340B_T_POWERCONTROL_INT2       (0x61)
+#define HX8340B_T_SOURCECONTROL_INT1      (0x62)
+#define HX8340B_T_SOURCECONTROL_INT2      (0x63)
+#define HX8340B_T_SOURCEOPCONTROL         (0x73)
+#define HX8340B_T_HIMAXID                 (0x93)
+
+#endif
diff --git a/drivers/displays/tft/hw/readme.txt b/drivers/displays/tft/hw/readme.txt
new file mode 100644 (file)
index 0000000..6e318f8
--- /dev/null
@@ -0,0 +1,16 @@
+HW-Specific LCD Drivers
+=======================
+
+hx8340b   - 176x220 16-bit display (Bit-banged SPI interface)
+ILI9325   - 240x320 16-bit display  (8-bit interface)
+ILI9328   - 240x320 16-bit display  (8-bit interface)
+st7735    - 128x160 16-bit display  (Bit-banged SPI interface)
+st7783    - 240x320 16-bit display  (8-bit interface)
+ssd1331   - 96x64 16-bit OLED display (Bit-banged SPI interface) 
+ssd1351   - 128x128 16-bit OLED display (Bit-banged SPI interface)
+
+
+NOTE: Only the ILI9325 and ILI9328 drivers have been fully tested.
+The others are incomplete or have only been partially tested. (The
+ST7783 driver, for example, has issues when the screen orientation
+is set to landscape.)
\ No newline at end of file
diff --git a/drivers/displays/tft/hw/ssd1331.c b/drivers/displays/tft/hw/ssd1331.c
new file mode 100644 (file)
index 0000000..a934ba2
--- /dev/null
@@ -0,0 +1,481 @@
+/**************************************************************************/
+/*! 
+    @file     SSD1331.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for SSD1331 96x64 pixel RGB OLED displays.
+    
+    This driver uses a bit-banged SPI interface and 16-bit RGB565 colours.
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "ssd1331.h"
+#include "core/systick/systick.h"
+
+static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t ssd1331Properties = { 96, 64, false, false, false };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+#define CMD(c)        do { SET_CS; CLR_DC; CLR_CS; ssd1331SendByte( c ); SET_CS; } while (0)
+#define DATA(c)       do { SET_CS; SET_DC; CLR_CS; ssd1331SendByte( c ); SET_CS; } while (0);
+#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
+
+/**************************************************************************/
+/*! 
+    @brief Simulates an SPI write using GPIO
+
+    @param[in]  byte
+                The byte to send
+*/
+/**************************************************************************/
+void ssd1331SendByte(uint8_t byte)
+{
+  int8_t i;
+
+  // Make sure clock pin starts high
+  SET_SCK;
+
+  // Write from MSB to LSB
+  for (i=7; i>=0; i--) 
+  {
+    // Set clock pin low
+    CLR_SCK;
+    // Set data pin high or low depending on the value of the current bit
+    if (byte & (1 << i))
+    {
+      SET_SID;
+    }
+    else
+    {
+      CLR_SID;
+    }
+    // Set clock pin high
+    SET_SCK;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value from the 8-bit data bus
+*/
+/**************************************************************************/
+uint16_t ssd1331ReadData(void)
+{
+  // ToDo
+  return 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Reads a 16-bit value
+*/
+/**************************************************************************/
+uint16_t ssd1331Read(uint16_t addr)
+{
+  // ToDo
+  return 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the 16-bit (4-hexdigit) controller code
+*/
+/**************************************************************************/
+uint16_t ssd1331Type(void)
+{
+  return 0x1331;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the specified X/Y position
+*/
+/**************************************************************************/
+void ssd1331SetCursor(uint8_t x, uint8_t y)
+{
+  if ((x >= ssd1331Properties.width) || (y >= ssd1331Properties.height))
+    return;
+  // set x and y coordinate
+  CMD(SSD1331_CMD_SETCOLUMN);
+  CMD(x);
+  CMD(ssd1331Properties.width-1);
+
+  CMD(SSD1331_CMD_SETROW);
+  CMD(y);
+  CMD(ssd1331Properties.height-1);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a solid line using HW acceleration
+*/
+/**************************************************************************/
+void ssd1331DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint16_t color) 
+{  
+  uint16_t x, pixels;
+
+  if ((x1 >= ssd1331Properties.width) || (x2 >= ssd1331Properties.width) ||
+      (y1 >= ssd1331Properties.height) || (y2 >= ssd1331Properties.height)) {
+      return;
+  }
+
+  // Switch x2 and x1 if required
+  if (x2 < x1)
+  {
+    x = x2;
+    x2 = x1;
+    x1 = x;
+  }
+
+  // Switch y2 and y1 if required
+  if (y2 < y1)
+  {
+    x = y2;
+    y2 = y1;
+    y1 = x;
+  }
+
+  CMD(SSD1331_CMD_DRAWLINE);
+  CMD(x1);
+  CMD(y1);
+  CMD(x2);
+  CMD(y2);
+  CMD((uint8_t)((color >> 11) & 0x1F));
+  CMD((uint8_t)((color >> 5) & 0x3F));
+  CMD((uint8_t)(color & 0x1F));
+
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a filled rectangle using HW acceleration
+*/
+/**************************************************************************/
+void ssd1331FillRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint16_t pencolor, uint16_t fillcolor) 
+{
+  if ((x1 >= ssd1331Properties.width) || (x2 >= ssd1331Properties.width) ||
+      (y1 >= ssd1331Properties.height) || (y2 >= ssd1331Properties.height)) {
+      return;
+       }
+  
+  // fill!
+  CMD(SSD1331_CMD_FILL);
+  CMD(0x01);
+
+  CMD(SSD1331_CMD_DRAWRECT);
+  CMD(x1);
+  CMD(y1);
+  CMD(x2);
+  CMD(y2);
+  CMD((pencolor >> 11) << 1);
+  CMD((pencolor >> 5) & 0x3F);
+  CMD((pencolor << 1)& 0x3F);
+  CMD((fillcolor >> 11) << 1);
+  CMD((fillcolor >> 5) & 0x3F);
+  CMD((fillcolor << 1)& 0x3F);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Inverts the R and B in an RGB565 color
+*/
+/**************************************************************************/
+uint16_t invert565Color(uint16_t color)
+{   
+  uint16_t r, g, b;   
+   
+  b = (color>>0)  & 0x1f;   
+  g = (color>>5)  & 0x3f;   
+  r = (color>>11) & 0x1f;   
+     
+  return( (b<<11) + (g<<5) + (r<<0) );
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Configures any pins or HW and initialises the LCD controller
+*/
+/**************************************************************************/
+void lcdInit(void)
+{
+  // Set all pins to output
+  gpioSetDir(SSD1331_SCK_PORT, SSD1331_SCK_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1331_SID_PORT, SSD1331_SID_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1331_DC_PORT, SSD1331_DC_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1331_RST_PORT, SSD1331_RST_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1331_CS_PORT, SSD1331_CS_PIN, gpioDirection_Output);
+
+  // Reset the LCD
+  SET_RST;
+  DELAY(1);
+  CLR_RST;
+  DELAY(10);
+  SET_RST;
+
+  // Disable pullups
+  SSD1331_DISABLEPULLUPS();
+  
+  CMD(SSD1331_CMD_DISPLAYOFF);  // 0xAE
+  CMD(SSD1331_CMD_SETREMAP); // 0xA0
+  // A[2] = 1 = color order (0 = RGB, 1 = BGR)
+  // A[7:6] = 01 = 65K color
+  #if defined SSD1331_COLORORDER_BGR
+  CMD(0x76);
+  #else
+  CMD(0x72);
+  #endif
+  CMD(SSD1331_CMD_STARTLINE); // 0xA1
+  CMD(0x0);
+  CMD(SSD1331_CMD_DISPLAYOFFSET); // 0xA2
+  CMD(0x0);
+  CMD(SSD1331_CMD_NORMALDISPLAY);  // 0xA4
+  CMD(SSD1331_CMD_SETMULTIPLEX); // 0xA8
+  CMD(0x3F);  // 0x3F 1/64 duty
+  CMD(SSD1331_CMD_SETMASTER);  // 0xAD
+  CMD(0x8E);
+  CMD(SSD1331_CMD_POWERMODE);  // 0xB0
+  CMD(0x0B);
+  CMD(SSD1331_CMD_PRECHARGE);  // 0xB1
+  CMD(0x31);
+  CMD(SSD1331_CMD_CLOCKDIV);  // 0xB3
+  CMD(0xF0);  // 7:4 = Oscillator Frequency, 3:0 = CLK Div Ratio (A[3:0]+1 = 1..16)
+  CMD(SSD1331_CMD_PRECHARGEA);  // 0x8A
+  CMD(0x64);
+  CMD(SSD1331_CMD_PRECHARGEB);  // 0x8B
+  CMD(0x78);
+  CMD(SSD1331_CMD_PRECHARGEA);  // 0x8C
+  CMD(0x64);
+  CMD(SSD1331_CMD_PRECHARGELEVEL);  // 0xBB
+  CMD(0x3A);
+  CMD(SSD1331_CMD_VCOMH);  // 0xBE
+  CMD(0x3E);
+  CMD(SSD1331_CMD_MASTERCURRENT);  // 0x87
+  CMD(0x06);
+  CMD(SSD1331_CMD_CONTRASTA);  // 0x81
+  CMD(0x91);
+  CMD(SSD1331_CMD_CONTRASTB);  // 0x82
+  CMD(0x50);
+  CMD(SSD1331_CMD_CONTRASTC);  // 0x83
+  CMD(0x7D);
+  CMD(SSD1331_CMD_DISPLAYON);//--turn on oled panel
+  
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Enables or disables the LCD backlight
+*/
+/**************************************************************************/
+void lcdBacklight(bool state)
+{
+  // No backlight ... do nothing
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a simple test pattern on the LCD
+*/
+/**************************************************************************/
+void lcdTest(void)
+{
+  uint32_t i,j;
+  ssd1331SetCursor(0, 0);
+  
+  for(i=0;i<64;i++)
+  {
+    for(j=0;j<96;j++)
+    {
+      if(i>55){DATA((uint8_t)COLOR_WHITE>>8);DATA((uint8_t)COLOR_WHITE);}
+      else if(i>47){DATA((uint8_t)COLOR_BLUE>>8);DATA((uint8_t)COLOR_BLUE);}
+      else if(i>39){DATA((uint8_t)COLOR_GREEN>>8);DATA((uint8_t)COLOR_GREEN);}
+      else if(i>31){DATA((uint8_t)COLOR_CYAN>>8);DATA((uint8_t)COLOR_CYAN);}
+      else if(i>23){DATA((uint8_t)COLOR_RED>>8);DATA((uint8_t)COLOR_RED);}
+      else if(i>15){DATA((uint8_t)COLOR_MAGENTA>>8);DATA((uint8_t)COLOR_MAGENTA);}
+      else if(i>7){DATA((uint8_t)COLOR_YELLOW>>8);DATA((uint8_t)COLOR_YELLOW);}
+      else {DATA((uint8_t)COLOR_BLACK>>8);DATA((uint8_t)COLOR_BLACK);}
+    }
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Fills the LCD with the specified 16-bit color
+*/
+/**************************************************************************/
+void lcdFillRGB(uint16_t data)
+{
+  ssd1331FillRect(0,0,ssd1331Properties.width-1,ssd1331Properties.height-1, data, data);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a single pixel at the specified X/Y location
+*/
+/**************************************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  if ((x >= ssd1331Properties.width) || (y >= ssd1331Properties.height))
+    return;
+
+  ssd1331SetCursor((uint8_t)x, (uint8_t)y);
+  DATA(color >> 8);
+  DATA(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a horizontal line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  ssd1331DrawLine((uint8_t)x0, (uint8_t)y, (uint8_t)x1, (uint8_t)y, color); 
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a vertical line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  ssd1331DrawLine((uint8_t)x, (uint8_t)y0, (uint8_t)x, (uint8_t)y1, color); 
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the 16-bit color of the pixel at the specified location
+*/
+/**************************************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  // ToDo
+  return 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the LCD orientation to horizontal and vertical
+*/
+/**************************************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  // Not supported
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the current screen orientation (horizontal or vertical)
+*/
+/**************************************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the width in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetWidth(void)
+{
+  return ssd1331Properties.width;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the height in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetHeight(void)
+{
+  return ssd1331Properties.height;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Scrolls the contents of the LCD screen vertically the
+            specified number of pixels using a HW optimised routine
+*/
+/**************************************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the controller's 16-bit (4 hexdigit) ID
+*/
+/**************************************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return ssd1331Type();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
+            generic capabilities and dimensions
+*/
+/**************************************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+  return ssd1331Properties;
+}
diff --git a/drivers/displays/tft/hw/ssd1331.h b/drivers/displays/tft/hw/ssd1331.h
new file mode 100644 (file)
index 0000000..f4eb5a0
--- /dev/null
@@ -0,0 +1,122 @@
+/**************************************************************************/
+/*! 
+    @file     ssd1331.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SSD1331_H__
+#define __SSD1331_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/tft/lcd.h"
+#include "core/gpio/gpio.h"
+
+// Select one of these defines to set the pixel color order
+#define SSD1331_COLORORDER_RGB
+// #define SSD1331_COLORORDER_BGR
+
+#if defined SSD1331_COLORORDER_RGB && defined SSD1331_COLORORDER_BGR
+  #error "RGB and BGR can not both be defined for SSD1331_COLORODER."
+#endif
+
+// Control pins
+#define SSD1331_SID_PORT          2     // DAT
+#define SSD1331_SID_PIN           1
+#define SSD1331_SCK_PORT          2     // SCK
+#define SSD1331_SCK_PIN           2
+#define SSD1331_DC_PORT           2     // D/C
+#define SSD1331_DC_PIN            3
+#define SSD1331_RST_PORT          2     // RST
+#define SSD1331_RST_PIN           4
+#define SSD1331_CS_PORT           2     // OLEDCS
+#define SSD1331_CS_PIN            5
+
+// Placed here to try to keep all pin specific values in header file
+#define SSD1331_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); } while (0)
+
+// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
+#define SSD1331_GPIO2DATA_SID         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_SID_PIN) << 2))))
+#define SSD1331_GPIO2DATA_SCK         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_SCK_PIN) << 2))))
+#define SSD1331_GPIO2DATA_DC          (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_DC_PIN) << 2))))
+#define SSD1331_GPIO2DATA_RST         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_RST_PIN) << 2))))
+#define SSD1331_GPIO2DATA_CS          (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_CS_PIN) << 2))))
+
+// Macros for control line state
+#define CLR_DC          SSD1331_GPIO2DATA_DC = (0)
+#define SET_DC          SSD1331_GPIO2DATA_DC = (1 << SSD1331_DC_PIN)
+#define CLR_RST         SSD1331_GPIO2DATA_RST = (0)
+#define SET_RST         SSD1331_GPIO2DATA_RST = (1 << SSD1331_RST_PIN)
+#define CLR_CS          SSD1331_GPIO2DATA_CS = (0)
+#define SET_CS          SSD1331_GPIO2DATA_CS = (1 << SSD1331_CS_PIN)
+#define CLR_SCK         SSD1331_GPIO2DATA_SCK = (0)
+#define SET_SCK         SSD1331_GPIO2DATA_SCK = (1 << SSD1331_SCK_PIN)
+#define CLR_SID         SSD1331_GPIO2DATA_SID = (0)
+#define SET_SID         SSD1331_GPIO2DATA_SID = (1 << SSD1331_SID_PIN)
+
+enum
+{
+  SSD1331_CMD_DRAWLINE                 = 0x21,
+  SSD1331_CMD_DRAWRECT                 = 0x22,
+  SSD1331_CMD_FILL             = 0x26,
+  SSD1331_CMD_SETCOLUMN        = 0x15,
+  SSD1331_CMD_SETROW           = 0x75,
+  SSD1331_CMD_CONTRASTA        = 0x81,
+  SSD1331_CMD_CONTRASTB        = 0x82,
+  SSD1331_CMD_CONTRASTC                = 0x83,
+  SSD1331_CMD_MASTERCURRENT    = 0x87,
+  SSD1331_CMD_SETREMAP                 = 0xA0,
+  SSD1331_CMD_STARTLINE        = 0xA1,
+  SSD1331_CMD_DISPLAYOFFSET    = 0xA2,
+  SSD1331_CMD_NORMALDISPLAY    = 0xA4,
+  SSD1331_CMD_DISPLAYALLON     = 0xA5,
+  SSD1331_CMD_DISPLAYALLOFF    = 0xA6,
+  SSD1331_CMD_INVERTDISPLAY    = 0xA7,
+  SSD1331_CMD_SETMULTIPLEX     = 0xA8,
+  SSD1331_CMD_SETMASTER        = 0xAD,
+  SSD1331_CMD_DISPLAYOFF       = 0xAE,
+  SSD1331_CMD_DISPLAYON        = 0xAF,
+  SSD1331_CMD_POWERMODE        = 0xB0,
+  SSD1331_CMD_PRECHARGE        = 0xB1,
+  SSD1331_CMD_CLOCKDIV                 = 0xB3,
+  SSD1331_CMD_PRECHARGEA       = 0x8A,
+  SSD1331_CMD_PRECHARGEB       = 0x8B,
+  SSD1331_CMD_PRECHARGEC       = 0x8C,
+  SSD1331_CMD_PRECHARGELEVEL   = 0xBB,
+  SSD1331_CMD_VCOMH            = 0xBE
+};
+
+#endif
diff --git a/drivers/displays/tft/hw/ssd1351.c b/drivers/displays/tft/hw/ssd1351.c
new file mode 100644 (file)
index 0000000..bd9e6ac
--- /dev/null
@@ -0,0 +1,473 @@
+/**************************************************************************/
+/*! 
+    @file     SSD1351.c
+    @author   K. Townsend (www.adafruit.com)
+
+    @section  DESCRIPTION
+
+    Driver for SSD1351 128x128 pixel RGB OLED displays.
+    
+    This driver uses a 3 or 4-pin SPI interface and 16-bit RGB565 colours.
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012, Adafruit Industries
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "ssd1351.h"
+#include "core/systick/systick.h"
+
+static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t ssd1351Properties = { 128, 128, false, false, false };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+#define CMD(c)        do { SET_CS; CLR_CS; CLR_DC; ssd1351SendByte( c, 1 ); SET_CS; } while (0)
+#define DATA(c)       do { SET_CS; CLR_CS; SET_DC; ssd1351SendByte( c, 0 ); SET_CS; } while (0);
+#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
+
+/**************************************************************************/
+/*! 
+    @brief Simulates an SPI write using GPIO.  
+    
+    @param[in]  byte
+                The byte to send
+    @param[in]  command
+                1 if this is a command, 0 if it is data
+*/
+/**************************************************************************/
+void ssd1351SendByte(uint8_t byte, uint8_t command)
+{
+  int8_t i;
+
+  // Make sure clock pin starts high
+  SET_SCK;
+
+#if defined SSD1351_BUS_SPI3
+  // Prepend D/C bit (cmd = 0, data = 1)
+  CLR_SCK;
+  if (command)
+  {
+    CLR_SID;
+  }
+  else
+  {
+    SET_SID;
+  }
+  SET_SCK;
+#endif
+
+  // Write from MSB to LSB
+  for (i=7; i>=0; i--) 
+  {
+    // Set clock pin low
+    CLR_SCK;
+    // Set data pin high or low depending on the value of the current bit
+    if (byte & (1 << i))
+    {
+      SET_SID;
+    }
+    else
+    {
+      CLR_SID;
+    }
+    // Set clock pin high
+    SET_SCK;
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the 16-bit (4-hexdigit) controller code
+*/
+/**************************************************************************/
+uint16_t ssd1351Type(void)
+{
+  return 0x1351;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the cursor to the specified X/Y position
+*/
+/**************************************************************************/
+void ssd1351SetCursor(uint8_t x, uint8_t y)
+{
+  if ((x >= ssd1351Properties.width) || (y >= ssd1351Properties.height))
+    return;
+
+  CMD(SSD1351_CMD_WRITERAM);
+  CMD(SSD1351_CMD_SETCOLUMNADDRESS);
+  DATA(x);                            // Start Address
+  DATA(ssd1351Properties.width-1);    // End Address (0x7F)
+
+  CMD(SSD1351_CMD_SETROWADDRESS);
+  DATA(y);                            // Start Address
+  DATA(ssd1351Properties.height-1);   // End Address (0x7F)
+  CMD(SSD1351_CMD_WRITERAM);
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/**************************************************************************/
+/*! 
+    @brief  Configures any pins or HW and initialises the LCD controller
+*/
+/**************************************************************************/
+void lcdInit(void)
+{
+  // Set all pins to output
+  gpioSetDir(SSD1351_SCK_PORT, SSD1351_SCK_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1351_SID_PORT, SSD1351_SID_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1351_RST_PORT, SSD1351_RST_PIN, gpioDirection_Output);
+  gpioSetDir(SSD1351_CS_PORT, SSD1351_CS_PIN, gpioDirection_Output);
+
+#if !defined SSD1351_BUS_SPI3
+  gpioSetDir(SSD1351_DC_PORT, SSD1351_DC_PIN, gpioDirection_Output);
+#endif
+
+  // Reset the LCD
+  SET_RST;
+  DELAY(20);
+  CLR_RST;
+  DELAY(200);
+  SET_RST;
+  DELAY(20);
+
+  // Disable pullups
+  SSD1351_DISABLEPULLUPS();
+
+  CMD(SSD1351_CMD_SETCOMMANDLOCK);
+  DATA(0x12);                               // Unlocked to enter commands
+  CMD(SSD1351_CMD_SETCOMMANDLOCK);
+  DATA(0xB1);                               // Make all commands accessible 
+  CMD(SSD1351_CMD_SLEEPMODE_DISPLAYOFF);
+  CMD(SSD1351_CMD_SETFRONTCLOCKDIV);
+  DATA(0xF1);
+  CMD(SSD1351_CMD_SETMUXRRATIO);
+  DATA(0x7F);
+  CMD(SSD1351_CMD_COLORDEPTH);
+  DATA(0x74);                               // Bit 7:6 = 65,536 Colors, Bit 3 = BGR or RGB
+  CMD(SSD1351_CMD_SETCOLUMNADDRESS);
+  DATA(0x00);
+  DATA(0x7F);
+  CMD(SSD1351_CMD_SETROWADDRESS);
+  DATA(0x00);
+  DATA(0x7F);
+  CMD(SSD1351_CMD_SETDISPLAYSTARTLINE);
+  DATA(0x00);
+  CMD(SSD1351_CMD_SETDISPLAYOFFSET);
+  DATA(0x00);
+  CMD(SSD1351_CMD_SETGPIO);
+  DATA(0x00);                               // Disable GPIO pins
+  CMD(SSD1351_CMD_FUNCTIONSELECTION);
+  DATA(0x01);                               // External VDD (0 = External, 1 = Internal)
+  CMD(SSD1351_CMD_SETPHASELENGTH);
+  DATA(0x32);
+  CMD(SSD1351_CMD_SETSEGMENTLOWVOLTAGE);
+  DATA(0xA0);                               // Enable External VSL
+  DATA(0xB5);
+  DATA(0x55);
+  CMD(SSD1351_CMD_SETPRECHARGEVOLTAGE);
+  DATA(0x17);
+  CMD(SSD1351_CMD_SETVCOMHVOLTAGE);
+  DATA(0x05);
+  CMD(SSD1351_CMD_SETCONTRAST);
+  DATA(0xC8);
+  DATA(0x80);
+  DATA(0xC8);
+  CMD(SSD1351_CMD_MASTERCONTRAST);
+  DATA(0x0F);                               // Maximum contrast
+  CMD(SSD1351_CMD_SETSECONDPRECHARGEPERIOD);
+  DATA(0x01);
+  CMD(SSD1351_CMD_SETDISPLAYMODE_RESET);
+
+  // Use default grayscale for now to save flash space, but here are
+  // the values if someone wants to change them ...
+  //  CMD(SSD1351_CMD_GRAYSCALELOOKUP);
+  //  DATA(0x02);
+  //  DATA(0x03);
+  //  DATA(0x04);
+  //  DATA(0x05);
+  //  DATA(0x06);
+  //  DATA(0x07);
+  //  DATA(0x08);
+  //  DATA(0x09);
+  //  DATA(0x0A);
+  //  DATA(0x0B);
+  //  DATA(0x0C);
+  //  DATA(0x0D);
+  //  DATA(0x0E);
+  //  DATA(0x0F);
+  //  DATA(0x10);
+  //  DATA(0x11);
+  //  DATA(0x12);
+  //  DATA(0x13);
+  //  DATA(0x15);
+  //  DATA(0x17);
+  //  DATA(0x19);
+  //  DATA(0x1B);
+  //  DATA(0x1D);
+  //  DATA(0x1F);
+  //  DATA(0x21);
+  //  DATA(0x23);
+  //  DATA(0x25);
+  //  DATA(0x27);
+  //  DATA(0x2A);
+  //  DATA(0x2D);
+  //  DATA(0x30);
+  //  DATA(0x33);
+  //  DATA(0x36);
+  //  DATA(0x39);
+  //  DATA(0x3C);
+  //  DATA(0x3F);
+  //  DATA(0x42);
+  //  DATA(0x45);
+  //  DATA(0x48);
+  //  DATA(0x4C);
+  //  DATA(0x50);
+  //  DATA(0x54);
+  //  DATA(0x58);
+  //  DATA(0x5C);
+  //  DATA(0x60);
+  //  DATA(0x64);
+  //  DATA(0x68);
+  //  DATA(0x6C);
+  //  DATA(0x70);
+  //  DATA(0x74);
+  //  DATA(0x78);
+  //  DATA(0x7D);
+  //  DATA(0x82);
+  //  DATA(0x87);
+  //  DATA(0x8C);
+  //  DATA(0x91);
+  //  DATA(0x96);
+  //  DATA(0x9B);
+  //  DATA(0xA0);
+  //  DATA(0xA5);
+  //  DATA(0xAA);
+  //  DATA(0xAF);
+  //  DATA(0xBF);
+
+  // Clear screen
+  lcdFillRGB(COLOR_RED);
+
+  // Turn the display on
+  CMD(SSD1351_CMD_SLEEPMODE_DISPLAYON);  
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Enables or disables the LCD backlight
+*/
+/**************************************************************************/
+void lcdBacklight(bool state)
+{
+  // No backlight ... do nothing
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a simple test pattern on the LCD
+*/
+/**************************************************************************/
+void lcdTest(void)
+{
+  uint32_t i,j;
+  CMD(SSD1351_CMD_WRITERAM);
+  ssd1351SetCursor(0, 0);
+  CMD(SSD1351_CMD_WRITERAM);
+  
+  for(i=0;i<128;i++)
+  {
+    for(j=0;j<128;j++)
+    {
+      if(i>111){DATA(COLOR_WHITE>>8);DATA((uint8_t)COLOR_WHITE);}
+      else if(i>95){DATA(COLOR_BLUE>>8);DATA((uint8_t)COLOR_BLUE);}
+      else if(i>79){DATA(COLOR_GREEN>>8);DATA((uint8_t)COLOR_GREEN);}
+      else if(i>63){DATA(COLOR_CYAN>>8);DATA((uint8_t)COLOR_CYAN);}
+      else if(i>47){DATA(COLOR_RED>>8);DATA((uint8_t)COLOR_RED);}
+      else if(i>31){DATA(COLOR_MAGENTA>>8);DATA((uint8_t)COLOR_MAGENTA);}
+      else if(i>15){DATA(COLOR_YELLOW>>8);DATA((uint8_t)COLOR_YELLOW);}
+      else {DATA(COLOR_BLACK>>8);DATA((uint8_t)COLOR_BLACK);}
+    }
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Fills the LCD with the specified 16-bit color
+*/
+/**************************************************************************/
+void lcdFillRGB(uint16_t data)
+{
+  uint16_t i;
+  ssd1351SetCursor(0, 0);
+  for (i=1; i<=((ssd1351Properties.width)*(ssd1351Properties.height)) * 2;i++)
+  {
+    DATA(data >> 8);
+    DATA(data);
+  }
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a single pixel at the specified X/Y location
+*/
+/**************************************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  if ((x >= ssd1351Properties.width) || (y >= ssd1351Properties.height))
+    return;
+
+  ssd1351SetCursor((uint8_t)x, (uint8_t)y);
+  DATA(color >> 8);
+  DATA(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a horizontal line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a vertical line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the 16-bit color of the pixel at the specified location
+*/
+/**************************************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  // ToDo
+  return 0;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the LCD orientation to horizontal and vertical
+*/
+/**************************************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  // Not supported
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the current screen orientation (horizontal or vertical)
+*/
+/**************************************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the width in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetWidth(void)
+{
+  return ssd1351Properties.width;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the height in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetHeight(void)
+{
+  return ssd1351Properties.height;
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Scrolls the contents of the LCD screen vertically the
+            specified number of pixels using a HW optimised routine
+*/
+/**************************************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  // ToDo
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the controller's 16-bit (4 hexdigit) ID
+*/
+/**************************************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return ssd1351Type();
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
+            generic capabilities and dimensions
+*/
+/**************************************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+  return ssd1351Properties;
+}
diff --git a/drivers/displays/tft/hw/ssd1351.h b/drivers/displays/tft/hw/ssd1351.h
new file mode 100644 (file)
index 0000000..56674f9
--- /dev/null
@@ -0,0 +1,147 @@
+/**************************************************************************/
+/*! 
+    @file     ssd1351.h
+    @author   K. Townsend (www.adafruit.com)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2012, Adafruit Industries
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __SSD1351_H__
+#define __SSD1351_H__
+
+#include "projectconfig.h"
+#include "drivers/displays/tft/lcd.h"
+#include "core/gpio/gpio.h"
+
+/*=========================================================================
+    SPI modes
+    -----------------------------------------------------------------------
+    The OLED supports both 3-pin and 4-pin SPI modes
+
+    3-PIN MODE      Saves one GPIO pin (D/C) by adding the D/C bit before
+                    every transfer, meaning that 9 bits are sent every frame
+                    instead of 8.  You have slightly slower performance
+                    but use less pins. Requires 3 GPIO pins (SCK, SID, RST)
+
+    4-PIN MODE      Uses a normal SPI interface with 8-bits per transfer,
+                    plus a dedicated D/C pin to indicate if this is a
+                    command or data byte. Requires 4 GPIO pins (SCK, SID,
+                    RST, DC).
+
+    To select one of the SPI modes, make sure the BS0/1 pins are correctly
+    set on the OLED display and uncomment the appropriate define below.
+    -----------------------------------------------------------------------*/
+    // #define SSD1351_BUS_SPI3
+    #define SSD1351_BUS_SPI4
+/*=========================================================================*/
+
+// Control pins
+#define SSD1351_SCK_PORT                (2) // SCK (D0)
+#define SSD1351_SCK_PIN                 (1)
+#define SSD1351_SID_PORT                (2) // DAT/MOSI (D1)
+#define SSD1351_SID_PIN                 (2)
+#define SSD1351_CS_PORT                 (2) // OLEDCS
+#define SSD1351_CS_PIN                  (3)
+#define SSD1351_RST_PORT                (2) // RST
+#define SSD1351_RST_PIN                 (4)
+#define SSD1351_DC_PORT                 (2) // D/C (only required for 4-pin SPI)
+#define SSD1351_DC_PIN                  (5)
+
+// Placed here to try to keep all pin specific values in the header file
+#define SSD1351_DISABLEPULLUPS()  do {  gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
+                                        gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
+                                        gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
+                                        gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
+                                        gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); } while (0)
+
+// These registers allow fast single cycle clear+set of bits (see section 8.5.1 of LPC1343 UM)
+#define SSD1351_GPIO2DATA_SCK           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_SCK_PIN) << 2))))
+#define SSD1351_GPIO2DATA_SID           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_SID_PIN) << 2))))
+#define SSD1351_GPIO2DATA_CS            (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_CS_PIN) << 2))))
+#define SSD1351_GPIO2DATA_RST           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_RST_PIN) << 2))))
+#define SSD1351_GPIO2DATA_DC            (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_DC_PIN) << 2))))
+
+// Macros for control line state
+#define CLR_SCK                         SSD1351_GPIO2DATA_SCK = (0)
+#define SET_SCK                         SSD1351_GPIO2DATA_SCK = (1 << SSD1351_SCK_PIN)
+#define CLR_SID                         SSD1351_GPIO2DATA_SID = (0)
+#define SET_SID                         SSD1351_GPIO2DATA_SID = (1 << SSD1351_SID_PIN)
+#define CLR_CS                          SSD1351_GPIO2DATA_CS  = (0)
+#define SET_CS                          SSD1351_GPIO2DATA_CS  = (1 << SSD1351_CS_PIN)
+#define CLR_RST                         SSD1351_GPIO2DATA_RST = (0)
+#define SET_RST                         SSD1351_GPIO2DATA_RST = (1 << SSD1351_RST_PIN)
+#define CLR_DC                          SSD1351_GPIO2DATA_DC  = (0)
+#define SET_DC                          SSD1351_GPIO2DATA_DC  = (1 << SSD1351_DC_PIN)
+
+// SSD1351 Commands
+enum
+{
+  SSD1351_CMD_SETCOLUMNADDRESS          = 0x15,
+  SSD1351_CMD_SETROWADDRESS             = 0x75,
+  SSD1351_CMD_WRITERAM                  = 0x5C, // Write data to GRAM and increment until another command is sent
+  SSD1351_CMD_READRAM                   = 0x5D, // Read data from GRAM and increment until another command is sent
+  SSD1351_CMD_COLORDEPTH                = 0xA0, // Numerous functions include increment direction ... see DS 
+                                                // A0[0] = Address Increment Mode (0 = horizontal, 1 = vertical)
+                                                // A0[1] = Column Address Remap (0 = left to right, 1 = right to left)
+                                                // A0[2] = Color Remap (0 = ABC, 1 = CBA) - HW RGB/BGR switch
+                                                // A0[4] = COM Scan Direction (0 = top to bottom, 1 = bottom to top)
+                                                // A0[5] = Odd/Even Paid Split
+                                                // A0[7:6] = Display Color Mode (00 = 8-bit, 01 = 65K, 10/11 = 262K, 8/16-bit interface only)
+  SSD1351_CMD_SETDISPLAYSTARTLINE       = 0xA1,
+  SSD1351_CMD_SETDISPLAYOFFSET          = 0xA2, 
+  SSD1351_CMD_SETDISPLAYMODE_ALLOFF     = 0xA4, // Force entire display area to grayscale GS0
+  SSD1351_CMD_SETDISPLAYMODE_ALLON      = 0xA5, // Force entire display area to grayscale GS63
+  SSD1351_CMD_SETDISPLAYMODE_RESET      = 0xA6, // Resets the display area relative to the above two commands
+  SSD1351_CMD_SETDISPLAYMODE_INVERT     = 0xA7, // Inverts the display contents (GS0 -> GS63, GS63 -> GS0, etc.)
+  SSD1351_CMD_FUNCTIONSELECTION         = 0xAB, // Enable/Disable the internal VDD regulator
+  SSD1351_CMD_SLEEPMODE_DISPLAYOFF      = 0xAE, // Sleep mode on (display off)
+  SSD1351_CMD_SLEEPMODE_DISPLAYON       = 0xAF, // Sleep mode off (display on)
+  SSD1351_CMD_SETPHASELENGTH            = 0xB1, // Larger capacitance may require larger delay to discharge previous pixel state
+  SSD1351_CMD_ENHANCEDDRIVINGSCHEME     = 0xB2, 
+  SSD1351_CMD_SETFRONTCLOCKDIV          = 0xB3, // DCLK divide ration fro CLK (from 1 to 16)
+  SSD1351_CMD_SETSEGMENTLOWVOLTAGE      = 0xB4,
+  SSD1351_CMD_SETGPIO                   = 0xB5,
+  SSD1351_CMD_SETSECONDPRECHARGEPERIOD  = 0xB6,
+  SSD1351_CMD_GRAYSCALELOOKUP           = 0xB8,
+  SSD1351_CMD_LINEARLUT                 = 0xB9,
+  SSD1351_CMD_SETPRECHARGEVOLTAGE       = 0xBB,
+  SSD1351_CMD_SETVCOMHVOLTAGE           = 0xBE,
+  SSD1351_CMD_SETCONTRAST               = 0xC1,
+  SSD1351_CMD_MASTERCONTRAST            = 0xC7,
+  SSD1351_CMD_SETMUXRRATIO              = 0xCA,
+  SSD1351_CMD_NOP3                      = 0xD1,
+  SSD1351_CMD_NOP4                      = 0xE3,
+  SSD1351_CMD_SETCOMMANDLOCK            = 0xFD,
+  SSD1351_CMD_HORIZONTALSCROLL          = 0x96,
+  SSD1351_CMD_STOPMOVING                = 0x9E,
+  SSD1351_CMD_STARTMOVING               = 0x9F  
+};
+
+#endif
diff --git a/drivers/displays/tft/hw/st7735.c b/drivers/displays/tft/hw/st7735.c
new file mode 100644 (file)
index 0000000..939015e
--- /dev/null
@@ -0,0 +1,444 @@
+/**************************************************************************/
+/*! 
+    @file     st7735.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for st7735 128x160 pixel TFT LCD displays.
+    
+    This driver uses a bit-banged SPI interface and a 16-bit RGB565
+    colour palette.
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "st7735.h"
+#include "core/systick/systick.h"
+#include "core/gpio/gpio.h"
+
+static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t st7735Properties = { 128, 160, FALSE, FALSE, FALSE };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/*************************************************/
+void st7735WriteCmd(uint8_t command) 
+{
+  CLR_CS;
+  CLR_RS;
+  uint8_t i = 0;
+  for (i=0; i<8; i++) 
+  { 
+    if (command & 0x80) 
+    { 
+      SET_SDA;   
+    } 
+    else 
+    { 
+      CLR_SDA; 
+    } 
+    CLR_SCL; 
+    command <<= 1; 
+    SET_SCL;
+  } 
+  SET_CS; 
+}
+
+/*************************************************/
+void st7735WriteData(uint8_t data)
+{
+  CLR_CS;
+  SET_RS; 
+  uint8_t i = 0;
+  for (i=0; i<8; i++) 
+  { 
+    if (data & 0x80) 
+    { 
+      SET_SDA;
+    } 
+    else 
+    { 
+      CLR_SDA;
+    } 
+    CLR_SCL;
+    data <<= 1; 
+    SET_SCL;    
+  } 
+  SET_CS;
+}
+
+/*************************************************/
+void st7735SetAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1)
+{
+  st7735WriteCmd(ST7735_CASET);   // column addr set
+  st7735WriteData(0x00);
+  st7735WriteData(x0+2);          // XSTART 
+  st7735WriteData(0x00);
+  st7735WriteData(x1+2);          // XEND
+
+  st7735WriteCmd(ST7735_RASET);   // row addr set
+  st7735WriteData(0x00);
+  st7735WriteData(y0+1);          // YSTART
+  st7735WriteData(0x00);
+  st7735WriteData(y1+1);          // YEND
+}
+
+/*************************************************/
+void st7735InitDisplay(void)
+{
+  st7735WriteCmd(ST7735_SWRESET); // software reset
+  systickDelay(50);
+  st7735WriteCmd(ST7735_SLPOUT);  // out of sleep mode
+  systickDelay(500);
+  
+  st7735WriteCmd(ST7735_COLMOD);  // set color mode
+  st7735WriteData(0x05);          // 16-bit color
+  systickDelay(10);
+  
+  st7735WriteCmd(ST7735_FRMCTR1); // frame rate control
+  st7735WriteData(0x00);          // fastest refresh
+  st7735WriteData(0x06);          // 6 lines front porch
+  st7735WriteData(0x03);          // 3 lines backporch
+  systickDelay(10);
+  
+  st7735WriteCmd(ST7735_MADCTL);  // memory access control (directions)
+  st7735WriteData(0xC8);          // row address/col address, bottom to top refresh
+  
+  st7735WriteCmd(ST7735_DISSET5); // display settings #5
+  st7735WriteData(0x15);          // 1 clock cycle nonoverlap, 2 cycle gate rise, 3 cycle oscil. equalize
+  st7735WriteData(0x02);          // fix on VTL
+  st7735WriteCmd(ST7735_INVCTR);  // display inversion control
+  st7735WriteData(0x0);           // line inversion
+  st7735WriteCmd(ST7735_PWCTR1);  // power control
+  st7735WriteData(0x02);          // GVDD = 4.7V 
+  st7735WriteData(0x70);          // 1.0uA
+  systickDelay(10);
+  st7735WriteCmd(ST7735_PWCTR2);  // power control
+  st7735WriteData(0x05);          // VGH = 14.7V, VGL = -7.35V 
+  st7735WriteCmd(ST7735_PWCTR3);  // power control
+  st7735WriteData(0x01);          // Opamp current small 
+  st7735WriteData(0x02);          // Boost frequency
+  
+  
+  st7735WriteCmd(ST7735_VMCTR1);  // power control
+  st7735WriteData(0x3C);          // VCOMH = 4V
+  st7735WriteData(0x38);          // VCOML = -1.1V
+  systickDelay(10);
+  
+  st7735WriteCmd(ST7735_PWCTR6);  // power control
+  st7735WriteData(0x11); 
+  st7735WriteData(0x15);
+  
+  st7735WriteCmd(ST7735_GMCTRP1);
+  st7735WriteData(0x09);
+  st7735WriteData(0x16);
+  st7735WriteData(0x09);
+  st7735WriteData(0x20);
+  st7735WriteData(0x21);
+  st7735WriteData(0x1B);
+  st7735WriteData(0x13);
+  st7735WriteData(0x19);
+  st7735WriteData(0x17);
+  st7735WriteData(0x15);
+  st7735WriteData(0x1E);
+  st7735WriteData(0x2B);
+  st7735WriteData(0x04);
+  st7735WriteData(0x05);
+  st7735WriteData(0x02);
+  st7735WriteData(0x0E);
+  st7735WriteCmd(ST7735_GMCTRN1);
+  st7735WriteData(0x0B); 
+  st7735WriteData(0x14); 
+  st7735WriteData(0x08); 
+  st7735WriteData(0x1E); 
+  st7735WriteData(0x22); 
+  st7735WriteData(0x1D); 
+  st7735WriteData(0x18); 
+  st7735WriteData(0x1E); 
+  st7735WriteData(0x1B); 
+  st7735WriteData(0x1A); 
+  st7735WriteData(0x24); 
+  st7735WriteData(0x2B); 
+  st7735WriteData(0x06); 
+  st7735WriteData(0x06); 
+  st7735WriteData(0x02); 
+  st7735WriteData(0x0F); 
+  systickDelay(10);
+  
+  st7735WriteCmd(ST7735_CASET);   // column addr set
+  st7735WriteData(0x00);
+  st7735WriteData(0x02);          // XSTART = 2
+  st7735WriteData(0x00);
+  st7735WriteData(0x81);          // XEND = 129
+
+  st7735WriteCmd(ST7735_RASET);   // row addr set
+  st7735WriteData(0x00);
+  st7735WriteData(0x02);          // XSTART = 1
+  st7735WriteData(0x00);
+  st7735WriteData(0x81);          // XEND = 160
+
+  st7735WriteCmd(ST7735_NORON);   // normal display on
+  systickDelay(10);
+  
+  st7735WriteCmd(ST7735_DISPON);
+  systickDelay(500);
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/*************************************************/
+void lcdInit(void)
+{
+  // Set control pins to output
+  gpioSetDir(ST7735_PORT, ST7735_RS_PIN, 1);
+  gpioSetDir(ST7735_PORT, ST7735_SDA_PIN, 1);
+  gpioSetDir(ST7735_PORT, ST7735_SCL_PIN, 1);
+  gpioSetDir(ST7735_PORT, ST7735_CS_PIN, 1);
+  gpioSetDir(ST7735_PORT, ST7735_RES_PIN, 1);
+  gpioSetDir(ST7735_PORT, ST7735_BL_PIN, 1);
+
+  // Set pins low by default (except reset)
+  CLR_RS;
+  CLR_SDA;
+  CLR_SCL;
+  CLR_CS;
+  CLR_BL;
+  SET_RES;
+  
+  // Turn backlight on
+  lcdBacklight(TRUE);
+
+  // Reset display
+  SET_RES;
+  systickDelay(50);
+  CLR_RES;
+  systickDelay(50);
+  SET_RES;
+  systickDelay(50);
+
+  // Run LCD init sequence
+  st7735InitDisplay();
+
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+}
+
+/*************************************************/
+void lcdBacklight(bool state)
+{
+  // Set the backlight
+  // Note: Depending on the type of transistor used
+  // to control the backlight, you made need to invert
+  // the values below
+  if (state)
+    // CLR_BL;
+    SET_BL;
+  else
+    // SET_BL;
+    CLR_BL;
+}
+
+/*************************************************/
+void lcdTest(void)
+{
+  uint8_t i = 0;
+  for (i = 0; i < 100; i++)
+  {
+    lcdDrawPixel(i, i, 0xFFFF);
+  }
+}
+
+/*************************************************/
+void lcdFillRGB(uint16_t color)
+{
+  uint8_t x, y;
+  st7735SetAddrWindow(0, 0, lcdGetWidth() - 1, lcdGetHeight() - 1);
+  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
+  for (x=0; x < lcdGetWidth(); x++) 
+  {
+    for (y=0; y < lcdGetHeight(); y++) 
+    {
+      st7735WriteData(color >> 8);    
+      st7735WriteData(color);    
+    }
+  }
+  st7735WriteCmd(ST7735_NOP);
+}
+
+/*************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  st7735SetAddrWindow(x,y,x+1,y+1);
+  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
+  st7735WriteData(color >> 8);  
+  st7735WriteData(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  // ToDo: Optimise this function ... currently only a placeholder
+  uint32_t i = 0;
+  do
+  {
+    lcdDrawPixel(x+i, y, data[i]);
+    i++;
+  } while (i<len);
+}
+
+/*************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t x, pixels;
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+
+  // Check limits
+  if (x1 >= lcdGetWidth())
+  {
+    x1 = lcdGetWidth() - 1;
+  }
+  if (x0 >= lcdGetWidth())
+  {
+    x0 = lcdGetWidth() - 1;
+  }
+
+  st7735SetAddrWindow(x0, y, lcdGetWidth(), y + 1);
+  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
+  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+  {
+    st7735WriteData(color >> 8);  
+    st7735WriteData(color);
+  }
+  st7735WriteCmd(ST7735_NOP);
+}
+
+/*************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t y, pixels;
+
+  if (y1 < y0)
+  {
+    // Switch y1 and y0
+    y = y1;
+    y1 = y0;
+    y0 = y;
+  }
+
+  // Check limits
+  if (y1 >= lcdGetHeight())
+  {
+    y1 = lcdGetHeight() - 1;
+  }
+  if (y0 >= lcdGetHeight())
+  {
+    y0 = lcdGetHeight() - 1;
+  }
+
+  st7735SetAddrWindow(x, y0, x, lcdGetHeight());
+  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
+  for (pixels = 0; pixels < y1 - y0 + 1; pixels++)
+  {
+    st7735WriteData(color >> 8);  
+    st7735WriteData(color);
+  }
+  st7735WriteCmd(ST7735_NOP);
+}
+
+/*************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  // ToDo
+  return 0;
+}
+
+/*************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  // ToDo
+}
+
+/*************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/*************************************************/
+uint16_t lcdGetWidth(void)
+{
+  return st7735Properties.width;
+}
+
+/*************************************************/
+uint16_t lcdGetHeight(void)
+{
+  return st7735Properties.height;
+}
+
+/*************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  // ToDo
+}
+
+/*************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  // ToDo
+  return 0;
+}
+
+/*************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+  return st7735Properties;
+}
diff --git a/drivers/displays/tft/hw/st7735.h b/drivers/displays/tft/hw/st7735.h
new file mode 100644 (file)
index 0000000..631c548
--- /dev/null
@@ -0,0 +1,113 @@
+/**************************************************************************/
+/*! 
+    @file     ST7735.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __ST7735_H__
+#define __ST7735_H__
+
+#include "projectconfig.h"
+#include "drivers/displays/tft/lcd.h"
+
+/**************************************************************************
+    ST7735 CONNECTOR
+    -----------------------------------------------------------------------
+    Pin   Function        Notes
+    ===   ==============  ===============================
+      1   NC
+      2   GND
+      3   LED K/-
+      4   LED A/+         3.0V
+      5   GND
+      6   RESET
+      7   RS
+      8   SDA             Serial Data
+      9   SCL             Serial Clock
+     10   VCC             2.8-3.4V
+     11   VCC             2.8-3.4V
+     12   CS
+     13   GND
+     14   NC
+
+ **************************************************************************/
+
+// Control pins
+#define ST7735_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
+#define ST7735_PORT            (2)
+#define ST7735_RS_PIN          (1)
+#define ST7735_SDA_PIN         (2)
+#define ST7735_SCL_PIN         (3)
+#define ST7735_CS_PIN          (4)
+#define ST7735_RES_PIN         (5)
+#define ST7735_BL_PIN          (6)
+
+// Macros for control line state
+#define CLR_RS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_RS_PIN); } while(0)
+#define SET_RS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_RS_PIN); ST7735_GPIODATAREG |= (1<<ST7735_RS_PIN); } while(0)
+#define CLR_SDA     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SDA_PIN); } while(0)
+#define SET_SDA     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SDA_PIN); ST7735_GPIODATAREG |= (1<<ST7735_SDA_PIN); } while(0)
+#define CLR_SCL     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SCL_PIN); } while(0)
+#define SET_SCL     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SCL_PIN); ST7735_GPIODATAREG |= (1<<ST7735_SCL_PIN); } while(0)
+#define CLR_CS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_CS_PIN); } while(0)
+#define SET_CS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_CS_PIN); ST7735_GPIODATAREG |= (1<<ST7735_CS_PIN); } while(0)
+#define CLR_RES     do { ST7735_GPIODATAREG &= ~(1<<ST7735_RES_PIN); } while(0)
+#define SET_RES     do { ST7735_GPIODATAREG &= ~(1<<ST7735_RES_PIN); ST7735_GPIODATAREG |= (1<<ST7735_RES_PIN); } while(0)
+#define CLR_BL      do { ST7735_GPIODATAREG &= ~(1<<ST7735_BL_PIN); } while(0)
+#define SET_BL      do { ST7735_GPIODATAREG &= ~(1<<ST7735_BL_PIN); ST7735_GPIODATAREG |= (1<<ST7735_BL_PIN); } while(0)
+
+#define ST7735_NOP      (0x0)
+#define ST7735_SWRESET  (0x01)
+#define ST7735_SLPIN    (0x10)
+#define ST7735_SLPOUT   (0x11)
+#define ST7735_PTLON    (0x12)
+#define ST7735_NORON    (0x13)
+#define ST7735_INVOFF   (0x20)
+#define ST7735_INVON    (0x21)
+#define ST7735_DISPON   (0x29)
+#define ST7735_CASET    (0x2A)
+#define ST7735_RASET    (0x2B)
+#define ST7735_RAMWR    (0x2C)
+#define ST7735_COLMOD   (0x3A)
+#define ST7735_MADCTL   (0x36)
+#define ST7735_FRMCTR1  (0xB1)
+#define ST7735_INVCTR   (0xB4)
+#define ST7735_DISSET5  (0xB6)
+#define ST7735_PWCTR1   (0xC0)
+#define ST7735_PWCTR2   (0xC1)
+#define ST7735_PWCTR3   (0xC2)
+#define ST7735_VMCTR1   (0xC5)
+#define ST7735_PWCTR6   (0xFC)
+#define ST7735_GMCTRP1  (0xE0)
+#define ST7735_GMCTRN1  (0xE1)
+
+#endif
diff --git a/drivers/displays/tft/hw/st7783.c b/drivers/displays/tft/hw/st7783.c
new file mode 100644 (file)
index 0000000..82e9aa2
--- /dev/null
@@ -0,0 +1,506 @@
+/**************************************************************************/
+/*! 
+    @file     st7783.c
+    @author   K. Townsend (microBuilder.eu)
+
+    @section  DESCRIPTION
+
+    Driver for st7783 240x320 pixel TFT LCD displays.
+    
+    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
+
+    @section  UPDATES
+
+    26-11-2010: st7783ReadData contributed by Adafruit Industries
+
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "st7783.h"
+#include "core/systick/systick.h"
+#include "drivers/displays/tft/touchscreen.h"
+
+static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
+static lcdProperties_t st7783Properties = { 240, 320, TRUE, TRUE, FALSE };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+/*************************************************/
+void st7783Delay(unsigned int t)
+{
+  unsigned char t1;
+  while(t--)
+  for ( t1=10; t1 > 0; t1-- )
+  {
+    __asm("nop");
+  }
+}
+
+/*************************************************/
+void st7783WriteCmd(uint16_t command) 
+{
+  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
+  // (versus 36 compiled with no optimisations).  I'm not sure it
+  // can be improved further, so that means 25 cycles/350nS for
+  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
+  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
+  // Set color [cmd+data]) (times assumes 72MHz clock).
+
+  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
+  ST7783_GPIO2DATA_DATA = (command >> (8 - ST7783_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ST7783_GPIO2DATA_DATA = command << ST7783_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
+}
+
+/*************************************************/
+void st7783WriteData(uint16_t data)
+{
+  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
+  ST7783_GPIO2DATA_DATA = (data >> (8 - ST7783_DATA_OFFSET));
+  CLR_WR;
+  SET_WR;
+  ST7783_GPIO2DATA_DATA = data << ST7783_DATA_OFFSET;
+  CLR_WR;
+  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
+}
+
+/*************************************************/
+uint16_t st7783ReadData(void)
+{
+  // ToDo: Optimise this method!
+
+  uint16_t high, low;
+  high = low = 0;
+  uint16_t d;
+
+  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
+  CLR_CS;
+  
+  // set inputs
+  ST7783_GPIO2DATA_SETINPUT;
+  CLR_RD;
+  st7783Delay(100);
+  high = ST7783_GPIO2DATA_DATA;  
+  high >>= ST7783_DATA_OFFSET;
+  high &= 0xFF;
+  SET_RD;
+  
+  CLR_RD;
+  st7783Delay(100);
+  low = ST7783_GPIO2DATA_DATA;
+  low >>= ST7783_DATA_OFFSET;
+  low &=0xFF;
+  SET_RD;
+  
+  SET_CS;
+  ST7783_GPIO2DATA_SETOUTPUT;
+
+  d = high;
+  d <<= 8;
+  d |= low;
+  
+  return d;
+}
+
+/*************************************************/
+uint16_t st7783Read(uint16_t addr)
+{
+  st7783WriteCmd(addr);
+  return st7783ReadData();
+}
+
+/*************************************************/
+void st7783Command(uint16_t command, uint16_t data)
+{
+  st7783WriteCmd(command);
+  st7783WriteData(data);
+}
+
+/*************************************************/
+/* Returns the 4-hexdigit controller code        */
+/*************************************************/
+uint16_t st7783Type(void)
+{
+  st7783WriteCmd(0x0);
+  return st7783ReadData();
+}
+
+/*************************************************/
+void st7783SetCursor(uint16_t x, uint16_t y)
+{
+  uint16_t he, ve, al, ah;
+  
+  switch (lcdOrientation) 
+  {
+  case LCD_ORIENTATION_LANDSCAPE:
+          he = st7783Properties.width-1-y;
+          ve = st7783Properties.height-1-x;
+          al = y;
+          ah = x;
+          break;
+  case LCD_ORIENTATION_PORTRAIT:
+  default:
+          he = st7783Properties.width-1;
+          ve = st7783Properties.height-1;
+          al = x;
+          ah = y;
+          break;
+  }
+  st7783Command(0x0051, he);
+  st7783Command(0x0053, ve);
+  st7783Command(0x0020, al);
+  st7783Command(0x0021, ah);
+}
+
+/*************************************************/
+void st7783InitDisplay(void)
+{
+  // Clear data line
+  GPIO_GPIO2DATA &= ~ST7783_DATA_MASK;
+    
+  SET_RD;
+  SET_WR;
+  SET_CS;
+  SET_CD;
+
+  // Reset display
+  CLR_RESET;
+  st7783Delay(10000);
+  SET_RESET;
+  st7783Delay(500);
+
+  st7783Command(0x00FF, 0x0001);
+  st7783Command(0x00F3, 0x0008);
+  st7783WriteCmd(0x00F3);
+
+  st7783Command(0x0001, 0x0100);     // Driver Output Control Register (R01h)
+  st7783Command(0x0002, 0x0700);     // LCD Driving Waveform Control (R02h)
+  st7783Command(0x0003, 0x1030);     // Entry Mode (R03h)  
+  st7783Command(0x0008, 0x0302);
+  st7783Command(0x0009, 0x0000);
+  st7783Command(0x0010, 0x0000);     // Power Control 1 (R10h)
+  st7783Command(0x0011, 0x0007);     // Power Control 2 (R11h)  
+  st7783Command(0x0012, 0x0000);     // Power Control 3 (R12h)
+  st7783Command(0x0013, 0x0000);     // Power Control 4 (R13h)
+  st7783Delay(1000);  
+  st7783Command(0x0010, 0x14B0);     // Power Control 1 (R10h)  
+  st7783Delay(500);  
+  st7783Command(0x0011, 0x0007);     // Power Control 2 (R11h)  
+  st7783Delay(500);  
+  st7783Command(0x0012, 0x008E);     // Power Control 3 (R12h)
+  st7783Command(0x0013, 0x0C00);     // Power Control 4 (R13h)
+  st7783Command(0x0029, 0x0015);     // NVM read data 2 (R29h)
+  st7783Delay(500);
+  st7783Command(0x0030, 0x0000);     // Gamma Control 1
+  st7783Command(0x0031, 0x0107);     // Gamma Control 2
+  st7783Command(0x0032, 0x0000);     // Gamma Control 3
+  st7783Command(0x0035, 0x0203);     // Gamma Control 6
+  st7783Command(0x0036, 0x0402);     // Gamma Control 7
+  st7783Command(0x0037, 0x0000);     // Gamma Control 8
+  st7783Command(0x0038, 0x0207);     // Gamma Control 9
+  st7783Command(0x0039, 0x0000);     // Gamma Control 10
+  st7783Command(0x003C, 0x0203);     // Gamma Control 13
+  st7783Command(0x003D, 0x0403);     // Gamma Control 14
+  st7783Command(0x0050, 0x0000);     // Window Horizontal RAM Address Start (R50h)
+  st7783Command(0x0051, st7783Properties.width - 1);    // Window Horizontal RAM Address End (R51h)
+  st7783Command(0x0052, 0X0000);     // Window Vertical RAM Address Start (R52h)
+  st7783Command(0x0053, st7783Properties.height - 1);    // Window Vertical RAM Address End (R53h)
+  st7783Command(0x0060, 0xa700);     // Driver Output Control (R60h)
+  st7783Command(0x0061, 0x0001);     // Driver Output Control (R61h)
+  st7783Command(0x0090, 0X0029);     // Panel Interface Control 1 (R90h)
+
+  // Display On
+  st7783Command(0x0007, 0x0133);     // Display Control (R07h)
+  st7783Delay(500);
+  st7783WriteCmd(0x0022);
+}
+
+/*************************************************/
+void st7783Home(void)
+{
+  st7783SetCursor(0, 0);
+  st7783WriteCmd(0x0022);            // Write Data to GRAM (R22h)
+}
+
+/*************************************************/
+void st7783SetWindow(uint16_t x, uint16_t y, uint16_t height, uint16_t width)
+{
+  // Window horizontal RAM address start
+  if (x >= height) st7783Command(0x50, (x - height + 1));
+  else st7783Command(0x50, 0);
+  // Window horizontal GRAM address end
+  st7783Command(0x51, x);
+  // Window vertical GRAM address start
+  if (y >= width) st7783Command(0x52, (y - width + 1));
+  else st7783Command(0x52, 0);
+  // Window vertical GRAM address end
+  st7783Command(0x53, y);
+
+  st7783SetCursor(x, y);
+}
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+/*************************************************/
+void lcdInit(void)
+{
+  // Set control line pins to output
+  gpioSetDir(ST7783_CS_PORT, ST7783_CS_PIN, 1);
+  gpioSetDir(ST7783_CD_PORT, ST7783_CD_PIN, 1);
+  gpioSetDir(ST7783_WR_PORT, ST7783_WR_PIN, 1);
+  gpioSetDir(ST7783_RD_PORT, ST7783_RD_PIN, 1);
+  
+  // Set data port pins to output
+  ST7783_GPIO2DATA_SETOUTPUT;
+
+  // Disable pullups
+  ST7783_DISABLEPULLUPS();
+  
+  // Set backlight pin to output and turn it on
+  gpioSetDir(ST7783_BL_PORT, ST7783_BL_PIN, 1);      // set to output
+  lcdBacklight(TRUE);
+
+  // Set reset pin to output
+  gpioSetDir(ST7783_RES_PORT, ST7783_RES_PIN, 1);    // Set to output
+  gpioSetValue(ST7783_RES_PORT, ST7783_RES_PIN, 0);  // Low to reset
+  systickDelay(50);
+  gpioSetValue(ST7783_RES_PORT, ST7783_RES_PIN, 1);  // High to exit
+
+  // Initialize the display
+  st7783InitDisplay();
+
+  // Set lcd to default orientation
+  lcdSetOrientation(lcdOrientation);
+
+  // Fill black
+  lcdFillRGB(COLOR_BLACK);
+  
+  // Initialise the touch screen (and calibrate if necessary)
+  tsInit();
+}
+
+/*************************************************/
+void lcdBacklight(bool state)
+{
+  // Set the backlight
+  gpioSetValue(ST7783_BL_PORT, ST7783_BL_PIN, state ? 0 : 1);
+}
+
+/*************************************************/
+void lcdTest(void)
+{
+  uint32_t i,j;
+  st7783Home();
+  
+  for(i=0;i<320;i++)
+  {
+    for(j=0;j<240;j++)
+    {
+      if(i>279)st7783WriteData(COLOR_WHITE);
+      else if(i>239)st7783WriteData(COLOR_BLUE);
+      else if(i>199)st7783WriteData(COLOR_GREEN);
+      else if(i>159)st7783WriteData(COLOR_CYAN);
+      else if(i>119)st7783WriteData(COLOR_RED);
+      else if(i>79)st7783WriteData(COLOR_MAGENTA);
+      else if(i>39)st7783WriteData(COLOR_YELLOW);
+      else st7783WriteData(COLOR_BLACK);
+    }
+  }
+}
+
+/*************************************************/
+void lcdFillRGB(uint16_t data)
+{
+  unsigned int i;
+  st7783Home();
+  
+  uint32_t pixels = 320*240;
+  for ( i=0; i < pixels; i++ )
+  {
+    st7783WriteData(data);
+  } 
+}
+
+/*************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+  st7783SetCursor(x, y);
+  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
+  st7783WriteData(color);
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+  uint32_t i = 0;
+  st7783SetCursor(x, y);
+  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
+  do
+  {
+    st7783WriteData(data[i]);
+    i++;
+  } while (i<len);
+}
+
+/*************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  uint16_t x, pixels;
+
+  if (x1 < x0)
+  {
+    // Switch x1 and x0
+    x = x1;
+    x1 = x0;
+    x0 = x;
+  }
+  st7783SetCursor(x0, y);
+  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
+  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
+  {
+    st7783WriteData(color);
+  }
+}
+
+/*************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+  // Allows for slightly better performance than setting individual pixels
+  lcdOrientation_t orientation = lcdOrientation;
+
+  // Switch orientation
+  lcdSetOrientation(orientation == LCD_ORIENTATION_PORTRAIT ? LCD_ORIENTATION_LANDSCAPE : LCD_ORIENTATION_PORTRAIT);
+
+  // Draw horizontal line like usual
+  lcdDrawHLine(y0, y1, lcdGetHeight() - x, color);
+
+  // Switch orientation back
+  lcdSetOrientation(orientation);
+}
+
+/*************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+  uint16_t preFetch = 0;
+
+  st7783SetCursor(x, y);
+  st7783WriteCmd(0x0022);
+  preFetch = st7783ReadData();
+
+  // Eeek ... why does this need to be done twice for a proper value?!?
+  st7783SetCursor(x, y);
+  st7783WriteCmd(0x0022);
+  return st7783ReadData();
+}
+
+/*************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+  uint16_t entryMode = 0x1030;
+
+  switch (orientation)
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      entryMode = 0x1030;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+      entryMode = 0x1028;
+      break;
+  }
+  st7783WriteCmd(0x0003);
+  st7783WriteData(entryMode);
+  lcdOrientation = orientation;
+  st7783SetCursor(0, 0);
+}
+
+/*************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+  return lcdOrientation;
+}
+
+/*************************************************/
+uint16_t lcdGetWidth(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return st7783Properties.width;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return st7783Properties.height;
+  }
+}
+
+/*************************************************/
+uint16_t lcdGetHeight(void)
+{
+  switch (lcdOrientation) 
+  {
+    case LCD_ORIENTATION_PORTRAIT:
+      return st7783Properties.height;
+      break;
+    case LCD_ORIENTATION_LANDSCAPE:
+    default:
+      return st7783Properties.width;
+  }
+}
+
+/*************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+  // Not implemented in ST7783
+}
+
+/*************************************************/
+uint16_t lcdGetControllerID(void)
+{
+  return st7783Type();
+}
+
+/*************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+    return st7783Properties;
+}
diff --git a/drivers/displays/tft/hw/st7783.h b/drivers/displays/tft/hw/st7783.h
new file mode 100644 (file)
index 0000000..1ef0d75
--- /dev/null
@@ -0,0 +1,131 @@
+/**************************************************************************/
+/*! 
+    @file     ST7783.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __ST7783_H__
+#define __ST7783_H__
+
+#include "projectconfig.h"
+
+#include "drivers/displays/tft/lcd.h"
+#include "core/gpio/gpio.h"
+
+// Control pins
+#define ST7783_CS_PORT         1     // CS (LCD Pin 7)
+#define ST7783_CS_PIN          8
+#define ST7783_CD_PORT         1     // CS/RS (LCD Pin 8)
+#define ST7783_CD_PIN          9
+#define ST7783_WR_PORT         1     // WR (LCD Pin 9)
+#define ST7783_WR_PIN          10
+#define ST7783_RD_PORT         1     // RD (LCD Pin 10)
+#define ST7783_RD_PIN          11
+
+// These combined pin definitions are for optimisation purposes.
+// If the pin values above are modified the bit equivalents
+// below will also need to be updated
+#define ST7783_CS_CD_PINS        0x300   // 8 + 9
+#define ST7783_RD_WR_PINS        0xC00   // 11 + 10
+#define ST7783_WR_CS_PINS        0x500   // 10 + 8
+#define ST7783_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
+#define ST7783_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
+
+// Backlight and Reset pins
+#define ST7783_RES_PORT        3     // LCD Reset  (LCD Pin 31)
+#define ST7783_RES_PIN         3
+#define ST7783_BL_PORT         2     // Backlight Enable (LCD Pin 16)
+#define ST7783_BL_PIN          9
+
+// Data pins
+// Note: data pins must be consecutive and on the same port
+#define ST7783_DATA_PORT       2     // 8-Pin Data Port
+#define ST7783_DATA_PIN1       1
+#define ST7783_DATA_PIN2       2
+#define ST7783_DATA_PIN3       3
+#define ST7783_DATA_PIN4       4
+#define ST7783_DATA_PIN5       5
+#define ST7783_DATA_PIN6       6
+#define ST7783_DATA_PIN7       7
+#define ST7783_DATA_PIN8       8
+#define ST7783_DATA_MASK       0x000001FE
+#define ST7783_DATA_OFFSET     1     // Offset = PIN1
+
+// Placed here to try to keep all pin specific values in header file
+#define ST7783_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
+                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
+
+// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
+#define ST7783_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ST7783_DATA_MASK << 2))))
+#define ST7783_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_WR_PIN) << 2))))
+#define ST7783_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_CD_PIN) << 2))))
+#define ST7783_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_CS_PIN) << 2))))
+#define ST7783_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_RD_PIN) << 2))))
+#define ST7783_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ST7783_RES_PIN) << 2))))
+#define ST7783_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CS_CD_PINS) << 2))))
+#define ST7783_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_RD_WR_PINS) << 2))))
+#define ST7783_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_WR_CS_PINS) << 2))))
+#define ST7783_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CD_RD_WR_PINS) << 2))))
+#define ST7783_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CS_CD_RD_WR_PINS) << 2))))
+
+// Macros to set data bus direction to input/output
+#define ST7783_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ST7783_DATA_MASK
+#define ST7783_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ST7783_DATA_MASK
+
+// Macros for control line state
+#define CLR_CD          ST7783_GPIO1DATA_CD = (0)
+#define SET_CD          ST7783_GPIO1DATA_CD = (1 << ST7783_CD_PIN)
+#define CLR_CS          ST7783_GPIO1DATA_CS = (0)
+#define SET_CS          ST7783_GPIO1DATA_CS = (1 << ST7783_CS_PIN)
+#define CLR_WR          ST7783_GPIO1DATA_WR = (0)
+#define SET_WR          ST7783_GPIO1DATA_WR = (1 << ST7783_WR_PIN)
+#define CLR_RD          ST7783_GPIO1DATA_RD = (0)
+#define SET_RD          ST7783_GPIO1DATA_RD = (1 << ST7783_RD_PIN)
+#define CLR_RESET       ST7783_GPIO3DATA_RES = (0)
+#define SET_RESET       ST7783_GPIO3DATA_RES = (1 << ST7783_RES_PIN)
+
+// These 'combined' macros are defined to improve code performance by
+// reducing the number of instructions in heavily used functions
+#define CLR_CS_CD           ST7783_GPIO1DATA_CS_CD = (0);
+#define SET_RD_WR           ST7783_GPIO1DATA_RD_WR = (ST7783_RD_WR_PINS);
+#define SET_WR_CS           ST7783_GPIO1DATA_WR_CS = (ST7783_WR_CS_PINS);
+#define SET_CD_RD_WR        ST7783_GPIO1DATA_CD_RD_WR = (ST7783_CD_RD_WR_PINS);
+#define CLR_CS_CD_SET_RD_WR ST7783_GPIO1DATA_CS_CD_RD_WR = (ST7783_RD_WR_PINS);
+#define CLR_CS_SET_CD_RD_WR ST7783_GPIO1DATA_CS_CD_RD_WR = (ST7783_CD_RD_WR_PINS);
+
+#endif
diff --git a/drivers/displays/tft/hw/template.c b/drivers/displays/tft/hw/template.c
new file mode 100644 (file)
index 0000000..ed1c271
--- /dev/null
@@ -0,0 +1,208 @@
+/**************************************************************************/
+/*! 
+    @file     
+    @author   
+
+    @section  DESCRIPTION
+    
+    TODO
+          
+    @section  LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "core/systick/systick.h"
+#include "drivers/displays/tft/touchscreen.h"
+
+// Screen width, height, has touchscreen, support orientation changes, support hw scrolling
+static lcdProperties_t templateProperties = { 240, 320, false, false, false };
+
+/*************************************************/
+/* Private Methods                               */
+/*************************************************/
+
+// Todo: Functions to init the LCD, send commands, etc.
+
+/*************************************************/
+/* Public Methods                                */
+/*************************************************/
+
+// The following functions add need to be written to match the generic 
+// lcd interface defined by lcd.h
+
+/**************************************************************************/
+/*! 
+    @brief  Configures any pins or HW and initialises the LCD controller
+*/
+/**************************************************************************/
+void lcdInit(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Enables or disables the LCD backlight
+*/
+/**************************************************************************/
+void lcdBacklight(bool state)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Renders a simple test pattern on the LCD
+*/
+/**************************************************************************/
+void lcdTest(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Fills the LCD with the specified 16-bit color
+*/
+/**************************************************************************/
+void lcdFillRGB(uint16_t data)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws a single pixel at the specified X/Y location
+*/
+/**************************************************************************/
+void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Draws an array of consecutive RGB565 pixels (much
+            faster than addressing each pixel individually)
+*/
+/**************************************************************************/
+void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a horizontal line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Optimised routine to draw a vertical line faster than
+            setting individual pixels
+*/
+/**************************************************************************/
+void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the 16-bit color of the pixel at the specified location
+*/
+/**************************************************************************/
+uint16_t lcdGetPixel(uint16_t x, uint16_t y)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Sets the LCD orientation to horizontal and vertical
+*/
+/**************************************************************************/
+void lcdSetOrientation(lcdOrientation_t orientation)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the current screen orientation (horizontal or vertical)
+*/
+/**************************************************************************/
+lcdOrientation_t lcdGetOrientation(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the width in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetWidth(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the height in pixels of the LCD screen (varies depending
+            on the current screen orientation)
+*/
+/**************************************************************************/
+uint16_t lcdGetHeight(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Scrolls the contents of the LCD screen vertically the
+            specified number of pixels using a HW optimised routine
+*/
+/**************************************************************************/
+void lcdScroll(int16_t pixels, uint16_t fillColor)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Gets the controller's 16-bit (4 hexdigit) ID
+*/
+/**************************************************************************/
+uint16_t lcdGetControllerID(void)
+{
+}
+
+/**************************************************************************/
+/*! 
+    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
+            generic capabilities and dimensions
+*/
+/**************************************************************************/
+lcdProperties_t lcdGetProperties(void)
+{
+}
diff --git a/drivers/displays/tft/lcd.h b/drivers/displays/tft/lcd.h
new file mode 100644 (file)
index 0000000..d415d3e
--- /dev/null
@@ -0,0 +1,81 @@
+/**************************************************************************/
+/*! 
+    @file     lcd.h
+    @author   K. Townsend (microBuilder.eu)
+    @date     22 March 2010
+    @version  0.10
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __LCD_H__
+#define __LCD_H__
+
+#include "projectconfig.h"
+#include "colors.h"
+
+// Any LCD needs to implement these common methods, which allow the low-level
+// initialisation and pixel-setting details to be abstracted away from the
+// higher level drawing and graphics code.
+
+typedef enum 
+{
+  LCD_ORIENTATION_PORTRAIT = 0,
+  LCD_ORIENTATION_LANDSCAPE = 1
+} lcdOrientation_t;
+
+// This struct is used to indicate the capabilities of different LCDs
+typedef struct
+{
+  uint16_t width;         // LCD width in pixels (default orientation)
+  uint16_t height;        // LCD height in pixels (default orientation)
+  bool     touchscreen;   // Whether the LCD has a touch screen
+  bool     orientation;   // Whether the LCD orientation can be modified
+  bool     hwscrolling;   // Whether the LCD support HW scrolling
+} lcdProperties_t;
+
+extern void     lcdInit(void);
+extern void     lcdTest(void);
+extern uint16_t lcdGetPixel(uint16_t x, uint16_t y);
+extern void     lcdFillRGB(uint16_t data);
+extern void     lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color);
+extern void     lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len);
+extern void     lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color);
+extern void     lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color);
+extern void     lcdBacklight(bool state);
+extern void     lcdScroll(int16_t pixels, uint16_t fillColor);
+extern uint16_t lcdGetWidth(void);
+extern uint16_t lcdGetHeight(void);
+extern void     lcdSetOrientation(lcdOrientation_t orientation);
+extern uint16_t lcdGetControllerID(void);
+extern lcdOrientation_t lcdGetOrientation(void);
+extern lcdProperties_t lcdGetProperties(void);
+
+#endif
diff --git a/drivers/displays/tft/readme.txt b/drivers/displays/tft/readme.txt
new file mode 100644 (file)
index 0000000..40caa06
--- /dev/null
@@ -0,0 +1,34 @@
+TFT LCDs
+========
+
+The top level of this folder contains generic drawing routines for 16-bit TFT
+LCD displays.  The core drawing functions are defined in drawing.c, and the
+specific HW implementation of these routines (setting the individual pixels,
+initialising the display, etc.) takes place in a seperate HW drivers that
+implements the methods defined in lcd.h.  To change the LCD used, you simply
+need to change which HW-specific file is compiled and linked during the build
+process, without having to change anything else in your application code.
+
+For example:
+
+- main.c             - drawing.c          - hw\ili9325.c
+----------------     ----------------     ----------------
+  APPLICATION    --> GENERIC DRAWING  -->   SPECIFIC HW 
+     CODE        -->       CODE       -->      DRIVER
+----------------     ----------------     ----------------
+
+
+drawing.c          Generic drawing routines such as drawing pixels, lines,
+                   rectangles, as well as basic text-rendering.
+
+lcd.h              This file contains the prototypes of HW-specific functions
+                   that must be implemented in the LCD driver, since
+                   drawing.c will redirect all requests to these lower level
+                   functions.
+                   
+touchscreen.c      Contains a very simple example of how to use ADC to read
+                   the current position on a touchscreen.  No signal debouncing
+                   takes places, and this code will need to be improved for us
+                   in a real-world situation.
+
+hw\*               HW-specific drivers based on lcd.h                   
\ No newline at end of file
diff --git a/drivers/displays/tft/touchscreen.c b/drivers/displays/tft/touchscreen.c
new file mode 100644 (file)
index 0000000..90af15f
--- /dev/null
@@ -0,0 +1,633 @@
+/**************************************************************************/
+/*! 
+    @file     touchscreen.c
+    @author   K. Townsend (microBuilder.eu)
+
+    Parts copyright (c) 2001, Carlos E. Vidales. All rights reserved.
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#include "touchscreen.h"
+
+#include "core/adc/adc.h"
+#include "core/gpio/gpio.h"
+#include "core/systick/systick.h"
+#include "drivers/eeprom/eeprom.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+
+#define TS_LINE1 "Touch the center of"
+#define TS_LINE2 "the red circle using"
+#define TS_LINE3 "a pen or stylus"
+
+static bool _tsInitialised = FALSE;
+static uint8_t _tsThreshhold = CFG_TFTLCD_TS_DEFAULTTHRESHOLD;
+tsPoint_t _tsLCDPoints[3]; 
+tsPoint_t _tsTSPoints[3]; 
+tsMatrix_t _tsMatrix;
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Private Methods ------------------------------ */
+/*                                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Reads the current Z/pressure level using the ADC
+*/
+/**************************************************************************/
+void tsReadZ(uint32_t* z1, uint32_t* z2)
+{
+  if (!_tsInitialised) tsInit();
+
+  // XP = ADC
+  // XM = GPIO Output Low
+  // YP = GPIO Output High
+  // YM = GPIO Input
+
+  TS_XM_FUNC_GPIO;
+  TS_YP_FUNC_GPIO;
+  TS_YM_FUNC_GPIO;
+
+  gpioSetDir (TS_XM_PORT, TS_XM_PIN, 1);
+  gpioSetDir (TS_YP_PORT, TS_YP_PIN, 1);
+  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
+
+  gpioSetValue(TS_XM_PORT, TS_XM_PIN, 0);   // GND
+  gpioSetValue(TS_YP_PORT, TS_YP_PIN, 1);   // 3.3V
+
+  TS_XP_FUNC_ADC;
+  *z1 = adcRead(TS_XP_ADC_CHANNEL);
+
+  // XP = GPIO Input
+  // XM = GPIO Output Low
+  // YP = GPIO Output High
+  // YM = ADC
+
+  TS_XP_FUNC_GPIO;
+  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
+
+  TS_YM_FUNC_ADC;
+  *z2 = adcRead(TS_YM_ADC_CHANNEL);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads the current X position using the ADC
+*/
+/**************************************************************************/
+uint32_t tsReadX(void)
+{
+  if (!_tsInitialised) tsInit();
+
+  // XP = GPIO Output High
+  // XM = GPIO Output Low
+  // YP = ADC
+  // YM = GPIO Input
+
+  TS_XP_FUNC_GPIO;
+  TS_XM_FUNC_GPIO;
+  TS_YM_FUNC_GPIO;
+
+  gpioSetDir (TS_XP_PORT, TS_XP_PIN, 1);
+  gpioSetDir (TS_XM_PORT, TS_XM_PIN, 1);
+  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
+
+  gpioSetValue(TS_XP_PORT, TS_XP_PIN, 1);   // 3.3V
+  gpioSetValue(TS_XM_PORT, TS_XM_PIN, 0);   // GND
+
+  TS_YP_FUNC_ADC;  
+
+  // Return the ADC results
+  return adcRead(TS_YP_ADC_CHANNEL);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads the current Y position using the ADC
+*/
+/**************************************************************************/
+uint32_t tsReadY(void)
+{
+  if (!_tsInitialised) tsInit();
+
+  // YP = GPIO Output High
+  // YM = GPIO Output Low
+  // XP = GPIO Input
+  // XM = ADC
+
+  TS_YP_FUNC_GPIO;
+  TS_YM_FUNC_GPIO;
+  TS_XP_FUNC_GPIO;
+
+  gpioSetDir (TS_YP_PORT, TS_YP_PIN, 1);
+  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 1);
+  gpioSetDir (TS_XP_PORT, TS_XP_PIN, 0);
+
+  gpioSetValue(TS_YP_PORT, TS_YP_PIN, 1);   // 3.3V
+  gpioSetValue(TS_YM_PORT, TS_YM_PIN, 0);   // GND
+
+  TS_XM_FUNC_ADC;
+
+  // Return the ADC results
+  return adcRead(TS_XM_ADC_CHANNEL);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Centers a line of text horizontally
+*/
+/**************************************************************************/
+void tsCalibCenterText(char* text, uint16_t y, uint16_t color)
+{
+  drawString((lcdGetWidth() - drawGetStringWidth(&dejaVuSans9ptFontInfo, text)) / 2, y, color, &dejaVuSans9ptFontInfo, text);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Renders the calibration screen with an appropriately
+            placed test point and waits for a touch event
+*/
+/**************************************************************************/
+tsTouchData_t tsRenderCalibrationScreen(uint16_t x, uint16_t y, uint16_t radius)
+{
+  drawFill(COLOR_WHITE);
+  tsCalibCenterText(TS_LINE1, 50, COLOR_GRAY_50);
+  tsCalibCenterText(TS_LINE2, 65, COLOR_GRAY_50);
+  tsCalibCenterText(TS_LINE3, 80, COLOR_GRAY_50);
+  drawCircle(x, y, radius, COLOR_RED);
+  drawCircle(x, y, radius + 2, COLOR_GRAY_128);
+
+  // Wait for a valid touch events
+  tsTouchData_t data;
+  tsTouchError_t error;
+  bool valid = false;
+  while (!valid)
+  {    
+    // Set calibration flag for ts read
+    error = tsRead(&data, true);
+    if (!error && data.valid)
+    {
+      valid = true;
+    }
+  }
+
+  return data;
+}
+
+/**************************************************************************/
+/*!
+    @brief Calculates the difference between the touch screen and the
+           actual screen co-ordinates, taking into account misalignment
+           and any physical offset of the touch screen.
+
+    @note  This is based on the public domain touch screen calibration code
+           written by Carlos E. Vidales (copyright (c) 2001).
+
+           For more information, see the following app notes:
+
+           - AN2173 - Touch Screen Control and Calibration
+             Svyatoslav Paliy, Cypress Microsystems
+           - Calibration in touch-screen systems
+             Wendy Fang and Tony Chang,
+             Analog Applications Journal, 3Q 2007 (Texas Instruments)
+*/
+/**************************************************************************/
+int setCalibrationMatrix( tsPoint_t * displayPtr, tsPoint_t * screenPtr, tsMatrix_t * matrixPtr)
+{
+  int  retValue = 0;
+  
+  matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
+                       ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
+  
+  if( matrixPtr->Divider == 0 )
+  {
+    retValue = -1 ;
+  }
+  else
+  {
+    matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
+                    ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
+  
+    matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - 
+                    ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
+  
+    matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
+                    (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
+                    (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
+  
+    matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - 
+                    ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
+  
+    matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - 
+                    ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
+  
+    matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
+                    (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
+                    (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
+
+    // Persist data to EEPROM
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_AN, matrixPtr->An);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_BN, matrixPtr->Bn);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_CN, matrixPtr->Cn);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_DN, matrixPtr->Dn);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_EN, matrixPtr->En);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_FN, matrixPtr->Fn);
+    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_DIVIDER, matrixPtr->Divider);
+    eepromWriteU8(CFG_EEPROM_TOUCHSCREEN_CALIBRATED, 1);
+  }
+
+  return( retValue ) ;
+} 
+
+/**************************************************************************/
+/*!
+    @brief  Converts the supplied touch screen location (screenPtr) to
+            a pixel location on the display (displayPtr) using the
+            supplied matrix.  The screen orientation is also taken into
+            account when converting the touch screen co-ordinate to
+            a pixel location on the LCD.
+
+    @note  This is based on the public domain touch screen calibration code
+           written by Carlos E. Vidales (copyright (c) 2001).
+*/
+/**************************************************************************/
+int getDisplayPoint( tsPoint_t * displayPtr, tsPoint_t * screenPtr, tsMatrix_t * matrixPtr )
+{
+  int  retValue = TS_ERROR_NONE ;
+  
+  if( matrixPtr->Divider != 0 )
+  {
+    displayPtr->x = ( (matrixPtr->An * screenPtr->x) + 
+                      (matrixPtr->Bn * screenPtr->y) + 
+                       matrixPtr->Cn 
+                    ) / matrixPtr->Divider ;
+
+    displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) + 
+                      (matrixPtr->En * screenPtr->y) + 
+                       matrixPtr->Fn 
+                    ) / matrixPtr->Divider ;
+  }
+  else
+  {
+    // ToDo: Default values required or you can never read LCD position!
+    // return TS_ERROR_NOTCALIBRATED;
+    return -1;
+  }
+
+  // Adjust value if the screen is in landscape mode
+  lcdOrientation_t orientation;
+  orientation = lcdGetOrientation();
+  if (orientation == LCD_ORIENTATION_LANDSCAPE)
+  {
+      uint32_t oldx, oldy;
+      oldx = displayPtr->x;
+      oldy = displayPtr->y;
+      displayPtr->x = oldy;
+      displayPtr->y = lcdGetHeight() - oldx;
+  }
+  
+  return( retValue ) ;
+}
+
+/**************************************************************************/
+/*                                                                        */
+/* ----------------------- Public Methods ------------------------------- */
+/*                                                                        */
+/**************************************************************************/
+
+/**************************************************************************/
+/*!
+    @brief  Initialises the appropriate GPIO pins and ADC for the
+            touchscreen
+*/
+/**************************************************************************/
+void tsInit(void)
+{
+  // Make sure that ADC is initialised
+  adcInit();
+
+  // Set initialisation flag
+  _tsInitialised = TRUE;
+  _tsThreshhold = tsGetThreshhold();
+
+  // Load values from EEPROM if touch screen has already been calibrated
+  if (eepromReadU8(CFG_EEPROM_TOUCHSCREEN_CALIBRATED) == 1)
+  {
+    // Load calibration data
+    _tsMatrix.An = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_AN);
+    _tsMatrix.Bn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_BN);
+    _tsMatrix.Cn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_CN);
+    _tsMatrix.Dn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_DN);
+    _tsMatrix.En = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_EN);
+    _tsMatrix.Fn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_FN);
+    _tsMatrix.Divider = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_DIVIDER);
+  }
+  else
+  {
+    // You may want to run the touch screen calibration sequence
+    // here since the ts has apparently never been calibrated!
+    // tsCalibrate();
+  }
+}
+
+/**************************************************************************/
+/*!
+    @brief  Reads the current X, Y and Z co-ordinates of the touch screen
+
+    @param[in]    calibrating
+                  Set to 1 if the read attempt is for calibration data.
+                  No attempt will be made to correlate the touch screen
+                  and LCD co-ordinates.
+*/
+/**************************************************************************/
+tsTouchError_t tsRead(tsTouchData_t* data, uint8_t calibrating)
+{
+  uint32_t x1, x2, y1, y2, z1, z2;
+
+  // Assign pressure levels regardless of touch state
+  tsReadZ(&z1, &z2);
+  data->z1 = z1;
+  data->z2 = z2;
+  data->xraw = 0;
+  data->yraw = 0;
+  data->xlcd = 0;
+  data->ylcd = 0;
+
+  // Abort if the screen is not being touched (0 levels reported)
+  if (z1 < _tsThreshhold)
+  {
+    data->valid = false;
+    return TS_ERROR_NONE;
+  }
+
+  // Get two X/Y readings and compare results
+  x1 = tsReadX();
+  x2 = tsReadX();
+  y1 = tsReadY();
+  y2 = tsReadY();
+
+  // Throw an error if both readings aren't identical
+  if (x1 != x2 || y1 != y2)
+  {
+    data->valid = false;
+    data->xraw = x1;
+    data->yraw = y1;
+    return TS_ERROR_XYMISMATCH;
+  }
+
+  // X/Y seems to be valid and reading has been confirmed twice
+  data->xraw = x1;
+  data->yraw = y1;
+
+  // Convert x/y values to pixel location with matrix multiply
+  tsPoint_t location, touch;
+  touch.x = x1;
+  touch.y = y1;
+  // Only calculate the relative LCD value if this isn't for calibration
+  if (!calibrating)
+  {
+    getDisplayPoint( &location, &touch, &_tsMatrix) ;
+    data->xlcd = location.x;
+    data->ylcd = location.y;
+  }
+  else
+  {
+    // Assign some false values, but only xraw and yraw are
+    // used for calibration
+    data->xlcd = 0;
+    data->ylcd = 0;
+  }
+  data->valid = true;
+
+  return TS_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Starts the screen calibration process.  Each corner will be
+            tested, meaning that each boundary (top, left, right and 
+            bottom) will be tested twice and the readings averaged.
+*/
+/**************************************************************************/
+void tsCalibrate(void)
+{
+  tsTouchData_t data;
+
+  /* --------------- Welcome Screen --------------- */
+  data = tsRenderCalibrationScreen(lcdGetWidth() / 2, lcdGetHeight() / 2, 5);
+  systickDelay(250);
+
+  /* ----------------- First Dot ------------------ */
+  // 10% over and 10% down
+  data = tsRenderCalibrationScreen(lcdGetWidth() / 10, lcdGetHeight() / 10, 5);
+  _tsLCDPoints[0].x = lcdGetWidth() / 10;
+  _tsLCDPoints[0].y = lcdGetHeight() / 10;
+  _tsTSPoints[0].x = data.xraw;
+  _tsTSPoints[0].y = data.yraw;
+  printf("Point 1 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
+        (int)_tsLCDPoints[0].x, (int)_tsLCDPoints[0].y, (int)_tsTSPoints[0].x, (int)_tsTSPoints[0].y);
+  systickDelay(250);
+
+  /* ---------------- Second Dot ------------------ */
+  // 50% over and 90% down
+  data = tsRenderCalibrationScreen(lcdGetWidth() / 2, lcdGetHeight() - lcdGetHeight() / 10, 5);
+  _tsLCDPoints[1].x = lcdGetWidth() / 2;
+  _tsLCDPoints[1].y = lcdGetHeight() - lcdGetHeight() / 10;
+  _tsTSPoints[1].x = data.xraw;
+  _tsTSPoints[1].y = data.yraw;
+  printf("Point 2 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
+       (int)_tsLCDPoints[1].x, (int)_tsLCDPoints[1].y, (int)_tsTSPoints[1].x, (int)_tsTSPoints[1].y);
+  systickDelay(250);
+
+  /* ---------------- Third Dot ------------------- */
+  // 90% over and 50% down
+  data = tsRenderCalibrationScreen(lcdGetWidth() - lcdGetWidth() / 10, lcdGetHeight() / 2, 5);
+  _tsLCDPoints[2].x = lcdGetWidth() - lcdGetWidth() / 10;
+  _tsLCDPoints[2].y = lcdGetHeight() / 2;
+  _tsTSPoints[2].x = data.xraw;
+  _tsTSPoints[2].y = data.yraw;
+  printf("Point 3 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
+        (int)_tsLCDPoints[2].x, (int)_tsLCDPoints[2].y, (int)_tsTSPoints[2].x, (int)_tsTSPoints[2].y);
+  systickDelay(250);
+
+  // Do matrix calculations for calibration and store to EEPROM
+  setCalibrationMatrix(&_tsLCDPoints[0], &_tsTSPoints[0], &_tsMatrix);
+}
+
+/**************************************************************************/
+/*!
+    @brief  Causes a blocking delay until a valid touch event occurs
+
+    @note   Thanks to 'rossum' and limor for this nifty little tidbit on
+            debouncing the signals via pressure sensitivity (using Z)
+
+    @section Example
+
+    @code 
+    #include "drivers/displays/tft/touchscreen.h"
+    ...
+    tsTouchData_t data;
+    tsTouchError_t error;
+  
+    while (1)
+    {
+      // Cause a blocking delay until a touch event occurs or 5s passes
+      error = tsWaitForEvent(&data, 5000);
+  
+      if (error)
+      {
+        switch(error)
+        {
+          case TS_ERROR_TIMEOUT:
+            printf("Timeout occurred %s", CFG_PRINTF_NEWLINE);
+            break;
+          default:
+            break;
+        }
+      }
+      else
+      {
+        // A valid touch event occurred ... display data
+        printf("Touch Event: X = %04u, Y = %04u %s", 
+            data.xlcd, 
+            data.ylcd, 
+            CFG_PRINTF_NEWLINE);
+      }
+    }
+
+    @endcode
+*/
+/**************************************************************************/
+tsTouchError_t tsWaitForEvent(tsTouchData_t* data, uint32_t timeoutMS)
+{
+  if (!_tsInitialised) tsInit();
+
+  tsRead(data, false);
+
+  // Return the results right away if reading is valid
+  if (data->valid)
+  {
+    return TS_ERROR_NONE;
+  }
+
+  // Handle timeout if delay > 0 milliseconds
+  if (timeoutMS)
+  {
+    uint32_t startTick = systickGetTicks();
+    // Systick rollover may occur while waiting for timeout
+    if (startTick > 0xFFFFFFFF - timeoutMS)
+    {
+      while (data->valid == false)
+      {
+        // Throw alert if timeout delay has been passed
+        if ((systickGetTicks() < startTick) && (systickGetTicks() >= (timeoutMS - (0xFFFFFFFF - startTick))))
+        {
+          return TS_ERROR_TIMEOUT;
+        }      
+        tsRead(data, false);
+      }
+    }
+    // No systick rollover will occur ... calculate timeout the simple way
+    else
+    {
+      // Wait in infinite loop
+      while (data->valid == false)
+      {
+        // Throw timeout if delay has been passed
+        if ((systickGetTicks() - startTick) > timeoutMS)
+        {
+          return TS_ERROR_TIMEOUT;
+        }
+        tsRead(data, false);
+      }
+    }
+  }
+  // No timeout requested ... wait forever
+  else
+  {
+    while (data->valid == false)
+    {
+      tsRead(data, false);
+    }
+  }
+
+  // Indicate correct reading
+  return TS_ERROR_NONE;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Updates the touch screen threshhold level and saves it
+            to EEPROM
+*/
+/**************************************************************************/
+int tsSetThreshhold(uint8_t value)
+{
+  if ((value < 0) || (value > 254))
+  {
+    return -1;
+  }
+
+  // Update threshhold value
+  _tsThreshhold = value;
+
+  // Persist to EEPROM
+  eepromWriteU8(CFG_EEPROM_TOUCHSCREEN_THRESHHOLD, value);
+
+  return 0;
+}
+
+/**************************************************************************/
+/*!
+    @brief  Gets the current touch screen threshhold level from EEPROM
+            (if present) or returns the default value from projectconfig.h
+*/
+/**************************************************************************/
+uint8_t tsGetThreshhold(void)
+{
+  // Check if custom threshold has been set in eeprom
+  uint8_t thold = eepromReadU8(CFG_EEPROM_TOUCHSCREEN_THRESHHOLD);
+  if (thold != 0xFF)
+  {
+    // Use value from EEPROM
+    _tsThreshhold = thold;
+  }
+  else
+  {
+    // Use the default value from projectconfig.h
+    _tsThreshhold = CFG_TFTLCD_TS_DEFAULTTHRESHOLD;
+  }
+
+  return _tsThreshhold;
+}
diff --git a/drivers/displays/tft/touchscreen.h b/drivers/displays/tft/touchscreen.h
new file mode 100644 (file)
index 0000000..96f7626
--- /dev/null
@@ -0,0 +1,110 @@
+/**************************************************************************/
+/*! 
+    @file     touchscreen.h
+    @author   K. Townsend (microBuilder.eu)
+
+    @section LICENSE
+
+    Software License Agreement (BSD License)
+
+    Copyright (c) 2010, microBuilder SARL
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are met:
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+    2. Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in the
+    documentation and/or other materials provided with the distribution.
+    3. Neither the name of the copyright holders nor the
+    names of its contributors may be used to endorse or promote products
+    derived from this software without specific prior written permission.
+
+    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
+    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
+    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+/**************************************************************************/
+#ifndef __TOUCHSCREEN_H__
+#define __TOUCHSCREEN_H__
+
+#include "projectconfig.h"
+
+#define TS_XP_PORT        (1)
+#define TS_XP_PIN         (0)
+#define TS_XP_FUNC_GPIO   do {IOCON_JTAG_TMS_PIO1_0 &= ~(IOCON_JTAG_TMS_PIO1_0_FUNC_MASK | IOCON_JTAG_TMS_PIO1_0_ADMODE_MASK); IOCON_JTAG_TMS_PIO1_0 |= IOCON_JTAG_TMS_PIO1_0_FUNC_GPIO;} while (0)
+#define TS_XP_FUNC_ADC    do {IOCON_JTAG_TMS_PIO1_0 &= ~(IOCON_JTAG_TMS_PIO1_0_FUNC_MASK | IOCON_JTAG_TMS_PIO1_0_ADMODE_MASK); IOCON_JTAG_TMS_PIO1_0 |= IOCON_JTAG_TMS_PIO1_0_FUNC_AD1;} while (0)
+  
+#define TS_XM_PORT        (1)
+#define TS_XM_PIN         (1)
+#define TS_XM_FUNC_GPIO   do {IOCON_JTAG_TDO_PIO1_1 &= ~(IOCON_JTAG_TDO_PIO1_1_FUNC_MASK | IOCON_JTAG_TDO_PIO1_1_ADMODE_MASK); IOCON_JTAG_TDO_PIO1_1 |= IOCON_JTAG_TDO_PIO1_1_FUNC_GPIO;} while (0)
+#define TS_XM_FUNC_ADC    do {IOCON_JTAG_TDO_PIO1_1 &= ~(IOCON_JTAG_TDO_PIO1_1_FUNC_MASK | IOCON_JTAG_TDO_PIO1_1_ADMODE_MASK); IOCON_JTAG_TDO_PIO1_1 |= IOCON_JTAG_TDO_PIO1_1_FUNC_AD2;} while (0)
+  
+#define TS_YP_PORT        (0)
+#define TS_YP_PIN         (11)
+#define TS_YP_FUNC_GPIO   do {IOCON_JTAG_TDI_PIO0_11 &= ~(IOCON_JTAG_TDI_PIO0_11_FUNC_MASK | IOCON_JTAG_TDI_PIO0_11_ADMODE_MASK); IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO;} while (0)
+#define TS_YP_FUNC_ADC    do {IOCON_JTAG_TDI_PIO0_11 &= ~(IOCON_JTAG_TDI_PIO0_11_FUNC_MASK | IOCON_JTAG_TDI_PIO0_11_ADMODE_MASK); IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_AD0;} while (0)
+  
+#define TS_YM_PORT        (1)
+#define TS_YM_PIN         (2)
+#define TS_YM_FUNC_GPIO   do {IOCON_JTAG_nTRST_PIO1_2 &= ~(IOCON_JTAG_nTRST_PIO1_2_FUNC_MASK | IOCON_JTAG_nTRST_PIO1_2_ADMODE_MASK); IOCON_JTAG_nTRST_PIO1_2 |= IOCON_JTAG_nTRST_PIO1_2_FUNC_GPIO;} while (0)
+#define TS_YM_FUNC_ADC    do {IOCON_JTAG_nTRST_PIO1_2 &= ~(IOCON_JTAG_nTRST_PIO1_2_FUNC_MASK | IOCON_JTAG_nTRST_PIO1_2_ADMODE_MASK); IOCON_JTAG_nTRST_PIO1_2 |= IOCON_JTAG_nTRST_PIO1_2_FUNC_AD3;} while (0)
+  
+#define TS_YP_ADC_CHANNEL   (0)   // ADC0.0
+#define TS_XP_ADC_CHANNEL   (1)   // ADC0.1
+#define TS_XM_ADC_CHANNEL   (2)   // ADC0.2
+#define TS_YM_ADC_CHANNEL   (3)   // ADC0.3
+
+typedef struct Point 
+{
+  int32_t x;
+  int32_t y;
+} tsPoint_t;
+
+typedef struct Matrix 
+{
+  int32_t An,
+          Bn,
+          Cn,
+          Dn,
+          En,
+          Fn,
+          Divider ;
+} tsMatrix_t;
+
+typedef struct
+{
+  uint32_t xraw;  // Touch screen x
+  uint32_t yraw;  // Touch screen Y
+  uint16_t xlcd;  // LCD co-ordinate X
+  uint16_t ylcd;  // LCD co-ordinate Y
+  uint32_t z1;
+  uint32_t z2;
+  bool valid;     // Whether this is a valid reading or not
+} tsTouchData_t;
+
+typedef enum
+{
+  TS_ERROR_NONE          = 0,
+  TS_ERROR_TIMEOUT       = -1,   // Timeout occured before a valid reading
+  TS_ERROR_XYMISMATCH    = -2,   // Unable to get a stable X/Y value
+  TS_ERROR_NOTCALIBRATED = -3    // Can't calculate X/Y until tsCalibrate() is run!
+} tsTouchError_t;
+
+// Method Prototypes
+void           tsInit ( void );
+tsTouchError_t tsRead(tsTouchData_t* data, uint8_t calibrating);
+void           tsCalibrate ( void );
+tsTouchError_t tsWaitForEvent(tsTouchData_t* data, uint32_t timeoutMS);
+int            tsSetThreshhold(uint8_t value);
+uint8_t        tsGetThreshhold(void);
+
+#endif
diff --git a/drivers/lcd/bitmap/readme.txt b/drivers/lcd/bitmap/readme.txt
deleted file mode 100644 (file)
index 8b144a0..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Bitmap LCDs
-===========
-
-This folder contains drivers for 1-bit graphic LCDs (128x64 pixel ST7565, etc.)
-or text-only displays.  They are placed in a seperate folder because the
-drawing routines are handled quite differently than the generic drawing code
-for 16-bit TFT LCDs.
-
-ST7565             Driver for  128x64 pixel I2C-based displays (available from
-                   Adafruit Industries, for example).
-SSD1306            Driver for 128x64 pixel OLED displays (also available from
-                   Adafruit Industries).
diff --git a/drivers/lcd/bitmap/sharpmem/sharpmem.c b/drivers/lcd/bitmap/sharpmem/sharpmem.c
deleted file mode 100644 (file)
index 545e643..0000000
+++ /dev/null
@@ -1,384 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     sharpmem.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for Sharp Memory Displays.
-    
-    This driver uses a bit-banged 3-pin SPI interface.  For the SPI
-    interface, the select line (CS) is active high, and the clock 
-    line (SCK) is active high.  
-    
-    Note: The LCD expects the address and data
-    bits to arrive LSB, though the M3 shifts the bits out MSB so they
-    need to be switched in SW first.
-
-    @section  EXAMPLE
-    @code
-
-    sharpmemInit();
-    sharpmemEnable(true);
-  
-    // Render some text and a line into the image buffer
-    uint32_t i;
-    sharpmemDrawString(1, 10, "5x8 System", Font_System5x8);
-    sharpmemDrawString(1, 20, "7x8 System", Font_System7x8);
-    for (i = 0; i < 96; i++)
-    {
-      sharpmemDrawPixel(i, i);
-    }
-  
-    while(1)
-    {
-      // Screen must be refreshed at least once per second
-      sharpmemRefresh();
-      systickDelay(1000);
-    }
-
-    @endcode
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "sharpmem.h"
-
-#include "core/systick/systick.h"
-#include "core/gpio/gpio.h"
-#include "drivers/lcd/smallfonts.h"
-
-#define TOGGLE_VCOM   do { _sharpmem_vcom = _sharpmem_vcom ? 0x00 : SHARPMEM_BIT_VCOM; } while(0);
-
-static uint8_t _sharpmembuffer[(SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8];
-static volatile uint8_t _sharpmem_vcom = SHARPMEM_BIT_VCOM;
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Swaps the bit order from MSB to LSB, since the LCD expects LSB,
-            but the M3 shifts bits out MSB.
-*/
-/**************************************************************************/
-uint8_t sharpmemSwap(uint8_t data)
-{
-  uint8_t out = 0;
-  if (data)
-  {
-    if(data & 0x01) out |= 0x80;
-    if(data & 0x02) out |= 0x40;
-    if(data & 0x04) out |= 0x20;
-    if(data & 0x08) out |= 0x10;
-    if(data & 0x10) out |= 0x08;
-    if(data & 0x20) out |= 0x04;
-    if(data & 0x40) out |= 0x02;
-    if(data & 0x80) out |= 0x01;
-  }
-
-  return out;
-}
-
-/*************************************************/
-void sharpmemSendByte(uint8_t data)
-{
-  uint8_t i = 0;
-
-  // Make sure clock pin starts low
-  CLR_SCLK;
-
-  // Write from MSB to LSB
-  // LCD expects LSB first
-  for (i=0; i<8; i++) 
-  { 
-    if (data & 0x80) 
-    { 
-      SET_MOSI;
-    } 
-    else 
-    { 
-      CLR_MOSI;
-    } 
-    // Clock is active high
-    SET_SCLK;
-    data <<= 1; 
-    __asm volatile("nop");
-    CLR_SCLK;
-  } 
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a single graphic character using the supplied font
-*/
-/**************************************************************************/
-static void sharpmemDrawChar(uint16_t x, uint16_t y, const char c, struct FONT_DEF font)
-{
-  uint8_t col, column[font.u8Width];
-
-  // Check if the requested character is available
-  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
-  {
-    // Retrieve appropriate columns from font data
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
-    }
-  }
-  else
-  {    
-    // Requested character is not available in this font ... send a space instead
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = 0xFF;    // Send solid space
-    }
-  }
-
-  // Render each column
-  uint16_t xoffset, yoffset;
-  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
-  {
-    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
-    {
-      uint8_t bit = 0x00;
-      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
-      bit = (bit >> 7);                                   // Shift current row but right (results in 0x01 for black, and 0x00 for white)
-      if (bit)
-      {
-        sharpmemDrawPixel(x + xoffset, y + yoffset);
-      }
-    }
-  }
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/*************************************************/
-void sharpmemInit(void)
-{
-  // Set control pins to output
-  gpioSetDir(SHARPMEM_PORT, SHARPMEM_SCLK_PIN, 1);
-  gpioSetDir(SHARPMEM_PORT, SHARPMEM_MOSI_PIN, 1);
-  gpioSetDir(SHARPMEM_PORT, SHARPMEM_CS_PIN, 1);
-  gpioSetDir(SHARPMEM_PORT, SHARPMEM_DISP_PIN, 1);
-
-  // Set pins to default state
-  CLR_SCLK;
-  CLR_MOSI;
-  CLR_CS;
-  CLR_DISP;
-  
-  // Set the vcom bit to a defined state
-  _sharpmem_vcom = SHARPMEM_BIT_VCOM;
-
-  // Clear the display and turn it off by default
-  sharpmemClearScreen();
-  sharpmemEnable(false);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Turns the display on or off (memory is retained even when the
-           display is off)
-
-    @param[in]  enabled
-                Whether the display should be on (TRUE/1) or off (FALSE/0)
-*/
-/**************************************************************************/
-void sharpmemEnable(bool enable)
-{
-  if (enable)
-  {
-    SET_DISP;
-  }
-  else
-  {
-    CLR_DISP;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief Draws a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0 based)
-    @param[in]  y
-                The y position (0 based)
-*/
-/**************************************************************************/
-void sharpmemDrawPixel(uint16_t x, uint16_t y) 
-{
-  if ((x >= SHARPMEM_LCDWIDTH) || (y >= SHARPMEM_LCDHEIGHT))
-    return;
-
-  _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] |= (1 << x % 8);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0 based)
-    @param[in]  y
-                The y position (0 based)
-*/
-/**************************************************************************/
-void sharpmemClearPixel(uint16_t x, uint16_t y) 
-{
-  if ((x >= SHARPMEM_LCDWIDTH) || (y >= SHARPMEM_LCDHEIGHT))
-    return;
-
-  _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] &= ~(1 << x % 8);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Gets the value (1 or 0) of the specified pixel from the buffer
-
-    @param[in]  x
-                The x position (0 based)
-    @param[in]  y
-                The y position (0 based)
-
-    @return     1 if the pixel is enabled, 0 if disabled
-*/
-/**************************************************************************/
-uint8_t sharpmemGetPixel(uint16_t x, uint16_t y)
-{
-  if ((x >=SHARPMEM_LCDWIDTH) || (y >=SHARPMEM_LCDHEIGHT)) return 0;
-  return _sharpmembuffer[(y*SHARPMEM_LCDWIDTH + x) /8] & (1 << x % 8) ? 1 : 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears the screen
-*/
-/**************************************************************************/
-void sharpmemClearScreen() 
-{
-  memset(_sharpmembuffer, 0x00, (SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8);
-  // Send the clear screen command rather than doing a HW refresh (quicker)
-  SET_CS;
-  sharpmemSendByte(_sharpmem_vcom | SHARPMEM_BIT_CLEAR);
-  sharpmemSendByte(0x00);
-  TOGGLE_VCOM;
-  CLR_CS;  
-}
-
-/**************************************************************************/
-/*! 
-    @brief Renders the contents of the pixel buffer on the LCD
-*/
-/**************************************************************************/
-void sharpmemRefresh(void) 
-{
-  uint16_t i, totalbytes, currentline, oldline;  
-  totalbytes = (SHARPMEM_LCDWIDTH * SHARPMEM_LCDHEIGHT) / 8;
-
-  // Send the write command
-  SET_CS;
-  sharpmemSendByte(SHARPMEM_BIT_WRITECMD | _sharpmem_vcom);
-  TOGGLE_VCOM;
-
-  // Send the address for line 1
-  oldline = currentline = 1;
-  sharpmemSendByte(sharpmemSwap(currentline));
-
-  // Send image buffer
-  for (i=0; i<totalbytes; i++)
-  {
-    sharpmemSendByte(sharpmemSwap(_sharpmembuffer[i]));
-    currentline = ((i+1)/(SHARPMEM_LCDWIDTH/8)) + 1;
-    if(currentline != oldline)
-    {
-      // Send end of line and address bytes
-      sharpmemSendByte(0x00);
-      if (currentline <= SHARPMEM_LCDHEIGHT)
-      {
-        sharpmemSendByte(sharpmemSwap(currentline));
-      }
-      oldline = currentline;
-    }
-  }
-
-  // Send another trailing 8 bits for the last line
-  sharpmemSendByte(0x00);
-  CLR_CS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a string using the supplied font data.
-
-    @param[in]  x
-                Starting x co-ordinate
-    @param[in]  y
-                Starting y co-ordinate
-    @param[in]  text
-                The string to render
-    @param[in]  font
-                Pointer to the FONT_DEF to use when drawing the string
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/bitmap/sharpmem/sharpmem.h"
-    #include "drivers/lcd/smallfonts.h"
-    
-    // Configure the pins and initialise the LCD screen
-    sharpmemInit();
-
-    // Render some text on the screen
-    sharpmemDrawString(1, 10, "5x8 System", Font_System5x8);
-    sharpmemDrawString(1, 20, "7x8 System", Font_System7x8);
-
-    // Refresh the screen to see the results
-    sharpmemRefresh();
-
-    @endcode
-*/
-/**************************************************************************/
-void sharpmemDrawString(uint16_t x, uint16_t y, const char* text, struct FONT_DEF font)
-{
-  uint8_t l;
-  for (l = 0; l < strlen(text); l++)
-  {
-    sharpmemDrawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
-  }
-}
diff --git a/drivers/lcd/bitmap/sharpmem/sharpmem.h b/drivers/lcd/bitmap/sharpmem/sharpmem.h
deleted file mode 100644 (file)
index 8628d7a..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     sharpmem.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SHARPMEM_H__
-#define __SHARPMEM_H__
-
-#include "projectconfig.h"
-#include "drivers/lcd/smallfonts.h"
-
-/**************************************************************************
-    Sharp Memory Display Connector
-    -----------------------------------------------------------------------
-    Pin   Function        Notes
-    ===   ==============  ===============================
-      1   VIN             1.0-5.0V (Boost Supply)
-      2   VDD             5.0V (Boost output, or 5V supply)
-      3   GND
-      4   SCLK            Serial Clock
-      5   MOSI            Serial Data Input
-      6   CS              Serial Chip Select
-      7   EXTCOMIN        External COM Inversion Signal
-      8   DISP            Display On(High)/Off(Low)
-      9   EXTMODE         COM Inversion Select (Low = SW clock/serial)
-
- **************************************************************************/
-
-// LCD Dimensions
-#define SHARPMEM_LCDWIDTH       (96)
-#define SHARPMEM_LCDHEIGHT      (96) 
-
-// Control pins
-#define SHARPMEM_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
-#define SHARPMEM_PORT            (2)
-#define SHARPMEM_SCLK_PIN        (1)
-#define SHARPMEM_MOSI_PIN        (2)
-#define SHARPMEM_CS_PIN          (3)
-#define SHARPMEM_DISP_PIN        (4)
-
-// Macros for control line state
-#define CLR_SCLK    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_SCLK_PIN); } while(0)
-#define SET_SCLK    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_SCLK_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_SCLK_PIN); } while(0)
-#define CLR_MOSI    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_MOSI_PIN); } while(0)
-#define SET_MOSI    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_MOSI_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_MOSI_PIN); } while(0)
-#define CLR_CS      do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_CS_PIN); } while(0)
-#define SET_CS      do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_CS_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_CS_PIN); } while(0)
-#define CLR_DISP    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_DISP_PIN); } while(0)
-#define SET_DISP    do { SHARPMEM_GPIODATAREG &= ~(1<<SHARPMEM_DISP_PIN); SHARPMEM_GPIODATAREG |= (1<<SHARPMEM_DISP_PIN); } while(0)
-
-#define SHARPMEM_BIT_WRITECMD   (0x80)
-#define SHARPMEM_BIT_VCOM       (0x40)
-#define SHARPMEM_BIT_CLEAR      (0x20)
-
-// Method Prototypes
-void    sharpmemInit(void);
-void    sharpmemEnable(bool enable);
-void    sharpmemDrawPixel(uint16_t x, uint16_t y);
-void    sharpmemClearPixel(uint16_t x, uint16_t y);
-uint8_t sharpmemGetPixel(uint16_t x, uint16_t y);
-void    sharpmemClearScreen();
-void    sharpmemRefresh(void);
-void    sharpmemDrawString(uint16_t x, uint16_t y, const char* text, struct FONT_DEF font);
-
-#endif
diff --git a/drivers/lcd/bitmap/ssd1306/ssd1306.c b/drivers/lcd/bitmap/ssd1306/ssd1306.c
deleted file mode 100644 (file)
index 6aa038a..0000000
+++ /dev/null
@@ -1,443 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ssd1306.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section DESCRIPTION
-
-    Driver for 128x64 OLED display based on the SSD1306 controller.
-
-    This driver is based on the SSD1306 Library from Limor Fried
-    (Adafruit Industries) at: https://github.com/adafruit/SSD1306  
-    
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "ssd1306.h"
-
-#include "core/gpio/gpio.h"
-#include "core/systick/systick.h"
-#include "drivers/lcd/smallfonts.h"
-
-void ssd1306SendByte(uint8_t byte);
-
-#define CMD(c)        do { gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
-                           gpioSetValue( SSD1306_DC_PORT, SSD1306_DC_PIN, 0 ); \
-                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 0 ); \
-                           ssd1306SendByte( c ); \
-                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
-                         } while (0);
-#define DATA(c)       do { gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
-                           gpioSetValue( SSD1306_DC_PORT, SSD1306_DC_PIN, 1 ); \
-                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 0 ); \
-                           ssd1306SendByte( c ); \
-                           gpioSetValue( SSD1306_CS_PORT, SSD1306_CS_PIN, 1 ); \
-                         } while (0);
-#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
-
-uint8_t _ssd1306buffer[SSD1306_LCDWIDTH * SSD1306_LCDHEIGHT / 8];
-
-/**************************************************************************/
-/* Private Methods                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief Simulates an SPI write using GPIO
-
-    @param[in]  byte
-                The byte to send
-*/
-/**************************************************************************/
-void ssd1306SendByte(uint8_t byte)
-{
-  int8_t i;
-
-  // Make sure clock pin starts high
-  gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 1);
-
-  // Write from MSB to LSB
-  for (i=7; i>=0; i--) 
-  {
-    // Set clock pin low
-    gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 0);
-    // Set data pin high or low depending on the value of the current bit
-    gpioSetValue(SSD1306_SDAT_PORT, SSD1306_SDAT_PIN, byte & (1 << i) ? 1 : 0);
-    // Set clock pin high
-    gpioSetValue(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, 1);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a single graphic character using the supplied font
-*/
-/**************************************************************************/
-static void ssd1306DrawChar(uint16_t x, uint16_t y, uint8_t c, struct FONT_DEF font)
-{
-  uint8_t col, column[font.u8Width];
-
-  // Make sure we are exceeding the display limits
-  // This also gets checked in ssd1306DrawPixel, but if we start
-  // outside the limits we can avoid some unecessary work at the outset
-  if ((x > SSD1306_LCDWIDTH) || (y > SSD1306_LCDHEIGHT))
-    return;
-
-  // Check if the requested character is available
-  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
-  {
-    // Retrieve appropriate columns from font data
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
-    }
-  }
-  else
-  {    
-    // Requested character is not available in this font ... send a space instead
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = 0xFF;    // Send solid space
-    }
-  }
-
-  // Render each column
-  uint16_t xoffset, yoffset;
-  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
-  {
-    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
-    {
-      uint8_t bit = 0x00;
-      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
-      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
-      if (bit)
-      {
-        ssd1306DrawPixel(x + xoffset, y + yoffset);
-      }
-    }
-  }
-}
-
-/**************************************************************************/
-/* Public Methods                                                         */
-/**************************************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief Initialises the SSD1306 LCD display
-*/
-/**************************************************************************/
-void ssd1306Init(uint8_t vccstate)
-{
-  // Set all pins to output
-  gpioSetDir(SSD1306_SCLK_PORT, SSD1306_SCLK_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1306_SDAT_PORT, SSD1306_SDAT_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1306_DC_PORT, SSD1306_DC_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1306_RST_PORT, SSD1306_RST_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1306_CS_PORT, SSD1306_CS_PIN, gpioDirection_Output);
-
-  // Reset the LCD
-  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 1);
-  DELAY(1);
-  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 0);
-  DELAY(10);
-  gpioSetValue(SSD1306_RST_PORT, SSD1306_RST_PIN, 1);
-
-  #if defined SSD1306_128_32
-    // Init sequence taken from datasheet for UG-2832HSWEG04 (128x32 OLED module)
-    CMD(SSD1306_DISPLAYOFF);                    // 0xAE
-    CMD(SSD1306_SETDISPLAYCLOCKDIV);            // 0xD5
-    CMD(0x80);                                  // the suggested ratio 0x80
-    CMD(SSD1306_SETMULTIPLEX);                  // 0xA8
-    CMD(0x1F);                                  // 31
-    CMD(SSD1306_SETDISPLAYOFFSET);              // 0xD3
-    CMD(0x0);                                   // no offset
-    CMD(SSD1306_SETSTARTLINE | 0x0);            // line #0
-    CMD(SSD1306_CHARGEPUMP);                    // 0x8D
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x10) }
-    else 
-      { CMD(0x14) }
-    CMD(SSD1306_MEMORYMODE);                    // 0x20
-    CMD(0x00);                                  // 0x0 act like ks0108
-    CMD(SSD1306_SEGREMAP | 0x1);
-    CMD(SSD1306_COMSCANDEC);
-    CMD(SSD1306_SETCOMPINS);                    // 0xDA
-    CMD(0x02);
-    CMD(SSD1306_SETCONTRAST);                   // 0x81
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x9F) }
-    else 
-      { CMD(0xCF) }
-    CMD(SSD1306_SETPRECHARGE);                  // 0xd9
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x22) }
-    else 
-      { CMD(0xF1) }
-    CMD(SSD1306_SETVCOMDETECT);                 // 0xDB
-    CMD(0x40);
-    CMD(SSD1306_DISPLAYALLON_RESUME);           // 0xA4
-    CMD(SSD1306_NORMALDISPLAY);                 // 0xA6
-  #endif
-
-  #if defined SSD1306_128_64
-    // Init sequence taken from datasheet for UG-2864HSWEG01 (128x64 OLED module)
-    CMD(SSD1306_DISPLAYOFF);                    // 0xAE
-    CMD(SSD1306_SETDISPLAYCLOCKDIV);            // 0xD5
-    CMD(0x80);                                  // the suggested ratio 0x80
-    CMD(SSD1306_SETMULTIPLEX);                  // 0xA8
-    CMD(0x3F);                                  // 63
-    CMD(SSD1306_SETDISPLAYOFFSET);              // 0xD3
-    CMD(0x0);                                   // no offset
-    CMD(SSD1306_SETSTARTLINE | 0x0);            // line #0
-    CMD(SSD1306_CHARGEPUMP);                    // 0x8D
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x10) }
-    else 
-      { CMD(0x14) }
-    CMD(SSD1306_MEMORYMODE);                    // 0x20
-    CMD(0x00);                                  // 0x0 act like ks0108
-    CMD(SSD1306_SEGREMAP | 0x1);
-    CMD(SSD1306_COMSCANDEC);
-    CMD(SSD1306_SETCOMPINS);                    // 0xDA
-    CMD(0x12);
-    CMD(SSD1306_SETCONTRAST);                   // 0x81
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x9F) }
-    else 
-      { CMD(0xCF) }
-    CMD(SSD1306_SETPRECHARGE);                  // 0xd9
-    if (vccstate == SSD1306_EXTERNALVCC) 
-      { CMD(0x22) }
-    else 
-      { CMD(0xF1) }
-    CMD(SSD1306_SETVCOMDETECT);                 // 0xDB
-    CMD(0x40);
-    CMD(SSD1306_DISPLAYALLON_RESUME);           // 0xA4
-    CMD(SSD1306_NORMALDISPLAY);                 // 0xA6
-  #endif
-
-  // Enabled the OLED panel
-  CMD(SSD1306_DISPLAYON);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Draws a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-*/
-/**************************************************************************/
-void ssd1306DrawPixel(uint8_t x, uint8_t y) 
-{
-  if ((x >= SSD1306_LCDWIDTH) || (y >= SSD1306_LCDHEIGHT))
-    return;
-
-  _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] |= (1 << y%8);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-*/
-/**************************************************************************/
-void ssd1306ClearPixel(uint8_t x, uint8_t y) 
-{
-  if ((x >= SSD1306_LCDWIDTH) || (y >= SSD1306_LCDHEIGHT))
-    return;
-
-  _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] &= ~(1 << y%8); 
-}
-
-/**************************************************************************/
-/*! 
-    @brief Gets the value (1 or 0) of the specified pixel from the buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-
-    @return     1 if the pixel is enabled, 0 if disabled
-*/
-/**************************************************************************/
-uint8_t ssd1306GetPixel(uint8_t x, uint8_t y)
-{
-  if ((x >= SSD1306_LCDWIDTH) || (y >=SSD1306_LCDHEIGHT)) return 0;
-  return _ssd1306buffer[x+ (y/8)*SSD1306_LCDWIDTH] & (1 << y%8) ? 1 : 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears the screen
-*/
-/**************************************************************************/
-void ssd1306ClearScreen() 
-{
-  memset(_ssd1306buffer, 0, 1024);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Renders the contents of the pixel buffer on the LCD
-*/
-/**************************************************************************/
-void ssd1306Refresh(void) 
-{
-  CMD(SSD1306_SETLOWCOLUMN | 0x0);  // low col = 0
-  CMD(SSD1306_SETHIGHCOLUMN | 0x0);  // hi col = 0
-  CMD(SSD1306_SETSTARTLINE | 0x0); // line #0
-
-  uint16_t i;
-  for (i=0; i<1024; i++) 
-  {
-    DATA(_ssd1306buffer[i]);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a string using the supplied font data.
-
-    @param[in]  x
-                Starting x co-ordinate
-    @param[in]  y
-                Starting y co-ordinate
-    @param[in]  text
-                The string to render
-    @param[in]  font
-                Pointer to the FONT_DEF to use when drawing the string
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/bitmap/ssd1306/ssd1306.h"
-    #include "drivers/lcd/smallfonts.h"
-    
-    // Configure the pins and initialise the LCD screen
-    ssd1306Init(SSD1306_INTERNALVCC);
-
-    // Render some text on the screen
-    ssd1306DrawString(1, 10, "5x8 System", Font_System5x8);
-    ssd1306DrawString(1, 20, "7x8 System", Font_System7x8);
-
-    // Refresh the screen to see the results
-    ssd1306Refresh();
-
-    @endcode
-*/
-/**************************************************************************/
-void ssd1306DrawString(uint16_t x, uint16_t y, char* text, struct FONT_DEF font)
-{
-  uint8_t l;
-  for (l = 0; l < strlen(text); l++)
-  {
-    ssd1306DrawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Shifts the contents of the frame buffer up the specified
-            number of pixels
-
-    @param[in]  height
-                The number of pixels to shift the frame buffer up, leaving
-                a blank space at the bottom of the frame buffer x pixels
-                high
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/bitmap/ssd1306/ssd1306.h"
-    #include "drivers/lcd/smallfonts.h"
-    
-    // Configure the pins and initialise the LCD screen
-    ssd1306Init(SSD1306_INTERNALVCC);
-
-    // Continually write some text, scrolling upward one line each time
-    while (1)
-    {
-      // Shift the buffer up 8 pixels (adjust for font-height)
-      ssd1306ShiftFrameBuffer(8);
-      // Render some text on the screen with different fonts
-      ssd1306DrawString(1, 56, "INSERT TEXT HERE", Font_System5x8);
-      // Refresh the screen to see the results
-      ssd1306Refresh();    
-      // Wait a bit before writing the next line
-      systickDelay(1000);
-    }
-
-    @endcode
-*/
-/**************************************************************************/
-void ssd1306ShiftFrameBuffer( uint8_t height )
-{
-  if (height == 0) return;
-  if (height >= SSD1306_LCDHEIGHT)
-  {
-    // Clear the entire frame buffer
-    ssd1306ClearScreen();
-    return;
-  }
-
-  // This is horribly inefficient, but at least easy to understand
-  // In a production environment, this should be significantly optimised
-
-  uint8_t y, x;
-  for (y = 0; y < SSD1306_LCDHEIGHT; y++)
-  {
-    for (x = 0; x < SSD1306_LCDWIDTH; x++)
-    {
-      if ((SSD1306_LCDHEIGHT - 1) - y > height)
-      {
-        // Shift height from further ahead in the buffer
-        ssd1306GetPixel(x, y + height) ? ssd1306DrawPixel(x, y) : ssd1306ClearPixel(x, y);
-      }
-      else
-      {
-        // Clear the entire line
-        ssd1306ClearPixel(x, y);
-      }
-    }
-  }
-}
diff --git a/drivers/lcd/bitmap/ssd1306/ssd1306.h b/drivers/lcd/bitmap/ssd1306/ssd1306.h
deleted file mode 100644 (file)
index 4bb1853..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ssd1306.h
-    @author   K. Townsend (microBuilder.eu)
-    @date     18 January 2012
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SSD1306_H__
-#define __SSD1306_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/smallfonts.h"
-
-/*=========================================================================
-    SSD1306 Displays
-    -----------------------------------------------------------------------
-    The driver is used in multiple displays (128x64, 128x32, etc.).
-    Select the appropriate display below to create an appropriately
-    sized framebuffer, etc.
-
-    SSD1306_128_64  128x64 pixel display
-
-    SSD1306_128_32  128x32 pixel display
-
-    You also need to set the LCDWIDTH and LCDHEIGHT defines to an 
-    appropriate size
-
-    -----------------------------------------------------------------------*/
-    // #define SSD1306_128_64
-    #define SSD1306_128_32
-/*=========================================================================*/
-
-#if defined SSD1306_128_64 && defined SSD1306_128_32
-  #error "Only one SSD1306 display can be specified at once in ssd1306.h"
-#endif
-#if !defined SSD1306_128_64 && !defined SSD1306_128_32
-  #error "At least one SSD1306 display must be specified in ssd1306.h"
-#endif
-
-#if defined SSD1306_128_64
-  #define SSD1306_LCDWIDTH                  128
-  #define SSD1306_LCDHEIGHT                 64
-#endif
-#if defined SSD1306_128_32
-  #define SSD1306_LCDWIDTH                  128
-  #define SSD1306_LCDHEIGHT                 32
-#endif
-
-// Pin Definitions
-#define SSD1306_DC_PORT                    (2)     // Data/Command
-#define SSD1306_DC_PIN                     (1)
-#define SSD1306_RST_PORT                   (2)     // Reset
-#define SSD1306_RST_PIN                    (2)
-#define SSD1306_CS_PORT                    (2)     // Select
-#define SSD1306_CS_PIN                     (3)
-#define SSD1306_SCLK_PORT                  (2)     // Serial Clock
-#define SSD1306_SCLK_PIN                   (5)
-#define SSD1306_SDAT_PORT                  (2)     // Serial Data
-#define SSD1306_SDAT_PIN                   (6)
-
-
-// Commands
-#define SSD1306_SETCONTRAST               0x81
-#define SSD1306_DISPLAYALLON_RESUME       0xA4
-#define SSD1306_DISPLAYALLON              0xA5
-#define SSD1306_NORMALDISPLAY             0xA6
-#define SSD1306_INVERTDISPLAY             0xA7
-#define SSD1306_DISPLAYOFF                0xAE
-#define SSD1306_DISPLAYON                 0xAF
-#define SSD1306_SETDISPLAYOFFSET          0xD3
-#define SSD1306_SETCOMPINS                0xDA
-#define SSD1306_SETVCOMDETECT             0xDB
-#define SSD1306_SETDISPLAYCLOCKDIV        0xD5
-#define SSD1306_SETPRECHARGE              0xD9
-#define SSD1306_SETMULTIPLEX              0xA8
-#define SSD1306_SETLOWCOLUMN              0x00
-#define SSD1306_SETHIGHCOLUMN             0x10
-#define SSD1306_SETSTARTLINE              0x40
-#define SSD1306_MEMORYMODE                0x20
-#define SSD1306_COMSCANINC                0xC0
-#define SSD1306_COMSCANDEC                0xC8
-#define SSD1306_SEGREMAP                  0xA0
-#define SSD1306_CHARGEPUMP                0x8D
-#define SSD1306_EXTERNALVCC               0x1
-#define SSD1306_INTERNALVCC               0x2
-#define SSD1306_SWITCHCAPVCC              0x2
-
-// Initialisation/Config Prototypes
-void    ssd1306Init ( uint8_t vccstate );
-void    ssd1306DrawPixel ( uint8_t x, uint8_t y );
-void    ssd1306ClearPixel ( uint8_t x, uint8_t y );
-uint8_t ssd1306GetPixel ( uint8_t x, uint8_t y );
-void    ssd1306ClearScreen ( void );
-void    ssd1306Refresh ( void );
-void    ssd1306DrawString( uint16_t x, uint16_t y, char* text, struct FONT_DEF font );
-void    ssd1306ShiftFrameBuffer( uint8_t height );
-
-#endif
diff --git a/drivers/lcd/bitmap/st7565/st7565.c b/drivers/lcd/bitmap/st7565/st7565.c
deleted file mode 100644 (file)
index 36707cb..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ST7565.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section DESCRIPTION
-
-    Driver for 128x64 pixel display based on the ST7565 LCD controller.
-
-    This driver is based on the ST7565 Library from Limor Fried
-    (Adafruit Industries) at: http://github.com/adafruit/ST7565-LCD/    
-    
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "st7565.h"
-
-#include "core/gpio/gpio.h"
-#include "core/systick/systick.h"
-#include "drivers/lcd/smallfonts.h"
-
-void sendByte(uint8_t byte);
-
-#define CMD(c)        do { gpioSetValue( ST7565_A0_PORT, ST7565_A0_PIN, 0 ); sendByte( c ); } while (0);
-#define DATA(d)       do { gpioSetValue( ST7565_A0_PORT, ST7565_A0_PIN, 1 ); sendByte( d ); } while (0);
-#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
-
-uint8_t _st7565buffer[128*64/8];
-
-/**************************************************************************/
-/* Private Methods                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief Renders the buffer contents
-
-    @param[in]  buffer
-                Pointer to the buffer containing the raw pixel data
-*/
-/**************************************************************************/
-void writeBuffer(uint8_t *buffer) 
-{
-  uint8_t c, p;
-  int pagemap[] = { 3, 2, 1, 0, 7, 6, 5, 4 };
-
-  for(p = 0; p < 8; p++) 
-  {
-    CMD(ST7565_CMD_SET_PAGE | pagemap[p]);
-    CMD(ST7565_CMD_SET_COLUMN_LOWER | (0x0 & 0xf));
-    CMD(ST7565_CMD_SET_COLUMN_UPPER | ((0x0 >> 4) & 0xf));
-    CMD(ST7565_CMD_RMW);
-    DATA(0xff);
-    
-    for(c = 0; c < 128; c++) 
-    {
-      DATA(buffer[(128*p)+c]);
-    }
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief Simulates an SPI write using GPIO
-
-    @param[in]  byte
-                The byte to send
-*/
-/**************************************************************************/
-void sendByte(uint8_t byte)
-{
-  int8_t i;
-
-  // Note: This code can be optimised to avoid the branches by setting
-  // GPIO registers directly, but we'll leave it as is for the moment
-  // for simplicity sake
-
-  // Make sure clock pin starts high
-  gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
-
-  // Write from MSB to LSB
-  for (i=7; i>=0; i--) 
-  {
-    // Set clock pin low
-    gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 0);
-    // Set data pin high or low depending on the value of the current bit
-    gpioSetValue(ST7565_SDAT_PORT, ST7565_SDAT_PIN, byte & (1 << i) ? 1 : 0);
-    // Set clock pin high
-    gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a single graphic character using the supplied font
-*/
-/**************************************************************************/
-void drawChar(uint16_t x, uint16_t y, uint8_t c, struct FONT_DEF font)
-{
-  uint8_t col, column[font.u8Width];
-
-  // Check if the requested character is available
-  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
-  {
-    // Retrieve appropriate columns from font data
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
-    }
-  }
-  else
-  {    
-    // Requested character is not available in this font ... send a space instead
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = 0xFF;    // Send solid space
-    }
-  }
-
-  // Render each column
-  uint16_t xoffset, yoffset;
-  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
-  {
-    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
-    {
-      uint8_t bit = 0x00;
-      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
-      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
-      if (bit)
-      {
-        st7565DrawPixel(x + xoffset, y + yoffset);
-      }
-    }
-  }
-}
-
-/**************************************************************************/
-/* Public Methods                                                         */
-/**************************************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief Initialises the ST7565 LCD display
-*/
-/**************************************************************************/
-void st7565Init(void)
-{
-  // Note: This can be optimised to set all pins to output and high
-  // in two commands by manipulating the registers directly (assuming
-  // that the pins are located in the same GPIO bank).  The code is left
-  // as is for clarity sake in case the pins are not all located in the
-  // same bank.
-
-  // Set clock pin to output and high
-  gpioSetDir(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
-  gpioSetValue(ST7565_SCLK_PORT, ST7565_SCLK_PIN, 1);
-
-  // Set data pin to output and high
-  gpioSetDir(ST7565_SDAT_PORT, ST7565_SDAT_PIN, 1);
-  gpioSetValue(ST7565_SDAT_PORT, ST7565_SDAT_PIN, 1);
-
-  // Configure backlight pin to output and set high (off)
-  gpioSetDir(ST7565_BL_PORT, ST7565_BL_PIN, 1);
-  gpioSetValue(ST7565_BL_PORT, ST7565_BL_PIN, 1);
-
-  // Configure A0 pin to output and set high
-  gpioSetDir(ST7565_A0_PORT, ST7565_A0_PIN, 1);
-  gpioSetValue(ST7565_A0_PORT, ST7565_A0_PIN, 1);
-
-  // Configure Reset pin and set high
-  gpioSetDir(ST7565_RST_PORT, ST7565_RST_PIN, 1);
-  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 1);
-
-  // Configure select pin and set high
-  gpioSetDir(ST7565_CS_PORT, ST7565_CS_PIN, 1);
-  gpioSetValue(ST7565_CS_PORT, ST7565_CS_PIN, 1);
-
-  // Reset
-  gpioSetValue(ST7565_CS_PORT, ST7565_CS_PIN, 0);     // Set CS low
-  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 0);   // Set reset low
-  DELAY(500 / CFG_SYSTICK_DELAY_IN_MS);               // Wait 500mS
-  gpioSetValue(ST7565_RST_PORT, ST7565_RST_PIN, 1);   // Set reset high
-
-  // Configure Display
-  CMD(ST7565_CMD_SET_BIAS_7);                         // LCD Bias Select
-  CMD(ST7565_CMD_SET_ADC_NORMAL);                     // ADC Select
-  CMD(ST7565_CMD_SET_COM_NORMAL);                     // SHL Select
-  CMD(ST7565_CMD_SET_DISP_START_LINE);                // Initial Display Line
-  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x04);           // Turn on voltage converter (VC=1, VR=0, VF=0)
-  DELAY(50 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 50mS
-  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x06);           // Turn on voltage regulator (VC=1, VR=1, VF=0)
-  DELAY(50 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 50mS
-  CMD(ST7565_CMD_SET_POWER_CONTROL | 0x07);           // Turn on voltage follower
-  DELAY(10 / CFG_SYSTICK_DELAY_IN_MS);                // Wait 10mS
-  CMD(ST7565_CMD_SET_RESISTOR_RATIO | 0x6);           // Set LCD operating voltage
-
-  // Turn display on
-  CMD(ST7565_CMD_DISPLAY_ON);
-  CMD(ST7565_CMD_SET_ALLPTS_NORMAL);
-  st7565SetBrightness(0x18);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Enables or disables the backlight
-*/
-/**************************************************************************/
-void st7565Backlight(bool state)
-{
-  gpioSetValue( ST7565_BL_PORT, ST7565_BL_PIN, state ? 0 : 1 );
-}
-
-/**************************************************************************/
-/*! 
-    @brief Sets the display brightness
-*/
-/**************************************************************************/
-void st7565SetBrightness(uint8_t val)
-{
-  CMD(ST7565_CMD_SET_VOLUME_FIRST);
-  CMD(ST7565_CMD_SET_VOLUME_SECOND | (val & 0x3f));
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears the screen
-*/
-/**************************************************************************/
-void st7565ClearScreen(void) 
-{
-  memset(&_st7565buffer, 0x00, 128*64/8);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Renders the contents of the pixel buffer on the LCD
-*/
-/**************************************************************************/
-void st7565Refresh(void)
-{
-  writeBuffer(_st7565buffer);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Draws a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-*/
-/**************************************************************************/
-void st7565DrawPixel(uint8_t x, uint8_t y) 
-{
-  if ((x >= 128) || (y >= 64))
-    return;
-
-  // x is which column
-  _st7565buffer[x+ (y/8)*128] |= (1 << (7-(y%8)));
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears a single pixel in image buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-*/
-/**************************************************************************/
-void st7565ClearPixel(uint8_t x, uint8_t y)
-{
-  if ((x >= 128) || (y >= 64))
-    return;
-
-  // x is which column
-  _st7565buffer[x+ (y/8)*128] &= ~(1 << (7-(y%8)));
-}
-
-/**************************************************************************/
-/*! 
-    @brief Gets the value (1 or 0) of the specified pixel from the buffer
-
-    @param[in]  x
-                The x position (0..127)
-    @param[in]  y
-                The y position (0..63)
-
-    @return     1 if the pixel is enabled, 0 if disabled
-*/
-/**************************************************************************/
-uint8_t st7565GetPixel(uint8_t x, uint8_t y)
-{
-  if ((x >= 128) || (y >= 64)) return 0;
-  return _st7565buffer[x+ (y/8)*128] & (1 << (7-(y%8)));
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a string using the supplied font data.
-
-    @param[in]  x
-                Starting x co-ordinate
-    @param[in]  y
-                Starting y co-ordinate
-    @param[in]  text
-                The string to render
-    @param[in]  font
-                Pointer to the FONT_DEF to use when drawing the string
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/bitmap/st7565/st7565.h"
-    #include "drivers/lcd/smallfonts.h"
-    
-    // Configure the pins and initialise the LCD screen
-    st7565Init();
-
-    // Enable the backlight
-    st7565BLEnable();
-
-    // Render some text on the screen with different fonts
-    st7565DrawString(1, 1, "3X6 SYSTEM", Font_System3x6);   // 3x6 is UPPER CASE only
-    st7565DrawString(1, 10, "5x8 System", Font_System5x8);
-    st7565DrawString(1, 20, "7x8 System", Font_System7x8);
-
-    // Refresh the screen to see the results
-    st7565Refresh();
-
-    @endcode
-*/
-/**************************************************************************/
-void st7565DrawString(uint16_t x, uint16_t y, char* text, struct FONT_DEF font)
-{
-  uint8_t l;
-  for (l = 0; l < strlen(text); l++)
-  {
-    drawChar(x + (l * (font.u8Width + 1)), y, text[l], font);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Shifts the contents of the frame buffer up the specified
-            number of pixels
-
-    @param[in]  height
-                The number of pixels to shift the frame buffer up, leaving
-                a blank space at the bottom of the frame buffer x pixels
-                high
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/bitmap/st7565/st7565.h"
-    #include "drivers/lcd/smallfonts.h"
-    
-    // Configure the pins and initialise the LCD screen
-    st7565Init();
-
-    // Enable the backlight
-    st7565BLEnable();
-
-    // Continually write some text, scrolling upward one line each time
-    while (1)
-    {
-      // Shift the buffer up 8 pixels (adjust for font-height)
-      st7565ShiftFrameBuffer(8);
-      // Render some text on the screen with different fonts
-      st7565DrawString(1, 56, "INSERT TEXT HERE", Font_System3x6);   // 3x6 is UPPER CASE only
-      // Refresh the screen to see the results
-      st7565Refresh();    
-      // Wait a bit before writing the next line
-      systickDelay(1000);
-    }
-
-    @endcode
-*/
-/**************************************************************************/
-void st7565ShiftFrameBuffer( uint8_t height )
-{
-  if (height == 0) return;
-  if (height >= 64)
-  {
-    // Clear the entire frame buffer
-    st7565ClearScreen();
-    return;
-  }
-
-  // This is horribly inefficient, but at least easy to understand
-  // In a production environment, this should be significantly optimised
-
-  uint8_t y, x;
-  for (y = 0; y < 64; y++)
-  {
-    for (x = 0; x < 128; x++)
-    {
-      if (63 - y > height)
-      {
-        // Shift height from further ahead in the buffer
-        st7565GetPixel(x, y + height) ? st7565DrawPixel(x, y) : st7565ClearPixel(x, y);
-      }
-      else
-      {
-        // Clear the entire line
-        st7565ClearPixel(x, y);
-      }
-    }
-  }
-}
-
diff --git a/drivers/lcd/bitmap/st7565/st7565.h b/drivers/lcd/bitmap/st7565/st7565.h
deleted file mode 100644 (file)
index c27a06f..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ST7565.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __ST7565_H__
-#define __ST7565_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/smallfonts.h"
-
-// Pin Definitions
-#define ST7565_A0_PORT                    (2)     // Register Select Pin (A0)
-#define ST7565_A0_PIN                     (1)
-#define ST7565_RST_PORT                   (2)     // Reset
-#define ST7565_RST_PIN                    (2)
-#define ST7565_CS_PORT                    (2)     // Select
-#define ST7565_CS_PIN                     (3)
-#define ST7565_BL_PORT                    (2)     // Backlight
-#define ST7565_BL_PIN                     (4)
-#define ST7565_SCLK_PORT                  (2)     // Serial Clock
-#define ST7565_SCLK_PIN                   (5)
-#define ST7565_SDAT_PORT                  (2)     // Serial Data
-#define ST7565_SDAT_PIN                   (6)
-
-// Commands
-#define ST7565_CMD_DISPLAY_OFF            0xAE
-#define ST7565_CMD_DISPLAY_ON             0xAF
-#define ST7565_CMD_SET_DISP_START_LINE    0x40
-#define ST7565_CMD_SET_PAGE               0xB0
-#define ST7565_CMD_SET_COLUMN_UPPER       0x10
-#define ST7565_CMD_SET_COLUMN_LOWER       0x00
-#define ST7565_CMD_SET_ADC_NORMAL         0xA0
-#define ST7565_CMD_SET_ADC_REVERSE        0xA1
-#define ST7565_CMD_SET_DISP_NORMAL        0xA6
-#define ST7565_CMD_SET_DISP_REVERSE       0xA7
-#define ST7565_CMD_SET_ALLPTS_NORMAL      0xA4
-#define ST7565_CMD_SET_ALLPTS_ON          0xA5
-#define ST7565_CMD_SET_BIAS_9             0xA2 
-#define ST7565_CMD_SET_BIAS_7             0xA3
-#define ST7565_CMD_RMW                    0xE0
-#define ST7565_CMD_RMW_CLEAR              0xEE
-#define ST7565_CMD_INTERNAL_RESET         0xE2
-#define ST7565_CMD_SET_COM_NORMAL         0xC0
-#define ST7565_CMD_SET_COM_REVERSE        0xC8
-#define ST7565_CMD_SET_POWER_CONTROL      0x28
-#define ST7565_CMD_SET_RESISTOR_RATIO     0x20
-#define ST7565_CMD_SET_VOLUME_FIRST       0x81
-#define ST7565_CMD_SET_VOLUME_SECOND      0
-#define ST7565_CMD_SET_STATIC_OFF         0xAC
-#define ST7565_CMD_SET_STATIC_ON          0xAD
-#define ST7565_CMD_SET_STATIC_REG         0x0
-#define ST7565_CMD_SET_BOOSTER_FIRST      0xF8
-#define ST7565_CMD_SET_BOOSTER_234        0
-#define ST7565_CMD_SET_BOOSTER_5          1
-#define ST7565_CMD_SET_BOOSTER_6          3
-#define ST7565_CMD_NOP                    0xE3
-#define ST7565_CMD_TEST                   0xF0
-
-// Initialisation/Config Prototypes
-void st7565Init( void );
-void st7565Command( uint8_t c );
-void st7565Data( uint8_t d );
-void st7565SetBrightness( uint8_t val );
-
-// Backlight Prototypes
-void st7565Backlight(bool state);
-
-// Drawing Prototypes
-void st7565ClearScreen( void );
-void st7565Refresh( void );
-void st7565DrawPixel( uint8_t x, uint8_t y );
-void st7565ClearPixel( uint8_t x, uint8_t y );
-uint8_t st7565GetPixel( uint8_t x, uint8_t y );
-void st7565DrawString( uint16_t x, uint16_t y, char* text, struct FONT_DEF font );
-void st7565ShiftFrameBuffer( uint8_t pixels );
-
-#endif
diff --git a/drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c b/drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.c
deleted file mode 100644 (file)
index 2175916..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     samsung_20T202DA2JA.c
-    @author   Original source : Limor Fried/ladyada (Adafruit Industries)
-              LPC1343 port    : K. Townsend
-
-    @section DESCRIPTION
-
-    Driver for Samsung 20T202DA2JA 20x2 VFD display module.
-
-    This driver is based on the SPI_VFD Library from Limor Fried
-    (Adafruit Industries) at: https://github.com/adafruit/SPI_VFD  
-
-    The displays can be purchased at:
-    https://www.adafruit.com/products/347
-    
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012 Adafruit Industries
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "samsung_20T202DA2JA.h"
-
-#include "core/gpio/gpio.h"
-#include "core/systick/systick.h"
-
-/**************************************************************************/
-/* Private Methods                                                        */
-/**************************************************************************/
-
-uint8_t samsungvfd_displayfunction;
-uint8_t samsungvfd_displaycontrol;
-uint8_t samsungvfd_displaymode;
-uint8_t samsungvfd_initialized;
-uint8_t samsungvfd_numlines, samsungvfd_currline;
-
-/**************************************************************************/
-/*! 
-    @brief Low-level SPI bit-banging routing
-*/
-/**************************************************************************/
-static inline void samsungvfd_sendByte(uint8_t c) {
-  int8_t i;
-
-  // Make sure clock pin starts high
-  gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
-
-  // Write from MSB to LSB
-  for (i=7; i>=0; i--) 
-  {
-    // Set clock pin low
-    gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 0);
-    // Set data pin high or low depending on the value of the current bit
-    gpioSetValue(SAMSUNGVFD_SIO_PORT, SAMSUNGVFD_SIO_PIN, c & (1 << i) ? 1 : 0);
-    // Set clock pin high
-    gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief Sends a command to the VFD display
-*/
-/**************************************************************************/
-void samsungvfd_command(uint8_t value) 
-{
-  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
-  samsungvfd_sendByte(SAMSUNGVFD_SPICOMMAND);
-  samsungvfd_sendByte(value);
-  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Initialises the VFD character display
-*/
-/**************************************************************************/
-void samsungvfd_begin(uint8_t cols, uint8_t lines, uint8_t brightness) 
-{
-  // set number of lines
-  if (lines > 1)
-    samsungvfd_displayfunction = SAMSUNGVFD_2LINE;
-  else
-    samsungvfd_displayfunction = SAMSUNGVFD_1LINE;
-
-  if (brightness>SAMSUNGVFD_BRIGHTNESS25)      //catch bad values
-    brightness = SAMSUNGVFD_BRIGHTNESS100;
-
-  // set the brightness and push the linecount with VFD_SETFUNCTION
-  samsungvfdSetBrightness(brightness);
-  
-  samsungvfd_numlines = lines;
-  samsungvfd_currline = 0;
-  
-  // Initialize to default text direction (for romance languages#include "SPI_VFD.h"
-  samsungvfd_displaymode = SAMSUNGVFD_ENTRYLEFT | SAMSUNGVFD_ENTRYSHIFTDECREMENT;
-  // set the entry mode
-  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
-
-  samsungvfd_command(SAMSUNGVFD_SETDDRAMADDR);  // go to address 0
-
-  // turn the display on with no cursor or blinking default
-  samsungvfd_displaycontrol = SAMSUNGVFD_DISPLAYON; 
-  samsungvfdDisplay();
-
-  samsungvfdClear();
-  samsungvfdHome();
-}
-
-/**************************************************************************/
-/* Public Methods                                                         */
-/**************************************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief Initialises the VFD character display
-*/
-/**************************************************************************/
-void samsungvfdInit(uint8_t brightness)
-{
-  // Set all pins to output
-  gpioSetDir(SAMSUNGVFD_SIO_PORT, SAMSUNGVFD_SIO_PIN, gpioDirection_Output);
-  gpioSetDir(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, gpioDirection_Output);
-  gpioSetDir(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, gpioDirection_Output);
-
-  // Set strobe and clock pins high by default
-  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
-  gpioSetValue(SAMSUNGVFD_SCK_PORT, SAMSUNGVFD_SCK_PIN, 1);
-
-  // Default to 2x20 display (SAMSUNG 20T202DA2JA)
-  samsungvfd_begin(20, 2, brightness);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Writes a single character to the VFD display
-*/
-/**************************************************************************/
-void samsungvfdWrite(uint8_t value) 
-{
-  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
-  samsungvfd_sendByte(SAMSUNGVFD_SPIDATA);
-  samsungvfd_sendByte(value);
-  gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Writes a full string to the VFD display
-*/
-/**************************************************************************/
-void samsungvfdWriteString(const char * str)
-{
-  while(*str)
-  {
-    gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 0);
-    samsungvfd_sendByte(SAMSUNGVFD_SPIDATA);
-    samsungvfd_sendByte(*str++);
-    gpioSetValue(SAMSUNGVFD_STB_PORT, SAMSUNGVFD_STB_PIN, 1);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief Sets the display brightness
-*/
-/**************************************************************************/
-void samsungvfdSetBrightness(uint8_t brightness)
-{
-  // set the brightness (only if a valid value is passed
-  if (brightness <= SAMSUNGVFD_BRIGHTNESS25) 
-  {
-    samsungvfd_displayfunction &= ~SAMSUNGVFD_BRIGHTNESS25;
-    samsungvfd_displayfunction |= brightness;
-
-    samsungvfd_command(SAMSUNGVFD_FUNCTIONSET | samsungvfd_displayfunction);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief Quickly turn the display off
-*/
-/**************************************************************************/
-void samsungvfdNoDisplay(void) 
-{
-  samsungvfd_displaycontrol &= ~SAMSUNGVFD_DISPLAYON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Quickly turn the display on
-*/
-/**************************************************************************/
-void samsungvfdDisplay(void) 
-{
-  samsungvfd_displaycontrol |= SAMSUNGVFD_DISPLAYON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Turns the cursor off
-*/
-/**************************************************************************/
-void samsungvfdNoCursor(void) 
-{
-  samsungvfd_displaycontrol &= ~SAMSUNGVFD_CURSORON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Enables the cursor
-*/
-/**************************************************************************/
-void samsungvfdCursor(void) 
-{
-  samsungvfd_displaycontrol |= SAMSUNGVFD_CURSORON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Disable cursor blinking
-*/
-/**************************************************************************/
-void samsungvfdNoBlink(void) 
-{
-  samsungvfd_displaycontrol &= ~SAMSUNGVFD_BLINKON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Enable cursor blinking
-*/
-/**************************************************************************/
-void samsungvfdBlink(void) 
-{
-  samsungvfd_displaycontrol |= SAMSUNGVFD_BLINKON;
-  samsungvfd_command(SAMSUNGVFD_DISPLAYCONTROL | samsungvfd_displaycontrol);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Scroll the display left without changing the RAM
-*/
-/**************************************************************************/
-void samsungvfdScrollDisplayLeft(void) 
-{
-  samsungvfd_command(SAMSUNGVFD_CURSORSHIFT | SAMSUNGVFD_DISPLAYMOVE | SAMSUNGVFD_MOVELEFT);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Scroll the display right without changing the RAM
-*/
-/**************************************************************************/
-void samsungvfdScrollDisplayRight(void) 
-{
-  samsungvfd_command(SAMSUNGVFD_CURSORSHIFT | SAMSUNGVFD_DISPLAYMOVE | SAMSUNGVFD_MOVERIGHT);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Cause text to flow left to right
-*/
-/**************************************************************************/
-void samsungvfdLeftToRight(void) 
-{
-  samsungvfd_displaymode |= SAMSUNGVFD_ENTRYLEFT;
-  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Cause text to flow from right to left
-*/
-/**************************************************************************/
-void samsungvfdRightToLeft(void) 
-{
-  samsungvfd_displaymode &= ~SAMSUNGVFD_ENTRYLEFT;
-  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Right justify text from the cursor
-*/
-/**************************************************************************/
-void samsungvfdAutoscroll(void) 
-{
-  samsungvfd_displaymode |= SAMSUNGVFD_ENTRYSHIFTINCREMENT;
-  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Left justify text from the cursor
-*/
-/**************************************************************************/
-void samsungvfdNoAutoscroll(void) 
-{
-  samsungvfd_displaymode &= ~SAMSUNGVFD_ENTRYSHIFTINCREMENT;
-  samsungvfd_command(SAMSUNGVFD_ENTRYMODESET | samsungvfd_displaymode);
-}
-
-/**************************************************************************/
-/*! 
-    @brief Clears the display
-*/
-/**************************************************************************/
-void samsungvfdClear(void)
-{
-  samsungvfd_command(SAMSUNGVFD_CLEARDISPLAY);  // clear display, set cursor position to zero
-  systickDelay(2);                              // this command takes a long time!
-}
-
-/**************************************************************************/
-/*! 
-    @brief Places the cursor at 0, 0
-*/
-/**************************************************************************/
-void samsungvfdHome(void)
-{
-  samsungvfd_command(SAMSUNGVFD_RETURNHOME);    // Set cursor position to zero
-  systickDelay(2);                              // this command takes a long time!
-}
-
-/**************************************************************************/
-/*! 
-    @brief Sets the cursor to the specified row and column position
-*/
-/**************************************************************************/
-void samsungvfdSetCursor(uint8_t row, uint8_t col)
-{
-  int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 };
-  if ( row > samsungvfd_numlines ) 
-  {
-    row = samsungvfd_numlines-1;                // we count rows starting w/0
-  }
-  
-  samsungvfd_command(SAMSUNGVFD_SETDDRAMADDR | (col + row_offsets[row]));
-}
-
diff --git a/drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h b/drivers/lcd/character/samsung_20T202DA2JA/samsung_20T202DA2JA.h
deleted file mode 100644 (file)
index d8780a2..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     samsung_20T202DA2JA.h
-    @author   Original source : Limor Fried/ladyada (Adafruit Industries)
-              LPC1343 port    : K. Townsend
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012 Adafruit Industries
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SAMSUNG_20T202DA2JA__
-#define __SAMSUNG_20T202DA2JA__
-
-#include "projectconfig.h"
-
-// Pin Definitions
-#define SAMSUNGVFD_SIO_PORT               (2)    // Data
-#define SAMSUNGVFD_SIO_PIN                (1)
-#define SAMSUNGVFD_STB_PORT               (2)    // Strobe
-#define SAMSUNGVFD_STB_PIN                (2)
-#define SAMSUNGVFD_SCK_PORT               (2)    // Clock
-#define SAMSUNGVFD_SCK_PIN                (3)
-
-// Commands
-#define SAMSUNGVFD_CLEARDISPLAY           0x01
-#define SAMSUNGVFD_RETURNHOME             0x02
-#define SAMSUNGVFD_ENTRYMODESET           0x04
-#define SAMSUNGVFD_DISPLAYCONTROL         0x08
-#define SAMSUNGVFD_CURSORSHIFT            0x10
-#define SAMSUNGVFD_FUNCTIONSET            0x30
-#define SAMSUNGVFD_SETCGRAMADDR           0x40
-#define SAMSUNGVFD_SETDDRAMADDR           0x80
-
-// flags for display entry mode
-#define SAMSUNGVFD_ENTRYRIGHT             0x00
-#define SAMSUNGVFD_ENTRYLEFT              0x02
-#define SAMSUNGVFD_ENTRYSHIFTINCREMENT    0x01
-#define SAMSUNGVFD_ENTRYSHIFTDECREMENT    0x00
-
-// flags for display on/off control
-#define SAMSUNGVFD_DISPLAYON              0x04
-#define SAMSUNGVFD_DISPLAYOFF             0x00
-#define SAMSUNGVFD_CURSORON               0x02
-#define SAMSUNGVFD_CURSOROFF              0x00
-#define SAMSUNGVFD_BLINKON                0x01
-#define SAMSUNGVFD_BLINKOFF               0x00
-
-// flags for display/cursor shift
-#define SAMSUNGVFD_DISPLAYMOVE            0x08
-#define SAMSUNGVFD_CURSORMOVE             0x00
-#define SAMSUNGVFD_MOVERIGHT              0x04
-#define SAMSUNGVFD_MOVELEFT               0x00
-
-// flags for function set
-#define SAMSUNGVFD_2LINE                  0x08
-#define SAMSUNGVFD_1LINE                  0x00
-#define SAMSUNGVFD_BRIGHTNESS25           0x03
-#define SAMSUNGVFD_BRIGHTNESS50           0x02
-#define SAMSUNGVFD_BRIGHTNESS75           0x01
-#define SAMSUNGVFD_BRIGHTNESS100          0x00
-
-#define SAMSUNGVFD_SPICOMMAND             0xF8
-#define SAMSUNGVFD_SPIDATA                0xFA
-
-// Initialisation/Config Prototypes
-void samsungvfdInit ( uint8_t brightness );
-void samsungvfdWrite ( uint8_t value ); 
-void samsungvfdWriteString( const char * str );
-void samsungvfdSetBrightness ( uint8_t brightness );
-void samsungvfdNoDisplay ( void );
-void samsungvfdDisplay ( void );
-void samsungvfdNoCursor ( void ); 
-void samsungvfdCursor ( void ); 
-void samsungvfdNoBlink ( void );
-void samsungvfdBlink ( void );
-void samsungvfdScrollDisplayLeft ( void );
-void samsungvfdScrollDisplayRight ( void );
-void samsungvfdLeftToRight ( void );
-void samsungvfdRightToLeft ( void );
-void samsungvfdAutoscroll ( void );
-void samsungvfdNoAutoscroll ( void );
-void samsungvfdClear ( void );
-void samsungvfdHome ( void );
-void samsungvfdSetCursor ( uint8_t row, uint8_t col );
-
-#endif
diff --git a/drivers/lcd/icons16.h b/drivers/lcd/icons16.h
deleted file mode 100644 (file)
index e37f074..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     icons16.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-
-/*
-    All icons have been converted from the GentleFace Toolbar Icon Set,
-    licensed under the Creative Commons Attribution-NonCommercial License.
-    for more information see: http://www.gentleface.com/free_icon_set.html
-*/
-
-// Each icon used will consume 32 bytes of flash memory
-
-#ifndef __ICONS16_H__
-#define __ICONS16_H__
-
-uint16_t icons16_alert[16]            = { 0x0000, 0x0000, 0x0180, 0x03C0, 0x03C0, 0x0660, 0x0660, 0x0E70, 0x0E70, 0x1E78, 0x3E7C, 0x3FFC, 0x7E7E, 0x7E7E, 0xFFFF, 0x0000 };
-uint16_t icons16_alert_interior[16]   = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0000, 0x0180, 0x0180, 0x0000, 0x0000 };
-uint16_t icons16_info[16]             = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3F3E, 0x7F3F, 0x7FFF, 0x7F3F, 0x7F3F, 0x7F3F, 0x7F3F, 0x7F3F, 0x3F3E, 0x1FFC, 0x0FF8, 0x07F0 };
-uint16_t icons16_info_interior[16]    = { 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C0, 0x0000, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x0000, 0x0000, 0x0000 };
-uint16_t icons16_failed[16]           = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3FFE, 0x79CF, 0x788F, 0x7C1F, 0x7E3F, 0x7C1F, 0x788F, 0x79CF, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0 };
-uint16_t icons16_failed_interior[16]  = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0630, 0x0770, 0x03E0, 0x01C0, 0x03E0, 0x0770, 0x0630, 0x0000, 0x0000, 0x0000, 0x0000 };
-uint16_t icons16_passed[16]           = { 0x0000, 0x07F0, 0x0FF8, 0x1FFC, 0x3FFE, 0x7FEF, 0x7FC7, 0x7F8F, 0x731F, 0x783F, 0x7C7F, 0x7EFF, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0 };
-uint16_t icons16_passed_interior[16]  = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0010, 0x0038, 0x0070, 0x0CE0, 0x07C0, 0x0380, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000 };
-uint16_t icons16_pointer[16]          = { 0x07C0, 0x1FF0, 0x3FF8, 0x3FF8, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x7FFC, 0x3FF8, 0x1FF0, 0x0FE0, 0x07C0, 0x0380, 0x0100 };
-uint16_t icons16_pointer_dot[16]      = { 0x0000, 0x0000, 0x0000, 0x0000, 0x0380, 0x07C0, 0x07C0, 0x07C0, 0x0380, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
-uint16_t icons16_tag[16]              = { 0xFF00, 0xFF80, 0xCFC0, 0xCFE0, 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0x7FFE, 0x3FFE, 0x1FFC, 0x0FF8, 0x07F0, 0x03E0, 0x01C0, 0x0000 };
-uint16_t icons16_tag_dot[16]          = { 0x0000, 0x0000, 0x3000, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
-uint16_t icons16_tools[16]            = { 0x118C, 0x118C, 0x11FC, 0x11FC, 0x10F8, 0x1070, 0x1070, 0x3870, 0x1070, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870, 0x3870 };
-
-#endif
diff --git a/drivers/lcd/smallfonts.c b/drivers/lcd/smallfonts.c
deleted file mode 100644 (file)
index 5a185f8..0000000
+++ /dev/null
@@ -1,556 +0,0 @@
-/* Partially based on original code for the KS0108 by Stephane Rey */
-
-/**************************************************************************/
-/*! 
-    @file     smallfonts.c
-    @author   K. Townsend (microBuilder.eu)
-    @date     22 March 2010
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "sysdefs.h"
-#include "smallfonts.h"
-
-/* Global variables */
-const struct FONT_DEF Font_System3x6    = {3, 6, 32, 96,  au8FontSystem3x6};
-const struct FONT_DEF Font_System5x8    = {5, 8, 32, 128, au8FontSystem5x8};
-const struct FONT_DEF Font_System7x8    = {7, 8, 32, 128, au8FontSystem7x8};
-const struct FONT_DEF Font_8x8          = {8, 8, 32, 128, au8Font8x8};
-const struct FONT_DEF Font_8x8Thin      = {8, 8, 32, 128, au8Font8x8Thin};
-
-/* System 3x6 - UPPER CASE ONLY */
-const uint8_t au8FontSystem3x6[]= {
-    0x00,0x00,0x00, /* Space */         
-    0x00,0x5C,0x00, /* ! */                         
-    0x0C,0x00,0x0C, /* " */                         
-    0x7C,0x28,0x7C, /* # */                         
-    0x7C,0x44,0x7C, /* 0x */                        
-    0x24,0x10,0x48, /* % */                         
-    0x28,0x54,0x08, /* & */                         
-    0x00,0x0C,0x00, /* ' */                         
-    0x38,0x44,0x00, /* ( */                         
-    0x44,0x38,0x00, /* ) */                         
-    0x20,0x10,0x08, /* // */                        
-    0x10,0x38,0x10, /* + */                         
-    0x80,0x40,0x00, /* , */                         
-    0x10,0x10,0x10, /* - */                         
-    0x00,0x40,0x00, /* . */                         
-    0x20,0x10,0x08, /* / */    
-    0x38,0x44,0x38, /* 0 */                     
-    0x00,0x7C,0x00, /* 1 */                         
-    0x64,0x54,0x48, /* 2 */                         
-    0x44,0x54,0x28, /* 3 */                         
-    0x1C,0x10,0x7C, /* 4 */                         
-    0x4C,0x54,0x24, /* 5 */                         
-    0x38,0x54,0x20, /* 6 */                         
-    0x04,0x74,0x0C, /* 7 */                         
-    0x28,0x54,0x28, /* 8 */                         
-    0x08,0x54,0x38, /* 9 */                         
-    0x00,0x50,0x00, /* : */                         
-    0x80,0x50,0x00, /* ; */                         
-    0x10,0x28,0x44, /* < */                         
-    0x28,0x28,0x28, /* = */                  
-    0x44,0x28,0x10, /* > */                        
-    0x04,0x54,0x08, /* ? */                         
-    0x38,0x4C,0x5C, /* @ */                          
-    0x78,0x14,0x78, /* A */                         
-    0x7C,0x54,0x28, /* B */                         
-    0x38,0x44,0x44, /* C */                         
-    0x7C,0x44,0x38, /* D */                         
-    0x7C,0x54,0x44, /* E */                         
-    0x7C,0x14,0x04, /* F */                         
-    0x38,0x44,0x34, /* G */                         
-    0x7C,0x10,0x7C, /* H */                         
-    0x00,0x7C,0x00, /* I */                         
-    0x20,0x40,0x3C, /* J */                         
-    0x7C,0x10,0x6C, /* K */                         
-    0x7C,0x40,0x40, /* L */                         
-    0x7C,0x08,0x7C, /* M */                         
-    0x7C,0x04,0x7C, /* N */                         
-    0x7C,0x44,0x7C, /* O */                         
-    0x7C,0x14,0x08, /* P */                 
-    0x38,0x44,0x78, /* Q */                         
-    0x7C,0x14,0x68, /* R */                         
-    0x48,0x54,0x24, /* S */                         
-    0x04,0x7C,0x04, /* T */                         
-    0x7C,0x40,0x7C, /* U */                         
-    0x3C,0x40,0x3C, /* V */                         
-    0x7C,0x20,0x7C, /* W */                         
-    0x6C,0x10,0x6C, /* X */                         
-    0x1C,0x60,0x1C, /* Y */                         
-    0x64,0x54,0x4C, /* Z */                         
-    0x7C,0x44,0x00, /* [ */                         
-    0x08,0x10,0x20, /* \ */                         
-    0x44,0x7C,0x00, /* ] */                         
-    0x08,0x04,0x08, /* ^ */                         
-    0x80,0x80,0x80, /* _ */                         
-    0x04,0x08,0x00  /* ` */                 
-};
-
-/* System 5x8 */
-const uint8_t au8FontSystem5x8[]= 
-{
-    0x00,0x00,0x00,0x00,0x00, /* Space */
-    0x00,0x00,0x4f,0x00,0x00, /* ! */
-    0x00,0x07,0x00,0x07,0x00, /* " */
-    0x14,0x7f,0x14,0x7f,0x14, /* # */
-    0x24,0x2a,0x7f,0x2a,0x12, /* 0x */
-    0x23,0x13,0x08,0x64,0x62, /* % */
-    0x36,0x49,0x55,0x22,0x20, /* & */
-    0x00,0x05,0x03,0x00,0x00, /* ' */
-    0x00,0x1c,0x22,0x41,0x00, /* ( */
-    0x00,0x41,0x22,0x1c,0x00, /* ) */
-    0x14,0x08,0x3e,0x08,0x14, /* // */
-    0x08,0x08,0x3e,0x08,0x08, /* + */
-    0x50,0x30,0x00,0x00,0x00, /* , */
-    0x08,0x08,0x08,0x08,0x08, /* - */ 
-    0x00,0x60,0x60,0x00,0x00, /* . */
-    0x20,0x10,0x08,0x04,0x02, /* / */
-    0x3e,0x51,0x49,0x45,0x3e, /* 0 */
-    0x00,0x42,0x7f,0x40,0x00, /* 1 */
-    0x42,0x61,0x51,0x49,0x46, /* 2 */
-    0x21,0x41,0x45,0x4b,0x31, /* 3 */
-    0x18,0x14,0x12,0x7f,0x10, /* 4 */
-    0x27,0x45,0x45,0x45,0x39, /* 5 */
-    0x3c,0x4a,0x49,0x49,0x30, /* 6 */
-    0x01,0x71,0x09,0x05,0x03, /* 7 */
-    0x36,0x49,0x49,0x49,0x36, /* 8 */
-    0x06,0x49,0x49,0x29,0x1e, /* 9 */
-    0x00,0x36,0x36,0x00,0x00, /* : */
-    0x00,0x56,0x36,0x00,0x00, /* ; */
-    0x08,0x14,0x22,0x41,0x00, /* < */
-    0x14,0x14,0x14,0x14,0x14, /* = */
-    0x00,0x41,0x22,0x14,0x08, /* > */
-    0x02,0x01,0x51,0x09,0x06, /* ? */
-    0x3e,0x41,0x5d,0x55,0x1e, /* @ */
-    0x7e,0x11,0x11,0x11,0x7e, /* A */
-    0x7f,0x49,0x49,0x49,0x36, /* B */
-    0x3e,0x41,0x41,0x41,0x22, /* C */
-    0x7f,0x41,0x41,0x22,0x1c, /* D */
-    0x7f,0x49,0x49,0x49,0x41, /* E */
-    0x7f,0x09,0x09,0x09,0x01, /* F */
-    0x3e,0x41,0x49,0x49,0x7a, /* G */
-    0x7f,0x08,0x08,0x08,0x7f, /* H */
-    0x00,0x41,0x7f,0x41,0x00, /* I */
-    0x20,0x40,0x41,0x3f,0x01, /* J */
-    0x7f,0x08,0x14,0x22,0x41, /* K */
-    0x7f,0x40,0x40,0x40,0x40, /* L */
-    0x7f,0x02,0x0c,0x02,0x7f, /* M */
-    0x7f,0x04,0x08,0x10,0x7f, /* N */
-    0x3e,0x41,0x41,0x41,0x3e, /* O */
-    0x7f,0x09,0x09,0x09,0x06, /* P */
-    0x3e,0x41,0x51,0x21,0x5e, /* Q */
-    0x7f,0x09,0x19,0x29,0x46, /* R */
-    0x26,0x49,0x49,0x49,0x32, /* S */
-    0x01,0x01,0x7f,0x01,0x01, /* T */
-    0x3f,0x40,0x40,0x40,0x3f, /* U */
-    0x1f,0x20,0x40,0x20,0x1f, /* V */
-    0x3f,0x40,0x38,0x40,0x3f, /* W */
-    0x63,0x14,0x08,0x14,0x63, /* X */
-    0x07,0x08,0x70,0x08,0x07, /* Y */
-    0x61,0x51,0x49,0x45,0x43, /* Z */
-    0x00,0x7f,0x41,0x41,0x00, /* [ */
-    0x02,0x04,0x08,0x10,0x20, /* \ */ 
-    0x00,0x41,0x41,0x7f,0x00, /* ] */
-    0x04,0x02,0x01,0x02,0x04, /* ^ */
-    0x40,0x40,0x40,0x40,0x40, /* _ */
-    0x00,0x00,0x03,0x05,0x00, /* ` */
-    0x20,0x54,0x54,0x54,0x78, /* a */
-    0x7F,0x44,0x44,0x44,0x38, /* b */
-    0x38,0x44,0x44,0x44,0x44, /* c */
-    0x38,0x44,0x44,0x44,0x7f, /* d */
-    0x38,0x54,0x54,0x54,0x18, /* e */
-    0x04,0x04,0x7e,0x05,0x05, /* f */
-    0x08,0x54,0x54,0x54,0x3c, /* g */
-    0x7f,0x08,0x04,0x04,0x78, /* h */
-    0x00,0x44,0x7d,0x40,0x00, /* i */
-    0x20,0x40,0x44,0x3d,0x00, /* j */
-    0x7f,0x10,0x28,0x44,0x00, /* k */
-    0x00,0x41,0x7f,0x40,0x00, /* l */
-    0x7c,0x04,0x7c,0x04,0x78, /* m */
-    0x7c,0x08,0x04,0x04,0x78, /* n */
-    0x38,0x44,0x44,0x44,0x38, /* o */
-    0x7c,0x14,0x14,0x14,0x08, /* p */
-    0x08,0x14,0x14,0x14,0x7c, /* q */
-    0x7c,0x08,0x04,0x04,0x00, /* r */
-    0x48,0x54,0x54,0x54,0x24, /* s */
-    0x04,0x04,0x3f,0x44,0x44, /* t */
-    0x3c,0x40,0x40,0x20,0x7c, /* u */
-    0x1c,0x20,0x40,0x20,0x1c, /* v */
-    0x3c,0x40,0x30,0x40,0x3c, /* w */
-    0x44,0x28,0x10,0x28,0x44, /* x */
-    0x0c,0x50,0x50,0x50,0x3c, /* y */
-    0x44,0x64,0x54,0x4c,0x44, /* z */
-    0x08,0x36,0x41,0x41,0x00, /* { */
-    0x00,0x00,0x77,0x00,0x00, /* | */
-    0x00,0x41,0x41,0x36,0x08, /* } */
-    0x08,0x08,0x2a,0x1c,0x08, /* <- */
-    0x08,0x1c,0x2a,0x08,0x08, /* -> */
-    0xff,0xff,0xff,0xff,0xff, /* \7f */
-};
-
-/* System 7x8 */
-const uint8_t au8FontSystem7x8[]= 
-{
-     0,   0,   0,   0,   0,   0,   0, //' '
-     0,   6,  95,  95,   6,   0,   0, //'!'
-     0,   7,   7,   0,   7,   7,   0, //'"'
-    20, 127, 127,  20, 127, 127,  20, //'#'
-    36,  46, 107, 107,  58,  18,   0, //'$'
-    70, 102,  48,  24,  12, 102,  98, //'%'
-    48, 122,  79,  93,  55, 122,  72, //'&'
-     4,   7,   3,   0,   0,   0,   0, //'''
-     0,  28,  62,  99,  65,   0,   0, //'('
-     0,  65,  99,  62,  28,   0,   0, //')'
-     8,  42,  62,  28,  28,  62,  42, //'*'
-     8,   8,  62,  62,   8,   8,   0, //'+'
-     0, 128, 224,  96,   0,   0,   0, //','
-     8,   8,   8,   8,   8,   8,   0, //'-'
-     0,   0,  96,  96,   0,   0,   0, //'.'
-    96,  48,  24,  12,   6,   3,   1, //'/'
-    62, 127, 113,  89,  77, 127,  62, //'0'
-    64,  66, 127, 127,  64,  64,   0, //'1'
-    98, 115,  89,  73, 111, 102,   0, //'2'
-    34,  99,  73,  73, 127,  54,   0, //'3'
-    24,  28,  22,  83, 127, 127,  80, //'4'
-    39, 103,  69,  69, 125,  57,   0, //'5'
-    60, 126,  75,  73, 121,  48,   0, //'6'
-     3,   3, 113, 121,  15,   7,   0, //'7'
-    54, 127,  73,  73, 127,  54,   0, //'8'
-     6,  79,  73, 105,  63,  30,   0, //'9'
-     0,   0, 102, 102,   0,   0,   0, //':'
-     0, 128, 230, 102,   0,   0,   0, //';'
-     8,  28,  54,  99,  65,   0,   0, //'<'
-    36,  36,  36,  36,  36,  36,   0, //'='
-     0,  65,  99,  54,  28,   8,   0, //'>'
-     2,   3,  81,  89,  15,   6,   0, //'?'
-    62, 127,  65,  93,  93,  31,  30, //'@'
-    124,126,  19,  19, 126, 124,   0, //'A'
-    65, 127, 127,  73,  73, 127,  54, //'B'
-    28,  62,  99,  65,  65,  99,  34, //'C'
-    65, 127, 127,  65,  99,  62,  28, //'D'
-    65, 127, 127,  73,  93,  65,  99, //'E'
-    65, 127, 127,  73,  29,   1,   3, //'F'
-    28,  62,  99,  65,  81, 115, 114, //'G'
-    127,127,   8,   8, 127, 127,   0, //'H'
-     0,  65, 127, 127,  65,   0,   0, //'I'
-    48, 112,  64,  65, 127,  63,   1, //'J'
-    65, 127, 127,   8,  28, 119,  99, //'K'
-    65, 127, 127,  65,  64,  96, 112, //'L'
-    127,127,  14,  28,  14, 127, 127, //'M'
-    127,127,   6,  12,  24, 127, 127, //'N'
-    28,  62,  99,  65,  99,  62,  28, //'O'
-    65, 127, 127,  73,   9,  15,   6, //'P'
-    30,  63,  33, 113, 127,  94,   0, //'Q'
-    65, 127, 127,   9,  25, 127, 102, //'R'
-    38, 111,  77,  89, 115,  50,   0, //'S'
-     3,  65, 127, 127,  65,   3,   0, //'T'
-    127,127,  64,  64, 127, 127,   0, //'U'
-    31,  63,  96,  96,  63,  31,   0, //'V'
-    127,127,  48,  24,  48, 127, 127, //'W'
-    67, 103,  60,  24,  60, 103,  67, //'X'
-     7,  79, 120, 120,  79,   7,   0, //'Y'
-    71,  99, 113,  89,  77, 103, 115, //'Z'
-     0, 127, 127,  65,  65,   0,   0, //'['
-     1,   3,   6,  12,  24,  48,  96, //'\'
-     0,  65,  65, 127, 127,   0,   0, //']'
-     8,  12,   6,   3,   6,  12,   8, //'^'
-    128,128, 128, 128, 128, 128, 128, //'_'
-     0,   0,   3,   7,   4,   0,   0, //'`'
-    32, 116,  84,  84,  60, 120,  64, //'a'
-    65, 127,  63,  72,  72, 120,  48, //'b'
-    56, 124,  68,  68, 108,  40,   0, //'c'
-    48, 120,  72,  73,  63, 127,  64, //'d'
-    56, 124,  84,  84,  92,  24,   0, //'e'
-    72, 126, 127,  73,   3,   2,   0, //'f'
-    56, 188, 164, 164, 252, 120,   0, //'g'
-    65, 127, 127,   8,   4, 124, 120, //'h'
-     0,  68, 125, 125,  64,   0,   0, //'i'
-    96, 224, 128, 128, 253, 125,   0, //'j'
-    65, 127, 127,  16,  56, 108,  68, //'k'
-     0,  65, 127, 127,  64,   0,   0, //'l'
-    120,124,  28,  56,  28, 124, 120, //'m'
-    124,124,   4,   4, 124, 120,   0, //'n'
-    56, 124,  68,  68, 124,  56,   0, //'o'
-    0,  252, 252, 164,  36,  60,  24, //'p'
-    24,  60,  36, 164, 248, 252, 132, //'q'
-    68, 124, 120,  76,   4,  28,  24, //'r'
-    72,  92,  84,  84, 116,  36,   0, //'s'
-     0,   4,  62, 127,  68,  36,   0, //'t'
-    60, 124,  64,  64,  60, 124,  64, //'u'
-    28,  60,  96,  96,  60,  28,   0, //'v'
-    60, 124, 112,  56, 112, 124,  60, //'w'
-    68, 108,  56,  16,  56, 108,  68, //'x'
-    60, 188, 160, 160, 252, 124,   0, //'y'
-    76, 100, 116,  92,  76, 100,   0, //'z'
-     8,   8,  62, 119,  65,  65,   0, //'{'
-     0,   0,   0, 119, 119,   0,   0, //'|'
-    65,  65, 119,  62,   8,   8,   0, //'}'
-     2,   3,   1,   3,   2,   3,   1, //'~'
-    255,129, 129, 129, 129, 129, 255, //'\7f'
-    14, 159, 145, 177, 251,  74,   0 //'Á'
-};
-  
-/* 8x8 Normal */
-const uint8_t au8Font8x8[]= {
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,       // ASCII -  32
-    0x00,0x00,0x00,0x5F,0x5F,0x00,0x00,0x00,       // ASCII -  33
-    0x00,0x00,0x03,0x07,0x00,0x07,0x03,0x00,       // ASCII -  34
-    0x00,0x10,0x74,0x1C,0x77,0x1C,0x17,0x04,       // ASCII -  35
-    0x00,0x24,0x2E,0x2A,0x7F,0x2A,0x3A,0x10,       // ASCII -  36
-    0x00,0x4C,0x6A,0x76,0x1A,0x6A,0x56,0x33,       // ASCII -  37
-    0x00,0x30,0x7A,0x4F,0x5D,0x37,0x7A,0x48,       // ASCII -  38
-    0x00,0x00,0x04,0x07,0x03,0x00,0x00,0x00,       // ASCII -  39
-    0x00,0x00,0x00,0x1C,0x3E,0x63,0x41,0x00,       // ASCII -  40
-    0x00,0x00,0x41,0x63,0x3E,0x1C,0x00,0x00,       // ASCII -  41
-    0x00,0x08,0x2A,0x3E,0x1C,0x3E,0x2A,0x08,       // ASCII -  42
-    0x00,0x08,0x08,0x3E,0x3E,0x08,0x08,0x00,       // ASCII -  43
-    0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,       // ASCII -  44
-    0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,       // ASCII -  45
-    0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x00,       // ASCII -  46
-    0x00,0x60,0x30,0x18,0x0C,0x06,0x03,0x01,       // ASCII -  47
-    0x00,0x1C,0x3E,0x61,0x43,0x3E,0x1C,0x00,       // ASCII -  48
-    0x00,0x00,0x44,0x7F,0x7F,0x40,0x00,0x00,       // ASCII -  49
-    0x00,0x46,0x67,0x71,0x59,0x4F,0x66,0x00,       // ASCII -  50
-    0x00,0x22,0x63,0x49,0x4D,0x7F,0x32,0x00,       // ASCII -  51
-    0x00,0x18,0x1C,0x52,0x7F,0x7F,0x50,0x00,       // ASCII -  52
-    0x00,0x2F,0x6F,0x45,0x45,0x7D,0x39,0x00,       // ASCII -  53
-    0x00,0x3C,0x7E,0x4B,0x49,0x79,0x30,0x00,       // ASCII -  54
-    0x00,0x07,0x43,0x71,0x7D,0x0F,0x03,0x00,       // ASCII -  55
-    0x00,0x36,0x7F,0x4D,0x59,0x7F,0x36,0x00,       // ASCII -  56
-    0x00,0x06,0x4F,0x49,0x69,0x3F,0x1E,0x00,       // ASCII -  57
-    0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,       // ASCII -  58
-    0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00,       // ASCII -  59
-    0x00,0x00,0x08,0x1C,0x36,0x63,0x41,0x00,       // ASCII -  60
-    0x00,0x14,0x14,0x14,0x14,0x14,0x14,0x00,       // ASCII -  61
-    0x00,0x00,0x41,0x63,0x36,0x1C,0x08,0x00,       // ASCII -  62
-    0x00,0x02,0x07,0x51,0x59,0x0F,0x06,0x00,       // ASCII -  63
-    0x00,0x3E,0x41,0x5D,0x55,0x5D,0x51,0x1E,       // ASCII -  64
-    0x00,0x40,0x70,0x1D,0x17,0x1F,0x78,0x60,       // ASCII -  65
-    0x00,0x41,0x7F,0x7F,0x49,0x4F,0x7E,0x30,       // ASCII -  66
-    0x00,0x1C,0x3E,0x63,0x41,0x41,0x42,0x27,       // ASCII -  67
-    0x00,0x41,0x7F,0x7F,0x41,0x63,0x3E,0x1C,       // ASCII -  68
-    0x00,0x41,0x7F,0x7F,0x49,0x5D,0x41,0x63,       // ASCII -  69
-    0x00,0x41,0x7F,0x7F,0x49,0x1D,0x01,0x03,       // ASCII -  70
-    0x00,0x1C,0x3E,0x63,0x41,0x51,0x72,0x77,       // ASCII -  71
-    0x00,0x7F,0x7F,0x08,0x08,0x7F,0x7F,0x00,       // ASCII -  72
-    0x00,0x00,0x41,0x7F,0x7F,0x41,0x00,0x00,       // ASCII -  73
-    0x00,0x30,0x70,0x41,0x41,0x7F,0x3F,0x01,       // ASCII -  74
-    0x00,0x7F,0x7F,0x08,0x1C,0x77,0x63,0x41,       // ASCII -  75
-    0x00,0x41,0x7F,0x7F,0x41,0x40,0x60,0x70,       // ASCII -  76
-    0x00,0x7F,0x7E,0x0C,0x18,0x0C,0x7E,0x7F,       // ASCII -  77
-    0x00,0x7F,0x7E,0x0C,0x18,0x30,0x7F,0x7F,       // ASCII -  78
-    0x00,0x1C,0x3E,0x63,0x41,0x63,0x3E,0x1C,       // ASCII -  79
-    0x00,0x41,0x7F,0x7F,0x49,0x09,0x0F,0x06,       // ASCII -  80
-    0x00,0x1C,0x3E,0x63,0x51,0x63,0x3E,0x1C,       // ASCII -  81
-    0x00,0x7F,0x7F,0x09,0x19,0x7F,0x66,0x40,       // ASCII -  82
-    0x00,0x66,0x6F,0x4D,0x59,0x7B,0x33,0x00,       // ASCII -  83
-    0x00,0x03,0x41,0x7F,0x7F,0x41,0x03,0x00,       // ASCII -  84
-    0x00,0x3F,0x7F,0x40,0x40,0x40,0x7F,0x3F,       // ASCII -  85
-    0x00,0x03,0x0F,0x3D,0x70,0x1D,0x07,0x01,       // ASCII -  86
-    0x00,0x0F,0x7F,0x30,0x1C,0x30,0x7F,0x0F,       // ASCII -  87
-    0x00,0x63,0x77,0x1C,0x1C,0x77,0x63,0x00,       // ASCII -  88
-    0x01,0x03,0x47,0x7C,0x78,0x47,0x03,0x01,       // ASCII -  89
-    0x00,0x67,0x73,0x59,0x4D,0x67,0x73,0x00,       // ASCII -  90
-    0x00,0x00,0x00,0x7F,0x7F,0x41,0x41,0x00,       // ASCII -  91
-    0x00,0x01,0x03,0x06,0x0C,0x18,0x30,0x60,       // ASCII -  92
-    0x00,0x00,0x41,0x41,0x7F,0x7F,0x00,0x00,       // ASCII -  93
-    0x00,0x00,0x04,0x06,0x03,0x06,0x04,0x00,       // ASCII -  94
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,       // ASCII -  95
-    0x00,0x00,0x01,0x03,0x06,0x04,0x00,0x00,       // ASCII -  96
-    0x00,0x68,0x6C,0x54,0x54,0x3C,0x78,0x40,       // ASCII -  97
-    0x00,0x41,0x7F,0x3F,0x6C,0x44,0x7C,0x38,       // ASCII -  98
-    0x00,0x38,0x7C,0x44,0x44,0x6C,0x2C,0x00,       // ASCII -  99
-    0x00,0x38,0x7C,0x44,0x49,0x3F,0x7F,0x40,       // ASCII - 100
-    0x00,0x38,0x7C,0x54,0x54,0x5C,0x58,0x00,       // ASCII - 101
-    0x00,0x00,0x48,0x7E,0x7F,0x49,0x0B,0x02,       // ASCII - 102
-    0x00,0x48,0x7C,0x34,0x34,0x2C,0x68,0x44,       // ASCII - 103
-    0x00,0x41,0x7F,0x7F,0x08,0x04,0x7C,0x78,       // ASCII - 104
-    0x00,0x00,0x44,0x7D,0x7D,0x40,0x00,0x00,       // ASCII - 105
-    0x00,0x60,0x60,0x04,0x7D,0x7D,0x00,0x00,       // ASCII - 106
-    0x00,0x41,0x7F,0x7F,0x10,0x78,0x6C,0x44,       // ASCII - 107
-    0x00,0x00,0x41,0x7F,0x7F,0x40,0x00,0x00,       // ASCII - 108
-    0x00,0x7C,0x7C,0x0C,0x78,0x0C,0x7C,0x78,       // ASCII - 109
-    0x00,0x44,0x7C,0x7C,0x08,0x04,0x7C,0x78,       // ASCII - 110
-    0x00,0x38,0x7C,0x44,0x44,0x7C,0x38,0x00,       // ASCII - 111
-    0x00,0x04,0x7C,0x78,0x24,0x24,0x3C,0x18,       // ASCII - 112
-    0x00,0x18,0x3C,0x24,0x24,0x78,0x7C,0x00,       // ASCII - 113
-    0x00,0x44,0x7C,0x78,0x4C,0x04,0x1C,0x18,       // ASCII - 114
-    0x00,0x48,0x5C,0x5C,0x74,0x74,0x24,0x00,       // ASCII - 115
-    0x00,0x00,0x04,0x3E,0x7F,0x44,0x24,0x00,       // ASCII - 116
-    0x00,0x3C,0x7C,0x40,0x40,0x3C,0x7C,0x40,       // ASCII - 117
-    0x00,0x04,0x1C,0x3C,0x60,0x30,0x1C,0x04,       // ASCII - 118
-    0x00,0x1C,0x7C,0x30,0x1C,0x30,0x7C,0x1C,       // ASCII - 119
-    0x00,0x44,0x6C,0x3C,0x10,0x78,0x6C,0x44,       // ASCII - 120
-    0x00,0x44,0x4C,0x1C,0x70,0x64,0x1C,0x0C,       // ASCII - 121
-    0x00,0x4C,0x64,0x74,0x5C,0x4C,0x64,0x00,       // ASCII - 122
-    0x00,0x08,0x08,0x3E,0x77,0x41,0x41,0x00,       // ASCII - 123
-    0x00,0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,       // ASCII - 124
-    0x00,0x41,0x41,0x77,0x3E,0x08,0x08,0x00,       // ASCII - 125
-    0x00,0x02,0x01,0x01,0x03,0x02,0x02,0x01,       // ASCII - 126
-    0x00,0x60,0x78,0x4E,0x47,0x5E,0x78,0x60,       // ASCII - 127
-    0x00,0x1C,0x3E,0x23,0x41,0x41,0x42,0x27,       // ASCII - 128
-    0x00,0x3D,0x7D,0x40,0x41,0x3D,0x7C,0x40,       // ASCII - 129
-};
-
-/* 8x8 Thin */
-const uint8_t au8Font8x8Thin[]= {
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-    0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,
-    0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,
-    0x00,0x14,0x7F,0x14,0x14,0x7F,0x14,0x00,
-    0x00,0x24,0x2A,0x6B,0x6B,0x2A,0x12,0x00,
-    0x00,0x46,0x26,0x10,0x08,0x64,0x62,0x00,
-    0x30,0x4A,0x45,0x4D,0x32,0x48,0x48,0x00,
-    0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x00,
-    0x00,0x1C,0x22,0x41,0x00,0x00,0x00,0x00,
-    0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00,
-    0x08,0x2A,0x1C,0x1C,0x1C,0x2A,0x08,0x00,
-    0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,
-    0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
-    0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
-    0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,
-    0x00,0x40,0x20,0x10,0x08,0x04,0x02,0x00,
-    0x00,0x3E,0x61,0x51,0x49,0x45,0x3E,0x00,
-    0x00,0x44,0x42,0x7F,0x40,0x40,0x00,0x00,
-    0x00,0x62,0x51,0x51,0x49,0x49,0x66,0x00,
-    0x00,0x22,0x41,0x49,0x49,0x49,0x36,0x00,
-    0x10,0x18,0x14,0x52,0x7F,0x50,0x10,0x00,
-    0x00,0x27,0x45,0x45,0x45,0x45,0x39,0x00,
-    0x00,0x3C,0x4A,0x49,0x49,0x49,0x30,0x00,
-    0x00,0x03,0x01,0x71,0x09,0x05,0x03,0x00,
-    0x00,0x36,0x49,0x49,0x49,0x49,0x36,0x00,
-    0x00,0x06,0x49,0x49,0x49,0x29,0x1E,0x00,
-    0x00,0x00,0x00,0x66,0x00,0x00,0x00,0x00,
-    0x00,0x00,0x80,0x66,0x00,0x00,0x00,0x00,
-    0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,
-    0x00,0x24,0x24,0x24,0x24,0x24,0x24,0x00,
-    0x00,0x00,0x00,0x41,0x22,0x14,0x08,0x00,
-    0x00,0x02,0x01,0x01,0x51,0x09,0x06,0x00,
-    0x00,0x3E,0x41,0x5D,0x55,0x55,0x1E,0x00,
-    0x00,0x7C,0x12,0x11,0x11,0x12,0x7C,0x00,
-    0x00,0x41,0x7F,0x49,0x49,0x49,0x36,0x00,
-    0x00,0x1C,0x22,0x41,0x41,0x41,0x22,0x00,
-    0x00,0x41,0x7F,0x41,0x41,0x22,0x1C,0x00,
-    0x00,0x41,0x7F,0x49,0x5D,0x41,0x63,0x00,
-    0x00,0x41,0x7F,0x49,0x1D,0x01,0x03,0x00,
-    0x00,0x1C,0x22,0x41,0x51,0x51,0x72,0x00,
-    0x00,0x7F,0x08,0x08,0x08,0x08,0x7F,0x00,
-    0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00,
-    0x00,0x30,0x40,0x40,0x41,0x3F,0x01,0x00,
-    0x00,0x41,0x7F,0x08,0x14,0x22,0x41,0x40,
-    0x00,0x41,0x7F,0x41,0x40,0x40,0x60,0x00,
-    0x00,0x7F,0x01,0x02,0x04,0x02,0x01,0x7F,
-    0x00,0x7F,0x01,0x02,0x04,0x08,0x7F,0x00,
-    0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,0x00,
-    0x00,0x41,0x7F,0x49,0x09,0x09,0x06,0x00,
-    0x00,0x1E,0x21,0x21,0x31,0x21,0x5E,0x40,
-    0x00,0x41,0x7F,0x49,0x19,0x29,0x46,0x00,
-    0x00,0x26,0x49,0x49,0x49,0x49,0x32,0x00,
-    0x00,0x03,0x01,0x41,0x7F,0x41,0x01,0x03,
-    0x00,0x3F,0x40,0x40,0x40,0x40,0x3F,0x00,
-    0x00,0x0F,0x10,0x20,0x40,0x20,0x10,0x0F,
-    0x00,0x3F,0x40,0x40,0x38,0x40,0x40,0x3F,
-    0x00,0x41,0x22,0x14,0x08,0x14,0x22,0x41,
-    0x00,0x01,0x02,0x44,0x78,0x44,0x02,0x01,
-    0x00,0x43,0x61,0x51,0x49,0x45,0x43,0x61,
-    0x00,0x7F,0x41,0x41,0x41,0x00,0x00,0x00,
-    0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x00,
-    0x00,0x41,0x41,0x41,0x7F,0x00,0x00,0x00,
-    0x08,0x04,0x02,0x01,0x02,0x04,0x08,0x00,
-    0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
-    0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,
-    0x00,0x20,0x54,0x54,0x54,0x54,0x78,0x40,
-    0x00,0x01,0x7F,0x30,0x48,0x48,0x48,0x30,
-    0x00,0x38,0x44,0x44,0x44,0x44,0x28,0x00,
-    0x00,0x30,0x48,0x48,0x48,0x31,0x7F,0x40,
-    0x00,0x38,0x54,0x54,0x54,0x54,0x18,0x00,
-    0x00,0x00,0x48,0x7E,0x49,0x01,0x02,0x00,
-    0x00,0x98,0xA4,0xA4,0xA4,0xA4,0x78,0x04,
-    0x00,0x41,0x7F,0x08,0x04,0x04,0x78,0x00,
-    0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00,
-    0x00,0x60,0x80,0x80,0x80,0x84,0x7D,0x00,
-    0x00,0x01,0x7F,0x10,0x28,0x44,0x40,0x00,
-    0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00,
-    0x00,0x7C,0x04,0x04,0x78,0x04,0x04,0x78,
-    0x00,0x7C,0x08,0x04,0x04,0x04,0x78,0x00,
-    0x00,0x38,0x44,0x44,0x44,0x44,0x38,0x00,
-    0x00,0x84,0xFC,0x98,0x24,0x24,0x18,0x00,
-    0x00,0x18,0x24,0x24,0x98,0xFC,0x84,0x00,
-    0x00,0x44,0x7C,0x48,0x04,0x04,0x18,0x00,
-    0x00,0x48,0x54,0x54,0x54,0x54,0x24,0x00,
-    0x00,0x04,0x04,0x3F,0x44,0x44,0x20,0x00,
-    0x00,0x3C,0x40,0x40,0x40,0x20,0x7C,0x00,
-    0x00,0x0C,0x10,0x20,0x40,0x20,0x10,0x0C,
-    0x00,0x3C,0x40,0x40,0x38,0x40,0x40,0x3C,
-    0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,
-    0x00,0x9C,0xA0,0xA0,0xA0,0xA0,0x7C,0x00,
-    0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00,
-    0x00,0x08,0x08,0x36,0x41,0x41,0x00,0x00,
-    0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,
-    0x00,0x00,0x41,0x41,0x36,0x08,0x08,0x00,
-    0x00,0x02,0x01,0x01,0x02,0x02,0x01,0x00,
-    0x00,0x70,0x48,0x44,0x42,0x44,0x48,0x70,
-    0x00,0x0E,0x91,0x91,0xB1,0xB1,0x4A,0x00,
-    0x00,0x3A,0x40,0x40,0x40,0x7A,0x40,0x00,
-    0x00,0x38,0x54,0x54,0x55,0x55,0x18,0x00,
-    0x00,0x22,0x55,0x55,0x55,0x79,0x42,0x00,
-    0x00,0x21,0x54,0x54,0x54,0x78,0x41,0x00,
-    0x00,0x20,0x55,0x55,0x54,0x78,0x40,0x00,
-    0x00,0x20,0x54,0x55,0x54,0x78,0x40,0x00,
-    0x00,0x18,0x24,0xA4,0xA4,0xE4,0x40,0x00,
-    0x00,0x3A,0x55,0x55,0x55,0x55,0x1A,0x00,
-    0x00,0x39,0x54,0x54,0x54,0x54,0x19,0x00,
-    0x00,0x38,0x55,0x55,0x54,0x54,0x18,0x00,
-    0x00,0x00,0x01,0x44,0x7C,0x41,0x00,0x00,
-    0x02,0x01,0x45,0x7D,0x41,0x01,0x02,0x00,
-    0x00,0x00,0x01,0x45,0x7C,0x40,0x00,0x00,
-    0x00,0x79,0x14,0x12,0x12,0x14,0x79,0x00,
-    0x00,0x70,0x28,0x2B,0x2B,0x28,0x70,0x00,
-    0x00,0x44,0x7C,0x54,0x55,0x45,0x00,0x00,
-    0x00,0x20,0x54,0x54,0x58,0x38,0x54,0x54,
-    0x00,0x7C,0x0A,0x09,0x09,0x7F,0x49,0x49,
-    0x00,0x30,0x4A,0x49,0x49,0x4A,0x30,0x00,
-    0x00,0x32,0x48,0x48,0x48,0x48,0x32,0x00,
-    0x00,0x30,0x49,0x4A,0x48,0x48,0x30,0x00,
-    0x00,0x38,0x42,0x41,0x41,0x42,0x38,0x00,
-    0x00,0x38,0x41,0x42,0x40,0x40,0x38,0x00,
-    0x00,0x1A,0xA0,0xA0,0xA0,0xA0,0x7A,0x00,
-    0x00,0x19,0x24,0x42,0x42,0x24,0x19,0x00,
-    0x00,0x3D,0x40,0x40,0x40,0x40,0x3D,0x00,
-    0x00,0x18,0x24,0x24,0xE7,0x24,0x24,0x00,
-    0x00,0x68,0x5E,0x49,0x41,0x42,0x20,0x00,
-    0x00,0x15,0x16,0x7C,0x16,0x15,0x00,0x00,
-    0x81,0xFF,0x85,0x05,0x17,0xFA,0x90,0x50,
-    0x40,0x88,0x88,0x7F,0x09,0x09,0x02,0x00,
-    0x00,0x20,0x54,0x54,0x55,0x79,0x40,0x00,
-};
diff --git a/drivers/lcd/smallfonts.h b/drivers/lcd/smallfonts.h
deleted file mode 100644 (file)
index e0c2a9f..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     smallfonts.h
-    @author   K. Townsend (microBuilder.eu)
-    @date     22 March 2010
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SMALLFONTS_H_
-#define __SMALLFONTS_H_
-
-/* Partially based on original code for the KS0108 by Stephane Rey */
-/* Current version by Kevin Townsend */
-/* Last Updated: 12 May 2009 */
-
-#include "projectconfig.h"
-
-struct FONT_DEF 
-{
-    uint8_t u8Width;           /* Character width for storage         */
-    uint8_t u8Height;          /* Character height for storage        */
-    uint8_t u8FirstChar;     /* The first character available       */
-    uint8_t u8LastChar;      /* The last character available        */
-    const uint8_t *au8FontTable;   /* Font table start address in memory  */
-};
-
-extern const struct FONT_DEF Font_System3x6;
-extern const struct FONT_DEF Font_System5x8;
-extern const struct FONT_DEF Font_System7x8;
-extern const struct FONT_DEF Font_8x8;
-extern const struct FONT_DEF Font_8x8Thin;
-
-extern const uint8_t au8FontSystem3x6[];
-extern const uint8_t au8FontSystem5x8[];
-extern const uint8_t au8FontSystem7x8[];
-extern const uint8_t au8Font8x8[];
-extern const uint8_t au8Font8x8Thin[];
-
-#endif
diff --git a/drivers/lcd/tft/bmp.c b/drivers/lcd/tft/bmp.c
deleted file mode 100644 (file)
index 60d1ebf..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     bmp.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @brief    Loads uncomprssed 24-bit windows bitmaps images
-
-    Based on the information available at:
-    http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/
-    and some sample code written by Michael Sweet
-       
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "bmp.h"
-
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/lcd.h"
-
-// Only include read support if CFG_SDCARD is defined
-#ifdef CFG_SDCARD
-  #include "drivers/fatfs/diskio.h"
-  #include "drivers/fatfs/ff.h"
-  static FATFS Fatfs[1];
-  #if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
-       static FILINFO Finfo;
-       static FIL bmpSDFile;
-  #endif
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Private Methods ------------------------------ */
-/*                                                                        */
-/**************************************************************************/
-bmp_error_t bmpParseBitmap(uint16_t x, uint16_t y, FIL file)
-{
-  UINT              bytesRead;
-  bmp_header_t      header;
-  bmp_infoheader_t  infoHeader;
-
-  // Read the file header
-  // ToDo: Optimise this to read buffer once and parse it
-  f_read(&file, &header.type, sizeof(header.type), &bytesRead);
-  f_read(&file, &header.size, sizeof(header.size), &bytesRead);
-  f_read(&file, &header.reserved1, sizeof(header.reserved1), &bytesRead);
-  f_read(&file, &header.reserved2, sizeof(header.reserved2), &bytesRead);
-  f_read(&file, &header.offset, sizeof(header.offset), &bytesRead);
-
-  // Make sure this is a bitmap (first two bytes = 'BM' or 0x4D42 on little-endian systems)
-  if (header.type != 0x4D42) return BMP_ERROR_NOTABITMAP;
-
-  // Read the info header
-  // ToDo: Optimise this to read buffer once and parse it
-  f_read(&file, &infoHeader.size, sizeof(infoHeader.size), &bytesRead);
-  f_read(&file, &infoHeader.width, sizeof(infoHeader.width), &bytesRead);
-  f_read(&file, &infoHeader.height, sizeof(infoHeader.height), &bytesRead);
-  f_read(&file, &infoHeader.planes, sizeof(infoHeader.planes), &bytesRead);
-  f_read(&file, &infoHeader.bits, sizeof(infoHeader.bits), &bytesRead);
-  f_read(&file, &infoHeader.compression, sizeof(infoHeader.compression), &bytesRead);
-  f_read(&file, &infoHeader.imagesize, sizeof(infoHeader.imagesize), &bytesRead);
-  f_read(&file, &infoHeader.xresolution, sizeof(infoHeader.xresolution), &bytesRead);
-  f_read(&file, &infoHeader.yresolution, sizeof(infoHeader.yresolution), &bytesRead);
-  f_read(&file, &infoHeader.ncolours, sizeof(infoHeader.ncolours), &bytesRead);
-  f_read(&file, &infoHeader.importantcolours, sizeof(infoHeader.importantcolours), &bytesRead);
-
-  // Make sure that this is a 24-bit image
-  if (infoHeader.bits != 24) 
-    return BMP_ERROR_INVALIDBITDEPTH;
-
-  // Check image dimensions
-  if ((infoHeader.width > lcdGetWidth()) | (infoHeader.height > lcdGetHeight()))
-    return BMP_ERROR_INVALIDDIMENSIONS;
-
-  // Make sure image is not compressed
-  if (infoHeader.compression != BMP_COMPRESSION_NONE) 
-    return BMP_ERROR_COMPRESSEDDATA;
-
-  // Read 24-bit image data
-  uint32_t px, py;
-  FRESULT res;
-  uint8_t buffer[infoHeader.width * 3];
-  for (py = infoHeader.height; py > 0; py--)
-  {
-    // Read one row at a time
-    res = f_read(&file, &buffer, infoHeader.width * 3, &bytesRead);
-    if (res || bytesRead == 0)
-    {
-      // Error or EOF
-      return BMP_ERROR_PREMATUREEOF;
-    }
-    for (px = 0; px < infoHeader.width; px++)
-    {
-      // Render pixel
-      // ToDo: This is a brutally slow way of rendering bitmaps ...
-      //        update to pass one row of data at a time
-      drawPixel(x + px, y + py - 1, drawRGB24toRGB565(buffer[(px * 3) + 2], buffer[(px * 3) + 1], buffer[(px * 3)]));
-    }
-  }
-
-  return BMP_ERROR_NONE;
-}
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Public Methods ------------------------------- */
-/*                                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Loads a 24-bit Windows bitmap image from an SD card and
-            renders it
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/bmp.h"
-
-    bmp_error_t error;
-
-    // Draw image.bmp (from the root folder) starting at pixel 0,0
-    error = bmpDrawBitmap(0, 0, "/image.bmp");
-
-    // Check 'error' for problems such as BMP_ERROR_FILENOTFOUND
-
-    @endcode
-*/
-/**************************************************************************/
-bmp_error_t bmpDrawBitmap(uint16_t x, uint16_t y, const char* filename)
-{
-  bmp_error_t error = BMP_ERROR_NONE;
-  DSTATUS stat;
-  BYTE res;
-
-  stat = disk_initialize(0);
-
-  if ((stat & STA_NOINIT) || (stat & STA_NODISK))
-  {
-    // Card not initialised or no disk present
-    return BMP_ERROR_SDINITFAIL;
-  }
-
-  if (stat == 0)
-  {
-    // Try to mount drive
-    res = f_mount(0, &Fatfs[0]);
-    if (res != FR_OK) 
-    {
-      // Failed to mount 0:
-      return BMP_ERROR_SDINITFAIL;
-    }
-    if (res == FR_OK)
-    {
-      // Try to open the requested file
-      FIL imgfile;  
-      if(f_open(&imgfile, filename, FA_READ | FA_OPEN_EXISTING) != FR_OK) 
-      {  
-        // Unable to open the requested file
-        return BMP_ERROR_FILENOTFOUND;
-      }
-      // Try to render the specified image
-      error = bmpParseBitmap(x, y, imgfile);
-      // Close file
-      f_close(&imgfile);
-      // Unmount drive
-      f_mount(0,0);
-       // Return results
-      return error;
-    }
-  }
-
-  // Return OK signal
-  return BMP_ERROR_NONE;
-}
-
-#if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
-/**************************************************************************/
-/*!
-    @brief  Writes the contents of the LCD screen to a 24-bit bitmap
-            images.  CFG_SDCARD_READONLY must be set to '0' to be able
-            to use this function.
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/bmp.h"
-
-    bmp_error_t error;
-
-    // Note: The LED stays on while the image is being written since
-    //       it can take quite a while to read the entire screen
-    //       pixel by pixel and write the data to the SD card
-
-    // Turn the LED on to signal busy state
-    gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_ON); 
-    // Write the screen contents to a bitmap image
-    error = bmpSaveScreenshot("capture.bmp");
-    // Turn the LED off to indicate that the capture is complete
-    gpioSetValue (CFG_LED_PORT, CFG_LED_PIN, CFG_LED_OFF); 
-
-    // Check 'error' for problems
-
-    @endcode
-*/
-/**************************************************************************/
-bmp_error_t bmpSaveScreenshot(const char* filename)
-{
-  DSTATUS stat;
-  bmp_error_t error = BMP_ERROR_NONE;
-  bmp_header_t header;
-  bmp_infoheader_t infoHeader;
-  uint32_t lcdWidth, lcdHeight, x, y, bgra32;
-  UINT bytesWritten;
-  uint16_t rgb565, eof;
-  uint8_t r, g, b;
-
-  // Create a new file (Crossworks only)
-  stat = disk_initialize(0);
-  if (stat & STA_NOINIT) 
-  {
-    return BMP_ERROR_SDINITFAIL;
-  }
-  if (stat & STA_NODISK) 
-  {
-    return BMP_ERROR_SDINITFAIL;
-  }
-  if (stat == 0)
-  {
-    // SD card sucessfully initialised
-    DSTATUS stat;
-    DWORD p2;
-    WORD w1;
-    BYTE res, b1;
-    DIR dir; 
-    // Try to mount drive
-    res = f_mount(0, &Fatfs[0]);
-    if (res != FR_OK) 
-    {
-      return BMP_ERROR_SDINITFAIL;
-    }
-    if (res == FR_OK)
-    {
-      // Create a file (overwriting any existing file!)
-      if(f_open(&bmpSDFile, filename, FA_READ | FA_WRITE | FA_CREATE_ALWAYS)!=FR_OK) 
-      {  
-        return BMP_ERROR_UNABLETOCREATEFILE; 
-      }
-    }
-  }
-
-  lcdWidth = lcdGetWidth();
-  lcdHeight = lcdGetHeight();
-
-  // Create header
-  header.type = 0x4d42;   // 'BM'
-  header.size = (lcdWidth * lcdHeight * 3) + sizeof(header) + sizeof(infoHeader);   // File size in bytes
-  header.reserved1 = 0;
-  header.reserved2 = 0;
-  header.offset = 0x36;   // Offset in bytes to the image data
-  
-  // Create infoheader
-  infoHeader.size = sizeof(infoHeader);
-  infoHeader.width = lcdWidth;
-  infoHeader.height = lcdHeight;
-  infoHeader.planes = 1;
-  infoHeader.bits = 24;
-  infoHeader.compression = BMP_COMPRESSION_NONE;
-  infoHeader.imagesize = (lcdWidth * lcdHeight * 3) + 2;  // 3 bytes per pixel + 2 bytes for EOF
-  infoHeader.xresolution = 0x0B12;
-  infoHeader.yresolution = 0x0B12;
-  infoHeader.ncolours = 0;
-  infoHeader.importantcolours = 0;
-
-  // Write header to disk
-  f_write(&bmpSDFile, &header.type, sizeof(header.type), &bytesWritten);
-  f_write(&bmpSDFile, &header.size, sizeof(header.size), &bytesWritten);
-  f_write(&bmpSDFile, &header.reserved1, sizeof(header.reserved1), &bytesWritten);
-  f_write(&bmpSDFile, &header.reserved2, sizeof(header.reserved2), &bytesWritten);
-  f_write(&bmpSDFile, &header.offset, sizeof(header.offset), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.size, sizeof(infoHeader.size), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.width, sizeof(infoHeader.width), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.height, sizeof(infoHeader.height), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.planes, sizeof(infoHeader.planes), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.bits, sizeof(infoHeader.bits), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.compression, sizeof(infoHeader.compression), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.imagesize, sizeof(infoHeader.imagesize), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.xresolution, sizeof(infoHeader.xresolution), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.yresolution, sizeof(infoHeader.yresolution), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.ncolours, sizeof(infoHeader.ncolours), &bytesWritten);
-  f_write(&bmpSDFile, &infoHeader.importantcolours, sizeof(infoHeader.importantcolours), &bytesWritten);
-
-  // Write image data to disk (starting from bottom row)
-  for (y = lcdHeight; y != 0; y--)
-  {
-    for (x = 0; x < lcdWidth; x++)
-    {
-      rgb565 = lcdGetPixel(x, y - 1);               // Get RGB565 pixel
-      bgra32 = drawRGB565toBGRA32(rgb565);          // Convert RGB565 to 24-bit color
-      r = (bgra32 & 0x00FF0000) >> 16;
-      g = (bgra32 & 0x0000FF00) >> 8;
-      b = (bgra32 & 0x000000FF);
-      f_write(&bmpSDFile, &b, 1, &bytesWritten);    // Write RGB data
-      f_write(&bmpSDFile, &g, 1, &bytesWritten);
-      f_write(&bmpSDFile, &r, 1, &bytesWritten);
-    }    
-  }
-  
-  // Write EOF (2 bytes)
-  eof = 0x0000;
-  f_write(&bmpSDFile, &eof, 2, &bytesWritten);
-
-  // Close the file
-  f_close(&bmpSDFile);
-
-  // Return OK signal
-  return BMP_ERROR_NONE;
-}
-#endif  // End of read-only check to write bitmaps
-
-#endif  // End of CFG_SDCARD check
diff --git a/drivers/lcd/tft/bmp.h b/drivers/lcd/tft/bmp.h
deleted file mode 100644 (file)
index f734047..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     bmp.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __BMP_H__
-#define __BMP_H__
-
-#include "projectconfig.h"
-
-/**************************************************************************
-    Windows Bitmap File Format
-    -----------------------------------------------------------------------
-    Windows bitmap images are relatively easy to work with because the
-    format is basic and requires limited overhead to work with (in
-    practice, image data is very rarely compressed).  Bitmap files have
-    the following structure:
-
-    --------------------------
-    |          Header        |        14 bytes
-    |-------------------------
-    |        Info Header     |        40 bytes
-    -----------------------
-    |    Palette (optional)  |
-    |-------------------------
-    |       Image Data       |
-    --------------------------
-
-    For more information on the bitmap file format, see:
-    http://local.wasp.uwa.edu.au/~pbourke/dataformats/bmp/
-
- **************************************************************************/
-
-
-/**************************************************************************/
-/*!
-    @brief  14-byte Windows bitmap header
-*/
-/**************************************************************************/
-typedef struct 
-{
-  uint16_t type;                      /* Magic identifier            */
-  uint32_t size;                      /* File size in bytes          */
-  uint16_t reserved1;
-  uint16_t reserved2;
-  uint32_t offset;                    /* Offset to image data, bytes */
-} bmp_header_t;
-
-/**************************************************************************/
-/*!
-    @brief  40-byte Windows bitmap info header
-*/
-/**************************************************************************/
-typedef struct 
-{
-  uint32_t size;                      /* Header size in bytes      */
-  int32_t  width;                     /* Width of the image        */
-  int32_t  height;                    /* Height of image           */
-  uint16_t planes;                    /* Number of colour planes   */
-  uint16_t bits;                      /* Bits per pixel            */
-  uint32_t compression;               /* Compression type          */
-  uint32_t imagesize;                 /* Image size in bytes       */
-  int32_t  xresolution;               /* Pixels per meter          */
-  int32_t  yresolution;               /* Pixels per meter          */
-  uint32_t ncolours;                  /* Number of colours         */
-  uint32_t importantcolours;          /* Important colours         */
-} bmp_infoheader_t;
-
-/**************************************************************************/
-/*!
-    @brief  Describes the different compression methods available in
-            Windows bitmap images, though compression is not currently
-            supported by this code.
-*/
-/**************************************************************************/
-typedef enum
-{
-  BMP_COMPRESSION_NONE = 0,
-  BMP_COMPRESSION_RLE8 = 1,
-  BMP_COMPRESSION_RLE4 = 2,
-  BMP_COMPRESSION_RGBMASK = 3
-} bmp_compression_t;
-
-/**************************************************************************/
-/*!
-    @brief  24-bit pixel data
-*/
-/**************************************************************************/
-typedef struct
-{
-  uint8_t rgbBlue;                    /* Blue value */
-  uint8_t rgbGreen;                   /* Green value */
-  uint8_t rgbRed;                     /* Red value */
-} bmp_rgbdata_t;
-
-/**************************************************************************/
-/*!
-    @brief  Error return codes when processing bitmap images
-*/
-/**************************************************************************/
-typedef enum
-{
-  BMP_ERROR_NONE = 0,
-  BMP_ERROR_SDINITFAIL = 1,
-  BMP_ERROR_FILENOTFOUND = 2,
-  BMP_ERROR_UNABLETOCREATEFILE = 3,
-  BMP_ERROR_NOTABITMAP = 10,          /* First two bytes of the image not 'BM' */
-  BMP_ERROR_INVALIDBITDEPTH = 11,     /* Image is not 24-bits */
-  BMP_ERROR_COMPRESSEDDATA = 12,      /* Image contains compressed data (not supported) */
-  BMP_ERROR_INVALIDDIMENSIONS = 13,   /* Image is > CFG_TFTLCD_WIDTH pixels wide or > CFG_TFTLCD_HEIGHT pixels high */
-  BMP_ERROR_PREMATUREEOF = 14         /* EOF reached unexpectedly in pixel data */
-} bmp_error_t;
-
-bmp_error_t bmpDrawBitmap(uint16_t x, uint16_t y, const char* filename);
-
-#if defined CFG_SDCARD_READONLY && CFG_SDCARD_READONLY == 0
-bmp_error_t bmpSaveScreenshot(const char* filename);
-#endif
-
-#endif
diff --git a/drivers/lcd/tft/colors.h b/drivers/lcd/tft/colors.h
deleted file mode 100644 (file)
index eb39265..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     colors.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @brief    Common 16-bit RGB565 color definitions
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __COLORS_H__
-#define __COLORS_H__
-
-#include "projectconfig.h"
-
-// Basic Color definitions
-#define        COLOR_BLACK                         (uint16_t)(0x0000)
-#define        COLOR_BLUE                          (uint16_t)(0x001F)
-#define        COLOR_RED                           (uint16_t)(0xF800)
-#define        COLOR_GREEN                         (uint16_t)(0x07E0)
-#define COLOR_CYAN                          (uint16_t)(0x07FF)
-#define COLOR_MAGENTA                       (uint16_t)(0xF81F)
-#define COLOR_YELLOW                        (uint16_t)(0xFFE0)
-#define COLOR_WHITE                         (uint16_t)(0xFFFF)
-
-// Grayscale Values
-#define COLOR_GRAY_15                       (uint16_t)(0x0861)    //  15  15  15
-#define COLOR_GRAY_30                       (uint16_t)(0x18E3)    //  30  30  30
-#define COLOR_GRAY_50                       (uint16_t)(0x3186)    //  50  50  50
-#define COLOR_GRAY_80                       (uint16_t)(0x528A)    //  80  80  80
-#define COLOR_GRAY_128                      (uint16_t)(0x8410)    // 128 128 128
-#define COLOR_GRAY_200                      (uint16_t)(0xCE59)    // 200 200 200
-#define COLOR_GRAY_225                      (uint16_t)(0xE71C)    // 225 225 225
-
-// Color Palettes
-#define COLOR_THEME_LIMEGREEN_BASE          (uint16_t)(0xD7F0)    // 211 255 130
-#define COLOR_THEME_LIMEGREEN_DARKER        (uint16_t)(0x8DE8)    // 137 188  69
-#define COLOR_THEME_LIMEGREEN_LIGHTER       (uint16_t)(0xEFF9)    // 238 255 207
-#define COLOR_THEME_LIMEGREEN_SHADOW        (uint16_t)(0x73EC)    // 119 127 103
-#define COLOR_THEME_LIMEGREEN_ACCENT        (uint16_t)(0xAE6D)    // 169 204 104
-
-#define COLOR_THEME_VIOLET_BASE             (uint16_t)(0x8AEF)    // 143  94 124
-#define COLOR_THEME_VIOLET_DARKER           (uint16_t)(0x4187)    //  66  49  59
-#define COLOR_THEME_VIOLET_LIGHTER          (uint16_t)(0xC475)    // 194 142 174
-#define COLOR_THEME_VIOLET_SHADOW           (uint16_t)(0x40E6)    //  66  29  52
-#define COLOR_THEME_VIOLET_ACCENT           (uint16_t)(0xC992)    // 204  50 144
-
-#define COLOR_THEME_EARTHY_BASE             (uint16_t)(0x6269)    //  97  79  73
-#define COLOR_THEME_EARTHY_DARKER           (uint16_t)(0x3103)    //  48  35  31
-#define COLOR_THEME_EARTHY_LIGHTER          (uint16_t)(0x8C30)    // 140 135 129
-#define COLOR_THEME_EARTHY_SHADOW           (uint16_t)(0xAB29)    // 173 102  79
-#define COLOR_THEME_EARTHY_ACCENT           (uint16_t)(0xFE77)    // 250 204 188
-
-#define COLOR_THEME_SKYBLUE_BASE            (uint16_t)(0x95BF)    // 150 180 255
-#define COLOR_THEME_SKYBLUE_DARKER          (uint16_t)(0x73B0)    // 113 118 131
-#define COLOR_THEME_SKYBLUE_LIGHTER         (uint16_t)(0xE75F)    // 227 235 255
-#define COLOR_THEME_SKYBLUE_SHADOW          (uint16_t)(0x4ACF)    //  75  90 127
-#define COLOR_THEME_SKYBLUE_ACCENT          (uint16_t)(0xB5F9)    // 182 188 204
-
-// Using these values allows you to update the entire UI color scheme in one location
-#define COLOR_THEME_DEFAULT_BASE            COLOR_THEME_LIMEGREEN_BASE
-#define COLOR_THEME_DEFAULT_DARKER          COLOR_THEME_LIMEGREEN_DARKER
-#define COLOR_THEME_DEFAULT_LIGHTER         COLOR_THEME_LIMEGREEN_LIGHTER
-#define COLOR_THEME_DEFAULT_SHADOW          COLOR_THEME_LIMEGREEN_SHADOW
-#define COLOR_THEME_DEFAULT_ACCENT          COLOR_THEME_LIMEGREEN_ACCENT
-
-#endif
diff --git a/drivers/lcd/tft/dialogues/alphanumeric.c b/drivers/lcd/tft/dialogues/alphanumeric.c
deleted file mode 100644 (file)
index db22c32..0000000
+++ /dev/null
@@ -1,364 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     alphanumeric.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @brief    Shows an alpha-numeric input dialogue
-
-    @section Example
-
-    @code 
-    #include "drivers/lcd/tft/dialogues/alphanumeric.h"
-
-    // Print results from an alpha-numeric dialogue
-    char* results = alphaShowDialogue();
-    printf("%s\r\n", results);
-
-    @endcode
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "alphanumeric.h"
-
-#include "core/systick/systick.h"
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/touchscreen.h"
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-
-// Background and text input region colors
-#define ALPHA_COLOR_BACKGROUND    COLOR_GRAY_15
-#define ALPHA_COLOR_INPUTFILL     COLOR_GRAY_30
-#define ALPHA_COLOR_INPUTTEXT     COLOR_WHITE
-// Button colors
-#define ALPHA_COLOR_BTN_BORDER    COLOR_GRAY_30
-#define ALPHA_COLOR_BTN_FILL      COLOR_GRAY_30
-#define ALPHA_COLOR_BTN_FONT      COLOR_WHITE
-// Active button colors
-#define ALPHA_COLOR_BTNEN_BORDER  COLOR_THEME_DEFAULT_DARKER
-#define ALPHA_COLOR_BTNEN_FILL    COLOR_THEME_DEFAULT_BASE
-#define ALPHA_COLOR_BTNEN_FONT    COLOR_BLACK
-
-/* This kind of messes with your head, but defining the pixel locations
-   this way allows the calculator example to be rendered on another
-   TFT LCD with a different screen resolution or orientation without 
-   having to rewrite all the individual pixel-level code                  */
-
-#define ALPHA_BTN_SPACING   (5)
-#define ALPHA_BTN_WIDTH     ((lcdGetWidth() - (ALPHA_BTN_SPACING * 6)) / 5)
-#define ALPHA_KEYPAD_TOP    ((lcdGetHeight() / 7) + (ALPHA_BTN_SPACING * 2))
-#define ALPHA_BTN_HEIGHT    (((lcdGetHeight() - ALPHA_KEYPAD_TOP) - (ALPHA_BTN_SPACING * 7)) / 6)
-// #define ALPHA_BTN_WIDTH     ((240 - (ALPHA_BTN_SPACING * 6)) / 5)
-// #define ALPHA_KEYPAD_TOP    ((320 / 6) + (ALPHA_BTN_SPACING * 2))
-// #define ALPHA_BTN_HEIGHT    (((320 - ALPHA_KEYPAD_TOP) - (ALPHA_BTN_SPACING * 7)) / 6)
-
-/* X/Y positions for buttons */
-#define ALPHA_ROW1_TOP      (ALPHA_KEYPAD_TOP + ALPHA_BTN_SPACING)
-#define ALPHA_ROW2_TOP      (ALPHA_KEYPAD_TOP + ALPHA_BTN_HEIGHT + (ALPHA_BTN_SPACING * 2))
-#define ALPHA_ROW3_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 2) + ((ALPHA_BTN_SPACING) *  3)))
-#define ALPHA_ROW4_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 3) + ((ALPHA_BTN_SPACING) *  4)))
-#define ALPHA_ROW5_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 4) + ((ALPHA_BTN_SPACING) *  5)))
-#define ALPHA_ROW6_TOP      (ALPHA_KEYPAD_TOP + ((ALPHA_BTN_HEIGHT * 5) + ((ALPHA_BTN_SPACING) *  6)))
-#define ALPHA_COL1_LEFT     (ALPHA_BTN_SPACING)
-#define ALPHA_COL2_LEFT     ((ALPHA_BTN_SPACING * 2) + ALPHA_BTN_WIDTH)
-#define ALPHA_COL3_LEFT     ((ALPHA_BTN_SPACING * 3) + (ALPHA_BTN_WIDTH * 2))
-#define ALPHA_COL4_LEFT     ((ALPHA_BTN_SPACING * 4) + (ALPHA_BTN_WIDTH * 3))
-#define ALPHA_COL5_LEFT     ((ALPHA_BTN_SPACING * 5) + (ALPHA_BTN_WIDTH * 4))
-
-/* Control which 'page' is currently shown on the keypad */
-static uint8_t alphaPage = 0;
-
-/* Keeps track of the string contents */
-static uint8_t alphaString[80];
-static uint8_t *alphaString_ptr;
-
-/* For quick retrieval of button X/Y locqtions */
-uint32_t alphaBtnX[5], alphaBtnY[6];
-
-/* Array showing which characters should be displayed on each alphaPage */
-/* You can rearrange the keypad by modifying the array contents below   */
-/* --------------------    --------------------   --------------------   --------------------
-    A   B   C   D BACK      a   b   c   d BACK      .   ,   :   ; BACK     7   8   9     BACK
-    E   F   G   H   I       e   f   g   h   i       '   "   (   )          4   5   6            
-    J   K   L   M   N       j   k   l   m   n       ?   !   {   }          7   8   9            
-    O   P   Q   R   S       o   p   q   r   s       #   &   @   ~          .   0  SPC           
-    T   U   V   W SHFT      t   u   v   w SHFT      %   =   /   \  SHFT                  SHFT   
-    X   Y   Z  SPC OK       x   y   z  SPC OK       +   -   _  SPC  OK                    OK      
-   --------------------    --------------------   --------------------   -------------------- */
-char alphaKeys[4][6][5] =  {  {  { 'A', 'B', 'C', 'D', '<' },
-                                 { 'E', 'F', 'G', 'H', 'I' },
-                                 { 'J', 'K', 'L', 'M', 'N' },
-                                 { 'O', 'P', 'Q', 'R', 'S' },
-                                 { 'T', 'U', 'V', 'W', '*' },
-                                 { 'X', 'Y', 'Z', ' ', '>' }   },
-
-                              {  { 'a', 'b', 'c', 'd', '<' }, 
-                                 { 'e', 'f', 'g', 'h', 'i' },
-                                 { 'j', 'k', 'l', 'm', 'n' },
-                                 { 'o', 'p', 'q', 'r', 's' },
-                                 { 't', 'u', 'v', 'w', '*' },
-                                 { 'x', 'y', 'z', ' ', '>' }  },
-
-                              {  { '.', ',', ':', ';', '<' }, 
-                                 { '\'', '\"', '(', ')', ' ' },
-                                 { '?', '!', '{', '}', ' ' },
-                                 { '#', '&', '@', '~', ' ' },
-                                 { '%', '=', '/', '\\', '*' },
-                                 { '+', '-', '_', ' ', '>' }  },
-
-                              {  { '7', '8', '9', ' ', '<' }, 
-                                 { '4', '5', '6', ' ', ' ' },
-                                 { '1', '2', '3', ' ', ' ' },
-                                 { '.', '0', ' ', ' ', ' ' },
-                                 { ' ', ' ', ' ', ' ', '*'},
-                                 { ' ', ' ', ' ', ' ', '>' }  }  };
-
-/**************************************************************************/
-/*! 
-    @brief  Renders the UI
-*/
-/**************************************************************************/
-void alphaRenderButton(uint8_t alphaPage, uint8_t col, uint8_t row, bool selected)
-{
-  // Set colors depending on button state
-  uint16_t border, fill, font;
-  if (selected)
-  {
-    border = ALPHA_COLOR_BTNEN_BORDER;
-    fill = ALPHA_COLOR_BTNEN_FILL;
-    font = ALPHA_COLOR_BTNEN_FONT;
-  }
-  else
-  {
-    border = ALPHA_COLOR_BTN_BORDER;
-    fill = ALPHA_COLOR_BTN_FILL;
-    font = ALPHA_COLOR_BTN_FONT;
-  }
-
-  char c = alphaKeys[alphaPage][row][col];
-  char key[2] = { alphaKeys[alphaPage][row][col], '\0' };
-  // Handle special characters
-  switch (c)
-  {
-    case '<':
-      // Backspace
-      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, NULL); 
-      drawArrow (alphaBtnX[col] + ALPHA_BTN_WIDTH / 2 - 3, alphaBtnY[row] + ALPHA_BTN_HEIGHT / 2, 7, DRAW_DIRECTION_LEFT, font);
-      break;
-    case '*':
-      // Page Shift
-      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, NULL); 
-      drawArrow (alphaBtnX[col] + ALPHA_BTN_WIDTH / 2, (alphaBtnY[row] + ALPHA_BTN_HEIGHT / 2) - 3, 7, DRAW_DIRECTION_UP, font);
-      break;
-    case '>':
-      // OK
-      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, "OK"); 
-      break;
-    default:
-      // Standard character
-      drawButton (alphaBtnX[col], alphaBtnY[row], ALPHA_BTN_WIDTH, ALPHA_BTN_HEIGHT, &dejaVuSans9ptFontInfo, 7, border, fill, font, key); 
-      break;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders the UI
-*/
-/**************************************************************************/
-void alphaRefreshScreen(void)
-{
-  uint8_t x, y;
-
-  /* Draw keypad */
-  for (y = 0; y < 6; y++)
-  {
-    for (x = 0; x < 5; x++)
-    {
-      alphaRenderButton(alphaPage, x, y, false);
-    }
-  }
-
-  /* Render Text */
-  drawRectangleRounded(ALPHA_BTN_SPACING, ALPHA_BTN_SPACING, lcdGetWidth() - 1 - ALPHA_BTN_SPACING, ALPHA_KEYPAD_TOP - ALPHA_BTN_SPACING, ALPHA_COLOR_INPUTFILL, 10, DRAW_ROUNDEDCORNERS_ALL);
-  drawString(ALPHA_BTN_SPACING * 3, ALPHA_BTN_SPACING * 3, ALPHA_COLOR_INPUTTEXT, &dejaVuSans9ptFontInfo, (char *)&alphaString);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Processes the supplied touch data
-*/
-/**************************************************************************/
-char alphaHandleTouchEvent(void)
-{
-  tsTouchData_t data;
-  char result = '\0';
-  uint8_t row, col;
-  int32_t tsError = -1;
-
-  // Blocking delay until a valid touch event occurs
-  while (tsError)
-  {
-    tsError = tsWaitForEvent(&data, 0);
-  }
-
-  // Attempt to convert touch data to char
-  if ((data.ylcd < ALPHA_ROW1_TOP) || (data.ylcd > ALPHA_ROW6_TOP + ALPHA_BTN_HEIGHT))
-  {
-    return result;
-  }
-
-  // Get column
-  if ((data.xlcd > alphaBtnX[0]) && (data.xlcd < alphaBtnX[0] + ALPHA_BTN_WIDTH))
-    col = 0;
-  else if ((data.xlcd > alphaBtnX[1]) && (data.xlcd < alphaBtnX[1] + ALPHA_BTN_WIDTH))
-    col = 1;
-  else if ((data.xlcd > alphaBtnX[2]) && (data.xlcd < alphaBtnX[2] + ALPHA_BTN_WIDTH))
-    col = 2;
-  else if ((data.xlcd > alphaBtnX[3]) && (data.xlcd < alphaBtnX[3] + ALPHA_BTN_WIDTH))
-    col = 3;
-  else if ((data.xlcd > ALPHA_COL5_LEFT) && (data.xlcd < ALPHA_COL5_LEFT + ALPHA_BTN_WIDTH))
-    col = 4;
-  else
-    return result;
-
-  // Get row
-  if ((data.ylcd > ALPHA_ROW1_TOP) && (data.ylcd < ALPHA_ROW1_TOP + ALPHA_BTN_HEIGHT))
-    row = 0;
-  else if ((data.ylcd > ALPHA_ROW2_TOP) && (data.ylcd < ALPHA_ROW2_TOP + ALPHA_BTN_HEIGHT))
-    row = 1;
-  else if ((data.ylcd > ALPHA_ROW3_TOP) && (data.ylcd < ALPHA_ROW3_TOP + ALPHA_BTN_HEIGHT))
-    row = 2;
-  else if ((data.ylcd > ALPHA_ROW4_TOP) && (data.ylcd < ALPHA_ROW4_TOP + ALPHA_BTN_HEIGHT))
-    row = 3;
-  else if ((data.ylcd > ALPHA_ROW5_TOP) && (data.ylcd < ALPHA_ROW5_TOP + ALPHA_BTN_HEIGHT))
-    row = 4;
-  else if ((data.ylcd > ALPHA_ROW6_TOP) && (data.ylcd < ALPHA_ROW6_TOP + ALPHA_BTN_HEIGHT))
-    row = 5;
-  else
-    return result;
-
-  // Match found ... update button and process the results
-  alphaRenderButton(alphaPage, col, row, true);
-  result = alphaKeys[alphaPage][row][col];
-  
-  if (result == '<')
-  {
-    // Trim character if backspace was pressed
-    if (alphaString_ptr > alphaString)
-    {
-      alphaString_ptr--;
-      *alphaString_ptr = '\0';
-    }
-  }
-  else if (result == '*')
-  {
-    // Switch page if the shift button was pressed
-    alphaPage++;
-    if (alphaPage > 3)
-    {
-      alphaPage = 0;
-    }
-    // Update the UI
-    alphaRefreshScreen();
-  }
-  else if (result == '>')
-  {
-    // OK button
-    systickDelay(CFG_TFTLCD_TS_KEYPADDELAY);
-    return '>';
-  }
-  else
-  {
-    // Add text to string buffer
-    *alphaString_ptr++ = result;
-  }
-
-  // Brief delay
-  systickDelay(CFG_TFTLCD_TS_KEYPADDELAY);
-
-  // Return button to deselected state
-  alphaRefreshScreen();
-  return result;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Displays the dialogue box and waits for valid user input
-
-    @section Example
-
-    @code 
-    #include "drivers/lcd/tft/dialogues/alphanumeric.h"
-
-    // Print results from an alpha-numeric dialogue
-    char* results = alphaShowDialogue();
-    printf("%s\r\n", results);
-
-    @endcode
-*/
-/**************************************************************************/
-char* alphaShowDialogue(void)
-{
-  char result;
-
-  /* These need to be instantiated here since the width and height of 
-     the lcd is retrieved dynamically depending on screen orientation */
-  alphaBtnX[0] = ALPHA_COL1_LEFT;
-  alphaBtnX[1] = ALPHA_COL2_LEFT;
-  alphaBtnX[2] = ALPHA_COL3_LEFT;
-  alphaBtnX[3] = ALPHA_COL4_LEFT;
-  alphaBtnX[4] = ALPHA_COL5_LEFT;
-  alphaBtnY[0] = ALPHA_ROW1_TOP;
-  alphaBtnY[1] = ALPHA_ROW2_TOP;
-  alphaBtnY[2] = ALPHA_ROW3_TOP;
-  alphaBtnY[3] = ALPHA_ROW4_TOP;
-  alphaBtnY[4] = ALPHA_ROW5_TOP;
-  alphaBtnY[5] = ALPHA_ROW6_TOP;
-
-  /* Initialise the string buffer */
-  memset(&alphaString[0], 0, sizeof(alphaString));
-  alphaString_ptr = alphaString;
-  alphaPage = 0;
-
-  /* Draw the background and render the buttons */
-  drawFill(ALPHA_COLOR_BACKGROUND);
-  alphaRefreshScreen();
-
-  /* Capture results until the 'OK' button is pressed */
-  while(1)
-  {
-    result = alphaHandleTouchEvent();
-    if (result == '>') return (char *)&alphaString;
-  }
-}
diff --git a/drivers/lcd/tft/dialogues/alphanumeric.h b/drivers/lcd/tft/dialogues/alphanumeric.h
deleted file mode 100644 (file)
index 13353f8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     alphanumeric.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __DIALOGUE_ALPHANUMERIC_H__
-#define __DIALOGUE_ALPHANUMERIC_H__
-
-#include "projectconfig.h"
-
-char * alphaShowDialogue(void);
-
-#endif
diff --git a/drivers/lcd/tft/drawing.c b/drivers/lcd/tft/drawing.c
deleted file mode 100644 (file)
index cdc8d5a..0000000
+++ /dev/null
@@ -1,1407 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     drawing.c
-    @author   K. Townsend (microBuilder.eu)
-
-    drawLine and drawCircle adapted from a tutorial by Leonard McMillan:
-    http://www.cs.unc.edu/~mcmillan/
-
-    drawString based on an example from Eran Duchan:
-    http://www.pavius.net/downloads/tools/53-the-dot-factory
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include <string.h>
-
-#include "drawing.h"
-
-#ifdef CFG_SDCARD
-  #include "bmp.h"
-#endif
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Private Methods ------------------------------ */
-/*                                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Swaps values a and b
-*/
-/**************************************************************************/
-void drawSwap(uint32_t a, uint32_t b)
-{
-  uint32_t t;
-  t = a;
-  a = b;
-  b = t;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a single bitmap character
-*/
-/**************************************************************************/
-void drawCharBitmap(const uint16_t xPixel, const uint16_t yPixel, uint16_t color, const char *glyph, uint8_t cols, uint8_t rows)
-{
-  uint16_t currentY, currentX, indexIntoGlyph;
-  uint16_t _row, _col, _colPages;
-
-  // set initial current y
-  currentY = yPixel;
-  currentX = xPixel;
-
-  // Figure out how many columns worth of data we have
-  if (cols % 8)
-    _colPages = cols / 8 + 1;
-  else
-    _colPages = cols / 8;
-
-  for (_row = 0; _row < rows; _row++)
-  {
-    for (_col = 0; _col < _colPages; _col++)
-    {
-      if (_row == 0)
-        indexIntoGlyph = _col;
-      else
-        indexIntoGlyph = (_row * _colPages) + _col;
-
-      currentY = yPixel + _row;
-      currentX = xPixel + (_col*8);
-      // send the data byte
-      if (glyph[indexIntoGlyph] & (0X80)) drawPixel(currentX, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X40)) drawPixel(currentX+1, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X20)) drawPixel(currentX+2, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X10)) drawPixel(currentX+3, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X08)) drawPixel(currentX+4, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X04)) drawPixel(currentX+5, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X02)) drawPixel(currentX+6, currentY, color);
-      if (glyph[indexIntoGlyph] & (0X01)) drawPixel(currentX+7, currentY, color);
-    }
-  }
-}
-
-#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
-/**************************************************************************/
-/*!
-    @brief  Draws a single smallfont character
-*/
-/**************************************************************************/
-void drawCharSmall(uint16_t x, uint16_t y, uint16_t color, uint8_t c, struct FONT_DEF font)
-{
-  uint8_t col, column[font.u8Width];
-
-  // Check if the requested character is available
-  if ((c >= font.u8FirstChar) && (c <= font.u8LastChar))
-  {
-    // Retrieve appropriate columns from font data
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = font.au8FontTable[((c - 32) * font.u8Width) + col];    // Get first column of appropriate character
-    }
-  }
-  else
-  {    
-    // Requested character is not available in this font ... send a space instead
-    for (col = 0; col < font.u8Width; col++)
-    {
-      column[col] = 0xFF;    // Send solid space
-    }
-  }
-
-  // Render each column
-  uint16_t xoffset, yoffset;
-  for (xoffset = 0; xoffset < font.u8Width; xoffset++)
-  {
-    for (yoffset = 0; yoffset < (font.u8Height + 1); yoffset++)
-    {
-      uint8_t bit = 0x00;
-      bit = (column[xoffset] << (8 - (yoffset + 1)));     // Shift current row bit left
-      bit = (bit >> 7);                     // Shift current row but right (results in 0x01 for black, and 0x00 for white)
-      if (bit)
-      {
-        drawPixel(x + xoffset, y + yoffset, color);
-      }
-    }
-  }
-}
-#endif
-
-/**************************************************************************/
-/*!
-    @brief  Helper method to accurately draw individual circle points
-*/
-/**************************************************************************/
-void drawCirclePoints(int cx, int cy, int x, int y, uint16_t color)
-{    
-  if (x == 0) 
-  {
-      drawPixel(cx, cy + y, color);
-      drawPixel(cx, cy - y, color);
-      drawPixel(cx + y, cy, color);
-      drawPixel(cx - y, cy, color);
-  } 
-  else if (x == y) 
-  {
-      drawPixel(cx + x, cy + y, color);
-      drawPixel(cx - x, cy + y, color);
-      drawPixel(cx + x, cy - y, color);
-      drawPixel(cx - x, cy - y, color);
-  } 
-  else if (x < y) 
-  {
-      drawPixel(cx + x, cy + y, color);
-      drawPixel(cx - x, cy + y, color);
-      drawPixel(cx + x, cy - y, color);
-      drawPixel(cx - x, cy - y, color);
-      drawPixel(cx + y, cy + x, color);
-      drawPixel(cx - y, cy + x, color);
-      drawPixel(cx + y, cy - x, color);
-      drawPixel(cx - y, cy - x, color);
-  }
-}
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Public Methods ------------------------------- */
-/*                                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Draws a single pixel at the specified location
-
-    @param[in]  x
-                Horizontal position
-    @param[in]  y
-                Vertical position
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  if ((x >= lcdGetWidth()) || (y >= lcdGetHeight()))
-  {
-    // Pixel out of range
-    return;
-  }
-
-  // Redirect to LCD
-  lcdDrawPixel(x, y, color);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Fills the screen with the specified color
-
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawFill(uint16_t color)
-{
-  lcdFillRGB(color);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a simple color test pattern
-*/
-/**************************************************************************/
-void drawTestPattern(void)
-{
-  lcdTest();
-}
-
-#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
-/**************************************************************************/
-/*!
-    @brief  Draws a string using a small font (6 of 8 pixels high).
-
-    @param[in]  x
-                Starting x co-ordinate
-    @param[in]  y
-                Starting y co-ordinate
-    @param[in]  color
-                Color to use when rendering the font
-    @param[in]  text
-                The string to render
-    @param[in]  font
-                Pointer to the FONT_DEF to use when drawing the string
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/fonts/smallfonts.h"
-    
-    drawStringSmall(1, 210, COLOR_WHITE, "5x8 System (Max 40 Characters)", Font_System5x8);
-    drawStringSmall(1, 220, COLOR_WHITE, "7x8 System (Max 30 Characters)", Font_System7x8);
-
-    @endcode
-*/
-/**************************************************************************/
-void drawStringSmall(uint16_t x, uint16_t y, uint16_t color, char* text, struct FONT_DEF font)
-{
-  uint8_t l;
-  for (l = 0; l < strlen(text); l++)
-  {
-    drawCharSmall(x + (l * (font.u8Width + 1)), y, color, text[l], font);
-  }
-}
-#endif
-
-/**************************************************************************/
-/*!
-    @brief  Draws a string using the supplied font
-
-    @param[in]  x
-                Starting x co-ordinate
-    @param[in]  y
-                Starting y co-ordinate
-    @param[in]  color
-                Color to use when rendering the font
-    @param[in]  fontInfo
-                Pointer to the FONT_INFO to use when drawing the string
-    @param[in]  str
-                The string to render
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/fonts/dejavusans9.h"
-    
-    drawString(0, 90,  COLOR_BLACK, &dejaVuSans9ptFontInfo, "DejaVu Sans 9");
-    drawString(0, 105, COLOR_BLACK, &dejaVuSans9ptFontInfo, "123456789012345678901234567890");
-
-    @endcode
-*/
-/**************************************************************************/
-void drawString(uint16_t x, uint16_t y, uint16_t color, const FONT_INFO *fontInfo, char *str)
-{
-  uint16_t currentX, charWidth, characterToOutput;
-  const FONT_CHAR_INFO *charInfo;
-  uint16_t charOffset;
-
-  // set current x, y to that of requested
-  currentX = x;
-
-  // while not NULL
-  while (*str != '\0')
-  {
-    // get character to output
-    characterToOutput = *str;
-    
-    // get char info
-    charInfo = fontInfo->charInfo;
-    
-    // some fonts have character descriptors, some don't
-    if (charInfo != NULL)
-    {
-      // get correct char offset
-      charInfo += (characterToOutput - fontInfo->startChar);
-      
-      // get width from char info
-      charWidth = charInfo->widthBits;
-      
-      // get offset from char info
-      charOffset = charInfo->offset;
-    }        
-    else
-    {
-      // if no char info, char width is always 5
-      charWidth = 5;
-      
-      // char offset - assume 5 * letter offset
-      charOffset = (characterToOutput - fontInfo->startChar) * 5;
-    }        
-    
-    // Send individual characters
-    // We need to manually calculate width in pages since this is screwy with variable width fonts
-    //uint8_t heightPages = charWidth % 8 ? charWidth / 8 : charWidth / 8 + 1;
-    drawCharBitmap(currentX, y, color, (const char *)(&fontInfo->data[charOffset]), charWidth, fontInfo->height);
-
-    // next char X
-    currentX += charWidth + 1;
-    
-    // next char
-    str++;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns the width in pixels of a string when it is rendered
-
-    This method can be used to determine whether a string will fit
-    inside a specific area, or if it needs to be broken up into multiple
-    lines to be properly rendered on the screen.
-
-    This function only applied to bitmap fonts (which can have variable
-    widths).  All smallfonts (if available) are fixed width and can
-    easily have their width calculated without costly functions like
-    this one.
-
-    @param[in]  fontInfo
-                Pointer to the FONT_INFO for the font that will be used
-    @param[in]  str
-                The string that will be rendered
-*/
-/**************************************************************************/
-uint16_t drawGetStringWidth(const FONT_INFO *fontInfo, char *str)
-{
-  uint16_t width = 0;
-  uint32_t currChar;
-  uint32_t startChar = fontInfo->startChar;
-
-  // until termination
-  for (currChar = *str; currChar; currChar = *(++str))
-  {
-    // if char info exists for the font, use width from there
-    if (fontInfo->charInfo != NULL)
-    {
-      width += fontInfo->charInfo[currChar - startChar].widthBits + 1;
-    }
-    else
-    {
-      width += 5 + 1;
-    }
-  }
-
-  /* return the width */
-  return width > 0 ? width - 1 : width;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a bresenham line
-
-    @param[in]  x0
-                Starting x co-ordinate
-    @param[in]  y0
-                Starting y co-ordinate
-    @param[in]  x1
-                Ending x co-ordinate
-    @param[in]  y1
-                Ending y co-ordinate
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawLine ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color )
-{
-  drawLineDotted(x0, y0, x1, y1, 0, 1, color);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a bresenham line with a fixed pattern of empty
-            and solid pixels
-
-    Based on: http://www.cs.unc.edu/~mcmillan/comp136/Lecture6/Lines.html
-
-    @param[in]  x0
-                Starting x co-ordinate
-    @param[in]  y0
-                Starting y co-ordinate
-    @param[in]  x1
-                Ending x co-ordinate
-    @param[in]  y1
-                Ending y co-ordinate
-    @param[in]  empty
-                The number of 'empty' pixels to render
-    @param[in]  solid
-                The number of 'solid' pixels to render
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawLineDotted ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t empty, uint16_t solid, uint16_t color )
-{
-  if (solid == 0)
-  {
-    return;
-  }
-
-  // If a negative y int was passed in it will overflow to 65K something
-  // Ugly, but drawCircleFilled() can pass in negative values so we need
-  // to check the values here
-  y0 = y0 > 65000 ? 0 : y0;
-  y1 = y1 > 65000 ? 0 : y1;
-
-  // Check if we can use the optimised horizontal line method
-  if ((y0 == y1) && (empty == 0))
-  {
-    lcdDrawHLine(x0, x1, y0, color);
-    return;
-  }
-
-  // Check if we can use the optimised vertical line method.
-  // This can make a huge difference in performance, but may
-  // not work properly on every LCD controller:
-  if ((x0 == x1) && (empty == 0))
-  {
-    // Warning: This may actually be slower than drawing individual pixels on 
-    // short lines ... Set a minimum line size to use the 'optimised' method
-    // (which changes the screen orientation) ?
-    lcdDrawVLine(x0, y0, y1, color);
-    return;
-  }
-
-  // Draw non-horizontal or dotted line
-  int dy = y1 - y0;
-  int dx = x1 - x0;
-  int stepx, stepy;
-  int emptycount, solidcount;
-
-  if (dy < 0) { dy = -dy;  stepy = -1; } else { stepy = 1; }
-  if (dx < 0) { dx = -dx;  stepx = -1; } else { stepx = 1; }
-  dy <<= 1;                               // dy is now 2*dy
-  dx <<= 1;                               // dx is now 2*dx
-
-  emptycount = empty;
-  solidcount = solid;
-
-  drawPixel(x0, y0, color);               // always start with solid pixels
-  solidcount--;
-  if (dx > dy) 
-  {
-    int fraction = dy - (dx >> 1);        // same as 2*dy - dx
-    while (x0 != x1) 
-    {
-      if (fraction >= 0) 
-      {
-        y0 += stepy;
-        fraction -= dx;                   // same as fraction -= 2*dx
-      }
-      x0 += stepx;
-      fraction += dy;                     // same as fraction -= 2*dy
-      if (empty == 0)
-      {
-        // always draw a pixel ... no dotted line requested
-        drawPixel(x0, y0, color);
-      }
-      else if (solidcount)
-      {
-        // Draw solid pxiel and decrement counter
-        drawPixel(x0, y0, color);
-        solidcount--;
-      }
-      else if(emptycount)
-      {
-        // Empty pixel ... don't draw anything an decrement counter
-        emptycount--;
-      }
-      else
-      {
-        // Reset counters and draw solid pixel
-        emptycount = empty;
-        solidcount = solid;
-        drawPixel(x0, y0, color);
-        solidcount--;
-      }
-    }
-  } 
-  else 
-  {
-    int fraction = dx - (dy >> 1);
-    while (y0 != y1) 
-    {
-      if (fraction >= 0) 
-      {
-        x0 += stepx;
-        fraction -= dy;
-      }
-      y0 += stepy;
-      fraction += dx;
-      if (empty == 0)
-      {
-        // always draw a pixel ... no dotted line requested
-        drawPixel(x0, y0, color);
-      }
-      if (solidcount)
-      {
-        // Draw solid pxiel and decrement counter
-        drawPixel(x0, y0, color);
-        solidcount--;
-      }
-      else if(emptycount)
-      {
-        // Empty pixel ... don't draw anything an decrement counter
-        emptycount--;
-      }
-      else
-      {
-        // Reset counters and draw solid pixel
-        emptycount = empty;
-        solidcount = solid;
-        drawPixel(x0, y0, color);
-        solidcount--;
-      }
-    }
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a circle
-
-    Based on: http://www.cs.unc.edu/~mcmillan/comp136/Lecture7/circle.html
-
-    @param[in]  xCenter
-                The horizontal center of the circle
-    @param[in]  yCenter
-                The vertical center of the circle
-    @param[in]  radius
-                The circle's radius in pixels
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawCircle (uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color)
-{
-  int x = 0;
-  int y = radius;
-  int p = (5 - radius*4)/4;
-
-  drawCirclePoints(xCenter, yCenter, x, y, color);
-  while (x < y) 
-  {
-    x++;
-    if (p < 0) 
-    {
-      p += 2*x+1;
-    } 
-    else 
-    {
-      y--;
-      p += 2*(x-y)+1;
-    }
-    drawCirclePoints(xCenter, yCenter, x, y, color);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a filled circle
-
-    @param[in]  xCenter
-                The horizontal center of the circle
-    @param[in]  yCenter
-                The vertical center of the circle
-    @param[in]  radius
-                The circle's radius in pixels
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawCircleFilled (uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color)
-{
-  int16_t f = 1 - radius;
-  int16_t ddF_x = 1;
-  int16_t ddF_y = -2 * radius;
-  int16_t x = 0;
-  int16_t y = radius;
-  int16_t xc_px, yc_my, xc_mx, xc_py, yc_mx, xc_my;
-  int16_t lcdWidth = lcdGetWidth();
-
-  if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter-radius, xCenter, (yCenter-radius) + (2*radius), color);
-  
-  while (x<y) 
-  {
-    if (f >= 0) 
-    {
-      y--;
-      ddF_y += 2;
-      f += ddF_y;
-    }
-    x++;
-    ddF_x += 2;
-    f += ddF_x;
-
-    xc_px = xCenter+x;
-    xc_mx = xCenter-x;
-    xc_py = xCenter+y;
-    xc_my = xCenter-y;
-    yc_mx = yCenter-x;
-    yc_my = yCenter-y;
-
-    // Make sure X positions are not negative or too large or the pixels will
-    // overflow.  Y overflow is handled in drawLine().
-    if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yc_my, xc_px, yc_my + 2*y, color);
-    if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yc_my, xc_mx, yc_my + 2*y, color);
-    if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yc_mx, xc_py, yc_mx + 2*x, color);
-    if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yc_mx, xc_my, yc_mx + 2*x, color);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a filled rounded corner
-
-    @param[in]  xCenter
-                The horizontal center of the circle
-    @param[in]  yCenter
-                The vertical center of the circle
-    @param[in]  radius
-                The circle's radius in pixels
-    @param[in]  position
-                The position of the corner, which affects how it will
-                be rendered
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawCornerFilled (uint16_t xCenter, uint16_t yCenter, uint16_t radius, drawCornerPosition_t position, uint16_t color)
-{
-  int16_t f = 1 - radius;
-  int16_t ddF_x = 1;
-  int16_t ddF_y = -2 * radius;
-  int16_t x = 0;
-  int16_t y = radius;
-  int16_t xc_px, yc_my, xc_mx, xc_py, yc_mx, xc_my;
-  int16_t lcdWidth = lcdGetWidth();
-
-  switch (position)
-  {
-    case DRAW_CORNERPOSITION_TOPRIGHT:
-    case DRAW_CORNERPOSITION_TOPLEFT:
-      if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter-radius, xCenter, yCenter, color);
-      break;
-    case DRAW_CORNERPOSITION_BOTTOMRIGHT:
-    case DRAW_CORNERPOSITION_BOTTOMLEFT:
-      if (xCenter < lcdWidth) drawLine(xCenter, yCenter-radius < 0 ? 0 : yCenter, xCenter, (yCenter-radius) + (2*radius), color);
-      break;
-  }
-  
-  while (x<y) 
-  {
-    if (f >= 0) 
-    {
-      y--;
-      ddF_y += 2;
-      f += ddF_y;
-    }
-    x++;
-    ddF_x += 2;
-    f += ddF_x;
-
-    xc_px = xCenter+x;
-    xc_mx = xCenter-x;
-    xc_py = xCenter+y;
-    xc_my = xCenter-y;
-    yc_mx = yCenter-x;
-    yc_my = yCenter-y;
-
-    switch (position)
-    {
-      case DRAW_CORNERPOSITION_TOPRIGHT:
-        if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yc_my, xc_px, yCenter, color);
-        if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yc_mx, xc_py, yCenter, color);
-        break;
-      case DRAW_CORNERPOSITION_BOTTOMRIGHT:
-        if ((xc_px < lcdWidth) && (xc_px >= 0)) drawLine(xc_px, yCenter, xc_px, yc_my + 2*y, color);
-        if ((xc_py < lcdWidth) && (xc_py >= 0)) drawLine(xc_py, yCenter, xc_py, yc_mx + 2*x, color);
-        break;
-      case DRAW_CORNERPOSITION_TOPLEFT:
-        if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yc_my, xc_mx, yCenter, color);
-        if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yc_mx, xc_my, yCenter, color);
-        break;
-      case DRAW_CORNERPOSITION_BOTTOMLEFT:
-        if ((xc_mx < lcdWidth) && (xc_mx >= 0)) drawLine(xc_mx, yCenter, xc_mx, yc_my + 2*y, color);
-        if ((xc_my < lcdWidth) && (xc_my >= 0)) drawLine(xc_my, yCenter, xc_my, yc_mx + 2*x, color);
-        break;
-    }
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a simple arrow of the specified width
-
-    @param[in]  x
-                X co-ordinate of the smallest point of the arrow
-    @param[in]  y
-                Y co-ordinate of the smallest point of the arrow
-    @param[in]  size
-                Total width/height of the arrow in pixels
-    @param[in]  direction
-                The direction that the arrow is pointing
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawArrow(uint16_t x, uint16_t y, uint16_t size, drawDirection_t direction, uint16_t color)
-{
-  drawPixel(x, y, color);
-
-  if (size == 1)
-  {
-    return;
-  }
-
-  uint32_t i;
-  switch (direction)
-  {
-    case DRAW_DIRECTION_LEFT:
-      for (i = 1; i<size; i++)
-      {
-        drawLine(x+i, y-i, x+i, y+i, color);
-      }
-      break;
-    case DRAW_DIRECTION_RIGHT:
-      for (i = 1; i<size; i++)
-      {
-        drawLine(x-i, y-i, x-i, y+i, color);
-      }
-      break;
-    case DRAW_DIRECTION_UP:
-      for (i = 1; i<size; i++)
-      {
-        drawLine(x-i, y+i, x+i, y+i, color);
-      }
-      break;
-    case DRAW_DIRECTION_DOWN:
-      for (i = 1; i<size; i++)
-      {
-        drawLine(x-i, y-i, x+i, y-i, color);
-      }
-      break;
-    default:
-      break;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a simple (empty) rectangle
-
-    @param[in]  x0
-                Starting x co-ordinate
-    @param[in]  y0
-                Starting y co-ordinate
-    @param[in]  x1
-                Ending x co-ordinate
-    @param[in]  y1
-                Ending y co-ordinate
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawRectangle ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
-{
-  uint16_t x, y;
-
-  if (y1 < y0)
-  {
-    // Switch y1 and y0
-    y = y1;
-    y1 = y0;
-    y0 = y;
-  }
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  drawLine (x0, y0, x1, y0, color);
-  drawLine (x1, y0, x1, y1, color);
-  drawLine (x1, y1, x0, y1, color);
-  drawLine (x0, y1, x0, y0, color);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a filled rectangle
-
-    @param[in]  x0
-                Starting x co-ordinate
-    @param[in]  y0
-                Starting y co-ordinate
-    @param[in]  x1
-                Ending x co-ordinate
-    @param[in]  y1
-                Ending y co-ordinate
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawRectangleFilled ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color)
-{
-  int height;
-  uint16_t x, y;
-
-  if (y1 < y0)
-  {
-    // Switch y1 and y0
-    y = y1;
-    y1 = y0;
-    y0 = y;
-  }
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  height = y1 - y0;
-  for (height = y0; y1 > height - 1; ++height)
-  {
-    drawLine(x0, height, x1, height, color);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a filled rectangle with rounded corners
-
-    @param[in]  x0
-                Starting x co-ordinate
-    @param[in]  y0
-                Starting y co-ordinate
-    @param[in]  x1
-                Ending x co-ordinate
-    @param[in]  y1
-                Ending y co-ordinate
-    @param[in]  color
-                Color used when drawing
-    @param[in]  radius
-                Corner radius in pixels
-    @param[in]  corners
-                Which corners to round
-*/
-/**************************************************************************/
-void drawRectangleRounded ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color, uint16_t radius, drawRoundedCorners_t corners )
-{
-  int height;
-  uint16_t y;
-
-  if (corners == DRAW_ROUNDEDCORNERS_NONE)
-  {
-    drawRectangleFilled(x0, y0, x1, y1, color);
-    return;
-  }
-
-  // Calculate height
-  if (y1 < y0)
-  {
-    y = y1;
-    y1 = y0;
-    y0 = y;
-  }
-  height = y1 - y0;
-
-  // Check radius
-  if (radius > height / 2)
-  {
-    radius = height / 2;
-  }
-  radius -= 1;
-
-  // Draw body  
-  drawRectangleFilled(x0 + radius, y0, x1 - radius, y1, color);
-
-  switch (corners)
-  {
-    case DRAW_ROUNDEDCORNERS_ALL:
-      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
-      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
-      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
-      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
-      if (radius*2+1 < height)
-      {
-        drawRectangleFilled(x0, y0 + radius, x0 + radius, y1 - radius, color);
-        drawRectangleFilled(x1 - radius, y0 + radius, x1, y1 - radius, color);
-      }
-      break;
-    case DRAW_ROUNDEDCORNERS_TOP:
-      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
-      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
-      drawRectangleFilled(x0, y0 + radius, x0 + radius, y1, color); 
-      drawRectangleFilled(x1 - radius, y0 + radius, x1, y1, color); 
-      break;
-    case DRAW_ROUNDEDCORNERS_BOTTOM:
-      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
-      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
-      drawRectangleFilled(x0, y0, x0 + radius, y1 - radius, color);
-      drawRectangleFilled(x1 - radius, y0, x1, y1 - radius, color);
-      break;
-    case DRAW_ROUNDEDCORNERS_LEFT:
-      drawCircleFilled(x0 + radius, y0 + radius, radius, color);
-      drawCircleFilled(x0 + radius, y1 - radius, radius, color);
-      if (radius*2+1 < height)
-      {
-        drawRectangleFilled(x0, y0 + radius, x0 + radius, y1 - radius, color);
-      }
-      drawRectangleFilled(x1 - radius, y0, x1, y1, color);
-      break;
-    case DRAW_ROUNDEDCORNERS_RIGHT:
-      drawCircleFilled(x1 - radius, y0 + radius, radius, color);
-      drawCircleFilled(x1 - radius, y1 - radius, radius, color);
-      if (radius*2+1 < height)
-      {
-        drawRectangleFilled(x1 - radius, y0 + radius, x1, y1 - radius, color);
-      }
-      drawRectangleFilled(x0, y0, x0 + radius, y1, color);
-      break;
-    default:
-      break;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a triangle
-
-    @param[in]  x0
-                x co-ordinate for point 0
-    @param[in]  y0
-                y co-ordinate for point 0
-    @param[in]  x1
-                x co-ordinate for point 1
-    @param[in]  y1
-                y co-ordinate for point 1
-    @param[in]  x2
-                x co-ordinate for point 2
-    @param[in]  y2
-                y co-ordinate for point 2
-    @param[in]  color
-                Color used when drawing
-*/
-/**************************************************************************/
-void drawTriangle ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
-{
-  drawLine(x0, y0, x1, y1, color);
-  drawLine(x1, y1, x2, y2, color);
-  drawLine(x2, y2, x0, y0, color);  
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a filled triangle
-
-    @param[in]  x0
-                x co-ordinate for point 0
-    @param[in]  y0
-                y co-ordinate for point 0
-    @param[in]  x1
-                x co-ordinate for point 1
-    @param[in]  y1
-                y co-ordinate for point 1
-    @param[in]  x2
-                x co-ordinate for point 2
-    @param[in]  y2
-                y co-ordinate for point 2
-    @param[in]  color
-                Fill color
-
-    @section Example
-
-    @code
-
-    // Draw a white triangle
-    drawTriangleFilled ( 100, 10, 20, 120, 230, 290, COLOR_WHITE);
-    // Draw black circles at each point of the triangle
-    drawCircleFilled(100, 10, 2, COLOR_BLACK);
-    drawCircleFilled(20, 120, 2, COLOR_BLACK);
-    drawCircleFilled(230, 290, 2, COLOR_BLACK);
-
-    @endcode
-*/
-/**************************************************************************/
-void drawTriangleFilled ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color)
-{
-  // Re-order vertices by ascending Y values (smallest first)
-  if (y0 > y1) {
-    drawSwap(y0, y1); drawSwap(x0, x1);
-  }
-  if (y1 > y2) {
-    drawSwap(y2, y1); drawSwap(x2, x1);
-  }
-  if (y0 > y1) {
-    drawSwap(y0, y1); drawSwap(x0, x1);
-  }
-
-  int32_t dx1, dx2, dx3;    // Interpolation deltas
-  int32_t sx1, sx2, sy;     // Scanline co-ordinates
-
-  sx1=sx2=x0 * 1000;        // Use fixed point math for x axis values
-  sy=y0;
-
-  // Calculate interpolation deltas
-  if (y1-y0 > 0) dx1=((x1-x0)*1000)/(y1-y0);
-    else dx1=0;
-  if (y2-y0 > 0) dx2=((x2-x0)*1000)/(y2-y0);
-    else dx2=0;
-  if (y2-y1 > 0) dx3=((x2-x1)*1000)/(y2-y1);
-    else dx3=0;
-
-  // Render scanlines (horizontal lines are the fastest rendering method)
-  if (dx1 > dx2) 
-  {
-    for(; sy<=y1; sy++, sx1+=dx2, sx2+=dx1)
-    {
-      drawLine(sx1/1000, sy, sx2/1000, sy, color);
-    }
-    sx2 = x1*1000;
-    sy = y1;
-    for(; sy<=y2; sy++, sx1+=dx2, sx2+=dx3)
-    {
-      drawLine(sx1/1000, sy, sx2/1000, sy, color);
-    }
-  } 
-  else 
-  {
-    for(; sy<=y1; sy++, sx1+=dx1, sx2+=dx2)
-    {
-      drawLine(sx1/1000, sy, sx2/1000, sy, color);
-    }
-    sx1 = x1*1000;
-    sy = y1;
-    for(; sy<=y2; sy++, sx1+=dx3, sx2+=dx2)
-    {
-      drawLine(sx1/1000, sy, sx2/1000, sy, color);
-    }
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Converts a 24-bit RGB color to an equivalent 16-bit RGB565 value
-
-    @param[in]  r
-                8-bit red
-    @param[in]  g
-                8-bit green
-    @param[in]  b
-                8-bit blue
-
-    @section Example
-
-    @code 
-
-    // Get 16-bit equivalent of 24-bit color
-    uint16_t gray = drawRGB24toRGB565(0x33, 0x33, 0x33);
-
-    @endcode
-*/
-/**************************************************************************/
-uint16_t drawRGB24toRGB565(uint8_t r, uint8_t g, uint8_t b)
-{
-  return ((r / 8) << 11) | ((g / 4) << 5) | (b / 8);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Converts a 16-bit RGB565 color to a standard 32-bit BGRA32
-            color (with alpha set to 0xFF)
-
-    @param[in]  color
-                16-bit rgb565 color
-
-    @section Example
-
-    @code 
-
-    // First convert 24-bit color to RGB565
-    uint16_t rgb565 = drawRGB24toRGB565(0xFF, 0x00, 0x00);
-  
-    // Convert RGB565 color back to BGRA32
-    uint32_t bgra32 = drawRGB565toBGRA32(rgb565);
-  
-    // Display results
-    printf("BGRA32: 0x%08X R: %u G: %u B: %u A: %u \r\n", 
-        bgra32, 
-        (bgra32 & 0x000000FF),        // Blue
-        (bgra32 & 0x0000FF00) >> 8,   // Green
-        (bgra32 & 0x00FF0000) >> 16,  // Red
-        (bgra32 & 0xFF000000) >> 24); // Alpha
-
-    @endcode
-*/
-/**************************************************************************/
-uint32_t drawRGB565toBGRA32(uint16_t color)
-{
-  uint32_t bits = (uint32_t)color;
-  uint32_t blue = bits & 0x001F;     // 5 bits blue
-  uint32_t green = bits & 0x07E0;    // 6 bits green
-  uint32_t red = bits & 0xF800;      // 5 bits red
-
-  // Return shifted bits with alpha set to 0xFF
-  return (red << 8) | (green << 5) | (blue << 3) | 0xFF000000;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Reverses a 16-bit color from BGR to RGB
-*/
-/**************************************************************************/
-uint16_t drawBGR2RGB(uint16_t color)
-{   
-  uint16_t r, g, b;   
-   
-  b = (color>>0)  & 0x1f;   
-  g = (color>>5)  & 0x3f;   
-  r = (color>>11) & 0x1f;   
-     
-  return( (b<<11) + (g<<5) + (r<<0) );
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a progress bar with rounded corners
-
-    @param[in]  x
-                Starting x location
-    @param[in]  y
-                Starting y location
-    @param[in]  width
-                Total width of the progress bar in pixels
-    @param[in]  height
-                Total height of the progress bar in pixels
-    @param[in]  borderCorners
-                The type of rounded corners to render with the progress bar border
-    @param[in]  progressCorners
-                The type of rounded corners to render with the inner progress bar
-    @param[in]  borderColor
-                16-bit color for the outer border
-    @param[in]  borderFillColor
-                16-bit color for the interior of the outer border
-    @param[in]  progressBorderColor
-                16-bit color for the progress bar's border
-    @param[in]  progressFillColor
-                16-bit color for the inner bar's fill
-    @param[in]  progress
-                Progress percentage (between 0 and 100)
-
-    @section Example
-
-    @code 
-    #include "drivers/lcd/tft/drawing.h"
-
-    // Draw a the progress bar (150x15 pixels large, starting at X:10, Y:195
-    // with rounded corners on the top and showing 72% progress)
-    drawProgressBar(10, 195, 150, 15, DRAW_ROUNDEDCORNERS_TOP, DRAW_ROUNDEDCORNERS_TOP, COLOR_DARKERGRAY, COLOR_DARKGRAY, COLOR_LIMEGREENDIM, COLOR_LIMEGREEN, 72 );
-
-    @endcode
-*/
-/**************************************************************************/
-void drawProgressBar ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, drawRoundedCorners_t borderCorners, drawRoundedCorners_t progressCorners, uint16_t borderColor, uint16_t borderFillColor, uint16_t progressBorderColor, uint16_t progressFillColor, uint8_t progress )
-{
-  // Draw border with rounded corners
-  drawRectangleRounded(x, y, x + width, y + height, borderColor, 5, borderCorners);
-  drawRectangleRounded(x+1, y+1, x + width - 1, y + height - 1, borderFillColor, 5, borderCorners);
-
-  // Progress bar
-  if (progress > 0 && progress <= 100)
-  {
-    // Calculate bar size
-    uint16_t bw;
-    bw = (width - 6);   // bar at 100%
-    if (progress != 100)
-    {
-      bw = (bw * progress) / 100;
-    } 
-    drawRectangleRounded(x + 3, y + 3, bw + x + 3, y + height - 3, progressBorderColor, 5, progressCorners);
-    drawRectangleRounded(x + 4, y + 4, bw + x + 3 - 1, y + height - 4, progressFillColor, 5, progressCorners);
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Draws a simple button
-
-    @param[in]  x
-                Starting x location
-    @param[in]  y
-                Starting y location
-    @param[in]  width
-                Total width of the button in pixels
-    @param[in]  height
-                Total height of the button in pixels
-    @param[in]  fontInfo
-                Pointer to the FONT_INFO used to render the button text
-    @param[in]  fontHeight
-                The height in pixels of the font (used for centering)
-    @param[in]  borderclr
-                The rgb565 border color
-    @param[in]  fillclr
-                The rgb565 background color
-    @param[in]  fontclr
-                The rgb565 font color
-    @param[in]  text
-                The text to render on the button
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/drawing.h"  
-    #include "drivers/lcd/tft/fonts/dejavusans9.h"
-
-    // Draw two buttons using Vera Sans Bold 9
-    drawButton(20, 195, 200, 35, &dejaVuSans9ptFontInfo, 7, COLOR_GRAY_80, COLOR_GRAY_80, COLOR_WHITE, "System Settings");
-    drawButton(20, 235, 200, 35, &dejaVuSans9ptFontInfo, 7, COLOR_THEME_LIMEGREEN_DARKER, COLOR_THEME_LIMEGREEN_BASE, COLOR_BLACK, "System Settings");
-
-    @endcode
-*/
-/**************************************************************************/
-void drawButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, const FONT_INFO *fontInfo, uint16_t fontHeight, uint16_t borderclr, uint16_t fillclr, uint16_t fontclr, char* text)
-{
-  // Border
-  drawRectangleRounded(x, y, x + width, y + height, borderclr, 5, DRAW_ROUNDEDCORNERS_ALL);
-  // Fill
-  drawRectangleRounded(x+2, y+2, x+width-2, y+height-2, fillclr, 5, DRAW_ROUNDEDCORNERS_ALL);
-
-  // Render text
-  if (text != NULL)
-  {
-    uint16_t textWidth = drawGetStringWidth(&*fontInfo, text);
-    uint16_t xStart = x + (width / 2) - (textWidth / 2);
-    uint16_t yStart = y + (height / 2) - (fontHeight / 2) + 1;
-    drawString(xStart, yStart, fontclr, &*fontInfo, text);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a 16x16 monochrome icon using the supplied uint16_t
-            array.
-
-    @param[in]  x
-                The horizontal location to start rendering from
-    @param[in]  x
-                The vertical location to start rendering from
-    @param[in]  color
-                The RGB565 color to use when rendering the icon
-    @param[in]  icon
-                The uint16_t array containing the 16x16 image data
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/drawing.h"  
-    #include "drivers/lcd/icons16.h"
-
-    // Renders the info icon, which has two seperate parts ... the exterior
-    // and a seperate interior mask if you want to fill the contents with a
-    // different color
-    drawIcon16(132, 202, COLOR_BLUE, icons16_info);
-    drawIcon16(132, 202, COLOR_WHITE, icons16_info_interior);
-
-    @endcode
-*/
-/**************************************************************************/
-void drawIcon16(uint16_t x, uint16_t y, uint16_t color, uint16_t icon[])
-{
-  int i;
-  for (i = 0; i<16; i++)
-  {
-    if (icon[i] & (0X8000)) drawPixel(x, y+i, color);
-    if (icon[i] & (0X4000)) drawPixel(x+1, y+i, color);
-    if (icon[i] & (0X2000)) drawPixel(x+2, y+i, color);
-    if (icon[i] & (0X1000)) drawPixel(x+3, y+i, color);
-    if (icon[i] & (0X0800)) drawPixel(x+4, y+i, color);
-    if (icon[i] & (0X0400)) drawPixel(x+5, y+i, color);
-    if (icon[i] & (0X0200)) drawPixel(x+6, y+i, color);
-    if (icon[i] & (0X0100)) drawPixel(x+7, y+i, color);
-    if (icon[i] & (0X0080)) drawPixel(x+8, y+i, color);
-    if (icon[i] & (0x0040)) drawPixel(x+9, y+i, color);
-    if (icon[i] & (0X0020)) drawPixel(x+10, y+i, color);
-    if (icon[i] & (0X0010)) drawPixel(x+11, y+i, color);
-    if (icon[i] & (0X0008)) drawPixel(x+12, y+i, color);
-    if (icon[i] & (0X0004)) drawPixel(x+13, y+i, color);
-    if (icon[i] & (0X0002)) drawPixel(x+14, y+i, color);
-    if (icon[i] & (0X0001)) drawPixel(x+15, y+i, color);
-  }
-}
-
-#ifdef CFG_SDCARD
-/**************************************************************************/
-/*!
-    @brief  Loads a 24-bit Windows bitmap image from an SD card and
-            renders it
-
-    @section Example
-
-    @code 
-
-    #include "drivers/lcd/tft/drawing.h"
-
-    // Draw image.bmp (from the root folder) starting at pixel 0,0
-    bmp_error_t error = drawBitmapImage(0, 0, "/image.bmp");
-
-    if (error)
-    {
-      switch (error)
-      {
-        case BMP_ERROR_SDINITFAIL:
-          break;
-        case BMP_ERROR_FILENOTFOUND:
-          break;
-        case BMP_ERROR_NOTABITMAP:
-          // First two bytes of image not 'BM'
-          break;
-        case BMP_ERROR_INVALIDBITDEPTH:
-          // Image is not 24-bits
-          break;
-        case BMP_ERROR_COMPRESSEDDATA:
-          // Image contains compressed data
-          break;
-        case BMP_ERROR_INVALIDDIMENSIONS:
-          // Width or Height is > LCD size
-          break;
-        case BMP_ERROR_PREMATUREEOF:
-          // EOF unexpectedly reached in pixel data
-          break;
-      }
-    }
-        
-    @endcode
-*/
-/**************************************************************************/
-bmp_error_t drawBitmapImage(uint16_t x, uint16_t y, char *filename)
-{
-  return bmpDrawBitmap(x, y, filename);
-}
-
-#endif
diff --git a/drivers/lcd/tft/drawing.h b/drivers/lcd/tft/drawing.h
deleted file mode 100644 (file)
index d443bfd..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     drawing.h
-    @author   K. Townsend (microBuilder.eu)
-    @date     22 March 2010
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __DRAWING_H__
-#define __DRAWING_H__
-
-#include "projectconfig.h"
-#include "lcd.h"
-#include "colors.h"
-#include "drivers/lcd/tft/fonts/bitmapfonts.h"
-
-#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
-  #include "drivers/lcd/smallfonts.h"
-#endif
-
-#ifdef CFG_SDCARD
-  #include "bmp.h"
-#endif
-
-typedef struct
-{
-  uint8_t red;
-  uint8_t green;
-  uint8_t blue;
-} drawColorRGB24_t;
-
-typedef enum
-{
-  DRAW_ROUNDEDCORNERS_NONE    = 0,
-  DRAW_ROUNDEDCORNERS_ALL     = 1,
-  DRAW_ROUNDEDCORNERS_TOP     = 2,
-  DRAW_ROUNDEDCORNERS_BOTTOM  = 3,
-  DRAW_ROUNDEDCORNERS_LEFT    = 4,
-  DRAW_ROUNDEDCORNERS_RIGHT   = 5
-} drawRoundedCorners_t;
-
-typedef enum
-{
-  DRAW_CORNERPOSITION_TOPLEFT     = 0,
-  DRAW_CORNERPOSITION_TOPRIGHT    = 1,
-  DRAW_CORNERPOSITION_BOTTOMLEFT  = 2,
-  DRAW_CORNERPOSITION_BOTTOMRIGHT = 3
-} drawCornerPosition_t;
-
-typedef enum
-{
-  DRAW_DIRECTION_LEFT,
-  DRAW_DIRECTION_RIGHT,
-  DRAW_DIRECTION_UP,
-  DRAW_DIRECTION_DOWN
-} drawDirection_t;
-
-void      drawTestPattern      ( void );
-void      drawPixel            ( uint16_t x, uint16_t y, uint16_t color );
-void      drawFill             ( uint16_t color );
-void      drawLine             ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
-void      drawLineDotted       ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t space, uint16_t solid, uint16_t color );
-void      drawCircle           ( uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color );
-void      drawCircleFilled     ( uint16_t xCenter, uint16_t yCenter, uint16_t radius, uint16_t color );
-void      drawCornerFilled     (uint16_t xCenter, uint16_t yCenter, uint16_t radius, drawCornerPosition_t position, uint16_t color);
-void      drawArrow            ( uint16_t x, uint16_t y, uint16_t size, drawDirection_t, uint16_t color );
-void      drawRectangle        ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
-void      drawRectangleFilled  ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color );
-void      drawRectangleRounded ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t color, uint16_t radius, drawRoundedCorners_t corners );
-void      drawTriangle         ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
-void      drawTriangleFilled   ( uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
-void      drawString           ( uint16_t x, uint16_t y, uint16_t color, const FONT_INFO *fontInfo, char *str );
-uint16_t  drawGetStringWidth   ( const FONT_INFO *fontInfo, char *str );
-void      drawProgressBar      ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, drawRoundedCorners_t borderCorners, drawRoundedCorners_t progressCorners, uint16_t borderColor, uint16_t borderFillColor, uint16_t progressBorderColor, uint16_t progressFillColor, uint8_t progress );
-void      drawButton           ( uint16_t x, uint16_t y, uint16_t width, uint16_t height, const FONT_INFO *fontInfo, uint16_t fontHeight, uint16_t borderclr, uint16_t fillclr, uint16_t fontclr, char* text );
-void      drawIcon16           ( uint16_t x, uint16_t y, uint16_t color, uint16_t icon[] );
-uint16_t  drawRGB24toRGB565    ( uint8_t r, uint8_t g, uint8_t b );
-uint32_t  drawRGB565toBGRA32   ( uint16_t color );
-uint16_t  drawBGR2RGB          ( uint16_t color );
-
-#if defined CFG_TFTLCD_INCLUDESMALLFONTS & CFG_TFTLCD_INCLUDESMALLFONTS == 1
-void      drawStringSmall      ( uint16_t x, uint16_t y, uint16_t color, char* text, struct FONT_DEF font );
-#endif
-
-#if defined CFG_SDCARD
-bmp_error_t   drawBitmapImage  ( uint16_t x, uint16_t y, char *filename );
-#endif
-
-#endif
diff --git a/drivers/lcd/tft/fonts/bitmapfonts.h b/drivers/lcd/tft/fonts/bitmapfonts.h
deleted file mode 100644 (file)
index 68f234d..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     bitmapfonts.h
-    @author   K. Townsend (microBuilder.eu)
-    @date     22 March 2010
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __BITMAPFONTS_H__
-#define __BITMAPFONTS_H__
-
-#include "projectconfig.h"
-
-/**************************************************************************/
-/*! 
-    @brief Describes a single character's display information
-*/
-/**************************************************************************/
-typedef struct
-{
-  const uint8_t widthBits;              // width, in bits (or pixels), of the character
-  const uint16_t offset;                // offset of the character's bitmap, in bytes, into the the FONT_INFO's data array
-} FONT_CHAR_INFO;      
-
-/**************************************************************************/
-/*! 
-    @brief Describes a single font
-*/
-/**************************************************************************/
-typedef struct
-{
-  const uint8_t           height;       // height of the font's characters
-  const uint8_t           startChar;    // the first character in the font (e.g. in charInfo and data)
-  const uint8_t           endChar;      // the last character in the font (e.g. in charInfo and data)
-  const FONT_CHAR_INFO*          charInfo;     // pointer to array of char information
-  const uint8_t*          data;         // pointer to generated array of character visual representation
-} FONT_INFO;
-
-#endif
diff --git a/drivers/lcd/tft/fonts/dejavusans9.c b/drivers/lcd/tft/fonts/dejavusans9.c
deleted file mode 100644 (file)
index 1c5210b..0000000
+++ /dev/null
@@ -1,1545 +0,0 @@
-#include "dejavusans9.h"
-
-/* 
-**  Font data for DejaVu Sans 9pt
-*/
-
-/* Character bitmaps for DejaVu Sans 9pt */
-const uint8_t dejaVuSans9ptBitmaps[] = 
-{
-       /* @0 ' ' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @13 '!' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @26 '"' (3 pixels wide) */
-       0x00, /*          */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @39 '#' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x12, /*    #  #  */
-       0x14, /*    # #   */
-       0x7F, /*  ####### */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0xFE, /* #######  */
-       0x28, /*   # #    */
-       0x48, /*  #  #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @52 '$' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x70, /*  ###     */
-       0xA8, /* # # #    */
-       0xA0, /* # #      */
-       0xE0, /* ###      */
-       0x38, /*   ###    */
-       0x28, /*   # #    */
-       0xA8, /* # # #    */
-       0x70, /*  ###     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-
-       /* @65 '%' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x61, 0x00, /*  ##    #         */
-       0x92, 0x00, /* #  #  #          */
-       0x92, 0x00, /* #  #  #          */
-       0x94, 0x00, /* #  # #           */
-       0x6D, 0x80, /*  ## ## ##        */
-       0x0A, 0x40, /*     # #  #       */
-       0x12, 0x40, /*    #  #  #       */
-       0x12, 0x40, /*    #  #  #       */
-       0x21, 0x80, /*   #    ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @91 '&' (8 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x48, /*  #  #    */
-       0x40, /*  #       */
-       0x60, /*  ##      */
-       0x51, /*  # #   # */
-       0x89, /* #   #  # */
-       0x86, /* #    ##  */
-       0xC4, /* ##   #   */
-       0x7B, /*  #### ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @104 ''' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @117 '(' (3 pixels wide) */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @130 ')' (3 pixels wide) */
-       0xC0, /* ##       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @143 '*' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0xA8, /* # # #    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0xA8, /* # # #    */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @156 '+' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @169 ',' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @182 '-' (3 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @195 '.' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @208 '/' (4 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @221 '0' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x48, /*  #  #    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x48, /*  #  #    */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @234 '1' (5 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @247 '2' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x8C, /* #   ##   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @260 '3' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x38, /*   ###    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @273 '4' (6 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x28, /*   # #    */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x88, /* #   #    */
-       0xFC, /* ######   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @286 '5' (6 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x0C, /*     ##   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x8C, /* #   ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @299 '6' (6 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x80, /* #        */
-       0xB8, /* # ###    */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x4C, /*  #  ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 '7' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @325 '8' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @338 '9' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0xC8, /* ##  #    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0x74, /*  ### #   */
-       0x04, /*      #   */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @351 ':' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @364 ';' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @377 '<' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x03, /*       ## */
-       0x1E, /*    ####  */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0x1E, /*    ####  */
-       0x03, /*       ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @390 '=' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @403 '>' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x78, /*  ####    */
-       0x07, /*      ### */
-       0x07, /*      ### */
-       0x78, /*  ####    */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @416 '?' (5 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @429 '@' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1F, 0x00, /*    #####         */
-       0x20, 0xC0, /*   #     ##       */
-       0x40, 0x40, /*  #       #       */
-       0x8F, 0x20, /* #   ####  #      */
-       0x91, 0x20, /* #  #   #  #      */
-       0x91, 0x20, /* #  #   #  #      */
-       0x91, 0x40, /* #  #   # #       */
-       0x8F, 0x80, /* #   #####        */
-       0x40, 0x00, /*  #               */
-       0x20, 0x80, /*   #     #        */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-
-       /* @455 'A' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x42, /*  #    #  */
-       0x7E, /*  ######  */
-       0x42, /*  #    #  */
-       0x81, /* #      # */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @468 'B' (6 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @481 'C' (6 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @494 'D' (7 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @507 'E' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @520 'F' (5 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @533 'G' (7 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x8E, /* #   ###  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @546 'H' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0xFE, /* #######  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @559 'I' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @572 'J' (3 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @585 'K' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @598 'L' (5 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @611 'M' (8 pixels wide) */
-       0x00, /*          */
-       0x81, /* #      # */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xA5, /* # #  # # */
-       0xA5, /* # #  # # */
-       0x99, /* #  ##  # */
-       0x99, /* #  ##  # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @624 'N' (7 pixels wide) */
-       0x00, /*          */
-       0xC2, /* ##    #  */
-       0xC2, /* ##    #  */
-       0xA2, /* # #   #  */
-       0xA2, /* # #   #  */
-       0x92, /* #  #  #  */
-       0x8A, /* #   # #  */
-       0x8A, /* #   # #  */
-       0x86, /* #    ##  */
-       0x86, /* #    ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @637 'O' (7 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @650 'P' (6 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @663 'Q' (7 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x08, /*     #    */
-       0x04, /*      #   */
-       0x00, /*          */
-
-       /* @676 'R' (7 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @689 'S' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x80, /* #        */
-       0xC0, /* ##       */
-       0x78, /*  ####    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @702 'T' (7 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @715 'U' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0xC6, /* ##   ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @728 'V' (8 pixels wide) */
-       0x00, /*          */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @741 'W' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x84, 0x20, /* #    #    #      */
-       0x44, 0x40, /*  #   #   #       */
-       0x44, 0x40, /*  #   #   #       */
-       0x4A, 0x40, /*  #  # #  #       */
-       0x2A, 0x80, /*   # # # #        */
-       0x2A, 0x80, /*   # # # #        */
-       0x2A, 0x80, /*   # # # #        */
-       0x11, 0x00, /*    #   #         */
-       0x11, 0x00, /*    #   #         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @767 'X' (7 pixels wide) */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0x44, /*  #   #   */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x44, /*  #   #   */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @780 'Y' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @793 'Z' (7 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x02, /*       #  */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @806 '[' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @819 '\' (4 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @832 ']' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @845 '^' (6 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x48, /*  #  #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @858 '_' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-
-       /* @871 '`' (2 pixels wide) */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @884 'a' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x04, /*      #   */
-       0x7C, /*  #####   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @897 'b' (6 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @910 'c' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0xC8, /* ##  #    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xC8, /* ##  #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @923 'd' (6 pixels wide) */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x7C, /*  #####   */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @936 'e' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0xC4, /* ##   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @949 'f' (4 pixels wide) */
-       0x30, /*   ##     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xF0, /* ####     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @962 'g' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0x7C, /*  #####   */
-       0x04, /*      #   */
-       0x4C, /*  #  ##   */
-       0x38, /*   ###    */
-
-       /* @975 'h' (6 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @988 'i' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1001 'j' (2 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-
-       /* @1014 'k' (5 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1027 'l' (1 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1040 'm' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF7, 0x00, /* #### ###         */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1066 'n' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1079 'o' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 'p' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1105 'q' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xCC, /* ##  ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xCC, /* ##  ##   */
-       0x7C, /*  #####   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-
-       /* @1118 'r' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB0, /* # ##     */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1131 's' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x80, /* #        */
-       0x70, /*  ###     */
-       0x08, /*     #    */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1144 't' (4 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xF0, /* ####     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1157 'u' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1170 'v' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1183 'w' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x55, 0x00, /*  # # # #         */
-       0x55, 0x00, /*  # # # #         */
-       0x55, 0x00, /*  # # # #         */
-       0x22, 0x00, /*   #   #          */
-       0x22, 0x00, /*   #   #          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1209 'x' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x30, /*   ##     */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1222 'y' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x28, /*   # #    */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-
-       /* @1235 'z' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1248 '{' (5 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x38, /*   ###    */
-       0x00, /*          */
-
-       /* @1261 '|' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1274 '}' (5 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xE0, /* ###      */
-       0x00, /*          */
-
-       /* @1287 '~' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x71, /*  ###   # */
-       0x8E, /* #   ###  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for DejaVu Sans 9pt */
-/* { [Char width in bits], [Offset into dejaVuSans9ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO dejaVuSans9ptDescriptors[] = 
-{
-       {5, 0},                 /*   */ 
-       {1, 13},                /* ! */ 
-       {3, 26},                /* " */ 
-       {8, 39},                /* # */ 
-       {5, 52},                /* $ */ 
-       {10, 65},               /* % */ 
-       {8, 91},                /* & */ 
-       {1, 104},               /* ' */ 
-       {3, 117},               /* ( */ 
-       {3, 130},               /* ) */ 
-       {5, 143},               /* * */ 
-       {7, 156},               /* + */ 
-       {1, 169},               /* , */ 
-       {3, 182},               /* - */ 
-       {1, 195},               /* . */ 
-       {4, 208},               /* / */ 
-       {6, 221},               /* 0 */ 
-       {5, 234},               /* 1 */ 
-       {6, 247},               /* 2 */ 
-       {6, 260},               /* 3 */ 
-       {6, 273},               /* 4 */ 
-       {6, 286},               /* 5 */ 
-       {6, 299},               /* 6 */ 
-       {6, 312},               /* 7 */ 
-       {6, 325},               /* 8 */ 
-       {6, 338},               /* 9 */ 
-       {1, 351},               /* : */ 
-       {1, 364},               /* ; */ 
-       {8, 377},               /* < */ 
-       {8, 390},               /* = */ 
-       {8, 403},               /* > */ 
-       {5, 416},               /* ? */ 
-       {11, 429},              /* @ */ 
-       {8, 455},               /* A */ 
-       {6, 468},               /* B */ 
-       {6, 481},               /* C */ 
-       {7, 494},               /* D */ 
-       {6, 507},               /* E */ 
-       {5, 520},               /* F */ 
-       {7, 533},               /* G */ 
-       {7, 546},               /* H */ 
-       {1, 559},               /* I */ 
-       {3, 572},               /* J */ 
-       {6, 585},               /* K */ 
-       {5, 598},               /* L */ 
-       {8, 611},               /* M */ 
-       {7, 624},               /* N */ 
-       {7, 637},               /* O */ 
-       {6, 650},               /* P */ 
-       {7, 663},               /* Q */ 
-       {7, 676},               /* R */ 
-       {6, 689},               /* S */ 
-       {7, 702},               /* T */ 
-       {7, 715},               /* U */ 
-       {8, 728},               /* V */ 
-       {11, 741},              /* W */ 
-       {7, 767},               /* X */ 
-       {7, 780},               /* Y */ 
-       {7, 793},               /* Z */ 
-       {2, 806},               /* [ */ 
-       {4, 819},               /* \ */ 
-       {2, 832},               /* ] */ 
-       {6, 845},               /* ^ */ 
-       {6, 858},               /* _ */ 
-       {2, 871},               /* ` */ 
-       {6, 884},               /* a */ 
-       {6, 897},               /* b */ 
-       {5, 910},               /* c */ 
-       {6, 923},               /* d */ 
-       {6, 936},               /* e */ 
-       {4, 949},               /* f */ 
-       {6, 962},               /* g */ 
-       {6, 975},               /* h */ 
-       {1, 988},               /* i */ 
-       {2, 1001},              /* j */ 
-       {5, 1014},              /* k */ 
-       {1, 1027},              /* l */ 
-       {9, 1040},              /* m */ 
-       {6, 1066},              /* n */ 
-       {6, 1079},              /* o */ 
-       {6, 1092},              /* p */ 
-       {6, 1105},              /* q */ 
-       {4, 1118},              /* r */ 
-       {5, 1131},              /* s */ 
-       {4, 1144},              /* t */ 
-       {6, 1157},              /* u */ 
-       {6, 1170},              /* v */ 
-       {9, 1183},              /* w */ 
-       {6, 1209},              /* x */ 
-       {6, 1222},              /* y */ 
-       {5, 1235},              /* z */ 
-       {5, 1248},              /* { */ 
-       {1, 1261},              /* | */ 
-       {5, 1274},              /* } */ 
-       {8, 1287},              /* ~ */ 
-};
-
-/* Font information for DejaVu Sans 9pt */
-const FONT_INFO dejaVuSans9ptFontInfo =
-{
-       13, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       dejaVuSans9ptDescriptors, /*  Character descriptor array */
-       dejaVuSans9ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/dejavusans9.h b/drivers/lcd/tft/fonts/dejavusans9.h
deleted file mode 100644 (file)
index c5f4af0..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __DEJA_VU_SANS_9__
-#define __DEJA_VU_SANS_9__
-
-#include "bitmapfonts.h"
-
-extern const uint8_t dejaVuSans9ptCharBitmaps[];
-extern const FONT_CHAR_INFO dejaVuSans9ptCharDescriptors[];
-extern const FONT_INFO dejaVuSans9ptFontInfo;
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/dejavusansbold9.c b/drivers/lcd/tft/fonts/dejavusansbold9.c
deleted file mode 100644 (file)
index bd18637..0000000
+++ /dev/null
@@ -1,1545 +0,0 @@
-#include "dejavusansbold9.h"
-
-/* 
-**  Font data for DejaVu Sans Bold 9pt
-*/
-
-/* Character bitmaps for DejaVu Sans Bold 9pt */
-const uint8_t dejaVuSansBold9ptBitmaps[] = 
-{
-       /* @0 ' ' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @13 '!' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @26 '"' (3 pixels wide) */
-       0x00, /*          */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @39 '#' (8 pixels wide) */
-       0x00, /*          */
-       0x12, /*    #  #  */
-       0x16, /*    # ##  */
-       0x7F, /*  ####### */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0xFE, /* #######  */
-       0x68, /*  ## #    */
-       0x68, /*  ## #    */
-       0x48, /*  #  #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @52 '$' (7 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0xD0, /* ## #     */
-       0xF0, /* ####     */
-       0xFC, /* ######   */
-       0x7E, /*  ######  */
-       0x1E, /*    ####  */
-       0x16, /*    # ##  */
-       0xFC, /* ######   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-
-       /* @65 '%' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x71, 0x00, /*  ###   #         */
-       0x89, 0x00, /* #   #  #         */
-       0x8A, 0x00, /* #   # #          */
-       0x8E, 0x00, /* #   ###          */
-       0x75, 0xC0, /*  ### # ###       */
-       0x0E, 0x20, /*     ###   #      */
-       0x0A, 0x20, /*     # #   #      */
-       0x12, 0x20, /*    #  #   #      */
-       0x11, 0xC0, /*    #   ###       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @91 '&' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x38, 0x00, /*   ###            */
-       0x64, 0x00, /*  ##  #           */
-       0x60, 0x00, /*  ##              */
-       0x30, 0x00, /*   ##             */
-       0x79, 0x80, /*  ####  ##        */
-       0xDD, 0x80, /* ## ### ##        */
-       0xCF, 0x00, /* ##  ####         */
-       0xC7, 0x00, /* ##   ###         */
-       0x7D, 0x80, /*  ##### ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @117 ''' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @130 '(' (4 pixels wide) */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @143 ')' (4 pixels wide) */
-       0xE0, /* ###      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @156 '*' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0xA8, /* # # #    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0xA8, /* # # #    */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @169 '+' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @182 ',' (3 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x00, /*          */
-
-       /* @195 '-' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @208 '.' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @221 '/' (4 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @234 '0' (7 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x6C, /*  ## ##   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x6C, /*  ## ##   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @247 '1' (6 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @260 '2' (7 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x86, /* #    ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @273 '3' (7 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x86, /* #    ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x3C, /*   ####   */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x86, /* #    ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @286 '4' (7 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x3C, /*   ####   */
-       0x2C, /*   # ##   */
-       0x4C, /*  #  ##   */
-       0xCC, /* ##  ##   */
-       0x8C, /* #   ##   */
-       0xFE, /* #######  */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @299 '5' (7 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0x0E, /*     ###  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x0E, /*     ###  */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 '6' (7 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x46, /*  #   ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @325 '7' (7 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @338 '8' (7 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x38, /*   ###    */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @351 '9' (7 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0xC4, /* ##   #   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @364 ':' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @377 ';' (3 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x00, /*          */
-
-       /* @390 '<' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x01, /*        # */
-       0x0F, /*     #### */
-       0x78, /*  ####    */
-       0xC0, /* ##       */
-       0x78, /*  ####    */
-       0x0F, /*     #### */
-       0x01, /*        # */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @403 '=' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @416 '>' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0xF0, /* ####     */
-       0x1E, /*    ####  */
-       0x03, /*       ## */
-       0x1E, /*    ####  */
-       0xF0, /* ####     */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @429 '?' (5 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @442 '@' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x21, 0x80, /*   #    ##        */
-       0x40, 0x80, /*  #      #        */
-       0x8E, 0x40, /* #   ###  #       */
-       0x92, 0x40, /* #  #  #  #       */
-       0x92, 0x40, /* #  #  #  #       */
-       0x92, 0xC0, /* #  #  # ##       */
-       0x8F, 0x80, /* #   #####        */
-       0x40, 0x00, /*  #               */
-       0x21, 0x00, /*   #    #         */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-
-       /* @468 'A' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x63, 0x00, /*  ##   ##         */
-       0x7F, 0x00, /*  #######         */
-       0x63, 0x00, /*  ##   ##         */
-       0xC1, 0x80, /* ##     ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @494 'B' (7 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @507 'C' (7 pixels wide) */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x62, /*  ##   #  */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x62, /*  ##   #  */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @520 'D' (8 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @533 'E' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @546 'F' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @559 'G' (8 pixels wide) */
-       0x00, /*          */
-       0x3F, /*   ###### */
-       0x61, /*  ##    # */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC7, /* ##   ### */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0x63, /*  ##   ## */
-       0x3F, /*   ###### */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @572 'H' (8 pixels wide) */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xFF, /* ######## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @585 'I' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @598 'J' (4 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xE0, /* ###      */
-       0x00, /*          */
-
-       /* @611 'K' (8 pixels wide) */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0xC6, /* ##   ##  */
-       0xCC, /* ##  ##   */
-       0xD8, /* ## ##    */
-       0xF0, /* ####     */
-       0xD8, /* ## ##    */
-       0xCC, /* ##  ##   */
-       0xC6, /* ##   ##  */
-       0xC3, /* ##    ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @624 'L' (6 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @637 'M' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE1, 0xC0, /* ###    ###       */
-       0xE1, 0xC0, /* ###    ###       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xD2, 0xC0, /* ## #  # ##       */
-       0xDE, 0xC0, /* ## #### ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @663 'N' (8 pixels wide) */
-       0x00, /*          */
-       0xE3, /* ###   ## */
-       0xE3, /* ###   ## */
-       0xF3, /* ####  ## */
-       0xD3, /* ## #  ## */
-       0xDB, /* ## ## ## */
-       0xCB, /* ##  # ## */
-       0xCF, /* ##  #### */
-       0xC7, /* ##   ### */
-       0xC7, /* ##   ### */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @676 'O' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x3E, 0x00, /*   #####          */
-       0x63, 0x00, /*  ##   ##         */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x3E, 0x00, /*   #####          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @702 'P' (7 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @715 'Q' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x3E, 0x00, /*   #####          */
-       0x63, 0x00, /*  ##   ##         */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x3E, 0x00, /*   #####          */
-       0x06, 0x00, /*      ##          */
-       0x03, 0x00, /*       ##         */
-       0x00, 0x00, /*                  */
-
-       /* @741 'R' (8 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0xCC, /* ##  ##   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC3, /* ##    ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @754 'S' (7 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xC4, /* ##   #   */
-       0xC0, /* ##       */
-       0xF0, /* ####     */
-       0x7C, /*  #####   */
-       0x0E, /*     ###  */
-       0x06, /*      ##  */
-       0x86, /* #    ##  */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @767 'T' (8 pixels wide) */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @780 'U' (8 pixels wide) */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @793 'V' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @819 'W' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC6, 0x30, /* ##   ##   ##     */
-       0xC6, 0x30, /* ##   ##   ##     */
-       0x6F, 0x60, /*  ## #### ##      */
-       0x6F, 0x60, /*  ## #### ##      */
-       0x69, 0x60, /*  ## #  # ##      */
-       0x79, 0xE0, /*  ####  ####      */
-       0x39, 0xC0, /*   ###  ###       */
-       0x30, 0xC0, /*   ##    ##       */
-       0x30, 0xC0, /*   ##    ##       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @845 'X' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x1C, 0x00, /*    ###           */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x63, 0x00, /*  ##   ##         */
-       0xC1, 0x80, /* ##     ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @871 'Y' (8 pixels wide) */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @884 'Z' (8 pixels wide) */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0x03, /*       ## */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @897 '[' (4 pixels wide) */
-       0xF0, /* ####     */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @910 '\' (4 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0xC0, /* ##       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @923 ']' (4 pixels wide) */
-       0xF0, /* ####     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @936 '^' (6 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @949 '_' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-
-       /* @962 '`' (3 pixels wide) */
-       0xC0, /* ##       */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @975 'a' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x46, /*  #   ##  */
-       0x06, /*      ##  */
-       0x7E, /*  ######  */
-       0xC6, /* ##   ##  */
-       0xCE, /* ##  ###  */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @988 'b' (7 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1001 'c' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x64, /*  ##  #   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x64, /*  ##  #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1014 'd' (7 pixels wide) */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x7E, /*  ######  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1027 'e' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x64, /*  ##  #   */
-       0xC6, /* ##   ##  */
-       0xFE, /* #######  */
-       0xC0, /* ##       */
-       0x62, /*  ##   #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1040 'f' (5 pixels wide) */
-       0x38, /*   ###    */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xF8, /* #####    */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1053 'g' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0xE6, /* ###  ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x46, /*  #   ##  */
-       0x3C, /*   ####   */
-
-       /* @1066 'h' (7 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0xE6, /* ###  ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1079 'i' (2 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 'j' (3 pixels wide) */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-
-       /* @1105 'k' (7 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xCC, /* ##  ##   */
-       0xD8, /* ## ##    */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xD8, /* ## ##    */
-       0xCC, /* ##  ##   */
-       0xC6, /* ##   ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1118 'l' (2 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1131 'm' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1157 'n' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xE6, /* ###  ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1170 'o' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1183 'p' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-
-       /* @1196 'q' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-
-       /* @1209 'r' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0xE0, /* ###      */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1222 's' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0xC4, /* ##   #   */
-       0xC0, /* ##       */
-       0x78, /*  ####    */
-       0x0C, /*     ##   */
-       0x8C, /* #   ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1235 't' (5 pixels wide) */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xF8, /* #####    */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1248 'u' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xCE, /* ##  ###  */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1261 'v' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1274 'w' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xDE, 0xC0, /* ## #### ##       */
-       0x5E, 0x80, /*  # #### #        */
-       0x73, 0x80, /*  ###  ###        */
-       0x73, 0x80, /*  ###  ###        */
-       0x33, 0x00, /*   ##  ##         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1300 'x' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0x6C, /*  ## ##   */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x6C, /*  ## ##   */
-       0xC6, /* ##   ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1313 'y' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x3C, /*   ####   */
-       0x38, /*   ###    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-
-       /* @1326 'z' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1339 '{' (6 pixels wide) */
-       0x1C, /*    ###   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xE0, /* ###      */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1352 '|' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1365 '}' (6 pixels wide) */
-       0xE0, /* ###      */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x1C, /*    ###   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1378 '~' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x71, /*  ###   # */
-       0x8E, /* #   ###  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for DejaVu Sans Bold 9pt */
-/* { [Char width in bits], [Offset into dejaVuSans9ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO dejaVuSansBold9ptDescriptors[] = 
-{
-       {5, 0},                 /*   */ 
-       {2, 13},                /* ! */ 
-       {3, 26},                /* " */ 
-       {8, 39},                /* # */ 
-       {7, 52},                /* $ */ 
-       {11, 65},               /* % */ 
-       {9, 91},                /* & */ 
-       {1, 117},               /* ' */ 
-       {4, 130},               /* ( */ 
-       {4, 143},               /* ) */ 
-       {5, 156},               /* * */ 
-       {7, 169},               /* + */ 
-       {3, 182},               /* , */ 
-       {4, 195},               /* - */ 
-       {2, 208},               /* . */ 
-       {4, 221},               /* / */ 
-       {7, 234},               /* 0 */ 
-       {6, 247},               /* 1 */ 
-       {7, 260},               /* 2 */ 
-       {7, 273},               /* 3 */ 
-       {7, 286},               /* 4 */ 
-       {7, 299},               /* 5 */ 
-       {7, 312},               /* 6 */ 
-       {7, 325},               /* 7 */ 
-       {7, 338},               /* 8 */ 
-       {7, 351},               /* 9 */ 
-       {2, 364},               /* : */ 
-       {3, 377},               /* ; */ 
-       {8, 390},               /* < */ 
-       {8, 403},               /* = */ 
-       {8, 416},               /* > */ 
-       {5, 429},               /* ? */ 
-       {10, 442},              /* @ */ 
-       {9, 468},               /* A */ 
-       {7, 494},               /* B */ 
-       {7, 507},               /* C */ 
-       {8, 520},               /* D */ 
-       {6, 533},               /* E */ 
-       {6, 546},               /* F */ 
-       {8, 559},               /* G */ 
-       {8, 572},               /* H */ 
-       {2, 585},               /* I */ 
-       {4, 598},               /* J */ 
-       {8, 611},               /* K */ 
-       {6, 624},               /* L */ 
-       {10, 637},              /* M */ 
-       {8, 663},               /* N */ 
-       {9, 676},               /* O */ 
-       {7, 702},               /* P */ 
-       {9, 715},               /* Q */ 
-       {8, 741},               /* R */ 
-       {7, 754},               /* S */ 
-       {8, 767},               /* T */ 
-       {8, 780},               /* U */ 
-       {9, 793},               /* V */ 
-       {12, 819},              /* W */ 
-       {9, 845},               /* X */ 
-       {8, 871},               /* Y */ 
-       {8, 884},               /* Z */ 
-       {4, 897},               /* [ */ 
-       {4, 910},               /* \ */ 
-       {4, 923},               /* ] */ 
-       {6, 936},               /* ^ */ 
-       {6, 949},               /* _ */ 
-       {3, 962},               /* ` */ 
-       {7, 975},               /* a */ 
-       {7, 988},               /* b */ 
-       {6, 1001},              /* c */ 
-       {7, 1014},              /* d */ 
-       {7, 1027},              /* e */ 
-       {5, 1040},              /* f */ 
-       {7, 1053},              /* g */ 
-       {7, 1066},              /* h */ 
-       {2, 1079},              /* i */ 
-       {3, 1092},              /* j */ 
-       {7, 1105},              /* k */ 
-       {2, 1118},              /* l */ 
-       {10, 1131},             /* m */ 
-       {7, 1157},              /* n */ 
-       {7, 1170},              /* o */ 
-       {7, 1183},              /* p */ 
-       {7, 1196},              /* q */ 
-       {5, 1209},              /* r */ 
-       {6, 1222},              /* s */ 
-       {5, 1235},              /* t */ 
-       {7, 1248},              /* u */ 
-       {7, 1261},              /* v */ 
-       {10, 1274},             /* w */ 
-       {7, 1300},              /* x */ 
-       {7, 1313},              /* y */ 
-       {6, 1326},              /* z */ 
-       {6, 1339},              /* { */ 
-       {1, 1352},              /* | */ 
-       {6, 1365},              /* } */ 
-       {8, 1378},              /* ~ */ 
-};
-
-/* Font information for DejaVu Sans Bold 9pt */
-const FONT_INFO dejaVuSansBold9ptFontInfo =
-{
-       13, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       dejaVuSansBold9ptDescriptors, /*  Character descriptor array */
-       dejaVuSansBold9ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/dejavusansbold9.h b/drivers/lcd/tft/fonts/dejavusansbold9.h
deleted file mode 100644 (file)
index d4b6490..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __DEJA_VU_SANS_BOLD_9__
-#define __DEJA_VU_SANS_BOLD_9__
-
-#include "bitmapfonts.h"
-
-extern const uint8_t dejaVuSansBold9ptCharBitmaps[];
-extern const FONT_CHAR_INFO dejaVuSansBold9ptCharDescriptors[];
-extern const FONT_INFO dejaVuSansBold9ptFontInfo;
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/dejavusanscondensed9.c b/drivers/lcd/tft/fonts/dejavusanscondensed9.c
deleted file mode 100644 (file)
index 1f2b834..0000000
+++ /dev/null
@@ -1,1545 +0,0 @@
-#include "dejavusanscondensed9.h"
-
-/* 
-**  Font data for DejaVu Sans Condensed 9pt
-*/
-
-/* Character bitmaps for DejaVu Sans Condensed 9pt */
-const uint8_t dejaVuSansCondensed9ptBitmaps[] = 
-{
-       /* @0 ' ' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @13 '!' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @26 '"' (3 pixels wide) */
-       0x00, /*          */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @39 '#' (7 pixels wide) */
-       0x00, /*          */
-       0x14, /*    # #   */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0xFE, /* #######  */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0xFE, /* #######  */
-       0x48, /*  #  #    */
-       0x50, /*  # #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @52 '$' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x70, /*  ###     */
-       0xA8, /* # # #    */
-       0xA0, /* # #      */
-       0xE0, /* ###      */
-       0x38, /*   ###    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0xF0, /* ####     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-
-       /* @65 '%' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE2, 0x00, /* ###   #          */
-       0xA4, 0x00, /* # #  #           */
-       0xA4, 0x00, /* # #  #           */
-       0xA8, 0x00, /* # # #            */
-       0xCA, 0x00, /* ##  # #          */
-       0x15, 0x00, /*    # # #         */
-       0x14, 0x80, /*    # #  #        */
-       0x24, 0x80, /*   #  #  #        */
-       0x43, 0x00, /*  #    ##         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @91 '&' (7 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xA2, /* # #   #  */
-       0x94, /* #  # #   */
-       0x8C, /* #   ##   */
-       0x8C, /* #   ##   */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @104 ''' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @117 '(' (2 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-
-       /* @130 ')' (2 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-
-       /* @143 '*' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0xA8, /* # # #    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0x28, /*   # #    */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @156 '+' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @169 ',' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @182 '-' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @195 '.' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @208 '/' (4 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @221 '0' (5 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @234 '1' (5 pixels wide) */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0xA0, /* # #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @247 '2' (5 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x98, /* #  ##    */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @260 '3' (5 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x18, /*    ##    */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0x70, /*  ###     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @273 '4' (5 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x90, /* #  #     */
-       0x90, /* #  #     */
-       0xF8, /* #####    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @286 '5' (5 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xE0, /* ###      */
-       0x18, /*    ##    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @299 '6' (5 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xB0, /* # ##     */
-       0xC8, /* ##  #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 '7' (5 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @325 '8' (5 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @338 '9' (5 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x98, /* #  ##    */
-       0x78, /*  ####    */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @351 ':' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @364 ';' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @377 '<' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x02, /*       #  */
-       0x1C, /*    ###   */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0x38, /*   ###    */
-       0x06, /*      ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @390 '=' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @403 '>' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x70, /*  ###     */
-       0x0C, /*     ##   */
-       0x06, /*      ##  */
-       0x38, /*   ###    */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @416 '?' (4 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @429 '@' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3E, 0x00, /*   #####          */
-       0x41, 0x00, /*  #     #         */
-       0x9A, 0x80, /* #  ## # #        */
-       0xA6, 0x80, /* # #  ## #        */
-       0xA2, 0x80, /* # #   # #        */
-       0xA2, 0x80, /* # #   # #        */
-       0x97, 0x00, /* #  # ###         */
-       0x88, 0x00, /* #   #            */
-       0x40, 0x00, /*  #               */
-       0x3E, 0x00, /*   #####          */
-       0x00, 0x00, /*                  */
-
-       /* @455 'A' (7 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x18, /*    ##    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x24, /*   #  #   */
-       0x44, /*  #   #   */
-       0x7C, /*  #####   */
-       0x42, /*  #    #  */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @468 'B' (6 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @481 'C' (6 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0xC4, /* ##   #   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xC0, /* ##       */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @494 'D' (7 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x8C, /* #   ##   */
-       0x84, /* #    #   */
-       0x86, /* #    ##  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @507 'E' (5 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @520 'F' (5 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF0, /* ####     */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @533 'G' (6 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0xC4, /* ##   #   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x8C, /* #   ##   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xC4, /* ##   #   */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @546 'H' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xFC, /* ######   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @559 'I' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @572 'J' (3 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xE0, /* ###      */
-       0x00, /*          */
-
-       /* @585 'K' (6 pixels wide) */
-       0x00, /*          */
-       0x8C, /* #   ##   */
-       0x98, /* #  ##    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x8C, /* #   ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @598 'L' (5 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @611 'M' (7 pixels wide) */
-       0x00, /*          */
-       0xC2, /* ##    #  */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xAA, /* # # # #  */
-       0xAA, /* # # # #  */
-       0xAA, /* # # # #  */
-       0x92, /* #  #  #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @624 'N' (6 pixels wide) */
-       0x00, /*          */
-       0xC4, /* ##   #   */
-       0xC4, /* ##   #   */
-       0xE4, /* ###  #   */
-       0xA4, /* # #  #   */
-       0xB4, /* # ## #   */
-       0x94, /* #  # #   */
-       0x94, /* #  # #   */
-       0x8C, /* #   ##   */
-       0x8C, /* #   ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @637 'O' (7 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0xC4, /* ##   #   */
-       0x86, /* #    ##  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x86, /* #    ##  */
-       0xC4, /* ##   #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @650 'P' (5 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x98, /* #  ##    */
-       0xE0, /* ###      */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @663 'Q' (7 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0xC4, /* ##   #   */
-       0x86, /* #    ##  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x86, /* #    ##  */
-       0xC4, /* ##   #   */
-       0x78, /*  ####    */
-       0x08, /*     #    */
-       0x04, /*      #   */
-       0x00, /*          */
-
-       /* @676 'R' (6 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF0, /* ####     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x8C, /* #   ##   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @689 'S' (5 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x88, /* #   #    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x70, /*  ###     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @702 'T' (7 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @715 'U' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @728 'V' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x42, /*  #    #  */
-       0x46, /*  #   ##  */
-       0x44, /*  #   #   */
-       0x24, /*   #  #   */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @741 'W' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x84, 0x40, /* #    #   #       */
-       0x4C, 0x40, /*  #  ##   #       */
-       0x4C, 0x40, /*  #  ##   #       */
-       0x4A, 0x40, /*  #  # #  #       */
-       0x4A, 0x80, /*  #  # # #        */
-       0x32, 0x80, /*   ##  # #        */
-       0x32, 0x80, /*   ##  # #        */
-       0x31, 0x80, /*   ##   ##        */
-       0x31, 0x00, /*   ##   #         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @767 'X' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0xC8, /* ##  #    */
-       0x58, /*  # ##    */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x70, /*  ###     */
-       0x58, /*  # ##    */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @780 'Y' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x44, /*  #   #   */
-       0x48, /*  #  #    */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @793 'Z' (7 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @806 '[' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @819 '\' (3 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @832 ']' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @845 '^' (7 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x28, /*   # #    */
-       0x44, /*  #   #   */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @858 '_' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-
-       /* @871 '`' (2 pixels wide) */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @884 'a' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x90, /* #  #     */
-       0x08, /*     #    */
-       0xF8, /* #####    */
-       0x88, /* #   #    */
-       0x98, /* #  ##    */
-       0xE8, /* ### #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @897 'b' (5 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xB0, /* # ##     */
-       0xC8, /* ##  #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @910 'c' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @923 'd' (5 pixels wide) */
-       0x00, /*          */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x68, /*  ## #    */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @936 'e' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @949 'f' (4 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x40, /*  #       */
-       0xF0, /* ####     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @962 'g' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x68, /*  ## #    */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x98, /* #  ##    */
-       0x68, /*  ## #    */
-       0x08, /*     #    */
-       0x90, /* #  #     */
-       0x60, /*  ##      */
-
-       /* @975 'h' (5 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xB0, /* # ##     */
-       0xD8, /* ## ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @988 'i' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1001 'j' (2 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-
-       /* @1014 'k' (5 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x98, /* #  ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1027 'l' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1040 'm' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xB3, 0x00, /* # ##  ##         */
-       0xDD, 0x00, /* ## ### #         */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1066 'n' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB0, /* # ##     */
-       0xD8, /* ## ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1079 'o' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 'p' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB0, /* # ##     */
-       0xC8, /* ##  #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF0, /* ####     */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1105 'q' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x68, /*  ## #    */
-       0x98, /* #  ##    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-
-       /* @1118 'r' (3 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1131 's' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x90, /* #  #     */
-       0x80, /* #        */
-       0xE0, /* ###      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1144 't' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0xF0, /* ####     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1157 'u' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1170 'v' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x44, /*  #   #   */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x28, /*   # #    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1183 'w' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x89, /* #   #  # */
-       0x49, /*  #  #  # */
-       0x59, /*  # ##  # */
-       0x55, /*  # # # # */
-       0x56, /*  # # ##  */
-       0x26, /*   #  ##  */
-       0x22, /*   #   #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1196 'x' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0x70, /*  ###     */
-       0x20, /*   #      */
-       0x60, /*  ##      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1209 'y' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x44, /*  #   #   */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x28, /*   # #    */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-
-       /* @1222 'z' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1235 '{' (5 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x38, /*   ###    */
-       0x00, /*          */
-
-       /* @1248 '|' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1261 '}' (5 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @1274 '~' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x9E, /* #  ####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for DejaVu Sans Condensed 9pt */
-/* { [Char width in bits], [Offset into dejaVuSansCondensed9ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO dejaVuSansCondensed9ptDescriptors[] = 
-{
-       {5, 0},                 /*   */ 
-       {1, 13},                /* ! */ 
-       {3, 26},                /* " */ 
-       {7, 39},                /* # */ 
-       {5, 52},                /* $ */ 
-       {9, 65},                /* % */ 
-       {7, 91},                /* & */ 
-       {1, 104},               /* ' */ 
-       {2, 117},               /* ( */ 
-       {2, 130},               /* ) */ 
-       {5, 143},               /* * */ 
-       {7, 156},               /* + */ 
-       {1, 169},               /* , */ 
-       {2, 182},               /* - */ 
-       {1, 195},               /* . */ 
-       {4, 208},               /* / */ 
-       {5, 221},               /* 0 */ 
-       {5, 234},               /* 1 */ 
-       {5, 247},               /* 2 */ 
-       {5, 260},               /* 3 */ 
-       {5, 273},               /* 4 */ 
-       {5, 286},               /* 5 */ 
-       {5, 299},               /* 6 */ 
-       {5, 312},               /* 7 */ 
-       {5, 325},               /* 8 */ 
-       {5, 338},               /* 9 */ 
-       {1, 351},               /* : */ 
-       {1, 364},               /* ; */ 
-       {7, 377},               /* < */ 
-       {7, 390},               /* = */ 
-       {7, 403},               /* > */ 
-       {4, 416},               /* ? */ 
-       {9, 429},               /* @ */ 
-       {7, 455},               /* A */ 
-       {6, 468},               /* B */ 
-       {6, 481},               /* C */ 
-       {7, 494},               /* D */ 
-       {5, 507},               /* E */ 
-       {5, 520},               /* F */ 
-       {6, 533},               /* G */ 
-       {6, 546},               /* H */ 
-       {1, 559},               /* I */ 
-       {3, 572},               /* J */ 
-       {6, 585},               /* K */ 
-       {5, 598},               /* L */ 
-       {7, 611},               /* M */ 
-       {6, 624},               /* N */ 
-       {7, 637},               /* O */ 
-       {5, 650},               /* P */ 
-       {7, 663},               /* Q */ 
-       {6, 676},               /* R */ 
-       {5, 689},               /* S */ 
-       {7, 702},               /* T */ 
-       {6, 715},               /* U */ 
-       {7, 728},               /* V */ 
-       {10, 741},              /* W */ 
-       {6, 767},               /* X */ 
-       {6, 780},               /* Y */ 
-       {7, 793},               /* Z */ 
-       {2, 806},               /* [ */ 
-       {3, 819},               /* \ */ 
-       {2, 832},               /* ] */ 
-       {7, 845},               /* ^ */ 
-       {6, 858},               /* _ */ 
-       {2, 871},               /* ` */ 
-       {5, 884},               /* a */ 
-       {5, 897},               /* b */ 
-       {4, 910},               /* c */ 
-       {5, 923},               /* d */ 
-       {5, 936},               /* e */ 
-       {4, 949},               /* f */ 
-       {5, 962},               /* g */ 
-       {5, 975},               /* h */ 
-       {1, 988},               /* i */ 
-       {2, 1001},              /* j */ 
-       {5, 1014},              /* k */ 
-       {1, 1027},              /* l */ 
-       {9, 1040},              /* m */ 
-       {5, 1066},              /* n */ 
-       {5, 1079},              /* o */ 
-       {5, 1092},              /* p */ 
-       {5, 1105},              /* q */ 
-       {3, 1118},              /* r */ 
-       {4, 1131},              /* s */ 
-       {4, 1144},              /* t */ 
-       {5, 1157},              /* u */ 
-       {6, 1170},              /* v */ 
-       {8, 1183},              /* w */ 
-       {5, 1196},              /* x */ 
-       {6, 1209},              /* y */ 
-       {5, 1222},              /* z */ 
-       {5, 1235},              /* { */ 
-       {1, 1248},              /* | */ 
-       {5, 1261},              /* } */ 
-       {7, 1274},              /* ~ */ 
-};
-
-/* Font information for DejaVu Sans Condensed 9pt */
-const FONT_INFO dejaVuSansCondensed9ptFontInfo =
-{
-       13, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       dejaVuSansCondensed9ptDescriptors, /*  Character descriptor array */
-       dejaVuSansCondensed9ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/dejavusanscondensed9.h b/drivers/lcd/tft/fonts/dejavusanscondensed9.h
deleted file mode 100644 (file)
index a07c51f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __DEJA_VU_SANS_CONDENSED_9__
-#define __DEJA_VU_SANS_CONDENSED_9__
-
-#include "bitmapfonts.h"
-
-extern const uint8_t dejaVuSansCondensed9ptCharBitmaps[];
-extern const FONT_CHAR_INFO dejaVuSansCondensed9ptCharDescriptors[];
-extern const FONT_INFO dejaVuSansCondensed9ptFontInfo;
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/dejavusansmono8.c b/drivers/lcd/tft/fonts/dejavusansmono8.c
deleted file mode 100644 (file)
index 13dccb9..0000000
+++ /dev/null
@@ -1,1450 +0,0 @@
-#include "dejavusansmono8.h"
-
-/* 
-**  Font data for DejaVu Sans Mono 8pt
-*/
-
-/* Character bitmaps for DejaVu Sans Mono 8pt */
-const uint8_t dejaVuSansMono8ptBitmaps[] = 
-{
-       /* @0 ' ' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @12 '!' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @24 '"' (8 pixels wide) */
-       0x00, /*          */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @36 '#' (8 pixels wide) */
-       0x00, /*          */
-       0x14, /*    # #   */
-       0x24, /*   #  #   */
-       0x7E, /*  ######  */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0xFC, /* ######   */
-       0x48, /*  #  #    */
-       0x50, /*  # #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @48 '$' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x3C, /*   ####   */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x38, /*   ###    */
-       0x14, /*    # #   */
-       0x14, /*    # #   */
-       0x78, /*  ####    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-
-       /* @60 '%' (8 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0xA0, /* # #      */
-       0xE4, /* ###  #   */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0xDC, /* ## ###   */
-       0x14, /*    # #   */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @72 '&' (8 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x30, /*   ##     */
-       0x5A, /*  # ## #  */
-       0x4A, /*  #  # #  */
-       0x44, /*  #   #   */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @84 ''' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @96 '(' (8 pixels wide) */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @108 ')' (8 pixels wide) */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @120 '*' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x54, /*  # # #   */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x54, /*  # # #   */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @132 '+' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @144 ',' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @156 '-' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @168 '.' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @180 '/' (8 pixels wide) */
-       0x00, /*          */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @192 '0' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x42, /*  #    #  */
-       0x4A, /*  #  # #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @204 '1' (8 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @216 '2' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x02, /*       #  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @228 '3' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x02, /*       #  */
-       0x3C, /*   ####   */
-       0x06, /*      ##  */
-       0x02, /*       #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @240 '4' (8 pixels wide) */
-       0x00, /*          */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x14, /*    # #   */
-       0x24, /*   #  #   */
-       0x64, /*  ##  #   */
-       0x7E, /*  ######  */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @252 '5' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x7C, /*  #####   */
-       0x06, /*      ##  */
-       0x02, /*       #  */
-       0x02, /*       #  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @264 '6' (8 pixels wide) */
-       0x00, /*          */
-       0x1E, /*    ####  */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x5C, /*  # ###   */
-       0x62, /*  ##   #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @276 '7' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @288 '8' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @300 '9' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x3E, /*   #####  */
-       0x02, /*       #  */
-       0x04, /*      #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 ':' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @324 ';' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @336 '<' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x02, /*       #  */
-       0x1C, /*    ###   */
-       0x60, /*  ##      */
-       0x18, /*    ##    */
-       0x06, /*      ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @348 '=' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @360 '>' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x38, /*   ###    */
-       0x06, /*      ##  */
-       0x18, /*    ##    */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @372 '?' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x04, /*      #   */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @384 '@' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x26, /*   #  ##  */
-       0x42, /*  #    #  */
-       0x4E, /*  #  ###  */
-       0x52, /*  # #  #  */
-       0x52, /*  # #  #  */
-       0x4E, /*  #  ###  */
-       0x60, /*  ##      */
-       0x20, /*   #      */
-       0x1C, /*    ###   */
-       0x00, /*          */
-
-       /* @396 'A' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @408 'B' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7C, /*  #####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @420 'C' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x22, /*   #   #  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x22, /*   #   #  */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @432 'D' (8 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x44, /*  #   #   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x44, /*  #   #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @444 'E' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x7E, /*  ######  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @456 'F' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x7E, /*  ######  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @468 'G' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x22, /*   #   #  */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x46, /*  #   ##  */
-       0x42, /*  #    #  */
-       0x22, /*   #   #  */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @480 'H' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7E, /*  ######  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @492 'I' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @504 'J' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @516 'K' (8 pixels wide) */
-       0x00, /*          */
-       0x44, /*  #   #   */
-       0x48, /*  #  #    */
-       0x50, /*  # #     */
-       0x60, /*  ##      */
-       0x50, /*  # #     */
-       0x48, /*  #  #    */
-       0x44, /*  #   #   */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @528 'L' (8 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @540 'M' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x5A, /*  # ## #  */
-       0x5A, /*  # ## #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @552 'N' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x62, /*  ##   #  */
-       0x52, /*  # #  #  */
-       0x52, /*  # #  #  */
-       0x4A, /*  #  # #  */
-       0x4A, /*  #  # #  */
-       0x46, /*  #   ##  */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @564 'O' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @576 'P' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7C, /*  #####   */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @588 'Q' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x06, /*      ##  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @600 'R' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7C, /*  #####   */
-       0x44, /*  #   #   */
-       0x42, /*  #    #  */
-       0x41, /*  #     # */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @612 'S' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x40, /*  #       */
-       0x78, /*  ####    */
-       0x06, /*      ##  */
-       0x02, /*       #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @624 'T' (8 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @636 'U' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @648 'V' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @660 'W' (8 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x92, /* #  #  #  */
-       0x92, /* #  #  #  */
-       0xAA, /* # # # #  */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @672 'X' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x42, /*  #    #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @684 'Y' (8 pixels wide) */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0x44, /*  #   #   */
-       0x28, /*   # #    */
-       0x38, /*   ###    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @696 'Z' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @708 '[' (8 pixels wide) */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @720 '\' (8 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x04, /*      #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @732 ']' (8 pixels wide) */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @744 '^' (8 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x48, /*  #  #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @756 '_' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFE, /* #######  */
-
-       /* @768 '`' (8 pixels wide) */
-       0x10, /*    #     */
-       0x08, /*     #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @780 'a' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x04, /*      #   */
-       0x3C, /*   ####   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @792 'b' (8 pixels wide) */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x78, /*  ####    */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @804 'c' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x60, /*  ##      */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @816 'd' (8 pixels wide) */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x3C, /*   ####   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @828 'e' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x7C, /*  #####   */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @840 'f' (8 pixels wide) */
-       0x0C, /*     ##   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @852 'g' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x04, /*      #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-
-       /* @864 'h' (8 pixels wide) */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x58, /*  # ##    */
-       0x64, /*  ##  #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @876 'i' (8 pixels wide) */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @888 'j' (8 pixels wide) */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x60, /*  ##      */
-       0x00, /*          */
-
-       /* @900 'k' (8 pixels wide) */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x48, /*  #  #    */
-       0x50, /*  # #     */
-       0x60, /*  ##      */
-       0x50, /*  # #     */
-       0x48, /*  #  #    */
-       0x44, /*  #   #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @912 'l' (8 pixels wide) */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @924 'm' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x54, /*  # # #   */
-       0x54, /*  # # #   */
-       0x54, /*  # # #   */
-       0x54, /*  # # #   */
-       0x54, /*  # # #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @936 'n' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x58, /*  # ##    */
-       0x64, /*  ##  #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @948 'o' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @960 'p' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x78, /*  ####    */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-
-       /* @972 'q' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x00, /*          */
-
-       /* @984 'r' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x24, /*   #  #   */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @996 's' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x40, /*  #       */
-       0x70, /*  ###     */
-       0x0C, /*     ##   */
-       0x04, /*      #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1008 't' (8 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xF8, /* #####    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1020 'u' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1032 'v' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1044 'w' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x54, /*  # # #   */
-       0x54, /*  # # #   */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1056 'x' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x6C, /*  ## ##   */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x28, /*   # #    */
-       0x6C, /*  ## ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1068 'y' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x44, /*  #   #   */
-       0x48, /*  #  #    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x60, /*  ##      */
-       0x00, /*          */
-
-       /* @1080 'z' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 '{' (8 pixels wide) */
-       0x1C, /*    ###   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x60, /*  ##      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1104 '|' (8 pixels wide) */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-
-       /* @1116 '}' (8 pixels wide) */
-       0x70, /*  ###     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x0C, /*     ##   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1128 '~' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x0E, /*     ###  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for DejaVu Sans Mono 8pt */
-/* { [Char width in bits], [Offset into dejaVuSansMono8ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO dejaVuSansMono8ptDescriptors[] = 
-{
-       {8, 0},                 /*   */ 
-       {8, 12},                /* ! */ 
-       {8, 24},                /* " */ 
-       {8, 36},                /* # */ 
-       {8, 48},                /* $ */ 
-       {8, 60},                /* % */ 
-       {8, 72},                /* & */ 
-       {8, 84},                /* ' */ 
-       {8, 96},                /* ( */ 
-       {8, 108},               /* ) */ 
-       {8, 120},               /* * */ 
-       {8, 132},               /* + */ 
-       {8, 144},               /* , */ 
-       {8, 156},               /* - */ 
-       {8, 168},               /* . */ 
-       {8, 180},               /* / */ 
-       {8, 192},               /* 0 */ 
-       {8, 204},               /* 1 */ 
-       {8, 216},               /* 2 */ 
-       {8, 228},               /* 3 */ 
-       {8, 240},               /* 4 */ 
-       {8, 252},               /* 5 */ 
-       {8, 264},               /* 6 */ 
-       {8, 276},               /* 7 */ 
-       {8, 288},               /* 8 */ 
-       {8, 300},               /* 9 */ 
-       {8, 312},               /* : */ 
-       {8, 324},               /* ; */ 
-       {8, 336},               /* < */ 
-       {8, 348},               /* = */ 
-       {8, 360},               /* > */ 
-       {8, 372},               /* ? */ 
-       {8, 384},               /* @ */ 
-       {8, 396},               /* A */ 
-       {8, 408},               /* B */ 
-       {8, 420},               /* C */ 
-       {8, 432},               /* D */ 
-       {8, 444},               /* E */ 
-       {8, 456},               /* F */ 
-       {8, 468},               /* G */ 
-       {8, 480},               /* H */ 
-       {8, 492},               /* I */ 
-       {8, 504},               /* J */ 
-       {8, 516},               /* K */ 
-       {8, 528},               /* L */ 
-       {8, 540},               /* M */ 
-       {8, 552},               /* N */ 
-       {8, 564},               /* O */ 
-       {8, 576},               /* P */ 
-       {8, 588},               /* Q */ 
-       {8, 600},               /* R */ 
-       {8, 612},               /* S */ 
-       {8, 624},               /* T */ 
-       {8, 636},               /* U */ 
-       {8, 648},               /* V */ 
-       {8, 660},               /* W */ 
-       {8, 672},               /* X */ 
-       {8, 684},               /* Y */ 
-       {8, 696},               /* Z */ 
-       {8, 708},               /* [ */ 
-       {8, 720},               /* \ */ 
-       {8, 732},               /* ] */ 
-       {8, 744},               /* ^ */ 
-       {8, 756},               /* _ */ 
-       {8, 768},               /* ` */ 
-       {8, 780},               /* a */ 
-       {8, 792},               /* b */ 
-       {8, 804},               /* c */ 
-       {8, 816},               /* d */ 
-       {8, 828},               /* e */ 
-       {8, 840},               /* f */ 
-       {8, 852},               /* g */ 
-       {8, 864},               /* h */ 
-       {8, 876},               /* i */ 
-       {8, 888},               /* j */ 
-       {8, 900},               /* k */ 
-       {8, 912},               /* l */ 
-       {8, 924},               /* m */ 
-       {8, 936},               /* n */ 
-       {8, 948},               /* o */ 
-       {8, 960},               /* p */ 
-       {8, 972},               /* q */ 
-       {8, 984},               /* r */ 
-       {8, 996},               /* s */ 
-       {8, 1008},              /* t */ 
-       {8, 1020},              /* u */ 
-       {8, 1032},              /* v */ 
-       {8, 1044},              /* w */ 
-       {8, 1056},              /* x */ 
-       {8, 1068},              /* y */ 
-       {8, 1080},              /* z */ 
-       {8, 1092},              /* { */ 
-       {8, 1104},              /* | */ 
-       {8, 1116},              /* } */ 
-       {8, 1128},              /* ~ */ 
-};
-
-/* Font information for DejaVu Sans Mono 8pt */
-const FONT_INFO dejaVuSansMono8ptFontInfo =
-{
-       12, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       dejaVuSansMono8ptDescriptors, /*  Character descriptor array */
-       dejaVuSansMono8ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/dejavusansmono8.h b/drivers/lcd/tft/fonts/dejavusansmono8.h
deleted file mode 100644 (file)
index 3310409..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __DEJA_VU_SANS_MONO_8__
-#define __DEJA_VU_SANS_MONO_8__
-
-#include "bitmapfonts.h"
-
-extern const uint8_t dejaVuSansMono8ptCharBitmaps[];
-extern const FONT_CHAR_INFO dejaVuSansMono8ptCharDescriptors[];
-extern const FONT_INFO dejaVuSansMono8ptFontInfo;
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/dejavusansmonobold8.c b/drivers/lcd/tft/fonts/dejavusansmonobold8.c
deleted file mode 100644 (file)
index bc05313..0000000
+++ /dev/null
@@ -1,1450 +0,0 @@
-#include "dejavusansmonobold8.h"
-
-/* 
-**  Font data for DejaVu Sans Mono Bold 8pt
-*/
-
-/* Character bitmaps for DejaVu Sans Mono Bold 8pt */
-const uint8_t dejaVuSansMonoBold8ptBitmaps[] = 
-{
-       /* @0 ' ' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @12 '!' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @24 '"' (8 pixels wide) */
-       0x00, /*          */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @36 '#' (8 pixels wide) */
-       0x00, /*          */
-       0x14, /*    # #   */
-       0x34, /*   ## #   */
-       0x7E, /*  ######  */
-       0x28, /*   # #    */
-       0x28, /*   # #    */
-       0xFC, /* ######   */
-       0x58, /*  # ##    */
-       0x50, /*  # #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @48 '$' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x38, /*   ###    */
-       0x50, /*  # #     */
-       0x78, /*  ####    */
-       0x3C, /*   ####   */
-       0x14, /*    # #   */
-       0x54, /*  # # #   */
-       0x38, /*   ###    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-
-       /* @60 '%' (8 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0xA0, /* # #      */
-       0xE4, /* ###  #   */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0xDC, /* ## ###   */
-       0x14, /*    # #   */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @72 '&' (8 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x7A, /*  #### #  */
-       0x6A, /*  ## # #  */
-       0x6E, /*  ## ###  */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @84 ''' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @96 '(' (8 pixels wide) */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x18, /*    ##    */
-       0x08, /*     #    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @108 ')' (8 pixels wide) */
-       0x20, /*   #      */
-       0x30, /*   ##     */
-       0x10, /*    #     */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @120 '*' (8 pixels wide) */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x54, /*  # # #   */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x54, /*  # # #   */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @132 '+' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x7C, /*  #####   */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @144 ',' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-
-       /* @156 '-' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @168 '.' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @180 '/' (8 pixels wide) */
-       0x00, /*          */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @192 '0' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x6E, /*  ## ###  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @204 '1' (8 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @216 '2' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @228 '3' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x38, /*   ###    */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @240 '4' (8 pixels wide) */
-       0x00, /*          */
-       0x0C, /*     ##   */
-       0x1C, /*    ###   */
-       0x3C, /*   ####   */
-       0x2C, /*   # ##   */
-       0x4C, /*  #  ##   */
-       0x7E, /*  ######  */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @252 '5' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @264 '6' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @276 '7' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x1C, /*    ###   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @288 '8' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x18, /*    ##    */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @300 '9' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x06, /*      ##  */
-       0x0E, /*     ###  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 ':' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @324 ';' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-
-       /* @336 '<' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x02, /*       #  */
-       0x1E, /*    ####  */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0x1E, /*    ####  */
-       0x02, /*       #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @348 '=' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @360 '>' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x78, /*  ####    */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x78, /*  ####    */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @372 '?' (8 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x58, /*  # ##    */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @384 '@' (8 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x44, /*  #   #   */
-       0x9C, /* #  ###   */
-       0xA4, /* # #  #   */
-       0xA4, /* # #  #   */
-       0xA4, /* # #  #   */
-       0x9C, /* #  ###   */
-       0x44, /*  #   #   */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @396 'A' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @408 'B' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x78, /*  ####    */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @420 'C' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x32, /*   ##  #  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x32, /*   ##  #  */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @432 'D' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @444 'E' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @456 'F' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @468 'G' (8 pixels wide) */
-       0x00, /*          */
-       0x1C, /*    ###   */
-       0x32, /*   ##  #  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x6E, /*  ## ###  */
-       0x66, /*  ##  ##  */
-       0x36, /*   ## ##  */
-       0x1E, /*    ####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @480 'H' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7E, /*  ######  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @492 'I' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @504 'J' (8 pixels wide) */
-       0x00, /*          */
-       0x1E, /*    ####  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x46, /*  #   ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @516 'K' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x6C, /*  ## ##   */
-       0x68, /*  ## #    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x6C, /*  ## ##   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @528 'L' (8 pixels wide) */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @540 'M' (8 pixels wide) */
-       0x00, /*          */
-       0x42, /*  #    #  */
-       0x66, /*  ##  ##  */
-       0x7E, /*  ######  */
-       0x7E, /*  ######  */
-       0x7E, /*  ######  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @552 'N' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x76, /*  ### ##  */
-       0x76, /*  ### ##  */
-       0x76, /*  ### ##  */
-       0x6E, /*  ## ###  */
-       0x6E, /*  ## ###  */
-       0x6E, /*  ## ###  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @564 'O' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @576 'P' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7C, /*  #####   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @588 'Q' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x04, /*      #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @600 'R' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x78, /*  ####    */
-       0x64, /*  ##  #   */
-       0x66, /*  ##  ##  */
-       0x63, /*  ##   ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @612 'S' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x62, /*  ##   #  */
-       0x60, /*  ##      */
-       0x78, /*  ####    */
-       0x1E, /*    ####  */
-       0x06, /*      ##  */
-       0x46, /*  #   ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @624 'T' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @636 'U' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @648 'V' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @660 'W' (8 pixels wide) */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0xD6, /* ## # ##  */
-       0xD6, /* ## # ##  */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @672 'X' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x3C, /*   ####   */
-       0x24, /*   #  #   */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @684 'Y' (8 pixels wide) */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @696 'Z' (8 pixels wide) */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @708 '[' (8 pixels wide) */
-       0x38, /*   ###    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @720 '\' (8 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x04, /*      #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @732 ']' (8 pixels wide) */
-       0x38, /*   ###    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @744 '^' (8 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x78, /*  ####    */
-       0xCC, /* ##  ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @756 '_' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFE, /* #######  */
-
-       /* @768 '`' (8 pixels wide) */
-       0x60, /*  ##      */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @780 'a' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x06, /*      ##  */
-       0x3E, /*   #####  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @792 'b' (8 pixels wide) */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @804 'c' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x70, /*  ###     */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @816 'd' (8 pixels wide) */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x3E, /*   #####  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @828 'e' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x7E, /*  ######  */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @840 'f' (8 pixels wide) */
-       0x1C, /*    ###   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x7C, /*  #####   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @852 'g' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x06, /*      ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-
-       /* @864 'h' (8 pixels wide) */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @876 'i' (8 pixels wide) */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @888 'j' (8 pixels wide) */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x70, /*  ###     */
-       0x00, /*          */
-
-       /* @900 'k' (8 pixels wide) */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x6C, /*  ## ##   */
-       0x68, /*  ## #    */
-       0x78, /*  ####    */
-       0x68, /*  ## #    */
-       0x6C, /*  ## ##   */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @912 'l' (8 pixels wide) */
-       0xF0, /* ####     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @924 'm' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x6A, /*  ## # #  */
-       0x6A, /*  ## # #  */
-       0x6A, /*  ## # #  */
-       0x6A, /*  ## # #  */
-       0x6A, /*  ## # #  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @936 'n' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @948 'o' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @960 'p' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x7C, /*  #####   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-
-       /* @972 'q' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x00, /*          */
-
-       /* @984 'r' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @996 's' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x62, /*  ##   #  */
-       0x78, /*  ####    */
-       0x1E, /*    ####  */
-       0x46, /*  #   ##  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1008 't' (8 pixels wide) */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xFC, /* ######   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1020 'u' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x3E, /*   #####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1032 'v' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x66, /*  ##  ##  */
-       0x24, /*   #  #   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1044 'w' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC6, /* ##   ##  */
-       0xC6, /* ##   ##  */
-       0x54, /*  # # #   */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x6C, /*  ## ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1056 'x' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x3C, /*   ####   */
-       0x66, /*  ##  ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1068 'y' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x66, /*  ##  ##  */
-       0x24, /*   #  #   */
-       0x2C, /*   # ##   */
-       0x3C, /*   ####   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x10, /*    #     */
-       0x70, /*  ###     */
-       0x00, /*          */
-
-       /* @1080 'z' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x7E, /*  ######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 '{' (8 pixels wide) */
-       0x1E, /*    ####  */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x60, /*  ##      */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x1E, /*    ####  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1104 '|' (8 pixels wide) */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-
-       /* @1116 '}' (8 pixels wide) */
-       0x78, /*  ####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x06, /*      ##  */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1128 '~' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x0E, /*     ###  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for DejaVu Sans Mono Bold 8pt */
-/* { [Char width in bits], [Offset into dejaVuSansMono8ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO dejaVuSansMonoBold8ptDescriptors[] = 
-{
-       {8, 0},                 /*   */ 
-       {8, 12},                /* ! */ 
-       {8, 24},                /* " */ 
-       {8, 36},                /* # */ 
-       {8, 48},                /* $ */ 
-       {8, 60},                /* % */ 
-       {8, 72},                /* & */ 
-       {8, 84},                /* ' */ 
-       {8, 96},                /* ( */ 
-       {8, 108},               /* ) */ 
-       {8, 120},               /* * */ 
-       {8, 132},               /* + */ 
-       {8, 144},               /* , */ 
-       {8, 156},               /* - */ 
-       {8, 168},               /* . */ 
-       {8, 180},               /* / */ 
-       {8, 192},               /* 0 */ 
-       {8, 204},               /* 1 */ 
-       {8, 216},               /* 2 */ 
-       {8, 228},               /* 3 */ 
-       {8, 240},               /* 4 */ 
-       {8, 252},               /* 5 */ 
-       {8, 264},               /* 6 */ 
-       {8, 276},               /* 7 */ 
-       {8, 288},               /* 8 */ 
-       {8, 300},               /* 9 */ 
-       {8, 312},               /* : */ 
-       {8, 324},               /* ; */ 
-       {8, 336},               /* < */ 
-       {8, 348},               /* = */ 
-       {8, 360},               /* > */ 
-       {8, 372},               /* ? */ 
-       {8, 384},               /* @ */ 
-       {8, 396},               /* A */ 
-       {8, 408},               /* B */ 
-       {8, 420},               /* C */ 
-       {8, 432},               /* D */ 
-       {8, 444},               /* E */ 
-       {8, 456},               /* F */ 
-       {8, 468},               /* G */ 
-       {8, 480},               /* H */ 
-       {8, 492},               /* I */ 
-       {8, 504},               /* J */ 
-       {8, 516},               /* K */ 
-       {8, 528},               /* L */ 
-       {8, 540},               /* M */ 
-       {8, 552},               /* N */ 
-       {8, 564},               /* O */ 
-       {8, 576},               /* P */ 
-       {8, 588},               /* Q */ 
-       {8, 600},               /* R */ 
-       {8, 612},               /* S */ 
-       {8, 624},               /* T */ 
-       {8, 636},               /* U */ 
-       {8, 648},               /* V */ 
-       {8, 660},               /* W */ 
-       {8, 672},               /* X */ 
-       {8, 684},               /* Y */ 
-       {8, 696},               /* Z */ 
-       {8, 708},               /* [ */ 
-       {8, 720},               /* \ */ 
-       {8, 732},               /* ] */ 
-       {8, 744},               /* ^ */ 
-       {8, 756},               /* _ */ 
-       {8, 768},               /* ` */ 
-       {8, 780},               /* a */ 
-       {8, 792},               /* b */ 
-       {8, 804},               /* c */ 
-       {8, 816},               /* d */ 
-       {8, 828},               /* e */ 
-       {8, 840},               /* f */ 
-       {8, 852},               /* g */ 
-       {8, 864},               /* h */ 
-       {8, 876},               /* i */ 
-       {8, 888},               /* j */ 
-       {8, 900},               /* k */ 
-       {8, 912},               /* l */ 
-       {8, 924},               /* m */ 
-       {8, 936},               /* n */ 
-       {8, 948},               /* o */ 
-       {8, 960},               /* p */ 
-       {8, 972},               /* q */ 
-       {8, 984},               /* r */ 
-       {8, 996},               /* s */ 
-       {8, 1008},              /* t */ 
-       {8, 1020},              /* u */ 
-       {8, 1032},              /* v */ 
-       {8, 1044},              /* w */ 
-       {8, 1056},              /* x */ 
-       {8, 1068},              /* y */ 
-       {8, 1080},              /* z */ 
-       {8, 1092},              /* { */ 
-       {8, 1104},              /* | */ 
-       {8, 1116},              /* } */ 
-       {8, 1128},              /* ~ */ 
-};
-
-/* Font information for DejaVu Sans Mono Bold 8pt */
-const FONT_INFO dejaVuSansMonoBold8ptFontInfo =
-{
-       12, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       dejaVuSansMonoBold8ptDescriptors, /*  Character descriptor array */
-       dejaVuSansMonoBold8ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/dejavusansmonobold8.h b/drivers/lcd/tft/fonts/dejavusansmonobold8.h
deleted file mode 100644 (file)
index 4a38f88..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef __DEJA_VU_SANS_MONO_BOLD_8__
-#define __DEJA_VU_SANS_MONO_BOLD_8__
-
-#include "bitmapfonts.h"
-
-extern const uint8_t dejaVuSansMonoBold8ptCharBitmaps[];
-extern const FONT_CHAR_INFO dejaVuSansMonoBold8ptCharDescriptors[];
-extern const FONT_INFO dejaVuSansMonoBold8ptFontInfo;
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/verdana14.c b/drivers/lcd/tft/fonts/verdana14.c
deleted file mode 100644 (file)
index 1a6d8c8..0000000
+++ /dev/null
@@ -1,2115 +0,0 @@
-#include "verdana14.h"
-
-/* 
-**  Font data for Verdana 14pt
-*/
-
-/* Character bitmaps for Verdana 14pt */
-const uint8_t verdana14ptBitmaps[] = 
-{
-       /* @0 ' ' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @19 '!' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @38 '"' (6 pixels wide) */
-       0xCC, /* ##  ##   */
-       0xCC, /* ##  ##   */
-       0xCC, /* ##  ##   */
-       0xCC, /* ##  ##   */
-       0xCC, /* ##  ##   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @57 '#' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x04, 0x40, /*      #   #       */
-       0x04, 0x40, /*      #   #       */
-       0x08, 0x80, /*     #   #        */
-       0x08, 0x80, /*     #   #        */
-       0x7F, 0xF0, /*  ###########     */
-       0x08, 0x80, /*     #   #        */
-       0x08, 0x80, /*     #   #        */
-       0x11, 0x00, /*    #   #         */
-       0x11, 0x00, /*    #   #         */
-       0xFF, 0xE0, /* ###########      */
-       0x11, 0x00, /*    #   #         */
-       0x11, 0x00, /*    #   #         */
-       0x22, 0x00, /*   #   #          */
-       0x22, 0x00, /*   #   #          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @95 '$' (9 pixels wide) */
-       0x08, 0x00, /*     #            */
-       0x08, 0x00, /*     #            */
-       0x08, 0x00, /*     #            */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0x80, /*  ########        */
-       0xC8, 0x00, /* ##  #            */
-       0xC8, 0x00, /* ##  #            */
-       0xE8, 0x00, /* ### #            */
-       0x7C, 0x00, /*  #####           */
-       0x1F, 0x00, /*    #####         */
-       0x09, 0x80, /*     #  ##        */
-       0x09, 0x80, /*     #  ##        */
-       0x89, 0x80, /* #   #  ##        */
-       0xFF, 0x00, /* ########         */
-       0x7E, 0x00, /*  ######          */
-       0x08, 0x00, /*     #            */
-       0x08, 0x00, /*     #            */
-       0x08, 0x00, /*     #            */
-       0x00, 0x00, /*                  */
-
-       /* @133 '%' (18 pixels wide) */
-       0x00, 0x00, 0x00, /*                          */
-       0x7C, 0x18, 0x00, /*  #####     ##            */
-       0x44, 0x10, 0x00, /*  #   #     #             */
-       0xC6, 0x30, 0x00, /* ##   ##   ##             */
-       0xC6, 0x20, 0x00, /* ##   ##   #              */
-       0xC6, 0x60, 0x00, /* ##   ##  ##              */
-       0xC6, 0x40, 0x00, /* ##   ##  #               */
-       0x44, 0x4F, 0x80, /*  #   #   #  #####        */
-       0x7C, 0x88, 0x80, /*  #####  #   #   #        */
-       0x00, 0x98, 0xC0, /*         #  ##   ##       */
-       0x01, 0x98, 0xC0, /*        ##  ##   ##       */
-       0x01, 0x18, 0xC0, /*        #   ##   ##       */
-       0x03, 0x18, 0xC0, /*       ##   ##   ##       */
-       0x02, 0x08, 0x80, /*       #     #   #        */
-       0x06, 0x0F, 0x80, /*      ##     #####        */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-
-       /* @190 '&' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x7F, 0x00, /*  #######         */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x3E, 0x00, /*   #####          */
-       0x3C, 0x60, /*   ####   ##      */
-       0x66, 0x60, /*  ##  ##  ##      */
-       0xC3, 0x60, /* ##    ## ##      */
-       0xC1, 0xE0, /* ##     ####      */
-       0xC0, 0xC0, /* ##      ##       */
-       0xE1, 0xE0, /* ###    ####      */
-       0x7F, 0x30, /*  #######  ##     */
-       0x3E, 0x18, /*   #####    ##    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @228 ''' (2 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @247 '(' (6 pixels wide) */
-       0x1C, /*    ###   */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x30, /*   ##     */
-       0x18, /*    ##    */
-       0x1C, /*    ###   */
-
-       /* @266 ')' (6 pixels wide) */
-       0xE0, /* ###      */
-       0x60, /*  ##      */
-       0x30, /*   ##     */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-
-       /* @285 '*' (9 pixels wide) */
-       0x08, 0x00, /*     #            */
-       0x88, 0x80, /* #   #   #        */
-       0xEB, 0x80, /* ### # ###        */
-       0x3E, 0x00, /*   #####          */
-       0x08, 0x00, /*     #            */
-       0x3E, 0x00, /*   #####          */
-       0xEB, 0x80, /* ### # ###        */
-       0x88, 0x80, /* #   #   #        */
-       0x08, 0x00, /*     #            */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @323 '+' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @361 ',' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @380 '-' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @399 '.' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @418 '/' (8 pixels wide) */
-       0x03, /*       ## */
-       0x07, /*      ### */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x0E, /*     ###  */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x1C, /*    ###   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x38, /*   ###    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @437 '0' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x61, 0x80, /*  ##    ##        */
-       0x7F, 0x80, /*  ########        */
-       0x1E, 0x00, /*    ####          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @475 '1' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0xF8, /* #####    */
-       0xF8, /* #####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @494 '2' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x7C, 0x00, /*  #####           */
-       0xFE, 0x00, /* #######          */
-       0x87, 0x00, /* #    ###         */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x06, 0x00, /*      ##          */
-       0x0C, 0x00, /*     ##           */
-       0x18, 0x00, /*    ##            */
-       0x30, 0x00, /*   ##             */
-       0x60, 0x00, /*  ##              */
-       0xC0, 0x00, /* ##               */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @532 '3' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x7E, 0x00, /*  ######          */
-       0xFF, 0x00, /* ########         */
-       0x83, 0x80, /* #     ###        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x03, 0x00, /*       ##         */
-       0x1E, 0x00, /*    ####          */
-       0x1F, 0x00, /*    #####         */
-       0x03, 0x80, /*       ###        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x83, 0x80, /* #     ###        */
-       0xFF, 0x00, /* ########         */
-       0x7E, 0x00, /*  ######          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @570 '4' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x03, 0x00, /*       ##         */
-       0x07, 0x00, /*      ###         */
-       0x0F, 0x00, /*     ####         */
-       0x1F, 0x00, /*    #####         */
-       0x1B, 0x00, /*    ## ##         */
-       0x33, 0x00, /*   ##  ##         */
-       0x73, 0x00, /*  ###  ##         */
-       0xE3, 0x00, /* ###   ##         */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @608 '5' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x7F, 0x80, /*  ########        */
-       0x7F, 0x80, /*  ########        */
-       0x60, 0x00, /*  ##              */
-       0x60, 0x00, /*  ##              */
-       0x60, 0x00, /*  ##              */
-       0x7E, 0x00, /*  ######          */
-       0x7F, 0x00, /*  #######         */
-       0x03, 0x80, /*       ###        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x83, 0x00, /* #     ##         */
-       0xFF, 0x00, /* ########         */
-       0x7C, 0x00, /*  #####           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @646 '6' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0F, 0x80, /*     #####        */
-       0x3F, 0x80, /*   #######        */
-       0x30, 0x00, /*   ##             */
-       0x60, 0x00, /*  ##              */
-       0xC0, 0x00, /* ##               */
-       0xDF, 0x00, /* ## #####         */
-       0xFF, 0x80, /* #########        */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x61, 0x80, /*  ##    ##        */
-       0x7F, 0x80, /*  ########        */
-       0x1E, 0x00, /*    ####          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @684 '7' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x01, 0x80, /*        ##        */
-       0x03, 0x00, /*       ##         */
-       0x03, 0x00, /*       ##         */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x30, 0x00, /*   ##             */
-       0x30, 0x00, /*   ##             */
-       0x70, 0x00, /*  ###             */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @722 '8' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x3F, 0x00, /*   ######         */
-       0x7F, 0x80, /*  ########        */
-       0xE1, 0xC0, /* ###    ###       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x79, 0x80, /*  ####  ##        */
-       0x3E, 0x00, /*   #####          */
-       0x67, 0x80, /*  ##  ####        */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xE1, 0xC0, /* ###    ###       */
-       0x7F, 0x80, /*  ########        */
-       0x3F, 0x00, /*   ######         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @760 '9' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xE0, 0xC0, /* ###     ##       */
-       0x7F, 0xC0, /*  #########       */
-       0x3E, 0xC0, /*   ##### ##       */
-       0x00, 0xC0, /*         ##       */
-       0x01, 0x80, /*        ##        */
-       0x03, 0x80, /*       ###        */
-       0x7F, 0x00, /*  #######         */
-       0x7C, 0x00, /*  #####           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @798 ':' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @817 ';' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x40, /*  #       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @836 '<' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x60, /*          ##      */
-       0x01, 0xE0, /*        ####      */
-       0x07, 0x80, /*      ####        */
-       0x1E, 0x00, /*    ####          */
-       0x78, 0x00, /*  ####            */
-       0xE0, 0x00, /* ###              */
-       0x78, 0x00, /*  ####            */
-       0x1E, 0x00, /*    ####          */
-       0x07, 0x80, /*      ####        */
-       0x01, 0xE0, /*        ####      */
-       0x00, 0x60, /*          ##      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @874 '=' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @912 '>' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xC0, 0x00, /* ##               */
-       0xF0, 0x00, /* ####             */
-       0x3C, 0x00, /*   ####           */
-       0x0F, 0x00, /*     ####         */
-       0x03, 0xC0, /*       ####       */
-       0x00, 0xE0, /*         ###      */
-       0x03, 0xC0, /*       ####       */
-       0x0F, 0x00, /*     ####         */
-       0x3C, 0x00, /*   ####           */
-       0xF0, 0x00, /* ####             */
-       0xC0, 0x00, /* ##               */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @950 '?' (8 pixels wide) */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0xFE, /* #######  */
-       0x87, /* #    ### */
-       0x03, /*       ## */
-       0x03, /*       ## */
-       0x06, /*      ##  */
-       0x0E, /*     ###  */
-       0x38, /*   ###    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @969 '@' (16 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x07, 0xE0, /*      ######      */
-       0x1C, 0x18, /*    ###     ##    */
-       0x30, 0x0C, /*   ##        ##   */
-       0x60, 0x06, /*  ##          ##  */
-       0x63, 0xF6, /*  ##   ###### ##  */
-       0xC6, 0x33, /* ##   ##   ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0x66, 0x72, /*  ##  ##  ###  #  */
-       0x63, 0xBE, /*  ##   ### #####  */
-       0x30, 0x00, /*   ##             */
-       0x1C, 0x10, /*    ###     #     */
-       0x07, 0xF0, /*      #######     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1007 'A' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x0D, 0x80, /*     ## ##        */
-       0x0D, 0x80, /*     ## ##        */
-       0x0D, 0x80, /*     ## ##        */
-       0x18, 0xC0, /*    ##   ##       */
-       0x18, 0xC0, /*    ##   ##       */
-       0x30, 0x60, /*   ##     ##      */
-       0x3F, 0xE0, /*   #########      */
-       0x3F, 0xE0, /*   #########      */
-       0x60, 0x30, /*  ##       ##     */
-       0x60, 0x30, /*  ##       ##     */
-       0x60, 0x30, /*  ##       ##     */
-       0xC0, 0x18, /* ##         ##    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1045 'B' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFE, 0x00, /* #######          */
-       0xFF, 0x80, /* #########        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC3, 0x00, /* ##    ##         */
-       0xFE, 0x00, /* #######          */
-       0xFF, 0x80, /* #########        */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC1, 0xC0, /* ##     ###       */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x00, /* ########         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1083 'C' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0F, 0xC0, /*     ######       */
-       0x3F, 0xE0, /*   #########      */
-       0x70, 0x20, /*  ###      #      */
-       0x60, 0x00, /*  ##              */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0x60, 0x00, /*  ##              */
-       0x70, 0x20, /*  ###      #      */
-       0x3F, 0xE0, /*   #########      */
-       0x0F, 0x80, /*     #####        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1121 'D' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0x80, /* #########        */
-       0xC1, 0xE0, /* ##     ####      */
-       0xC0, 0x60, /* ##       ##      */
-       0xC0, 0x70, /* ##       ###     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x70, /* ##       ###     */
-       0xC0, 0x60, /* ##       ##      */
-       0xC1, 0xC0, /* ##     ###       */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x00, /* ########         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1159 'E' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1197 'F' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0x00, /* ########         */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1235 'G' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0F, 0xE0, /*     #######      */
-       0x3F, 0xF8, /*   ###########    */
-       0x78, 0x18, /*  ####      ##    */
-       0x60, 0x00, /*  ##              */
-       0xE0, 0x00, /* ###              */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC1, 0xF8, /* ##     ######    */
-       0xC1, 0xF8, /* ##     ######    */
-       0xE0, 0x18, /* ###        ##    */
-       0x60, 0x18, /*  ##        ##    */
-       0x78, 0x18, /*  ####      ##    */
-       0x3F, 0xF8, /*   ###########    */
-       0x0F, 0xE0, /*     #######      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1273 'H' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1311 'I' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1330 'J' (7 pixels wide) */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x3E, /*   #####  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x0E, /*     ###  */
-       0xFC, /* ######   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1349 'K' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC0, 0xE0, /* ##      ###      */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC3, 0x80, /* ##    ###        */
-       0xC7, 0x00, /* ##   ###         */
-       0xCE, 0x00, /* ##  ###          */
-       0xDC, 0x00, /* ## ###           */
-       0xF8, 0x00, /* #####            */
-       0xFC, 0x00, /* ######           */
-       0xEC, 0x00, /* ### ##           */
-       0xC6, 0x00, /* ##   ##          */
-       0xC3, 0x00, /* ##    ##         */
-       0xC3, 0x80, /* ##    ###        */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC0, 0xE0, /* ##      ###      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1387 'L' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1425 'M' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE0, 0x70, /* ###      ###     */
-       0xE0, 0x70, /* ###      ###     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xD0, 0xB0, /* ## #    # ##     */
-       0xD9, 0xB0, /* ## ##  ## ##     */
-       0xC9, 0x30, /* ##  #  #  ##     */
-       0xCD, 0x30, /* ##  ## #  ##     */
-       0xCF, 0x30, /* ##  ####  ##     */
-       0xC6, 0x30, /* ##   ##   ##     */
-       0xC6, 0x30, /* ##   ##   ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0xC0, 0x30, /* ##        ##     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1463 'N' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE0, 0xC0, /* ###     ##       */
-       0xF0, 0xC0, /* ####    ##       */
-       0xF0, 0xC0, /* ####    ##       */
-       0xD0, 0xC0, /* ## #    ##       */
-       0xD8, 0xC0, /* ## ##   ##       */
-       0xC8, 0xC0, /* ##  #   ##       */
-       0xCC, 0xC0, /* ##  ##  ##       */
-       0xC4, 0xC0, /* ##   #  ##       */
-       0xC6, 0xC0, /* ##   ## ##       */
-       0xC2, 0xC0, /* ##    # ##       */
-       0xC3, 0xC0, /* ##    ####       */
-       0xC3, 0xC0, /* ##    ####       */
-       0xC1, 0xC0, /* ##     ###       */
-       0xC1, 0xC0, /* ##     ###       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1501 'O' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0F, 0x80, /*     #####        */
-       0x3F, 0xE0, /*   #########      */
-       0x70, 0x70, /*  ###     ###     */
-       0x60, 0x30, /*  ##       ##     */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0x60, 0x30, /*  ##       ##     */
-       0x70, 0x70, /*  ###     ###     */
-       0x3F, 0xE0, /*   #########      */
-       0x0F, 0x80, /*     #####        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1539 'P' (8 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xFE, /* #######  */
-       0xC7, /* ##   ### */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC7, /* ##   ### */
-       0xFE, /* #######  */
-       0xFC, /* ######   */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1558 'Q' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0F, 0x80, /*     #####        */
-       0x3F, 0xE0, /*   #########      */
-       0x70, 0x70, /*  ###     ###     */
-       0x60, 0x30, /*  ##       ##     */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0xC0, 0x18, /* ##         ##    */
-       0x60, 0x30, /*  ##       ##     */
-       0x70, 0x70, /*  ###     ###     */
-       0x3F, 0xE0, /*   #########      */
-       0x0F, 0x80, /*     #####        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0xC0, /*        ###       */
-       0x00, 0xF8, /*         #####    */
-       0x00, 0x78, /*          ####    */
-
-       /* @1596 'R' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFE, 0x00, /* #######          */
-       0xFF, 0x00, /* ########         */
-       0xC3, 0x80, /* ##    ###        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC3, 0x80, /* ##    ###        */
-       0xFF, 0x00, /* ########         */
-       0xFC, 0x00, /* ######           */
-       0xC6, 0x00, /* ##   ##          */
-       0xC7, 0x00, /* ##   ###         */
-       0xC3, 0x00, /* ##    ##         */
-       0xC1, 0x80, /* ##     ##        */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xE0, /* ##      ###      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1634 'S' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0xC0, /*  #########       */
-       0xE0, 0x40, /* ###      #       */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xE0, 0x00, /* ###              */
-       0x7F, 0x00, /*  #######         */
-       0x1F, 0xC0, /*    #######       */
-       0x00, 0xE0, /*         ###      */
-       0x00, 0x60, /*          ##      */
-       0x00, 0x60, /*          ##      */
-       0xC0, 0xE0, /* ##      ###      */
-       0xFF, 0xC0, /* ##########       */
-       0x7F, 0x00, /*  #######         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1672 'T' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1710 'U' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x61, 0x80, /*  ##    ##        */
-       0x7F, 0x80, /*  ########        */
-       0x3F, 0x00, /*   ######         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1748 'V' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xC0, 0x18, /* ##         ##    */
-       0x60, 0x30, /*  ##       ##     */
-       0x60, 0x30, /*  ##       ##     */
-       0x60, 0x30, /*  ##       ##     */
-       0x30, 0x60, /*   ##     ##      */
-       0x30, 0x60, /*   ##     ##      */
-       0x38, 0xE0, /*   ###   ###      */
-       0x18, 0xC0, /*    ##   ##       */
-       0x18, 0xC0, /*    ##   ##       */
-       0x0D, 0x80, /*     ## ##        */
-       0x0D, 0x80, /*     ## ##        */
-       0x0D, 0x80, /*     ## ##        */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1786 'W' (17 pixels wide) */
-       0x00, 0x00, 0x00, /*                          */
-       0xC1, 0xC1, 0x80, /* ##     ###     ##        */
-       0xC1, 0xC1, 0x80, /* ##     ###     ##        */
-       0x61, 0x43, 0x00, /*  ##    # #    ##         */
-       0x61, 0x43, 0x00, /*  ##    # #    ##         */
-       0x61, 0x63, 0x00, /*  ##    # ##   ##         */
-       0x63, 0x63, 0x00, /*  ##   ## ##   ##         */
-       0x32, 0x26, 0x00, /*   ##  #   #  ##          */
-       0x32, 0x26, 0x00, /*   ##  #   #  ##          */
-       0x32, 0x36, 0x00, /*   ##  #   ## ##          */
-       0x36, 0x36, 0x00, /*   ## ##   ## ##          */
-       0x1E, 0x14, 0x00, /*    ####    # #           */
-       0x1C, 0x1C, 0x00, /*    ###     ###           */
-       0x1C, 0x1C, 0x00, /*    ###     ###           */
-       0x0C, 0x1C, 0x00, /*     ##     ###           */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-
-       /* @1843 'X' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE0, 0xE0, /* ###     ###      */
-       0x60, 0xC0, /*  ##     ##       */
-       0x31, 0x80, /*   ##   ##        */
-       0x31, 0x80, /*   ##   ##        */
-       0x1B, 0x00, /*    ## ##         */
-       0x0A, 0x00, /*     # #          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0B, 0x00, /*     # ##         */
-       0x1B, 0x00, /*    ## ##         */
-       0x31, 0x80, /*   ##   ##        */
-       0x31, 0x80, /*   ##   ##        */
-       0x60, 0xC0, /*  ##     ##       */
-       0xE0, 0xE0, /* ###     ###      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1881 'Y' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE0, 0x70, /* ###      ###     */
-       0x60, 0x60, /*  ##      ##      */
-       0x30, 0xC0, /*   ##    ##       */
-       0x30, 0xC0, /*   ##    ##       */
-       0x19, 0x80, /*    ##  ##        */
-       0x1F, 0x80, /*    ######        */
-       0x0F, 0x00, /*     ####         */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1919 'Z' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0xE0, /*         ###      */
-       0x01, 0xC0, /*        ###       */
-       0x03, 0x80, /*       ###        */
-       0x07, 0x00, /*      ###         */
-       0x06, 0x00, /*      ##          */
-       0x0C, 0x00, /*     ##           */
-       0x1C, 0x00, /*    ###           */
-       0x38, 0x00, /*   ###            */
-       0x70, 0x00, /*  ###             */
-       0xE0, 0x00, /* ###              */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1957 '[' (5 pixels wide) */
-       0xF8, /* #####    */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xF8, /* #####    */
-
-       /* @1976 '\' (8 pixels wide) */
-       0xC0, /* ##       */
-       0xE0, /* ###      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x70, /*  ###     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x38, /*   ###    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x1C, /*    ###   */
-       0x0C, /*     ##   */
-       0x0C, /*     ##   */
-       0x0E, /*     ###  */
-       0x06, /*      ##  */
-       0x06, /*      ##  */
-       0x07, /*      ### */
-       0x03, /*       ## */
-       0x00, /*          */
-
-       /* @1995 ']' (5 pixels wide) */
-       0xF8, /* #####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0xF8, /* #####    */
-
-       /* @2014 '^' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x06, 0x00, /*      ##          */
-       0x0F, 0x00, /*     ####         */
-       0x19, 0x80, /*    ##  ##        */
-       0x11, 0x80, /*    #   ##        */
-       0x30, 0xC0, /*   ##    ##       */
-       0x60, 0x60, /*  ##      ##      */
-       0xC0, 0x30, /* ##        ##     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2052 '_' (12 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, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0x00, 0x00, /*                  */
-
-       /* @2090 '`' (4 pixels wide) */
-       0xE0, /* ###      */
-       0x60, /*  ##      */
-       0x30, /*   ##     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2109 'a' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x7F, /*  ####### */
-       0x03, /*       ## */
-       0x03, /*       ## */
-       0x3F, /*   ###### */
-       0x7F, /*  ####### */
-       0xE3, /* ###   ## */
-       0xC3, /* ##    ## */
-       0xC7, /* ##   ### */
-       0xFF, /* ######## */
-       0x7B, /*  #### ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2128 'b' (9 pixels wide) */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xDE, 0x00, /* ## ####          */
-       0xFF, 0x00, /* ########         */
-       0xE3, 0x80, /* ###   ###        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC3, 0x00, /* ##    ##         */
-       0xFF, 0x00, /* ########         */
-       0xDE, 0x00, /* ## ####          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2166 'c' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x1E, /*    ####  */
-       0x7F, /*  ####### */
-       0x61, /*  ##    # */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x61, /*  ##    # */
-       0x7F, /*  ####### */
-       0x1E, /*    ####  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2185 'd' (9 pixels wide) */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xE3, 0x80, /* ###   ###        */
-       0x7F, 0x80, /*  ########        */
-       0x3D, 0x80, /*   #### ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2223 'e' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x7F, 0x00, /*  #######         */
-       0x63, 0x80, /*  ##   ###        */
-       0xC1, 0x80, /* ##     ##        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0x60, 0x80, /*  ##     #        */
-       0x7F, 0x80, /*  ########        */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2261 'f' (6 pixels wide) */
-       0x3C, /*   ####   */
-       0x7C, /*  #####   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xF8, /* #####    */
-       0xF8, /* #####    */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2280 'g' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xE3, 0x80, /* ###   ###        */
-       0x7F, 0x80, /*  ########        */
-       0x3D, 0x80, /*   #### ##        */
-       0x01, 0x80, /*        ##        */
-       0x03, 0x80, /*       ###        */
-       0x7F, 0x00, /*  #######         */
-       0x7E, 0x00, /*  ######          */
-
-       /* @2318 'h' (8 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xDE, /* ## ####  */
-       0xFF, /* ######## */
-       0xE3, /* ###   ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2337 'i' (2 pixels wide) */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2356 'j' (5 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0xF8, /* #####    */
-       0xF0, /* ####     */
-
-       /* @2375 'k' (9 pixels wide) */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC3, 0x80, /* ##    ###        */
-       0xC3, 0x00, /* ##    ##         */
-       0xC6, 0x00, /* ##   ##          */
-       0xCC, 0x00, /* ##  ##           */
-       0xD8, 0x00, /* ## ##            */
-       0xF8, 0x00, /* #####            */
-       0xF8, 0x00, /* #####            */
-       0xCC, 0x00, /* ##  ##           */
-       0xC6, 0x00, /* ##   ##          */
-       0xC7, 0x00, /* ##   ###         */
-       0xC3, 0x80, /* ##    ###        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2413 'l' (2 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2432 'm' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xDE, 0x78, /* ## ####  ####    */
-       0xFF, 0xFC, /* ##############   */
-       0xE3, 0x8C, /* ###   ###   ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2470 'n' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xDE, /* ## ####  */
-       0xFF, /* ######## */
-       0xE3, /* ###   ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2489 'o' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0xC0, 0xC0, /* ##      ##       */
-       0x61, 0x80, /*  ##    ##        */
-       0x7F, 0x80, /*  ########        */
-       0x1E, 0x00, /*    ####          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2527 'p' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xDE, 0x00, /* ## ####          */
-       0xFF, 0x00, /* ########         */
-       0xE3, 0x80, /* ###   ###        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC3, 0x00, /* ##    ##         */
-       0xFF, 0x00, /* ########         */
-       0xFE, 0x00, /* #######          */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-       0xC0, 0x00, /* ##               */
-
-       /* @2565 'q' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0x80, /*  ########        */
-       0x61, 0x80, /*  ##    ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xC1, 0x80, /* ##     ##        */
-       0xE3, 0x80, /* ###   ###        */
-       0x7F, 0x80, /*  ########        */
-       0x3D, 0x80, /*   #### ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-       0x01, 0x80, /*        ##        */
-
-       /* @2603 'r' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xDC, /* ## ###   */
-       0xFC, /* ######   */
-       0xE0, /* ###      */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2622 's' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x7F, /*  ####### */
-       0xC1, /* ##     # */
-       0xC0, /* ##       */
-       0xF0, /* ####     */
-       0x7E, /*  ######  */
-       0x0F, /*     #### */
-       0x03, /*       ## */
-       0x83, /* #     ## */
-       0xFE, /* #######  */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2641 't' (6 pixels wide) */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0x7C, /*  #####   */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2660 'u' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xC7, /* ##   ### */
-       0x7F, /*  ####### */
-       0x7B, /*  #### ## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2679 'v' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x22, 0x00, /*   #   #          */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x14, 0x00, /*    # #           */
-       0x14, 0x00, /*    # #           */
-       0x1C, 0x00, /*    ###           */
-       0x08, 0x00, /*     #            */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2717 'w' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0xC3, 0x0C, /* ##    ##    ##   */
-       0x63, 0x98, /*  ##   ###  ##    */
-       0x67, 0x98, /*  ##  ####  ##    */
-       0x64, 0x98, /*  ##  #  #  ##    */
-       0x64, 0x98, /*  ##  #  #  ##    */
-       0x2C, 0xD0, /*   # ##  ## #     */
-       0x38, 0x50, /*   ###    # #     */
-       0x38, 0x70, /*   ###    ###     */
-       0x38, 0x70, /*   ###    ###     */
-       0x18, 0x20, /*    ##     #      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2755 'x' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xE3, 0x80, /* ###   ###        */
-       0x63, 0x00, /*  ##   ##         */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x1C, 0x00, /*    ###           */
-       0x08, 0x00, /*     #            */
-       0x1C, 0x00, /*    ###           */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x63, 0x00, /*  ##   ##         */
-       0xE3, 0x80, /* ###   ###        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2793 'y' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xC1, 0x80, /* ##     ##        */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x63, 0x00, /*  ##   ##         */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x36, 0x00, /*   ## ##          */
-       0x14, 0x00, /*    # #           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x08, 0x00, /*     #            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x30, 0x00, /*   ##             */
-       0x30, 0x00, /*   ##             */
-
-       /* @2831 'z' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x07, /*      ### */
-       0x06, /*      ##  */
-       0x0C, /*     ##   */
-       0x18, /*    ##    */
-       0x30, /*   ##     */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2850 '{' (9 pixels wide) */
-       0x03, 0x80, /*       ###        */
-       0x06, 0x00, /*      ##          */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x18, 0x00, /*    ##            */
-       0xE0, 0x00, /* ###              */
-       0x18, 0x00, /*    ##            */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x0C, 0x00, /*     ##           */
-       0x06, 0x00, /*      ##          */
-       0x03, 0x80, /*       ###        */
-
-       /* @2888 '|' (2 pixels wide) */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-       0xC0, /* ##       */
-
-       /* @2907 '}' (9 pixels wide) */
-       0xE0, 0x00, /* ###              */
-       0x30, 0x00, /*   ##             */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x0C, 0x00, /*     ##           */
-       0x03, 0x80, /*       ###        */
-       0x0C, 0x00, /*     ##           */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x18, 0x00, /*    ##            */
-       0x30, 0x00, /*   ##             */
-       0xE0, 0x00, /* ###              */
-
-       /* @2945 '~' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x38, 0x30, /*   ###     ##     */
-       0x7C, 0x30, /*  #####    ##     */
-       0xE6, 0x70, /* ###  ##  ###     */
-       0xC3, 0xE0, /* ##    #####      */
-       0xC1, 0xC0, /* ##     ###       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-};
-
-/* Character descriptors for Verdana 14pt */
-/* { [Char width in bits], [Offset into verdana14ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO verdana14ptDescriptors[] = 
-{
-       {5, 0},                 /*   */ 
-       {2, 19},                /* ! */ 
-       {6, 38},                /* " */ 
-       {12, 57},               /* # */ 
-       {9, 95},                /* $ */ 
-       {18, 133},              /* % */ 
-       {13, 190},              /* & */ 
-       {2, 228},               /* ' */ 
-       {6, 247},               /* ( */ 
-       {6, 266},               /* ) */ 
-       {9, 285},               /* * */ 
-       {12, 323},              /* + */ 
-       {4, 361},               /* , */ 
-       {6, 380},               /* - */ 
-       {2, 399},               /* . */ 
-       {8, 418},               /* / */ 
-       {10, 437},              /* 0 */ 
-       {8, 475},               /* 1 */ 
-       {9, 494},               /* 2 */ 
-       {9, 532},               /* 3 */ 
-       {10, 570},              /* 4 */ 
-       {9, 608},               /* 5 */ 
-       {10, 646},              /* 6 */ 
-       {9, 684},               /* 7 */ 
-       {10, 722},              /* 8 */ 
-       {10, 760},              /* 9 */ 
-       {2, 798},               /* : */ 
-       {4, 817},               /* ; */ 
-       {11, 836},              /* < */ 
-       {11, 874},              /* = */ 
-       {11, 912},              /* > */ 
-       {8, 950},               /* ? */ 
-       {16, 969},              /* @ */ 
-       {13, 1007},             /* A */ 
-       {10, 1045},             /* B */ 
-       {11, 1083},             /* C */ 
-       {12, 1121},             /* D */ 
-       {9, 1159},              /* E */ 
-       {9, 1197},              /* F */ 
-       {13, 1235},             /* G */ 
-       {10, 1273},             /* H */ 
-       {6, 1311},              /* I */ 
-       {7, 1330},              /* J */ 
-       {11, 1349},             /* K */ 
-       {9, 1387},              /* L */ 
-       {12, 1425},             /* M */ 
-       {10, 1463},             /* N */ 
-       {13, 1501},             /* O */ 
-       {8, 1539},              /* P */ 
-       {13, 1558},             /* Q */ 
-       {11, 1596},             /* R */ 
-       {11, 1634},             /* S */ 
-       {12, 1672},             /* T */ 
-       {10, 1710},             /* U */ 
-       {13, 1748},             /* V */ 
-       {17, 1786},             /* W */ 
-       {11, 1843},             /* X */ 
-       {12, 1881},             /* Y */ 
-       {11, 1919},             /* Z */ 
-       {5, 1957},              /* [ */ 
-       {8, 1976},              /* \ */ 
-       {5, 1995},              /* ] */ 
-       {12, 2014},             /* ^ */ 
-       {12, 2052},             /* _ */ 
-       {4, 2090},              /* ` */ 
-       {8, 2109},              /* a */ 
-       {9, 2128},              /* b */ 
-       {8, 2166},              /* c */ 
-       {9, 2185},              /* d */ 
-       {9, 2223},              /* e */ 
-       {6, 2261},              /* f */ 
-       {9, 2280},              /* g */ 
-       {8, 2318},              /* h */ 
-       {2, 2337},              /* i */ 
-       {5, 2356},              /* j */ 
-       {9, 2375},              /* k */ 
-       {2, 2413},              /* l */ 
-       {14, 2432},             /* m */ 
-       {8, 2470},              /* n */ 
-       {10, 2489},             /* o */ 
-       {9, 2527},              /* p */ 
-       {9, 2565},              /* q */ 
-       {6, 2603},              /* r */ 
-       {8, 2622},              /* s */ 
-       {6, 2641},              /* t */ 
-       {8, 2660},              /* u */ 
-       {9, 2679},              /* v */ 
-       {14, 2717},             /* w */ 
-       {9, 2755},              /* x */ 
-       {9, 2793},              /* y */ 
-       {8, 2831},              /* z */ 
-       {9, 2850},              /* { */ 
-       {2, 2888},              /* | */ 
-       {9, 2907},              /* } */ 
-       {12, 2945},             /* ~ */ 
-};
-
-/* Font information for Verdana 14pt */
-const FONT_INFO verdana14ptFontInfo =
-{
-       19, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       verdana14ptDescriptors, /*  Character descriptor array */
-       verdana14ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/verdana14.h b/drivers/lcd/tft/fonts/verdana14.h
deleted file mode 100644 (file)
index 9a84419..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __VERDANA_14__
-#define __VERDANA_14__
-
-#include "bitmapfonts.h"
-
-/* Font data for Verdana 14pt */
-extern const uint8_t verdana14ptBitmaps[];
-extern const FONT_INFO verdana14ptFontInfo;
-extern const FONT_CHAR_INFO verdana14ptDescriptors[];
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/verdana9.c b/drivers/lcd/tft/fonts/verdana9.c
deleted file mode 100644 (file)
index 42f5792..0000000
+++ /dev/null
@@ -1,1450 +0,0 @@
-#include "verdana9.h"
-
-/* 
-**  Font data for Verdana 9pt
-*/
-
-/* Character bitmaps for Verdana 9pt */
-const uint8_t verdana9ptBitmaps[] = 
-{
-       /* @0 ' ' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @12 '!' (1 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @24 '"' (4 pixels wide) */
-       0x90, /* #  #     */
-       0x90, /* #  #     */
-       0x90, /* #  #     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @36 '#' (8 pixels wide) */
-       0x00, /*          */
-       0x12, /*    #  #  */
-       0x12, /*    #  #  */
-       0x24, /*   #  #   */
-       0x7F, /*  ####### */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0xFE, /* #######  */
-       0x48, /*  #  #    */
-       0x48, /*  #  #    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @48 '$' (6 pixels wide) */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x7C, /*  #####   */
-       0xA0, /* # #      */
-       0xA0, /* # #      */
-       0x60, /*  ##      */
-       0x38, /*   ###    */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0xF8, /* #####    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-
-       /* @60 '%' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x61, 0x00, /*  ##    #         */
-       0x92, 0x00, /* #  #  #          */
-       0x92, 0x00, /* #  #  #          */
-       0x94, 0x00, /* #  # #           */
-       0x64, 0xC0, /*  ##  #  ##       */
-       0x05, 0x20, /*      # #  #      */
-       0x09, 0x20, /*     #  #  #      */
-       0x09, 0x20, /*     #  #  #      */
-       0x10, 0xC0, /*    #    ##       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @84 '&' (8 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x72, /*  ###  #  */
-       0x8A, /* #   # #  */
-       0x84, /* #    #   */
-       0x86, /* #    ##  */
-       0x79, /*  ####  # */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @96 ''' (1 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @108 '(' (3 pixels wide) */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-
-       /* @120 ')' (3 pixels wide) */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-
-       /* @132 '*' (5 pixels wide) */
-       0x20, /*   #      */
-       0xA8, /* # # #    */
-       0x70, /*  ###     */
-       0xA8, /* # # #    */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @144 '+' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @156 ',' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-
-       /* @168 '-' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @180 '.' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @192 '/' (5 pixels wide) */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-
-       /* @204 '0' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @216 '1' (5 pixels wide) */
-       0x00, /*          */
-       0x20, /*   #      */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @228 '2' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x30, /*   ##     */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @240 '3' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x38, /*   ###    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @252 '4' (7 pixels wide) */
-       0x00, /*          */
-       0x08, /*     #    */
-       0x18, /*    ##    */
-       0x28, /*   # #    */
-       0x48, /*  #  #    */
-       0x88, /* #   #    */
-       0xFE, /* #######  */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @264 '5' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @276 '6' (6 pixels wide) */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @288 '7' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @300 '8' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @312 '9' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x7C, /*  #####   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @324 ':' (1 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @336 ';' (2 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x80, /* #        */
-
-       /* @348 '<' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x06, /*      ##  */
-       0x18, /*    ##    */
-       0x60, /*  ##      */
-       0x80, /* #        */
-       0x60, /*  ##      */
-       0x18, /*    ##    */
-       0x06, /*      ##  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @360 '=' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @372 '>' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xC0, /* ##       */
-       0x30, /*   ##     */
-       0x0C, /*     ##   */
-       0x02, /*       #  */
-       0x0C, /*     ##   */
-       0x30, /*   ##     */
-       0xC0, /* ##       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @384 '?' (5 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @396 '@' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x61, 0x80, /*  ##    ##        */
-       0x4E, 0x80, /*  #  ### #        */
-       0x92, 0x40, /* #  #  #  #       */
-       0x92, 0x40, /* #  #  #  #       */
-       0x92, 0x40, /* #  #  #  #       */
-       0x92, 0x40, /* #  #  #  #       */
-       0x4F, 0x80, /*  #  #####        */
-       0x60, 0x00, /*  ##              */
-       0x1E, 0x00, /*    ####          */
-       0x00, 0x00, /*                  */
-
-       /* @420 'A' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x7E, /*  ######  */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @432 'B' (6 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @444 'C' (7 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @456 'D' (7 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @468 'E' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @480 'F' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @492 'G' (7 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x8E, /* #   ###  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @504 'H' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0xFE, /* #######  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @516 'I' (3 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @528 'J' (4 pixels wide) */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @540 'K' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @552 'L' (6 pixels wide) */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @564 'M' (8 pixels wide) */
-       0x00, /*          */
-       0xC3, /* ##    ## */
-       0xC3, /* ##    ## */
-       0xA5, /* # #  # # */
-       0xA5, /* # #  # # */
-       0xA5, /* # #  # # */
-       0x99, /* #  ##  # */
-       0x99, /* #  ##  # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @576 'N' (7 pixels wide) */
-       0x00, /*          */
-       0xC2, /* ##    #  */
-       0xC2, /* ##    #  */
-       0xA2, /* # #   #  */
-       0xA2, /* # #   #  */
-       0x92, /* #  #  #  */
-       0x8A, /* #   # #  */
-       0x8A, /* #   # #  */
-       0x86, /* #    ##  */
-       0x86, /* #    ##  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @588 'O' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @600 'P' (6 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @612 'Q' (8 pixels wide) */
-       0x00, /*          */
-       0x3C, /*   ####   */
-       0x42, /*  #    #  */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x42, /*  #    #  */
-       0x3C, /*   ####   */
-       0x04, /*      #   */
-       0x03, /*       ## */
-
-       /* @624 'R' (7 pixels wide) */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x84, /* #    #   */
-       0x82, /* #     #  */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @636 'S' (6 pixels wide) */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x78, /*  ####    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @648 'T' (7 pixels wide) */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @660 'U' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x82, /* #     #  */
-       0x44, /*  #   #   */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @672 'V' (8 pixels wide) */
-       0x00, /*          */
-       0x81, /* #      # */
-       0x81, /* #      # */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x42, /*  #    #  */
-       0x24, /*   #  #   */
-       0x24, /*   #  #   */
-       0x18, /*    ##    */
-       0x18, /*    ##    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @684 'W' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x84, 0x20, /* #    #    #      */
-       0x84, 0x20, /* #    #    #      */
-       0x8A, 0x20, /* #   # #   #      */
-       0x8A, 0x20, /* #   # #   #      */
-       0x4A, 0x40, /*  #  # #  #       */
-       0x51, 0x40, /*  # #   # #       */
-       0x51, 0x40, /*  # #   # #       */
-       0x20, 0x80, /*   #     #        */
-       0x20, 0x80, /*   #     #        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @708 'X' (6 pixels wide) */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x48, /*  #  #    */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x30, /*   ##     */
-       0x48, /*  #  #    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @720 'Y' (7 pixels wide) */
-       0x00, /*          */
-       0x82, /* #     #  */
-       0x44, /*  #   #   */
-       0x44, /*  #   #   */
-       0x28, /*   # #    */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @732 'Z' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0x04, /*      #   */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xFC, /* ######   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @744 '[' (3 pixels wide) */
-       0xE0, /* ###      */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xE0, /* ###      */
-
-       /* @756 '\' (5 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x10, /*    #     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-
-       /* @768 ']' (3 pixels wide) */
-       0xE0, /* ###      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xE0, /* ###      */
-
-       /* @780 '^' (8 pixels wide) */
-       0x00, /*          */
-       0x18, /*    ##    */
-       0x24, /*   #  #   */
-       0x42, /*  #    #  */
-       0x81, /* #      # */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @792 '_' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFF, /* ######## */
-
-       /* @804 '`' (2 pixels wide) */
-       0x80, /* #        */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @816 'a' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x7C, /*  #####   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x7C, /*  #####   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @828 'b' (6 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @840 'c' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x70, /*  ###     */
-       0x88, /* #   #    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x88, /* #   #    */
-       0x70, /*  ###     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @852 'd' (6 pixels wide) */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-       0x7C, /*  #####   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @864 'e' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xFC, /* ######   */
-       0x80, /* #        */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @876 'f' (4 pixels wide) */
-       0x30, /*   ##     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xF0, /* ####     */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @888 'g' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x04, /*      #   */
-       0x78, /*  ####    */
-
-       /* @900 'h' (6 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @912 'i' (1 pixels wide) */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @924 'j' (3 pixels wide) */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-       0x60, /*  ##      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-
-       /* @936 'k' (5 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x88, /* #   #    */
-       0x90, /* #  #     */
-       0xA0, /* # #      */
-       0xC0, /* ##       */
-       0xA0, /* # #      */
-       0x90, /* #  #     */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @948 'l' (1 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @960 'm' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF7, 0x00, /* #### ###         */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @984 'n' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @996 'o' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1008 'p' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB8, /* # ###    */
-       0xC4, /* ##   #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0xF8, /* #####    */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1020 'q' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x7C, /*  #####   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x04, /*      #   */
-       0x04, /*      #   */
-
-       /* @1032 'r' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xB0, /* # ##     */
-       0xC0, /* ##       */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1044 's' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x70, /*  ###     */
-       0x08, /*     #    */
-       0x08, /*     #    */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1056 't' (5 pixels wide) */
-       0x00, /*          */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0xF8, /* #####    */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x40, /*  #       */
-       0x38, /*   ###    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1068 'u' (6 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x84, /* #    #   */
-       0x8C, /* #   ##   */
-       0x74, /*  ### #   */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1080 'v' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1092 'w' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x88, 0x80, /* #   #   #        */
-       0x88, 0x80, /* #   #   #        */
-       0x55, 0x00, /*  # # # #         */
-       0x55, 0x00, /*  # # # #         */
-       0x55, 0x00, /*  # # # #         */
-       0x22, 0x00, /*   #   #          */
-       0x22, 0x00, /*   #   #          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1116 'x' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x50, /*  # #     */
-       0x20, /*   #      */
-       0x50, /*  # #     */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1128 'y' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x88, /* #   #    */
-       0x88, /* #   #    */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x50, /*  # #     */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x40, /*  #       */
-
-       /* @1140 'z' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF8, /* #####    */
-       0x08, /*     #    */
-       0x10, /*    #     */
-       0x20, /*   #      */
-       0x40, /*  #       */
-       0x80, /* #        */
-       0xF8, /* #####    */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1152 '{' (5 pixels wide) */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x18, /*    ##    */
-
-       /* @1164 '|' (1 pixels wide) */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-       0x80, /* #        */
-
-       /* @1176 '}' (5 pixels wide) */
-       0xC0, /* ##       */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x18, /*    ##    */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0x20, /*   #      */
-       0xC0, /* ##       */
-
-       /* @1188 '~' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x61, /*  ##    # */
-       0x99, /* #  ##  # */
-       0x86, /* #    ##  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-};
-
-/* Character descriptors for Verdana 9pt */
-/* { [Char width in bits], [Offset into verdana9ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO verdana9ptDescriptors[] = 
-{
-       {8, 0},                 /*   */ 
-       {1, 12},                /* ! */ 
-       {4, 24},                /* " */ 
-       {8, 36},                /* # */ 
-       {6, 48},                /* $ */ 
-       {11, 60},               /* % */ 
-       {8, 84},                /* & */ 
-       {1, 96},                /* ' */ 
-       {3, 108},               /* ( */ 
-       {3, 120},               /* ) */ 
-       {5, 132},               /* * */ 
-       {7, 144},               /* + */ 
-       {2, 156},               /* , */ 
-       {4, 168},               /* - */ 
-       {1, 180},               /* . */ 
-       {5, 192},               /* / */ 
-       {6, 204},               /* 0 */ 
-       {5, 216},               /* 1 */ 
-       {6, 228},               /* 2 */ 
-       {6, 240},               /* 3 */ 
-       {7, 252},               /* 4 */ 
-       {6, 264},               /* 5 */ 
-       {6, 276},               /* 6 */ 
-       {6, 288},               /* 7 */ 
-       {6, 300},               /* 8 */ 
-       {6, 312},               /* 9 */ 
-       {1, 324},               /* : */ 
-       {2, 336},               /* ; */ 
-       {7, 348},               /* < */ 
-       {7, 360},               /* = */ 
-       {7, 372},               /* > */ 
-       {5, 384},               /* ? */ 
-       {10, 396},              /* @ */ 
-       {8, 420},               /* A */ 
-       {6, 432},               /* B */ 
-       {7, 444},               /* C */ 
-       {7, 456},               /* D */ 
-       {6, 468},               /* E */ 
-       {6, 480},               /* F */ 
-       {7, 492},               /* G */ 
-       {7, 504},               /* H */ 
-       {3, 516},               /* I */ 
-       {4, 528},               /* J */ 
-       {6, 540},               /* K */ 
-       {6, 552},               /* L */ 
-       {8, 564},               /* M */ 
-       {7, 576},               /* N */ 
-       {8, 588},               /* O */ 
-       {6, 600},               /* P */ 
-       {8, 612},               /* Q */ 
-       {7, 624},               /* R */ 
-       {6, 636},               /* S */ 
-       {7, 648},               /* T */ 
-       {7, 660},               /* U */ 
-       {8, 672},               /* V */ 
-       {11, 684},              /* W */ 
-       {6, 708},               /* X */ 
-       {7, 720},               /* Y */ 
-       {6, 732},               /* Z */ 
-       {3, 744},               /* [ */ 
-       {5, 756},               /* \ */ 
-       {3, 768},               /* ] */ 
-       {8, 780},               /* ^ */ 
-       {8, 792},               /* _ */ 
-       {2, 804},               /* ` */ 
-       {6, 816},               /* a */ 
-       {6, 828},               /* b */ 
-       {5, 840},               /* c */ 
-       {6, 852},               /* d */ 
-       {6, 864},               /* e */ 
-       {4, 876},               /* f */ 
-       {6, 888},               /* g */ 
-       {6, 900},               /* h */ 
-       {1, 912},               /* i */ 
-       {3, 924},               /* j */ 
-       {5, 936},               /* k */ 
-       {1, 948},               /* l */ 
-       {9, 960},               /* m */ 
-       {6, 984},               /* n */ 
-       {6, 996},               /* o */ 
-       {6, 1008},              /* p */ 
-       {6, 1020},              /* q */ 
-       {4, 1032},              /* r */ 
-       {5, 1044},              /* s */ 
-       {5, 1056},              /* t */ 
-       {6, 1068},              /* u */ 
-       {5, 1080},              /* v */ 
-       {9, 1092},              /* w */ 
-       {5, 1116},              /* x */ 
-       {5, 1128},              /* y */ 
-       {5, 1140},              /* z */ 
-       {5, 1152},              /* { */ 
-       {1, 1164},              /* | */ 
-       {5, 1176},              /* } */ 
-       {8, 1188},              /* ~ */ 
-};
-
-/* Font information for Verdana 9pt */
-const FONT_INFO verdana9ptFontInfo =
-{
-       12, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       verdana9ptDescriptors, /*  Character descriptor array */
-       verdana9ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/verdana9.h b/drivers/lcd/tft/fonts/verdana9.h
deleted file mode 100644 (file)
index 57fcfe0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __VERDANA_9__
-#define __VERDANA_9__
-
-#include "bitmapfonts.h"
-
-/* Font data for Verdana 9pt */
-extern const uint8_t verdana9ptBitmaps[];
-extern const FONT_INFO verdana9ptFontInfo;
-extern const FONT_CHAR_INFO verdana9ptDescriptors[];
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/fonts/verdanabold14.c b/drivers/lcd/tft/fonts/verdanabold14.c
deleted file mode 100644 (file)
index 5882f5e..0000000
+++ /dev/null
@@ -1,2210 +0,0 @@
-#include "verdanabold14.h"
-
-/* 
-**  Font data for Verdana Bold 14pt
-*/
-
-/* Character bitmaps for Verdana Bold 14pt */
-const uint8_t verdanabold14ptBitmaps[] = 
-{
-       /* @0 ' ' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @20 '!' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @40 '"' (8 pixels wide) */
-       0x00, /*          */
-       0xE7, /* ###  ### */
-       0xE7, /* ###  ### */
-       0xE7, /* ###  ### */
-       0xE7, /* ###  ### */
-       0xE7, /* ###  ### */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @60 '#' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x06, 0x30, /*      ##   ##     */
-       0x06, 0x30, /*      ##   ##     */
-       0x0E, 0x60, /*     ###  ##      */
-       0x7F, 0xFC, /*  #############   */
-       0x7F, 0xFC, /*  #############   */
-       0x0C, 0x60, /*     ##   ##      */
-       0x0C, 0x60, /*     ##   ##      */
-       0x18, 0xC0, /*    ##   ##       */
-       0xFF, 0xF8, /* #############    */
-       0xFF, 0xF8, /* #############    */
-       0x18, 0xC0, /*    ##   ##       */
-       0x18, 0xC0, /*    ##   ##       */
-       0x31, 0x80, /*   ##   ##        */
-       0x31, 0x80, /*   ##   ##        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @100 '$' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x1F, 0xE0, /*    ########      */
-       0x7F, 0xE0, /*  ##########      */
-       0xFF, 0xE0, /* ###########      */
-       0xF6, 0x00, /* #### ##          */
-       0xFE, 0x00, /* #######          */
-       0x7F, 0xC0, /*  #########       */
-       0x3F, 0xF0, /*   ##########     */
-       0x07, 0xF0, /*      #######     */
-       0xC6, 0xF0, /* ##   ## ####     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xE0, /* ###########      */
-       0x7F, 0x80, /*  ########        */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x06, 0x00, /*      ##          */
-       0x00, 0x00, /*                  */
-
-       /* @140 '%' (22 pixels wide) */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x3C, 0x03, 0x00, /*   ####        ##         */
-       0x7E, 0x06, 0x00, /*  ######      ##          */
-       0xE7, 0x0E, 0x00, /* ###  ###    ###          */
-       0xE7, 0x0C, 0x00, /* ###  ###    ##           */
-       0xE7, 0x18, 0x00, /* ###  ###   ##            */
-       0xE7, 0x18, 0xF0, /* ###  ###   ##   ####     */
-       0xE7, 0x31, 0xF8, /* ###  ###  ##   ######    */
-       0x7E, 0x33, 0x9C, /*  ######   ##  ###  ###   */
-       0x3C, 0x63, 0x9C, /*   ####   ##   ###  ###   */
-       0x00, 0x63, 0x9C, /*          ##   ###  ###   */
-       0x00, 0xC3, 0x9C, /*         ##    ###  ###   */
-       0x01, 0xC3, 0x9C, /*        ###    ###  ###   */
-       0x01, 0x81, 0xF8, /*        ##      ######    */
-       0x03, 0x00, 0xF0, /*       ##        ####     */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-
-       /* @200 '&' (15 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x00, /*    #####         */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0xC0, /*  #########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0x7B, 0xC0, /*  #### ####       */
-       0x3B, 0x80, /*   ### ###        */
-       0x3F, 0x3C, /*   ######  ####   */
-       0x7E, 0x3C, /*  ######   ####   */
-       0xF7, 0xBC, /* #### #### ####   */
-       0xF3, 0xFC, /* ####  ########   */
-       0xF9, 0xF8, /* #####  ######    */
-       0xFF, 0xF8, /* #############    */
-       0x7F, 0xF8, /*  ############    */
-       0x1F, 0x3E, /*    #####  #####  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @240 ''' (3 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @260 '(' (7 pixels wide) */
-       0x00, /*          */
-       0x1E, /*    ####  */
-       0x3C, /*   ####   */
-       0x38, /*   ###    */
-       0x78, /*  ####    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0x78, /*  ####    */
-       0x38, /*   ###    */
-       0x3C, /*   ####   */
-       0x1E, /*    ####  */
-
-       /* @280 ')' (7 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0x78, /*  ####    */
-       0x38, /*   ###    */
-       0x3C, /*   ####   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x0E, /*     ###  */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x3C, /*   ####   */
-       0x38, /*   ###    */
-       0x78, /*  ####    */
-       0xF0, /* ####     */
-
-       /* @300 '*' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x0C, 0x00, /*     ##           */
-       0x4C, 0x80, /*  #  ##  #        */
-       0xED, 0xC0, /* ### ## ###       */
-       0x3F, 0x00, /*   ######         */
-       0x1E, 0x00, /*    ####          */
-       0x3F, 0x00, /*   ######         */
-       0xED, 0xC0, /* ### ## ###       */
-       0x4C, 0x80, /*  #  ##  #        */
-       0x0C, 0x00, /*     ##           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @340 '+' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0xFF, 0xF8, /* #############    */
-       0xFF, 0xF8, /* #############    */
-       0xFF, 0xF8, /* #############    */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @380 ',' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @400 '-' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xFE, /* #######  */
-       0xFE, /* #######  */
-       0xFE, /* #######  */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @420 '.' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @440 '/' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x01, 0xC0, /*        ###       */
-       0x03, 0x80, /*       ###        */
-       0x03, 0x80, /*       ###        */
-       0x03, 0x80, /*       ###        */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x38, 0x00, /*   ###            */
-       0x38, 0x00, /*   ###            */
-       0x70, 0x00, /*  ###             */
-       0x70, 0x00, /*  ###             */
-       0x70, 0x00, /*  ###             */
-       0xE0, 0x00, /* ###              */
-       0x00, 0x00, /*                  */
-
-       /* @480 '0' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x80, /*    ######        */
-       0x3F, 0xC0, /*   ########       */
-       0x7F, 0xE0, /*  ##########      */
-       0xF9, 0xF0, /* #####  #####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF9, 0xF0, /* #####  #####     */
-       0x7F, 0xE0, /*  ##########      */
-       0x3F, 0xC0, /*   ########       */
-       0x1F, 0x80, /*    ######        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @520 '1' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0xFE, 0x00, /* #######          */
-       0xFE, 0x00, /* #######          */
-       0xFE, 0x00, /* #######          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @560 '2' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x7F, 0x00, /*  #######         */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xC0, /* ##########       */
-       0x87, 0xC0, /* #    #####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x0F, 0x00, /*     ####         */
-       0x3E, 0x00, /*   #####          */
-       0x78, 0x00, /*  ####            */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @600 '3' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x7F, 0xC0, /*  #########       */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xF0, /* ############     */
-       0xC0, 0xF0, /* ##      ####     */
-       0x00, 0xF0, /*         ####     */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0x80, /*     #####        */
-       0x0F, 0xE0, /*     #######      */
-       0x00, 0xF0, /*         ####     */
-       0x00, 0xF0, /*         ####     */
-       0xC1, 0xF0, /* ##     #####     */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x7F, 0x80, /*  ########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @640 '4' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0xC0, /*      #####       */
-       0x07, 0xC0, /*      #####       */
-       0x0F, 0xC0, /*     ######       */
-       0x1F, 0xC0, /*    #######       */
-       0x3B, 0xC0, /*   ### ####       */
-       0x33, 0xC0, /*   ##  ####       */
-       0x63, 0xC0, /*  ##   ####       */
-       0xE3, 0xC0, /* ###   ####       */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @680 '5' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x7F, 0xE0, /*  ##########      */
-       0x7F, 0xE0, /*  ##########      */
-       0x7F, 0xE0, /*  ##########      */
-       0x78, 0x00, /*  ####            */
-       0x78, 0x00, /*  ####            */
-       0x7F, 0x80, /*  ########        */
-       0x7F, 0xC0, /*  #########       */
-       0x7F, 0xE0, /*  ##########      */
-       0x01, 0xE0, /*        ####      */
-       0x01, 0xE0, /*        ####      */
-       0xC3, 0xE0, /* ##    #####      */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0x7F, 0x00, /*  #######         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @720 '6' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0xE0, /*      ######      */
-       0x1F, 0xE0, /*    ########      */
-       0x3F, 0xE0, /*   #########      */
-       0x7C, 0x00, /*  #####           */
-       0xF8, 0x00, /* #####            */
-       0xF7, 0xC0, /* #### #####       */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xF0, /* ############     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF8, 0xF0, /* #####   ####     */
-       0x7F, 0xE0, /*  ##########      */
-       0x3F, 0xE0, /*   #########      */
-       0x1F, 0x80, /*    ######        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @760 '7' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x01, 0xF0, /*        #####     */
-       0x01, 0xE0, /*        ####      */
-       0x03, 0xE0, /*       #####      */
-       0x07, 0xC0, /*      #####       */
-       0x07, 0x80, /*      ####        */
-       0x0F, 0x80, /*     #####        */
-       0x0F, 0x00, /*     ####         */
-       0x1F, 0x00, /*    #####         */
-       0x3E, 0x00, /*   #####          */
-       0x3E, 0x00, /*   #####          */
-       0x7C, 0x00, /*  #####           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @800 '8' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x80, /*    ######        */
-       0x7F, 0xE0, /*  ##########      */
-       0xFF, 0xF0, /* ############     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0x7F, 0xE0, /*  ##########      */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0xE0, /*  ##########      */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF8, 0xF0, /* #####   ####     */
-       0xFF, 0xF0, /* ############     */
-       0x7F, 0xE0, /*  ##########      */
-       0x1F, 0x80, /*    ######        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @840 '9' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x80, /*    ######        */
-       0x7F, 0xC0, /*  #########       */
-       0x7F, 0xE0, /*  ##########      */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xFF, 0xF0, /* ############     */
-       0x7F, 0xF0, /*  ###########     */
-       0x3E, 0xF0, /*   ##### ####     */
-       0x01, 0xE0, /*        ####      */
-       0x03, 0xE0, /*       #####      */
-       0x7F, 0xC0, /*  #########       */
-       0x7F, 0x80, /*  ########        */
-       0x7E, 0x00, /*  ######          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @880 ':' (4 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @900 ';' (5 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x38, /*   ###    */
-       0x70, /*  ###     */
-       0x70, /*  ###     */
-       0x60, /*  ##      */
-       0x60, /*  ##      */
-       0xE0, /* ###      */
-       0xC0, /* ##       */
-       0x00, /*          */
-
-       /* @920 '<' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x10, /*            #     */
-       0x00, 0xF0, /*         ####     */
-       0x03, 0xF0, /*       ######     */
-       0x0F, 0xE0, /*     #######      */
-       0x7F, 0x00, /*  #######         */
-       0xFC, 0x00, /* ######           */
-       0xFC, 0x00, /* ######           */
-       0x7F, 0x00, /*  #######         */
-       0x0F, 0xE0, /*     #######      */
-       0x03, 0xF0, /*       ######     */
-       0x00, 0xF0, /*         ####     */
-       0x00, 0x10, /*            #     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @960 '=' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1000 '>' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x80, 0x00, /* #                */
-       0xF0, 0x00, /* ####             */
-       0xFC, 0x00, /* ######           */
-       0x7F, 0x00, /*  #######         */
-       0x0F, 0xE0, /*     #######      */
-       0x03, 0xF0, /*       ######     */
-       0x03, 0xF0, /*       ######     */
-       0x0F, 0xE0, /*     #######      */
-       0x7F, 0x00, /*  #######         */
-       0xFC, 0x00, /* ######           */
-       0xF0, 0x00, /* ####             */
-       0x80, 0x00, /* #                */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1040 '?' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x7F, 0x00, /*  #######         */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xC0, /* ##########       */
-       0x83, 0xC0, /* #     ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x07, 0x80, /*      ####        */
-       0x1F, 0x00, /*    #####         */
-       0x3C, 0x00, /*   ####           */
-       0x38, 0x00, /*   ###            */
-       0x38, 0x00, /*   ###            */
-       0x00, 0x00, /*                  */
-       0x3C, 0x00, /*   ####           */
-       0x3C, 0x00, /*   ####           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1080 '@' (16 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0xE0, /*      ######      */
-       0x1F, 0xF8, /*    ##########    */
-       0x3C, 0x1C, /*   ####     ###   */
-       0x73, 0xFE, /*  ###  #########  */
-       0x67, 0xF6, /*  ##  ####### ##  */
-       0xE6, 0x33, /* ###  ##   ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCC, 0x33, /* ##  ##    ##  ## */
-       0xCE, 0x33, /* ##  ###   ##  ## */
-       0x67, 0xFE, /*  ##  ##########  */
-       0x73, 0xFE, /*  ###  #########  */
-       0x3C, 0x10, /*   ####     #     */
-       0x1F, 0xF0, /*    #########     */
-       0x07, 0xF0, /*      #######     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1120 'A' (15 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0xC0, /*      #####       */
-       0x07, 0xC0, /*      #####       */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0xE0, /*     #######      */
-       0x1E, 0xF0, /*    #### ####     */
-       0x1E, 0xF0, /*    #### ####     */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x3C, 0x78, /*   ####   ####    */
-       0x3F, 0xF8, /*   ###########    */
-       0x7F, 0xFC, /*  #############   */
-       0x7F, 0xFC, /*  #############   */
-       0x78, 0x3C, /*  ####     ####   */
-       0xF0, 0x1E, /* ####       ####  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1160 'B' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xE0, /* ###########      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1200 'C' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x0F, 0xE0, /*     #######      */
-       0x3F, 0xF0, /*   ##########     */
-       0x7F, 0xF0, /*  ###########     */
-       0x7C, 0x30, /*  #####    ##     */
-       0xF8, 0x00, /* #####            */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF8, 0x00, /* #####            */
-       0x7C, 0x30, /*  #####    ##     */
-       0x7F, 0xF0, /*  ###########     */
-       0x3F, 0xF0, /*   ##########     */
-       0x0F, 0xE0, /*     #######      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1240 'D' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xF0, /* ############     */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF0, 0xF8, /* ####    #####    */
-       0xF0, 0x78, /* ####     ####    */
-       0xF0, 0x78, /* ####     ####    */
-       0xF0, 0x78, /* ####     ####    */
-       0xF0, 0x78, /* ####     ####    */
-       0xF0, 0xF8, /* ####    #####    */
-       0xF1, 0xF0, /* ####   #####     */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1280 'E' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1320 'F' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1360 'G' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x0F, 0xE0, /*     #######      */
-       0x1F, 0xF8, /*    ##########    */
-       0x7F, 0xF8, /*  ############    */
-       0x7C, 0x18, /*  #####     ##    */
-       0xF8, 0x00, /* #####            */
-       0xF0, 0x00, /* ####             */
-       0xF1, 0xF8, /* ####   ######    */
-       0xF1, 0xF8, /* ####   ######    */
-       0xF1, 0xF8, /* ####   ######    */
-       0xF8, 0x78, /* #####    ####    */
-       0x7C, 0x78, /*  #####   ####    */
-       0x7F, 0xF8, /*  ############    */
-       0x3F, 0xF8, /*   ###########    */
-       0x0F, 0xE0, /*     #######      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1400 'H' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1440 'I' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0x3C, /*   ####   */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @1460 'J' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0x80, /*   #######        */
-       0x3F, 0x80, /*   #######        */
-       0x3F, 0x80, /*   #######        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x0F, 0x80, /*     #####        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x00, /* ########         */
-       0xFC, 0x00, /* ######           */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1500 'K' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0xF8, /* ####    #####    */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF3, 0xE0, /* ####  #####      */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0x00, /* ########         */
-       0xFF, 0x80, /* #########        */
-       0xF7, 0xC0, /* #### #####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF0, 0xF0, /* ####    ####     */
-       0xF0, 0xF8, /* ####    #####    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1540 'L' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1580 'M' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF8, 0x7C, /* #####    #####   */
-       0xF8, 0x7C, /* #####    #####   */
-       0xF8, 0x7C, /* #####    #####   */
-       0xFC, 0xFC, /* ######  ######   */
-       0xFC, 0xFC, /* ######  ######   */
-       0xFC, 0xFC, /* ######  ######   */
-       0xF7, 0xBC, /* #### #### ####   */
-       0xF7, 0xBC, /* #### #### ####   */
-       0xF7, 0xBC, /* #### #### ####   */
-       0xF3, 0x3C, /* ####  ##  ####   */
-       0xF3, 0x3C, /* ####  ##  ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1620 'N' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF8, 0xF0, /* #####   ####     */
-       0xF8, 0xF0, /* #####   ####     */
-       0xFC, 0xF0, /* ######  ####     */
-       0xFC, 0xF0, /* ######  ####     */
-       0xFE, 0xF0, /* ####### ####     */
-       0xFE, 0xF0, /* ####### ####     */
-       0xF6, 0xF0, /* #### ## ####     */
-       0xF7, 0xF0, /* #### #######     */
-       0xF3, 0xF0, /* ####  ######     */
-       0xF3, 0xF0, /* ####  ######     */
-       0xF3, 0xF0, /* ####  ######     */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF0, 0xF0, /* ####    ####     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1660 'O' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x0F, 0xC0, /*     ######       */
-       0x3F, 0xF0, /*   ##########     */
-       0x7F, 0xF8, /*  ############    */
-       0x78, 0x78, /*  ####    ####    */
-       0xF8, 0x7C, /* #####    #####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF8, 0x7C, /* #####    #####   */
-       0x78, 0x78, /*  ####    ####    */
-       0x7F, 0xF8, /*  ############    */
-       0x3F, 0xF0, /*   ##########     */
-       0x0F, 0xC0, /*     ######       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1700 'P' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xE0, /* ###########      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0x00, /* ########         */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1740 'Q' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x0F, 0xC0, /*     ######       */
-       0x3F, 0xF0, /*   ##########     */
-       0x7F, 0xF8, /*  ############    */
-       0x78, 0x78, /*  ####    ####    */
-       0xF8, 0x7C, /* #####    #####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF0, 0x3C, /* ####      ####   */
-       0xF8, 0x7C, /* #####    #####   */
-       0x78, 0x78, /*  ####    ####    */
-       0x7F, 0xF8, /*  ############    */
-       0x3F, 0xF0, /*   ##########     */
-       0x0F, 0xC0, /*     ######       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xFC, /*       ########   */
-       0x01, 0xFC, /*        #######   */
-       0x00, 0xFC, /*         ######   */
-
-       /* @1780 'R' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0xE0, /* ###########      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xFF, 0xC0, /* ##########       */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0xF7, 0xC0, /* #### #####       */
-       0xF7, 0xC0, /* #### #####       */
-       0xF3, 0xE0, /* ####  #####      */
-       0xF1, 0xF0, /* ####   #####     */
-       0xF0, 0xF8, /* ####    #####    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1820 'S' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0xC0, /*    #######       */
-       0x7F, 0xE0, /*  ##########      */
-       0xFF, 0xE0, /* ###########      */
-       0xF0, 0x60, /* ####     ##      */
-       0xF0, 0x00, /* ####             */
-       0xFF, 0x00, /* ########         */
-       0x7F, 0xC0, /*  #########       */
-       0x3F, 0xE0, /*   #########      */
-       0x07, 0xF0, /*      #######     */
-       0x00, 0xF0, /*         ####     */
-       0xC0, 0xF0, /* ##      ####     */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x7F, 0x80, /*  ########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1860 'T' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0xFF, 0xF0, /* ############     */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1900 'U' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0x7F, 0xC0, /*  #########       */
-       0x7F, 0xC0, /*  #########       */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1940 'V' (15 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0x1E, /* ####       ####  */
-       0x78, 0x3C, /*  ####     ####   */
-       0x78, 0x3C, /*  ####     ####   */
-       0x7C, 0x7C, /*  #####   #####   */
-       0x3C, 0x78, /*   ####   ####    */
-       0x3C, 0x78, /*   ####   ####    */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x1E, 0xF0, /*    #### ####     */
-       0x1E, 0xF0, /*    #### ####     */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0xE0, /*     #######      */
-       0x07, 0xC0, /*      #####       */
-       0x07, 0xC0, /*      #####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @1980 'W' (19 pixels wide) */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
-       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
-       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
-       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
-       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
-       0x79, 0xB3, 0xC0, /*  ####  ## ##  ####       */
-       0x39, 0xB7, 0x80, /*   ###  ## ## ####        */
-       0x3D, 0xB7, 0x80, /*   #### ## ## ####        */
-       0x3F, 0xBF, 0x80, /*   ####### #######        */
-       0x3F, 0xBF, 0x80, /*   ####### #######        */
-       0x1F, 0x3F, 0x00, /*    #####  ######         */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-
-       /* @2040 'X' (15 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF8, 0x3E, /* #####     #####  */
-       0x7C, 0x7C, /*  #####   #####   */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x1F, 0xF0, /*    #########     */
-       0x0F, 0xE0, /*     #######      */
-       0x07, 0xC0, /*      #####       */
-       0x0F, 0xE0, /*     #######      */
-       0x0F, 0xE0, /*     #######      */
-       0x1F, 0xF0, /*    #########     */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x3E, 0xF8, /*   ##### #####    */
-       0x7C, 0x7C, /*  #####   #####   */
-       0xF8, 0x3E, /* #####     #####  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2080 'Y' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF8, 0x7C, /* #####    #####   */
-       0x78, 0x78, /*  ####    ####    */
-       0x7C, 0xF8, /*  #####  #####    */
-       0x3C, 0xF0, /*   ####  ####     */
-       0x1F, 0xE0, /*    ########      */
-       0x1F, 0xE0, /*    ########      */
-       0x0F, 0xC0, /*     ######       */
-       0x0F, 0xC0, /*     ######       */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x07, 0x80, /*      ####        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2120 'Z' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x03, 0xE0, /*       #####      */
-       0x07, 0xC0, /*      #####       */
-       0x0F, 0x80, /*     #####        */
-       0x1F, 0x00, /*    #####         */
-       0x1F, 0x00, /*    #####         */
-       0x3E, 0x00, /*   #####          */
-       0x7C, 0x00, /*  #####           */
-       0xF8, 0x00, /* #####            */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2160 '[' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-
-       /* @2180 '\' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xE0, 0x00, /* ###              */
-       0x70, 0x00, /*  ###             */
-       0x70, 0x00, /*  ###             */
-       0x70, 0x00, /*  ###             */
-       0x38, 0x00, /*   ###            */
-       0x38, 0x00, /*   ###            */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x07, 0x00, /*      ###         */
-       0x07, 0x00, /*      ###         */
-       0x03, 0x80, /*       ###        */
-       0x03, 0x80, /*       ###        */
-       0x03, 0x80, /*       ###        */
-       0x01, 0xC0, /*        ###       */
-       0x00, 0x00, /*                  */
-
-       /* @2220 ']' (6 pixels wide) */
-       0x00, /*          */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0x1C, /*    ###   */
-       0xFC, /* ######   */
-       0xFC, /* ######   */
-
-       /* @2240 '^' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x07, 0x00, /*      ###         */
-       0x0F, 0x80, /*     #####        */
-       0x0F, 0x80, /*     #####        */
-       0x1D, 0xC0, /*    ### ###       */
-       0x38, 0xE0, /*   ###   ###      */
-       0x38, 0xE0, /*   ###   ###      */
-       0x70, 0x70, /*  ###     ###     */
-       0xE0, 0x38, /* ###       ###    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2280 '_' (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, /*                  */
-       0xFF, 0xFC, /* ##############   */
-       0xFF, 0xFC, /* ##############   */
-       0x00, 0x00, /*                  */
-
-       /* @2320 '`' (6 pixels wide) */
-       0xF0, /* ####     */
-       0x70, /*  ###     */
-       0x38, /*   ###    */
-       0x1C, /*    ###   */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2340 'a' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x7F, 0x00, /*  #######         */
-       0x7F, 0x80, /*  ########        */
-       0x43, 0xC0, /*  #    ####       */
-       0x03, 0xC0, /*       ####       */
-       0x3F, 0xC0, /*   ########       */
-       0x7F, 0xC0, /*  #########       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xFF, 0xC0, /* ##########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2380 'b' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF7, 0x00, /* #### ###         */
-       0xFF, 0x80, /* #########        */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x00, /* ########         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2420 'c' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x00, /*    #####         */
-       0x7F, 0x80, /*  ########        */
-       0x79, 0x80, /*  ####  ##        */
-       0xF0, 0x80, /* ####    #        */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x80, /* ####    #        */
-       0x78, 0x80, /*  ####   #        */
-       0x7F, 0x80, /*  ########        */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2460 'd' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x3F, 0xC0, /*   ########       */
-       0x7F, 0xC0, /*  #########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0x7F, 0xC0, /*  #########       */
-       0x3B, 0xC0, /*   ### ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2500 'e' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x80, /*    ######        */
-       0x3F, 0xC0, /*   ########       */
-       0x71, 0xE0, /*  ###   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xFF, 0xE0, /* ###########      */
-       0xFF, 0xE0, /* ###########      */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x20, /* ####      #      */
-       0x78, 0x60, /*  ####    ##      */
-       0x3F, 0xE0, /*   #########      */
-       0x1F, 0xC0, /*    #######       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2540 'f' (7 pixels wide) */
-       0x00, /*          */
-       0x3E, /*   #####  */
-       0x7E, /*  ######  */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0xFE, /* #######  */
-       0xFE, /* #######  */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2560 'g' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0xC0, /*   ########       */
-       0x7F, 0xC0, /*  #########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0x7F, 0xC0, /*  #########       */
-       0x3B, 0xC0, /*   ### ####       */
-       0x03, 0xC0, /*       ####       */
-       0x47, 0xC0, /*  #   #####       */
-       0x7F, 0x80, /*  ########        */
-       0x7F, 0x00, /*  #######         */
-
-       /* @2600 'h' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0xC0, /* ##########       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2640 'i' (4 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2660 'j' (7 pixels wide) */
-       0x00, /*          */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x00, /*          */
-       0x7E, /*  ######  */
-       0x7E, /*  ######  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0x1E, /*    ####  */
-       0xFC, /* ######   */
-       0xF8, /* #####    */
-
-       /* @2680 'k' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF3, 0xE0, /* ####  #####      */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0x00, /* ########         */
-       0xFE, 0x00, /* #######          */
-       0xFE, 0x00, /* #######          */
-       0xFF, 0x00, /* ########         */
-       0xF7, 0x00, /* #### ###         */
-       0xF7, 0x80, /* #### ####        */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xE0, /* ####  #####      */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2720 'l' (4 pixels wide) */
-       0x00, /*          */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2740 'm' (16 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF7, 0x1C, /* #### ###   ###   */
-       0xFF, 0xBE, /* ######### #####  */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0xF3, 0xCF, /* ####  ####  #### */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2780 'n' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0xC0, /* ##########       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2820 'o' (11 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x1F, 0x00, /*    #####         */
-       0x7F, 0xC0, /*  #########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0xF1, 0xE0, /* ####   ####      */
-       0x7B, 0xC0, /*  #### ####       */
-       0x7F, 0xC0, /*  #########       */
-       0x1F, 0x00, /*    #####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @2860 'p' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF7, 0x00, /* #### ###         */
-       0xFF, 0x80, /* #########        */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF7, 0x80, /* #### ####        */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x00, /* ########         */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-       0xF0, 0x00, /* ####             */
-
-       /* @2900 'q' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0xC0, /*   ########       */
-       0x7F, 0xC0, /*  #########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0x7F, 0xC0, /*  #########       */
-       0x3B, 0xC0, /*   ### ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-       0x03, 0xC0, /*       ####       */
-
-       /* @2940 'r' (7 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0xF6, /* #### ##  */
-       0xFE, /* #######  */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0xF0, /* ####     */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @2960 's' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3F, 0x80, /*   #######        */
-       0x7F, 0x80, /*  ########        */
-       0xF0, 0x80, /* ####    #        */
-       0xF0, 0x00, /* ####             */
-       0xFE, 0x00, /* #######          */
-       0x7F, 0x00, /*  #######         */
-       0x3F, 0x80, /*   #######        */
-       0x87, 0x80, /* #    ####        */
-       0xC7, 0x80, /* ##   ####        */
-       0xFF, 0x00, /* ########         */
-       0x7E, 0x00, /*  ######          */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @3000 't' (8 pixels wide) */
-       0x00, /*          */
-       0x00, /*          */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0xFF, /* ######## */
-       0xFF, /* ######## */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x78, /*  ####    */
-       0x7F, /*  ####### */
-       0x1F, /*    ##### */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-       0x00, /*          */
-
-       /* @3020 'u' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xF3, 0xC0, /* ####  ####       */
-       0xFF, 0xC0, /* ##########       */
-       0x7B, 0xC0, /*  #### ####       */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @3060 'v' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0xF0, /* ####    ####     */
-       0x79, 0xE0, /*  ####  ####      */
-       0x79, 0xE0, /*  ####  ####      */
-       0x79, 0xE0, /*  ####  ####      */
-       0x3F, 0xC0, /*   ########       */
-       0x3F, 0xC0, /*   ########       */
-       0x3F, 0xC0, /*   ########       */
-       0x1F, 0x80, /*    ######        */
-       0x1F, 0x80, /*    ######        */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @3100 'w' (19 pixels wide) */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0xF0, 0xE1, 0xE0, /* ####    ###    ####      */
-       0xF8, 0xF3, 0xE0, /* #####   ####  #####      */
-       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
-       0x79, 0xF3, 0xC0, /*  ####  #####  ####       */
-       0x79, 0xB3, 0xC0, /*  ####  ## ##  ####       */
-       0x3D, 0xB7, 0x80, /*   #### ## ## ####        */
-       0x3F, 0xBF, 0x80, /*   ####### #######        */
-       0x3F, 0xBF, 0x80, /*   ####### #######        */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x1F, 0x1F, 0x00, /*    #####   #####         */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-       0x00, 0x00, 0x00, /*                          */
-
-       /* @3160 'x' (13 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF8, 0xF8, /* #####   #####    */
-       0x78, 0xF0, /*  ####   ####     */
-       0x3D, 0xE0, /*   #### ####      */
-       0x1F, 0xC0, /*    #######       */
-       0x1F, 0xC0, /*    #######       */
-       0x0F, 0x80, /*     #####        */
-       0x1F, 0xC0, /*    #######       */
-       0x1F, 0xC0, /*    #######       */
-       0x3D, 0xE0, /*   #### ####      */
-       0x78, 0xF0, /*  ####   ####     */
-       0xF8, 0xF8, /* #####   #####    */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @3200 'y' (12 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xF0, 0xF0, /* ####    ####     */
-       0x70, 0xE0, /*  ###    ###      */
-       0x79, 0xE0, /*  ####  ####      */
-       0x79, 0xE0, /*  ####  ####      */
-       0x39, 0xC0, /*   ###  ###       */
-       0x3F, 0xC0, /*   ########       */
-       0x3F, 0x80, /*   #######        */
-       0x1F, 0x80, /*    ######        */
-       0x1F, 0x80, /*    ######        */
-       0x0F, 0x00, /*     ####         */
-       0x0F, 0x00, /*     ####         */
-       0x0E, 0x00, /*     ###          */
-       0x1E, 0x00, /*    ####          */
-       0x1E, 0x00, /*    ####          */
-       0x3C, 0x00, /*   ####           */
-
-       /* @3240 'z' (9 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x07, 0x00, /*      ###         */
-       0x0F, 0x00, /*     ####         */
-       0x1E, 0x00, /*    ####          */
-       0x1C, 0x00, /*    ###           */
-       0x3C, 0x00, /*   ####           */
-       0x78, 0x00, /*  ####            */
-       0x70, 0x00, /*  ###             */
-       0xFF, 0x80, /* #########        */
-       0xFF, 0x80, /* #########        */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-
-       /* @3280 '{' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x03, 0xC0, /*       ####       */
-       0x07, 0xC0, /*      #####       */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x1C, 0x00, /*    ###           */
-       0xF8, 0x00, /* #####            */
-       0xF8, 0x00, /* #####            */
-       0x1C, 0x00, /*    ###           */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0E, 0x00, /*     ###          */
-       0x0F, 0x00, /*     ####         */
-       0x07, 0xC0, /*      #####       */
-       0x03, 0xC0, /*       ####       */
-
-       /* @3320 '|' (3 pixels wide) */
-       0x00, /*          */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-       0xE0, /* ###      */
-
-       /* @3340 '}' (10 pixels wide) */
-       0x00, 0x00, /*                  */
-       0xF0, 0x00, /* ####             */
-       0xF8, 0x00, /* #####            */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x0E, 0x00, /*     ###          */
-       0x07, 0xC0, /*      #####       */
-       0x07, 0xC0, /*      #####       */
-       0x0E, 0x00, /*     ###          */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x1C, 0x00, /*    ###           */
-       0x3C, 0x00, /*   ####           */
-       0xF8, 0x00, /* #####            */
-       0xF0, 0x00, /* ####             */
-
-       /* @3380 '~' (14 pixels wide) */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x3C, 0x1C, /*   ####     ###   */
-       0x7F, 0x1C, /*  #######   ###   */
-       0x7F, 0x9C, /*  ########  ###   */
-       0xE7, 0xF8, /* ###  ########    */
-       0xE3, 0xF8, /* ###   #######    */
-       0xE0, 0xF0, /* ###     ####     */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-       0x00, 0x00, /*                  */
-};
-
-/* Character descriptors for Verdana 14pt */
-/* { [Char width in bits], [Offset into verdanabold14ptCharBitmaps in bytes] } */
-const FONT_CHAR_INFO verdanabold14ptDescriptors[] = 
-{
-       {4, 0},                 /*   */ 
-       {4, 20},                /* ! */ 
-       {8, 40},                /* " */ 
-       {14, 60},               /* # */ 
-       {12, 100},              /* $ */ 
-       {22, 140},              /* % */ 
-       {15, 200},              /* & */ 
-       {3, 240},               /* ' */ 
-       {7, 260},               /* ( */ 
-       {7, 280},               /* ) */ 
-       {10, 300},              /* * */ 
-       {13, 340},              /* + */ 
-       {5, 380},               /* , */ 
-       {7, 400},               /* - */ 
-       {4, 420},               /* . */ 
-       {10, 440},              /* / */ 
-       {12, 480},              /* 0 */ 
-       {10, 520},              /* 1 */ 
-       {11, 560},              /* 2 */ 
-       {12, 600},              /* 3 */ 
-       {12, 640},              /* 4 */ 
-       {11, 680},              /* 5 */ 
-       {12, 720},              /* 6 */ 
-       {12, 760},              /* 7 */ 
-       {12, 800},              /* 8 */ 
-       {12, 840},              /* 9 */ 
-       {4, 880},               /* : */ 
-       {5, 900},               /* ; */ 
-       {12, 920},              /* < */ 
-       {12, 960},              /* = */ 
-       {12, 1000},             /* > */ 
-       {10, 1040},             /* ? */ 
-       {16, 1080},             /* @ */ 
-       {15, 1120},             /* A */ 
-       {11, 1160},             /* B */ 
-       {12, 1200},             /* C */ 
-       {13, 1240},             /* D */ 
-       {10, 1280},             /* E */ 
-       {9, 1320},              /* F */ 
-       {13, 1360},             /* G */ 
-       {12, 1400},             /* H */ 
-       {8, 1440},              /* I */ 
-       {9, 1460},              /* J */ 
-       {13, 1500},             /* K */ 
-       {10, 1540},             /* L */ 
-       {14, 1580},             /* M */ 
-       {12, 1620},             /* N */ 
-       {14, 1660},             /* O */ 
-       {11, 1700},             /* P */ 
-       {14, 1740},             /* Q */ 
-       {13, 1780},             /* R */ 
-       {12, 1820},             /* S */ 
-       {12, 1860},             /* T */ 
-       {11, 1900},             /* U */ 
-       {15, 1940},             /* V */ 
-       {19, 1980},             /* W */ 
-       {15, 2040},             /* X */ 
-       {14, 2080},             /* Y */ 
-       {11, 2120},             /* Z */ 
-       {6, 2160},              /* [ */ 
-       {10, 2180},             /* \ */ 
-       {6, 2220},              /* ] */ 
-       {13, 2240},             /* ^ */ 
-       {14, 2280},             /* _ */ 
-       {6, 2320},              /* ` */ 
-       {10, 2340},             /* a */ 
-       {10, 2380},             /* b */ 
-       {9, 2420},              /* c */ 
-       {10, 2460},             /* d */ 
-       {11, 2500},             /* e */ 
-       {7, 2540},              /* f */ 
-       {10, 2560},             /* g */ 
-       {10, 2600},             /* h */ 
-       {4, 2640},              /* i */ 
-       {7, 2660},              /* j */ 
-       {11, 2680},             /* k */ 
-       {4, 2720},              /* l */ 
-       {16, 2740},             /* m */ 
-       {10, 2780},             /* n */ 
-       {11, 2820},             /* o */ 
-       {10, 2860},             /* p */ 
-       {10, 2900},             /* q */ 
-       {7, 2940},              /* r */ 
-       {9, 2960},              /* s */ 
-       {8, 3000},              /* t */ 
-       {10, 3020},             /* u */ 
-       {12, 3060},             /* v */ 
-       {19, 3100},             /* w */ 
-       {13, 3160},             /* x */ 
-       {12, 3200},             /* y */ 
-       {9, 3240},              /* z */ 
-       {10, 3280},             /* { */ 
-       {3, 3320},              /* | */ 
-       {10, 3340},             /* } */ 
-       {14, 3380},             /* ~ */ 
-};
-
-/* Font information for Verdana Bold 14pt */
-const FONT_INFO verdanabold14ptFontInfo =
-{
-       20, /*  Character height */
-       ' ', /*  Start character */
-       '~', /*  End character */
-       verdanabold14ptDescriptors, /*  Character descriptor array */
-       verdanabold14ptBitmaps, /*  Character bitmap array */
-};
diff --git a/drivers/lcd/tft/fonts/verdanabold14.h b/drivers/lcd/tft/fonts/verdanabold14.h
deleted file mode 100644 (file)
index 0474fc7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __VERDANA_BOLD_14__
-#define __VERDANA_BOLD_14__
-
-#include "bitmapfonts.h"
-
-/* Font data for Verdana Bold 14pt */
-extern const uint8_t verdanabold14ptBitmaps[];
-extern const FONT_INFO verdanabold14ptFontInfo;
-extern const FONT_CHAR_INFO verdanabold14ptDescriptors[];
-
-#endif
\ No newline at end of file
diff --git a/drivers/lcd/tft/hw/ILI9325.c b/drivers/lcd/tft/hw/ILI9325.c
deleted file mode 100644 (file)
index 1e75eca..0000000
+++ /dev/null
@@ -1,647 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ILI9325.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for ILI9325 240x320 pixel TFT LCD displays.
-    
-    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
-    Should also work with SPFD5408B or OTM3225A-based LCDs, though
-    there are sometimes minor differences (for example vertical scrolling
-    via register 0x6A isn't supported on all controllers).
-
-    @section  UPDATES
-
-    26-11-2010: ili9325ReadData contributed by Adafruit Industries
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "ILI9325.h"
-#include "core/systick/systick.h"
-#include "drivers/lcd/tft/touchscreen.h"
-
-// Uncomment this to use faster inline methods, but requires more flash
-// #define ILI9235_USE_INLINE_METHODS (1)
-
-static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t ili9325Properties = { 240, 320, TRUE, TRUE, TRUE };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Causes a brief delay (10 ticks per unit)
-*/
-/**************************************************************************/
-#if !defined ILI9235_USE_INLINE_METHODS
-void ili9325Delay(unsigned int t)
-{
-  unsigned char t1;
-  while(t--)
-  for ( t1=10; t1 > 0; t1-- )
-  {
-    __asm("nop");
-  }
-}
-#else
-static inline uint32_t ili9325Delay(unsigned int t)     { unsigned char t1; while(t--) for ( t1=10; t1 > 0; t1-- ) { __asm("nop"); } }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Writes the supplied 16-bit command using an 8-bit interface
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9325WriteCmd(uint16_t command) 
-{
-  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
-  // (versus 36 compiled with no optimisations).  I'm not sure it
-  // can be improved further, so that means 25 cycles/350nS for
-  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
-  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
-  // Set color [cmd+data]) (times assumes 72MHz clock).
-
-  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
-  ILI9325_GPIO2DATA_DATA = (command >> (8 - ILI9325_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ILI9325_GPIO2DATA_DATA = command << ILI9325_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
-}
-#else
-static inline void ili9325WriteCmd(uint16_t command) { CLR_CS_CD_SET_RD_WR; ILI9325_GPIO2DATA_DATA = (command >> (8 - ILI9325_DATA_OFFSET)); CLR_WR; SET_WR; ILI9325_GPIO2DATA_DATA = command << ILI9325_DATA_OFFSET; CLR_WR; SET_WR_CS; }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Writes the supplied 16-bit data using an 8-bit interface
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9325WriteData(uint16_t data)
-{
-  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
-  ILI9325_GPIO2DATA_DATA = (data >> (8 - ILI9325_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ILI9325_GPIO2DATA_DATA = data << ILI9325_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
-}
-#else
-static inline void ili9325WriteData(uint16_t data) {   CLR_CS_SET_CD_RD_WR; ILI9325_GPIO2DATA_DATA = (data >> (8 - ILI9325_DATA_OFFSET)); CLR_WR; SET_WR; ILI9325_GPIO2DATA_DATA = data << ILI9325_DATA_OFFSET; CLR_WR; SET_WR_CS; }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value from the 8-bit data bus
-*/
-/**************************************************************************/
-uint16_t ili9325ReadData(void)
-{
-  // ToDo: Optimise this method!
-
-  uint16_t high, low;
-  high = low = 0;
-  uint16_t d;
-
-  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
-  CLR_CS;
-  
-  // set inputs
-  ILI9325_GPIO2DATA_SETINPUT;
-  CLR_RD;
-  ili9325Delay(100);
-  high = ILI9325_GPIO2DATA_DATA;  
-  high >>= ILI9325_DATA_OFFSET;
-  high &= 0xFF;
-  SET_RD;
-  
-  CLR_RD;
-  ili9325Delay(100);
-  low = ILI9325_GPIO2DATA_DATA;
-  low >>= ILI9325_DATA_OFFSET;
-  low &=0xFF;
-  SET_RD;
-  
-  SET_CS;
-  ILI9325_GPIO2DATA_SETOUTPUT;
-
-  d = high;
-  d <<= 8;
-  d |= low;
-  
-  return d;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value
-*/
-/**************************************************************************/
-uint16_t ili9325Read(uint16_t addr)
-{
-  ili9325WriteCmd(addr);
-  return ili9325ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sends a 16-bit command + 16-bit data
-*/
-/**************************************************************************/
-void ili9325Command(uint16_t command, uint16_t data)
-{
-  ili9325WriteCmd(command);
-  ili9325WriteData(data);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the 16-bit (4-hexdigit) controller code
-*/
-/**************************************************************************/
-uint16_t ili9325Type(void)
-{
-  ili9325WriteCmd(ILI9325_COMMANDS_DRIVERCODEREAD);
-  return ili9325ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the specified X/Y position
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9325SetCursor(uint16_t x, uint16_t y)
-{
-  uint16_t al, ah;
-  
-  if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE)
-  {
-    al = y;
-    ah = x;
-  }
-  else
-  {
-    al = x;
-    ah = y;
-  }
-
-  ili9325Command(ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET, al);
-  ili9325Command(ILI9325_COMMANDS_VERTICALGRAMADDRESSSET, ah);
-}
-#else
-static inline void ili9325SetCursor(uint16_t x, uint16_t y) { uint16_t al, ah; if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE) { al = y; ah = x; } else { al = x; ah = y; }; ili9325WriteCmd(ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET); ili9325WriteData(al); ili9325WriteCmd(ILI9325_COMMANDS_VERTICALGRAMADDRESSSET); ili9325WriteData(ah); }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Sends the initialisation sequence to the display controller
-*/
-/**************************************************************************/
-void ili9325InitDisplay(void)
-{
-  // Clear data line
-  GPIO_GPIO2DATA &= ~ILI9325_DATA_MASK;
-    
-  SET_RD;
-  SET_WR;
-  SET_CS;
-  SET_CD;
-
-  // Reset display
-  CLR_RESET;
-  ili9325Delay(10000);
-  SET_RESET;
-  ili9325Delay(500);
-
-  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1, 0x0100);  // Driver Output Control Register (R01h)
-  ili9325Command(ILI9325_COMMANDS_LCDDRIVINGCONTROL, 0x0700);     // LCD Driving Waveform Control (R02h)
-  ili9325Command(ILI9325_COMMANDS_ENTRYMODE, 0x1030);             // Entry Mode (R03h)  
-  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL2, 0x0302);
-  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL3, 0x0000);
-  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL4, 0x0000);       // Fmark On
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL1, 0x0000);         // Power Control 1 (R10h)
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL3, 0x0000);         // Power Control 3 (R12h)
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL4, 0x0000);         // Power Control 4 (R13h)
-  ili9325Delay(1000);  
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL1, 0x14B0);         // Power Control 1 (R10h)  
-  ili9325Delay(500);  
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)  
-  ili9325Delay(500);  
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL3, 0x008E);         // Power Control 3 (R12h)
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL4, 0x0C00);         // Power Control 4 (R13h)
-  ili9325Command(ILI9325_COMMANDS_POWERCONTROL7, 0x0015);         // NVM read data 2 (R29h)
-  ili9325Delay(500);
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL1, 0x0000);         // Gamma Control 1
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL2, 0x0107);         // Gamma Control 2
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL3, 0x0000);         // Gamma Control 3
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL4, 0x0203);         // Gamma Control 4
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL5, 0x0402);         // Gamma Control 5
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL6, 0x0000);         // Gamma Control 6
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL7, 0x0207);         // Gamma Control 7
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL8, 0x0000);         // Gamma Control 8
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL9, 0x0203);         // Gamma Control 9
-  ili9325Command(ILI9325_COMMANDS_GAMMACONTROL10, 0x0403);        // Gamma Control 10
-  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, 0x0000);                      // Window Horizontal RAM Address Start (R50h)
-  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION, ili9325Properties.width - 1);   // Window Horizontal RAM Address End (R51h)
-  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION, 0X0000);                        // Window Vertical RAM Address Start (R52h)
-  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION, ili9325Properties.height - 1);    // Window Vertical RAM Address End (R53h)
-  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL2, 0xa700);    // Driver Output Control (R60h)
-  ili9325Command(ILI9325_COMMANDS_BASEIMAGEDISPLAYCONTROL, 0x0003); // Driver Output Control (R61h) - enable VLE
-  ili9325Command(ILI9325_COMMANDS_PANELINTERFACECONTROL1, 0X0010);  // Panel Interface Control 1 (R90h)
-
-  // Display On
-  ili9325Command(ILI9325_COMMANDS_DISPLAYCONTROL1, 0x0133);     // Display Control (R07h)
-  ili9325Delay(500);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the home position (0,0)
-*/
-/**************************************************************************/
-void ili9325Home(void)
-{
-  ili9325SetCursor(0, 0);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);            // Write Data to GRAM (R22h)
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the window confines
-*/
-/**************************************************************************/
-void ili9325SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
-{
-  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, x0);
-  ili9325Command(ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION, x1);
-  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION, y0);
-  ili9325Command(ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION, y1);
-  ili9325SetCursor(x0, y0);
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Configures any pins or HW and initialises the LCD controller
-*/
-/**************************************************************************/
-void lcdInit(void)
-{
-  // Set control line pins to output
-  gpioSetDir(ILI9325_CS_PORT, ILI9325_CS_PIN, 1);
-  gpioSetDir(ILI9325_CD_PORT, ILI9325_CD_PIN, 1);
-  gpioSetDir(ILI9325_WR_PORT, ILI9325_WR_PIN, 1);
-  gpioSetDir(ILI9325_RD_PORT, ILI9325_RD_PIN, 1);
-  
-  // Set data port pins to output
-  ILI9325_GPIO2DATA_SETOUTPUT;
-
-  // Disable pullups
-  ILI9325_DISABLEPULLUPS();
-  
-  // Set backlight pin to output and turn it on
-  gpioSetDir(ILI9325_BL_PORT, ILI9325_BL_PIN, 1);      // set to output
-  lcdBacklight(TRUE);
-
-  // Set reset pin to output
-  gpioSetDir(ILI9325_RES_PORT, ILI9325_RES_PIN, 1);    // Set to output
-  gpioSetValue(ILI9325_RES_PORT, ILI9325_RES_PIN, 0);  // Low to reset
-  systickDelay(50);
-  gpioSetValue(ILI9325_RES_PORT, ILI9325_RES_PIN, 1);  // High to exit
-
-  // Initialize the display
-  ili9325InitDisplay();
-
-  systickDelay(50);
-
-  // Set lcd to default orientation
-  lcdSetOrientation(lcdOrientation);
-
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-  
-  // Initialise the touch screen (and calibrate if necessary)
-  tsInit();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Enables or disables the LCD backlight
-*/
-/**************************************************************************/
-void lcdBacklight(bool state)
-{
-  // Set the backlight
-  gpioSetValue(ILI9325_BL_PORT, ILI9325_BL_PIN, state ? 0 : 1);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a simple test pattern on the LCD
-*/
-/**************************************************************************/
-void lcdTest(void)
-{
-  uint32_t i,j;
-  ili9325Home();
-  
-  for(i=0;i<320;i++)
-  {
-    for(j=0;j<240;j++)
-    {
-      if(i>279)ili9325WriteData(COLOR_WHITE);
-      else if(i>239)ili9325WriteData(COLOR_BLUE);
-      else if(i>199)ili9325WriteData(COLOR_GREEN);
-      else if(i>159)ili9325WriteData(COLOR_CYAN);
-      else if(i>119)ili9325WriteData(COLOR_RED);
-      else if(i>79)ili9325WriteData(COLOR_MAGENTA);
-      else if(i>39)ili9325WriteData(COLOR_YELLOW);
-      else ili9325WriteData(COLOR_BLACK);
-    }
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Fills the LCD with the specified 16-bit color
-*/
-/**************************************************************************/
-void lcdFillRGB(uint16_t data)
-{
-  unsigned int i;
-  ili9325Home();
-  
-  uint32_t pixels = 320*240;
-  for ( i=0; i < pixels; i++ )
-  {
-    ili9325WriteData(data);
-  } 
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a single pixel at the specified X/Y location
-*/
-/**************************************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  ili9325SetCursor(x, y);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
-  ili9325WriteData(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  uint32_t i = 0;
-  ili9325SetCursor(x, y);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
-  do
-  {
-    ili9325WriteData(data[i]);
-    i++;
-  } while (i<len);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a horizontal line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t x, pixels;
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  // Check limits
-  if (x1 >= lcdGetWidth())
-  {
-    x1 = lcdGetWidth() - 1;
-  }
-  if (x0 >= lcdGetWidth())
-  {
-    x0 = lcdGetWidth() - 1;
-  }
-
-  ili9325SetCursor(x0, y);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
-  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
-  {
-    ili9325WriteData(color);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a vertical line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  lcdOrientation_t oldOrientation = lcdOrientation;
-
-  if (oldOrientation == LCD_ORIENTATION_PORTRAIT)
-  {
-    lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
-    lcdDrawHLine(y0, y1, lcdGetHeight() - (x + 1), color);
-  }
-  else
-  {
-    lcdSetOrientation(LCD_ORIENTATION_PORTRAIT);
-    lcdDrawHLine(lcdGetWidth() - (y0 + 1), lcdGetWidth() - (y1 + 1), x, color);
-  }
-
-  // Switch orientation back
-  lcdSetOrientation(oldOrientation);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the 16-bit color of the pixel at the specified location
-*/
-/**************************************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  uint16_t preFetch = 0;
-
-  ili9325SetCursor(x, y);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
-  preFetch = ili9325ReadData();
-
-  // Eeek ... why does this need to be done twice for a proper value?!?
-  ili9325SetCursor(x, y);
-  ili9325WriteCmd(ILI9325_COMMANDS_WRITEDATATOGRAM);
-  return ili9325ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the LCD orientation to horizontal and vertical
-*/
-/**************************************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  uint16_t entryMode = 0x1030;
-  uint16_t outputControl = 0x0100;
-
-  switch (orientation)
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      entryMode = 0x1030;
-      outputControl = 0x0100;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-      entryMode = 0x1028;
-      outputControl = 0x0000;
-      break;
-  }
-
-  ili9325Command(ILI9325_COMMANDS_ENTRYMODE, entryMode);
-  ili9325Command(ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1, outputControl);
-  lcdOrientation = orientation;
-
-  ili9325SetCursor(0, 0);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the current screen orientation (horizontal or vertical)
-*/
-/**************************************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the width in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetWidth(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return ili9325Properties.width;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return ili9325Properties.height;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the height in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetHeight(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return ili9325Properties.height;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return ili9325Properties.width;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Scrolls the contents of the LCD screen vertically the
-            specified number of pixels using a HW optimised routine
-*/
-/**************************************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  int16_t y = pixels;
-  while (y < 0)
-    y += 320;
-  while (y >= 320)
-    y -= 320;
-  ili9325WriteCmd(ILI9325_COMMANDS_VERTICALSCROLLCONTROL);
-  ili9325WriteData(y);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the controller's 16-bit (4 hexdigit) ID
-*/
-/**************************************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return ili9325Type();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
-            generic capabilities and dimensions
-*/
-/**************************************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-    return ili9325Properties;
-}
diff --git a/drivers/lcd/tft/hw/ILI9325.h b/drivers/lcd/tft/hw/ILI9325.h
deleted file mode 100644 (file)
index a589c40..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ILI9325.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __ILI9325_H__
-#define __ILI9325_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/tft/lcd.h"
-#include "core/gpio/gpio.h"
-
-// Control pins
-#define ILI9325_CS_PORT           1     // CS (LCD Pin 7)
-#define ILI9325_CS_PIN            8
-#define ILI9325_CD_PORT           1     // CS/RS (LCD Pin 8)
-#define ILI9325_CD_PIN            9
-#define ILI9325_WR_PORT           1     // WR (LCD Pin 9)
-#define ILI9325_WR_PIN            10
-#define ILI9325_RD_PORT           1     // RD (LCD Pin 10)
-#define ILI9325_RD_PIN            11
-
-// These combined pin definitions are for optimisation purposes.
-// If the pin values above are modified the bit equivalents
-// below will also need to be updated
-#define ILI9325_CS_CD_PINS        0x300   // 8 + 9
-#define ILI9325_RD_WR_PINS        0xC00   // 11 + 10
-#define ILI9325_WR_CS_PINS        0x500   // 10 + 8
-#define ILI9325_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
-#define ILI9325_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
-
-// Backlight and Reset pins
-#define ILI9325_RES_PORT          3     // LCD Reset  (LCD Pin 31)
-#define ILI9325_RES_PIN           3
-#define ILI9325_BL_PORT           2     // Backlight Enable (LCD Pin 16)
-#define ILI9325_BL_PIN            9
-
-// Data pins
-// Note: data pins must be consecutive and on the same port
-#define ILI9325_DATA_PORT         2     // 8-Pin Data Port
-#define ILI9325_DATA_PIN1         1
-#define ILI9325_DATA_PIN2         2
-#define ILI9325_DATA_PIN3         3
-#define ILI9325_DATA_PIN4         4
-#define ILI9325_DATA_PIN5         5
-#define ILI9325_DATA_PIN6         6
-#define ILI9325_DATA_PIN7         7
-#define ILI9325_DATA_PIN8         8
-#define ILI9325_DATA_MASK         0x000001FE
-#define ILI9325_DATA_OFFSET       1    // Offset = PIN1
-
-// Placed here to try to keep all pin specific values in header file
-#define ILI9325_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
-
-// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
-#define ILI9325_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ILI9325_DATA_MASK << 2))))
-#define ILI9325_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_WR_PIN) << 2))))
-#define ILI9325_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_CD_PIN) << 2))))
-#define ILI9325_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_CS_PIN) << 2))))
-#define ILI9325_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9325_RD_PIN) << 2))))
-#define ILI9325_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ILI9325_RES_PIN) << 2))))
-#define ILI9325_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CS_CD_PINS) << 2))))
-#define ILI9325_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_RD_WR_PINS) << 2))))
-#define ILI9325_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_WR_CS_PINS) << 2))))
-#define ILI9325_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CD_RD_WR_PINS) << 2))))
-#define ILI9325_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9325_CS_CD_RD_WR_PINS) << 2))))
-
-// Macros to set data bus direction to input/output
-#define ILI9325_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ILI9325_DATA_MASK
-#define ILI9325_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ILI9325_DATA_MASK
-
-// Macros for control line state
-#define CLR_CD          ILI9325_GPIO1DATA_CD = (0)
-#define SET_CD          ILI9325_GPIO1DATA_CD = (1 << ILI9325_CD_PIN)
-#define CLR_CS          ILI9325_GPIO1DATA_CS = (0)
-#define SET_CS          ILI9325_GPIO1DATA_CS = (1 << ILI9325_CS_PIN)
-#define CLR_WR          ILI9325_GPIO1DATA_WR = (0)
-#define SET_WR          ILI9325_GPIO1DATA_WR = (1 << ILI9325_WR_PIN)
-#define CLR_RD          ILI9325_GPIO1DATA_RD = (0)
-#define SET_RD          ILI9325_GPIO1DATA_RD = (1 << ILI9325_RD_PIN)
-#define CLR_RESET       ILI9325_GPIO3DATA_RES = (0)
-#define SET_RESET       ILI9325_GPIO3DATA_RES = (1 << ILI9325_RES_PIN)
-
-// These 'combined' macros are defined to improve code performance by
-// reducing the number of instructions in heavily used functions
-#define CLR_CS_CD           ILI9325_GPIO1DATA_CS_CD = (0);
-#define SET_RD_WR           ILI9325_GPIO1DATA_RD_WR = (ILI9325_RD_WR_PINS);
-#define SET_WR_CS           ILI9325_GPIO1DATA_WR_CS = (ILI9325_WR_CS_PINS);
-#define SET_CD_RD_WR        ILI9325_GPIO1DATA_CD_RD_WR = (ILI9325_CD_RD_WR_PINS);
-#define CLR_CS_CD_SET_RD_WR ILI9325_GPIO1DATA_CS_CD_RD_WR = (ILI9325_RD_WR_PINS);
-#define CLR_CS_SET_CD_RD_WR ILI9325_GPIO1DATA_CS_CD_RD_WR = (ILI9325_CD_RD_WR_PINS);
-
-enum
-{
-  ILI9325_COMMANDS_DRIVERCODEREAD                 = 0x0000,
-  ILI9325_COMMANDS_DRIVEROUTPUTCONTROL1           = 0x0001,
-  ILI9325_COMMANDS_LCDDRIVINGCONTROL              = 0x0002,
-  ILI9325_COMMANDS_ENTRYMODE                      = 0x0003,
-  ILI9325_COMMANDS_RESIZECONTROL                  = 0x0004,
-  ILI9325_COMMANDS_DISPLAYCONTROL1                = 0x0007,
-  ILI9325_COMMANDS_DISPLAYCONTROL2                = 0x0008,
-  ILI9325_COMMANDS_DISPLAYCONTROL3                = 0x0009,
-  ILI9325_COMMANDS_DISPLAYCONTROL4                = 0x000A,
-  ILI9325_COMMANDS_RGBDISPLAYINTERFACECONTROL1    = 0x000C,
-  ILI9325_COMMANDS_FRAMEMAKERPOSITION             = 0x000D,
-  ILI9325_COMMANDS_RGBDISPLAYINTERFACECONTROL2    = 0x000F,
-  ILI9325_COMMANDS_POWERCONTROL1                  = 0x0010,
-  ILI9325_COMMANDS_POWERCONTROL2                  = 0x0011,
-  ILI9325_COMMANDS_POWERCONTROL3                  = 0x0012,
-  ILI9325_COMMANDS_POWERCONTROL4                  = 0x0013,
-  ILI9325_COMMANDS_HORIZONTALGRAMADDRESSSET       = 0x0020,
-  ILI9325_COMMANDS_VERTICALGRAMADDRESSSET         = 0x0021,
-  ILI9325_COMMANDS_WRITEDATATOGRAM                = 0x0022,
-  ILI9325_COMMANDS_POWERCONTROL7                  = 0x0029,
-  ILI9325_COMMANDS_FRAMERATEANDCOLORCONTROL       = 0x002B,
-  ILI9325_COMMANDS_GAMMACONTROL1                  = 0x0030,
-  ILI9325_COMMANDS_GAMMACONTROL2                  = 0x0031,
-  ILI9325_COMMANDS_GAMMACONTROL3                  = 0x0032,
-  ILI9325_COMMANDS_GAMMACONTROL4                  = 0x0035,
-  ILI9325_COMMANDS_GAMMACONTROL5                  = 0x0036,
-  ILI9325_COMMANDS_GAMMACONTROL6                  = 0x0037,
-  ILI9325_COMMANDS_GAMMACONTROL7                  = 0x0038,
-  ILI9325_COMMANDS_GAMMACONTROL8                  = 0x0039,
-  ILI9325_COMMANDS_GAMMACONTROL9                  = 0x003C,
-  ILI9325_COMMANDS_GAMMACONTROL10                 = 0x003D,
-  ILI9325_COMMANDS_HORIZONTALADDRESSSTARTPOSITION = 0x0050,
-  ILI9325_COMMANDS_HORIZONTALADDRESSENDPOSITION   = 0x0051,
-  ILI9325_COMMANDS_VERTICALADDRESSSTARTPOSITION   = 0x0052,
-  ILI9325_COMMANDS_VERTICALADDRESSENDPOSITION     = 0x0053,
-  ILI9325_COMMANDS_DRIVEROUTPUTCONTROL2           = 0x0060,
-  ILI9325_COMMANDS_BASEIMAGEDISPLAYCONTROL        = 0x0061,
-  ILI9325_COMMANDS_VERTICALSCROLLCONTROL          = 0x006A,
-  ILI9325_COMMANDS_PARTIALIMAGE1DISPLAYPOSITION   = 0x0080,
-  ILI9325_COMMANDS_PARTIALIMAGE1AREASTARTLINE     = 0x0081,
-  ILI9325_COMMANDS_PARTIALIMAGE1AREAENDLINE       = 0x0082,
-  ILI9325_COMMANDS_PARTIALIMAGE2DISPLAYPOSITION   = 0x0083,
-  ILI9325_COMMANDS_PARTIALIMAGE2AREASTARTLINE     = 0x0084,
-  ILI9325_COMMANDS_PARTIALIMAGE2AREAENDLINE       = 0x0085,
-  ILI9325_COMMANDS_PANELINTERFACECONTROL1         = 0x0090,
-  ILI9325_COMMANDS_PANELINTERFACECONTROL2         = 0x0092,
-  ILI9325_COMMANDS_PANELINTERFACECONTROL4         = 0x0095,
-  ILI9325_COMMANDS_OTPVCMPROGRAMMINGCONTROL       = 0x00A1,
-  ILI9325_COMMANDS_OTPVCMSTATUSANDENABLE          = 0x00A2,
-  ILI9325_COMMANDS_OTPPROGRAMMINGIDKEY            = 0x00A5
-};
-
-#endif
diff --git a/drivers/lcd/tft/hw/ILI9328.c b/drivers/lcd/tft/hw/ILI9328.c
deleted file mode 100644 (file)
index aba75c2..0000000
+++ /dev/null
@@ -1,639 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ILI9328.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for ILI9328 240x320 pixel TFT LCD displays.
-    
-    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "ILI9328.h"
-#include "core/systick/systick.h"
-#include "drivers/lcd/tft/touchscreen.h"
-
-// Uncomment this to use faster inline methods, but requires more flash
-#define ILI9238_USE_INLINE_METHODS (1)
-
-static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t ili9328Properties = { 240, 320, TRUE, TRUE, TRUE };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Causes a brief delay (10 ticks per unit)
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9328Delay(unsigned int t)
-{
-  unsigned char t1;
-  while(t--)
-  for ( t1=10; t1 > 0; t1-- )
-  {
-    __asm("nop");
-  }
-}
-#else
-static inline void ili9328Delay(unsigned int t)     { unsigned char t1; while(t--) for ( t1=10; t1 > 0; t1-- ) { __asm("nop"); } }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Writes the supplied 16-bit command using an 8-bit interface
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9328WriteCmd(uint16_t command) 
-{
-  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
-  // (versus 36 compiled with no optimisations).  I'm not sure it
-  // can be improved further, so that means 25 cycles/350nS for
-  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
-  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
-  // Set color [cmd+data]) (times assumes 72MHz clock).
-
-  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
-  ILI9328_GPIO2DATA_DATA = (command >> (8 - ILI9328_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ILI9328_GPIO2DATA_DATA = command << ILI9328_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
-}
-#else
-static inline void ili9328WriteCmd(uint16_t command) { CLR_CS_CD_SET_RD_WR; ILI9328_GPIO2DATA_DATA = (command >> (8 - ILI9328_DATA_OFFSET)); CLR_WR; SET_WR; ILI9328_GPIO2DATA_DATA = command << ILI9328_DATA_OFFSET; CLR_WR; SET_WR_CS; }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Writes the supplied 16-bit data using an 8-bit interface
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9328WriteData(uint16_t data)
-{
-  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
-  ILI9328_GPIO2DATA_DATA = (data >> (8 - ILI9328_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ILI9328_GPIO2DATA_DATA = data << ILI9328_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
-}
-#else
-static inline void ili9328WriteData(uint16_t data) {   CLR_CS_SET_CD_RD_WR; ILI9328_GPIO2DATA_DATA = (data >> (8 - ILI9328_DATA_OFFSET)); CLR_WR; SET_WR; ILI9328_GPIO2DATA_DATA = data << ILI9328_DATA_OFFSET; CLR_WR; SET_WR_CS; }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value from the 8-bit data bus
-*/
-/**************************************************************************/
-uint16_t ili9328ReadData(void)
-{
-  // ToDo: Optimise this method!
-
-  uint16_t high, low;
-  high = low = 0;
-  uint16_t d;
-
-  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
-  CLR_CS;
-  
-  // set inputs
-  ILI9328_GPIO2DATA_SETINPUT;
-  CLR_RD;
-  ili9328Delay(100);
-  high = ILI9328_GPIO2DATA_DATA;  
-  high >>= ILI9328_DATA_OFFSET;
-  high &= 0xFF;
-  SET_RD;
-  
-  CLR_RD;
-  ili9328Delay(100);
-  low = ILI9328_GPIO2DATA_DATA;
-  low >>= ILI9328_DATA_OFFSET;
-  low &=0xFF;
-  SET_RD;
-  
-  SET_CS;
-  ILI9328_GPIO2DATA_SETOUTPUT;
-
-  d = high;
-  d <<= 8;
-  d |= low;
-  
-  return d;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value
-*/
-/**************************************************************************/
-uint16_t ili9328Read(uint16_t addr)
-{
-  ili9328WriteCmd(addr);
-  return ili9328ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sends a 16-bit command + 16-bit data
-*/
-/**************************************************************************/
-void ili9328Command(uint16_t command, uint16_t data)
-{
-  ili9328WriteCmd(command);
-  ili9328WriteData(data);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the 16-bit (4-hexdigit) controller code
-*/
-/**************************************************************************/
-uint16_t ili9328Type(void)
-{
-  ili9328WriteCmd(ILI9328_COMMANDS_DRIVERCODEREAD);
-  return ili9328ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the specified X/Y position
-*/
-/**************************************************************************/
-#if !defined ILI9238_USE_INLINE_METHODS
-void ili9328SetCursor(uint16_t x, uint16_t y)
-{
-  uint16_t al, ah;
-  
-  if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE)
-  {
-    al = y;
-    ah = x;
-  }
-  else
-  {
-    al = x;
-    ah = y;
-  }
-
-  ili9328Command(ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET, al);
-  ili9328Command(ILI9328_COMMANDS_VERTICALGRAMADDRESSSET, ah);
-}
-#else
-static inline void ili9328SetCursor(uint16_t x, uint16_t y) { uint16_t al, ah; if (lcdOrientation == LCD_ORIENTATION_LANDSCAPE) { al = y; ah = x; } else { al = x; ah = y; }; ili9328WriteCmd(ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET); ili9328WriteData(al); ili9328WriteCmd(ILI9328_COMMANDS_VERTICALGRAMADDRESSSET); ili9328WriteData(ah); }
-#endif
-
-/**************************************************************************/
-/*! 
-    @brief  Sends the initialisation sequence to the display controller
-*/
-/**************************************************************************/
-void ili9328InitDisplay(void)
-{
-  // Clear data line
-  GPIO_GPIO2DATA &= ~ILI9328_DATA_MASK;
-    
-  SET_RD;
-  SET_WR;
-  SET_CS;
-  SET_CD;
-
-  // Reset display
-  CLR_RESET;
-  ili9328Delay(100);
-  SET_RESET;
-  ili9328Delay(1000);
-
-  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1, 0x0100);  // Driver Output Control Register (R01h)
-  ili9328Command(ILI9328_COMMANDS_LCDDRIVINGCONTROL, 0x0700);     // LCD Driving Waveform Control (R02h)
-  ili9328Command(ILI9328_COMMANDS_ENTRYMODE, 0x1030);             // Entry Mode (R03h)  
-  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL2, 0x0302);
-  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL3, 0x0000);
-  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL4, 0x0000);       // Fmark On
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL1, 0x0000);         // Power Control 1 (R10h)
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL3, 0x0000);         // Power Control 3 (R12h)
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL4, 0x0000);         // Power Control 4 (R13h)
-  ili9328Delay(1000);  
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL1, 0x14B0);         // Power Control 1 (R10h)  
-  ili9328Delay(500);  
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL2, 0x0007);         // Power Control 2 (R11h)  
-  ili9328Delay(500);  
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL3, 0x008E);         // Power Control 3 (R12h)
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL4, 0x0C00);         // Power Control 4 (R13h)
-  ili9328Command(ILI9328_COMMANDS_POWERCONTROL7, 0x0015);         // NVM read data 2 (R29h)
-  ili9328Delay(500);
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL1, 0x0000);         // Gamma Control 1
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL2, 0x0107);         // Gamma Control 2
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL3, 0x0000);         // Gamma Control 3
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL4, 0x0203);         // Gamma Control 4
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL5, 0x0402);         // Gamma Control 5
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL6, 0x0000);         // Gamma Control 6
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL7, 0x0207);         // Gamma Control 7
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL8, 0x0000);         // Gamma Control 8
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL9, 0x0203);         // Gamma Control 9
-  ili9328Command(ILI9328_COMMANDS_GAMMACONTROL10, 0x0403);        // Gamma Control 10
-  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, 0x0000);                      // Window Horizontal RAM Address Start (R50h)
-  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION, ili9328Properties.width - 1);   // Window Horizontal RAM Address End (R51h)
-  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION, 0X0000);                        // Window Vertical RAM Address Start (R52h)
-  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION, ili9328Properties.height - 1);    // Window Vertical RAM Address End (R53h)
-  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL2, 0xa700);    // Driver Output Control (R60h)
-  ili9328Command(ILI9328_COMMANDS_BASEIMAGEDISPLAYCONTROL, 0x0003); // Driver Output Control (R61h) - enable VLE
-  ili9328Command(ILI9328_COMMANDS_PANELINTERFACECONTROL1, 0X0010);  // Panel Interface Control 1 (R90h)
-
-  // Display On
-  ili9328Command(ILI9328_COMMANDS_DISPLAYCONTROL1, 0x0133);     // Display Control (R07h)
-  ili9328Delay(500);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the home position (0,0)
-*/
-/**************************************************************************/
-void ili9328Home(void)
-{
-  ili9328SetCursor(0, 0);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);            // Write Data to GRAM (R22h)
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the window confines
-*/
-/**************************************************************************/
-void ili9328SetWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1)
-{
-  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION, x0);
-  ili9328Command(ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION, x1);
-  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION, y0);
-  ili9328Command(ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION, y1);
-  ili9328SetCursor(x0, y0);
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Configures any pins or HW and initialises the LCD controller
-*/
-/**************************************************************************/
-void lcdInit(void)
-{
-  // Set control line pins to output
-  gpioSetDir(ILI9328_CS_PORT, ILI9328_CS_PIN, 1);
-  gpioSetDir(ILI9328_CD_PORT, ILI9328_CD_PIN, 1);
-  gpioSetDir(ILI9328_WR_PORT, ILI9328_WR_PIN, 1);
-  gpioSetDir(ILI9328_RD_PORT, ILI9328_RD_PIN, 1);
-  
-  // Set data port pins to output
-  ILI9328_GPIO2DATA_SETOUTPUT;
-
-  // Disable pullups
-  ILI9328_DISABLEPULLUPS();
-  
-  // Set backlight pin to output and turn it on
-  gpioSetDir(ILI9328_BL_PORT, ILI9328_BL_PIN, 1);      // set to output
-  lcdBacklight(TRUE);
-
-  // Set reset pin to output
-  gpioSetDir(ILI9328_RES_PORT, ILI9328_RES_PIN, 1);    // Set to output
-  gpioSetValue(ILI9328_RES_PORT, ILI9328_RES_PIN, 0);  // Low to reset
-  systickDelay(50);
-  gpioSetValue(ILI9328_RES_PORT, ILI9328_RES_PIN, 1);  // High to exit
-
-  // Initialize the display
-  ili9328InitDisplay();
-
-  systickDelay(50);
-
-  // Set lcd to default orientation
-  lcdSetOrientation(lcdOrientation);
-
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-  
-  // Initialise the touch screen (and calibrate if necessary)
-  tsInit();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Enables or disables the LCD backlight
-*/
-/**************************************************************************/
-void lcdBacklight(bool state)
-{
-  // Set the backlight
-  gpioSetValue(ILI9328_BL_PORT, ILI9328_BL_PIN, state ? 0 : 1);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a simple test pattern on the LCD
-*/
-/**************************************************************************/
-void lcdTest(void)
-{
-  uint32_t i,j;
-  ili9328Home();
-  
-  for(i=0;i<320;i++)
-  {
-    for(j=0;j<240;j++)
-    {
-      if(i>279)ili9328WriteData(COLOR_WHITE);
-      else if(i>239)ili9328WriteData(COLOR_BLUE);
-      else if(i>199)ili9328WriteData(COLOR_GREEN);
-      else if(i>159)ili9328WriteData(COLOR_CYAN);
-      else if(i>119)ili9328WriteData(COLOR_RED);
-      else if(i>79)ili9328WriteData(COLOR_MAGENTA);
-      else if(i>39)ili9328WriteData(COLOR_YELLOW);
-      else ili9328WriteData(COLOR_BLACK);
-    }
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Fills the LCD with the specified 16-bit color
-*/
-/**************************************************************************/
-void lcdFillRGB(uint16_t data)
-{
-  unsigned int i;
-  ili9328Home();
-  
-  uint32_t pixels = 320*240;
-  for ( i=0; i < pixels; i++ )
-  {
-    ili9328WriteData(data);
-  } 
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a single pixel at the specified X/Y location
-*/
-/**************************************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  ili9328SetCursor(x, y);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
-  ili9328WriteData(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  uint32_t i = 0;
-  ili9328SetCursor(x, y);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
-  do
-  {
-    ili9328WriteData(data[i]);
-    i++;
-  } while (i<len);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a horizontal line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t x, pixels;
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  // Check limits
-  if (x1 >= lcdGetWidth())
-  {
-    x1 = lcdGetWidth() - 1;
-  }
-  if (x0 >= lcdGetWidth())
-  {
-    x0 = lcdGetWidth() - 1;
-  }
-
-  ili9328SetCursor(x0, y);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);  // Write Data to GRAM (R22h)
-  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
-  {
-    ili9328WriteData(color);
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a vertical line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  lcdOrientation_t oldOrientation = lcdOrientation;
-
-  if (oldOrientation == LCD_ORIENTATION_PORTRAIT)
-  {
-    lcdSetOrientation(LCD_ORIENTATION_LANDSCAPE);
-    lcdDrawHLine(y0, y1, lcdGetHeight() - (x + 1), color);
-  }
-  else
-  {
-    lcdSetOrientation(LCD_ORIENTATION_PORTRAIT);
-    lcdDrawHLine(lcdGetWidth() - (y0 + 1), lcdGetWidth() - (y1 + 1), x, color);
-  }
-
-  // Switch orientation back
-  lcdSetOrientation(oldOrientation);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the 16-bit color of the pixel at the specified location
-*/
-/**************************************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  ili9328SetCursor(x, y);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
-  // prefetch
-  ili9328ReadData();
-
-  // Eeek ... why does this need to be done twice for a proper value?!?
-  ili9328SetCursor(x, y);
-  ili9328WriteCmd(ILI9328_COMMANDS_WRITEDATATOGRAM);
-  return ili9328ReadData();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the LCD orientation to horizontal and vertical
-*/
-/**************************************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  uint16_t entryMode = 0x1030;
-  uint16_t outputControl = 0x0100;
-
-  switch (orientation)
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      entryMode = 0x1030;
-      outputControl = 0x0100;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-      entryMode = 0x1028;
-      outputControl = 0x0000;
-      break;
-  }
-
-  ili9328Command(ILI9328_COMMANDS_ENTRYMODE, entryMode);
-  ili9328Command(ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1, outputControl);
-  lcdOrientation = orientation;
-
-  ili9328SetCursor(0, 0);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the current screen orientation (horizontal or vertical)
-*/
-/**************************************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the width in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetWidth(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return ili9328Properties.width;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return ili9328Properties.height;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the height in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetHeight(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return ili9328Properties.height;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return ili9328Properties.width;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Scrolls the contents of the LCD screen vertically the
-            specified number of pixels using a HW optimised routine
-*/
-/**************************************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  int16_t y = pixels;
-  while (y < 0)
-    y += 320;
-  while (y >= 320)
-    y -= 320;
-  ili9328WriteCmd(ILI9328_COMMANDS_VERTICALSCROLLCONTROL);
-  ili9328WriteData(y);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the controller's 16-bit (4 hexdigit) ID
-*/
-/**************************************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return ili9328Type();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
-            generic capabilities and dimensions
-*/
-/**************************************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-    return ili9328Properties;
-}
diff --git a/drivers/lcd/tft/hw/ILI9328.h b/drivers/lcd/tft/hw/ILI9328.h
deleted file mode 100644 (file)
index 7a04249..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ILI9328.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __ILI9328_H__
-#define __ILI9328_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/tft/lcd.h"
-#include "core/gpio/gpio.h"
-
-// Control pins
-#define ILI9328_CS_PORT           1     // CS (LCD Pin 7)
-#define ILI9328_CS_PIN            8
-#define ILI9328_CD_PORT           1     // CS/RS (LCD Pin 8)
-#define ILI9328_CD_PIN            9
-#define ILI9328_WR_PORT           1     // WR (LCD Pin 9)
-#define ILI9328_WR_PIN            10
-#define ILI9328_RD_PORT           1     // RD (LCD Pin 10)
-#define ILI9328_RD_PIN            11
-
-// These combined pin definitions are for optimisation purposes.
-// If the pin values above are modified the bit equivalents
-// below will also need to be updated
-#define ILI9328_CS_CD_PINS        0x300   // 8 + 9
-#define ILI9328_RD_WR_PINS        0xC00   // 11 + 10
-#define ILI9328_WR_CS_PINS        0x500   // 10 + 8
-#define ILI9328_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
-#define ILI9328_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
-
-// Backlight and Reset pins
-#define ILI9328_RES_PORT          3     // LCD Reset  (LCD Pin 31)
-#define ILI9328_RES_PIN           3
-#define ILI9328_BL_PORT           2     // Backlight Enable (LCD Pin 16)
-#define ILI9328_BL_PIN            9
-
-// Data pins
-// Note: data pins must be consecutive and on the same port
-#define ILI9328_DATA_PORT         2     // 8-Pin Data Port
-#define ILI9328_DATA_PIN1         1
-#define ILI9328_DATA_PIN2         2
-#define ILI9328_DATA_PIN3         3
-#define ILI9328_DATA_PIN4         4
-#define ILI9328_DATA_PIN5         5
-#define ILI9328_DATA_PIN6         6
-#define ILI9328_DATA_PIN7         7
-#define ILI9328_DATA_PIN8         8
-#define ILI9328_DATA_MASK         0x000001FE
-#define ILI9328_DATA_OFFSET       1    // Offset = PIN1
-
-// Placed here to try to keep all pin specific values in header file
-#define ILI9328_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
-
-// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
-#define ILI9328_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ILI9328_DATA_MASK << 2))))
-#define ILI9328_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_WR_PIN) << 2))))
-#define ILI9328_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_CD_PIN) << 2))))
-#define ILI9328_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_CS_PIN) << 2))))
-#define ILI9328_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ILI9328_RD_PIN) << 2))))
-#define ILI9328_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ILI9328_RES_PIN) << 2))))
-#define ILI9328_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CS_CD_PINS) << 2))))
-#define ILI9328_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_RD_WR_PINS) << 2))))
-#define ILI9328_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_WR_CS_PINS) << 2))))
-#define ILI9328_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CD_RD_WR_PINS) << 2))))
-#define ILI9328_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ILI9328_CS_CD_RD_WR_PINS) << 2))))
-
-// Macros to set data bus direction to input/output
-#define ILI9328_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ILI9328_DATA_MASK
-#define ILI9328_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ILI9328_DATA_MASK
-
-// Macros for control line state
-// NOPs required since the bit-banding is too fast for some ILI9328s to handle :(
-#define CLR_CD          ILI9328_GPIO1DATA_CD = (0); __asm volatile("nop");
-#define SET_CD          ILI9328_GPIO1DATA_CD = (1 << ILI9328_CD_PIN); __asm volatile("nop");
-#define CLR_CS          ILI9328_GPIO1DATA_CS = (0); __asm volatile("nop");
-#define SET_CS          ILI9328_GPIO1DATA_CS = (1 << ILI9328_CS_PIN); __asm volatile("nop");
-#define CLR_WR          ILI9328_GPIO1DATA_WR = (0); __asm volatile("nop");
-#define SET_WR          ILI9328_GPIO1DATA_WR = (1 << ILI9328_WR_PIN); __asm volatile("nop");
-#define CLR_RD          ILI9328_GPIO1DATA_RD = (0); __asm volatile("nop");
-#define SET_RD          ILI9328_GPIO1DATA_RD = (1 << ILI9328_RD_PIN); __asm volatile("nop");
-#define CLR_RESET       ILI9328_GPIO3DATA_RES = (0); __asm volatile("nop");
-#define SET_RESET       ILI9328_GPIO3DATA_RES = (1 << ILI9328_RES_PIN); __asm volatile("nop");
-
-// These 'combined' macros are defined to improve code performance by
-// reducing the number of instructions in heavily used functions
-#define CLR_CS_CD           ILI9328_GPIO1DATA_CS_CD = (0); __asm volatile("nop");
-#define SET_RD_WR           ILI9328_GPIO1DATA_RD_WR = (ILI9328_RD_WR_PINS); __asm volatile("nop");
-#define SET_WR_CS           ILI9328_GPIO1DATA_WR_CS = (ILI9328_WR_CS_PINS); __asm volatile("nop");
-#define SET_CD_RD_WR        ILI9328_GPIO1DATA_CD_RD_WR = (ILI9328_CD_RD_WR_PINS); __asm volatile("nop");
-#define CLR_CS_CD_SET_RD_WR ILI9328_GPIO1DATA_CS_CD_RD_WR = (ILI9328_RD_WR_PINS); __asm volatile("nop");
-#define CLR_CS_SET_CD_RD_WR ILI9328_GPIO1DATA_CS_CD_RD_WR = (ILI9328_CD_RD_WR_PINS); __asm volatile("nop");
-
-enum
-{
-  ILI9328_COMMANDS_DRIVERCODEREAD                 = 0x0000,
-  ILI9328_COMMANDS_DRIVEROUTPUTCONTROL1           = 0x0001,
-  ILI9328_COMMANDS_LCDDRIVINGCONTROL              = 0x0002,
-  ILI9328_COMMANDS_ENTRYMODE                      = 0x0003,
-  ILI9328_COMMANDS_RESIZECONTROL                  = 0x0004,
-  ILI9328_COMMANDS_DISPLAYCONTROL1                = 0x0007,
-  ILI9328_COMMANDS_DISPLAYCONTROL2                = 0x0008,
-  ILI9328_COMMANDS_DISPLAYCONTROL3                = 0x0009,
-  ILI9328_COMMANDS_DISPLAYCONTROL4                = 0x000A,
-  ILI9328_COMMANDS_RGBDISPLAYINTERFACECONTROL1    = 0x000C,
-  ILI9328_COMMANDS_FRAMEMAKERPOSITION             = 0x000D,
-  ILI9328_COMMANDS_RGBDISPLAYINTERFACECONTROL2    = 0x000F,
-  ILI9328_COMMANDS_POWERCONTROL1                  = 0x0010,
-  ILI9328_COMMANDS_POWERCONTROL2                  = 0x0011,
-  ILI9328_COMMANDS_POWERCONTROL3                  = 0x0012,
-  ILI9328_COMMANDS_POWERCONTROL4                  = 0x0013,
-  ILI9328_COMMANDS_HORIZONTALGRAMADDRESSSET       = 0x0020,
-  ILI9328_COMMANDS_VERTICALGRAMADDRESSSET         = 0x0021,
-  ILI9328_COMMANDS_WRITEDATATOGRAM                = 0x0022,
-  ILI9328_COMMANDS_POWERCONTROL7                  = 0x0029,
-  ILI9328_COMMANDS_FRAMERATEANDCOLORCONTROL       = 0x002B,
-  ILI9328_COMMANDS_GAMMACONTROL1                  = 0x0030,
-  ILI9328_COMMANDS_GAMMACONTROL2                  = 0x0031,
-  ILI9328_COMMANDS_GAMMACONTROL3                  = 0x0032,
-  ILI9328_COMMANDS_GAMMACONTROL4                  = 0x0035,
-  ILI9328_COMMANDS_GAMMACONTROL5                  = 0x0036,
-  ILI9328_COMMANDS_GAMMACONTROL6                  = 0x0037,
-  ILI9328_COMMANDS_GAMMACONTROL7                  = 0x0038,
-  ILI9328_COMMANDS_GAMMACONTROL8                  = 0x0039,
-  ILI9328_COMMANDS_GAMMACONTROL9                  = 0x003C,
-  ILI9328_COMMANDS_GAMMACONTROL10                 = 0x003D,
-  ILI9328_COMMANDS_HORIZONTALADDRESSSTARTPOSITION = 0x0050,
-  ILI9328_COMMANDS_HORIZONTALADDRESSENDPOSITION   = 0x0051,
-  ILI9328_COMMANDS_VERTICALADDRESSSTARTPOSITION   = 0x0052,
-  ILI9328_COMMANDS_VERTICALADDRESSENDPOSITION     = 0x0053,
-  ILI9328_COMMANDS_DRIVEROUTPUTCONTROL2           = 0x0060,
-  ILI9328_COMMANDS_BASEIMAGEDISPLAYCONTROL        = 0x0061,
-  ILI9328_COMMANDS_VERTICALSCROLLCONTROL          = 0x006A,
-  ILI9328_COMMANDS_PARTIALIMAGE1DISPLAYPOSITION   = 0x0080,
-  ILI9328_COMMANDS_PARTIALIMAGE1AREASTARTLINE     = 0x0081,
-  ILI9328_COMMANDS_PARTIALIMAGE1AREAENDLINE       = 0x0082,
-  ILI9328_COMMANDS_PARTIALIMAGE2DISPLAYPOSITION   = 0x0083,
-  ILI9328_COMMANDS_PARTIALIMAGE2AREASTARTLINE     = 0x0084,
-  ILI9328_COMMANDS_PARTIALIMAGE2AREAENDLINE       = 0x0085,
-  ILI9328_COMMANDS_PANELINTERFACECONTROL1         = 0x0090,
-  ILI9328_COMMANDS_PANELINTERFACECONTROL2         = 0x0092,
-  ILI9328_COMMANDS_PANELINTERFACECONTROL4         = 0x0095,
-  ILI9328_COMMANDS_OTPVCMPROGRAMMINGCONTROL       = 0x00A1,
-  ILI9328_COMMANDS_OTPVCMSTATUSANDENABLE          = 0x00A2,
-  ILI9328_COMMANDS_OTPPROGRAMMINGIDKEY            = 0x00A5
-};
-
-#endif
diff --git a/drivers/lcd/tft/hw/hx8340b.c b/drivers/lcd/tft/hw/hx8340b.c
deleted file mode 100644 (file)
index f6a7223..0000000
+++ /dev/null
@@ -1,515 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     hx8340b.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for HX8340B 176x220 pixel TFT LCD displays.
-    
-    This driver uses a bit-banged SPI interface and a 16-bit RGB565
-    colour palette.
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012 Kevin Townsend
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "hx8340b.h"
-#include "core/systick/systick.h"
-#include "core/gpio/gpio.h"
-
-static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t hx8340bProperties = { 176, 220, FALSE, FALSE, FALSE };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/*************************************************/
-void hx8340bWriteCmd(uint8_t command) 
-{
-  CLR_CS;
-
-  CLR_SDI;
-  CLR_SCL;
-  SET_SCL;
-
-  uint8_t i = 0;
-  for (i=0; i<8; i++) 
-  { 
-    if (command & 0x80) 
-    { 
-      SET_SDI;   
-    } 
-    else 
-    { 
-      CLR_SDI; 
-    } 
-    CLR_SCL; 
-    command <<= 1; 
-    SET_SCL;
-  } 
-  SET_CS; 
-}
-
-/*************************************************/
-void hx8340bWriteData(uint8_t data)
-{
-  CLR_CS;
-
-  SET_SDI;
-  CLR_SCL;
-  SET_SCL;
-
-  uint8_t i = 0;
-  for (i=0; i<8; i++) 
-  { 
-    if (data & 0x80) 
-    { 
-      SET_SDI;
-    } 
-    else 
-    { 
-      CLR_SDI;
-    } 
-    CLR_SCL;
-    data <<= 1; 
-    SET_SCL;    
-  } 
-  SET_CS;
-}
-
-/*************************************************/
-void hx8340bWriteData16(uint16_t data)
-{
-  hx8340bWriteData((data>>8) & 0xFF);
-  hx8340bWriteData(data & 0xFF);
-}
-
-/*************************************************/
-void hx8340bWriteRegister(uint8_t reg, uint8_t value)
-{
-  hx8340bWriteCmd(reg);
-  hx8340bWriteCmd(value);
-}
-
-/*************************************************/
-void hx8340bInitDisplay(void)
-{
-#if defined HX8340B_ICVERSION_T
-  // Power Settings
-  hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x02);        // 0x18: Frequency = 100% (60fps) 
-  hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x00);        // 0x21: Disable Internal Oscillator
-  hx8340bWriteRegister(HX8340B_VCOMCONTROL1, 0x30);       // 0x23: VCOM Offset voltage
-  hx8340bWriteRegister(HX8340B_VCOMCONTROL2, 0x36);       // 0x24: VCOM High Voltage
-  hx8340bWriteRegister(HX8340B_VCOMCONTROL3, 0x1a);       // 0x25: VCOM Low Voltage
-
-  // Power Supply Settings
-  hx8340bWriteRegister(HX8340B_OSCCONTROLA, 0x44);        // 0x18: Frequency = 100% (60fps) (Internal 2.52MHz RC oscillator is +/-5% and made need to be tuned)
-  hx8340bWriteRegister(HX8340B_OSCCONTROLB, 0x01);        // 0x21: Enable Internal Oscillator
-  hx8340bWriteRegister(HX8340B_DISPLAYMODECONTROL, 0x00); // 0x01: Partial mode off, Sleep off, Scroll off, Invert off, Idle off
-  hx8340bWriteRegister(HX8340B_MEMACCESSCONTROL, 0x08);   // 0x16: Read/Write scanning direction and color order (0x08 = BGR, 0x00 = RGB)
-  hx8340bWriteRegister(HX8340B_COLMOD, 0x55);             // 0x17: RGB Data Format - 0x55 = 16bpp, 0x66 = 18bpp
-  hx8340bWriteRegister(HX8340B_POWERCONTROL5, 0x03);      // 0x1C: Current driving the power-supply op-amp, 0x03 = medium
-  hx8340bWriteRegister(HX8340B_POWERCONTROL1, 0x06);      // 0x19: B0 = DDVDH Step-up on/off, B1 = VGH/VGL step-up off/on, B2 = VCL step-up off/on (0x06 = all on)
-  systickDelay(6);
-
-  // Driving Settings
-  hx8340bWriteRegister(HX8340B_POWERCONTROL_INT1, 0x00);  // 0x60
-  hx8340bWriteRegister(HX8340B_POWERCONTROL_INT2, 0x06);  // 0x61
-  hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT1, 0x00); // 0x62
-  hx8340bWriteRegister(HX8340B_SOURCECONTROL_INT2, 0xC8); // 0x63
-
-  // Gamma Settings
-  hx8340bWriteRegister(0x40,0x70);
-  hx8340bWriteRegister(0x41,0x51);
-  hx8340bWriteRegister(0x42,0x36);
-  hx8340bWriteRegister(0x43,0x04);
-  hx8340bWriteRegister(0x44,0x3B);
-  hx8340bWriteRegister(0x45,0x0E);
-  hx8340bWriteRegister(0x46,0x01);
-  hx8340bWriteRegister(0x47,0x1D);
-  hx8340bWriteRegister(0x48,0x09);
-  hx8340bWriteRegister(0x50,0x72);
-  hx8340bWriteRegister(0x51,0x20);
-  hx8340bWriteRegister(0x52,0x60);
-  hx8340bWriteRegister(0x53,0x01);
-  hx8340bWriteRegister(0x54,0x33);
-  hx8340bWriteRegister(0x55,0x0E);
-  hx8340bWriteRegister(0x56,0x02);
-  hx8340bWriteRegister(0x57,0x73);
-  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0x84);  // 0x26: B3 = display off/on (1 = on, 0 = off), also controls gate for VGH/VGL
-  systickDelay(40);
-  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xB8);  // 0x26: Display on
-  systickDelay(40);
-  hx8340bWriteRegister(HX8340B_DISPLAYCONTROL1, 0xBC);
-
-  // Set GRAM Area
-  hx8340bWriteRegister(HX8340B_COLADDR_START2, 0x00);
-  hx8340bWriteRegister(HX8340B_COLADDR_START1, 0x00);
-  hx8340bWriteRegister(HX8340B_COLADDR_END2, 0x00);
-  hx8340bWriteRegister(HX8340B_COLADDR_END1, 0xAF);     // 175
-  hx8340bWriteRegister(HX8340B_ROWADDR_START2, 0x00);
-  hx8340bWriteRegister(HX8340B_ROWADDR_START1, 0x00);
-  hx8340bWriteRegister(HX8340B_ROWADDR_END2, 0x00);
-  hx8340bWriteRegister(HX8340B_ROWADDR_END1, 0xDB);     // 219
-
-  hx8340bWriteCmd(HX8340B_SRAMWRITECONTROL);
-#endif
-
-#if defined HX8340B_ICVERSION_N
-  hx8340bWriteCmd(HX8340B_N_SETEXTCMD); 
-  hx8340bWriteData(0xFF);
-  hx8340bWriteData(0x83);
-  hx8340bWriteData(0x40); 
-
-  hx8340bWriteCmd(HX8340B_N_SPLOUT); 
-  systickDelay(100);
-
-  hx8340bWriteCmd(0xCA);                  // Undocumented register?
-  hx8340bWriteData(0x70);
-  hx8340bWriteData(0x00);
-  hx8340bWriteData(0xD9); 
-  hx8340bWriteData(0x01);
-  hx8340bWriteData(0x11); 
-  
-  hx8340bWriteCmd(0xC9);                  // Undocumented register?
-  hx8340bWriteData(0x90);
-  hx8340bWriteData(0x49);
-  hx8340bWriteData(0x10); 
-  hx8340bWriteData(0x28);
-  hx8340bWriteData(0x28); 
-  hx8340bWriteData(0x10); 
-  hx8340bWriteData(0x00); 
-  hx8340bWriteData(0x06);
-  systickDelay(20);
-
-  hx8340bWriteCmd(HX8340B_N_SETGAMMAP);
-  hx8340bWriteData(0x60);
-  hx8340bWriteData(0x71);
-  hx8340bWriteData(0x01); 
-  hx8340bWriteData(0x0E);
-  hx8340bWriteData(0x05); 
-  hx8340bWriteData(0x02); 
-  hx8340bWriteData(0x09); 
-  hx8340bWriteData(0x31);
-  hx8340bWriteData(0x0A);
-  
-  hx8340bWriteCmd(HX8340B_N_SETGAMMAN); 
-  hx8340bWriteData(0x67);
-  hx8340bWriteData(0x30);
-  hx8340bWriteData(0x61); 
-  hx8340bWriteData(0x17);
-  hx8340bWriteData(0x48); 
-  hx8340bWriteData(0x07); 
-  hx8340bWriteData(0x05); 
-  hx8340bWriteData(0x33); 
-  systickDelay(10);
-
-  hx8340bWriteCmd(HX8340B_N_SETPWCTR5); 
-  hx8340bWriteData(0x35);
-  hx8340bWriteData(0x20);
-  hx8340bWriteData(0x45); 
-  
-  hx8340bWriteCmd(HX8340B_N_SETPWCTR4); 
-  hx8340bWriteData(0x33);
-  hx8340bWriteData(0x25);
-  hx8340bWriteData(0x4c); 
-  systickDelay(10);
-
-  hx8340bWriteCmd(HX8340B_N_COLMOD);      // Color Mode
-  hx8340bWriteData(0x05);                 // 0x05 = 16bpp, 0x06 = 18bpp
-
-  hx8340bWriteCmd(HX8340B_N_DISPON); 
-  systickDelay(10);
-
-  hx8340bWriteCmd(HX8340B_N_CASET); 
-  hx8340bWriteData(0x00);
-  hx8340bWriteData(0x00);
-  hx8340bWriteData(0x00); 
-  hx8340bWriteData(0xaf);                 // 175
-
-  hx8340bWriteCmd(HX8340B_N_PASET); 
-  hx8340bWriteData(0x00);
-  hx8340bWriteData(0x00);
-  hx8340bWriteData(0x00); 
-  hx8340bWriteData(0xdb);                // 219
-
-  hx8340bWriteCmd(HX8340B_N_RAMWR); 
-#endif
-}
-
-/*************************************************/
-void hx8340bHome(void)
-{
-#if defined HX8340B_ICVERSION_N
-   hx8340bWriteCmd(HX8340B_N_CASET);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0xaf);  
-   hx8340bWriteCmd(HX8340B_N_PASET);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0x00);
-   hx8340bWriteData(0xdb);     
-#endif
-}
-
-/*************************************************/
-static inline void hx8340bSetPosition(uint32_t x0, uint32_t y0, uint32_t x1, uint32_t y1)
-{
-#if defined HX8340B_ICVERSION_N
-  hx8340bWriteCmd(HX8340B_N_CASET);
-  hx8340bWriteData(x0>>8);
-  hx8340bWriteData(x0);
-  hx8340bWriteData(x1>>8);
-  hx8340bWriteData(x1);
-  
-  hx8340bWriteCmd(HX8340B_N_PASET);
-  hx8340bWriteData(y0>>8);
-  hx8340bWriteData(y0);
-  hx8340bWriteData(y1>>8);
-  hx8340bWriteData(y1);
-
-  hx8340bWriteCmd(HX8340B_N_RAMWR);
-#endif
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/*************************************************/
-void lcdInit(void)
-{
-  // Set control pins to output
-  gpioSetDir(HX8340B_PORT, HX8340B_SDI_PIN, 1);
-  gpioSetDir(HX8340B_PORT, HX8340B_SCL_PIN, 1);
-  gpioSetDir(HX8340B_PORT, HX8340B_CS_PIN, 1);
-  gpioSetDir(HX8340B_PORT, HX8340B_RES_PIN, 1);
-  gpioSetDir(HX8340B_PORT, HX8340B_BL_PIN, 1);
-
-  // Set pins low by default (except reset)
-  CLR_SDI;
-  CLR_SCL;
-  CLR_CS;
-  CLR_BL;
-  SET_RES;
-  
-  // Turn backlight on
-  lcdBacklight(TRUE);
-
-  // Reset display
-  SET_RES;
-  systickDelay(100);
-  CLR_RES;
-  systickDelay(50);
-  SET_RES;
-  systickDelay(50);
-
-  // Run LCD init sequence
-  hx8340bInitDisplay();
-
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-}
-
-/*************************************************/
-void lcdBacklight(bool state)
-{
-  // Set the backlight
-  // Note: Depending on the type of transistor used
-  // to control the backlight, you made need to invert
-  // the values below
-  if (state)
-    // CLR_BL;
-    SET_BL;
-  else
-    // SET_BL;
-    CLR_BL;
-}
-
-/*************************************************/
-void lcdTest(void)
-{
-#if defined HX8340B_ICVERSION_N
-  lcdFillRGB(COLOR_GREEN);
-#endif
-}
-
-/*************************************************/
-void lcdFillRGB(uint16_t color)
-{
-#if defined HX8340B_ICVERSION_N
-  uint8_t i,j;
-  for (i=0;i<220;i++)
-  {
-    for (j=0;j<176;j++)
-    {
-      hx8340bWriteData16(color);
-    }
-  }
-#endif
-}
-
-/*************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  hx8340bSetPosition(x, y, x+1, y+1);
-  hx8340bWriteData16(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  // ToDo: Optimise this function ... currently only a placeholder
-  uint32_t i = 0;
-  do
-  {
-    lcdDrawPixel(x+i, y, data[i]);
-    i++;
-  } while (i<len);
-}
-
-/*************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t x, pixels;
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  // Check limits
-  if (x1 >= lcdGetWidth())
-  {
-    x1 = lcdGetWidth() - 1;
-  }
-  if (x0 >= lcdGetWidth())
-  {
-    x0 = lcdGetWidth() - 1;
-  }
-
-  hx8340bSetPosition(x0, y, x1, y+1);
-  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
-  {
-    hx8340bWriteData16(color);
-  }
-}
-
-/*************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t y, pixels;
-
-  if (y1 < y0)
-  {
-    // Switch y1 and y0
-    y = y1;
-    y1 = y0;
-    y0 = y;
-  }
-
-  // Check limits
-  if (y1 >= lcdGetHeight())
-  {
-    y1 = lcdGetHeight() - 1;
-  }
-  if (y0 >= lcdGetHeight())
-  {
-    y0 = lcdGetHeight() - 1;
-  }
-
-  for (pixels = 0; pixels < y1 - y0 + 1; pixels++)
-  {
-    hx8340bSetPosition(x, y0+pixels, x+1, y0+pixels+1);
-    hx8340bWriteData16(color);
-  }
-}
-
-/*************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  // ToDo
-  return 0;
-}
-
-/*************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  // ToDo
-}
-
-/*************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/*************************************************/
-uint16_t lcdGetWidth(void)
-{
-  return hx8340bProperties.width;
-}
-
-/*************************************************/
-uint16_t lcdGetHeight(void)
-{
-  return hx8340bProperties.height;
-}
-
-/*************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  // ToDo
-}
-
-/*************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return 0x8340;
-}
-
-/*************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-  return hx8340bProperties;
-}
diff --git a/drivers/lcd/tft/hw/hx8340b.h b/drivers/lcd/tft/hw/hx8340b.h
deleted file mode 100644 (file)
index ddb4c6b..0000000
+++ /dev/null
@@ -1,203 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     hx8340b.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __HX8340B_H__
-#define __HX8340B_H__
-
-#include "projectconfig.h"
-#include "drivers/lcd/tft/lcd.h"
-
-#define HX8340B_ICVERSION_N
-// #define HX8340B_ICVERSION_T
-
-#if defined HX8340B_ICVERSION_N && defined HX8340B_ICVERSION_T
-  #error "Only one IC version can be set for HX8340B (HX8340B_ICVERSION_N or HX8340B_ICVERSION_T)"
-#endif
-#if !defined HX8340B_ICVERSION_N && !defined HX8340B_ICVERSION_T
-  #error "HX8340B_ICVERSION_N or HX8340B_ICVERSION_T must be defined for HW8340 LCDs"
-#endif
-
-/**************************************************************************
-    BTL221722-276L CONNECTOR (Use HX8340B_ICVERSION_N)
-    -----------------------------------------------------------------------
-    Pin   Function        Notes
-    ===   ==============  ===============================
-      1   VSS
-      2   NC
-      3   LED A/+         Vf 3.3V
-      4   VDD             2.8-3.3V
-      5   CS
-      6   SDI             Serial Data
-      7   SCL             Serial Clock
-      8   RS              Not used
-      9   RESET
-     10   VDD             2.8-3.3V
-     11   LED K1
-     12   LED K2
-     13   LED K3
-     14   VSS
-
- **************************************************************************/
-
-// Control pins
-#define HX8340B_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
-#define HX8340B_PORT            (2)
-#define HX8340B_SDI_PIN         (2)
-#define HX8340B_SCL_PIN         (3)
-#define HX8340B_CS_PIN          (4)
-#define HX8340B_RES_PIN         (5)
-#define HX8340B_BL_PIN          (6)
-
-// Macros for control line state
-#define CLR_SDI     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); } while(0)
-#define SET_SDI     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SDI_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SDI_PIN); } while(0)
-#define CLR_SCL     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); } while(0)
-#define SET_SCL     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_SCL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_SCL_PIN); } while(0)
-#define CLR_CS      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); } while(0)
-#define SET_CS      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_CS_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_CS_PIN); } while(0)
-#define CLR_RES     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); } while(0)
-#define SET_RES     do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_RES_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_RES_PIN); } while(0)
-#define CLR_BL      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); } while(0)
-#define SET_BL      do { HX8340B_GPIODATAREG &= ~(1<<HX8340B_BL_PIN); HX8340B_GPIODATAREG |= (1<<HX8340B_BL_PIN); } while(0)
-
-// HX8340-B(N) Commands (used by BTL221722-276L)
-#define HX8340B_N_NOP                     (0x00)
-#define HX8340B_N_SWRESET                 (0x01)
-#define HX8340B_N_RDDIDIF                 (0x04)
-#define HX8340B_N_RDDST                   (0x09)
-#define HX8340B_N_RDDPM                   (0x0A)
-#define HX8340B_N_RDDMADCTL               (0x0B)
-#define HX8340B_N_RDDCOLMOD               (0x0C)
-#define HX8340B_N_RDDIM                   (0x0D)
-#define HX8340B_N_RDDSM                   (0x0E)
-#define HX8340B_N_RDDSDR                  (0x0F)
-#define HX8340B_N_SLPIN                   (0x10)
-#define HX8340B_N_SPLOUT                  (0x11)
-#define HX8340B_N_PTLON                   (0x12)
-#define HX8340B_N_NORON                   (0x13)
-#define HX8340B_N_INVOFF                  (0x20)
-#define HX8340B_N_INVON                   (0x21)
-#define HX8340B_N_GAMSET                  (0x26)
-#define HX8340B_N_DISPOFF                 (0x28)
-#define HX8340B_N_DISPON                  (0x29)
-#define HX8340B_N_CASET                   (0x2A)
-#define HX8340B_N_PASET                   (0x2B)
-#define HX8340B_N_RAMWR                   (0x2C)
-#define HX8340B_N_RAMRD                   (0x2E)
-#define HX8340B_N_RGBSET                  (0x2D)
-#define HX8340B_N_PLTAR                   (0x30)
-#define HX8340B_N_VSCRDEF                 (0x33)
-#define HX8340B_N_TEOFF                   (0x34)
-#define HX8340B_N_TEON                    (0x35)
-#define HX8340B_N_MADCTL                  (0x36)
-#define HX8340B_N_VSCRSADD                (0x37)
-#define HX8340B_N_IDMOFF                  (0x38)
-#define HX8340B_N_IDMON                   (0x39)
-#define HX8340B_N_COLMOD                  (0x3A)
-#define HX8340B_N_RDID1                   (0xDA)
-#define HX8340B_N_RDID2                   (0xDB)
-#define HX8340B_N_RDID3                   (0xDC)
-#define HX8340B_N_SETOSC                  (0xB0)
-#define HX8340B_N_SETPWCTR1               (0xB1)
-#define HX8340B_N_SETPWCTR2               (0xB2)
-#define HX8340B_N_SETPWCTR3               (0xB3)
-#define HX8340B_N_SETPWCTR4               (0xB4)
-#define HX8340B_N_SETPWCTR5               (0xB5)
-#define HX8340B_N_SETDISCTRL              (0xB6)
-#define HX8340B_N_SETFRMCTRL              (0xB7)
-#define HX8340B_N_SETDISCYCCTRL           (0xB8)
-#define HX8340B_N_SETINVCTRL              (0xB9)
-#define HX8340B_N_RGBBPCTR                (0xBA)
-#define HX8340B_N_SETRGBIF                (0xBB)
-#define HX8340B_N_SETDODC                 (0xBC)
-#define HX8340B_N_SETINTMODE              (0xBD)
-#define HX8340B_N_SETPANEL                (0xBE)
-#define HX8340B_N_SETOTP                  (0xC7)
-#define HX8340B_N_SETONOFF                (0xC0)
-#define HX8340B_N_SETEXTCMD               (0xC1)
-#define HX8340B_N_SETGAMMAP               (0xC2)
-#define HX8340B_N_SETGAMMAN               (0xC3)
-
-// HX8340-B(T) Commands
-#define HX8340B_T_DISPLAYMODECONTROL      (0x01)
-#define HX8340B_T_COLADDR_START2          (0x02)
-#define HX8340B_T_COLADDR_START1          (0x03)
-#define HX8340B_T_COLADDR_END2            (0x04)
-#define HX8340B_T_COLADDR_END1            (0x05)
-#define HX8340B_T_ROWADDR_START2          (0x06)
-#define HX8340B_T_ROWADDR_START1          (0x07)
-#define HX8340B_T_ROWADDR_END2            (0x08)
-#define HX8340B_T_ROWADDR_END1            (0x09)
-#define HX8340B_T_MEMACCESSCONTROL        (0x16)
-#define HX8340B_T_COLMOD                  (0x17)
-#define HX8340B_T_OSCCONTROLA             (0x18)
-#define HX8340B_T_POWERCONTROL1           (0x19)
-#define HX8340B_T_POWERCONTROL3           (0x1A)
-#define HX8340B_T_POWERCONTROL4           (0x1B)
-#define HX8340B_T_POWERCONTROL5           (0x1C)
-#define HX8340B_T_POWERCONTROL6           (0x1D)
-#define HX8340B_T_POWERCONTROL7           (0x1E)
-#define HX8340B_T_POWERCONTROL8           (0x1F)
-#define HX8340B_T_POWERCONTROL9           (0x20)
-#define HX8340B_T_OSCCONTROLB             (0x21)
-#define HX8340B_T_SRAMWRITECONTROL        (0x22)
-#define HX8340B_T_VCOMCONTROL1            (0x23)
-#define HX8340B_T_VCOMCONTROL2            (0x24)
-#define HX8340B_T_VCOMCONTROL3            (0x25)
-#define HX8340B_T_DISPLAYCONTROL1         (0x26)
-#define HX8340B_T_DISPLAYCONTROL2         (0x27)
-#define HX8340B_T_FRAMERATECONTROL1       (0x28)
-#define HX8340B_T_FRAMERATECONTROL2       (0x29)
-#define HX8340B_T_FRAMERATECONTROL3       (0x2A)
-#define HX8340B_T_FRAMERATECONTROL4       (0x2B)
-#define HX8340B_T_DISPLAYINVERSION        (0x2F)
-#define HX8340B_T_RGBINTERFACECONTROL1    (0x31)
-#define HX8340B_T_RGBINTERFACECONTROL2    (0x32)
-#define HX8340B_T_RGBINTERFACECONTROL3    (0x33)
-#define HX8340B_T_RGBINTERFACECONTROL4    (0x34)
-#define HX8340B_T_OUTPUTSDIRECTION        (0x35)
-#define HX8340B_T_INTERFACEMODE           (0x36)
-#define HX8340B_T_NWNBPANELSET            (0x37)
-#define HX8340B_T_OTPCONTROL1             (0x38)
-#define HX8340B_T_OTPCONTROL2             (0x39)
-#define HX8340B_T_OTPCONTROL3             (0x3A)
-#define HX8340B_T_POWERCONTROL_INT1       (0x60)
-#define HX8340B_T_POWERCONTROL_INT2       (0x61)
-#define HX8340B_T_SOURCECONTROL_INT1      (0x62)
-#define HX8340B_T_SOURCECONTROL_INT2      (0x63)
-#define HX8340B_T_SOURCEOPCONTROL         (0x73)
-#define HX8340B_T_HIMAXID                 (0x93)
-
-#endif
diff --git a/drivers/lcd/tft/hw/readme.txt b/drivers/lcd/tft/hw/readme.txt
deleted file mode 100644 (file)
index 6e318f8..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-HW-Specific LCD Drivers
-=======================
-
-hx8340b   - 176x220 16-bit display (Bit-banged SPI interface)
-ILI9325   - 240x320 16-bit display  (8-bit interface)
-ILI9328   - 240x320 16-bit display  (8-bit interface)
-st7735    - 128x160 16-bit display  (Bit-banged SPI interface)
-st7783    - 240x320 16-bit display  (8-bit interface)
-ssd1331   - 96x64 16-bit OLED display (Bit-banged SPI interface) 
-ssd1351   - 128x128 16-bit OLED display (Bit-banged SPI interface)
-
-
-NOTE: Only the ILI9325 and ILI9328 drivers have been fully tested.
-The others are incomplete or have only been partially tested. (The
-ST7783 driver, for example, has issues when the screen orientation
-is set to landscape.)
\ No newline at end of file
diff --git a/drivers/lcd/tft/hw/ssd1331.c b/drivers/lcd/tft/hw/ssd1331.c
deleted file mode 100644 (file)
index a934ba2..0000000
+++ /dev/null
@@ -1,481 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     SSD1331.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for SSD1331 96x64 pixel RGB OLED displays.
-    
-    This driver uses a bit-banged SPI interface and 16-bit RGB565 colours.
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "ssd1331.h"
-#include "core/systick/systick.h"
-
-static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t ssd1331Properties = { 96, 64, false, false, false };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-#define CMD(c)        do { SET_CS; CLR_DC; CLR_CS; ssd1331SendByte( c ); SET_CS; } while (0)
-#define DATA(c)       do { SET_CS; SET_DC; CLR_CS; ssd1331SendByte( c ); SET_CS; } while (0);
-#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
-
-/**************************************************************************/
-/*! 
-    @brief Simulates an SPI write using GPIO
-
-    @param[in]  byte
-                The byte to send
-*/
-/**************************************************************************/
-void ssd1331SendByte(uint8_t byte)
-{
-  int8_t i;
-
-  // Make sure clock pin starts high
-  SET_SCK;
-
-  // Write from MSB to LSB
-  for (i=7; i>=0; i--) 
-  {
-    // Set clock pin low
-    CLR_SCK;
-    // Set data pin high or low depending on the value of the current bit
-    if (byte & (1 << i))
-    {
-      SET_SID;
-    }
-    else
-    {
-      CLR_SID;
-    }
-    // Set clock pin high
-    SET_SCK;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value from the 8-bit data bus
-*/
-/**************************************************************************/
-uint16_t ssd1331ReadData(void)
-{
-  // ToDo
-  return 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Reads a 16-bit value
-*/
-/**************************************************************************/
-uint16_t ssd1331Read(uint16_t addr)
-{
-  // ToDo
-  return 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the 16-bit (4-hexdigit) controller code
-*/
-/**************************************************************************/
-uint16_t ssd1331Type(void)
-{
-  return 0x1331;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the specified X/Y position
-*/
-/**************************************************************************/
-void ssd1331SetCursor(uint8_t x, uint8_t y)
-{
-  if ((x >= ssd1331Properties.width) || (y >= ssd1331Properties.height))
-    return;
-  // set x and y coordinate
-  CMD(SSD1331_CMD_SETCOLUMN);
-  CMD(x);
-  CMD(ssd1331Properties.width-1);
-
-  CMD(SSD1331_CMD_SETROW);
-  CMD(y);
-  CMD(ssd1331Properties.height-1);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a solid line using HW acceleration
-*/
-/**************************************************************************/
-void ssd1331DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint16_t color) 
-{  
-  uint16_t x, pixels;
-
-  if ((x1 >= ssd1331Properties.width) || (x2 >= ssd1331Properties.width) ||
-      (y1 >= ssd1331Properties.height) || (y2 >= ssd1331Properties.height)) {
-      return;
-  }
-
-  // Switch x2 and x1 if required
-  if (x2 < x1)
-  {
-    x = x2;
-    x2 = x1;
-    x1 = x;
-  }
-
-  // Switch y2 and y1 if required
-  if (y2 < y1)
-  {
-    x = y2;
-    y2 = y1;
-    y1 = x;
-  }
-
-  CMD(SSD1331_CMD_DRAWLINE);
-  CMD(x1);
-  CMD(y1);
-  CMD(x2);
-  CMD(y2);
-  CMD((uint8_t)((color >> 11) & 0x1F));
-  CMD((uint8_t)((color >> 5) & 0x3F));
-  CMD((uint8_t)(color & 0x1F));
-
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a filled rectangle using HW acceleration
-*/
-/**************************************************************************/
-void ssd1331FillRect(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint16_t pencolor, uint16_t fillcolor) 
-{
-  if ((x1 >= ssd1331Properties.width) || (x2 >= ssd1331Properties.width) ||
-      (y1 >= ssd1331Properties.height) || (y2 >= ssd1331Properties.height)) {
-      return;
-       }
-  
-  // fill!
-  CMD(SSD1331_CMD_FILL);
-  CMD(0x01);
-
-  CMD(SSD1331_CMD_DRAWRECT);
-  CMD(x1);
-  CMD(y1);
-  CMD(x2);
-  CMD(y2);
-  CMD((pencolor >> 11) << 1);
-  CMD((pencolor >> 5) & 0x3F);
-  CMD((pencolor << 1)& 0x3F);
-  CMD((fillcolor >> 11) << 1);
-  CMD((fillcolor >> 5) & 0x3F);
-  CMD((fillcolor << 1)& 0x3F);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Inverts the R and B in an RGB565 color
-*/
-/**************************************************************************/
-uint16_t invert565Color(uint16_t color)
-{   
-  uint16_t r, g, b;   
-   
-  b = (color>>0)  & 0x1f;   
-  g = (color>>5)  & 0x3f;   
-  r = (color>>11) & 0x1f;   
-     
-  return( (b<<11) + (g<<5) + (r<<0) );
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Configures any pins or HW and initialises the LCD controller
-*/
-/**************************************************************************/
-void lcdInit(void)
-{
-  // Set all pins to output
-  gpioSetDir(SSD1331_SCK_PORT, SSD1331_SCK_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1331_SID_PORT, SSD1331_SID_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1331_DC_PORT, SSD1331_DC_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1331_RST_PORT, SSD1331_RST_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1331_CS_PORT, SSD1331_CS_PIN, gpioDirection_Output);
-
-  // Reset the LCD
-  SET_RST;
-  DELAY(1);
-  CLR_RST;
-  DELAY(10);
-  SET_RST;
-
-  // Disable pullups
-  SSD1331_DISABLEPULLUPS();
-  
-  CMD(SSD1331_CMD_DISPLAYOFF);  // 0xAE
-  CMD(SSD1331_CMD_SETREMAP); // 0xA0
-  // A[2] = 1 = color order (0 = RGB, 1 = BGR)
-  // A[7:6] = 01 = 65K color
-  #if defined SSD1331_COLORORDER_BGR
-  CMD(0x76);
-  #else
-  CMD(0x72);
-  #endif
-  CMD(SSD1331_CMD_STARTLINE); // 0xA1
-  CMD(0x0);
-  CMD(SSD1331_CMD_DISPLAYOFFSET); // 0xA2
-  CMD(0x0);
-  CMD(SSD1331_CMD_NORMALDISPLAY);  // 0xA4
-  CMD(SSD1331_CMD_SETMULTIPLEX); // 0xA8
-  CMD(0x3F);  // 0x3F 1/64 duty
-  CMD(SSD1331_CMD_SETMASTER);  // 0xAD
-  CMD(0x8E);
-  CMD(SSD1331_CMD_POWERMODE);  // 0xB0
-  CMD(0x0B);
-  CMD(SSD1331_CMD_PRECHARGE);  // 0xB1
-  CMD(0x31);
-  CMD(SSD1331_CMD_CLOCKDIV);  // 0xB3
-  CMD(0xF0);  // 7:4 = Oscillator Frequency, 3:0 = CLK Div Ratio (A[3:0]+1 = 1..16)
-  CMD(SSD1331_CMD_PRECHARGEA);  // 0x8A
-  CMD(0x64);
-  CMD(SSD1331_CMD_PRECHARGEB);  // 0x8B
-  CMD(0x78);
-  CMD(SSD1331_CMD_PRECHARGEA);  // 0x8C
-  CMD(0x64);
-  CMD(SSD1331_CMD_PRECHARGELEVEL);  // 0xBB
-  CMD(0x3A);
-  CMD(SSD1331_CMD_VCOMH);  // 0xBE
-  CMD(0x3E);
-  CMD(SSD1331_CMD_MASTERCURRENT);  // 0x87
-  CMD(0x06);
-  CMD(SSD1331_CMD_CONTRASTA);  // 0x81
-  CMD(0x91);
-  CMD(SSD1331_CMD_CONTRASTB);  // 0x82
-  CMD(0x50);
-  CMD(SSD1331_CMD_CONTRASTC);  // 0x83
-  CMD(0x7D);
-  CMD(SSD1331_CMD_DISPLAYON);//--turn on oled panel
-  
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Enables or disables the LCD backlight
-*/
-/**************************************************************************/
-void lcdBacklight(bool state)
-{
-  // No backlight ... do nothing
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a simple test pattern on the LCD
-*/
-/**************************************************************************/
-void lcdTest(void)
-{
-  uint32_t i,j;
-  ssd1331SetCursor(0, 0);
-  
-  for(i=0;i<64;i++)
-  {
-    for(j=0;j<96;j++)
-    {
-      if(i>55){DATA((uint8_t)COLOR_WHITE>>8);DATA((uint8_t)COLOR_WHITE);}
-      else if(i>47){DATA((uint8_t)COLOR_BLUE>>8);DATA((uint8_t)COLOR_BLUE);}
-      else if(i>39){DATA((uint8_t)COLOR_GREEN>>8);DATA((uint8_t)COLOR_GREEN);}
-      else if(i>31){DATA((uint8_t)COLOR_CYAN>>8);DATA((uint8_t)COLOR_CYAN);}
-      else if(i>23){DATA((uint8_t)COLOR_RED>>8);DATA((uint8_t)COLOR_RED);}
-      else if(i>15){DATA((uint8_t)COLOR_MAGENTA>>8);DATA((uint8_t)COLOR_MAGENTA);}
-      else if(i>7){DATA((uint8_t)COLOR_YELLOW>>8);DATA((uint8_t)COLOR_YELLOW);}
-      else {DATA((uint8_t)COLOR_BLACK>>8);DATA((uint8_t)COLOR_BLACK);}
-    }
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Fills the LCD with the specified 16-bit color
-*/
-/**************************************************************************/
-void lcdFillRGB(uint16_t data)
-{
-  ssd1331FillRect(0,0,ssd1331Properties.width-1,ssd1331Properties.height-1, data, data);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a single pixel at the specified X/Y location
-*/
-/**************************************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  if ((x >= ssd1331Properties.width) || (y >= ssd1331Properties.height))
-    return;
-
-  ssd1331SetCursor((uint8_t)x, (uint8_t)y);
-  DATA(color >> 8);
-  DATA(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a horizontal line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  ssd1331DrawLine((uint8_t)x0, (uint8_t)y, (uint8_t)x1, (uint8_t)y, color); 
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a vertical line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  ssd1331DrawLine((uint8_t)x, (uint8_t)y0, (uint8_t)x, (uint8_t)y1, color); 
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the 16-bit color of the pixel at the specified location
-*/
-/**************************************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  // ToDo
-  return 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the LCD orientation to horizontal and vertical
-*/
-/**************************************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  // Not supported
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the current screen orientation (horizontal or vertical)
-*/
-/**************************************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the width in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetWidth(void)
-{
-  return ssd1331Properties.width;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the height in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetHeight(void)
-{
-  return ssd1331Properties.height;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Scrolls the contents of the LCD screen vertically the
-            specified number of pixels using a HW optimised routine
-*/
-/**************************************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the controller's 16-bit (4 hexdigit) ID
-*/
-/**************************************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return ssd1331Type();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
-            generic capabilities and dimensions
-*/
-/**************************************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-  return ssd1331Properties;
-}
diff --git a/drivers/lcd/tft/hw/ssd1331.h b/drivers/lcd/tft/hw/ssd1331.h
deleted file mode 100644 (file)
index 3dd4bc8..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ssd1331.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SSD1331_H__
-#define __SSD1331_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/tft/lcd.h"
-#include "core/gpio/gpio.h"
-
-// Select one of these defines to set the pixel color order
-#define SSD1331_COLORORDER_RGB
-// #define SSD1331_COLORORDER_BGR
-
-#if defined SSD1331_COLORORDER_RGB && defined SSD1331_COLORORDER_BGR
-  #error "RGB and BGR can not both be defined for SSD1331_COLORODER."
-#endif
-
-// Control pins
-#define SSD1331_SID_PORT          2     // DAT
-#define SSD1331_SID_PIN           1
-#define SSD1331_SCK_PORT          2     // SCK
-#define SSD1331_SCK_PIN           2
-#define SSD1331_DC_PORT           2     // D/C
-#define SSD1331_DC_PIN            3
-#define SSD1331_RST_PORT          2     // RST
-#define SSD1331_RST_PIN           4
-#define SSD1331_CS_PORT           2     // OLEDCS
-#define SSD1331_CS_PIN            5
-
-// Placed here to try to keep all pin specific values in header file
-#define SSD1331_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); } while (0)
-
-// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
-#define SSD1331_GPIO2DATA_SID         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_SID_PIN) << 2))))
-#define SSD1331_GPIO2DATA_SCK         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_SCK_PIN) << 2))))
-#define SSD1331_GPIO2DATA_DC          (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_DC_PIN) << 2))))
-#define SSD1331_GPIO2DATA_RST         (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_RST_PIN) << 2))))
-#define SSD1331_GPIO2DATA_CS          (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1331_CS_PIN) << 2))))
-
-// Macros for control line state
-#define CLR_DC          SSD1331_GPIO2DATA_DC = (0)
-#define SET_DC          SSD1331_GPIO2DATA_DC = (1 << SSD1331_DC_PIN)
-#define CLR_RST         SSD1331_GPIO2DATA_RST = (0)
-#define SET_RST         SSD1331_GPIO2DATA_RST = (1 << SSD1331_RST_PIN)
-#define CLR_CS          SSD1331_GPIO2DATA_CS = (0)
-#define SET_CS          SSD1331_GPIO2DATA_CS = (1 << SSD1331_CS_PIN)
-#define CLR_SCK         SSD1331_GPIO2DATA_SCK = (0)
-#define SET_SCK         SSD1331_GPIO2DATA_SCK = (1 << SSD1331_SCK_PIN)
-#define CLR_SID         SSD1331_GPIO2DATA_SID = (0)
-#define SET_SID         SSD1331_GPIO2DATA_SID = (1 << SSD1331_SID_PIN)
-
-enum
-{
-  SSD1331_CMD_DRAWLINE                 = 0x21,
-  SSD1331_CMD_DRAWRECT                 = 0x22,
-  SSD1331_CMD_FILL             = 0x26,
-  SSD1331_CMD_SETCOLUMN        = 0x15,
-  SSD1331_CMD_SETROW           = 0x75,
-  SSD1331_CMD_CONTRASTA        = 0x81,
-  SSD1331_CMD_CONTRASTB        = 0x82,
-  SSD1331_CMD_CONTRASTC                = 0x83,
-  SSD1331_CMD_MASTERCURRENT    = 0x87,
-  SSD1331_CMD_SETREMAP                 = 0xA0,
-  SSD1331_CMD_STARTLINE        = 0xA1,
-  SSD1331_CMD_DISPLAYOFFSET    = 0xA2,
-  SSD1331_CMD_NORMALDISPLAY    = 0xA4,
-  SSD1331_CMD_DISPLAYALLON     = 0xA5,
-  SSD1331_CMD_DISPLAYALLOFF    = 0xA6,
-  SSD1331_CMD_INVERTDISPLAY    = 0xA7,
-  SSD1331_CMD_SETMULTIPLEX     = 0xA8,
-  SSD1331_CMD_SETMASTER        = 0xAD,
-  SSD1331_CMD_DISPLAYOFF       = 0xAE,
-  SSD1331_CMD_DISPLAYON        = 0xAF,
-  SSD1331_CMD_POWERMODE        = 0xB0,
-  SSD1331_CMD_PRECHARGE        = 0xB1,
-  SSD1331_CMD_CLOCKDIV                 = 0xB3,
-  SSD1331_CMD_PRECHARGEA       = 0x8A,
-  SSD1331_CMD_PRECHARGEB       = 0x8B,
-  SSD1331_CMD_PRECHARGEC       = 0x8C,
-  SSD1331_CMD_PRECHARGELEVEL   = 0xBB,
-  SSD1331_CMD_VCOMH            = 0xBE
-};
-
-#endif
diff --git a/drivers/lcd/tft/hw/ssd1351.c b/drivers/lcd/tft/hw/ssd1351.c
deleted file mode 100644 (file)
index b53d9e3..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     SSD1351.c
-    @author   K. Townsend (www.adafruit.com)
-
-    @section  DESCRIPTION
-
-    Driver for SSD1351 128x128 pixel RGB OLED displays.
-    
-    This driver uses a 3 or 4-pin SPI interface and 16-bit RGB565 colours.
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012, Adafruit Industries
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "ssd1351.h"
-#include "core/systick/systick.h"
-
-static volatile lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t ssd1351Properties = { 128, 128, false, false, false };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-#define CMD(c)        do { SET_CS; CLR_CS; CLR_DC; ssd1351SendByte( c, 1 ); SET_CS; } while (0)
-#define DATA(c)       do { SET_CS; CLR_CS; SET_DC; ssd1351SendByte( c, 0 ); SET_CS; } while (0);
-#define DELAY(mS)     do { systickDelay( mS / CFG_SYSTICK_DELAY_IN_MS ); } while(0);
-
-/**************************************************************************/
-/*! 
-    @brief Simulates an SPI write using GPIO.  
-    
-    @param[in]  byte
-                The byte to send
-    @param[in]  command
-                1 if this is a command, 0 if it is data
-*/
-/**************************************************************************/
-void ssd1351SendByte(uint8_t byte, uint8_t command)
-{
-  int8_t i;
-
-  // Make sure clock pin starts high
-  SET_SCK;
-
-#if defined SSD1351_BUS_SPI3
-  // Prepend D/C bit (cmd = 0, data = 1)
-  CLR_SCK;
-  if (command)
-  {
-    CLR_SID;
-  }
-  else
-  {
-    SET_SID;
-  }
-  SET_SCK;
-#endif
-
-  // Write from MSB to LSB
-  for (i=7; i>=0; i--) 
-  {
-    // Set clock pin low
-    CLR_SCK;
-    // Set data pin high or low depending on the value of the current bit
-    if (byte & (1 << i))
-    {
-      SET_SID;
-    }
-    else
-    {
-      CLR_SID;
-    }
-    // Set clock pin high
-    SET_SCK;
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the 16-bit (4-hexdigit) controller code
-*/
-/**************************************************************************/
-uint16_t ssd1351Type(void)
-{
-  return 0x1351;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the cursor to the specified X/Y position
-*/
-/**************************************************************************/
-void ssd1351SetCursor(uint8_t x, uint8_t y)
-{
-  if ((x >= ssd1351Properties.width) || (y >= ssd1351Properties.height))
-    return;
-
-  CMD(SSD1351_CMD_SETCOLUMNADDRESS);
-  DATA(x);                            // Start Address
-  DATA(ssd1351Properties.width-1);    // End Address (0x7F)
-
-  CMD(SSD1351_CMD_SETROWADDRESS);
-  DATA(y);                            // Start Address
-  DATA(ssd1351Properties.height-1);   // End Address (0x7F)
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/**************************************************************************/
-/*! 
-    @brief  Configures any pins or HW and initialises the LCD controller
-*/
-/**************************************************************************/
-void lcdInit(void)
-{
-  // Set all pins to output
-  gpioSetDir(SSD1351_SCK_PORT, SSD1351_SCK_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1351_SID_PORT, SSD1351_SID_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1351_RST_PORT, SSD1351_RST_PIN, gpioDirection_Output);
-  gpioSetDir(SSD1351_CS_PORT, SSD1351_CS_PIN, gpioDirection_Output);
-
-#if !defined SSD1351_BUS_SPI3
-  gpioSetDir(SSD1351_DC_PORT, SSD1351_DC_PIN, gpioDirection_Output);
-#endif
-
-  // Reset the LCD
-  SET_RST;
-  DELAY(20);
-  CLR_RST;
-  DELAY(200);
-  SET_RST;
-  DELAY(20);
-
-  // Disable pullups
-  SSD1351_DISABLEPULLUPS();
-
-  CMD(SSD1351_CMD_SETCOMMANDLOCK);
-  DATA(0x12);                               // Unlocked to enter commands
-  CMD(SSD1351_CMD_SETCOMMANDLOCK);
-  DATA(0xB1);                               // Make all commands accessible 
-  CMD(SSD1351_CMD_SLEEPMODE_DISPLAYOFF);
-  CMD(SSD1351_CMD_SETFRONTCLOCKDIV);
-  DATA(0xF1);
-  CMD(SSD1351_CMD_SETMUXRRATIO);
-  DATA(0x7F);
-  CMD(SSD1351_CMD_COLORDEPTH);
-  DATA(0x74);                               // 65,536 Colors
-  CMD(SSD1351_CMD_SETCOLUMNADDRESS);
-  DATA(0x00);
-  DATA(0x7F);
-  CMD(SSD1351_CMD_SETROWADDRESS);
-  DATA(0x00);
-  DATA(0x7F);
-  CMD(SSD1351_CMD_SETDISPLAYSTARTLINE);
-  DATA(0x00);
-  CMD(SSD1351_CMD_SETDISPLAYOFFSET);
-  DATA(0x00);
-  CMD(SSD1351_CMD_SETGPIO);
-  DATA(0x00);                               // Disable GPIO pins
-  CMD(SSD1351_CMD_FUNCTIONSELECTION);
-  DATA(0x00);                               // External VDD (0 = Internal, 1 = External???)*
-                                            // Which is it ... DS is contradictory here!
-  CMD(SSD1351_CMD_SETPHASELENGTH);
-  DATA(0x32);
-  CMD(SSD1351_CMD_SETSEGMENTLOWVOLTAGE);
-  DATA(0xA0);                               // Enable External VSL
-  DATA(0xB5);
-  DATA(0x55);
-  CMD(SSD1351_CMD_SETPRECHARGEVOLTAGE);
-  DATA(0x17);
-  CMD(SSD1351_CMD_SETVCOMHVOLTAGE);
-  DATA(0x05);
-  CMD(SSD1351_CMD_SETCONTRAST);
-  DATA(0xC8);
-  DATA(0x80);
-  DATA(0xC8);
-  CMD(SSD1351_CMD_MASTERCONTRAST);
-  DATA(0x0F);                               // Maximum contrast
-  CMD(SSD1351_CMD_SETSECONDPRECHARGEPERIOD);
-  DATA(0x01);
-  CMD(SSD1351_CMD_SETDISPLAYMODE_RESET);
-
-  // Use default grayscale for now to save flash space, but here are
-  // the values if someone wants to change them ...
-  //  CMD(SSD1351_CMD_GRAYSCALELOOKUP);
-  //  DATA(0x02);
-  //  DATA(0x03);
-  //  DATA(0x04);
-  //  DATA(0x05);
-  //  DATA(0x06);
-  //  DATA(0x07);
-  //  DATA(0x08);
-  //  DATA(0x09);
-  //  DATA(0x0A);
-  //  DATA(0x0B);
-  //  DATA(0x0C);
-  //  DATA(0x0D);
-  //  DATA(0x0E);
-  //  DATA(0x0F);
-  //  DATA(0x10);
-  //  DATA(0x11);
-  //  DATA(0x12);
-  //  DATA(0x13);
-  //  DATA(0x15);
-  //  DATA(0x17);
-  //  DATA(0x19);
-  //  DATA(0x1B);
-  //  DATA(0x1D);
-  //  DATA(0x1F);
-  //  DATA(0x21);
-  //  DATA(0x23);
-  //  DATA(0x25);
-  //  DATA(0x27);
-  //  DATA(0x2A);
-  //  DATA(0x2D);
-  //  DATA(0x30);
-  //  DATA(0x33);
-  //  DATA(0x36);
-  //  DATA(0x39);
-  //  DATA(0x3C);
-  //  DATA(0x3F);
-  //  DATA(0x42);
-  //  DATA(0x45);
-  //  DATA(0x48);
-  //  DATA(0x4C);
-  //  DATA(0x50);
-  //  DATA(0x54);
-  //  DATA(0x58);
-  //  DATA(0x5C);
-  //  DATA(0x60);
-  //  DATA(0x64);
-  //  DATA(0x68);
-  //  DATA(0x6C);
-  //  DATA(0x70);
-  //  DATA(0x74);
-  //  DATA(0x78);
-  //  DATA(0x7D);
-  //  DATA(0x82);
-  //  DATA(0x87);
-  //  DATA(0x8C);
-  //  DATA(0x91);
-  //  DATA(0x96);
-  //  DATA(0x9B);
-  //  DATA(0xA0);
-  //  DATA(0xA5);
-  //  DATA(0xAA);
-  //  DATA(0xAF);
-  //  DATA(0xBF);
-
-  // Clear screen
-  lcdFillRGB(COLOR_RED);
-
-  // Turn the display on
-  CMD(SSD1351_CMD_SLEEPMODE_DISPLAYON);  
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Enables or disables the LCD backlight
-*/
-/**************************************************************************/
-void lcdBacklight(bool state)
-{
-  // No backlight ... do nothing
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a simple test pattern on the LCD
-*/
-/**************************************************************************/
-void lcdTest(void)
-{
-  uint32_t i,j;
-  CMD(SSD1351_CMD_WRITERAM);
-  ssd1351SetCursor(0, 0);
-  CMD(SSD1351_CMD_WRITERAM);
-  
-  for(i=0;i<128;i++)
-  {
-    for(j=0;j<128;j++)
-    {
-      if(i>111){DATA(COLOR_WHITE>>8);DATA((uint8_t)COLOR_WHITE);}
-      else if(i>95){DATA(COLOR_BLUE>>8);DATA((uint8_t)COLOR_BLUE);}
-      else if(i>79){DATA(COLOR_GREEN>>8);DATA((uint8_t)COLOR_GREEN);}
-      else if(i>63){DATA(COLOR_CYAN>>8);DATA((uint8_t)COLOR_CYAN);}
-      else if(i>47){DATA(COLOR_RED>>8);DATA((uint8_t)COLOR_RED);}
-      else if(i>31){DATA(COLOR_MAGENTA>>8);DATA((uint8_t)COLOR_MAGENTA);}
-      else if(i>15){DATA(COLOR_YELLOW>>8);DATA((uint8_t)COLOR_YELLOW);}
-      else {DATA(COLOR_BLACK>>8);DATA((uint8_t)COLOR_BLACK);}
-    }
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Fills the LCD with the specified 16-bit color
-*/
-/**************************************************************************/
-void lcdFillRGB(uint16_t data)
-{
-  uint16_t i;
-  ssd1351SetCursor(0, 0);
-  CMD(SSD1351_CMD_WRITERAM);
-  for (i=1; i<=((ssd1351Properties.width)*(ssd1351Properties.height)) * 2;i++)
-  {
-    DATA(data);
-    DATA((data >> 8));
-  }
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a single pixel at the specified X/Y location
-*/
-/**************************************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  if ((x >= ssd1351Properties.width) || (y >= ssd1351Properties.height))
-    return;
-
-  ssd1351SetCursor((uint8_t)x, (uint8_t)y);
-  DATA(color >> 8);
-  DATA(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a horizontal line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a vertical line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the 16-bit color of the pixel at the specified location
-*/
-/**************************************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  // ToDo
-  return 0;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the LCD orientation to horizontal and vertical
-*/
-/**************************************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  // Not supported
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the current screen orientation (horizontal or vertical)
-*/
-/**************************************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the width in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetWidth(void)
-{
-  return ssd1351Properties.width;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the height in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetHeight(void)
-{
-  return ssd1351Properties.height;
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Scrolls the contents of the LCD screen vertically the
-            specified number of pixels using a HW optimised routine
-*/
-/**************************************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  // ToDo
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the controller's 16-bit (4 hexdigit) ID
-*/
-/**************************************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return ssd1351Type();
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
-            generic capabilities and dimensions
-*/
-/**************************************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-  return ssd1351Properties;
-}
diff --git a/drivers/lcd/tft/hw/ssd1351.h b/drivers/lcd/tft/hw/ssd1351.h
deleted file mode 100644 (file)
index e4edfd8..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ssd1351.h
-    @author   K. Townsend (www.adafruit.com)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2012, Adafruit Industries
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __SSD1351_H__
-#define __SSD1351_H__
-
-#include "projectconfig.h"
-#include "drivers/lcd/tft/lcd.h"
-#include "core/gpio/gpio.h"
-
-/*=========================================================================
-    SPI modes
-    -----------------------------------------------------------------------
-    The OLED supports both 3-pin and 4-pin SPI modes
-
-    3-PIN MODE      Saves one GPIO pin (D/C) by adding the D/C bit before
-                    every transfer, meaning that 9 bits are sent every frame
-                    instead of 8.  You have slightly slower performance
-                    but use less pins. Requires 3 GPIO pins (SCK, SID, RST)
-
-    4-PIN MODE      Uses a normal SPI interface with 8-bits per transfer,
-                    plus a dedicated D/C pin to indicate if this is a
-                    command or data byte. Requires 4 GPIO pins (SCK, SID,
-                    RST, DC).
-
-    To select one of the SPI modes, make sure the BS0/1 pins are correctly
-    set on the OLED display and uncomment the appropriate define below.
-    -----------------------------------------------------------------------*/
-    // #define SSD1351_BUS_SPI3
-    #define SSD1351_BUS_SPI4
-/*=========================================================================*/
-
-// Control pins
-#define SSD1351_SCK_PORT                (2) // SCK (D0)
-#define SSD1351_SCK_PIN                 (1)
-#define SSD1351_SID_PORT                (2) // DAT/MOSI (D1)
-#define SSD1351_SID_PIN                 (2)
-#define SSD1351_CS_PORT                 (2) // OLEDCS
-#define SSD1351_CS_PIN                  (3)
-#define SSD1351_RST_PORT                (2) // RST
-#define SSD1351_RST_PIN                 (4)
-#define SSD1351_DC_PORT                 (2) // D/C (only required for 4-pin SPI)
-#define SSD1351_DC_PIN                  (5)
-
-// Placed here to try to keep all pin specific values in the header file
-#define SSD1351_DISABLEPULLUPS()  do {  gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
-                                        gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
-                                        gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
-                                        gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
-                                        gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); } while (0)
-
-// These registers allow fast single cycle clear+set of bits (see section 8.5.1 of LPC1343 UM)
-#define SSD1351_GPIO2DATA_SCK           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_SCK_PIN) << 2))))
-#define SSD1351_GPIO2DATA_SID           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_SID_PIN) << 2))))
-#define SSD1351_GPIO2DATA_CS            (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_CS_PIN) << 2))))
-#define SSD1351_GPIO2DATA_RST           (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_RST_PIN) << 2))))
-#define SSD1351_GPIO2DATA_DC            (*(pREG32 (GPIO_GPIO2_BASE + ((1 << SSD1351_DC_PIN) << 2))))
-
-// Macros for control line state
-#define CLR_SCK                         SSD1351_GPIO2DATA_SCK = (0)
-#define SET_SCK                         SSD1351_GPIO2DATA_SCK = (1 << SSD1351_SCK_PIN)
-#define CLR_SID                         SSD1351_GPIO2DATA_SID = (0)
-#define SET_SID                         SSD1351_GPIO2DATA_SID = (1 << SSD1351_SID_PIN)
-#define CLR_CS                          SSD1351_GPIO2DATA_CS  = (0)
-#define SET_CS                          SSD1351_GPIO2DATA_CS  = (1 << SSD1351_CS_PIN)
-#define CLR_RST                         SSD1351_GPIO2DATA_RST = (0)
-#define SET_RST                         SSD1351_GPIO2DATA_RST = (1 << SSD1351_RST_PIN)
-#define CLR_DC                          SSD1351_GPIO2DATA_DC  = (0)
-#define SET_DC                          SSD1351_GPIO2DATA_DC  = (1 << SSD1351_DC_PIN)
-
-// SSD1351 Commands
-enum
-{
-  SSD1351_CMD_SETCOLUMNADDRESS          = 0x15,
-  SSD1351_CMD_SETROWADDRESS             = 0x75,
-  SSD1351_CMD_WRITERAM                  = 0x5C, // Write data to GRAM and increment until another command is sent
-  SSD1351_CMD_READRAM                   = 0x5D, // Read data from GRAM and increment until another command is sent
-  SSD1351_CMD_COLORDEPTH                = 0xA0, // Numerous functions include increment direction ... see DS 
-                                                // A0[0] = Address Increment Mode (0 = horizontal, 1 = vertical)
-                                                // A0[1] = Column Address Remap (0 = left to right, 1 = right to left)
-                                                // A0[2] = Color Remap (0 = ABC, 1 = CBA) - HW RGB/BGR switch
-                                                // A0[4] = COM Scan Direction (0 = top to bottom, 1 = bottom to top)
-                                                // A0[5] = Odd/Even Paid Split
-                                                // A0[7:6] = Display Color Mode (Bits not documented !?!)
-  SSD1351_CMD_SETDISPLAYSTARTLINE       = 0xA1,
-  SSD1351_CMD_SETDISPLAYOFFSET          = 0xA2, 
-  SSD1351_CMD_SETDISPLAYMODE_ALLOFF     = 0xA4, // Force entire display area to grayscale GS0
-  SSD1351_CMD_SETDISPLAYMODE_ALLON      = 0xA5, // Force entire display area to grayscale GS63
-  SSD1351_CMD_SETDISPLAYMODE_RESET      = 0xA6, // Resets the display area relative to the above two commands
-  SSD1351_CMD_SETDISPLAYMODE_INVERT     = 0xA7, // Inverts the display contents (GS0 -> GS63, GS63 -> GS0, etc.)
-  SSD1351_CMD_FUNCTIONSELECTION         = 0xAB, // Enable/Disable the internal VDD regulator
-  SSD1351_CMD_SLEEPMODE_DISPLAYOFF      = 0xAE, // Sleep mode on (display off)
-  SSD1351_CMD_SLEEPMODE_DISPLAYON       = 0xAF, // Sleep mode off (display on)
-  SSD1351_CMD_SETPHASELENGTH            = 0xB1, // Larger capacitance may require larger delay to discharge previous pixel state
-  SSD1351_CMD_ENHANCEDDRIVINGSCHEME     = 0xB2, 
-  SSD1351_CMD_SETFRONTCLOCKDIV          = 0xB3, // DCLK divide ration fro CLK (from 1 to 16)
-  SSD1351_CMD_SETSEGMENTLOWVOLTAGE      = 0xB4,
-  SSD1351_CMD_SETGPIO                   = 0xB5,
-  SSD1351_CMD_SETSECONDPRECHARGEPERIOD  = 0xB6,
-  SSD1351_CMD_GRAYSCALELOOKUP           = 0xB8,
-  SSD1351_CMD_LINEARLUT                 = 0xB9,
-  SSD1351_CMD_SETPRECHARGEVOLTAGE       = 0xBB,
-  SSD1351_CMD_SETVCOMHVOLTAGE           = 0xBE,
-  SSD1351_CMD_SETCONTRAST               = 0xC1,
-  SSD1351_CMD_MASTERCONTRAST            = 0xC7,
-  SSD1351_CMD_SETMUXRRATIO              = 0xCA,
-  SSD1351_CMD_NOP3                      = 0xD1,
-  SSD1351_CMD_NOP4                      = 0xE3,
-  SSD1351_CMD_SETCOMMANDLOCK            = 0xFD,
-  SSD1351_CMD_HORIZONTALSCROLL          = 0x96,
-  SSD1351_CMD_STOPMOVING                = 0x9E,
-  SSD1351_CMD_STARTMOVING               = 0x9F  
-};
-
-#endif
diff --git a/drivers/lcd/tft/hw/st7735.c b/drivers/lcd/tft/hw/st7735.c
deleted file mode 100644 (file)
index 939015e..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     st7735.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for st7735 128x160 pixel TFT LCD displays.
-    
-    This driver uses a bit-banged SPI interface and a 16-bit RGB565
-    colour palette.
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "st7735.h"
-#include "core/systick/systick.h"
-#include "core/gpio/gpio.h"
-
-static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t st7735Properties = { 128, 160, FALSE, FALSE, FALSE };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/*************************************************/
-void st7735WriteCmd(uint8_t command) 
-{
-  CLR_CS;
-  CLR_RS;
-  uint8_t i = 0;
-  for (i=0; i<8; i++) 
-  { 
-    if (command & 0x80) 
-    { 
-      SET_SDA;   
-    } 
-    else 
-    { 
-      CLR_SDA; 
-    } 
-    CLR_SCL; 
-    command <<= 1; 
-    SET_SCL;
-  } 
-  SET_CS; 
-}
-
-/*************************************************/
-void st7735WriteData(uint8_t data)
-{
-  CLR_CS;
-  SET_RS; 
-  uint8_t i = 0;
-  for (i=0; i<8; i++) 
-  { 
-    if (data & 0x80) 
-    { 
-      SET_SDA;
-    } 
-    else 
-    { 
-      CLR_SDA;
-    } 
-    CLR_SCL;
-    data <<= 1; 
-    SET_SCL;    
-  } 
-  SET_CS;
-}
-
-/*************************************************/
-void st7735SetAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1)
-{
-  st7735WriteCmd(ST7735_CASET);   // column addr set
-  st7735WriteData(0x00);
-  st7735WriteData(x0+2);          // XSTART 
-  st7735WriteData(0x00);
-  st7735WriteData(x1+2);          // XEND
-
-  st7735WriteCmd(ST7735_RASET);   // row addr set
-  st7735WriteData(0x00);
-  st7735WriteData(y0+1);          // YSTART
-  st7735WriteData(0x00);
-  st7735WriteData(y1+1);          // YEND
-}
-
-/*************************************************/
-void st7735InitDisplay(void)
-{
-  st7735WriteCmd(ST7735_SWRESET); // software reset
-  systickDelay(50);
-  st7735WriteCmd(ST7735_SLPOUT);  // out of sleep mode
-  systickDelay(500);
-  
-  st7735WriteCmd(ST7735_COLMOD);  // set color mode
-  st7735WriteData(0x05);          // 16-bit color
-  systickDelay(10);
-  
-  st7735WriteCmd(ST7735_FRMCTR1); // frame rate control
-  st7735WriteData(0x00);          // fastest refresh
-  st7735WriteData(0x06);          // 6 lines front porch
-  st7735WriteData(0x03);          // 3 lines backporch
-  systickDelay(10);
-  
-  st7735WriteCmd(ST7735_MADCTL);  // memory access control (directions)
-  st7735WriteData(0xC8);          // row address/col address, bottom to top refresh
-  
-  st7735WriteCmd(ST7735_DISSET5); // display settings #5
-  st7735WriteData(0x15);          // 1 clock cycle nonoverlap, 2 cycle gate rise, 3 cycle oscil. equalize
-  st7735WriteData(0x02);          // fix on VTL
-  st7735WriteCmd(ST7735_INVCTR);  // display inversion control
-  st7735WriteData(0x0);           // line inversion
-  st7735WriteCmd(ST7735_PWCTR1);  // power control
-  st7735WriteData(0x02);          // GVDD = 4.7V 
-  st7735WriteData(0x70);          // 1.0uA
-  systickDelay(10);
-  st7735WriteCmd(ST7735_PWCTR2);  // power control
-  st7735WriteData(0x05);          // VGH = 14.7V, VGL = -7.35V 
-  st7735WriteCmd(ST7735_PWCTR3);  // power control
-  st7735WriteData(0x01);          // Opamp current small 
-  st7735WriteData(0x02);          // Boost frequency
-  
-  
-  st7735WriteCmd(ST7735_VMCTR1);  // power control
-  st7735WriteData(0x3C);          // VCOMH = 4V
-  st7735WriteData(0x38);          // VCOML = -1.1V
-  systickDelay(10);
-  
-  st7735WriteCmd(ST7735_PWCTR6);  // power control
-  st7735WriteData(0x11); 
-  st7735WriteData(0x15);
-  
-  st7735WriteCmd(ST7735_GMCTRP1);
-  st7735WriteData(0x09);
-  st7735WriteData(0x16);
-  st7735WriteData(0x09);
-  st7735WriteData(0x20);
-  st7735WriteData(0x21);
-  st7735WriteData(0x1B);
-  st7735WriteData(0x13);
-  st7735WriteData(0x19);
-  st7735WriteData(0x17);
-  st7735WriteData(0x15);
-  st7735WriteData(0x1E);
-  st7735WriteData(0x2B);
-  st7735WriteData(0x04);
-  st7735WriteData(0x05);
-  st7735WriteData(0x02);
-  st7735WriteData(0x0E);
-  st7735WriteCmd(ST7735_GMCTRN1);
-  st7735WriteData(0x0B); 
-  st7735WriteData(0x14); 
-  st7735WriteData(0x08); 
-  st7735WriteData(0x1E); 
-  st7735WriteData(0x22); 
-  st7735WriteData(0x1D); 
-  st7735WriteData(0x18); 
-  st7735WriteData(0x1E); 
-  st7735WriteData(0x1B); 
-  st7735WriteData(0x1A); 
-  st7735WriteData(0x24); 
-  st7735WriteData(0x2B); 
-  st7735WriteData(0x06); 
-  st7735WriteData(0x06); 
-  st7735WriteData(0x02); 
-  st7735WriteData(0x0F); 
-  systickDelay(10);
-  
-  st7735WriteCmd(ST7735_CASET);   // column addr set
-  st7735WriteData(0x00);
-  st7735WriteData(0x02);          // XSTART = 2
-  st7735WriteData(0x00);
-  st7735WriteData(0x81);          // XEND = 129
-
-  st7735WriteCmd(ST7735_RASET);   // row addr set
-  st7735WriteData(0x00);
-  st7735WriteData(0x02);          // XSTART = 1
-  st7735WriteData(0x00);
-  st7735WriteData(0x81);          // XEND = 160
-
-  st7735WriteCmd(ST7735_NORON);   // normal display on
-  systickDelay(10);
-  
-  st7735WriteCmd(ST7735_DISPON);
-  systickDelay(500);
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/*************************************************/
-void lcdInit(void)
-{
-  // Set control pins to output
-  gpioSetDir(ST7735_PORT, ST7735_RS_PIN, 1);
-  gpioSetDir(ST7735_PORT, ST7735_SDA_PIN, 1);
-  gpioSetDir(ST7735_PORT, ST7735_SCL_PIN, 1);
-  gpioSetDir(ST7735_PORT, ST7735_CS_PIN, 1);
-  gpioSetDir(ST7735_PORT, ST7735_RES_PIN, 1);
-  gpioSetDir(ST7735_PORT, ST7735_BL_PIN, 1);
-
-  // Set pins low by default (except reset)
-  CLR_RS;
-  CLR_SDA;
-  CLR_SCL;
-  CLR_CS;
-  CLR_BL;
-  SET_RES;
-  
-  // Turn backlight on
-  lcdBacklight(TRUE);
-
-  // Reset display
-  SET_RES;
-  systickDelay(50);
-  CLR_RES;
-  systickDelay(50);
-  SET_RES;
-  systickDelay(50);
-
-  // Run LCD init sequence
-  st7735InitDisplay();
-
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-}
-
-/*************************************************/
-void lcdBacklight(bool state)
-{
-  // Set the backlight
-  // Note: Depending on the type of transistor used
-  // to control the backlight, you made need to invert
-  // the values below
-  if (state)
-    // CLR_BL;
-    SET_BL;
-  else
-    // SET_BL;
-    CLR_BL;
-}
-
-/*************************************************/
-void lcdTest(void)
-{
-  uint8_t i = 0;
-  for (i = 0; i < 100; i++)
-  {
-    lcdDrawPixel(i, i, 0xFFFF);
-  }
-}
-
-/*************************************************/
-void lcdFillRGB(uint16_t color)
-{
-  uint8_t x, y;
-  st7735SetAddrWindow(0, 0, lcdGetWidth() - 1, lcdGetHeight() - 1);
-  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
-  for (x=0; x < lcdGetWidth(); x++) 
-  {
-    for (y=0; y < lcdGetHeight(); y++) 
-    {
-      st7735WriteData(color >> 8);    
-      st7735WriteData(color);    
-    }
-  }
-  st7735WriteCmd(ST7735_NOP);
-}
-
-/*************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  st7735SetAddrWindow(x,y,x+1,y+1);
-  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
-  st7735WriteData(color >> 8);  
-  st7735WriteData(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  // ToDo: Optimise this function ... currently only a placeholder
-  uint32_t i = 0;
-  do
-  {
-    lcdDrawPixel(x+i, y, data[i]);
-    i++;
-  } while (i<len);
-}
-
-/*************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t x, pixels;
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-
-  // Check limits
-  if (x1 >= lcdGetWidth())
-  {
-    x1 = lcdGetWidth() - 1;
-  }
-  if (x0 >= lcdGetWidth())
-  {
-    x0 = lcdGetWidth() - 1;
-  }
-
-  st7735SetAddrWindow(x0, y, lcdGetWidth(), y + 1);
-  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
-  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
-  {
-    st7735WriteData(color >> 8);  
-    st7735WriteData(color);
-  }
-  st7735WriteCmd(ST7735_NOP);
-}
-
-/*************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t y, pixels;
-
-  if (y1 < y0)
-  {
-    // Switch y1 and y0
-    y = y1;
-    y1 = y0;
-    y0 = y;
-  }
-
-  // Check limits
-  if (y1 >= lcdGetHeight())
-  {
-    y1 = lcdGetHeight() - 1;
-  }
-  if (y0 >= lcdGetHeight())
-  {
-    y0 = lcdGetHeight() - 1;
-  }
-
-  st7735SetAddrWindow(x, y0, x, lcdGetHeight());
-  st7735WriteCmd(ST7735_RAMWR);  // write to RAM
-  for (pixels = 0; pixels < y1 - y0 + 1; pixels++)
-  {
-    st7735WriteData(color >> 8);  
-    st7735WriteData(color);
-  }
-  st7735WriteCmd(ST7735_NOP);
-}
-
-/*************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  // ToDo
-  return 0;
-}
-
-/*************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  // ToDo
-}
-
-/*************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/*************************************************/
-uint16_t lcdGetWidth(void)
-{
-  return st7735Properties.width;
-}
-
-/*************************************************/
-uint16_t lcdGetHeight(void)
-{
-  return st7735Properties.height;
-}
-
-/*************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  // ToDo
-}
-
-/*************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  // ToDo
-  return 0;
-}
-
-/*************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-  return st7735Properties;
-}
diff --git a/drivers/lcd/tft/hw/st7735.h b/drivers/lcd/tft/hw/st7735.h
deleted file mode 100644 (file)
index 483c2cc..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ST7735.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __ST7735_H__
-#define __ST7735_H__
-
-#include "projectconfig.h"
-#include "drivers/lcd/tft/lcd.h"
-
-/**************************************************************************
-    ST7735 CONNECTOR
-    -----------------------------------------------------------------------
-    Pin   Function        Notes
-    ===   ==============  ===============================
-      1   NC
-      2   GND
-      3   LED K/-
-      4   LED A/+         3.0V
-      5   GND
-      6   RESET
-      7   RS
-      8   SDA             Serial Data
-      9   SCL             Serial Clock
-     10   VCC             2.8-3.4V
-     11   VCC             2.8-3.4V
-     12   CS
-     13   GND
-     14   NC
-
- **************************************************************************/
-
-// Control pins
-#define ST7735_GPIODATAREG     (*(pREG32 (0x50023FFC)))   // GPIO2DATA
-#define ST7735_PORT            (2)
-#define ST7735_RS_PIN          (1)
-#define ST7735_SDA_PIN         (2)
-#define ST7735_SCL_PIN         (3)
-#define ST7735_CS_PIN          (4)
-#define ST7735_RES_PIN         (5)
-#define ST7735_BL_PIN          (6)
-
-// Macros for control line state
-#define CLR_RS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_RS_PIN); } while(0)
-#define SET_RS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_RS_PIN); ST7735_GPIODATAREG |= (1<<ST7735_RS_PIN); } while(0)
-#define CLR_SDA     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SDA_PIN); } while(0)
-#define SET_SDA     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SDA_PIN); ST7735_GPIODATAREG |= (1<<ST7735_SDA_PIN); } while(0)
-#define CLR_SCL     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SCL_PIN); } while(0)
-#define SET_SCL     do { ST7735_GPIODATAREG &= ~(1<<ST7735_SCL_PIN); ST7735_GPIODATAREG |= (1<<ST7735_SCL_PIN); } while(0)
-#define CLR_CS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_CS_PIN); } while(0)
-#define SET_CS      do { ST7735_GPIODATAREG &= ~(1<<ST7735_CS_PIN); ST7735_GPIODATAREG |= (1<<ST7735_CS_PIN); } while(0)
-#define CLR_RES     do { ST7735_GPIODATAREG &= ~(1<<ST7735_RES_PIN); } while(0)
-#define SET_RES     do { ST7735_GPIODATAREG &= ~(1<<ST7735_RES_PIN); ST7735_GPIODATAREG |= (1<<ST7735_RES_PIN); } while(0)
-#define CLR_BL      do { ST7735_GPIODATAREG &= ~(1<<ST7735_BL_PIN); } while(0)
-#define SET_BL      do { ST7735_GPIODATAREG &= ~(1<<ST7735_BL_PIN); ST7735_GPIODATAREG |= (1<<ST7735_BL_PIN); } while(0)
-
-#define ST7735_NOP      (0x0)
-#define ST7735_SWRESET  (0x01)
-#define ST7735_SLPIN    (0x10)
-#define ST7735_SLPOUT   (0x11)
-#define ST7735_PTLON    (0x12)
-#define ST7735_NORON    (0x13)
-#define ST7735_INVOFF   (0x20)
-#define ST7735_INVON    (0x21)
-#define ST7735_DISPON   (0x29)
-#define ST7735_CASET    (0x2A)
-#define ST7735_RASET    (0x2B)
-#define ST7735_RAMWR    (0x2C)
-#define ST7735_COLMOD   (0x3A)
-#define ST7735_MADCTL   (0x36)
-#define ST7735_FRMCTR1  (0xB1)
-#define ST7735_INVCTR   (0xB4)
-#define ST7735_DISSET5  (0xB6)
-#define ST7735_PWCTR1   (0xC0)
-#define ST7735_PWCTR2   (0xC1)
-#define ST7735_PWCTR3   (0xC2)
-#define ST7735_VMCTR1   (0xC5)
-#define ST7735_PWCTR6   (0xFC)
-#define ST7735_GMCTRP1  (0xE0)
-#define ST7735_GMCTRN1  (0xE1)
-
-#endif
diff --git a/drivers/lcd/tft/hw/st7783.c b/drivers/lcd/tft/hw/st7783.c
deleted file mode 100644 (file)
index a8a50af..0000000
+++ /dev/null
@@ -1,506 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     st7783.c
-    @author   K. Townsend (microBuilder.eu)
-
-    @section  DESCRIPTION
-
-    Driver for st7783 240x320 pixel TFT LCD displays.
-    
-    This driver uses an 8-bit interface and a 16-bit RGB565 colour palette.
-
-    @section  UPDATES
-
-    26-11-2010: st7783ReadData contributed by Adafruit Industries
-
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "st7783.h"
-#include "core/systick/systick.h"
-#include "drivers/lcd/tft/touchscreen.h"
-
-static lcdOrientation_t lcdOrientation = LCD_ORIENTATION_PORTRAIT;
-static lcdProperties_t st7783Properties = { 240, 320, TRUE, TRUE, FALSE };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-/*************************************************/
-void st7783Delay(unsigned int t)
-{
-  unsigned char t1;
-  while(t--)
-  for ( t1=10; t1 > 0; t1-- )
-  {
-    __asm("nop");
-  }
-}
-
-/*************************************************/
-void st7783WriteCmd(uint16_t command) 
-{
-  // Compiled with -Os on GCC 4.4 this works out to 25 cycles
-  // (versus 36 compiled with no optimisations).  I'm not sure it
-  // can be improved further, so that means 25 cycles/350nS for
-  // continuous writes (cmd, data, data, data, ...) or ~150 cycles/
-  // ~2.1uS for a random pixel (Set X [cmd+data], Set Y [cmd+data],
-  // Set color [cmd+data]) (times assumes 72MHz clock).
-
-  CLR_CS_CD_SET_RD_WR;  // Saves 18 commands compared to "CLR_CS; CLR_CD; SET_RD; SET_WR;" 
-  ST7783_GPIO2DATA_DATA = (command >> (8 - ST7783_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ST7783_GPIO2DATA_DATA = command << ST7783_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR; SET_CS;"
-}
-
-/*************************************************/
-void st7783WriteData(uint16_t data)
-{
-  CLR_CS_SET_CD_RD_WR;  // Saves 18 commands compared to SET_CD; SET_RD; SET_WR; CLR_CS"
-  ST7783_GPIO2DATA_DATA = (data >> (8 - ST7783_DATA_OFFSET));
-  CLR_WR;
-  SET_WR;
-  ST7783_GPIO2DATA_DATA = data << ST7783_DATA_OFFSET;
-  CLR_WR;
-  SET_WR_CS;            // Saves 7 commands compared to "SET_WR, SET_CS;"
-}
-
-/*************************************************/
-uint16_t st7783ReadData(void)
-{
-  // ToDo: Optimise this method!
-
-  uint16_t high, low;
-  high = low = 0;
-  uint16_t d;
-
-  SET_CD_RD_WR;   // Saves 14 commands compared to "SET_CD; SET_RD; SET_WR"
-  CLR_CS;
-  
-  // set inputs
-  ST7783_GPIO2DATA_SETINPUT;
-  CLR_RD;
-  st7783Delay(100);
-  high = ST7783_GPIO2DATA_DATA;  
-  high >>= ST7783_DATA_OFFSET;
-  high &= 0xFF;
-  SET_RD;
-  
-  CLR_RD;
-  st7783Delay(100);
-  low = ST7783_GPIO2DATA_DATA;
-  low >>= ST7783_DATA_OFFSET;
-  low &=0xFF;
-  SET_RD;
-  
-  SET_CS;
-  ST7783_GPIO2DATA_SETOUTPUT;
-
-  d = high;
-  d <<= 8;
-  d |= low;
-  
-  return d;
-}
-
-/*************************************************/
-uint16_t st7783Read(uint16_t addr)
-{
-  st7783WriteCmd(addr);
-  return st7783ReadData();
-}
-
-/*************************************************/
-void st7783Command(uint16_t command, uint16_t data)
-{
-  st7783WriteCmd(command);
-  st7783WriteData(data);
-}
-
-/*************************************************/
-/* Returns the 4-hexdigit controller code        */
-/*************************************************/
-uint16_t st7783Type(void)
-{
-  st7783WriteCmd(0x0);
-  return st7783ReadData();
-}
-
-/*************************************************/
-void st7783SetCursor(uint16_t x, uint16_t y)
-{
-  uint16_t he, ve, al, ah;
-  
-  switch (lcdOrientation) 
-  {
-  case LCD_ORIENTATION_LANDSCAPE:
-          he = st7783Properties.width-1-y;
-          ve = st7783Properties.height-1-x;
-          al = y;
-          ah = x;
-          break;
-  case LCD_ORIENTATION_PORTRAIT:
-  default:
-          he = st7783Properties.width-1;
-          ve = st7783Properties.height-1;
-          al = x;
-          ah = y;
-          break;
-  }
-  st7783Command(0x0051, he);
-  st7783Command(0x0053, ve);
-  st7783Command(0x0020, al);
-  st7783Command(0x0021, ah);
-}
-
-/*************************************************/
-void st7783InitDisplay(void)
-{
-  // Clear data line
-  GPIO_GPIO2DATA &= ~ST7783_DATA_MASK;
-    
-  SET_RD;
-  SET_WR;
-  SET_CS;
-  SET_CD;
-
-  // Reset display
-  CLR_RESET;
-  st7783Delay(10000);
-  SET_RESET;
-  st7783Delay(500);
-
-  st7783Command(0x00FF, 0x0001);
-  st7783Command(0x00F3, 0x0008);
-  st7783WriteCmd(0x00F3);
-
-  st7783Command(0x0001, 0x0100);     // Driver Output Control Register (R01h)
-  st7783Command(0x0002, 0x0700);     // LCD Driving Waveform Control (R02h)
-  st7783Command(0x0003, 0x1030);     // Entry Mode (R03h)  
-  st7783Command(0x0008, 0x0302);
-  st7783Command(0x0009, 0x0000);
-  st7783Command(0x0010, 0x0000);     // Power Control 1 (R10h)
-  st7783Command(0x0011, 0x0007);     // Power Control 2 (R11h)  
-  st7783Command(0x0012, 0x0000);     // Power Control 3 (R12h)
-  st7783Command(0x0013, 0x0000);     // Power Control 4 (R13h)
-  st7783Delay(1000);  
-  st7783Command(0x0010, 0x14B0);     // Power Control 1 (R10h)  
-  st7783Delay(500);  
-  st7783Command(0x0011, 0x0007);     // Power Control 2 (R11h)  
-  st7783Delay(500);  
-  st7783Command(0x0012, 0x008E);     // Power Control 3 (R12h)
-  st7783Command(0x0013, 0x0C00);     // Power Control 4 (R13h)
-  st7783Command(0x0029, 0x0015);     // NVM read data 2 (R29h)
-  st7783Delay(500);
-  st7783Command(0x0030, 0x0000);     // Gamma Control 1
-  st7783Command(0x0031, 0x0107);     // Gamma Control 2
-  st7783Command(0x0032, 0x0000);     // Gamma Control 3
-  st7783Command(0x0035, 0x0203);     // Gamma Control 6
-  st7783Command(0x0036, 0x0402);     // Gamma Control 7
-  st7783Command(0x0037, 0x0000);     // Gamma Control 8
-  st7783Command(0x0038, 0x0207);     // Gamma Control 9
-  st7783Command(0x0039, 0x0000);     // Gamma Control 10
-  st7783Command(0x003C, 0x0203);     // Gamma Control 13
-  st7783Command(0x003D, 0x0403);     // Gamma Control 14
-  st7783Command(0x0050, 0x0000);     // Window Horizontal RAM Address Start (R50h)
-  st7783Command(0x0051, st7783Properties.width - 1);    // Window Horizontal RAM Address End (R51h)
-  st7783Command(0x0052, 0X0000);     // Window Vertical RAM Address Start (R52h)
-  st7783Command(0x0053, st7783Properties.height - 1);    // Window Vertical RAM Address End (R53h)
-  st7783Command(0x0060, 0xa700);     // Driver Output Control (R60h)
-  st7783Command(0x0061, 0x0001);     // Driver Output Control (R61h)
-  st7783Command(0x0090, 0X0029);     // Panel Interface Control 1 (R90h)
-
-  // Display On
-  st7783Command(0x0007, 0x0133);     // Display Control (R07h)
-  st7783Delay(500);
-  st7783WriteCmd(0x0022);
-}
-
-/*************************************************/
-void st7783Home(void)
-{
-  st7783SetCursor(0, 0);
-  st7783WriteCmd(0x0022);            // Write Data to GRAM (R22h)
-}
-
-/*************************************************/
-void st7783SetWindow(uint16_t x, uint16_t y, uint16_t height, uint16_t width)
-{
-  // Window horizontal RAM address start
-  if (x >= height) st7783Command(0x50, (x - height + 1));
-  else st7783Command(0x50, 0);
-  // Window horizontal GRAM address end
-  st7783Command(0x51, x);
-  // Window vertical GRAM address start
-  if (y >= width) st7783Command(0x52, (y - width + 1));
-  else st7783Command(0x52, 0);
-  // Window vertical GRAM address end
-  st7783Command(0x53, y);
-
-  st7783SetCursor(x, y);
-}
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-/*************************************************/
-void lcdInit(void)
-{
-  // Set control line pins to output
-  gpioSetDir(ST7783_CS_PORT, ST7783_CS_PIN, 1);
-  gpioSetDir(ST7783_CD_PORT, ST7783_CD_PIN, 1);
-  gpioSetDir(ST7783_WR_PORT, ST7783_WR_PIN, 1);
-  gpioSetDir(ST7783_RD_PORT, ST7783_RD_PIN, 1);
-  
-  // Set data port pins to output
-  ST7783_GPIO2DATA_SETOUTPUT;
-
-  // Disable pullups
-  ST7783_DISABLEPULLUPS();
-  
-  // Set backlight pin to output and turn it on
-  gpioSetDir(ST7783_BL_PORT, ST7783_BL_PIN, 1);      // set to output
-  lcdBacklight(TRUE);
-
-  // Set reset pin to output
-  gpioSetDir(ST7783_RES_PORT, ST7783_RES_PIN, 1);    // Set to output
-  gpioSetValue(ST7783_RES_PORT, ST7783_RES_PIN, 0);  // Low to reset
-  systickDelay(50);
-  gpioSetValue(ST7783_RES_PORT, ST7783_RES_PIN, 1);  // High to exit
-
-  // Initialize the display
-  st7783InitDisplay();
-
-  // Set lcd to default orientation
-  lcdSetOrientation(lcdOrientation);
-
-  // Fill black
-  lcdFillRGB(COLOR_BLACK);
-  
-  // Initialise the touch screen (and calibrate if necessary)
-  tsInit();
-}
-
-/*************************************************/
-void lcdBacklight(bool state)
-{
-  // Set the backlight
-  gpioSetValue(ST7783_BL_PORT, ST7783_BL_PIN, state ? 0 : 1);
-}
-
-/*************************************************/
-void lcdTest(void)
-{
-  uint32_t i,j;
-  st7783Home();
-  
-  for(i=0;i<320;i++)
-  {
-    for(j=0;j<240;j++)
-    {
-      if(i>279)st7783WriteData(COLOR_WHITE);
-      else if(i>239)st7783WriteData(COLOR_BLUE);
-      else if(i>199)st7783WriteData(COLOR_GREEN);
-      else if(i>159)st7783WriteData(COLOR_CYAN);
-      else if(i>119)st7783WriteData(COLOR_RED);
-      else if(i>79)st7783WriteData(COLOR_MAGENTA);
-      else if(i>39)st7783WriteData(COLOR_YELLOW);
-      else st7783WriteData(COLOR_BLACK);
-    }
-  }
-}
-
-/*************************************************/
-void lcdFillRGB(uint16_t data)
-{
-  unsigned int i;
-  st7783Home();
-  
-  uint32_t pixels = 320*240;
-  for ( i=0; i < pixels; i++ )
-  {
-    st7783WriteData(data);
-  } 
-}
-
-/*************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-  st7783SetCursor(x, y);
-  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
-  st7783WriteData(color);
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-  uint32_t i = 0;
-  st7783SetCursor(x, y);
-  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
-  do
-  {
-    st7783WriteData(data[i]);
-    i++;
-  } while (i<len);
-}
-
-/*************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  uint16_t x, pixels;
-
-  if (x1 < x0)
-  {
-    // Switch x1 and x0
-    x = x1;
-    x1 = x0;
-    x0 = x;
-  }
-  st7783SetCursor(x0, y);
-  st7783WriteCmd(0x0022);  // Write Data to GRAM (R22h)
-  for (pixels = 0; pixels < x1 - x0 + 1; pixels++)
-  {
-    st7783WriteData(color);
-  }
-}
-
-/*************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-  // Allows for slightly better performance than setting individual pixels
-  lcdOrientation_t orientation = lcdOrientation;
-
-  // Switch orientation
-  lcdSetOrientation(orientation == LCD_ORIENTATION_PORTRAIT ? LCD_ORIENTATION_LANDSCAPE : LCD_ORIENTATION_PORTRAIT);
-
-  // Draw horizontal line like usual
-  lcdDrawHLine(y0, y1, lcdGetHeight() - x, color);
-
-  // Switch orientation back
-  lcdSetOrientation(orientation);
-}
-
-/*************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-  uint16_t preFetch = 0;
-
-  st7783SetCursor(x, y);
-  st7783WriteCmd(0x0022);
-  preFetch = st7783ReadData();
-
-  // Eeek ... why does this need to be done twice for a proper value?!?
-  st7783SetCursor(x, y);
-  st7783WriteCmd(0x0022);
-  return st7783ReadData();
-}
-
-/*************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-  uint16_t entryMode = 0x1030;
-
-  switch (orientation)
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      entryMode = 0x1030;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-      entryMode = 0x1028;
-      break;
-  }
-  st7783WriteCmd(0x0003);
-  st7783WriteData(entryMode);
-  lcdOrientation = orientation;
-  st7783SetCursor(0, 0);
-}
-
-/*************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-  return lcdOrientation;
-}
-
-/*************************************************/
-uint16_t lcdGetWidth(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return st7783Properties.width;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return st7783Properties.height;
-  }
-}
-
-/*************************************************/
-uint16_t lcdGetHeight(void)
-{
-  switch (lcdOrientation) 
-  {
-    case LCD_ORIENTATION_PORTRAIT:
-      return st7783Properties.height;
-      break;
-    case LCD_ORIENTATION_LANDSCAPE:
-    default:
-      return st7783Properties.width;
-  }
-}
-
-/*************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-  // Not implemented in ST7783
-}
-
-/*************************************************/
-uint16_t lcdGetControllerID(void)
-{
-  return st7783Type();
-}
-
-/*************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-    return st7783Properties;
-}
diff --git a/drivers/lcd/tft/hw/st7783.h b/drivers/lcd/tft/hw/st7783.h
deleted file mode 100644 (file)
index af70910..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     ST7783.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __ST7783_H__
-#define __ST7783_H__
-
-#include "projectconfig.h"
-
-#include "drivers/lcd/tft/lcd.h"
-#include "core/gpio/gpio.h"
-
-// Control pins
-#define ST7783_CS_PORT         1     // CS (LCD Pin 7)
-#define ST7783_CS_PIN          8
-#define ST7783_CD_PORT         1     // CS/RS (LCD Pin 8)
-#define ST7783_CD_PIN          9
-#define ST7783_WR_PORT         1     // WR (LCD Pin 9)
-#define ST7783_WR_PIN          10
-#define ST7783_RD_PORT         1     // RD (LCD Pin 10)
-#define ST7783_RD_PIN          11
-
-// These combined pin definitions are for optimisation purposes.
-// If the pin values above are modified the bit equivalents
-// below will also need to be updated
-#define ST7783_CS_CD_PINS        0x300   // 8 + 9
-#define ST7783_RD_WR_PINS        0xC00   // 11 + 10
-#define ST7783_WR_CS_PINS        0x500   // 10 + 8
-#define ST7783_CD_RD_WR_PINS     0xE00   // 9 + 11 + 10
-#define ST7783_CS_CD_RD_WR_PINS  0xF00   // 8 + 9 + 11 + 10
-
-// Backlight and Reset pins
-#define ST7783_RES_PORT        3     // LCD Reset  (LCD Pin 31)
-#define ST7783_RES_PIN         3
-#define ST7783_BL_PORT         2     // Backlight Enable (LCD Pin 16)
-#define ST7783_BL_PIN          9
-
-// Data pins
-// Note: data pins must be consecutive and on the same port
-#define ST7783_DATA_PORT       2     // 8-Pin Data Port
-#define ST7783_DATA_PIN1       1
-#define ST7783_DATA_PIN2       2
-#define ST7783_DATA_PIN3       3
-#define ST7783_DATA_PIN4       4
-#define ST7783_DATA_PIN5       5
-#define ST7783_DATA_PIN6       6
-#define ST7783_DATA_PIN7       7
-#define ST7783_DATA_PIN8       8
-#define ST7783_DATA_MASK       0x000001FE
-#define ST7783_DATA_OFFSET     1     // Offset = PIN1
-
-// Placed here to try to keep all pin specific values in header file
-#define ST7783_DISABLEPULLUPS() do { gpioSetPullup(&IOCON_PIO2_1, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_2, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_3, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_4, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_5, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_6, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_7, gpioPullupMode_Inactive); \
-                                      gpioSetPullup(&IOCON_PIO2_8, gpioPullupMode_Inactive); } while (0)
-
-// These registers allow fast single operation clear+set of bits (see section 8.5.1 of LPC1343 UM)
-#define ST7783_GPIO2DATA_DATA        (*(pREG32 (GPIO_GPIO2_BASE + (ST7783_DATA_MASK << 2))))
-#define ST7783_GPIO1DATA_WR          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_WR_PIN) << 2))))
-#define ST7783_GPIO1DATA_CD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_CD_PIN) << 2))))
-#define ST7783_GPIO1DATA_CS          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_CS_PIN) << 2))))
-#define ST7783_GPIO1DATA_RD          (*(pREG32 (GPIO_GPIO1_BASE + ((1 << ST7783_RD_PIN) << 2))))
-#define ST7783_GPIO3DATA_RES         (*(pREG32 (GPIO_GPIO3_BASE + ((1 << ST7783_RES_PIN) << 2))))
-#define ST7783_GPIO1DATA_CS_CD       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CS_CD_PINS) << 2))))
-#define ST7783_GPIO1DATA_RD_WR       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_RD_WR_PINS) << 2))))
-#define ST7783_GPIO1DATA_WR_CS       (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_WR_CS_PINS) << 2))))
-#define ST7783_GPIO1DATA_CD_RD_WR    (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CD_RD_WR_PINS) << 2))))
-#define ST7783_GPIO1DATA_CS_CD_RD_WR (*(pREG32 (GPIO_GPIO1_BASE + ((ST7783_CS_CD_RD_WR_PINS) << 2))))
-
-// Macros to set data bus direction to input/output
-#define ST7783_GPIO2DATA_SETINPUT  GPIO_GPIO2DIR &= ~ST7783_DATA_MASK
-#define ST7783_GPIO2DATA_SETOUTPUT GPIO_GPIO2DIR |= ST7783_DATA_MASK
-
-// Macros for control line state
-#define CLR_CD          ST7783_GPIO1DATA_CD = (0)
-#define SET_CD          ST7783_GPIO1DATA_CD = (1 << ST7783_CD_PIN)
-#define CLR_CS          ST7783_GPIO1DATA_CS = (0)
-#define SET_CS          ST7783_GPIO1DATA_CS = (1 << ST7783_CS_PIN)
-#define CLR_WR          ST7783_GPIO1DATA_WR = (0)
-#define SET_WR          ST7783_GPIO1DATA_WR = (1 << ST7783_WR_PIN)
-#define CLR_RD          ST7783_GPIO1DATA_RD = (0)
-#define SET_RD          ST7783_GPIO1DATA_RD = (1 << ST7783_RD_PIN)
-#define CLR_RESET       ST7783_GPIO3DATA_RES = (0)
-#define SET_RESET       ST7783_GPIO3DATA_RES = (1 << ST7783_RES_PIN)
-
-// These 'combined' macros are defined to improve code performance by
-// reducing the number of instructions in heavily used functions
-#define CLR_CS_CD           ST7783_GPIO1DATA_CS_CD = (0);
-#define SET_RD_WR           ST7783_GPIO1DATA_RD_WR = (ST7783_RD_WR_PINS);
-#define SET_WR_CS           ST7783_GPIO1DATA_WR_CS = (ST7783_WR_CS_PINS);
-#define SET_CD_RD_WR        ST7783_GPIO1DATA_CD_RD_WR = (ST7783_CD_RD_WR_PINS);
-#define CLR_CS_CD_SET_RD_WR ST7783_GPIO1DATA_CS_CD_RD_WR = (ST7783_RD_WR_PINS);
-#define CLR_CS_SET_CD_RD_WR ST7783_GPIO1DATA_CS_CD_RD_WR = (ST7783_CD_RD_WR_PINS);
-
-#endif
diff --git a/drivers/lcd/tft/hw/template.c b/drivers/lcd/tft/hw/template.c
deleted file mode 100644 (file)
index db6713c..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     
-    @author   
-
-    @section  DESCRIPTION
-    
-    TODO
-          
-    @section  LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "core/systick/systick.h"
-#include "drivers/lcd/tft/touchscreen.h"
-
-// Screen width, height, has touchscreen, support orientation changes, support hw scrolling
-static lcdProperties_t templateProperties = { 240, 320, false, false, false };
-
-/*************************************************/
-/* Private Methods                               */
-/*************************************************/
-
-// Todo: Functions to init the LCD, send commands, etc.
-
-/*************************************************/
-/* Public Methods                                */
-/*************************************************/
-
-// The following functions add need to be written to match the generic 
-// lcd interface defined by lcd.h
-
-/**************************************************************************/
-/*! 
-    @brief  Configures any pins or HW and initialises the LCD controller
-*/
-/**************************************************************************/
-void lcdInit(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Enables or disables the LCD backlight
-*/
-/**************************************************************************/
-void lcdBacklight(bool state)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Renders a simple test pattern on the LCD
-*/
-/**************************************************************************/
-void lcdTest(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Fills the LCD with the specified 16-bit color
-*/
-/**************************************************************************/
-void lcdFillRGB(uint16_t data)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws a single pixel at the specified X/Y location
-*/
-/**************************************************************************/
-void lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Draws an array of consecutive RGB565 pixels (much
-            faster than addressing each pixel individually)
-*/
-/**************************************************************************/
-void lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a horizontal line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Optimised routine to draw a vertical line faster than
-            setting individual pixels
-*/
-/**************************************************************************/
-void lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the 16-bit color of the pixel at the specified location
-*/
-/**************************************************************************/
-uint16_t lcdGetPixel(uint16_t x, uint16_t y)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Sets the LCD orientation to horizontal and vertical
-*/
-/**************************************************************************/
-void lcdSetOrientation(lcdOrientation_t orientation)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the current screen orientation (horizontal or vertical)
-*/
-/**************************************************************************/
-lcdOrientation_t lcdGetOrientation(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the width in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetWidth(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the height in pixels of the LCD screen (varies depending
-            on the current screen orientation)
-*/
-/**************************************************************************/
-uint16_t lcdGetHeight(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Scrolls the contents of the LCD screen vertically the
-            specified number of pixels using a HW optimised routine
-*/
-/**************************************************************************/
-void lcdScroll(int16_t pixels, uint16_t fillColor)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Gets the controller's 16-bit (4 hexdigit) ID
-*/
-/**************************************************************************/
-uint16_t lcdGetControllerID(void)
-{
-}
-
-/**************************************************************************/
-/*! 
-    @brief  Returns the LCDs 'lcdProperties_t' that describes the LCDs
-            generic capabilities and dimensions
-*/
-/**************************************************************************/
-lcdProperties_t lcdGetProperties(void)
-{
-}
diff --git a/drivers/lcd/tft/lcd.h b/drivers/lcd/tft/lcd.h
deleted file mode 100644 (file)
index d415d3e..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     lcd.h
-    @author   K. Townsend (microBuilder.eu)
-    @date     22 March 2010
-    @version  0.10
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __LCD_H__
-#define __LCD_H__
-
-#include "projectconfig.h"
-#include "colors.h"
-
-// Any LCD needs to implement these common methods, which allow the low-level
-// initialisation and pixel-setting details to be abstracted away from the
-// higher level drawing and graphics code.
-
-typedef enum 
-{
-  LCD_ORIENTATION_PORTRAIT = 0,
-  LCD_ORIENTATION_LANDSCAPE = 1
-} lcdOrientation_t;
-
-// This struct is used to indicate the capabilities of different LCDs
-typedef struct
-{
-  uint16_t width;         // LCD width in pixels (default orientation)
-  uint16_t height;        // LCD height in pixels (default orientation)
-  bool     touchscreen;   // Whether the LCD has a touch screen
-  bool     orientation;   // Whether the LCD orientation can be modified
-  bool     hwscrolling;   // Whether the LCD support HW scrolling
-} lcdProperties_t;
-
-extern void     lcdInit(void);
-extern void     lcdTest(void);
-extern uint16_t lcdGetPixel(uint16_t x, uint16_t y);
-extern void     lcdFillRGB(uint16_t data);
-extern void     lcdDrawPixel(uint16_t x, uint16_t y, uint16_t color);
-extern void     lcdDrawPixels(uint16_t x, uint16_t y, uint16_t *data, uint32_t len);
-extern void     lcdDrawHLine(uint16_t x0, uint16_t x1, uint16_t y, uint16_t color);
-extern void     lcdDrawVLine(uint16_t x, uint16_t y0, uint16_t y1, uint16_t color);
-extern void     lcdBacklight(bool state);
-extern void     lcdScroll(int16_t pixels, uint16_t fillColor);
-extern uint16_t lcdGetWidth(void);
-extern uint16_t lcdGetHeight(void);
-extern void     lcdSetOrientation(lcdOrientation_t orientation);
-extern uint16_t lcdGetControllerID(void);
-extern lcdOrientation_t lcdGetOrientation(void);
-extern lcdProperties_t lcdGetProperties(void);
-
-#endif
diff --git a/drivers/lcd/tft/readme.txt b/drivers/lcd/tft/readme.txt
deleted file mode 100644 (file)
index 40caa06..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-TFT LCDs
-========
-
-The top level of this folder contains generic drawing routines for 16-bit TFT
-LCD displays.  The core drawing functions are defined in drawing.c, and the
-specific HW implementation of these routines (setting the individual pixels,
-initialising the display, etc.) takes place in a seperate HW drivers that
-implements the methods defined in lcd.h.  To change the LCD used, you simply
-need to change which HW-specific file is compiled and linked during the build
-process, without having to change anything else in your application code.
-
-For example:
-
-- main.c             - drawing.c          - hw\ili9325.c
-----------------     ----------------     ----------------
-  APPLICATION    --> GENERIC DRAWING  -->   SPECIFIC HW 
-     CODE        -->       CODE       -->      DRIVER
-----------------     ----------------     ----------------
-
-
-drawing.c          Generic drawing routines such as drawing pixels, lines,
-                   rectangles, as well as basic text-rendering.
-
-lcd.h              This file contains the prototypes of HW-specific functions
-                   that must be implemented in the LCD driver, since
-                   drawing.c will redirect all requests to these lower level
-                   functions.
-                   
-touchscreen.c      Contains a very simple example of how to use ADC to read
-                   the current position on a touchscreen.  No signal debouncing
-                   takes places, and this code will need to be improved for us
-                   in a real-world situation.
-
-hw\*               HW-specific drivers based on lcd.h                   
\ No newline at end of file
diff --git a/drivers/lcd/tft/touchscreen.c b/drivers/lcd/tft/touchscreen.c
deleted file mode 100644 (file)
index bb7371a..0000000
+++ /dev/null
@@ -1,633 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     touchscreen.c
-    @author   K. Townsend (microBuilder.eu)
-
-    Parts copyright (c) 2001, Carlos E. Vidales. All rights reserved.
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#include "touchscreen.h"
-
-#include "core/adc/adc.h"
-#include "core/gpio/gpio.h"
-#include "core/systick/systick.h"
-#include "drivers/eeprom/eeprom.h"
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-
-#define TS_LINE1 "Touch the center of"
-#define TS_LINE2 "the red circle using"
-#define TS_LINE3 "a pen or stylus"
-
-static bool _tsInitialised = FALSE;
-static uint8_t _tsThreshhold = CFG_TFTLCD_TS_DEFAULTTHRESHOLD;
-tsPoint_t _tsLCDPoints[3]; 
-tsPoint_t _tsTSPoints[3]; 
-tsMatrix_t _tsMatrix;
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Private Methods ------------------------------ */
-/*                                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Reads the current Z/pressure level using the ADC
-*/
-/**************************************************************************/
-void tsReadZ(uint32_t* z1, uint32_t* z2)
-{
-  if (!_tsInitialised) tsInit();
-
-  // XP = ADC
-  // XM = GPIO Output Low
-  // YP = GPIO Output High
-  // YM = GPIO Input
-
-  TS_XM_FUNC_GPIO;
-  TS_YP_FUNC_GPIO;
-  TS_YM_FUNC_GPIO;
-
-  gpioSetDir (TS_XM_PORT, TS_XM_PIN, 1);
-  gpioSetDir (TS_YP_PORT, TS_YP_PIN, 1);
-  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
-
-  gpioSetValue(TS_XM_PORT, TS_XM_PIN, 0);   // GND
-  gpioSetValue(TS_YP_PORT, TS_YP_PIN, 1);   // 3.3V
-
-  TS_XP_FUNC_ADC;
-  *z1 = adcRead(TS_XP_ADC_CHANNEL);
-
-  // XP = GPIO Input
-  // XM = GPIO Output Low
-  // YP = GPIO Output High
-  // YM = ADC
-
-  TS_XP_FUNC_GPIO;
-  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
-
-  TS_YM_FUNC_ADC;
-  *z2 = adcRead(TS_YM_ADC_CHANNEL);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the current X position using the ADC
-*/
-/**************************************************************************/
-uint32_t tsReadX(void)
-{
-  if (!_tsInitialised) tsInit();
-
-  // XP = GPIO Output High
-  // XM = GPIO Output Low
-  // YP = ADC
-  // YM = GPIO Input
-
-  TS_XP_FUNC_GPIO;
-  TS_XM_FUNC_GPIO;
-  TS_YM_FUNC_GPIO;
-
-  gpioSetDir (TS_XP_PORT, TS_XP_PIN, 1);
-  gpioSetDir (TS_XM_PORT, TS_XM_PIN, 1);
-  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 0);
-
-  gpioSetValue(TS_XP_PORT, TS_XP_PIN, 1);   // 3.3V
-  gpioSetValue(TS_XM_PORT, TS_XM_PIN, 0);   // GND
-
-  TS_YP_FUNC_ADC;  
-
-  // Return the ADC results
-  return adcRead(TS_YP_ADC_CHANNEL);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the current Y position using the ADC
-*/
-/**************************************************************************/
-uint32_t tsReadY(void)
-{
-  if (!_tsInitialised) tsInit();
-
-  // YP = GPIO Output High
-  // YM = GPIO Output Low
-  // XP = GPIO Input
-  // XM = ADC
-
-  TS_YP_FUNC_GPIO;
-  TS_YM_FUNC_GPIO;
-  TS_XP_FUNC_GPIO;
-
-  gpioSetDir (TS_YP_PORT, TS_YP_PIN, 1);
-  gpioSetDir (TS_YM_PORT, TS_YM_PIN, 1);
-  gpioSetDir (TS_XP_PORT, TS_XP_PIN, 0);
-
-  gpioSetValue(TS_YP_PORT, TS_YP_PIN, 1);   // 3.3V
-  gpioSetValue(TS_YM_PORT, TS_YM_PIN, 0);   // GND
-
-  TS_XM_FUNC_ADC;
-
-  // Return the ADC results
-  return adcRead(TS_XM_ADC_CHANNEL);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Centers a line of text horizontally
-*/
-/**************************************************************************/
-void tsCalibCenterText(char* text, uint16_t y, uint16_t color)
-{
-  drawString((lcdGetWidth() - drawGetStringWidth(&dejaVuSans9ptFontInfo, text)) / 2, y, color, &dejaVuSans9ptFontInfo, text);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Renders the calibration screen with an appropriately
-            placed test point and waits for a touch event
-*/
-/**************************************************************************/
-tsTouchData_t tsRenderCalibrationScreen(uint16_t x, uint16_t y, uint16_t radius)
-{
-  drawFill(COLOR_WHITE);
-  tsCalibCenterText(TS_LINE1, 50, COLOR_GRAY_50);
-  tsCalibCenterText(TS_LINE2, 65, COLOR_GRAY_50);
-  tsCalibCenterText(TS_LINE3, 80, COLOR_GRAY_50);
-  drawCircle(x, y, radius, COLOR_RED);
-  drawCircle(x, y, radius + 2, COLOR_GRAY_128);
-
-  // Wait for a valid touch events
-  tsTouchData_t data;
-  tsTouchError_t error;
-  bool valid = false;
-  while (!valid)
-  {    
-    // Set calibration flag for ts read
-    error = tsRead(&data, true);
-    if (!error && data.valid)
-    {
-      valid = true;
-    }
-  }
-
-  return data;
-}
-
-/**************************************************************************/
-/*!
-    @brief Calculates the difference between the touch screen and the
-           actual screen co-ordinates, taking into account misalignment
-           and any physical offset of the touch screen.
-
-    @note  This is based on the public domain touch screen calibration code
-           written by Carlos E. Vidales (copyright (c) 2001).
-
-           For more information, see the following app notes:
-
-           - AN2173 - Touch Screen Control and Calibration
-             Svyatoslav Paliy, Cypress Microsystems
-           - Calibration in touch-screen systems
-             Wendy Fang and Tony Chang,
-             Analog Applications Journal, 3Q 2007 (Texas Instruments)
-*/
-/**************************************************************************/
-int setCalibrationMatrix( tsPoint_t * displayPtr, tsPoint_t * screenPtr, tsMatrix_t * matrixPtr)
-{
-  int  retValue = 0;
-  
-  matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
-                       ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
-  
-  if( matrixPtr->Divider == 0 )
-  {
-    retValue = -1 ;
-  }
-  else
-  {
-    matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) - 
-                    ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
-  
-    matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) - 
-                    ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
-  
-    matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
-                    (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
-                    (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
-  
-    matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) - 
-                    ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
-  
-    matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) - 
-                    ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
-  
-    matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
-                    (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
-                    (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
-
-    // Persist data to EEPROM
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_AN, matrixPtr->An);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_BN, matrixPtr->Bn);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_CN, matrixPtr->Cn);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_DN, matrixPtr->Dn);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_EN, matrixPtr->En);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_FN, matrixPtr->Fn);
-    eepromWriteS32(CFG_EEPROM_TOUCHSCREEN_CAL_DIVIDER, matrixPtr->Divider);
-    eepromWriteU8(CFG_EEPROM_TOUCHSCREEN_CALIBRATED, 1);
-  }
-
-  return( retValue ) ;
-} 
-
-/**************************************************************************/
-/*!
-    @brief  Converts the supplied touch screen location (screenPtr) to
-            a pixel location on the display (displayPtr) using the
-            supplied matrix.  The screen orientation is also taken into
-            account when converting the touch screen co-ordinate to
-            a pixel location on the LCD.
-
-    @note  This is based on the public domain touch screen calibration code
-           written by Carlos E. Vidales (copyright (c) 2001).
-*/
-/**************************************************************************/
-int getDisplayPoint( tsPoint_t * displayPtr, tsPoint_t * screenPtr, tsMatrix_t * matrixPtr )
-{
-  int  retValue = TS_ERROR_NONE ;
-  
-  if( matrixPtr->Divider != 0 )
-  {
-    displayPtr->x = ( (matrixPtr->An * screenPtr->x) + 
-                      (matrixPtr->Bn * screenPtr->y) + 
-                       matrixPtr->Cn 
-                    ) / matrixPtr->Divider ;
-
-    displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) + 
-                      (matrixPtr->En * screenPtr->y) + 
-                       matrixPtr->Fn 
-                    ) / matrixPtr->Divider ;
-  }
-  else
-  {
-    // ToDo: Default values required or you can never read LCD position!
-    // return TS_ERROR_NOTCALIBRATED;
-    return -1;
-  }
-
-  // Adjust value if the screen is in landscape mode
-  lcdOrientation_t orientation;
-  orientation = lcdGetOrientation();
-  if (orientation == LCD_ORIENTATION_LANDSCAPE)
-  {
-      uint32_t oldx, oldy;
-      oldx = displayPtr->x;
-      oldy = displayPtr->y;
-      displayPtr->x = oldy;
-      displayPtr->y = lcdGetHeight() - oldx;
-  }
-  
-  return( retValue ) ;
-}
-
-/**************************************************************************/
-/*                                                                        */
-/* ----------------------- Public Methods ------------------------------- */
-/*                                                                        */
-/**************************************************************************/
-
-/**************************************************************************/
-/*!
-    @brief  Initialises the appropriate GPIO pins and ADC for the
-            touchscreen
-*/
-/**************************************************************************/
-void tsInit(void)
-{
-  // Make sure that ADC is initialised
-  adcInit();
-
-  // Set initialisation flag
-  _tsInitialised = TRUE;
-  _tsThreshhold = tsGetThreshhold();
-
-  // Load values from EEPROM if touch screen has already been calibrated
-  if (eepromReadU8(CFG_EEPROM_TOUCHSCREEN_CALIBRATED) == 1)
-  {
-    // Load calibration data
-    _tsMatrix.An = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_AN);
-    _tsMatrix.Bn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_BN);
-    _tsMatrix.Cn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_CN);
-    _tsMatrix.Dn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_DN);
-    _tsMatrix.En = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_EN);
-    _tsMatrix.Fn = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_FN);
-    _tsMatrix.Divider = eepromReadS32(CFG_EEPROM_TOUCHSCREEN_CAL_DIVIDER);
-  }
-  else
-  {
-    // You may want to run the touch screen calibration sequence
-    // here since the ts has apparently never been calibrated!
-    // tsCalibrate();
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the current X, Y and Z co-ordinates of the touch screen
-
-    @param[in]    calibrating
-                  Set to 1 if the read attempt is for calibration data.
-                  No attempt will be made to correlate the touch screen
-                  and LCD co-ordinates.
-*/
-/**************************************************************************/
-tsTouchError_t tsRead(tsTouchData_t* data, uint8_t calibrating)
-{
-  uint32_t x1, x2, y1, y2, z1, z2;
-
-  // Assign pressure levels regardless of touch state
-  tsReadZ(&z1, &z2);
-  data->z1 = z1;
-  data->z2 = z2;
-  data->xraw = 0;
-  data->yraw = 0;
-  data->xlcd = 0;
-  data->ylcd = 0;
-
-  // Abort if the screen is not being touched (0 levels reported)
-  if (z1 < _tsThreshhold)
-  {
-    data->valid = false;
-    return TS_ERROR_NONE;
-  }
-
-  // Get two X/Y readings and compare results
-  x1 = tsReadX();
-  x2 = tsReadX();
-  y1 = tsReadY();
-  y2 = tsReadY();
-
-  // Throw an error if both readings aren't identical
-  if (x1 != x2 || y1 != y2)
-  {
-    data->valid = false;
-    data->xraw = x1;
-    data->yraw = y1;
-    return TS_ERROR_XYMISMATCH;
-  }
-
-  // X/Y seems to be valid and reading has been confirmed twice
-  data->xraw = x1;
-  data->yraw = y1;
-
-  // Convert x/y values to pixel location with matrix multiply
-  tsPoint_t location, touch;
-  touch.x = x1;
-  touch.y = y1;
-  // Only calculate the relative LCD value if this isn't for calibration
-  if (!calibrating)
-  {
-    getDisplayPoint( &location, &touch, &_tsMatrix) ;
-    data->xlcd = location.x;
-    data->ylcd = location.y;
-  }
-  else
-  {
-    // Assign some false values, but only xraw and yraw are
-    // used for calibration
-    data->xlcd = 0;
-    data->ylcd = 0;
-  }
-  data->valid = true;
-
-  return TS_ERROR_NONE;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Starts the screen calibration process.  Each corner will be
-            tested, meaning that each boundary (top, left, right and 
-            bottom) will be tested twice and the readings averaged.
-*/
-/**************************************************************************/
-void tsCalibrate(void)
-{
-  tsTouchData_t data;
-
-  /* --------------- Welcome Screen --------------- */
-  data = tsRenderCalibrationScreen(lcdGetWidth() / 2, lcdGetHeight() / 2, 5);
-  systickDelay(250);
-
-  /* ----------------- First Dot ------------------ */
-  // 10% over and 10% down
-  data = tsRenderCalibrationScreen(lcdGetWidth() / 10, lcdGetHeight() / 10, 5);
-  _tsLCDPoints[0].x = lcdGetWidth() / 10;
-  _tsLCDPoints[0].y = lcdGetHeight() / 10;
-  _tsTSPoints[0].x = data.xraw;
-  _tsTSPoints[0].y = data.yraw;
-  printf("Point 1 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
-        (int)_tsLCDPoints[0].x, (int)_tsLCDPoints[0].y, (int)_tsTSPoints[0].x, (int)_tsTSPoints[0].y);
-  systickDelay(250);
-
-  /* ---------------- Second Dot ------------------ */
-  // 50% over and 90% down
-  data = tsRenderCalibrationScreen(lcdGetWidth() / 2, lcdGetHeight() - lcdGetHeight() / 10, 5);
-  _tsLCDPoints[1].x = lcdGetWidth() / 2;
-  _tsLCDPoints[1].y = lcdGetHeight() - lcdGetHeight() / 10;
-  _tsTSPoints[1].x = data.xraw;
-  _tsTSPoints[1].y = data.yraw;
-  printf("Point 2 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
-       (int)_tsLCDPoints[1].x, (int)_tsLCDPoints[1].y, (int)_tsTSPoints[1].x, (int)_tsTSPoints[1].y);
-  systickDelay(250);
-
-  /* ---------------- Third Dot ------------------- */
-  // 90% over and 50% down
-  data = tsRenderCalibrationScreen(lcdGetWidth() - lcdGetWidth() / 10, lcdGetHeight() / 2, 5);
-  _tsLCDPoints[2].x = lcdGetWidth() - lcdGetWidth() / 10;
-  _tsLCDPoints[2].y = lcdGetHeight() / 2;
-  _tsTSPoints[2].x = data.xraw;
-  _tsTSPoints[2].y = data.yraw;
-  printf("Point 3 - LCD X:%04d Y:%04d TS X:%04d Y:%04d \r\n", 
-        (int)_tsLCDPoints[2].x, (int)_tsLCDPoints[2].y, (int)_tsTSPoints[2].x, (int)_tsTSPoints[2].y);
-  systickDelay(250);
-
-  // Do matrix calculations for calibration and store to EEPROM
-  setCalibrationMatrix(&_tsLCDPoints[0], &_tsTSPoints[0], &_tsMatrix);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Causes a blocking delay until a valid touch event occurs
-
-    @note   Thanks to 'rossum' and limor for this nifty little tidbit on
-            debouncing the signals via pressure sensitivity (using Z)
-
-    @section Example
-
-    @code 
-    #include "drivers/lcd/tft/touchscreen.h"
-    ...
-    tsTouchData_t data;
-    tsTouchError_t error;
-  
-    while (1)
-    {
-      // Cause a blocking delay until a touch event occurs or 5s passes
-      error = tsWaitForEvent(&data, 5000);
-  
-      if (error)
-      {
-        switch(error)
-        {
-          case TS_ERROR_TIMEOUT:
-            printf("Timeout occurred %s", CFG_PRINTF_NEWLINE);
-            break;
-          default:
-            break;
-        }
-      }
-      else
-      {
-        // A valid touch event occurred ... display data
-        printf("Touch Event: X = %04u, Y = %04u %s", 
-            data.xlcd, 
-            data.ylcd, 
-            CFG_PRINTF_NEWLINE);
-      }
-    }
-
-    @endcode
-*/
-/**************************************************************************/
-tsTouchError_t tsWaitForEvent(tsTouchData_t* data, uint32_t timeoutMS)
-{
-  if (!_tsInitialised) tsInit();
-
-  tsRead(data, false);
-
-  // Return the results right away if reading is valid
-  if (data->valid)
-  {
-    return TS_ERROR_NONE;
-  }
-
-  // Handle timeout if delay > 0 milliseconds
-  if (timeoutMS)
-  {
-    uint32_t startTick = systickGetTicks();
-    // Systick rollover may occur while waiting for timeout
-    if (startTick > 0xFFFFFFFF - timeoutMS)
-    {
-      while (data->valid == false)
-      {
-        // Throw alert if timeout delay has been passed
-        if ((systickGetTicks() < startTick) && (systickGetTicks() >= (timeoutMS - (0xFFFFFFFF - startTick))))
-        {
-          return TS_ERROR_TIMEOUT;
-        }      
-        tsRead(data, false);
-      }
-    }
-    // No systick rollover will occur ... calculate timeout the simple way
-    else
-    {
-      // Wait in infinite loop
-      while (data->valid == false)
-      {
-        // Throw timeout if delay has been passed
-        if ((systickGetTicks() - startTick) > timeoutMS)
-        {
-          return TS_ERROR_TIMEOUT;
-        }
-        tsRead(data, false);
-      }
-    }
-  }
-  // No timeout requested ... wait forever
-  else
-  {
-    while (data->valid == false)
-    {
-      tsRead(data, false);
-    }
-  }
-
-  // Indicate correct reading
-  return TS_ERROR_NONE;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Updates the touch screen threshhold level and saves it
-            to EEPROM
-*/
-/**************************************************************************/
-int tsSetThreshhold(uint8_t value)
-{
-  if ((value < 0) || (value > 254))
-  {
-    return -1;
-  }
-
-  // Update threshhold value
-  _tsThreshhold = value;
-
-  // Persist to EEPROM
-  eepromWriteU8(CFG_EEPROM_TOUCHSCREEN_THRESHHOLD, value);
-
-  return 0;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Gets the current touch screen threshhold level from EEPROM
-            (if present) or returns the default value from projectconfig.h
-*/
-/**************************************************************************/
-uint8_t tsGetThreshhold(void)
-{
-  // Check if custom threshold has been set in eeprom
-  uint8_t thold = eepromReadU8(CFG_EEPROM_TOUCHSCREEN_THRESHHOLD);
-  if (thold != 0xFF)
-  {
-    // Use value from EEPROM
-    _tsThreshhold = thold;
-  }
-  else
-  {
-    // Use the default value from projectconfig.h
-    _tsThreshhold = CFG_TFTLCD_TS_DEFAULTTHRESHOLD;
-  }
-
-  return _tsThreshhold;
-}
diff --git a/drivers/lcd/tft/touchscreen.h b/drivers/lcd/tft/touchscreen.h
deleted file mode 100644 (file)
index 96f7626..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/**************************************************************************/
-/*! 
-    @file     touchscreen.h
-    @author   K. Townsend (microBuilder.eu)
-
-    @section LICENSE
-
-    Software License Agreement (BSD License)
-
-    Copyright (c) 2010, microBuilder SARL
-    All rights reserved.
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions are met:
-    1. Redistributions of source code must retain the above copyright
-    notice, this list of conditions and the following disclaimer.
-    2. Redistributions in binary form must reproduce the above copyright
-    notice, this list of conditions and the following disclaimer in the
-    documentation and/or other materials provided with the distribution.
-    3. Neither the name of the copyright holders nor the
-    names of its contributors may be used to endorse or promote products
-    derived from this software without specific prior written permission.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-/**************************************************************************/
-#ifndef __TOUCHSCREEN_H__
-#define __TOUCHSCREEN_H__
-
-#include "projectconfig.h"
-
-#define TS_XP_PORT        (1)
-#define TS_XP_PIN         (0)
-#define TS_XP_FUNC_GPIO   do {IOCON_JTAG_TMS_PIO1_0 &= ~(IOCON_JTAG_TMS_PIO1_0_FUNC_MASK | IOCON_JTAG_TMS_PIO1_0_ADMODE_MASK); IOCON_JTAG_TMS_PIO1_0 |= IOCON_JTAG_TMS_PIO1_0_FUNC_GPIO;} while (0)
-#define TS_XP_FUNC_ADC    do {IOCON_JTAG_TMS_PIO1_0 &= ~(IOCON_JTAG_TMS_PIO1_0_FUNC_MASK | IOCON_JTAG_TMS_PIO1_0_ADMODE_MASK); IOCON_JTAG_TMS_PIO1_0 |= IOCON_JTAG_TMS_PIO1_0_FUNC_AD1;} while (0)
-  
-#define TS_XM_PORT        (1)
-#define TS_XM_PIN         (1)
-#define TS_XM_FUNC_GPIO   do {IOCON_JTAG_TDO_PIO1_1 &= ~(IOCON_JTAG_TDO_PIO1_1_FUNC_MASK | IOCON_JTAG_TDO_PIO1_1_ADMODE_MASK); IOCON_JTAG_TDO_PIO1_1 |= IOCON_JTAG_TDO_PIO1_1_FUNC_GPIO;} while (0)
-#define TS_XM_FUNC_ADC    do {IOCON_JTAG_TDO_PIO1_1 &= ~(IOCON_JTAG_TDO_PIO1_1_FUNC_MASK | IOCON_JTAG_TDO_PIO1_1_ADMODE_MASK); IOCON_JTAG_TDO_PIO1_1 |= IOCON_JTAG_TDO_PIO1_1_FUNC_AD2;} while (0)
-  
-#define TS_YP_PORT        (0)
-#define TS_YP_PIN         (11)
-#define TS_YP_FUNC_GPIO   do {IOCON_JTAG_TDI_PIO0_11 &= ~(IOCON_JTAG_TDI_PIO0_11_FUNC_MASK | IOCON_JTAG_TDI_PIO0_11_ADMODE_MASK); IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_GPIO;} while (0)
-#define TS_YP_FUNC_ADC    do {IOCON_JTAG_TDI_PIO0_11 &= ~(IOCON_JTAG_TDI_PIO0_11_FUNC_MASK | IOCON_JTAG_TDI_PIO0_11_ADMODE_MASK); IOCON_JTAG_TDI_PIO0_11 |= IOCON_JTAG_TDI_PIO0_11_FUNC_AD0;} while (0)
-  
-#define TS_YM_PORT        (1)
-#define TS_YM_PIN         (2)
-#define TS_YM_FUNC_GPIO   do {IOCON_JTAG_nTRST_PIO1_2 &= ~(IOCON_JTAG_nTRST_PIO1_2_FUNC_MASK | IOCON_JTAG_nTRST_PIO1_2_ADMODE_MASK); IOCON_JTAG_nTRST_PIO1_2 |= IOCON_JTAG_nTRST_PIO1_2_FUNC_GPIO;} while (0)
-#define TS_YM_FUNC_ADC    do {IOCON_JTAG_nTRST_PIO1_2 &= ~(IOCON_JTAG_nTRST_PIO1_2_FUNC_MASK | IOCON_JTAG_nTRST_PIO1_2_ADMODE_MASK); IOCON_JTAG_nTRST_PIO1_2 |= IOCON_JTAG_nTRST_PIO1_2_FUNC_AD3;} while (0)
-  
-#define TS_YP_ADC_CHANNEL   (0)   // ADC0.0
-#define TS_XP_ADC_CHANNEL   (1)   // ADC0.1
-#define TS_XM_ADC_CHANNEL   (2)   // ADC0.2
-#define TS_YM_ADC_CHANNEL   (3)   // ADC0.3
-
-typedef struct Point 
-{
-  int32_t x;
-  int32_t y;
-} tsPoint_t;
-
-typedef struct Matrix 
-{
-  int32_t An,
-          Bn,
-          Cn,
-          Dn,
-          En,
-          Fn,
-          Divider ;
-} tsMatrix_t;
-
-typedef struct
-{
-  uint32_t xraw;  // Touch screen x
-  uint32_t yraw;  // Touch screen Y
-  uint16_t xlcd;  // LCD co-ordinate X
-  uint16_t ylcd;  // LCD co-ordinate Y
-  uint32_t z1;
-  uint32_t z2;
-  bool valid;     // Whether this is a valid reading or not
-} tsTouchData_t;
-
-typedef enum
-{
-  TS_ERROR_NONE          = 0,
-  TS_ERROR_TIMEOUT       = -1,   // Timeout occured before a valid reading
-  TS_ERROR_XYMISMATCH    = -2,   // Unable to get a stable X/Y value
-  TS_ERROR_NOTCALIBRATED = -3    // Can't calculate X/Y until tsCalibrate() is run!
-} tsTouchError_t;
-
-// Method Prototypes
-void           tsInit ( void );
-tsTouchError_t tsRead(tsTouchData_t* data, uint8_t calibrating);
-void           tsCalibrate ( void );
-tsTouchError_t tsWaitForEvent(tsTouchData_t* data, uint32_t timeoutMS);
-int            tsSetThreshhold(uint8_t value);
-uint8_t        tsGetThreshhold(void);
-
-#endif
diff --git a/main.c b/main.c
index 8cff6f6..703bf96 100644 (file)
--- a/main.c
+++ b/main.c
@@ -61,6 +61,8 @@ int main(void)
   uint32_t currentSecond, lastSecond;
   currentSecond = lastSecond = 0;
 
+  lcdTest();
+
   while (1)
   {
     // Toggle LED once per second
index ead3aa8..a742f0e 100644 (file)
@@ -58,7 +58,7 @@
 #endif
 
 #ifdef CFG_TFTLCD
-  #include "drivers/lcd/tft/lcd.h"
+  #include "drivers/displays/tft/lcd.h"
 #endif
 
 #ifdef CFG_SDCARD
index 2c3c359..86d2615 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 4ae5423..4cb88d7 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #if defined CFG_TFTLCD && defined CFG_SDCARD
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 98d376f..a418e14 100644 (file)
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
-  #include "drivers/lcd/tft/touchscreen.h"
-  #include "drivers/lcd/tft/fonts/dejavusans9.h"
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
+  #include "drivers/displays/tft/touchscreen.h"
+  #include "drivers/displays/tft/fonts/dejavusans9.h"
 
 /**************************************************************************/
 /*! 
index 93316b7..fcfd4d2 100644 (file)
@@ -43,7 +43,7 @@
 #include "project/commands.h"       // Generic helper functions
 
 #if defined CFG_TFTLCD
-  #include "drivers/lcd/tft/touchscreen.h"  
+  #include "drivers/displays/tft/touchscreen.h"  
 
 /**************************************************************************/
 /*! 
index 9eb1227..1651029 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 50ef287..6d7bb2e 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 8f41386..3b1843f 100644 (file)
 #include "project/commands.h"       // Generic helper functions
 
 #if defined CFG_TFTLCD
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
-  #include "drivers/lcd/tft/touchscreen.h"  
-  #include "drivers/lcd/tft/dialogues/alphanumeric.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
+  #include "drivers/displays/tft/touchscreen.h"  
+  #include "drivers/displays/tft/dialogues/alphanumeric.h"  
 
 /**************************************************************************/
 /*! 
index 2f9ed53..804f057 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 07ac9b3..0bd82bb 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 45a7432..cdc118f 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 40c1b27..0168e05 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 2750d1d..ff27504 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index fe69969..e98ee1e 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 871d5e0..a662844 100644 (file)
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
-  #include "drivers/lcd/tft/fonts/dejavusans9.h"
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
+  #include "drivers/displays/tft/fonts/dejavusans9.h"
 
   // Only include this w/UART since there isn't enough space otherwise!
   #ifdef CFG_PRINTF_UART
-  #include "drivers/lcd/tft/fonts/dejavusansmono8.h"
-  #include "drivers/lcd/tft/fonts/dejavusansbold9.h"
+  #include "drivers/displays/tft/fonts/dejavusansmono8.h"
+  #include "drivers/displays/tft/fonts/dejavusansbold9.h"
   #endif
 
 /**************************************************************************/
index d116b77..fa57fd9 100644 (file)
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
-  #include "drivers/lcd/tft/fonts/dejavusans9.h"
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
+  #include "drivers/displays/tft/fonts/dejavusans9.h"
 
   // Only include this w/UART since there isn't enough space otherwise!
   #ifdef CFG_PRINTF_UART
-  #include "drivers/lcd/tft/fonts/dejavusansmono8.h"
-  #include "drivers/lcd/tft/fonts/dejavusansbold9.h"
+  #include "drivers/displays/tft/fonts/dejavusansmono8.h"
+  #include "drivers/displays/tft/fonts/dejavusansbold9.h"
   #endif
 
 /**************************************************************************/
index ac82dfb..4d429ee 100644 (file)
@@ -43,8 +43,8 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/lcd.h"    
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"    
+  #include "drivers/displays/tft/drawing.h"  
 
 /**************************************************************************/
 /*! 
index 8dab6f8..9e0144e 100644 (file)
@@ -45,7 +45,7 @@
 
 #ifdef CFG_TFTLCD    
   #include "drivers/eeprom/eeprom.h"
-  #include "drivers/lcd/tft/touchscreen.h"
+  #include "drivers/displays/tft/touchscreen.h"
 
 /**************************************************************************/
 /*! 
index e43e5b4..1c7861f 100644 (file)
@@ -45,7 +45,7 @@
 #include "project/commands.h"       // Generic helper functions
 
 #ifdef CFG_TFTLCD    
-  #include "drivers/lcd/tft/touchscreen.h"
+  #include "drivers/displays/tft/touchscreen.h"
 
 /**************************************************************************/
 /*! 
index 8911fbd..1d69e9c 100644 (file)
         microBuilder.eu USB stick 802.15.4 868/915MHz RF transceiver
 
     -----------------------------------------------------------------------*/
-    #define CFG_BRD_LPC1343_REFDESIGN
+    // #define CFG_BRD_LPC1343_REFDESIGN
     // #define CFG_BRD_LPC1343_REFDESIGN_MINIMAL
-    // #define CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
+    #define CFG_BRD_LPC1343_TFTLCDSTANDALONE_USB
     // #define CFG_BRD_LPC1343_TFTLCDSTANDALONE_UART
     // #define CFG_BRD_LPC1343_802154USBSTICK
     // #define CFG_BRD_LPC1343_OLIMEX_P
     ADC_AVERAGING_ENABLE      To get better results, the ADC code can take
                               a number of samples and return the average
                               value.  This is slower, but can give more
-                              accurate results caused of single-reading
-                              peaks and dips.
-                              To enable average, set ADC_AVERAGING_ENABLE
+                              accurate results compared to single-reading.
+                              
+                              To enable averaging, set ADC_AVERAGING_ENABLE
                               to a non-zero value.
     ADC_AVERAGING_SAMPLES     The number of ADC samples to read and
                               average if ADC averaging is enabled.
                                 a pre-determined LCD screen to be included
                                 during build.  Only one LCD driver can be 
                                 included during the build process (for ex.
-                                'drivers/lcd/hw/ILI9325.c')
+                                'drivers/displays/hw/ILI9325.c')
     CFG_TFTLCD_INCLUDESMALLFONTS If set to 1, smallfont support will be
                                 included for 3x6, 5x8, 7x8 and 8x8 fonts.
                                 This should only be enabled if these small
index d1f440a..9734d23 100644 (file)
--- a/sysinit.c
+++ b/sysinit.c
 #endif
 
 #ifdef CFG_ST7565
-  #include "drivers/lcd/bitmap/st7565/st7565.h"
-  #include "drivers/lcd/smallfonts.h"
+  #include "drivers/displays/bitmap/st7565/st7565.h"
+  #include "drivers/displays/smallfonts.h"
 #endif
 
 #ifdef CFG_SSD1306
-  #include "drivers/lcd/bitmap/ssd1306/ssd1306.h"
-  #include "drivers/lcd/smallfonts.h"
+  #include "drivers/displays/bitmap/ssd1306/ssd1306.h"
+  #include "drivers/displays/smallfonts.h"
 #endif
 
 #ifdef CFG_TFTLCD
-  #include "drivers/lcd/tft/lcd.h"
-  #include "drivers/lcd/tft/touchscreen.h"
-  #include "drivers/lcd/tft/drawing.h"  
+  #include "drivers/displays/tft/lcd.h"
+  #include "drivers/displays/tft/touchscreen.h"
+  #include "drivers/displays/tft/drawing.h"  
 #endif
 
 #ifdef CFG_I2CEEPROM
index 9570765..67fb41d 100644 (file)
 #include "core/adc/adc.h"
 #include "core/systick/systick.h"
 
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/bmp.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/touchscreen.h"
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-#include "drivers/lcd/tft/fonts/dejavusansbold9.h"
-#include "drivers/lcd/tft/fonts/dejavusansmono8.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/bmp.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/touchscreen.h"
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+#include "drivers/displays/tft/fonts/dejavusansbold9.h"
+#include "drivers/displays/tft/fonts/dejavusansmono8.h"
 
-#include "drivers/lcd/icons16.h"
+#include "drivers/displays/icons16.h"
 
 // Color scheme
 #define FONT_REGULAR              &dejaVuSans9ptFontInfo
@@ -94,7 +94,7 @@ void renderMenuItem(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uin
 
 /**************************************************************************/
 /*! 
-    Renders the 16x16 icons found in "/drivers/lcd/icons16.h"
+    Renders the 16x16 icons found in "/drivers/displays/icons16.h"
 */
 /**************************************************************************/
 void renderIcons(void)
index f3468ab..332a5ca 100644 (file)
 #include "core/gpio/gpio.h"
 #include "core/systick/systick.h"
 
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/touchscreen.h"
-#include "drivers/lcd/tft/dialogues/alphanumeric.h"
-
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-#include "drivers/lcd/tft/fonts/dejavusansbold9.h"
-#include "drivers/lcd/tft/fonts/dejavusansmono8.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/touchscreen.h"
+#include "drivers/displays/tft/dialogues/alphanumeric.h"
+
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+#include "drivers/displays/tft/fonts/dejavusansbold9.h"
+#include "drivers/displays/tft/fonts/dejavusansmono8.h"
 
 /**************************************************************************/
 /*! 
index 8c0f37b..188dc1e 100644 (file)
 #include "core/adc/adc.h"
 #include "core/systick/systick.h"
 
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/touchscreen.h"
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-#include "drivers/lcd/tft/fonts/dejavusansbold9.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/touchscreen.h"
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+#include "drivers/displays/tft/fonts/dejavusansbold9.h"
 
 static uint8_t adcBuffer[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
 static uint8_t digBuffer[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
index 2c75e78..aa7ee25 100644 (file)
 #include "core/adc/adc.h"
 #include "core/systick/systick.h"
 
-#include "drivers/lcd/tft/lcd.h"
-#include "drivers/lcd/tft/drawing.h"
-#include "drivers/lcd/tft/touchscreen.h"
-#include "drivers/lcd/tft/fonts/dejavusans9.h"
-#include "drivers/lcd/tft/fonts/dejavusansbold9.h"
+#include "drivers/displays/tft/lcd.h"
+#include "drivers/displays/tft/drawing.h"
+#include "drivers/displays/tft/touchscreen.h"
+#include "drivers/displays/tft/fonts/dejavusans9.h"
+#include "drivers/displays/tft/fonts/dejavusansbold9.h"
 
 /**************************************************************************/
 /*! 
index ee64e80..f06f77e 100644 (file)
@@ -9,7 +9,7 @@ the LPC1343 Reference Board:
   source files.  This application is included here for convenience sake and
   can be used to convert TTF fonts for use with the TFT LCD display with
   minor modifications to the generated source files.  See the existing fonts
-  in 'drivers/lcd/tft/fonts' for an example.
+  in 'drivers/displays/tft/fonts' for an example.
 ===============================================================================
 
 
This page took 0.96998 seconds and 4 git commands to generate.