Library to control a Graphics TFT connected to 4-wire SPI - revised for the Raio RA8875 Display Controller.

Dependents:   FRDM_RA8875_mPaint RA8875_Demo RA8875_KeyPadDemo SignalGenerator ... more

Fork of SPI_TFT by Peter Drescher

See Components - RA8875 Based Display

Enhanced touch-screen support - where it previous supported both the Resistive Touch and Capacitive Touch based on the FT5206 Touch Controller, now it also has support for the GSL1680 Touch Controller.

Offline Help Manual (Windows chm)

/media/uploads/WiredHome/ra8875.zip.bin (download, rename to .zip and unzip)

Files at this revision

API Documentation at this revision

Comitter:
WiredHome
Date:
Sun Jan 19 04:24:16 2014 +0000
Parent:
28:ed102fc442c4
Child:
30:e0f2da88bdf6
Commit message:
Initial support for soft fonts compatible with mikroe font creator.

Changed in this revision

Arial12x12.h Show annotated file Show diff for this revision Revisions of this file
GraphicsDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
GraphicsDisplay.h Show annotated file Show diff for this revision Revisions of this file
RA8875.cpp Show annotated file Show diff for this revision Revisions of this file
RA8875.h Show annotated file Show diff for this revision Revisions of this file
Small_6.h Show annotated file Show diff for this revision Revisions of this file
TextDisplay.cpp Show annotated file Show diff for this revision Revisions of this file
TextDisplay.h Show annotated file Show diff for this revision Revisions of this file
--- a/Arial12x12.h	Fri Jan 17 17:24:05 2014 +0000
+++ b/Arial12x12.h	Sun Jan 19 04:24:16 2014 +0000
@@ -5,105 +5,107 @@
 //GLCD FontSize : 12 x 12
 
 /** Arial Font with 12*12 matrix to use with SPI_TFT lib */
-__align(2)
+//__align(2)
+
 const unsigned char Arial12x12[] = {
-    25,12,12,2,                   // Length,horz,vert,byte/vert
-    0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char
-    0x02, 0x00, 0x00, 0x7F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
-    0x03, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char "
-    0x07, 0x24, 0x00, 0xA4, 0x01, 0x7C, 0x00, 0xA7, 0x01, 0x7C, 0x00, 0x27, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char #
-    0x06, 0x00, 0x00, 0xCE, 0x00, 0x11, 0x01, 0xFF, 0x03, 0x11, 0x01, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char $
-    0x0A, 0x00, 0x00, 0x0E, 0x00, 0x11, 0x00, 0x11, 0x01, 0xCE, 0x00, 0x38, 0x00, 0xE6, 0x00, 0x11, 0x01, 0x10, 0x01, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char %
-    0x08, 0x00, 0x00, 0xE0, 0x00, 0x1E, 0x01, 0x11, 0x01, 0x29, 0x01, 0xC6, 0x00, 0xA0, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char &
-    0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char '
-    0x04, 0x00, 0x00, 0xF8, 0x00, 0x06, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
-    0x03, 0x01, 0x04, 0x06, 0x03, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
-    0x05, 0x02, 0x00, 0x0A, 0x00, 0x07, 0x00, 0x0A, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
-    0x06, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char +
-    0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
-    0x03, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char -
-    0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
-    0x03, 0x80, 0x01, 0x7C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
-    0x06, 0x00, 0x00, 0xFE, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 0
-    0x06, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
-    0x06, 0x00, 0x00, 0x02, 0x01, 0x81, 0x01, 0x41, 0x01, 0x31, 0x01, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 2
-    0x06, 0x00, 0x00, 0x82, 0x00, 0x01, 0x01, 0x11, 0x01, 0x11, 0x01, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 3
-    0x06, 0x00, 0x00, 0x60, 0x00, 0x58, 0x00, 0x46, 0x00, 0xFF, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 4
-    0x06, 0x00, 0x00, 0x9C, 0x00, 0x0B, 0x01, 0x09, 0x01, 0x09, 0x01, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 5
-    0x06, 0x00, 0x00, 0xFE, 0x00, 0x11, 0x01, 0x09, 0x01, 0x09, 0x01, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 6
-    0x06, 0x00, 0x00, 0x01, 0x00, 0xC1, 0x01, 0x39, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 7
-    0x06, 0x00, 0x00, 0xEE, 0x00, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xEE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 8
-    0x06, 0x00, 0x00, 0x9E, 0x00, 0x21, 0x01, 0x21, 0x01, 0x11, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 9
-    0x02, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char :
-    0x02, 0x00, 0x00, 0x40, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
-    0x06, 0x00, 0x00, 0x10, 0x00, 0x28, 0x00, 0x28, 0x00, 0x44, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char <
-    0x06, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char =
-    0x06, 0x00, 0x00, 0x44, 0x00, 0x44, 0x00, 0x28, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char >
-    0x06, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x61, 0x01, 0x11, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ?
-    0x0C, 0x00, 0x00, 0xF0, 0x01, 0x0C, 0x02, 0xE2, 0x04, 0x12, 0x09, 0x09, 0x09, 0x09, 0x09, 0xF1, 0x09, 0x19, 0x09, 0x02, 0x05, 0x86, 0x04, 0x78, 0x02,  // Code for char @
-    0x07, 0x80, 0x01, 0x70, 0x00, 0x2E, 0x00, 0x21, 0x00, 0x2E, 0x00, 0x70, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char A
-    0x07, 0x00, 0x00, 0xFF, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char B
-    0x08, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char C
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char D
-    0x07, 0x00, 0x00, 0xFF, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char E
-    0x06, 0x00, 0x00, 0xFF, 0x01, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char F
-    0x08, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x01, 0x01, 0x01, 0x01, 0x11, 0x01, 0x92, 0x00, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char G
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char H
-    0x02, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char I
-    0x05, 0xC0, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char J
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x20, 0x00, 0x10, 0x00, 0x28, 0x00, 0x44, 0x00, 0x82, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char K
-    0x07, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char L
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x06, 0x00, 0x78, 0x00, 0x80, 0x01, 0x78, 0x00, 0x06, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char M
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x02, 0x00, 0x0C, 0x00, 0x10, 0x00, 0x60, 0x00, 0x80, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char N
-    0x08, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char O
-    0x07, 0x00, 0x00, 0xFF, 0x01, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char P
-    0x08, 0x00, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x01, 0x01, 0x41, 0x01, 0x41, 0x01, 0x82, 0x00, 0x7C, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Q
-    0x08, 0x00, 0x00, 0xFF, 0x01, 0x11, 0x00, 0x11, 0x00, 0x11, 0x00, 0x31, 0x00, 0xD1, 0x00, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char R
-    0x07, 0x00, 0x00, 0xCE, 0x00, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char S
-    0x07, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char T
-    0x08, 0x00, 0x00, 0x7F, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x80, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char U
-    0x07, 0x03, 0x00, 0x1C, 0x00, 0x60, 0x00, 0x80, 0x01, 0x60, 0x00, 0x1C, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char V
-    0x0B, 0x07, 0x00, 0x78, 0x00, 0x80, 0x01, 0x70, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x70, 0x00, 0x80, 0x01, 0x7C, 0x00, 0x03, 0x00, 0x00, 0x00,  // Code for char W
-    0x07, 0x01, 0x01, 0xC6, 0x00, 0x28, 0x00, 0x10, 0x00, 0x28, 0x00, 0xC6, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char X
-    0x07, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0xF0, 0x01, 0x08, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Y
-    0x07, 0x00, 0x01, 0x81, 0x01, 0x61, 0x01, 0x11, 0x01, 0x0D, 0x01, 0x03, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char Z
-    0x03, 0x00, 0x00, 0xFF, 0x07, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char [
-    0x03, 0x03, 0x00, 0x7C, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
-    0x02, 0x01, 0x04, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ]
-    0x05, 0x18, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ^
-    0x07, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char _
-    0x03, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char `
-    0x06, 0x00, 0x00, 0xC8, 0x00, 0x24, 0x01, 0x24, 0x01, 0xA4, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char a
-    0x06, 0x00, 0x00, 0xFF, 0x01, 0x88, 0x00, 0x04, 0x01, 0x04, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char b
-    0x05, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x04, 0x01, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char c
-    0x06, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x04, 0x01, 0x08, 0x01, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char d
-    0x06, 0x00, 0x00, 0xF8, 0x00, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char e
-    0x04, 0x04, 0x00, 0xFE, 0x01, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char f
-    0x06, 0x00, 0x00, 0xF8, 0x04, 0x04, 0x05, 0x04, 0x05, 0x88, 0x04, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char g
-    0x06, 0x00, 0x00, 0xFF, 0x01, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char h
-    0x02, 0x00, 0x00, 0xFD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char i
-    0x02, 0x00, 0x04, 0xFD, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char j
-    0x06, 0x00, 0x00, 0xFF, 0x01, 0x20, 0x00, 0x30, 0x00, 0xC8, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char k
-    0x02, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char l
-    0x0A, 0x00, 0x00, 0xFC, 0x01, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x01, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char m
-    0x06, 0x00, 0x00, 0xFC, 0x01, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0xF8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char n
-    0x06, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char o
-    0x06, 0x00, 0x00, 0xFC, 0x07, 0x88, 0x00, 0x04, 0x01, 0x04, 0x01, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char p
-    0x06, 0x00, 0x00, 0xF8, 0x00, 0x04, 0x01, 0x04, 0x01, 0x88, 0x00, 0xFC, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char q
-    0x04, 0x00, 0x00, 0xFC, 0x01, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
-    0x06, 0x00, 0x00, 0x98, 0x00, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xC8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char s
-    0x03, 0x04, 0x00, 0xFF, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
-    0x06, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char u
-    0x05, 0x0C, 0x00, 0x70, 0x00, 0x80, 0x01, 0x70, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char v
-    0x09, 0x0C, 0x00, 0x70, 0x00, 0x80, 0x01, 0x70, 0x00, 0x0C, 0x00, 0x70, 0x00, 0x80, 0x01, 0x70, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char w
-    0x05, 0x04, 0x01, 0xD8, 0x00, 0x20, 0x00, 0xD8, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char x
-    0x05, 0x0C, 0x00, 0x70, 0x04, 0x80, 0x03, 0x70, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char y
-    0x05, 0x04, 0x01, 0xC4, 0x01, 0x24, 0x01, 0x1C, 0x01, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char z
-    0x03, 0x20, 0x00, 0xDE, 0x03, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char {
-    0x02, 0x00, 0x00, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char |
-    0x04, 0x00, 0x00, 0x01, 0x04, 0xDE, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char }
-    0x07, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ~
-    0x08, 0x00, 0x00, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   // Code for char 
+    25,12,12,2,                   // Bytes/char, horz, vert, byte/vert
+    //width, pixel stream ....
+    0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char
+    0x02, 0X00, 0X00, 0x7F, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char !
+    0x03, 0x07, 0X00, 0X00, 0X00, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char "
+    0x07, 0x24, 0X00, 0xA4, 0x01, 0x7C, 0X00, 0xA7, 0x01, 0x7C, 0X00, 0x27, 0X00, 0x24, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char #
+    0x06, 0X00, 0X00, 0xCE, 0X00, 0x11, 0x01, 0xFF, 0x03, 0x11, 0x01, 0xE2, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char $
+    0x0A, 0X00, 0X00, 0x0E, 0X00, 0x11, 0X00, 0x11, 0x01, 0xCE, 0X00, 0x38, 0X00, 0xE6, 0X00, 0x11, 0x01, 0x10, 0x01, 0xE0, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char %
+    0x08, 0X00, 0X00, 0xE0, 0X00, 0x1E, 0x01, 0x11, 0x01, 0x29, 0x01, 0xC6, 0X00, 0xA0, 0X00, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char &
+    0x02, 0X00, 0X00, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char '
+    0x04, 0X00, 0X00, 0xF8, 0X00, 0x06, 0x03, 0x01, 0x04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char (
+    0x03, 0x01, 0x04, 0x06, 0x03, 0xF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char )
+    0x05, 0x02, 0X00, 0x0A, 0X00, 0x07, 0X00, 0x0A, 0X00, 0x02, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char *
+    0x06, 0X00, 0X00, 0x10, 0X00, 0x10, 0X00, 0x7C, 0X00, 0x10, 0X00, 0x10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char +
+    0x02, 0X00, 0X00, 0X00, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ,
+    0x03, 0x20, 0X00, 0x20, 0X00, 0x20, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char -
+    0x02, 0X00, 0X00, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char .
+    0x03, 0x80, 0x01, 0x7C, 0X00, 0x03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char /
+    0x06, 0X00, 0X00, 0xFE, 0X00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 0
+    0x06, 0X00, 0X00, 0x04, 0X00, 0x02, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 1
+    0x06, 0X00, 0X00, 0x02, 0x01, 0x81, 0x01, 0x41, 0x01, 0x31, 0x01, 0x0E, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 2
+    0x06, 0X00, 0X00, 0x82, 0X00, 0x01, 0x01, 0x11, 0x01, 0x11, 0x01, 0xEE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 3
+    0x06, 0X00, 0X00, 0x60, 0X00, 0x58, 0X00, 0x46, 0X00, 0xFF, 0x01, 0x40, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 4
+    0x06, 0X00, 0X00, 0x9C, 0X00, 0x0B, 0x01, 0x09, 0x01, 0x09, 0x01, 0xF1, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 5
+    0x06, 0X00, 0X00, 0xFE, 0X00, 0x11, 0x01, 0x09, 0x01, 0x09, 0x01, 0xF2, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 6
+    0x06, 0X00, 0X00, 0x01, 0X00, 0xC1, 0x01, 0x39, 0X00, 0x07, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 7
+    0x06, 0X00, 0X00, 0xEE, 0X00, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xEE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 8
+    0x06, 0X00, 0X00, 0x9E, 0X00, 0x21, 0x01, 0x21, 0x01, 0x11, 0x01, 0xFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char 9
+    0x02, 0X00, 0X00, 0x04, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char :
+    0x02, 0X00, 0X00, 0x40, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ;
+    0x06, 0X00, 0X00, 0x10, 0X00, 0x28, 0X00, 0x28, 0X00, 0x44, 0X00, 0x44, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char <
+    0x06, 0x48, 0X00, 0x48, 0X00, 0x48, 0X00, 0x48, 0X00, 0x48, 0X00, 0x48, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char =
+    0x06, 0X00, 0X00, 0x44, 0X00, 0x44, 0X00, 0x28, 0X00, 0x28, 0X00, 0x10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char >
+    0x06, 0X00, 0X00, 0x06, 0X00, 0x01, 0X00, 0x61, 0x01, 0x11, 0X00, 0x0E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ?
+    0x0C, 0X00, 0X00, 0xF0, 0x01, 0x0C, 0x02, 0xE2, 0x04, 0x12, 0x09, 0x09, 0x09, 0x09, 0x09, 0xF1, 0x09, 0x19, 0x09, 0x02, 0x05, 0x86, 0x04, 0x78, 0x02,  // Code for char @
+    0x07, 0x80, 0x01, 0x70, 0X00, 0x2E, 0X00, 0x21, 0X00, 0x2E, 0X00, 0x70, 0X00, 0x80, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char A
+    0x07, 0X00, 0X00, 0xFF, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xFE, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char B
+    0x08, 0X00, 0X00, 0x7C, 0X00, 0x82, 0X00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0X00, 0x44, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char C
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0X00, 0x7C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char D
+    0x07, 0X00, 0X00, 0xFF, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char E
+    0x06, 0X00, 0X00, 0xFF, 0x01, 0x11, 0X00, 0x11, 0X00, 0x11, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char F
+    0x08, 0X00, 0X00, 0x7C, 0X00, 0x82, 0X00, 0x01, 0x01, 0x01, 0x01, 0x11, 0x01, 0x92, 0X00, 0x74, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char G
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x10, 0X00, 0x10, 0X00, 0x10, 0X00, 0x10, 0X00, 0x10, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char H
+    0x03, 0X00, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char I
+    0x05, 0xC0, 0X00, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0xFF, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char J
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x20, 0X00, 0x10, 0X00, 0x28, 0X00, 0x44, 0X00, 0x82, 0X00, 0x01, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char K
+    0x07, 0X00, 0X00, 0xFF, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char L
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x06, 0X00, 0x78, 0X00, 0x80, 0x01, 0x78, 0X00, 0x06, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char M
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x02, 0X00, 0x0C, 0X00, 0x10, 0X00, 0x60, 0X00, 0x80, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char N
+    0x08, 0X00, 0X00, 0x7C, 0X00, 0x82, 0X00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x82, 0X00, 0x7C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char O
+    0x07, 0X00, 0X00, 0xFF, 0x01, 0x11, 0X00, 0x11, 0X00, 0x11, 0X00, 0x11, 0X00, 0x0E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char P
+    0x08, 0X00, 0X00, 0x7C, 0X00, 0x82, 0X00, 0x01, 0x01, 0x41, 0x01, 0x41, 0x01, 0x82, 0X00, 0x7C, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char Q
+    0x08, 0X00, 0X00, 0xFF, 0x01, 0x11, 0X00, 0x11, 0X00, 0x11, 0X00, 0x31, 0X00, 0xD1, 0X00, 0x0E, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char R
+    0x07, 0X00, 0X00, 0xCE, 0X00, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0xE6, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char S
+    0x07, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0xFF, 0x01, 0x01, 0X00, 0x01, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char T
+    0x08, 0X00, 0X00, 0x7F, 0X00, 0x80, 0X00, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0x80, 0X00, 0x7F, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char U
+    0x07, 0x03, 0X00, 0x1C, 0X00, 0x60, 0X00, 0x80, 0x01, 0x60, 0X00, 0x1C, 0X00, 0x03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char V
+    0x0B, 0x07, 0X00, 0x78, 0X00, 0x80, 0x01, 0x70, 0X00, 0x0E, 0X00, 0x01, 0X00, 0x0E, 0X00, 0x70, 0X00, 0x80, 0x01, 0x7C, 0X00, 0x03, 0X00, 0X00, 0X00,  // Code for char W
+    0x07, 0x01, 0x01, 0xC6, 0X00, 0x28, 0X00, 0x10, 0X00, 0x28, 0X00, 0xC6, 0X00, 0x01, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char X
+    0x07, 0x01, 0X00, 0x06, 0X00, 0x08, 0X00, 0xF0, 0x01, 0x08, 0X00, 0x06, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char Y
+    0x07, 0X00, 0x01, 0x81, 0x01, 0x61, 0x01, 0x11, 0x01, 0x0D, 0x01, 0x03, 0x01, 0x01, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char Z
+    0x03, 0X00, 0X00, 0xFF, 0x07, 0x01, 0x04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char [
+    0x03, 0x03, 0X00, 0x7C, 0X00, 0x80, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char BackSlash
+    0x02, 0x01, 0x04, 0xFF, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ]
+    0x05, 0x18, 0X00, 0x06, 0X00, 0x01, 0X00, 0x06, 0X00, 0x18, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ^
+    0x07, 0X00, 0x04, 0X00, 0x04, 0X00, 0x04, 0X00, 0x04, 0X00, 0x04, 0X00, 0x04, 0X00, 0x04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char _
+    0x03, 0X00, 0X00, 0x01, 0X00, 0x02, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char `
+    0x06, 0X00, 0X00, 0xC8, 0X00, 0x24, 0x01, 0x24, 0x01, 0xA4, 0X00, 0xF8, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char a
+    0x06, 0X00, 0X00, 0xFF, 0x01, 0x88, 0X00, 0x04, 0x01, 0x04, 0x01, 0xF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char b
+    0x05, 0X00, 0X00, 0xF8, 0X00, 0x04, 0x01, 0x04, 0x01, 0x88, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char c
+    0x06, 0X00, 0X00, 0xF8, 0X00, 0x04, 0x01, 0x04, 0x01, 0x08, 0x01, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char d
+    0x06, 0X00, 0X00, 0xF8, 0X00, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xB8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char e
+    0x04, 0x04, 0X00, 0xFE, 0x01, 0x05, 0X00, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char f
+    0x06, 0X00, 0X00, 0xF8, 0x04, 0x04, 0x05, 0x04, 0x05, 0x88, 0x04, 0xFC, 0x03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char g
+    0x06, 0X00, 0X00, 0xFF, 0x01, 0x08, 0X00, 0x04, 0X00, 0x04, 0X00, 0xF8, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char h
+    0x02, 0X00, 0X00, 0xFD, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char i
+    0x02, 0X00, 0x04, 0xFD, 0x03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char j
+    0x06, 0X00, 0X00, 0xFF, 0x01, 0x20, 0X00, 0x30, 0X00, 0xC8, 0X00, 0x04, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char k
+    0x02, 0X00, 0X00, 0xFF, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char l
+    0x0A, 0X00, 0X00, 0xFC, 0x01, 0x08, 0X00, 0x04, 0X00, 0x04, 0X00, 0xF8, 0x01, 0x08, 0X00, 0x04, 0X00, 0x04, 0X00, 0xF8, 0x01, 0X00, 0X00, 0X00, 0X00,  // Code for char m
+    0x06, 0X00, 0X00, 0xFC, 0x01, 0x08, 0X00, 0x04, 0X00, 0x04, 0X00, 0xF8, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char n
+    0x06, 0X00, 0X00, 0xF8, 0X00, 0x04, 0x01, 0x04, 0x01, 0x04, 0x01, 0xF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char o
+    0x06, 0X00, 0X00, 0xFC, 0x07, 0x88, 0X00, 0x04, 0x01, 0x04, 0x01, 0xF8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char p
+    0x06, 0X00, 0X00, 0xF8, 0X00, 0x04, 0x01, 0x04, 0x01, 0x88, 0X00, 0xFC, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char q
+    0x04, 0X00, 0X00, 0xFC, 0x01, 0x08, 0X00, 0x04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char r
+    0x06, 0X00, 0X00, 0x98, 0X00, 0x24, 0x01, 0x24, 0x01, 0x24, 0x01, 0xC8, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char s
+    0x03, 0x04, 0X00, 0xFF, 0x01, 0x04, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char t
+    0x06, 0X00, 0X00, 0xFC, 0X00, 0X00, 0x01, 0X00, 0x01, 0X00, 0x01, 0xFC, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char u
+    0x05, 0x0C, 0X00, 0x70, 0X00, 0x80, 0x01, 0x70, 0X00, 0x0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char v
+    0x09, 0x0C, 0X00, 0x70, 0X00, 0x80, 0x01, 0x70, 0X00, 0x0C, 0X00, 0x70, 0X00, 0x80, 0x01, 0x70, 0X00, 0x0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char w
+    0x05, 0x04, 0x01, 0xD8, 0X00, 0x20, 0X00, 0xD8, 0X00, 0x04, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char x
+    0x05, 0x0C, 0X00, 0x70, 0x04, 0x80, 0x03, 0x70, 0X00, 0x0C, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char y
+    0x05, 0x04, 0x01, 0xC4, 0x01, 0x24, 0x01, 0x1C, 0x01, 0x04, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char z
+    0x03, 0x20, 0X00, 0xDE, 0x03, 0x01, 0x04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char {
+    0x02, 0X00, 0X00, 0xFF, 0x07, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char |
+    0x04, 0X00, 0X00, 0x01, 0x04, 0xDE, 0x03, 0x20, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char }
+    0x07, 0X00, 0X00, 0x20, 0X00, 0x10, 0X00, 0x10, 0X00, 0x20, 0X00, 0x20, 0X00, 0x10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00,  // Code for char ~
+    0x08, 0X00, 0X00, 0xFE, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0xFE, 0x01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00   // Code for char <del>
 };
 
 #endif // ARIAL12X12_H
--- a/GraphicsDisplay.cpp	Fri Jan 17 17:24:05 2014 +0000
+++ b/GraphicsDisplay.cpp	Sun Jan 19 04:24:16 2014 +0000
@@ -5,121 +5,164 @@
 
 #include "GraphicsDisplay.h"
 
+#define DEBUG "GD"
+// ...
+// INFO("Stuff to show %d", var); // new-line is automatically appended
+//
+#if (defined(DEBUG) && !defined(TARGET_LPC11U24))
+#define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#define ERR(x, ...)  std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#else
+#define INFO(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+#endif
+
+// #define LOCALFONT
+
+#ifdef LOCALFONT
 const unsigned char FONT8x8[97][8] = {
-    0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00, // columns, rows, num_bytes_per_char
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
-    0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
-    0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
-    0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
-    0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
-    0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
-    0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
-    0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
-    0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
-    0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
-    0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
-    0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
-    0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
-    0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
-    0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
-    0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // / (forward slash)
-    0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
-    0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
-    0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
-    0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
-    0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
-    0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
-    0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
-    0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
-    0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
-    0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
-    0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
-    0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
-    0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
-    0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
-    0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
-    0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
-    0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
-    0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
-    0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
-    0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
-    0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
-    0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
-    0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
-    0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
-    0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
-    0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
-    0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
-    0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
-    0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
-    0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
-    0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
-    0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
-    0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
-    0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
-    0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
-    0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
-    0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
-    0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
-    0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
-    0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
-    0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
-    0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
-    0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
-    0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
-    0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
-    0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
-    0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
-    0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
-    0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
-    0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
-    0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
-    0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
-    0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
-    0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
-    0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
-    0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
-    0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
-    0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
-    0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
-    0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
-    0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
-    0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
-    0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
-    0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p
-    0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
-    0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
-    0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
-    0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
-    0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
-    0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
-    0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
-    0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
-    0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
-    0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
-    0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
-    0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
-    0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
-    0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
-    0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00  // DEL
+    0x08, 0x08, 0x08, 0X00, 0X00, 0X00, 0X00, 0X00, // columns, rows, num_bytes_per_char
+    0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // space 0x20
+    0x30, 0x78, 0x78, 0x30, 0x30, 0X00, 0x30, 0X00, // !
+    0x6C, 0x6C, 0x6C, 0X00, 0X00, 0X00, 0X00, 0X00, // "
+    0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0X00, // #
+    0x18, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0x18, 0X00, // $
+    0X00, 0x63, 0x66, 0x0C, 0x18, 0x33, 0x63, 0X00, // %
+    0x1C, 0x36, 0x1C, 0x3B, 0x6E, 0x66, 0x3B, 0X00, // &
+    0x30, 0x30, 0x60, 0X00, 0X00, 0X00, 0X00, 0X00, // '
+    0x0C, 0x18, 0x30, 0x30, 0x30, 0x18, 0x0C, 0X00, // (
+    0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0X00, // )
+    0X00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0X00, 0X00, // *
+    0X00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0X00, 0X00, // +
+    0X00, 0X00, 0X00, 0X00, 0X00, 0x18, 0x18, 0x30, // ,
+    0X00, 0X00, 0X00, 0x7E, 0X00, 0X00, 0X00, 0X00, // -
+    0X00, 0X00, 0X00, 0X00, 0X00, 0x18, 0x18, 0X00, // .
+    0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0X00, // / (forward slash)
+    0x3E, 0x63, 0x63, 0x6B, 0x63, 0x63, 0x3E, 0X00, // 0 0x30
+    0x18, 0x38, 0x58, 0x18, 0x18, 0x18, 0x7E, 0X00, // 1
+    0x3C, 0x66, 0x06, 0x1C, 0x30, 0x66, 0x7E, 0X00, // 2
+    0x3C, 0x66, 0x06, 0x1C, 0x06, 0x66, 0x3C, 0X00, // 3
+    0x0E, 0x1E, 0x36, 0x66, 0x7F, 0x06, 0x0F, 0X00, // 4
+    0x7E, 0x60, 0x7C, 0x06, 0x06, 0x66, 0x3C, 0X00, // 5
+    0x1C, 0x30, 0x60, 0x7C, 0x66, 0x66, 0x3C, 0X00, // 6
+    0x7E, 0x66, 0x06, 0x0C, 0x18, 0x18, 0x18, 0X00, // 7
+    0x3C, 0x66, 0x66, 0x3C, 0x66, 0x66, 0x3C, 0X00, // 8
+    0x3C, 0x66, 0x66, 0x3E, 0x06, 0x0C, 0x38, 0X00, // 9
+    0X00, 0x18, 0x18, 0X00, 0X00, 0x18, 0x18, 0X00, // :
+    0X00, 0x18, 0x18, 0X00, 0X00, 0x18, 0x18, 0x30, // ;
+    0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0X00, // <
+    0X00, 0X00, 0x7E, 0X00, 0X00, 0x7E, 0X00, 0X00, // =
+    0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0X00, // >
+    0x3C, 0x66, 0x06, 0x0C, 0x18, 0X00, 0x18, 0X00, // ?
+    0x3E, 0x63, 0x6F, 0x69, 0x6F, 0x60, 0x3E, 0X00, // @ 0x40
+    0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0X00, // A
+    0x7E, 0x33, 0x33, 0x3E, 0x33, 0x33, 0x7E, 0X00, // B
+    0x1E, 0x33, 0x60, 0x60, 0x60, 0x33, 0x1E, 0X00, // C
+    0x7C, 0x36, 0x33, 0x33, 0x33, 0x36, 0x7C, 0X00, // D
+    0x7F, 0x31, 0x34, 0x3C, 0x34, 0x31, 0x7F, 0X00, // E
+    0x7F, 0x31, 0x34, 0x3C, 0x34, 0x30, 0x78, 0X00, // F
+    0x1E, 0x33, 0x60, 0x60, 0x67, 0x33, 0x1F, 0X00, // G
+    0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0X00, // H
+    0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0X00, // I
+    0x0F, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0X00, // J
+    0x73, 0x33, 0x36, 0x3C, 0x36, 0x33, 0x73, 0X00, // K
+    0x78, 0x30, 0x30, 0x30, 0x31, 0x33, 0x7F, 0X00, // L
+    0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0X00, // M
+    0x63, 0x73, 0x7B, 0x6F, 0x67, 0x63, 0x63, 0X00, // N
+    0x3E, 0x63, 0x63, 0x63, 0x63, 0x63, 0x3E, 0X00, // O
+    0x7E, 0x33, 0x33, 0x3E, 0x30, 0x30, 0x78, 0X00, // P 0x50
+    0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x0E, 0X00, // Q
+    0x7E, 0x33, 0x33, 0x3E, 0x36, 0x33, 0x73, 0X00, // R
+    0x3C, 0x66, 0x30, 0x18, 0x0C, 0x66, 0x3C, 0X00, // S
+    0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x3C, 0X00, // T
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7E, 0X00, // U
+    0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0X00, // V
+    0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0X00, // W
+    0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0X00, // X
+    0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x3C, 0X00, // Y
+    0x7F, 0x63, 0x46, 0x0C, 0x19, 0x33, 0x7F, 0X00, // Z
+    0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0X00, // [
+    0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0X00, // \ (back slash)
+    0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0X00, // ]
+    0x08, 0x1C, 0x36, 0x63, 0X00, 0X00, 0X00, 0X00, // ^
+    0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0xFF, // _
+    0x18, 0x18, 0x0C, 0X00, 0X00, 0X00, 0X00, 0X00, // ` 0x60
+    0X00, 0X00, 0x3C, 0x06, 0x3E, 0x66, 0x3B, 0X00, // a
+    0x70, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x6E, 0X00, // b
+    0X00, 0X00, 0x3C, 0x66, 0x60, 0x66, 0x3C, 0X00, // c
+    0x0E, 0x06, 0x3E, 0x66, 0x66, 0x66, 0x3B, 0X00, // d
+    0X00, 0X00, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0X00, // e
+    0x1C, 0x36, 0x30, 0x78, 0x30, 0x30, 0x78, 0X00, // f
+    0X00, 0X00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x7C, // g
+    0x70, 0x30, 0x36, 0x3B, 0x33, 0x33, 0x73, 0X00, // h
+    0x18, 0X00, 0x38, 0x18, 0x18, 0x18, 0x3C, 0X00, // i
+    0x06, 0X00, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, // j
+    0x70, 0x30, 0x33, 0x36, 0x3C, 0x36, 0x73, 0X00, // k
+    0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0X00, // l
+    0X00, 0X00, 0x66, 0x7F, 0x7F, 0x6B, 0x63, 0X00, // m
+    0X00, 0X00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0X00, // n
+    0X00, 0X00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0X00, // o
+    0X00, 0X00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78, // p
+    0X00, 0X00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F, // q
+    0X00, 0X00, 0x6E, 0x3B, 0x33, 0x30, 0x78, 0X00, // r
+    0X00, 0X00, 0x3E, 0x60, 0x3C, 0x06, 0x7C, 0X00, // s
+    0x08, 0x18, 0x3E, 0x18, 0x18, 0x1A, 0x0C, 0X00, // t
+    0X00, 0X00, 0x66, 0x66, 0x66, 0x66, 0x3B, 0X00, // u
+    0X00, 0X00, 0x66, 0x66, 0x66, 0x3C, 0x18, 0X00, // v
+    0X00, 0X00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0X00, // w
+    0X00, 0X00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0X00, // x
+    0X00, 0X00, 0x66, 0x66, 0x66, 0x3E, 0x06, 0x7C, // y
+    0X00, 0X00, 0x7E, 0x4C, 0x18, 0x32, 0x7E, 0X00, // z
+    0x0E, 0x18, 0x18, 0x70, 0x18, 0x18, 0x0E, 0X00, // {
+    0x0C, 0x0C, 0x0C, 0X00, 0x0C, 0x0C, 0x0C, 0X00, // |
+    0x70, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x70, 0X00, // }
+    0x3B, 0x6E, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // ~
+    0x1C, 0x36, 0x36, 0x1C, 0X00, 0X00, 0X00, 0X00  // DEL
 }; 
-
+#endif // LOCALFONT
 
-GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name)
+GraphicsDisplay::GraphicsDisplay(const char *name) 
+    : TextDisplay(name)
 {
+    font = NULL;
     //foreground(0xFFFF);
     //background(0x0000);
 }
 
-
-void GraphicsDisplay::character(int column, int row, int value)
+RetCode_t GraphicsDisplay::set_font(const unsigned char * _font)
 {
-    blitbit(column * 8, row * 8, 8, 8, (char*)&(FONT8x8[value - 0x1F][0]));
+    font = _font;
+    INFO("set_font(%lu) %lu", _font, font);
+    return noerror;     // trusting them, but it might be good to put some checks in here...
 }
 
+#ifdef LOCALFONT
+int GraphicsDisplay::character(int x, int y, int value)
+{
+    INFO("character(%d,%d,%c)", x, t, value);
+    if (value <= 0x1F && value >= 7F)
+        return 0;
+    
+    return blitbit(x, y, FONT8X8[0][0], FONT8X8[0][1], 
+        (char *)&(FONT8x8[value - 0x1F][0]));
+}
+#else
+int GraphicsDisplay::character(int x, int y, int c)
+{
+    unsigned int offset;
+    const unsigned char * charRecord;
+ 
+    if (c <= 0x1F || c >= 0x7F)
+        return 0;
+    offset = font[0];                    // bytes / char
+    charRecord = &font[((c - ' ') * offset) + 4];      // start of char bitmap
+    return fontblit(x, y, font, charRecord);
+}
+#endif
 
-void GraphicsDisplay::window(unsigned int x,unsigned  int y,unsigned  int w,unsigned  int h)
+void GraphicsDisplay::window(unsigned int x, unsigned int y, unsigned int w, unsigned int h)
 {
     // current pixel location
     _x = x;
@@ -160,7 +203,7 @@
     return noerror;
 }
 
-void GraphicsDisplay::blit(int x, int y, int w, int h, const int *colour)
+void GraphicsDisplay::blit(int x, int y, int w, int h, const int * colour)
 {
     window(x, y, w, h);
     for(int i=0; i<w*h; i++) {
@@ -168,19 +211,53 @@
     }
 }
 
-void GraphicsDisplay::blitbit(int x, int y, int w, int h, const char* colour)
+int GraphicsDisplay::blitbit(int x, int y, int w, int h, const char * colour)
 {
+    _foreground = 0xFFFF;
+    INFO("blitbit(%d,%d, %d,%d, %02X) [%04X,%04X]", x,y, w,h, *colour, _foreground, _background);
+    INFO("%lu  %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X",
+        colour,
+        colour[0], colour[1], colour[2], colour[3], colour[4], colour[5], colour[6], colour[7], 
+        colour[8], colour[9], colour[10], colour[11], colour[12], colour[13], colour[14], colour[15]);
     window(x, y, w, h);
-    for(int i = 0; i < w*h; i++) {
+    for (int i = 0; i < w*h; i++) {
         char byte = colour[i >> 3];
         int offset = i & 0x7;
+        if (offset == 0)
+            INFO(" %2d = %02X", i>>3, byte);
         int c = ((byte << offset) & 0x80) ? _foreground : _background;
         putp(c);
+        //wait_ms(100);
     }
+    return w;
+}
+
+
+int GraphicsDisplay::fontblit(int x, int y, const unsigned char * fontTable, const unsigned char * fontChar)
+{
     _foreground = 0xFFFF;
-    printf("blitbit colors %d,%d\r\n", _foreground, _background);
+    //int fontWidth = font[1];                       // get hor size of font
+    int fontHeight = font[2];                      // get vert size of font
+    int bytesPerLine = font[3];                       // bytes per line
+    int charWidth = fontChar[0];        // width of this character
+    int px, py;
+    window(x, y, charWidth, fontHeight);
+    
+    for (py = 0; py < fontHeight; py++) {
+        int bitmask = 1 << (py & 7);
+        
+        for (px = 0; px < charWidth; px++) {
+            int offset = (py / 8) + px * bytesPerLine;
+            unsigned char byte = fontChar[offset + 1];  // skip the char's # bits wide value
+            int c = (byte & bitmask) ? _foreground : _background;
+            putp(c);
+        }
+    }
+    return charWidth;
 }
 
+
+
 int GraphicsDisplay::columns()
 {
     return width() / 8;
--- a/GraphicsDisplay.h	Fri Jan 17 17:24:05 2014 +0000
+++ b/GraphicsDisplay.h	Sun Jan 19 04:24:16 2014 +0000
@@ -31,15 +31,43 @@
     
     virtual RetCode_t cls();
     virtual void fill(int x, int y, int w, int h, int colour);
-    virtual void blit(int x, int y, int w, int h, const int *colour);    
-    virtual void blitbit(int x, int y, int w, int h, const char* colour);
+    virtual void blit(int x, int y, int w, int h, const int * colour);    
+    
+    virtual int blitbit(int x, int y, int w, int h, const char * colour);
     
-    virtual void character(int column, int row, int value);
+    /// This method transfers one character from the external font data
+    /// to the screen.
+    ///
+    /// @note the font data is in a special format as generate by
+    ///         the mikroe font creator. \\
+    ///         See http://www.mikroe.com/glcd-font-creator/
+    ///
+    /// @param x is the horizontal pixel coordinate
+    /// @param y is the vertical pixel coordinate
+    /// @param fontTable is the base of the table which has the metrics
+    /// @param fontChar is the start of that record in the table for the char (e.g. 'A' - 'Z')
+    /// @returns how far the cursor should advance to the right in pixels
+    ///
+    virtual int fontblit(int x, int y, const unsigned char * fontTable, const unsigned char * fontChar);
+    
+    /// prints one character at the specified coordinates.
+    ///
+    /// This will print the character at the specified pixel coordinates.
+    ///
+    /// @param x is the horizontal offset in pixels.
+    /// @param y is the vertical offset in pixels.
+    /// @param value is the character to print.
+    /// @returns number of pixels to index to the right if a character was printed, 0 otherwise.
+    ///
+    virtual int character(int x, int y, int value);
+    
     virtual int columns();
     virtual int rows();
+    virtual RetCode_t set_font(const unsigned char * font = NULL);
     
 protected:
-
+    const unsigned char * font;     ///< reference to an external font somewhere in memory
+    
     // pixel location
     short _x;
     short _y;
@@ -49,7 +77,6 @@
     short _x2;
     short _y1;
     short _y2;
-
 };
 
 #endif
--- a/RA8875.cpp	Fri Jan 17 17:24:05 2014 +0000
+++ b/RA8875.cpp	Sun Jan 19 04:24:16 2014 +0000
@@ -12,7 +12,7 @@
 DigitalOut zz3(LED3);
 DigitalOut zz4(LED4);
 
-//#define DEBUG "RAIO"
+#define DEBUG "RAIO"
 // ...
 // INFO("Stuff to show %d", var); // new-line is automatically appended
 //
@@ -148,7 +148,7 @@
     if (font == NULL)
         return (((ReadCommand(0x22) >> 2) & 0x3) + 1) * 16;
     else
-        return width() / font[1];
+        return font[1];
 }
 
 unsigned int RA8875::fontheight(void)
@@ -156,7 +156,7 @@
     if (font == NULL)
         return (((ReadCommand(0x22) >> 0) & 0x3) + 1) * 16;
     else
-        return height() / font[2];
+        return font[2];
 }
 
 RetCode_t RA8875::locate(unsigned int x, unsigned int y)
@@ -176,24 +176,42 @@
 
 int RA8875::width(void)
 {
-    return RA8875_DISPLAY_WIDTH;
+    //return RA8875_DISPLAY_WIDTH;
+    return (ReadCommand(0x14) + 1) * 8;
 }
 
 int RA8875::height(void)
 {
-    return RA8875_DISPLAY_HEIGHT;
+    //return RA8875_DISPLAY_HEIGHT;
+    return (ReadCommand(0x19) | (ReadCommand(0x1A) << 8)) + 1;
 }
 
 RetCode_t RA8875::SetTextCursor(unsigned int x, unsigned int y)
 {
+    cursor_x = x; cursor_y = y;     // for non-internal fonts
     WriteCommand(0x2A, x & 0xFF);
     WriteCommand(0x2B, x >> 8);
     WriteCommand(0x2C, y & 0xFF);
     WriteCommand(0x2D, y >> 8);
-    INFO("SetTextCursor(%d,%d)", x,y);
     return noerror;
 }
 
+unsigned int RA8875::GetTextCursor_Y(void)
+{
+    if (font == NULL)
+        return ReadCommand(0x2C) | (ReadCommand(0x2D) << 8);
+    else
+        return cursor_y;
+}
+
+unsigned int RA8875::GetTextCursor_X(void)
+{
+    if (font == NULL)
+        return ReadCommand(0x2A) | (ReadCommand(0x2B) << 8);
+    else
+        return cursor_x;
+}
+
 RetCode_t RA8875::SetTextCursorControl(cursor_t cursor, bool blink)
 {
     unsigned char mwcr0 = ReadCommand(0x40) & 0x0F; // retain direction, auto-increase
@@ -282,8 +300,47 @@
 
 int RA8875::_putc(int c)
 {
+    if (font == NULL) {
+        return _internal_putc(c);
+    } else {
+        return _external_putc(c);
+    }
+}
+
+int RA8875::_external_putc(int c)
+{
     if (c) {
         if (c == '\r') {
+            cursor_x = 0;
+        } else if (c == '\n') {
+            cursor_y += font[2];
+        } else {
+            int advance = character(cursor_x, cursor_y, c);     // advance tells us how many pixels we advanced
+            if (advance) {
+                cursor_x += advance;
+                if (cursor_x >= width()) {
+                    cursor_x = 0;
+                    cursor_y += font[2];
+                    if (cursor_y >= height()) {
+                        cursor_y = 0;               // @todo Should it scroll?
+                    }
+                }
+            }
+        }
+    }
+    return c;
+}
+
+int RA8875::_internal_putc(int c)
+{
+    if (c) {
+        unsigned char mwcr0;
+        
+        mwcr0 = ReadCommand(0x40);
+        if ((mwcr0 & 0x80) == 0x00) {
+            WriteCommand(0x40, 0x80 | mwcr0);    // Put in Text mode if not already
+        }
+        if (c == '\r') {
             unsigned int x;
             x = ReadCommand(0x30) | (ReadCommand(0x31) << 8);   // Left edge of active window
             WriteCommand(0x2A, x & 0xFF);
@@ -292,33 +349,23 @@
             unsigned int y;
             y = ReadCommand(0x2C) | (ReadCommand(0x2D) << 8);   // current y location
             y += fontheight();
-            if (y > height())               // @TODO > active window, then scroll?
+            if (y > height())               // @TODO after bottom of active window, then scroll window?
                 y = 0;
             WriteCommand(0x2C, y & 0xFF);
             WriteCommand(0x2D, y >> 8);
         } else {
-            if (font == NULL) {
-                unsigned char mwcr0 = ReadCommand(0x40);
-                
-                if (mwcr0 & 0x80 == 0x00)
-                    WriteCommand(0x40,0x80);
-                WriteCommand(0x02);
-                select(true);
-                WriteData(c);
-                while (ReadStatus() & 0x80)
-                    wait_us(POLLWAITuSec);            // Chk_Busy();
-                select(false);
-            } else {
-                unsigned int x = (ReadCommand(0x2A) | (ReadCommand(0x2B) << 8)) / fontwidth();
-                unsigned int y = (ReadCommand(0x2C) | (ReadCommand(0x2D) << 8)) / fontheight();
-                character(x,y,c);
-            }
-            // @TODO right of active window, then wrap?
+            WriteCommand(0x02);                 // RA8875 Internal Fonts
+            select(true);
+            WriteData(c);
+            while (ReadStatus() & 0x80)
+                wait_us(POLLWAITuSec);          // Chk_Busy();
+            select(false);
         }
     }
     return c;
 }
 
+
 void RA8875::puts(unsigned int x, unsigned int y, const char * string)
 {
     SetTextCursor(x,y);
@@ -327,14 +374,17 @@
 
 void RA8875::puts(const char * string)
 {
+    unsigned char mwcr0 = ReadCommand(0x40);
+                
+    if ((mwcr0 & 0x80) == 0x00)
+        WriteCommand(0x40,0x80);    // Put in Text mode if not already
+
     if (*string != '\0') {
-        INFO("puts(%s)", string);
         #if 1
-        while (*string) {           // @TODO calling individual _putc is slower... anything to do?
+        while (*string) {           // @TODO calling individual _putc is slower... optimizations?
             _putc(*string++);
         }
         #else
-        WriteCommand(0x40,0x80);    // Put display into text mode
         WriteCommand(0x02);
         select(true);
         while (*string != '\0') {
@@ -349,7 +399,6 @@
 }
 
 RetCode_t RA8875::SetMemoryCursor(unsigned int x, unsigned int y)
-
 {
     WriteCommand(0x46, x & 0xFF);
     WriteCommand(0x47, x >> 8);
@@ -375,6 +424,7 @@
 {
     PERFORMANCE_RESET;
     clsw(FULLWINDOW);
+    cursor_x = cursor_y = 0;
     REGISTERPERFORMANCE(PRF_CLS);
     return noerror;
 }
@@ -400,7 +450,6 @@
     RetCode_t ret;
     
     PERFORMANCE_RESET;
-    #if 1
     color_t color = GetForeColor();
     WriteCommand(0x40,0x00);    // Graphics write mode
     SetMemoryCursor(x, y);
@@ -408,11 +457,6 @@
     WriteData(color & 0xFF);
     WriteData(color >> 8);
     ret = noerror;
-    #else
-    // There isn't actually a set pixel function that I found
-    // so we'll emulate it as we can.
-    ret = line(x,y, x,y);
-    #endif
     REGISTERPERFORMANCE(PRF_DRAWPOINT);
     return ret;
 }
@@ -744,9 +788,9 @@
 {
     unsigned char b;
     
-    if (brightness > 1.0)
+    if (brightness >= 1.0)
         b = 255;
-    else if (brightness < 0)
+    else if (brightness <= 0.0)
         b = 0;
     else
         b = (unsigned char)(brightness * 255);
@@ -757,7 +801,8 @@
 RetCode_t RA8875::set_font(const unsigned char * _font)
 {
     font = _font;
-    return noerror;     // trusting them, but we could put some checks in here...
+    GraphicsDisplay::set_font(_font);
+    return noerror;     // trusting them, but it might be good to put some checks in here...
 }
 
 RetCode_t RA8875::background(color_t color)
@@ -961,15 +1006,21 @@
 
 void BacklightTest(RA8875 & display, Serial & pc, float ramptime)
 {
+    char buf[60];
+    
     pc.printf("Backlight Test - ramp over %f sec.\r\n", ramptime);
     display.Backlight_u8(0);
-    display.background(Black);
+    display.background(White);
     display.foreground(Blue);
     display.cls();
+    wait_ms(200);
     display.puts(0,0, "RA8875 Backlight Test - Ramp up.");
     for (int i=0; i < 255; i++) {
+        unsigned int w = (ramptime * 1000)/ 256;
+        sprintf(buf, "%3d, %4d", i, w);
+        display.puts(0,40,buf);
         display.Backlight_u8(i);
-        wait_ms((ramptime * 1000)/ 256);
+        wait_ms(w);
     }
 }
 
@@ -1092,21 +1143,6 @@
     display.cls();
     display.puts(0,0, "Rounded Rectangle Test");
     
-    #if 0
-    i = 3;
-    x1 = 30; y1 = 30;
-    x2 = 200; y2 = 100;
-    r1 = 10; r2 = 20;
-    pc.printf("  (%3d,%3d), (%3d,%3d): (%2d,%2d) - %04X\r\n", x1,y1, x2,y2, r1,r2, display.DOSColor(i));
-    display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i));
-    
-    x1 = 230; y1 = 30;
-    x2 = 400; y2 = 100;
-    r1 = 30; r2 = 34;
-    pc.printf("  (%3d,%3d), (%3d,%3d): (%2d,%2d) - %04X\r\n", x1,y1, x2,y2, r1,r2, display.DOSColor(i));
-    display.roundrect(x1,y1, x2,y2, r1,r2, display.DOSColor(i), NOFILL);
-    #endif
-    
     for (i=0; i<16; i++) {
         x1 = rand() % 240;
         y1 = 50 + rand() % 200;
@@ -1262,7 +1298,7 @@
                 automode = 0;
                 break;
             case 'B':
-                BacklightTest(lcd, pc, 2);
+                BacklightTest(lcd, pc, 4);
                 break;
             case 'b':
                 BacklightTest2(lcd, pc);
--- a/RA8875.h	Fri Jan 17 17:24:05 2014 +0000
+++ b/RA8875.h	Sun Jan 19 04:24:16 2014 +0000
@@ -12,7 +12,7 @@
 
 // What better place for some test code than in here and the companion
 // .cpp file. See also the bottom of this file.
-//#define TESTENABLE
+#define TESTENABLE
 
 #define RGB(r,g,b) ( ((r<<8)&0xF800) | ((g<<3)&0x07E0) | (b>>3) )
 
@@ -66,25 +66,34 @@
     BLOCK       ///< Block cursor
 } cursor_t;
 
-/// return values from functions
+// return values from functions moved into TextDisplay.h
 //typedef enum
 //{
 //    noerror,
 //    bad_parameter
 //} RetCode_t;
 
+
 /// This is a graphics library for the Raio RA8875 Display Controller chip
 /// attached to a 4-wire SPI interface.
 ///
-/// It offers both primitive and high level APIs.
+/// It offers both primitive and high level APIs.\\
 /// Central to this API is a coordinate system, where the origin (0,0) is in
 /// the top-left corner of the display, and the width extends positive to the
 /// right and the height extends positive toward the bottom.
 ///
 /// As there are both graphics and text commands, one must take care to use
 /// the proper coordinate system for each. Some of the text APIs are in units
-/// of column and row, which is measured in character positions (so dependent
-/// on the font size).
+/// of column and row, which is measured in character positions (and dependent
+/// on the font size), and other text APIs permit pixel level positioning.
+///
+/// @todo Add 2-Layer support.
+/// @todo Find out why it can't shift frequency after constructor runs.
+/// @todo Bitmap support.
+/// @todo Add Hardware reset signal.
+/// @todo Add Touch Screen support.
+/// @todo Add Keypad Support.
+/// @todo Add high level objects - x-y graph, meter, others...
 /// 
 class RA8875 : public GraphicsDisplay
 {
@@ -240,7 +249,19 @@
     /// @returns success/failure code. @see RetCode_t.
     ///
     RetCode_t SetTextCursor(unsigned int x, unsigned int y);
-    
+
+    /// Get the current cursor horizontal position in pixels.
+    ///
+    /// @returns cursor position horizontal offset.
+    ///
+    unsigned int GetTextCursor_X(void);
+
+    /// Get the current cursor vertical position in pixels.
+    ///
+    /// @returns cursor position vertical offset.
+    ///
+    unsigned int GetTextCursor_Y(void);
+
     /// Configure additional Cursor Control settings.
     ///
     /// This API lets you modify other cursor control settings; 
@@ -770,7 +791,7 @@
     ///   - the number of bytes per vertical line (width of the array)
     /// @returns error code.
     ///
-    RetCode_t set_font(const unsigned char * font);
+    RetCode_t set_font(const unsigned char * font = NULL);
 
     /// Get the RGB value for a DOS color.
     ///
@@ -824,6 +845,20 @@
     ///
     RetCode_t init(void);
     
+    /// Internal function to put a character using the built-in (internal) font engine
+    ///
+    /// @param is the character to put to the screen.
+    /// @returns the character put.
+    ///
+    int _internal_putc(int c);
+    
+    /// Internal function to put a character using the external font engine
+    ///
+    /// @param is the character to put to the screen.
+    /// @returns the character put.
+    ///
+    int _external_putc(int c);
+    
     /// Select the peripheral to use it.
     ///
     /// @param chipsel when true will select the peripheral, and when false
@@ -855,6 +890,7 @@
     DigitalOut cs;                  ///< chip select pin, assumed active low
     DigitalOut res;                 ///< reset pin, assumed active low
     const unsigned char * font;     ///< reference to an external font somewhere in memory
+    unsigned int cursor_x, cursor_y;    ///< used for external fonts only
     
     #ifdef PERF_METRICS
     typedef enum
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Small_6.h	Sun Jan 19 04:24:16 2014 +0000
@@ -0,0 +1,105 @@
+
+#ifndef SMALL_6_H
+#define SMALL_6_H
+
+const unsigned char Small_6[] = {
+    9,8,8,1,                                    // Length,horz,vert,byte/vert
+    0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char  
+    0x02, 0x00, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char !
+    0x04, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,  // Code for char "
+    0x06, 0x00, 0x12, 0x3F, 0x12, 0x3F, 0x12, 0x00, 0x00,  // Code for char #
+    0x04, 0x00, 0x26, 0x7F, 0x32, 0x00, 0x00, 0x00, 0x00,  // Code for char $
+    0x05, 0x00, 0x13, 0x0B, 0x34, 0x32, 0x00, 0x00, 0x00,  // Code for char %
+    0x05, 0x00, 0x1A, 0x25, 0x1A, 0x28, 0x00, 0x00, 0x00,  // Code for char &
+    0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char '
+    0x03, 0x00, 0x7E, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
+    0x03, 0x00, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
+    0x03, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
+    0x04, 0x00, 0x08, 0x1C, 0x08, 0x00, 0x00, 0x00, 0x00,  // Code for char +
+    0x02, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
+    0x03, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char -
+    0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
+    0x03, 0x00, 0x38, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
+    0x05, 0x00, 0x1E, 0x21, 0x21, 0x1E, 0x00, 0x00, 0x00,  // Code for char 0
+    0x05, 0x00, 0x02, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char 1
+    0x05, 0x00, 0x32, 0x29, 0x29, 0x26, 0x00, 0x00, 0x00,  // Code for char 2
+    0x05, 0x00, 0x12, 0x21, 0x25, 0x1A, 0x00, 0x00, 0x00,  // Code for char 3
+    0x05, 0x00, 0x18, 0x16, 0x3F, 0x10, 0x00, 0x00, 0x00,  // Code for char 4
+    0x05, 0x00, 0x27, 0x25, 0x19, 0x00, 0x00, 0x00, 0x00,  // Code for char 5
+    0x05, 0x00, 0x1E, 0x25, 0x25, 0x18, 0x00, 0x00, 0x00,  // Code for char 6
+    0x05, 0x00, 0x01, 0x3D, 0x03, 0x00, 0x00, 0x00, 0x00,  // Code for char 7
+    0x05, 0x00, 0x1A, 0x25, 0x25, 0x1A, 0x00, 0x00, 0x00,  // Code for char 8
+    0x05, 0x00, 0x12, 0x25, 0x25, 0x1E, 0x00, 0x00, 0x00,  // Code for char 9
+    0x02, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char :
+    0x02, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ;
+    0x04, 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, 0x00, 0x00,  // Code for char <
+    0x04, 0x00, 0x14, 0x14, 0x14, 0x00, 0x00, 0x00, 0x00,  // Code for char =
+    0x04, 0x00, 0x22, 0x14, 0x08, 0x00, 0x00, 0x00, 0x00,  // Code for char >
+    0x05, 0x00, 0x02, 0x29, 0x05, 0x02, 0x00, 0x00, 0x00,  // Code for char ?
+    0x08, 0x00, 0x1C, 0x22, 0x49, 0x55, 0x59, 0x12, 0x0C,  // Code for char @
+    0x06, 0x00, 0x30, 0x0C, 0x0B, 0x0C, 0x30, 0x00, 0x00,  // Code for char A
+    0x06, 0x00, 0x3F, 0x25, 0x25, 0x25, 0x1A, 0x00, 0x00,  // Code for char B
+    0x06, 0x00, 0x1E, 0x21, 0x21, 0x21, 0x12, 0x00, 0x00,  // Code for char C
+    0x06, 0x00, 0x3F, 0x21, 0x21, 0x21, 0x1E, 0x00, 0x00,  // Code for char D
+    0x05, 0x00, 0x3F, 0x25, 0x25, 0x21, 0x00, 0x00, 0x00,  // Code for char E
+    0x05, 0x00, 0x3F, 0x05, 0x05, 0x01, 0x00, 0x00, 0x00,  // Code for char F
+    0x06, 0x00, 0x1E, 0x21, 0x21, 0x29, 0x3A, 0x00, 0x00,  // Code for char G
+    0x05, 0x00, 0x3F, 0x04, 0x04, 0x3F, 0x00, 0x00, 0x00,  // Code for char H
+    0x02, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char I
+    0x04, 0x00, 0x30, 0x20, 0x1F, 0x00, 0x00, 0x00, 0x00,  // Code for char J
+    0x05, 0x00, 0x3F, 0x0C, 0x12, 0x21, 0x00, 0x00, 0x00,  // Code for char K
+    0x04, 0x00, 0x3F, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00,  // Code for char L
+    0x08, 0x00, 0x3F, 0x03, 0x0C, 0x30, 0x0C, 0x03, 0x3F,  // Code for char M
+    0x06, 0x00, 0x3F, 0x03, 0x0C, 0x30, 0x3F, 0x00, 0x00,  // Code for char N
+    0x06, 0x00, 0x1E, 0x21, 0x21, 0x21, 0x1E, 0x00, 0x00,  // Code for char O
+    0x05, 0x00, 0x3F, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00,  // Code for char P
+    0x06, 0x00, 0x1E, 0x21, 0x29, 0x11, 0x2E, 0x00, 0x00,  // Code for char Q
+    0x06, 0x00, 0x3F, 0x09, 0x09, 0x09, 0x36, 0x00, 0x00,  // Code for char R
+    0x05, 0x00, 0x12, 0x25, 0x29, 0x12, 0x00, 0x00, 0x00,  // Code for char S
+    0x06, 0x00, 0x01, 0x01, 0x3F, 0x01, 0x01, 0x00, 0x00,  // Code for char T
+    0x06, 0x00, 0x1F, 0x20, 0x20, 0x20, 0x1F, 0x00, 0x00,  // Code for char U
+    0x06, 0x00, 0x03, 0x0C, 0x30, 0x0C, 0x03, 0x00, 0x00,  // Code for char V
+    0x08, 0x00, 0x03, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x03,  // Code for char W
+    0x06, 0x00, 0x21, 0x12, 0x0C, 0x12, 0x21, 0x00, 0x00,  // Code for char X
+    0x06, 0x00, 0x01, 0x02, 0x3C, 0x02, 0x01, 0x00, 0x00,  // Code for char Y
+    0x05, 0x00, 0x31, 0x29, 0x25, 0x23, 0x00, 0x00, 0x00,  // Code for char Z
+    0x03, 0x00, 0x7F, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char [
+    0x03, 0x00, 0x07, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char BackSlash
+    0x03, 0x00, 0x41, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ]
+    0x04, 0x00, 0x02, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00,  // Code for char ^
+    0x05, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x00,  // Code for char _
+    0x03, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char `
+    0x04, 0x00, 0x14, 0x24, 0x38, 0x00, 0x00, 0x00, 0x00,  // Code for char a
+    0x05, 0x00, 0x3F, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,  // Code for char b
+    0x04, 0x00, 0x18, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00,  // Code for char c
+    0x05, 0x00, 0x18, 0x24, 0x24, 0x3F, 0x00, 0x00, 0x00,  // Code for char d
+    0x04, 0x00, 0x18, 0x34, 0x28, 0x00, 0x00, 0x00, 0x00,  // Code for char e
+    0x03, 0x00, 0x3E, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char f
+    0x05, 0x00, 0x18, 0xA4, 0xA4, 0x7C, 0x00, 0x00, 0x00,  // Code for char g
+    0x04, 0x00, 0x3F, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00,  // Code for char h
+    0x02, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char i
+    0x02, 0x00, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char j
+    0x04, 0x00, 0x3F, 0x08, 0x34, 0x00, 0x00, 0x00, 0x00,  // Code for char k
+    0x02, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char l
+    0x06, 0x00, 0x3C, 0x04, 0x3C, 0x04, 0x38, 0x00, 0x00,  // Code for char m
+    0x04, 0x00, 0x3C, 0x04, 0x38, 0x00, 0x00, 0x00, 0x00,  // Code for char n
+    0x05, 0x00, 0x18, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,  // Code for char o
+    0x05, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00, 0x00,  // Code for char p
+    0x05, 0x00, 0x18, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00,  // Code for char q
+    0x03, 0x00, 0x3C, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char r
+    0x04, 0x00, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00,  // Code for char s
+    0x03, 0x00, 0x1E, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char t
+    0x04, 0x00, 0x1C, 0x20, 0x3C, 0x00, 0x00, 0x00, 0x00,  // Code for char u
+    0x04, 0x00, 0x0C, 0x30, 0x0C, 0x00, 0x00, 0x00, 0x00,  // Code for char v
+    0x06, 0x00, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x00, 0x00,  // Code for char w
+    0x04, 0x00, 0x24, 0x18, 0x24, 0x00, 0x00, 0x00, 0x00,  // Code for char x
+    0x04, 0x00, 0x9C, 0x60, 0x1C, 0x00, 0x00, 0x00, 0x00,  // Code for char y
+    0x04, 0x00, 0x34, 0x24, 0x2C, 0x00, 0x00, 0x00, 0x00,  // Code for char z
+    0x03, 0x00, 0x08, 0x77, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char {
+    0x02, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char |
+    0x03, 0x00, 0x77, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char }
+    0x04, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,  // Code for char ~
+    0x02, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00   // Code for char 
+    };
+
+#endif // SMALL_6_H
--- a/TextDisplay.cpp	Fri Jan 17 17:24:05 2014 +0000
+++ b/TextDisplay.cpp	Sun Jan 19 04:24:16 2014 +0000
@@ -5,6 +5,20 @@
 
 #include "TextDisplay.h"
 
+#define DEBUG "Text"
+// ...
+// INFO("Stuff to show %d", var); // new-line is automatically appended
+//
+#if (defined(DEBUG) && !defined(TARGET_LPC11U24))
+#define INFO(x, ...) std::printf("[INF %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#define WARN(x, ...) std::printf("[WRN %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#define ERR(x, ...)  std::printf("[ERR %s %3d] "x"\r\n", DEBUG, __LINE__, ##__VA_ARGS__);
+#else
+#define INFO(x, ...)
+#define WARN(x, ...)
+#define ERR(x, ...)
+#endif
+
 TextDisplay::TextDisplay(const char *name) : Stream(name)
 {
     _row = 0;
@@ -19,6 +33,7 @@
 
 int TextDisplay::_putc(int value)
 {
+    INFO("_putc(%d)", value);
     if(value == '\n') {
         _column = 0;
         _row++;
@@ -42,6 +57,7 @@
 // crude cls implementation, should generally be overwritten in derived class
 RetCode_t TextDisplay::cls()
 {
+    INFO("cls()");
     locate(0, 0);
     for(int i=0; i<columns()*rows(); i++) {
         putc(' ');
@@ -51,6 +67,7 @@
 
 RetCode_t TextDisplay::locate(unsigned int column, unsigned int row)
 {
+    INFO("locate(%d,%d)", column, row);
     _column = column;
     _row = row;
     return noerror;
@@ -63,25 +80,26 @@
 
 RetCode_t TextDisplay::foreground(uint16_t colour)
 {
+    INFO("foreground(%4X)", colour);
     _foreground = colour;
     return noerror;
 }
 
 RetCode_t TextDisplay::background(uint16_t colour)
 {
+    INFO("background(%4X)", colour);
     _background = colour;
     return noerror;
 }
 
-bool TextDisplay::claim (FILE *stream)
+bool TextDisplay::claim(FILE *stream)
 {
     if ( _path == NULL) {
         fprintf(stderr, "claim requires a name to be given in the instantiator of the TextDisplay instance!\r\n");
         return false;
     }
     if (freopen(_path, "w", stream) == NULL) {
-        // Failed, should not happen
-        return false;
+        return false;       // Failed, should not happen
     }
     // make sure we use line buffering
     setvbuf(stdout, NULL, _IOLBF, columns());
--- a/TextDisplay.h	Fri Jan 17 17:24:05 2014 +0000
+++ b/TextDisplay.h	Sun Jan 19 04:24:16 2014 +0000
@@ -40,11 +40,12 @@
 
     /** output a character at the given position
      *
-     * @param column column where charater must be written
-     * @param  row where character must be written
+     * @param x position in pixels
+     * @param y position in pixels
      * @param c the character to be written to the TextDisplay
+     * @returns number of pixels to advance the cursor.
      */
-    virtual void character(int column, int row, int c) = 0;
+    virtual int character(int x, int y, int c) = 0;
 
     /** return number if rows on TextDisplay
      * @result number of rows
@@ -65,7 +66,7 @@
 
     /** clear screen
     */
-    virtual RetCode_t cls();
+    virtual RetCode_t cls() = 0;
     virtual RetCode_t locate(unsigned int column, unsigned int row) = 0;
     virtual RetCode_t foreground(uint16_t colour) = 0;
     virtual RetCode_t background(uint16_t colour) = 0;