several improvements draft

Tue, 20 Sep 2016 23:50:45 +0200

author
David Douard <david.douard@logilab.fr>
date
Tue, 20 Sep 2016 23:50:45 +0200
changeset 5
f1c85c2500f2
parent 4
219766126afb
child 6
8cb67d7afd79

several improvements

- add (used parts of) unigraphics in repo
- extract hp communication protocol listener in a dedicated file

lib/unigraphic/Arial12x12.h file | annotate | diff | comparison | revisions
lib/unigraphic/GraphicsDisplay.cpp file | annotate | diff | comparison | revisions
lib/unigraphic/GraphicsDisplay.h file | annotate | diff | comparison | revisions
lib/unigraphic/Mono15x22.h file | annotate | diff | comparison | revisions
lib/unigraphic/Mono19x27.h file | annotate | diff | comparison | revisions
lib/unigraphic/Protocols.h file | annotate | diff | comparison | revisions
lib/unigraphic/SPI8.cpp file | annotate | diff | comparison | revisions
lib/unigraphic/SPI8.h file | annotate | diff | comparison | revisions
lib/unigraphic/SSD1322.cpp file | annotate | diff | comparison | revisions
lib/unigraphic/SSD1322.h file | annotate | diff | comparison | revisions
lib/unigraphic/Terminal6x8.h file | annotate | diff | comparison | revisions
lib/unigraphic/TextDisplay.cpp file | annotate | diff | comparison | revisions
lib/unigraphic/TextDisplay.h file | annotate | diff | comparison | revisions
platformio.ini file | annotate | diff | comparison | revisions
src/hp34comm.cpp file | annotate | diff | comparison | revisions
src/hp34comm.cpp~ file | annotate | diff | comparison | revisions
src/hp34comm.h file | annotate | diff | comparison | revisions
src/hp34comm.h~ file | annotate | diff | comparison | revisions
src/main.cpp file | annotate | diff | comparison | revisions
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/Arial12x12.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,145 @@
+
+
+//GLCD FontName : Arial12x12
+//GLCD FontSize : 12 x 12
+
+/** Arial Font with 12*12 matrix to use with SPI_TFT lib
+ */ 
+#ifdef TOOLCHAIN_GCC
+const unsigned char Arial12x12[] __attribute__((aligned (2))) = {
+#else     
+__align(2) 
+const unsigned char Arial12x12[] = {
+#endif        
+        0xFF/*unused*/,12,12,0xFF/*unused*/,
+	// 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 
+        };
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/GraphicsDisplay.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,473 @@
+/* mbed UniGraphic library - Graphics class
+ * Copyright (c) 2015 Giuliano Dianda
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * Derived work of:
+ *
+ * mbed GraphicsDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * mbed library for 240*320 pixel display TFT based on ILI9341 LCD Controller
+ * Copyright (c) 2013 Peter Drescher - DC2PD
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+
+ 
+#include "GraphicsDisplay.h"
+#define SWAP(a, b)  { a ^= b; b ^= a; a ^= b; }
+GraphicsDisplay::GraphicsDisplay(const char *name):TextDisplay(name) {
+    set_font((unsigned char*)Terminal6x8,32,127,true);
+ //   foreground(0xFFFF);
+ //   background(0x0000);
+    char_x = 0;
+    char_y = 0;
+    oriented_width=0;
+    oriented_height=0;
+    fontzoomver=1;
+    fontzoomhor=1;
+    auto_up = true;
+}
+    
+void GraphicsDisplay::WindowMax (void)
+{
+    window (0, 0, oriented_width,  oriented_height);
+}
+void GraphicsDisplay::set_width(int width)
+{
+    oriented_width = width;
+}
+void GraphicsDisplay::set_height(int height)
+{
+    oriented_height = height;
+}
+int GraphicsDisplay::width()
+{
+    return oriented_width;
+}
+int GraphicsDisplay::height()
+{
+    return oriented_height;
+}
+void GraphicsDisplay::circle(int x0, int y0, int r, unsigned short color)
+{
+    int x = -r, y = 0, err = 2-2*r, e2;
+    do {
+        pixel(x0-x, y0+y,color);
+        pixel(x0+x, y0+y,color);
+        pixel(x0+x, y0-y,color);
+        pixel(x0-x, y0-y,color);
+        e2 = err;
+        if (e2 <= y) {
+            err += ++y*2+1;
+            if (-x == y && e2 <= x) e2 = 0;
+        }
+        if (e2 > x) err += ++x*2+1;
+    } while (x <= 0);
+    if(auto_up) copy_to_lcd();
+}
+void GraphicsDisplay::fillcircle(int x0, int y0, int r, unsigned short color)
+{
+    bool old_auto_up=auto_up;
+    if(auto_up) auto_up=false;
+    int x = -r, y = 0, err = 2-2*r, e2;
+    do {
+        vline(x0-x, y0-y, y0+y, color);
+        vline(x0+x, y0-y, y0+y, color);
+        e2 = err;
+        if (e2 <= y) {
+            err += ++y*2+1;
+            if (-x == y && e2 <= x) e2 = 0;
+        }
+        if (e2 > x) err += ++x*2+1;
+    } while (x <= 0);
+    if(old_auto_up)
+    {
+        auto_up=true;
+        copy_to_lcd();
+    }
+}
+void GraphicsDisplay::hline(int x0, int x1, int y, unsigned short color)
+{
+    int len = x1 - x0 + 1;
+    window(x0,y,len,1);
+ //   for (int j=0; j<len; j++) window_pushpixel(color);
+    window_pushpixel(color, len);
+    if(auto_up) copy_to_lcd();
+    return;
+}
+void GraphicsDisplay::vline(int x, int y0, int y1, unsigned short color)
+{
+    int len = y1 - y0 + 1;
+    window(x,y0,1,len);
+  //  for (int y=0; y<len; y++) window_pushpixel(color);
+    window_pushpixel(color, len);
+    if(auto_up) copy_to_lcd();
+    return;
+}
+void GraphicsDisplay::line(int x0, int y0, int x1, int y1, unsigned short color)
+{
+    //WindowMax();
+    int   dx = 0, dy = 0;
+    int   dx_sym = 0, dy_sym = 0;
+    int   dx_x2 = 0, dy_x2 = 0;
+    int   di = 0;
+
+    dx = x1-x0;
+    dy = y1-y0;
+
+    if (dx == 0) {        /* vertical line */
+        if (y1 < y0) SWAP(y0,y1);
+        vline(x0,y0,y1,color);
+        return;
+    }
+
+    if (dx > 0) {
+        dx_sym = 1;
+    } else {
+        dx_sym = -1;
+    }
+    if (dy == 0) {        /* horizontal line */
+        if (x1 < x0) SWAP(x1,x0);
+        hline(x0,x1,y0,color);
+        return;
+    }
+
+    if (dy > 0) {
+        dy_sym = 1;
+    } else {
+        dy_sym = -1;
+    }
+
+    dx = dx_sym*dx;
+    dy = dy_sym*dy;
+
+    dx_x2 = dx*2;
+    dy_x2 = dy*2;
+
+    if (dx >= dy) {
+        di = dy_x2 - dx;
+        while (x0 != x1) {
+
+            pixel(x0, y0, color);
+            x0 += dx_sym;
+            if (di<0) {
+                di += dy_x2;
+            } else {
+                di += dy_x2 - dx_x2;
+                y0 += dy_sym;
+            }
+        }
+        pixel(x0, y0, color);
+    } else {
+        di = dx_x2 - dy;
+        while (y0 != y1) {
+            pixel(x0, y0, color);
+            y0 += dy_sym;
+            if (di < 0) {
+                di += dx_x2;
+            } else {
+                di += dx_x2 - dy_x2;
+                x0 += dx_sym;
+            }
+        }
+        pixel(x0, y0, color);
+    }
+    if(auto_up) copy_to_lcd();
+    return;
+}
+void GraphicsDisplay::rect(int x0, int y0, int x1, int y1, unsigned short color)
+{
+    bool old_auto_up=auto_up;
+    if(auto_up) auto_up=0;
+    if (x1 > x0) hline(x0,x1,y0,color);
+    else  hline(x1,x0,y0,color);
+
+    if (y1 > y0) vline(x0,y0,y1,color);
+    else vline(x0,y1,y0,color);
+
+    if (x1 > x0) hline(x0,x1,y1,color);
+    else  hline(x1,x0,y1,color);
+
+    if (y1 > y0) vline(x1,y0,y1,color);
+    else vline(x1,y1,y0,color);
+    if(old_auto_up)
+    {
+        auto_up=true;
+        copy_to_lcd();
+    }
+    return;
+}
+void GraphicsDisplay::fillrect(int x0, int y0, int x1, int y1, unsigned short color)
+{
+    if(x0 > x1) SWAP(x0,x1);
+    if(y0 > y1) SWAP(y0,y1);
+     
+    int h = y1 - y0 + 1;
+    int w = x1 - x0 + 1;
+    unsigned int pixels = h * w;
+    window(x0,y0,w,h);
+ //   for (unsigned int p=0; p<pixels; p++) window_pushpixel(color);
+    window_pushpixel(color, pixels);
+    if(auto_up) copy_to_lcd();
+    return;
+}
+void GraphicsDisplay::locate(int x, int y)
+{
+    char_x = x;
+    char_y = y;
+}
+int GraphicsDisplay::columns()
+{
+    return oriented_width / fonthor;
+}
+int GraphicsDisplay::rows()
+{
+    return oriented_height / fontvert;
+}
+void GraphicsDisplay::set_font(unsigned char* f, unsigned char firstascii, unsigned char lastascii, bool proportional)
+{
+    font = f;
+    // read font parameter from start of array
+    //fontoffset = font[0];                    // bytes / char
+    fonthor = font[1];                       // get hor size of font
+    fontvert = font[2];                      // get vert size of font
+    //fontbpl = font[3];                       // bytes per line
+    fontbpl = (fontvert+7)>>3; //bytes per line, rounded up to multiple of 8
+    fontoffset = (fonthor*fontbpl)+1;
+    firstch = firstascii;   // first ascii code present in font array (usually 32)
+    lastch = lastascii;     // last ascii code present in font array (usually 127)
+    fontprop = proportional;
+    set_font_zoom(1,1);
+}
+void GraphicsDisplay::set_font_zoom(unsigned char x_mul, unsigned char y_mul)
+{
+    fontzoomhor=((x_mul==0) ? 1:x_mul);
+    fontzoomver=((y_mul==0) ? 1:y_mul);
+}
+int GraphicsDisplay::_putc(int value)
+{
+    if (value == '\n') {    // new line
+        char_x = 0;
+        char_y = char_y + fontvert*fontzoomver;
+        if (char_y >= oriented_height - fontvert*fontzoomver) {
+            char_y = 0;
+        }
+    } else {
+        character(char_x, char_y, value);
+        if(auto_up) copy_to_lcd();
+    }
+    return value;
+}
+void GraphicsDisplay::character(int x, int y, int c)
+{
+    char_x=x;
+    char_y=y;
+    int j,i,b;
+    unsigned char* zeichen;
+    unsigned char z,w,v;
+
+ /*   // read font parameter from start of array
+    offset = font[0];                    // bytes / char
+    hor = font[1];                       // get hor size of font
+    vert = font[2];                      // get vert size of font
+    bpl = font[3];                       // bytes per line
+*/
+    if (char_x + fonthor*fontzoomhor > oriented_width) {
+        char_x = 0;
+        char_y = char_y + fontvert*fontzoomver;
+        if (char_y > oriented_height - fontvert*fontzoomver) {
+            char_y = 0;
+        }
+    }
+    window(char_x, char_y, fonthor*fontzoomhor, fontvert*fontzoomver); // char box
+    if ((c < firstch) || (c > lastch)) {   // test char range - if not exist fill with blank
+      window_pushpixel(_background, fontzoomhor*fonthor*fontvert*fontzoomver); //(color, howmany)
+      w = fonthor;
+    } else {
+      zeichen = &font[((c-firstch) * fontoffset) + 4]; // start of char bitmap
+      w = zeichen[0];                          // width of actual char
+      // construct the char into the buffer
+      for (j=0; j<(fontbpl); j++) {  //  vert bytes
+	for (v=0; v<fontzoomver; v++) { // repeat horiz line for vertical zooming
+	  for (int p=0; p<8; p++) { // pixel in the current vert byte
+	    if ((j*8+p) > fontvert)
+	      break;
+	    b = 1 << p;
+	    for (i=0; i<fonthor; i++) {   //  horz line
+	      z = zeichen[(fontbpl * i) + j + 1];
+	      window_pushpixel(( z & b ) ? _foreground : _background, fontzoomhor); //(color, howmany)
+	    }
+	  }
+	} //for each zoomed vert
+      }
+    }
+    if((fontprop) && (w<fonthor))
+      // put at least 1 blank after variable-width characters, except
+      // characters that occupy whole fonthor space like "_"
+      char_x += (w*fontzoomhor) + 1;
+    else
+      char_x += fonthor*fontzoomhor;
+}
+
+void GraphicsDisplay::Bitmap_BW(Bitmap_s bm, int x, int y)
+{
+    int h,v,b;
+ //   int cropX;
+    char d;
+    if(x<0) x=0;
+    if(y<0) y=0;
+    int cropX = (x+bm.xSize)-oriented_width;
+    if(cropX<0) cropX=0; 
+    window(x, y, bm.xSize-cropX, bm.ySize);
+    for(v=0; v < bm.ySize; v++) {   // lines
+        if((v + y) >= oriented_height) break; // no need to crop Y
+        for(h=0; h < bm.xSize; h++) { // pixel
+            if((h + x) >= oriented_width) break;
+            d = bm.data[bm.Byte_in_Line * v + ((h & 0xF8) >> 3)];
+            b = 0x80 >> (h & 0x07);
+            if((d & b) == 0) {
+                window_pushpixel(_background);
+            } else {
+                window_pushpixel(_foreground);
+            }
+        }
+    }
+    if(auto_up) copy_to_lcd();
+}
+void GraphicsDisplay::Bitmap(int x, int y, int w, int h,unsigned char *bitmap)
+{
+    int  j;
+    unsigned char  padd;
+    unsigned short *bitmap_ptr = (unsigned short *)bitmap;    
+
+    padd = w%2; // the lines are padded to multiple of 4 bytes in a bitmap
+    if(x<0) x=0;
+    else if(x>=oriented_width) return;
+    if(y<0) y=0;
+    else if(y>=oriented_height) return;
+    int cropX = (x+w)-oriented_width;
+    if(cropX<0) cropX=0;
+    int cropY = (y+h)-oriented_height;
+    if(cropY<0) cropY=0;
+    window(x, y, w-cropX, h-cropY);
+    bitmap_ptr += ((h - 1)* (w + padd)); // begin of last line in array (first line of image)(standard bmp scan direction is left->right bottom->top)
+    for (j = 0; j < h-cropY; j++) {         //Lines
+        window_pushpixelbuf(bitmap_ptr, w-cropX);
+        bitmap_ptr -= w+padd;
+    }
+    if(auto_up) copy_to_lcd();
+}
+
+// local filesystem is not implemented in kinetis board , but you can add a SD card
+// fixme this whole functions needs testing and speedup
+int GraphicsDisplay::BMP_16(int x, int y, const char *Name_BMP)
+{
+
+#define OffsetPixelWidth    18
+#define OffsetPixelHeigh    22
+#define OffsetFileSize      34
+#define OffsetPixData       10
+#define OffsetBPP           28
+
+    char filename[50];
+    unsigned char BMP_Header[54];
+    unsigned short BPP_t;
+    unsigned int PixelWidth,PixelHeigh,start_data;
+    unsigned int    i,off;
+    int padd,j;
+    unsigned short *line;
+
+    // get the filename
+    i=0;
+    while (*Name_BMP!='\0') {
+        filename[i++]=*Name_BMP++;
+    }
+    filename[i] = 0;  
+    
+    FILE *Image = fopen((const char *)&filename[0], "rb");  // open the bmp file
+    if (!Image) {
+        return(0);      // error file not found !
+    }
+
+    fread(&BMP_Header[0],1,54,Image);      // get the BMP Header
+
+    if (BMP_Header[0] != 0x42 || BMP_Header[1] != 0x4D) {  // check magic byte
+        fclose(Image);
+        return(-1);     // error no BMP file
+    }
+
+    BPP_t = BMP_Header[OffsetBPP] + (BMP_Header[OffsetBPP + 1] << 8);
+    if (BPP_t != 0x0010) {
+        fclose(Image);
+        return(-2);     // error no 16 bit BMP
+    }
+
+    PixelHeigh = BMP_Header[OffsetPixelHeigh] + (BMP_Header[OffsetPixelHeigh + 1] << 8) + (BMP_Header[OffsetPixelHeigh + 2] << 16) + (BMP_Header[OffsetPixelHeigh + 3] << 24);
+    PixelWidth = BMP_Header[OffsetPixelWidth] + (BMP_Header[OffsetPixelWidth + 1] << 8) + (BMP_Header[OffsetPixelWidth + 2] << 16) + (BMP_Header[OffsetPixelWidth + 3] << 24);
+    if (PixelHeigh > oriented_height + y || PixelWidth > oriented_width + x) {
+        fclose(Image);
+        return(-3);      // to big
+    }
+
+    start_data = BMP_Header[OffsetPixData] + (BMP_Header[OffsetPixData + 1] << 8) + (BMP_Header[OffsetPixData + 2] << 16) + (BMP_Header[OffsetPixData + 3] << 24);
+
+    line = (unsigned short *) malloc (2 * PixelWidth); // we need a buffer for a line
+    if (line == NULL) {
+        return(-4);         // error no memory
+    }
+
+    // the bmp lines are padded to multiple of 4 bytes
+    padd = -1;
+    do {
+        padd ++;
+    } while ((PixelWidth * 2 + padd)%4 != 0);
+
+    window(x, y,PixelWidth ,PixelHeigh);
+//    wr_cmd(0x2C);  // send pixel
+    for (j = PixelHeigh - 1; j >= 0; j--) {               //Lines bottom up
+        off = j * (PixelWidth  * 2 + padd) + start_data;   // start of line
+        fseek(Image, off ,SEEK_SET);
+        fread(line,1,PixelWidth * 2,Image);       // read a line - slow 
+  /*      for (i = 0; i < PixelWidth; i++)
+        {        // copy pixel data to TFT
+     //       wr_16(line[i]);                  // one 16 bit pixel   
+            window_pushpixel(line[i]);
+            
+        } */
+        window_pushpixelbuf(line, PixelWidth);
+     }
+    free (line);
+    fclose(Image);
+    if(auto_up) copy_to_lcd();
+    return(1);
+}
+
+void GraphicsDisplay::cls (void)
+{
+    unsigned int pixels = ( oriented_width * oriented_height);
+    WindowMax();
+    for (unsigned int i = 0; i < pixels; i++)
+    {
+        window_pushpixel(_background);
+    }
+}
+void GraphicsDisplay::set_auto_up(bool up)
+{
+    if(up) auto_up = true;
+    else auto_up = false;
+}
+bool GraphicsDisplay::get_auto_up(void)
+{
+    return (auto_up);
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/GraphicsDisplay.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,361 @@
+/* mbed GraphicsDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * A library for providing a common base class for Graphics displays
+ * To port a new display, derive from this class and implement
+ * the constructor (setup the display), pixel (put a pixel
+ * at a location), width and height functions. Everything else
+ * (locate, printf, putc, cls, window, putp, fill, blit, blitbit) 
+ * will come for free. You can also provide a specialised implementation
+ * of window and putp to speed up the results
+ */
+
+#ifndef MBED_GRAPHICSDISPLAY_H
+#define MBED_GRAPHICSDISPLAY_H
+
+#include "TextDisplay.h"
+#include "Terminal6x8.h"
+
+
+
+/* some RGB color definitions                                                 */
+#define Black           0x0000      /*   0,   0,   0 */
+#define Navy            0x000F      /*   0,   0, 128 */
+#define DarkGreen       0x03E0      /*   0, 128,   0 */
+#define DarkCyan        0x03EF      /*   0, 128, 128 */
+#define Maroon          0x7800      /* 128,   0,   0 */
+#define Purple          0x780F      /* 128,   0, 128 */
+#define Olive           0x7BE0      /* 128, 128,   0 */
+#define LightGrey       0xC618      /* 192, 192, 192 */
+#define DarkGrey        0x7BEF      /* 128, 128, 128 */
+#define Blue            0x001F      /*   0,   0, 255 */
+#define Green           0x07E0      /*   0, 255,   0 */
+#define Cyan            0x07FF      /*   0, 255, 255 */
+#define Red             0xF800      /* 255,   0,   0 */
+#define Magenta         0xF81F      /* 255,   0, 255 */
+#define Yellow          0xFFE0      /* 255, 255,   0 */
+#define White           0xFFFF      /* 255, 255, 255 */
+#define Orange          0xFD20      /* 255, 165,   0 */
+#define GreenYellow     0xAFE5      /* 173, 255,  47 */
+
+/** Bitmap
+ */
+struct Bitmap_s{
+    int xSize;
+    int ySize;
+    int Byte_in_Line;
+    char* data;
+    };
+
+/** A common base class for Graphics displays
+*/
+class GraphicsDisplay : public TextDisplay {
+
+public:         
+          
+    /** Create a GraphicsDisplay interface
+    * @param name The name used by the parent class to access the interface
+    */
+    GraphicsDisplay(const char* name);
+     
+////// functions needing implementation in derived implementation class ///////////////////////////////////////
+////// ---------------------------------------------------------------- ///////////////////////////////////////
+
+    /** Draw a pixel in the specified color.
+    * @note this method must be supported in the derived class.
+    * @param x is the horizontal offset to this pixel.
+    * @param y is the vertical offset to this pixel.
+    * @param color defines the color for the pixel.
+    */
+    virtual void pixel(int x, int y, unsigned short color) = 0;
+    
+    /** Set the window, which controls where items are written to the screen.
+    * When something hits the window width, it wraps back to the left side
+    * and down a row. If the initial write is outside the window, it will
+    * be captured into the window when it crosses a boundary.
+    * @param x is the left edge in pixels.
+    * @param y is the top edge in pixels.
+    * @param w is the window width in pixels.
+    * @param h is the window height in pixels.
+    * @note this method must be overridden in a derived class.
+    */
+    virtual void window(int x, int y, int w, int h) = 0;
+
+    /** Push a single pixel into the window and increment position.
+    * You may first call window() then push pixels in loop.
+    * @param color is the pixel color.
+    * @note this method must be overridden in a derived class.
+    */
+    virtual void window_pushpixel(unsigned short color) = 0;
+    
+    /** Push some pixels of the same color into the window and increment position.
+    * You must first call window() then push pixels.
+    * @param color is the pixel color.
+    * @param count: how many
+    */
+    virtual void window_pushpixel(unsigned short color, unsigned int count) = 0;
+    
+    /** Push array of pixel colors into the window and increment position.
+    * You must first call window() then push pixels.
+    * @param color is the pixel color.
+    */
+    virtual void window_pushpixelbuf(unsigned short* color, unsigned int lenght) = 0;
+  
+    /** If framebuffer is used, it needs to be sent to LCD from time to time
+    @note this method must be overridden in a derived class.
+    @note real function for LCD, dummy for TFT
+    */
+    virtual void copy_to_lcd() = 0; 
+
+/////// functions that come for free, but can be overwritten///////////////////////////////////////////////////
+/////// ----------------------------------------------------///////////////////////////////////////////////////
+
+    /** Set window to max possible size
+    * May be overridden in a derived class.
+    */
+    virtual void WindowMax(void);
+
+    /** clear the entire screen
+    * Basically it sets windomax then fill with background color
+    * May be overridden in a derived class.
+    */
+    virtual void cls();
+
+    /** draw a circle
+   *
+   * @param x0,y0 center
+   * @param r radius
+   * @param color 16 bit color                                                                 *
+   *
+   */    
+  virtual void circle(int x, int y, int r, unsigned short color); 
+  
+  /** draw a filled circle
+   *
+   * @param x0,y0 center
+   * @param r radius
+   * @param color 16 bit color                                                                 *
+   */    
+  virtual void fillcircle(int x, int y, int r, unsigned short color); 
+ 
+    
+  /** draw a 1 pixel line
+   *
+   * @param x0,y0 start point
+   * @param x1,y1 stop point
+   * @param color 16 bit color
+   *
+   */    
+  virtual void line(int x0, int y0, int x1, int y1, unsigned short color);
+    
+    /** draw a horizontal line
+   *
+   * @param x0 horizontal start
+   * @param x1 horizontal stop
+   * @param y vertical position
+   * @param color 16 bit color                                               
+   *
+   */
+  void hline(int x0, int x1, int y, unsigned short color);
+    
+  /** draw a vertical line
+   *
+   * @param x horizontal position
+   * @param y0 vertical start 
+   * @param y1 vertical stop
+   * @param color 16 bit color
+   */
+  void vline(int y0, int y1, int x, unsigned short color);
+  
+  /** draw a rect
+   *
+   * @param x0,y0 top left corner
+   * @param x1,y1 down right corner
+   * @param color 16 bit color
+   *                                                   *
+   */    
+  virtual void rect(int x0, int y0, int x1, int y1, unsigned short color);
+    
+  /** draw a filled rect
+   *
+   * @param x0,y0 top left corner
+   * @param x1,y1 down right corner
+   * @param color 16 bit color
+   *
+   */    
+  virtual void fillrect(int x0, int y0, int x1, int y1, unsigned short color);
+  
+    /** setup cursor position for text
+   *
+   * @param x x-position (top left)
+   * @param y y-position 
+   */   
+  virtual void locate(int x, int y);
+    
+    /** put a char on the screen
+   *
+   * @param value char to print
+   * @returns printed char
+   *
+   */
+  virtual int _putc(int value);
+    
+  /** draw a character on given position out of the active font to the TFT
+   *
+   * @param x x-position of char (top left) 
+   * @param y y-position
+   * @param c char to print
+   *
+   */    
+  virtual void character(int x, int y, int c);
+    
+  /** paint a bitmap on the TFT 
+   *
+   * @param x,y : upper left corner 
+   * @param w width of bitmap
+   * @param h high of bitmap
+   * @param *bitmap pointer to the bitmap data
+   *
+   *   bitmap format: 16 bit R5 G6 B5
+   * 
+   *   use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5            
+   *   use winhex to load this file and mark data stating at offset 0x46 to end
+   *   use edit -> copy block -> C Source to export C array
+   *   paste this array into your program
+   * 
+   *   define the array as static const unsigned char to put it into flash memory
+   *   cast the pointer to (unsigned char *) :
+   *   tft.Bitmap(10,40,309,50,(unsigned char *)scala);
+   */    
+  void Bitmap(int x, int y, int w, int h,unsigned char *bitmap);
+    
+    /** paint monochrome bitmap to screen
+      *
+      * @param bm Bitmap in flash
+      * @param x  x start
+      * @param y  y start 
+      *
+      */
+    void Bitmap_BW(Bitmap_s bm, int x, int y);
+    
+   /** paint a 16 bit BMP from filesytem on the TFT (slow) 
+   *
+   * @param x,y : position of upper left corner 
+   * @param *Name_BMP name of the BMP file with drive: "/local/test.bmp"
+   *
+   * @returns 1 if bmp file was found and painted
+   * @returns  0 if bmp file was found not found
+   * @returns -1 if file is no bmp
+   * @returns -2 if bmp file is no 16 bit bmp
+   * @returns -3 if bmp file is to big for screen 
+   * @returns -4 if buffer malloc go wrong
+   *
+   *   bitmap format: 16 bit R5 G6 B5
+   * 
+   *   use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5
+   *   copy to internal file system or SD card           
+   */      
+  int BMP_16(int x, int y, const char *Name_BMP);  
+    
+    
+    
+  /** select the font to use
+   *
+   * @param f pointer to font array 
+   * @param firstascii first ascii code present in font array, default 32 (space)
+   * @param lastascii last ascii code present in font array, default 127 (DEL)
+   * @param proportional enable/disable variable font width (default enabled)
+   *                                                                              
+   *   font array can created with GLCD Font Creator from http://www.mikroe.com
+   *   you have to add 4 parameter at the beginning of the font array to use: 
+   *   - the number of byte / char (not used in this revision, set to whatever)
+   *   - the vertial size in pixel
+   *   - the horizontal size in pixel
+   *   - the number of byte per vertical line (not used in this revision, set to whatever)
+   *   you also have to change the array to cont unsigned char[] and __align(2)
+   *
+   */  
+  void set_font(unsigned char* f, unsigned char firstascii=32, unsigned char lastascii=127, bool proportional = true);
+  
+  /** Zoom fount
+   *
+   * @param x_mul horizontal size multiplier
+   * @param y_mul vertical size multiplier
+   */  
+  void set_font_zoom(unsigned char x_mul, unsigned char y_mul);
+
+    /** Get the number of columns based on the currently active font.
+    * @returns number of columns.
+    * @note this method may be overridden in a derived class.
+    */
+    virtual int columns();
+
+    /** Get the number of rows based on the currently active font.
+    * @returns number of rows.
+    * @note this method may be overridden in a derived class.
+    */
+    virtual int rows();
+    
+    /** get the current oriented screen width in pixels
+    * @returns screen width in pixels.
+    */
+    int width();
+
+    /** get the current oriented screen height in pixels
+    * @returns screen height in pixels.
+    */
+    int height();
+    
+    /** set the current oriented screen width in pixels
+    * @param width screen width in pixels.
+    */
+    void set_width(int width);
+
+    /** set the current oriented screen height in pixels
+    * @param height screen height in pixels.
+    */
+    void set_height(int height);
+    
+    /** setup auto update of screen 
+      *
+      * @param up 1 = on , 0 = off
+      * if switched off the program has to call copy_to_lcd() 
+      * to update screen from framebuffer
+      */
+    void set_auto_up(bool up);
+ 
+    /** get status of the auto update function
+      *
+      *  @returns if auto update is on
+      */
+    bool get_auto_up(void); 
+    
+    
+    
+private:
+
+    unsigned char* font;
+    // display width and height related to current orientation
+    int oriented_width;
+    int oriented_height;
+    
+    // text char location
+    int char_x;
+    int char_y;
+    
+    int  fontoffset;// bytes / char (short)
+    int  fonthor;   // hor size of font (char)
+    int  fontvert;  // ver size of font (char)
+    int fontbpl;   // bytes per line (char)
+    int fontzoomver; // size multiplier
+    int fontzoomhor; // size multiplier
+    unsigned char firstch;  // first ascii code present in font array (usually 32)
+    unsigned char lastch;   // last ascii code present in font array (usually 127)
+    bool auto_up;  // autoupdate flag for LCD
+    bool fontprop;
+    
+
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/Mono15x22.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,1842 @@
+// Save as: fonts/FONT_MONOSPACE_15x22_33_TO_126.h
+
+
+
+#ifndef FONT_MONOSPACE_15x22_33_TO_126_H
+
+#define FONT_MONOSPACE_15x22_33_TO_126_H
+
+
+
+// Size: 15x22
+
+// Chars: 33 to 126
+
+#ifdef TOOLCHAIN_GCC
+
+const unsigned char Mono15x22[] __attribute__((aligned (2))) = {
+
+#else     
+
+__align(2) 
+
+const unsigned char Mono15x22[] = {
+
+#endif        
+
+        2, 15, 22, 2 /*unused*/,
+
+	// byte/char, horz, vert, byte/vert
+
+
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ' '
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xcf, 0x01, 
+0xfc, 0xcf, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '!'
+
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '"'
+
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x18, 0x00, 
+0xc0, 0x18, 0x00, 
+0xc0, 0xd8, 0x01, 
+0xc0, 0xfc, 0x00, 
+0xc0, 0x1f, 0x00, 
+0xfc, 0x19, 0x00, 
+0xdc, 0x98, 0x01, 
+0xc0, 0xf8, 0x01, 
+0xc0, 0x3f, 0x00, 
+0xf8, 0x1b, 0x00, 
+0xfc, 0x18, 0x00, 
+0xc0, 0x18, 0x00, 
+0xc0, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '#'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xe0, 0xc1, 0x00, 
+0xf0, 0x83, 0x01, 
+0x38, 0x83, 0x01, 
+0x18, 0x86, 0x01, 
+0xfe, 0xff, 0x0f, 
+0x18, 0x86, 0x01, 
+0x18, 0xcc, 0x01, 
+0x30, 0xfc, 0x00, 
+0x00, 0x78, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '$'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x70, 0x00, 0x00, 
+0xf8, 0x04, 0x00, 
+0x8c, 0x05, 0x00, 
+0x04, 0x05, 0x00, 
+0x8c, 0x07, 0x00, 
+0xf8, 0x02, 0x00, 
+0x70, 0x72, 0x00, 
+0x00, 0xfa, 0x00, 
+0x00, 0x8d, 0x01, 
+0x00, 0x05, 0x01, 
+0x00, 0x8d, 0x01, 
+0x80, 0xf9, 0x00, 
+0x00, 0x70, 0x00, 
+0x00, 0x00, 0x00, //  Char '%'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3c, 0x00, 
+0x00, 0xfe, 0x00, 
+0x78, 0xe3, 0x00, 
+0xf8, 0xc1, 0x01, 
+0x8c, 0x83, 0x01, 
+0x0c, 0x87, 0x01, 
+0x0c, 0x8e, 0x01, 
+0x0c, 0xbc, 0x00, 
+0x0c, 0x70, 0x00, 
+0x00, 0xe0, 0x01, 
+0x00, 0xbe, 0x01, 
+0x00, 0x0e, 0x01, 
+0x00, 0x00, 0x00, //  Char '&'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '''
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x80, 0x3f, 0x00, 
+0xf0, 0xff, 0x01, 
+0x7c, 0xc0, 0x07, 
+0x0e, 0x00, 0x0e, 
+0x02, 0x00, 0x08, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '('
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x02, 0x00, 0x08, 
+0x0e, 0x00, 0x0e, 
+0x7c, 0xc0, 0x07, 
+0xf0, 0xff, 0x01, 
+0x80, 0x3f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ')'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x10, 0x02, 0x00, 
+0x20, 0x01, 0x00, 
+0x20, 0x01, 0x00, 
+0xc0, 0x00, 0x00, 
+0xfc, 0x0f, 0x00, 
+0xc0, 0x00, 0x00, 
+0x20, 0x01, 0x00, 
+0x20, 0x01, 0x00, 
+0x10, 0x02, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '*'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0xf0, 0xff, 0x00, 
+0xf0, 0xff, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '+'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x0c, 
+0x00, 0xc0, 0x0f, 
+0x00, 0xc0, 0x07, 
+0x00, 0xc0, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ','
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '-'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0xc0, 0x01, 
+0x00, 0xc0, 0x01, 
+0x00, 0xc0, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '.'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x04, 
+0x00, 0x00, 0x07, 
+0x00, 0xc0, 0x03, 
+0x00, 0xf0, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0x0f, 0x00, 
+0xe0, 0x01, 0x00, 
+0x78, 0x00, 0x00, 
+0x1c, 0x00, 0x00, 
+0x04, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '/'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 
+0xf0, 0x7f, 0x00, 
+0x38, 0xe0, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x80, 0x01, 
+0x38, 0xe0, 0x00, 
+0xf0, 0x7f, 0x00, 
+0xc0, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '0'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x18, 0x80, 0x01, 
+0x18, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '1'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x18, 0x80, 0x01, 
+0x1c, 0xc0, 0x01, 
+0x0c, 0xe0, 0x01, 
+0x0c, 0xb0, 0x01, 
+0x0c, 0xb8, 0x01, 
+0x0c, 0x9c, 0x01, 
+0x0c, 0x8e, 0x01, 
+0x18, 0x87, 0x01, 
+0xf8, 0x83, 0x01, 
+0xf0, 0x81, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '2'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x18, 0xc0, 0x00, 
+0x08, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x98, 0xc7, 0x00, 
+0xf8, 0xfd, 0x00, 
+0xf0, 0x78, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '3'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x38, 0x00, 
+0x00, 0x3c, 0x00, 
+0x00, 0x37, 0x00, 
+0x80, 0x31, 0x00, 
+0xe0, 0x30, 0x00, 
+0x38, 0x30, 0x00, 
+0x0c, 0x30, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x30, 0x00, 
+0x00, 0x30, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '4'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0xc0, 0x00, 
+0xfc, 0x83, 0x01, 
+0xfc, 0x81, 0x01, 
+0x8c, 0x81, 0x01, 
+0x8c, 0x81, 0x01, 
+0x8c, 0x81, 0x01, 
+0x8c, 0x81, 0x01, 
+0x0c, 0xc3, 0x00, 
+0x0c, 0xff, 0x00, 
+0x00, 0x3c, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '5'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x3f, 0x00, 
+0xf0, 0xff, 0x00, 
+0x78, 0xc6, 0x00, 
+0x1c, 0x82, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0xc7, 0x01, 
+0x18, 0xfe, 0x00, 
+0x00, 0x7c, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '6'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x01, 
+0x0c, 0xe0, 0x01, 
+0x0c, 0xf8, 0x00, 
+0x0c, 0x3e, 0x00, 
+0xcc, 0x07, 0x00, 
+0xfc, 0x01, 0x00, 
+0x7c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '7'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x70, 0x78, 0x00, 
+0xf8, 0xfc, 0x00, 
+0x9c, 0xc7, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x9c, 0xc7, 0x01, 
+0xf8, 0xfc, 0x00, 
+0x70, 0x78, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '8'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xf0, 0x01, 0x00, 
+0xf8, 0xc3, 0x00, 
+0x1c, 0x87, 0x01, 
+0x0c, 0x86, 0x01, 
+0x0c, 0x86, 0x01, 
+0x0c, 0x86, 0x01, 
+0x0c, 0xc2, 0x01, 
+0x18, 0xf3, 0x00, 
+0xf8, 0x7f, 0x00, 
+0xe0, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '9'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0xc1, 0x01, 
+0xc0, 0xc1, 0x01, 
+0xc0, 0xc1, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ':'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x0c, 
+0xc0, 0xc1, 0x0f, 
+0xc0, 0xc1, 0x07, 
+0xc0, 0xc1, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ';'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x0f, 0x00, 
+0x00, 0x0f, 0x00, 
+0x80, 0x19, 0x00, 
+0x80, 0x19, 0x00, 
+0x80, 0x10, 0x00, 
+0xc0, 0x30, 0x00, 
+0xc0, 0x30, 0x00, 
+0x40, 0x20, 0x00, 
+0x60, 0x60, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '<'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x33, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '='
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x60, 0x60, 0x00, 
+0x40, 0x20, 0x00, 
+0xc0, 0x30, 0x00, 
+0xc0, 0x30, 0x00, 
+0x80, 0x10, 0x00, 
+0x80, 0x19, 0x00, 
+0x80, 0x19, 0x00, 
+0x00, 0x0f, 0x00, 
+0x00, 0x0f, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '>'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x18, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0xce, 0x01, 
+0x0c, 0xcf, 0x01, 
+0x8c, 0x01, 0x00, 
+0xcc, 0x01, 0x00, 
+0xf8, 0x00, 0x00, 
+0x70, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '?'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x7f, 0x00, 
+0xc0, 0xff, 0x01, 
+0xe0, 0x80, 0x03, 
+0x30, 0x00, 0x06, 
+0x18, 0x3e, 0x04, 
+0x08, 0x7f, 0x08, 
+0x88, 0xc1, 0x08, 
+0x88, 0x80, 0x08, 
+0x88, 0x80, 0x08, 
+0x98, 0xc1, 0x08, 
+0xf0, 0xff, 0x00, 
+0xe0, 0xff, 0x00, 
+0x00, 0x00, 0x00, //  Char '@'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x80, 0x01, 
+0x00, 0xf8, 0x01, 
+0x80, 0x7f, 0x00, 
+0xf0, 0x1f, 0x00, 
+0xfc, 0x18, 0x00, 
+0xfc, 0x18, 0x00, 
+0xf0, 0x1f, 0x00, 
+0x80, 0x7f, 0x00, 
+0x00, 0xf8, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'A'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x9c, 0x83, 0x01, 
+0xf8, 0xc7, 0x01, 
+0xf0, 0xfc, 0x00, 
+0x00, 0x78, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'B'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 
+0xf0, 0x7f, 0x00, 
+0x38, 0xe0, 0x00, 
+0x18, 0xc0, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x18, 0xc0, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'C'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x18, 0xc0, 0x00, 
+0x38, 0xe0, 0x00, 
+0xf0, 0x7f, 0x00, 
+0xc0, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'D'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'E'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x03, 0x00, 
+0x0c, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'F'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 
+0xf0, 0x7f, 0x00, 
+0x38, 0xe0, 0x00, 
+0x1c, 0xc0, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x86, 0x01, 
+0x0c, 0x86, 0x01, 
+0x18, 0xfe, 0x00, 
+0x00, 0xfe, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'G'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x03, 0x00, 
+0x00, 0x03, 0x00, 
+0x00, 0x03, 0x00, 
+0x00, 0x03, 0x00, 
+0x00, 0x03, 0x00, 
+0x00, 0x03, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'H'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'I'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0xc0, 0x00, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0xc0, 0x01, 
+0xfc, 0xff, 0x00, 
+0xfc, 0x7f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'J'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x07, 0x00, 
+0x80, 0x03, 0x00, 
+0xc0, 0x07, 0x00, 
+0xe0, 0x0e, 0x00, 
+0x70, 0x3c, 0x00, 
+0x18, 0x70, 0x00, 
+0x0c, 0xe0, 0x01, 
+0x04, 0x80, 0x01, 
+0x00, 0x00, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'K'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'L'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x3c, 0x00, 0x00, 
+0xe0, 0x01, 0x00, 
+0x00, 0x0f, 0x00, 
+0x00, 0x0f, 0x00, 
+0xe0, 0x01, 0x00, 
+0x3c, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'M'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x3c, 0x00, 0x00, 
+0xf0, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 
+0x00, 0x1e, 0x00, 
+0x00, 0x78, 0x00, 
+0x00, 0xe0, 0x01, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'N'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xe0, 0x3f, 0x00, 
+0xf8, 0xff, 0x00, 
+0x38, 0xe0, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x38, 0xe0, 0x00, 
+0xf8, 0xff, 0x00, 
+0xe0, 0x3f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'O'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x1c, 0x07, 0x00, 
+0xf8, 0x03, 0x00, 
+0xf0, 0x01, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'P'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xe0, 0x3f, 0x00, 
+0xf8, 0x7f, 0x00, 
+0x38, 0xe0, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x0c, 0x80, 0x03, 
+0x38, 0xe0, 0x0e, 
+0xf8, 0x7f, 0x04, 
+0xe0, 0x3f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'Q'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x06, 0x00, 
+0x0c, 0x0e, 0x00, 
+0x18, 0x1f, 0x00, 
+0xf8, 0x7b, 0x00, 
+0xf0, 0xe0, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x01, 
+0x00, 0x00, 0x00, //  Char 'R'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xf0, 0xc0, 0x00, 
+0xf8, 0x81, 0x01, 
+0x9c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x83, 0x01, 
+0x0c, 0x86, 0x01, 
+0x0c, 0xc6, 0x01, 
+0x18, 0xfc, 0x00, 
+0x00, 0x78, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'S'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0xfc, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'T'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfc, 0x7f, 0x00, 
+0xfc, 0xff, 0x00, 
+0x00, 0xc0, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0xc0, 0x01, 
+0xfc, 0xff, 0x00, 
+0xfc, 0x7f, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'U'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0xfc, 0x00, 0x00, 
+0xf0, 0x0f, 0x00, 
+0x00, 0x7f, 0x00, 
+0x00, 0xf8, 0x01, 
+0x00, 0xf8, 0x01, 
+0x00, 0x7f, 0x00, 
+0xf0, 0x0f, 0x00, 
+0xfc, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'V'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x1c, 0x00, 0x00, 
+0xfc, 0x0f, 0x00, 
+0xe0, 0xff, 0x01, 
+0x00, 0xf8, 0x01, 
+0x00, 0xfc, 0x00, 
+0xc0, 0x0f, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x0f, 0x00, 
+0x00, 0xfc, 0x00, 
+0x00, 0xf8, 0x01, 
+0xe0, 0xff, 0x01, 
+0xfc, 0x0f, 0x00, 
+0x1c, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'W'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x04, 0x00, 0x01, 
+0x1c, 0xc0, 0x01, 
+0x3c, 0xf0, 0x00, 
+0xf0, 0x3c, 0x00, 
+0xc0, 0x0f, 0x00, 
+0xc0, 0x1f, 0x00, 
+0xf0, 0x7c, 0x00, 
+0x3c, 0xf0, 0x01, 
+0x1c, 0xc0, 0x01, 
+0x04, 0x00, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'X'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x04, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x3c, 0x00, 0x00, 
+0xf0, 0x00, 0x00, 
+0xc0, 0x01, 0x00, 
+0x80, 0xff, 0x01, 
+0x80, 0xff, 0x01, 
+0xc0, 0x01, 0x00, 
+0xf0, 0x00, 0x00, 
+0x3c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x04, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'Y'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x0c, 0x80, 0x01, 
+0x0c, 0xe0, 0x01, 
+0x0c, 0xf0, 0x01, 
+0x0c, 0xbc, 0x01, 
+0x0c, 0x8f, 0x01, 
+0x8c, 0x87, 0x01, 
+0xec, 0x81, 0x01, 
+0x7c, 0x80, 0x01, 
+0x3c, 0x80, 0x01, 
+0x0c, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'Z'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x0f, 
+0xfe, 0xff, 0x0f, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '['
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x04, 0x00, 0x00, 
+0x1c, 0x00, 0x00, 
+0x78, 0x00, 0x00, 
+0xe0, 0x01, 0x00, 
+0x80, 0x0f, 0x00, 
+0x00, 0x3e, 0x00, 
+0x00, 0xf0, 0x00, 
+0x00, 0xc0, 0x03, 
+0x00, 0x00, 0x07, 
+0x00, 0x00, 0x04, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '\'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0xfe, 0xff, 0x0f, 
+0xfe, 0xff, 0x0f, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char ']'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x80, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0x60, 0x00, 0x00, 
+0x38, 0x00, 0x00, 
+0x1c, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x1c, 0x00, 0x00, 
+0x38, 0x00, 0x00, 
+0x60, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0x80, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '^'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x30, 
+0x00, 0x00, 0x00, //  Char '_'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x01, 0x00, 0x00, 
+0x03, 0x00, 0x00, 
+0x06, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 
+0x08, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '`'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x70, 0x00, 
+0x80, 0xf9, 0x00, 
+0xc0, 0x9c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x00, 
+0xc0, 0x4d, 0x00, 
+0x80, 0xff, 0x01, 
+0x00, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'a'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x01, 
+0xfe, 0xff, 0x01, 
+0x80, 0xc1, 0x00, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0xc1, 0x01, 
+0x80, 0xff, 0x00, 
+0x00, 0x3e, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'b'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0xff, 0x00, 
+0x80, 0xc1, 0x00, 
+0xc0, 0xc1, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0x80, 0xc1, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'c'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0xff, 0x00, 
+0xc0, 0xc1, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0x80, 0xc1, 0x00, 
+0xfe, 0xff, 0x01, 
+0xfe, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'd'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0x7f, 0x00, 
+0x80, 0xcd, 0x00, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8d, 0x01, 
+0x80, 0x8f, 0x01, 
+0x00, 0xcf, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'e'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xf8, 0xff, 0x01, 
+0xfc, 0xff, 0x01, 
+0xc6, 0x00, 0x00, 
+0xc6, 0x00, 0x00, 
+0xc6, 0x00, 0x00, 
+0xc6, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'f'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0xff, 0x0c, 
+0x80, 0xc1, 0x19, 
+0xc0, 0x80, 0x19, 
+0xc0, 0x80, 0x19, 
+0xc0, 0x80, 0x19, 
+0xc0, 0x80, 0x19, 
+0x80, 0xc1, 0x0c, 
+0xc0, 0xff, 0x0f, 
+0xc0, 0xff, 0x07, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'g'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x01, 
+0xfe, 0xff, 0x01, 
+0x00, 0x01, 0x00, 
+0x80, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x01, 0x00, 
+0x80, 0xff, 0x01, 
+0x00, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'h'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc6, 0xff, 0x01, 
+0xc6, 0xff, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'i'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x18, 
+0xc0, 0x00, 0x18, 
+0xc0, 0x00, 0x18, 
+0xc0, 0x00, 0x18, 
+0xc6, 0xff, 0x0f, 
+0xc6, 0xff, 0x07, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'j'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x01, 
+0xfe, 0xff, 0x01, 
+0x00, 0x1c, 0x00, 
+0x00, 0x0e, 0x00, 
+0x00, 0x1f, 0x00, 
+0x80, 0x3b, 0x00, 
+0xc0, 0xf1, 0x00, 
+0xc0, 0xc0, 0x01, 
+0x40, 0x80, 0x01, 
+0x00, 0x00, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'k'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 
+0x06, 0x00, 0x00, 
+0x06, 0x00, 0x00, 
+0x06, 0x00, 0x00, 
+0xfe, 0x7f, 0x00, 
+0xfe, 0xff, 0x00, 
+0x00, 0xc0, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'l'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 
+0xc0, 0xff, 0x01, 
+0x80, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 
+0x80, 0xff, 0x01, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 
+0x80, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'm'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 
+0xc0, 0xff, 0x01, 
+0x00, 0x01, 0x00, 
+0x80, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x01, 0x00, 
+0x80, 0xff, 0x01, 
+0x00, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'n'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0xff, 0x00, 
+0x80, 0xc1, 0x00, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0x80, 0xc1, 0x00, 
+0x80, 0xff, 0x00, 
+0x00, 0x3e, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'o'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 
+0xc0, 0xff, 0x1f, 
+0x80, 0xc1, 0x00, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0xc1, 0x01, 
+0x80, 0xff, 0x00, 
+0x00, 0x3e, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'p'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0xff, 0x00, 
+0xc0, 0xc1, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0x80, 0xc1, 0x00, 
+0xc0, 0xff, 0x1f, 
+0xc0, 0xff, 0x1f, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'q'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 
+0xc0, 0xff, 0x01, 
+0x00, 0x03, 0x00, 
+0x80, 0x01, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0x80, 0x01, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'r'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0xc7, 0x00, 
+0x80, 0x87, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0x8c, 0x01, 
+0xc0, 0xdc, 0x01, 
+0x80, 0xf9, 0x00, 
+0x00, 0x70, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 's'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xf8, 0xff, 0x00, 
+0xf8, 0xff, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 't'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x7f, 0x00, 
+0xc0, 0xff, 0x00, 
+0x00, 0xc0, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x01, 
+0x00, 0x80, 0x00, 
+0x00, 0x40, 0x00, 
+0xc0, 0xff, 0x01, 
+0xc0, 0xff, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'u'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x40, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 
+0x80, 0x1f, 0x00, 
+0x00, 0xfc, 0x00, 
+0x00, 0xe0, 0x01, 
+0x00, 0xe0, 0x01, 
+0x00, 0xfc, 0x00, 
+0x80, 0x1f, 0x00, 
+0xc0, 0x03, 0x00, 
+0x40, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'v'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 
+0xc0, 0x0f, 0x00, 
+0x00, 0xff, 0x00, 
+0x00, 0xf0, 0x01, 
+0x00, 0xe0, 0x01, 
+0x00, 0x3c, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x3c, 0x00, 
+0x00, 0xe0, 0x01, 
+0x00, 0xf0, 0x01, 
+0x00, 0xff, 0x00, 
+0xc0, 0x0f, 0x00, 
+0xc0, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'w'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x40, 0x00, 0x01, 
+0xc0, 0x80, 0x01, 
+0xc0, 0xe1, 0x01, 
+0x80, 0x77, 0x00, 
+0x00, 0x3e, 0x00, 
+0x00, 0x3e, 0x00, 
+0x80, 0x77, 0x00, 
+0xc0, 0xe1, 0x01, 
+0xc0, 0x80, 0x01, 
+0x40, 0x00, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'x'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x40, 0x00, 0x00, 
+0xc0, 0x03, 0x18, 
+0x80, 0x0f, 0x18, 
+0x00, 0x3e, 0x1c, 
+0x00, 0xf0, 0x0f, 
+0x00, 0xf0, 0x03, 
+0x00, 0x7c, 0x00, 
+0x80, 0x0f, 0x00, 
+0xc0, 0x03, 0x00, 
+0x40, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'y'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xc0, 0x80, 0x01, 
+0xc0, 0xc0, 0x01, 
+0xc0, 0xe0, 0x01, 
+0xc0, 0xf8, 0x01, 
+0xc0, 0x9c, 0x01, 
+0xc0, 0x8e, 0x01, 
+0xc0, 0x87, 0x01, 
+0xc0, 0x83, 0x01, 
+0xc0, 0x81, 0x01, 
+0xc0, 0x80, 0x01, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char 'z'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x0e, 0x00, 
+0xfc, 0xff, 0x07, 
+0xfe, 0xf9, 0x0f, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '{'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x3f, 
+0xfe, 0xff, 0x3f, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '|'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0x06, 0x00, 0x0c, 
+0xfe, 0xf9, 0x0f, 
+0xfc, 0xff, 0x07, 
+0x00, 0x0e, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '}'
+ 
+
+	15,
+
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x0c, 0x00, 
+0x00, 0x06, 0x00, 
+0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, //  Char '~'
+ 
+
+};
+
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/Mono19x27.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,1920 @@
+// Save as: fonts/FONT_MONOSPACE_19x27_32_TO_126.h
+
+#ifndef FONT_MONOSPACE_19x27_32_TO_126_H
+#define FONT_MONOSPACE_19x27_32_TO_126_H
+
+// Size: 19x27
+// Chars: 32 to 126
+#ifdef TOOLCHAIN_GCC
+const unsigned char Mono19x27[] __attribute__((aligned (2))) = {
+#else     
+__align(2) 
+const unsigned char Mono19x27[] = {
+#endif        
+        3, 19, 27, 3 /*unused*/,
+	// byte/char, horz, vert, byte/vert
+
+	9,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ' ' 
+	7,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0x7f, 0x1c, 0x00, 
+0xfe, 0x7f, 0x1c, 0x00, 
+0xfe, 0x7f, 0x1c, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '!' 
+	11,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '"' 
+	17,
+0x00, 0xc0, 0x00, 0x00, 
+0x00, 0xc3, 0x00, 0x00, 
+0x00, 0xc3, 0x18, 0x00, 
+0x00, 0xc3, 0x1f, 0x00, 
+0x00, 0xf3, 0x0f, 0x00, 
+0x00, 0xff, 0x00, 0x00, 
+0xf0, 0xcf, 0x00, 0x00, 
+0xf8, 0xc3, 0x10, 0x00, 
+0x08, 0xc3, 0x1e, 0x00, 
+0x00, 0xe3, 0x1f, 0x00, 
+0x00, 0xff, 0x01, 0x00, 
+0xe0, 0xdf, 0x00, 0x00, 
+0xf8, 0xc3, 0x00, 0x00, 
+0x38, 0xc3, 0x00, 0x00, 
+0x00, 0xc3, 0x00, 0x00, 
+0x00, 0x03, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '#' 
+	17,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0x07, 0x0c, 0x00, 
+0xe0, 0x0f, 0x08, 0x00, 
+0xe0, 0x1f, 0x18, 0x00, 
+0x70, 0x1c, 0x18, 0x00, 
+0x30, 0x18, 0x18, 0x00, 
+0xfe, 0xff, 0xff, 0x01, 
+0x30, 0x30, 0x18, 0x00, 
+0x30, 0x30, 0x18, 0x00, 
+0x30, 0x70, 0x1c, 0x00, 
+0x60, 0xe0, 0x0f, 0x00, 
+0x60, 0xe0, 0x07, 0x00, 
+0x00, 0xc0, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '$' 
+	17,
+0x78, 0x00, 0x00, 0x00, 
+0xfc, 0x40, 0x00, 0x00, 
+0xce, 0x61, 0x00, 0x00, 
+0x86, 0x21, 0x00, 0x00, 
+0x86, 0x31, 0x00, 0x00, 
+0xce, 0x19, 0x00, 0x00, 
+0xfc, 0x08, 0x00, 0x00, 
+0x78, 0x8c, 0x07, 0x00, 
+0x00, 0xc4, 0x0f, 0x00, 
+0x00, 0xe6, 0x1c, 0x00, 
+0x00, 0x63, 0x18, 0x00, 
+0x00, 0x61, 0x18, 0x00, 
+0x80, 0xe1, 0x1c, 0x00, 
+0x80, 0xc0, 0x0f, 0x00, 
+0x00, 0x80, 0x07, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '%' 
+	17,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xf0, 0x01, 0x00, 
+0x00, 0xf8, 0x07, 0x00, 
+0x78, 0xfc, 0x0f, 0x00, 
+0xfc, 0x0f, 0x0e, 0x00, 
+0xfe, 0x07, 0x1c, 0x00, 
+0x8e, 0x1f, 0x18, 0x00, 
+0x06, 0x3e, 0x18, 0x00, 
+0x06, 0xfc, 0x18, 0x00, 
+0x06, 0xf0, 0x19, 0x00, 
+0x0c, 0xe0, 0x0f, 0x00, 
+0x00, 0x80, 0x07, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0x80, 0x1f, 0x00, 
+0x00, 0xf8, 0x1d, 0x00, 
+0x00, 0x78, 0x10, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '&' 
+	6,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0xfe, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ''' 
+	10,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xff, 0x00, 0x00, 
+0xe0, 0xff, 0x07, 0x00, 
+0xf8, 0xff, 0x1f, 0x00, 
+0x7e, 0x00, 0x7e, 0x00, 
+0x07, 0x00, 0xe0, 0x00, 
+0x01, 0x00, 0x80, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '(' 
+	10,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0x80, 0x00, 
+0x0f, 0x00, 0xf0, 0x00, 
+0x7e, 0x00, 0x7e, 0x00, 
+0xf8, 0xff, 0x1f, 0x00, 
+0xe0, 0xff, 0x07, 0x00, 
+0x00, 0xff, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ')' 
+	17,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x18, 0x06, 0x00, 0x00, 
+0x18, 0x06, 0x00, 0x00, 
+0x30, 0x03, 0x00, 0x00, 
+0x20, 0x01, 0x00, 0x00, 
+0xe0, 0x01, 0x00, 0x00, 
+0xfe, 0x1f, 0x00, 0x00, 
+0xfe, 0x1f, 0x00, 0x00, 
+0xe0, 0x01, 0x00, 0x00, 
+0x20, 0x01, 0x00, 0x00, 
+0x30, 0x03, 0x00, 0x00, 
+0x18, 0x06, 0x00, 0x00, 
+0x18, 0x06, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '*' 
+	17,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0xc0, 0xff, 0x0f, 0x00, 
+0xc0, 0xff, 0x0f, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '+' 
+	6,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0xc0, 0x01, 
+0x00, 0x00, 0xfe, 0x01, 
+0x00, 0x00, 0xfe, 0x00, 
+0x00, 0x00, 0x1e, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ',' 
+	11,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '-' 
+	5,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x1e, 0x00, 
+0x00, 0x00, 0x1e, 0x00, 
+0x00, 0x00, 0x1e, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '.' 
+	16,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x40, 0x00, 
+0x00, 0x00, 0x70, 0x00, 
+0x00, 0x00, 0x7e, 0x00, 
+0x00, 0x80, 0x3f, 0x00, 
+0x00, 0xe0, 0x0f, 0x00, 
+0x00, 0xf8, 0x03, 0x00, 
+0x00, 0x7e, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0xf0, 0x07, 0x00, 0x00, 
+0xfc, 0x01, 0x00, 0x00, 
+0x7e, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x02, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '/' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xfc, 0xff, 0x0f, 0x00, 
+0x3c, 0x00, 0x0f, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x3c, 0x00, 0x0f, 0x00, 
+0xf8, 0xff, 0x0f, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '0' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x18, 0x00, 
+0x0c, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '1' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x1c, 0x00, 0x18, 0x00, 
+0x0c, 0x00, 0x1c, 0x00, 
+0x0e, 0x00, 0x1e, 0x00, 
+0x06, 0x00, 0x1f, 0x00, 
+0x06, 0x80, 0x1b, 0x00, 
+0x06, 0xe0, 0x19, 0x00, 
+0x06, 0xf0, 0x18, 0x00, 
+0x06, 0xf8, 0x18, 0x00, 
+0x0e, 0x7c, 0x18, 0x00, 
+0x1c, 0x3e, 0x18, 0x00, 
+0xfc, 0x1f, 0x18, 0x00, 
+0xf8, 0x0f, 0x18, 0x00, 
+0xf0, 0x03, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '2' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x0c, 0x00, 
+0x0c, 0x00, 0x0c, 0x00, 
+0x0c, 0x00, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x0f, 0x1c, 0x00, 
+0x0c, 0x1f, 0x0e, 0x00, 
+0xfc, 0xf9, 0x0f, 0x00, 
+0xf8, 0xf9, 0x07, 0x00, 
+0xf0, 0xe0, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '3' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xe0, 0x00, 0x00, 
+0x00, 0xf8, 0x00, 0x00, 
+0x00, 0xdc, 0x00, 0x00, 
+0x00, 0xcf, 0x00, 0x00, 
+0xc0, 0xc3, 0x00, 0x00, 
+0xe0, 0xc0, 0x00, 0x00, 
+0x38, 0xc0, 0x00, 0x00, 
+0x1c, 0xc0, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0xc0, 0x00, 0x00, 
+0x00, 0xc0, 0x00, 0x00, 
+0x00, 0xc0, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '4' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x0c, 0x00, 
+0xfe, 0x07, 0x1c, 0x00, 
+0xfe, 0x03, 0x18, 0x00, 
+0xfe, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x07, 0x1c, 0x00, 
+0x06, 0x0e, 0x0e, 0x00, 
+0x06, 0xfe, 0x0f, 0x00, 
+0x06, 0xfc, 0x07, 0x00, 
+0x00, 0xf0, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '5' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0xff, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xf8, 0xff, 0x0f, 0x00, 
+0x7c, 0x0c, 0x0e, 0x00, 
+0x1c, 0x06, 0x1c, 0x00, 
+0x0e, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x03, 0x18, 0x00, 
+0x06, 0x07, 0x1c, 0x00, 
+0x06, 0x0f, 0x1e, 0x00, 
+0x06, 0xfe, 0x0f, 0x00, 
+0x0c, 0xfc, 0x07, 0x00, 
+0x00, 0xf8, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '6' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x10, 0x00, 
+0x06, 0x00, 0x1e, 0x00, 
+0x06, 0xc0, 0x1f, 0x00, 
+0x06, 0xf8, 0x0f, 0x00, 
+0x06, 0xfe, 0x01, 0x00, 
+0xc6, 0x7f, 0x00, 0x00, 
+0xfe, 0x0f, 0x00, 0x00, 
+0xfe, 0x01, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '7' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0xf0, 0xe0, 0x03, 0x00, 
+0xfc, 0xf9, 0x07, 0x00, 
+0xfc, 0xf9, 0x0f, 0x00, 
+0x0e, 0x1f, 0x0e, 0x00, 
+0x06, 0x0e, 0x1c, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x0e, 0x1c, 0x00, 
+0x0e, 0x1f, 0x0e, 0x00, 
+0xfc, 0xf9, 0x0f, 0x00, 
+0xfc, 0xf9, 0x07, 0x00, 
+0xf0, 0xe0, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '8' 
+	16,
+0x00, 0x00, 0x00, 0x00, 
+0xf0, 0x07, 0x00, 0x00, 
+0xf8, 0x0f, 0x0c, 0x00, 
+0xfc, 0x1f, 0x18, 0x00, 
+0x1e, 0x3c, 0x18, 0x00, 
+0x0e, 0x38, 0x18, 0x00, 
+0x06, 0x30, 0x18, 0x00, 
+0x06, 0x30, 0x18, 0x00, 
+0x06, 0x30, 0x1c, 0x00, 
+0x0e, 0x18, 0x0e, 0x00, 
+0x1c, 0x8c, 0x0f, 0x00, 
+0xfc, 0xff, 0x07, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xc0, 0x7f, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '9' 
+	5,
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0x07, 0x1e, 0x00, 
+0x80, 0x07, 0x1e, 0x00, 
+0x80, 0x07, 0x1e, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ':' 
+	5,
+0x00, 0x00, 0xc0, 0x01, 
+0x80, 0x07, 0xfe, 0x01, 
+0x80, 0x07, 0xfe, 0x00, 
+0x80, 0x07, 0x1e, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ';' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x38, 0x00, 0x00, 
+0x00, 0x38, 0x00, 0x00, 
+0x00, 0x7c, 0x00, 0x00, 
+0x00, 0x6c, 0x00, 0x00, 
+0x00, 0x6c, 0x00, 0x00, 
+0x00, 0xce, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0x83, 0x01, 0x00, 
+0x00, 0x83, 0x01, 0x00, 
+0x80, 0x83, 0x03, 0x00, 
+0x80, 0x01, 0x03, 0x00, 
+0x80, 0x01, 0x03, 0x00, 
+0xc0, 0x01, 0x07, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '<' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '=' 
+	15,
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0x01, 0x07, 0x00, 
+0x80, 0x01, 0x03, 0x00, 
+0x80, 0x01, 0x03, 0x00, 
+0x80, 0x83, 0x03, 0x00, 
+0x00, 0x83, 0x01, 0x00, 
+0x00, 0x83, 0x01, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0xc6, 0x00, 0x00, 
+0x00, 0x6c, 0x00, 0x00, 
+0x00, 0x6c, 0x00, 0x00, 
+0x00, 0x7c, 0x00, 0x00, 
+0x00, 0x38, 0x00, 0x00, 
+0x00, 0x38, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '>' 
+	13,
+0x00, 0x00, 0x00, 0x00, 
+0x18, 0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 0x00, 
+0x06, 0xf8, 0x1c, 0x00, 
+0x06, 0xfc, 0x1c, 0x00, 
+0x06, 0xff, 0x1c, 0x00, 
+0x06, 0x0f, 0x00, 0x00, 
+0xce, 0x07, 0x00, 0x00, 
+0xfc, 0x03, 0x00, 0x00, 
+0xfc, 0x01, 0x00, 0x00, 
+0xf0, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '?' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x03, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0xc0, 0x03, 0x3c, 0x00, 
+0xe0, 0x00, 0x70, 0x00, 
+0x70, 0x00, 0xe0, 0x00, 
+0x30, 0xf0, 0xc0, 0x00, 
+0x18, 0xfc, 0xc3, 0x00, 
+0x18, 0x0c, 0x83, 0x01, 
+0x18, 0x06, 0x86, 0x01, 
+0x18, 0x06, 0x86, 0x01, 
+0x18, 0x06, 0x86, 0x01, 
+0x30, 0x06, 0x86, 0x01, 
+0x70, 0x0c, 0xc3, 0x01, 
+0xe0, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x07, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '@' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0xfe, 0x0f, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0xfc, 0xdf, 0x00, 0x00, 
+0xfe, 0xc3, 0x00, 0x00, 
+0x3e, 0xc0, 0x00, 0x00, 
+0xfe, 0xc3, 0x00, 0x00, 
+0xfc, 0xdf, 0x00, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0x00, 0xfe, 0x0f, 0x00, 
+0x00, 0xe0, 0x1f, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'A' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x0e, 0x0f, 0x1c, 0x00, 
+0xfc, 0x1f, 0x0e, 0x00, 
+0xfc, 0xf9, 0x0f, 0x00, 
+0xf0, 0xf8, 0x07, 0x00, 
+0x00, 0xe0, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'B' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0x7f, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xf8, 0xff, 0x07, 0x00, 
+0x7c, 0x80, 0x0f, 0x00, 
+0x1c, 0x00, 0x0e, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x1c, 0x00, 0x0e, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'C' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x0c, 0x00, 0x0c, 0x00, 
+0x3c, 0x80, 0x0f, 0x00, 
+0xf8, 0xff, 0x07, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0x80, 0x7f, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'D' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x06, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'E' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x06, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'F' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0x7f, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xf8, 0xff, 0x07, 0x00, 
+0x7c, 0x00, 0x0f, 0x00, 
+0x1c, 0x00, 0x0c, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x18, 0x18, 0x00, 
+0x06, 0x18, 0x18, 0x00, 
+0x06, 0x18, 0x18, 0x00, 
+0x0e, 0xf8, 0x1f, 0x00, 
+0x1c, 0xf8, 0x0f, 0x00, 
+0x00, 0xf8, 0x0f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'G' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0x00, 0x06, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'H' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'I' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x0e, 0x00, 
+0x00, 0x00, 0x0c, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x1c, 0x00, 
+0xfe, 0xff, 0x0f, 0x00, 
+0xfe, 0xff, 0x0f, 0x00, 
+0xfe, 0xff, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'J' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x1e, 0x00, 0x00, 
+0x00, 0x0f, 0x00, 0x00, 
+0x80, 0x1f, 0x00, 0x00, 
+0xc0, 0x3f, 0x00, 0x00, 
+0xe0, 0xfc, 0x00, 0x00, 
+0x70, 0xf0, 0x01, 0x00, 
+0x38, 0xe0, 0x07, 0x00, 
+0x1c, 0x80, 0x0f, 0x00, 
+0x0e, 0x00, 0x1f, 0x00, 
+0x06, 0x00, 0x1c, 0x00, 
+0x02, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'K' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'L' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x1e, 0x00, 0x00, 0x00, 
+0xf8, 0x01, 0x00, 0x00, 
+0xc0, 0x0f, 0x00, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0x00, 0x3e, 0x00, 0x00, 
+0xc0, 0x0f, 0x00, 0x00, 
+0xf8, 0x01, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'M' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0xf8, 0x01, 0x00, 0x00, 
+0xc0, 0x07, 0x00, 0x00, 
+0x00, 0x3f, 0x00, 0x00, 
+0x00, 0xf8, 0x00, 0x00, 
+0x00, 0xe0, 0x07, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'N' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xfc, 0xff, 0x0f, 0x00, 
+0x3c, 0x00, 0x0f, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x3c, 0x00, 0x0f, 0x00, 
+0xfc, 0xff, 0x0f, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'O' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x18, 0x00, 0x00, 
+0x06, 0x18, 0x00, 0x00, 
+0x06, 0x18, 0x00, 0x00, 
+0x06, 0x18, 0x00, 0x00, 
+0x06, 0x18, 0x00, 0x00, 
+0x0e, 0x1c, 0x00, 0x00, 
+0x1c, 0x0e, 0x00, 0x00, 
+0xfc, 0x0f, 0x00, 0x00, 
+0xf8, 0x07, 0x00, 0x00, 
+0xf0, 0x03, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'P' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0xf0, 0xff, 0x03, 0x00, 
+0xfc, 0xff, 0x0f, 0x00, 
+0x3c, 0x00, 0x0f, 0x00, 
+0x0e, 0x00, 0x1c, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x06, 0x00, 0x38, 0x00, 
+0x0e, 0x00, 0x7c, 0x00, 
+0x3c, 0x00, 0xef, 0x01, 
+0xfc, 0xff, 0xcf, 0x00, 
+0xf0, 0xff, 0x83, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'Q' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x0c, 0x00, 0x00, 
+0x06, 0x0c, 0x00, 0x00, 
+0x06, 0x0c, 0x00, 0x00, 
+0x06, 0x1c, 0x00, 0x00, 
+0x06, 0x3c, 0x00, 0x00, 
+0x0e, 0xfe, 0x00, 0x00, 
+0xfc, 0xf7, 0x03, 0x00, 
+0xf8, 0xe3, 0x0f, 0x00, 
+0xf0, 0x81, 0x1f, 0x00, 
+0x00, 0x00, 0x1c, 0x00, 
+0x00, 0x00, 0x10, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'R' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xf0, 0x01, 0x0e, 0x00, 
+0xf8, 0x03, 0x0c, 0x00, 
+0xfc, 0x07, 0x1c, 0x00, 
+0x1c, 0x07, 0x18, 0x00, 
+0x0e, 0x0f, 0x18, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x06, 0x0e, 0x18, 0x00, 
+0x06, 0x1c, 0x1c, 0x00, 
+0x0e, 0x3c, 0x0e, 0x00, 
+0x0c, 0xfc, 0x0f, 0x00, 
+0x1c, 0xf8, 0x07, 0x00, 
+0x00, 0xe0, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'S' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'T' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xfe, 0xff, 0x03, 0x00, 
+0xfe, 0xff, 0x07, 0x00, 
+0xfe, 0xff, 0x0f, 0x00, 
+0x00, 0x00, 0x1c, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x1c, 0x00, 
+0xfe, 0xff, 0x0f, 0x00, 
+0xfe, 0xff, 0x07, 0x00, 
+0xfe, 0xff, 0x03, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'U' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0xfe, 0x03, 0x00, 0x00, 
+0xfc, 0x1f, 0x00, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0x00, 0xfe, 0x0f, 0x00, 
+0x00, 0xe0, 0x1f, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0xfe, 0x0f, 0x00, 
+0xc0, 0xff, 0x00, 0x00, 
+0xfc, 0x1f, 0x00, 0x00, 
+0xfe, 0x03, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'V' 
+	19,
+0x1e, 0x00, 0x00, 0x00, 
+0xfe, 0x07, 0x00, 0x00, 
+0xfe, 0xff, 0x03, 0x00, 
+0xf0, 0xff, 0x1f, 0x00, 
+0x00, 0xf8, 0x1f, 0x00, 
+0x00, 0xf0, 0x0f, 0x00, 
+0x80, 0xff, 0x00, 0x00, 
+0xc0, 0x07, 0x00, 0x00, 
+0xc0, 0x07, 0x00, 0x00, 
+0x80, 0xff, 0x00, 0x00, 
+0x00, 0xf0, 0x0f, 0x00, 
+0x00, 0xf8, 0x1f, 0x00, 
+0xf0, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x03, 0x00, 
+0xfe, 0x07, 0x00, 0x00, 
+0x1e, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'W' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x02, 0x00, 0x10, 0x00, 
+0x06, 0x00, 0x1c, 0x00, 
+0x1e, 0x00, 0x1e, 0x00, 
+0x3e, 0x80, 0x1f, 0x00, 
+0xfc, 0xe0, 0x07, 0x00, 
+0xf0, 0xf1, 0x03, 0x00, 
+0xe0, 0xff, 0x00, 0x00, 
+0x80, 0x3f, 0x00, 0x00, 
+0x80, 0x7f, 0x00, 0x00, 
+0xe0, 0xff, 0x00, 0x00, 
+0xf0, 0xf1, 0x03, 0x00, 
+0xfc, 0xc0, 0x07, 0x00, 
+0x3e, 0x80, 0x1f, 0x00, 
+0x1e, 0x00, 0x1e, 0x00, 
+0x06, 0x00, 0x18, 0x00, 
+0x02, 0x00, 0x10, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'X' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x02, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0x7e, 0x00, 0x00, 0x00, 
+0xf8, 0x01, 0x00, 0x00, 
+0xe0, 0x07, 0x00, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xfe, 0x1f, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0xe0, 0x07, 0x00, 0x00, 
+0xf8, 0x01, 0x00, 0x00, 
+0x7e, 0x00, 0x00, 0x00, 
+0x3e, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x02, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'Y' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x06, 0x00, 0x1c, 0x00, 
+0x06, 0x00, 0x1f, 0x00, 
+0x06, 0x80, 0x1f, 0x00, 
+0x06, 0xe0, 0x1f, 0x00, 
+0x06, 0xf8, 0x19, 0x00, 
+0x06, 0xfc, 0x18, 0x00, 
+0x06, 0x3f, 0x18, 0x00, 
+0xc6, 0x0f, 0x18, 0x00, 
+0xe6, 0x07, 0x18, 0x00, 
+0xfe, 0x01, 0x18, 0x00, 
+0x7e, 0x00, 0x18, 0x00, 
+0x3e, 0x00, 0x18, 0x00, 
+0x0e, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'Z' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '[' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x02, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x7e, 0x00, 0x00, 0x00, 
+0xfc, 0x01, 0x00, 0x00, 
+0xf0, 0x07, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0x00, 0x7e, 0x00, 0x00, 
+0x00, 0xf8, 0x03, 0x00, 
+0x00, 0xe0, 0x0f, 0x00, 
+0x00, 0x80, 0x3f, 0x00, 
+0x00, 0x00, 0x7e, 0x00, 
+0x00, 0x00, 0x70, 0x00, 
+0x00, 0x00, 0x40, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '\' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0x03, 0x00, 0xc0, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0xff, 0xff, 0xff, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char ']' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x80, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xe0, 0x00, 0x00, 0x00, 
+0x70, 0x00, 0x00, 0x00, 
+0x38, 0x00, 0x00, 0x00, 
+0x1e, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x0e, 0x00, 0x00, 0x00, 
+0x1e, 0x00, 0x00, 0x00, 
+0x38, 0x00, 0x00, 0x00, 
+0x70, 0x00, 0x00, 0x00, 
+0xe0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0x80, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '^' 
+	19,
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x06, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '_' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x01, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0x07, 0x00, 0x00, 0x00, 
+0x0c, 0x00, 0x00, 0x00, 
+0x08, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '`' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x80, 0x07, 0x00, 
+0x80, 0xe1, 0x0f, 0x00, 
+0x80, 0xe1, 0x1f, 0x00, 
+0xc0, 0x70, 0x1c, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x0c, 0x00, 
+0xc0, 0x31, 0x06, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xff, 0x1f, 0x00, 
+0x00, 0xfe, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'a' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0x80, 0x03, 0x0e, 0x00, 
+0x80, 0x01, 0x0c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x03, 0x1e, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'b' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x80, 0x07, 0x0e, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0x80, 0x01, 0x0c, 0x00, 
+0x00, 0x01, 0x04, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'c' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0xc0, 0x03, 0x1e, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0x80, 0x01, 0x0c, 0x00, 
+0x00, 0x03, 0x0e, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'd' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x80, 0x33, 0x0e, 0x00, 
+0xc0, 0x31, 0x1c, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x30, 0x18, 0x00, 
+0xc0, 0x31, 0x18, 0x00, 
+0xc0, 0x33, 0x08, 0x00, 
+0x80, 0x3f, 0x0c, 0x00, 
+0x00, 0x3f, 0x06, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'e' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x1f, 0x00, 
+0xfe, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xc7, 0x00, 0x00, 0x00, 
+0xc3, 0x00, 0x00, 0x00, 
+0xc3, 0x00, 0x00, 0x00, 
+0xc3, 0x00, 0x00, 0x00, 
+0xc3, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'f' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x03, 
+0xc0, 0x03, 0x1e, 0x06, 
+0xc0, 0x01, 0x1c, 0x06, 
+0xc0, 0x00, 0x18, 0x06, 
+0xc0, 0x00, 0x18, 0x06, 
+0xc0, 0x00, 0x18, 0x06, 
+0x80, 0x01, 0x0c, 0x07, 
+0x00, 0x03, 0x86, 0x03, 
+0xc0, 0xff, 0xff, 0x03, 
+0xc0, 0xff, 0xff, 0x01, 
+0xc0, 0xff, 0x7f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'g' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0x00, 0x03, 0x00, 0x00, 
+0x80, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x01, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xfe, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'h' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc7, 0xff, 0x1f, 0x00, 
+0xc7, 0xff, 0x1f, 0x00, 
+0xc7, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'i' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x06, 
+0xc0, 0x00, 0x00, 0x06, 
+0xc0, 0x00, 0x00, 0x06, 
+0xc0, 0x00, 0x00, 0x06, 
+0xc0, 0x00, 0x00, 0x07, 
+0xc7, 0xff, 0xff, 0x03, 
+0xc7, 0xff, 0xff, 0x03, 
+0xc7, 0xff, 0xff, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'j' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0xff, 0xff, 0x1f, 0x00, 
+0x00, 0xf0, 0x00, 0x00, 
+0x00, 0x78, 0x00, 0x00, 
+0x00, 0xfc, 0x00, 0x00, 
+0x00, 0xfe, 0x01, 0x00, 
+0x00, 0xef, 0x03, 0x00, 
+0x80, 0x87, 0x0f, 0x00, 
+0xc0, 0x03, 0x1f, 0x00, 
+0xc0, 0x01, 0x1e, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0x40, 0x00, 0x10, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'k' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0x03, 0x00, 
+0xff, 0xff, 0x0f, 0x00, 
+0xff, 0xff, 0x0f, 0x00, 
+0x00, 0x00, 0x1c, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'l' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x80, 0x01, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xff, 0x1f, 0x00, 
+0x80, 0x01, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'm' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x00, 0x03, 0x00, 0x00, 
+0x80, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x01, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x80, 0xff, 0x1f, 0x00, 
+0x00, 0xfe, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'n' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x80, 0x03, 0x0e, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0x80, 0x03, 0x0e, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'o' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0xff, 0x07, 
+0xc0, 0xff, 0xff, 0x07, 
+0xc0, 0xff, 0xff, 0x07, 
+0x80, 0x03, 0x0e, 0x00, 
+0x80, 0x01, 0x0c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x03, 0x1e, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'p' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0xfc, 0x01, 0x00, 
+0x00, 0xff, 0x07, 0x00, 
+0x80, 0xff, 0x0f, 0x00, 
+0xc0, 0x03, 0x1e, 0x00, 
+0xc0, 0x01, 0x1c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0x80, 0x01, 0x0c, 0x00, 
+0x00, 0x03, 0x0e, 0x00, 
+0xc0, 0xff, 0xff, 0x07, 
+0xc0, 0xff, 0xff, 0x07, 
+0xc0, 0xff, 0xff, 0x07, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'q' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x00, 0x03, 0x00, 0x00, 
+0x80, 0x01, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0x80, 0x01, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'r' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x0f, 0x0c, 0x00, 
+0x80, 0x1f, 0x0c, 0x00, 
+0x80, 0x3f, 0x18, 0x00, 
+0xc0, 0x39, 0x18, 0x00, 
+0xc0, 0x38, 0x18, 0x00, 
+0xc0, 0x78, 0x18, 0x00, 
+0xc0, 0x70, 0x18, 0x00, 
+0xc0, 0xf0, 0x1c, 0x00, 
+0xc0, 0xf0, 0x0f, 0x00, 
+0x80, 0xe1, 0x0f, 0x00, 
+0x00, 0xc0, 0x07, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 's' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0xfc, 0xff, 0x07, 0x00, 
+0xfc, 0xff, 0x0f, 0x00, 
+0xfc, 0xff, 0x1f, 0x00, 
+0xc0, 0x00, 0x1c, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 't' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0xff, 0x07, 0x00, 
+0xc0, 0xff, 0x0f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x1c, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x08, 0x00, 
+0x00, 0x00, 0x06, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x1f, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'u' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x40, 0x00, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0x80, 0xff, 0x00, 0x00, 
+0x00, 0xfc, 0x07, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0x80, 0x1f, 0x00, 
+0x00, 0x80, 0x1f, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0xfc, 0x07, 0x00, 
+0x80, 0xff, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 0x00, 
+0x40, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'v' 
+	19,
+0xc0, 0x00, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0xc0, 0xff, 0x01, 0x00, 
+0x00, 0xff, 0x1f, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0xf0, 0x03, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0x00, 0xf0, 0x03, 0x00, 
+0x00, 0x00, 0x1f, 0x00, 
+0x00, 0xf0, 0x1f, 0x00, 
+0x00, 0xff, 0x1f, 0x00, 
+0xc0, 0xff, 0x01, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0xc0, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'w' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x10, 0x00, 
+0x40, 0x00, 0x18, 0x00, 
+0xc0, 0x00, 0x1c, 0x00, 
+0xc0, 0x03, 0x1f, 0x00, 
+0xc0, 0x87, 0x0f, 0x00, 
+0x80, 0xdf, 0x07, 0x00, 
+0x00, 0xfe, 0x01, 0x00, 
+0x00, 0xfe, 0x01, 0x00, 
+0x80, 0xdf, 0x07, 0x00, 
+0xc0, 0x87, 0x0f, 0x00, 
+0xc0, 0x03, 0x1f, 0x00, 
+0xc0, 0x00, 0x1c, 0x00, 
+0x40, 0x00, 0x18, 0x00, 
+0x00, 0x00, 0x10, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'x' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x40, 0x00, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 0x06, 
+0xc0, 0x1f, 0x00, 0x06, 
+0x80, 0x7f, 0x00, 0x07, 
+0x00, 0xfe, 0xc3, 0x07, 
+0x00, 0xf0, 0xff, 0x03, 
+0x00, 0x80, 0xff, 0x01, 
+0x00, 0x80, 0x7f, 0x00, 
+0x00, 0xf0, 0x0f, 0x00, 
+0x00, 0xfe, 0x03, 0x00, 
+0x80, 0x7f, 0x00, 0x00, 
+0xc0, 0x1f, 0x00, 0x00, 
+0xc0, 0x03, 0x00, 0x00, 
+0x40, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'y' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xc0, 0x00, 0x1c, 0x00, 
+0xc0, 0x00, 0x1e, 0x00, 
+0xc0, 0x80, 0x1f, 0x00, 
+0xc0, 0xc0, 0x1f, 0x00, 
+0xc0, 0xf0, 0x1b, 0x00, 
+0xc0, 0xf8, 0x18, 0x00, 
+0xc0, 0x7e, 0x18, 0x00, 
+0xc0, 0x1f, 0x18, 0x00, 
+0xc0, 0x0f, 0x18, 0x00, 
+0xc0, 0x03, 0x18, 0x00, 
+0xc0, 0x01, 0x18, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char 'z' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0xfc, 0xff, 0x7f, 0x00, 
+0xfe, 0xe7, 0xff, 0x00, 
+0xff, 0xc3, 0xff, 0x01, 
+0x07, 0x00, 0xc0, 0x01, 
+0x03, 0x00, 0x80, 0x01, 
+0x03, 0x00, 0x80, 0x01, 
+0x03, 0x00, 0x80, 0x01, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '{' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0xff, 0xff, 0xff, 0x07, 
+0xff, 0xff, 0xff, 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, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '|' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x03, 0x00, 0x80, 0x01, 
+0x03, 0x00, 0x80, 0x01, 
+0x03, 0x00, 0x80, 0x01, 
+0x07, 0x00, 0xc0, 0x01, 
+0xff, 0xc3, 0xff, 0x01, 
+0xfe, 0xe7, 0xff, 0x00, 
+0xfc, 0xff, 0x7f, 0x00, 
+0x00, 0x3c, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '}' 
+	19,
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x70, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x18, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x60, 0x00, 0x00, 
+0x00, 0x30, 0x00, 0x00, 
+0x00, 0x38, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, 
+0x00, 0x00, 0x00, 0x00, //  Char '~' 
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/Protocols.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,163 @@
+ /* mbed UniGraphic library - Abstract protocol class
+ * Copyright (c) 2015 Giuliano Dianda
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+/** @file Protocols.h
+*/
+#ifndef Protocols_H
+#define Protocols_H
+
+#include "mbed.h"
+
+#define RGB24to16(r,g,b)  (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue
+#define BGR2RGB(color) (((color&0x1F)<<11) | (color&0x7E0) | ((color&0xF800)>>11))
+
+#define FLIP_NONE   0
+#define FLIP_X      1
+#define FLIP_Y      2
+
+//#define USE_CS
+
+/** Protocol types
+*/
+#include "platform.h"
+
+#if DEVICE_PORTINOUT
+enum proto_t {
+    PAR_8   /**< Parallel 8bit, port pins 0 to 7 */
+    ,PAR_16 /**< Parallel 16bit, port pins 0 to 15 */
+    ,BUS_8   /**< Parallel 8bit, scattered pins */
+    ,BUS_16   /**< Parallel 16bit, scattered pins */
+    ,SPI_8  /**< SPI 8bit */
+    ,SPI_16 /**< SPI 16bit */
+};
+#else 
+enum proto_t {
+    BUS_8   /**< Parallel 8bit, scattered pins */
+    ,BUS_16   /**< Parallel 16bit, scattered pins */
+    ,SPI_8  /**< SPI 8bit */
+    ,SPI_16 /**< SPI 16bit */
+};
+#endif
+
+
+/** Abstract interface class for spi and parallel protocols
+*/
+class Protocols
+{
+ public:
+    
+    /** Send 8bit command to display controller 
+    *
+    * @param cmd: byte to send  
+    *
+    */   
+    virtual void wr_cmd8(unsigned char cmd) = 0;
+    
+    /** Send 8bit data to display controller 
+    *
+    * @param data: byte to send   
+    *
+    */   
+    virtual void wr_data8(unsigned char data) = 0;
+    
+    /** Send 2x8bit command to display controller 
+    *
+    * @param cmd: halfword to send  
+    *
+    */   
+    virtual void wr_cmd16(unsigned short cmd) = 0;
+    
+    /** Send 2x8bit data to display controller 
+    *
+    * @param data: halfword to send   
+    *
+    */   
+    virtual void wr_data16(unsigned short data) = 0;
+    
+    /** Send 16bit pixeldata to display controller 
+    *
+    * @param data: halfword to send   
+    *
+    */   
+    virtual void wr_gram(unsigned short data) = 0;
+    
+    /** Send same 16bit pixeldata to display controller multiple times
+    *
+    * @param data: halfword to send
+    * @param count: how many
+    *
+    */   
+    virtual void wr_gram(unsigned short data, unsigned int count) = 0;
+    
+    /** Send array of pixeldata shorts to display controller
+    *
+    * @param data: unsigned short pixeldata array
+    * @param lenght: lenght (in shorts)
+    *
+    */   
+    virtual void wr_grambuf(unsigned short* data, unsigned int lenght) = 0;
+    
+    /** Read 16bit pixeldata from display controller (with dummy cycle)
+    *
+    * @param convert true/false. Convert 18bit to 16bit, some controllers returns 18bit
+    * @returns 16bit color
+    */ 
+    virtual unsigned short rd_gram(bool convert) = 0;
+    
+    /** Read 4x8bit register data (with dummy cycle)
+    * @param reg the register to read
+    * @returns data as uint
+    * 
+    */ 
+    virtual unsigned int rd_reg_data32(unsigned char reg) = 0;
+    
+    /** Read 3x8bit ExtendedCommands register data
+    * @param reg the register to read
+    * @param SPIreadenablecmd vendor/device specific cmd to read EXTC registers
+    * @returns data as uint
+    * @note EXTC regs (0xB0 to 0xFF) are read/write registers but needs special cmd to be read in SPI mode
+    */ 
+    virtual unsigned int rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd) = 0;
+    
+    /** ILI932x specific, does a dummy read cycle, number of bits is protocol dependent
+    * for PAR protocols: a signle RD bit toggle
+    * for SPI8: 8clocks
+    * for SPI16: 16 clocks
+    */   
+    virtual void dummyread () = 0;
+    
+    /** ILI932x specific, select register for a successive write or read
+    *
+    * @param reg register to be selected
+    * @param forread false = a write next (default), true = a read next
+    * @note forread only used by SPI protocols
+    */   
+    virtual void reg_select(unsigned char reg, bool forread =false) = 0;
+    
+    /** ILI932x specific, write register with data
+    *
+    * @param reg register to write
+    * @param data 16bit data
+    */   
+    virtual void reg_write(unsigned char reg, unsigned short data) = 0;
+    
+    /** ILI932x specific, read register
+    *
+    * @param reg register to be read
+    * @returns 16bit register value
+    */ 
+    virtual unsigned short reg_read(unsigned char reg) = 0;
+    
+    /** HW reset sequence (without display init commands)   
+    */
+    virtual void hw_reset() = 0;
+    
+    /** Set ChipSelect high or low
+    * @param enable 0/1   
+    */
+    virtual void BusEnable(bool enable) = 0;
+
+};
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/SPI8.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,209 @@
+ /* mbed UniGraphic library - SPI8 protocol class
+ * Copyright (c) 2015 Giuliano Dianda
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * Derived work of:
+ *
+ * mbed library for 240*320 pixel display TFT based on ILI9341 LCD Controller
+ * Copyright (c) 2013 Peter Drescher - DC2PD
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ 
+#include "SPI8.h"
+
+
+SPI8::SPI8(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC)
+    : _CS(CS), _spi(mosi, miso, sclk), _reset(reset), _DC(DC)
+{
+    _reset = 1;
+    _DC=1;
+    _CS=1;
+    _spi.format(8,0);                  // 8 bit spi mode 0
+    _spi.frequency(Hz);
+    hw_reset();    
+}
+
+void SPI8::wr_cmd8(unsigned char cmd)
+{     
+    _DC.write(0); // 0=cmd
+    _spi.write(cmd);      // write 8bit
+    _DC.write(1); // 1=data next
+}
+void SPI8::wr_data8(unsigned char data)
+{
+    _spi.write(data);    // write 8bit
+}
+
+void SPI8::wr_cmd16(unsigned short cmd)
+{
+    _DC.write(0); // 0=cmd
+    _spi.write(cmd>>8);      // write 8bit
+    _spi.write(cmd&0xFF);      // write 8bit
+    _DC.write(1); // 1=data next
+}
+void SPI8::wr_data16(unsigned short data)
+{
+    _spi.write(data>>8);    // write 8bit
+    _spi.write(data&0xFF);    // write 8bit
+}
+void SPI8::wr_gram(unsigned short data)
+{
+    _spi.write(data>>8);    // write 8bit
+    _spi.write(data&0xFF);    // write 8bit
+}
+void SPI8::wr_gram(unsigned short data, unsigned int count)
+{
+    if((data>>8)==(data&0xFF))
+    {
+        count<<=1;
+        while(count)
+        {
+            _spi.write(data);    // write 8bit
+            count--;
+        }
+    }
+    else
+    {
+        while(count)
+        {
+            _spi.write(data>>8);    // write 8bit
+            _spi.write(data&0xFF);    // write 8bit
+            count--;
+        }
+    }
+}
+void SPI8::wr_grambuf(unsigned short* data, unsigned int lenght)
+{
+    while(lenght)
+    {
+        _spi.write((*data)>>8);    // write 8bit
+        _spi.write((*data)&0xFF);    // write 8bit
+        data++;
+        lenght--;
+    }
+}
+unsigned short SPI8::rd_gram(bool convert)
+{
+    unsigned int r=0;
+    _spi.write(0); // whole first byte is dummy
+    r |= _spi.write(0);
+    r <<= 8;
+    r |= _spi.write(0);
+    if(convert)
+    {
+        r <<= 8;
+        r |= _spi.write(0);
+        // gram is 18bit/pixel, if you set 16bit/pixel (cmd 3A), during writing the 16bits are expanded to 18bit
+        // during reading, you read the raw 18bit gram
+        r = RGB24to16((r&0xFF0000)>>16, (r&0xFF00)>>8, r&0xFF);// 18bit pixel padded to 24bits, rrrrrr00_gggggg00_bbbbbb00, converted to 16bit
+    } 
+    _CS = 1; // force CS HIG to interupt the "read state"
+    _CS = 0;
+    return (unsigned short)r;
+}
+unsigned int SPI8::rd_reg_data32(unsigned char reg)
+{
+    wr_cmd8(reg);
+    unsigned int r=0;
+   
+    r |= _spi.write(0); // we get only 7bit valid, first bit was the dummy cycle
+    r <<= 8;
+    r |= _spi.write(0);
+    r <<= 8;
+    r |= _spi.write(0);
+    r <<= 8;
+    r |= _spi.write(0);
+    r <<= 1; // 32bits are aligned, now collecting bit_0
+    r |= (_spi.write(0) >> 7);
+    // we clocked 7 more bit so ILI waiting for 8th, we need to reset spi bus
+    _CS = 1; // force CS HIG to interupt the cmd
+    _CS = 0;
+    return r;
+}
+unsigned int SPI8::rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd)
+{
+    unsigned int r=0;
+    for(int regparam=1; regparam<4; regparam++) // when reading EXTC regs, first parameter is always dummy, so start with 1
+    {
+        wr_cmd8(SPIreadenablecmd);  // spi-in enable cmd, 0xD9 (ili9341) or 0xFB (ili9488) or don't know
+        wr_data8(0xF0|regparam);    // in low nibble specify which reg parameter we want
+        wr_cmd8(reg);               // now send cmd (select register we want to read)
+        r <<= 8;
+        r |= _spi.write(0);
+        // r = _spi.write(0) >> 8; for 16bit
+    }
+    _CS = 1; // force CS HIG to interupt the cmd
+    _CS = 0;
+    return r;
+}
+// ILI932x specific
+void SPI8::dummyread()
+{
+    _spi.write(0);    // dummy read
+}
+// ILI932x specific
+void SPI8::reg_select(unsigned char reg, bool forread)
+{
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    _spi.write(0x70);
+    _spi.write(0);    // write MSB
+    _spi.write(reg);    // write LSB
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    if(forread) _spi.write(0x73);
+    else _spi.write(0x72);
+}
+// ILI932x specific
+void SPI8::reg_write(unsigned char reg, unsigned short data)
+{
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    _spi.write(0x70);
+    _spi.write(0);    // write MSB
+    _spi.write(reg);    // write LSB
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    _spi.write(0x72);
+    _spi.write(data>>8);
+    _spi.write(data&0xFF);
+}
+// ILI932x specific
+unsigned short SPI8::reg_read(unsigned char reg)
+{
+    unsigned short r=0;
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    _spi.write(0x70);
+    _spi.write(0);    // write MSB
+    _spi.write(reg);    // write LSB
+    _CS = 1;    //fixme: really needed?
+    _CS = 0;    //fixme: really needed?
+    _spi.write(0x73);
+    _spi.write(0);    // dummy read
+    r = _spi.write(0);    // read 8bit
+    r <<= 8;
+    r |= _spi.write(0);    // read 8bit
+    return r;
+}
+void SPI8::hw_reset()
+{
+    wait_ms(15);
+    _DC = 1;
+    _CS = 1;
+    _reset = 0;                        // display reset
+    wait_ms(2);
+    _reset = 1;                       // end reset
+    wait_ms(100);
+}
+void SPI8::BusEnable(bool enable)
+{
+    _CS = enable ? 0:1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/SPI8.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,148 @@
+#ifndef SPI8_H
+#define SPI8_H
+
+#define NDEBUG // avoid MBED_ASSERT to halt process when PinName DC==NC
+
+#include "mbed.h"
+#include "Protocols.h"
+//#include "GraphicsDisplay.h"
+
+/** SPI 8bit interface
+*/
+class SPI8 : public Protocols
+{
+ public:
+
+    /** Create an SPI 8bit display interface with 3 control pins
+    *
+    * @param SPI mosi
+    * @param SPI miso
+    * @param SPI sclk
+    * @param CS pin connected to CS of display
+    * @param reset pin connected to RESET of display
+    * @param DC pin connected to data/command of display
+    */ 
+    SPI8(int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC=NC);
+ 
+protected:
+   
+    /** Send 8bit command to display controller 
+    *
+    * @param cmd: byte to send  
+    *
+    */   
+    virtual void wr_cmd8(unsigned char cmd);
+    
+    /** Send 8bit data to display controller 
+    *
+    * @param data: byte to send   
+    *
+    */   
+    virtual void wr_data8(unsigned char data);
+    
+    /** Send 2x8bit command to display controller 
+    *
+    * @param cmd: halfword to send  
+    */   
+    virtual void wr_cmd16(unsigned short cmd);
+    
+    /** Send 2x8bit data to display controller 
+    *
+    * @param data: halfword to send   
+    *
+    */   
+    virtual void wr_data16(unsigned short data);
+    
+    /** Send 16bit pixeldata to display controller 
+    *
+    * @param data: halfword to send   
+    *
+    */   
+    virtual void wr_gram(unsigned short data);
+    
+    /** Send same 16bit pixeldata to display controller multiple times
+    *
+    * @param data: halfword to send
+    * @param count: how many
+    *
+    */   
+    virtual void wr_gram(unsigned short data, unsigned int count);
+    
+    /** Send array of pixeldata shorts to display controller
+    *
+    * @param data: unsigned short pixeldata array
+    * @param lenght: lenght (in shorts)
+    *
+    */   
+    virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
+    
+    /** Read 16bit pixeldata from display controller (with dummy cycle)
+    *
+    * @param convert true/false. Convert 18bit to 16bit, some controllers returns 18bit
+    * @returns 16bit color
+    */ 
+    virtual unsigned short rd_gram(bool convert);
+    
+    /** Read 4x8bit register data (with dummy cycle)
+    * @param reg the register to read
+    * @returns data as uint
+    * 
+    */ 
+    virtual unsigned int rd_reg_data32(unsigned char reg);
+    
+    /** Read 3x8bit ExtendedCommands register data
+    * @param reg the register to read
+    * @param SPIreadenablecmd vendor/device specific cmd to read EXTC registers
+    * @returns data as uint
+    * @note EXTC regs (0xB0 to 0xFF) are read/write registers but needs special cmd to be read in SPI mode
+    */ 
+    virtual unsigned int rd_extcreg_data32(unsigned char reg, unsigned char SPIreadenablecmd);
+    
+    /** ILI932x specific, does a dummy read cycle, number of bits is protocol dependent
+    * for PAR protocols: a signle RD bit toggle
+    * for SPI8: 8clocks
+    * for SPI16: 16 clocks
+    */   
+    virtual void dummyread ();
+    
+    /** ILI932x specific, select register for a successive write or read
+    *
+    * @param reg register to be selected
+    * @param forread false = a write next (default), true = a read next
+    * @note forread only used by SPI protocols
+    */   
+    virtual void reg_select(unsigned char reg, bool forread =false);
+    
+    /** ILI932x specific, write register with data
+    *
+    * @param reg register to write
+    * @param data 16bit data
+    */   
+    virtual void reg_write(unsigned char reg, unsigned short data);
+    
+    /** ILI932x specific, read register
+    *
+    * @param reg register to be read
+    * @returns 16bit register value
+    */ 
+    virtual unsigned short reg_read(unsigned char reg);
+    
+    /** HW reset sequence (without display init commands)   
+    */
+    virtual void hw_reset();
+    
+    /** Set ChipSelect high or low
+    * @param enable 0/1   
+    */
+    virtual void BusEnable(bool enable);
+  
+    DigitalOut _CS;
+
+private:
+
+    SPI _spi;
+    DigitalOut _reset;
+    DigitalOut _DC;
+  
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/SSD1322.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,472 @@
+/* mbed UniGraphic library - Device specific class
+ * Copyright (c) 2015 Peter Drescher
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+  
+#include "platform.h"
+#include "SSD1322.h"
+
+//////////////////////////////////////////////////////////////////////////////////
+// display settings ///////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////
+
+#define IC_X_SEGS    480  // SSD1322 SEG has range 0-479 (479-0 if MX=1), check your datasheet, important for the orientation
+#define IC_Y_COMS    128  // SSD1322 COM has range 0-127 (127-0 if MY=1), check your datasheet, important for the orientation
+#define BPP 4             // SSD1322 has 16 gray levels
+
+#define SSD1322_CMD_ENABLE_GRAY_SCALE_TABLE	0x00
+#define SSD1322_CMD_SET_COLUMN_ADDR		0x15
+#define SSD1322_CMD_WRITE_RAM			0x5C
+#define SSD1322_CMD_READ_RAM			0x5D
+#define SSD1322_CMD_SET_ROW_ADDR		0x75
+#define SSD1322_CMD_SET_REMAP			0xA0
+#define SSD1322_CMD_SET_DISPLAY_START_LINE	0xA1
+#define SSD1322_CMD_SET_DISPLAY_OFFSET		0xA2
+#define SSD1322_CMD_SET_DISPLAY_MODE_OFF	0xA4
+#define SSD1322_CMD_SET_DISPLAY_MODE_ON		0xA5
+#define SSD1322_CMD_SET_DISPLAY_MODE_NORMAL	0xA6
+#define SSD1322_CMD_SET_DISPLAY_MODE_INVERSE	0xA7
+#define SSD1322_CMD_ENABLE_PARTIAL_DISPLAY	0xA8
+#define SSD1322_CMD_EXIT_PARTIAL_DISPLAY	0xA9
+#define SSD1322_CMD_SET_FUNCTION_SELECTION	0xAB
+#define SSD1322_CMD_SET_DISPLAY_OFF		0xAE
+#define SSD1322_CMD_SET_DISPLAY_ON		0xAF
+#define SSD1322_CMD_SET_PHASE_LENGTH		0xB1
+#define SSD1322_CMD_SET_CLOCK_DIVIDER		0xB3
+#define SSD1322_CMD_DISPLAY_ENHANCEMENT		0xB4
+#define SSD1322_CMD_SET_GPIO			0xB5
+#define SSD1322_CMD_SET_SECOND_PRECHARGE_PERIOD	0xB6
+#define SSD1322_CMD_SET_GRAY_SCALE_TABLE	0xB8
+#define SSD1322_CMD_SET_DEFAULT_LINEAR_GRAY_SCALE_TABLE	0xB9
+#define SSD1322_CMD_SET_PRECHARGE_VOLTAGE	0xBB
+#define SSD1322_CMD_SET_VCOMH_VOLTAGE		0xBE
+#define SSD1322_CMD_SET_CONTRAST_CURRENT	0xC1
+#define SSD1322_CMD_MASTER_CURRENT_CONTROL	0xC7
+#define SSD1322_CMD_SET_MULTIPLEX_RATIO		0xCA
+#define SSD1322_CMD_DISPLAY_ENHANCEMENT_B	0xD1
+#define SSD1322_CMD_SET_COMMAND_LOCK		0xFD
+
+// set for some OLED displays 
+//#define ALTERNATE_OLED_VERSION
+
+
+static const uint8_t oledInit[] = {
+    SSD1322_CMD_SET_COMMAND_LOCK,            1, 0x12, /* Unlock OLED driver IC*/
+    SSD1322_CMD_SET_DISPLAY_OFF,             0,
+    SSD1322_CMD_SET_CLOCK_DIVIDER,           1, 0x91,
+    SSD1322_CMD_SET_MULTIPLEX_RATIO,         1, 0x3F, /*duty = 1/64*,64 COMS are enabled*/
+    SSD1322_CMD_SET_DISPLAY_OFFSET,          1, 0x00,
+    SSD1322_CMD_SET_DISPLAY_START_LINE,      1, 0x00, /*set start line position*/
+    SSD1322_CMD_SET_REMAP,                   2, 0x14, // Horizontal address increment,
+                                                      // Disable Column Address Re-map,
+					              // Enable Nibble Re-map,Scan from COM[N-1] to COM0,
+					              // Disable COM Split Odd Even
+                                                0x11, // Enable Dual COM mode
+    SSD1322_CMD_SET_GPIO, 		     1, 0x00,
+    SSD1322_CMD_SET_FUNCTION_SELECTION,      1, 0x01, /* selection external VDD */
+    SSD1322_CMD_DISPLAY_ENHANCEMENT,         2, 0xA0, /* enables the external VSL*/
+                                                0xfd, /* 0xfd,Enhanced low GS display quality;default is 0xb5(normal),*/
+    SSD1322_CMD_SET_CONTRAST_CURRENT,        1, 0xff, /* default is 0x7f*/
+    SSD1322_CMD_MASTER_CURRENT_CONTROL,      1, 0x0f,
+    /* writeCommand(0xB9); GRAY TABLE,linear Gray Scale*/
+    SSD1322_CMD_SET_PHASE_LENGTH,            1, 0xE2,  /*default is 0x74*/
+    SSD1322_CMD_DISPLAY_ENHANCEMENT_B,       2, 0x82, 0x20,
+#ifdef ALTERNATE_OLED_VERSION
+    SSD1322_CMD_SET_PRECHARGE_VOLTAGE,       1, 0x08, /* 0.3xVcc */
+    SSD1322_CMD_SET_SECOND_PRECHARGE_PERIOD, 1, 0x0F, /* 15 clocks */
+#else
+    SSD1322_CMD_SET_PRECHARGE_VOLTAGE,       1, 0x1F, /* 0.6xVcc */
+    SSD1322_CMD_SET_SECOND_PRECHARGE_PERIOD, 1, 0x08, /* default */
+#endif
+    SSD1322_CMD_SET_VCOMH_VOLTAGE,           1, 0x07, /*0.86xVcc;default is 0x04*/
+    SSD1322_CMD_SET_DISPLAY_MODE_NORMAL,     0,
+    SSD1322_CMD_SET_DISPLAY_ON,              0
+};
+
+
+////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////
+
+
+//#include "mbed_debug.h"
+
+#define SWAP(a, b)  { a ^= b; b ^= a; a ^= b; }
+
+
+SSD1322::SSD1322(proto_t displayproto,
+		 int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC,
+		 const char *name,
+		 const unsigned int lcdsize_x, const unsigned int lcdsize_y) 
+    : GraphicsDisplay(name),
+      screensize_X(lcdsize_x), screensize_Y(lcdsize_y),
+      _BPP(BPP), _PAGES(lcdsize_y/8*BPP),
+      _IC_X_SEGS(IC_X_SEGS), _IC_Y_COMS(IC_Y_COMS), _IC_PAGES(IC_Y_COMS/8*BPP)
+{
+  proto = new SPI8(Hz, mosi, miso, sclk, CS, reset, DC);
+  buffer = (unsigned char*) malloc (screensize_X*_PAGES);
+  set_auto_up(false);
+  foreground(0xFFFF);
+  background(0x0000);
+  hw_reset();
+  bus_enable(true);
+  init();
+  set_orientation(1);
+  cls();
+  locate(0,0);
+}
+
+SSD1322::~SSD1322()
+{
+  free(buffer);
+}
+
+void SSD1322::wr_cmd8(unsigned char cmd)
+{
+  proto->wr_cmd8(cmd);
+}
+
+void SSD1322::wr_data8(unsigned char data)
+{
+  proto->wr_data8(data);
+}
+
+void SSD1322::wr_cmd16(unsigned short cmd)
+{
+  proto->wr_cmd16(cmd);
+}
+
+void SSD1322::wr_gram(unsigned short data, unsigned int count)
+{
+  proto->wr_gram(data, count);
+}
+
+void SSD1322::wr_grambuf(unsigned short* data, unsigned int lenght)
+{
+  proto->wr_grambuf(data, lenght);
+}
+
+void SSD1322::hw_reset()
+{
+  proto->hw_reset();
+}
+
+void SSD1322::bus_enable(bool enable)
+{
+  proto->BusEnable(enable);
+}
+
+
+
+// monochrome SSD1322 driver ICs does not have ram rotate in hw (swap raw<->columns) like TFT displays
+// for portrait views, XY swap will be done in sw in pixel() function
+void SSD1322::set_orientation(int o)
+{
+    orientation = o;
+    if (o & 0x01) {
+      set_width(screensize_X);
+      set_height(screensize_Y);
+    } else {
+      set_width(screensize_Y);
+      set_height(screensize_X);
+    }      
+    switch (o) {
+    case (0):// portrait view -90°
+      mirrorXY(Y);
+      break;
+    case (1): // default, landscape view 0°
+      mirrorXY(NONE);
+      break;
+    case (2):// portrait view +90°
+      mirrorXY(X);
+      break;
+    case (3):// landscape view +180°
+      mirrorXY(XY);
+      break;
+    }
+}
+
+void SSD1322::mirrorXY(mirror_t mode)
+{
+  // Horizontal address increment,
+  // Disable Column Address Re-map,
+  // Enable Nibble Re-map,Scan from COM[N-1] to COM0,
+  // Disable COM Split Odd Even
+  // Enable Dual COM mode
+  unsigned char d;
+  switch (mode)
+    {
+    case(NONE):
+      d = 0x14;
+      break;
+    case(X):
+      d = 0x10;
+      break;
+    case(Y):
+      d = 0x16;
+      break;
+    case(XY):
+      d = 0x12;
+      break;	    
+    }
+  wr_cmd8(SSD1322_CMD_SET_REMAP); 
+  wr_data8(d);
+  wr_data8(0x11); 
+}
+
+void SSD1322::invert(unsigned char o)
+{
+    if(o == 0) wr_cmd8(0xA6);
+    else wr_cmd8(0xA7);
+}
+
+void SSD1322::set_contrast(int o)
+{
+    contrast = o;
+
+    wr_cmd8(SSD1322_CMD_SET_CONTRAST_CURRENT);
+    wr_data8(o&0xFF);
+}
+
+int SSD1322::get_contrast(void)
+{
+    return(contrast);
+}
+void SSD1322::window(int x, int y, int w, int h) {
+    // current pixel location
+    cur_x = x;
+    cur_y = y;
+    // window settings
+    win_x1 = x;
+    win_x2 = x + w - 1;
+    win_y1 = y;
+    win_y2 = y + h - 1;
+}
+void SSD1322::window_pushpixel(unsigned short color) {
+    pixel(cur_x, cur_y, color);
+    cur_x++;
+    if(cur_x > win_x2) {
+        cur_x = win_x1;
+        cur_y++;
+        if(cur_y > win_y2) {
+            cur_y = win_y1;
+        }
+    }
+}
+void SSD1322::window_pushpixel(unsigned short color, unsigned int count) {
+    while(count)
+    {
+        pixel(cur_x, cur_y, color);
+        cur_x++;
+        if(cur_x > win_x2)
+        {
+            cur_x = win_x1;
+            cur_y++;
+            if(cur_y > win_y2)
+            {
+                cur_y = win_y1;
+            }
+        }
+        count--;
+    }
+}
+void SSD1322::window_pushpixelbuf(unsigned short* color, unsigned int lenght) {
+    while(lenght)
+    {
+        pixel(cur_x, cur_y, *color++);
+        cur_x++;
+        if(cur_x > win_x2)
+        {
+            cur_x = win_x1;
+            cur_y++;
+            if(cur_y > win_y2)
+            {
+                cur_y = win_y1;
+            }
+        }
+        lenght--;
+    }
+}
+
+unsigned short SSD1322::pixelpos(int x, int y)
+{
+    if(!(orientation&1)) SWAP(x,y);
+    // first check parameter
+    if((x >= screensize_X) || (y >= screensize_Y)) return 0;
+
+    unsigned short page = y * _BPP / 8;
+    return (x + page*screensize_X);
+}
+
+void SSD1322::pixel(int x, int y, unsigned short color)
+{
+    if(!(orientation&1)) SWAP(x,y);
+    // first check parameter
+    if((x >= screensize_X) || (y >= screensize_Y)) return;
+
+    /*
+    unsigned short page = y * _BPP / 8;
+    unsigned char pos = y & ((8 / _BPP) - 1); // position in page
+    unsigned char mask = (( 1 << _BPP) - 1);
+
+    buffer[(x + page*screensize_X)] = (buffer[(x + page*screensize_X)] & ~(mask<<(pos*_BPP))) | ((color&mask)<<(pos*_BPP));
+    */
+
+    unsigned char cval = buffer[(y*128) + x/2];
+    if (x&1) {
+      cval = (cval & 0xF0) | (color & 0x0F);
+    } else {
+      cval = (cval & 0x0F) | (color & 0x0F)<<4;
+    }
+    buffer[(y*128) + x/2] = cval;
+}
+
+unsigned short SSD1322::pixelread(int x, int y)
+{
+    if(!(orientation&1)) SWAP(x,y);
+    // first check parameter
+    if((x >= screensize_X) || (y >= screensize_Y)) return 0;
+
+    unsigned short page = y * _BPP / 8;
+    unsigned char pos = y & ((8 / _BPP) - 1); // position in page
+    unsigned char mask = (( 1 << _BPP) - 1);
+
+    //FAUX
+    return (buffer[(x + page*screensize_X)]); // = (buffer[(x + page*screensize_X)] & ~(mask<<(pos*_BPP))) | ((color&mask)<<(pos*_BPP));
+}
+
+
+
+// Set row address 0~32
+void SSD1322::set_row_address(unsigned char add)
+{
+  wr_cmd8(SSD1322_CMD_SET_ROW_ADDR);
+  add &= 0x3F;
+  wr_data8(add);
+  wr_data8(0x3F);
+}
+
+// Set col address 0~64  for Gray mode)
+void SSD1322::set_column_address(unsigned char add)
+{
+  wr_cmd8(SSD1322_CMD_SET_COLUMN_ADDR);
+  add &= 0x3F;
+  wr_data8(0x1c+add); // where does this 0x1C (28) comes from???
+  wr_data8(0x5b); // this 0x5B (91) seems 28+64 (-1)
+}
+
+void SSD1322::copy_to_lcd(void)
+{
+  unsigned int i;
+  unsigned char x, y;
+
+  set_row_address(0);
+  set_column_address(0);
+
+  i = 0;
+  wr_cmd8(SSD1322_CMD_WRITE_RAM);
+  for(y=0; y<64; y++) 
+    for(x=0; x<128; x++) 
+      wr_data8(buffer[i++]);
+}
+
+unsigned long SSD1322::buffaddr(unsigned int i)
+{
+  return (unsigned long) &(buffer[i]);
+}
+
+void SSD1322::clrbuff(const unsigned char value)
+{
+  memset(buffer, value, screensize_X*_PAGES);
+}
+
+void SSD1322::fills(const unsigned char value)
+{
+clrbuff(value);
+copy_to_lcd();
+}
+
+void SSD1322::cls(void)
+{
+clrbuff();
+copy_to_lcd();
+}
+
+//void ll_fill(const unsigned char value=0xFF, const unsigned char w=0x78, const unsigned char=0x80);
+void SSD1322::ll_fill(const unsigned char value, const unsigned char w, const unsigned char h)
+{
+  unsigned short x,y;
+  //w = 0x78; // 120 x 2px by byte => 240px
+  //h = 0x80; // 0x80 for 64 rows because 2 COMs mode
+  
+  wr_cmd8(0x15); // COL ADDR
+  wr_data8(0x00); 
+  wr_data8(w-1);
+  
+  wr_cmd8(0x75); // ROW ADDR
+  wr_data8(0x00);
+  wr_data8(h-1);
+  
+  wr_cmd8(0x5C); // WRITE RAM
+  for(y=0; y<h/2; y++)
+    {
+      for(x=0; x<2*w; x++)
+	{
+	  if ((y==0) | (y==(h/2-1)))
+	    wr_data8(0xFF);
+	  else if (x == 56) // ????
+	    wr_data8(0xF2); 
+	  else if (x == 183)
+	    //else if (x == (2*w-1))
+	    wr_data8(0x2F);
+	  else if ((x%10) == 0)
+	    wr_data8(0x55);
+	  else if ((x%5) == 0)
+	    wr_data8(0x33);
+	  else
+	    wr_data8(0x22);
+	}
+    }
+}
+
+int SSD1322::sizeX()
+{
+    return screensize_X;
+}
+int SSD1322::sizeY()
+{
+    return screensize_Y;
+}
+
+// reset and init the lcd controller
+void SSD1322::init()
+{
+    /* Start Initial Sequence ----------------------------------------------------*/
+    for (uint16_t ind=0; ind < sizeof(oledInit); ) {
+	wr_cmd8(oledInit[ind++]);
+	uint8_t dataSize = oledInit[ind++];
+	while (dataSize--) {
+	    wr_data8(oledInit[ind++]);
+	}
+    }
+ }
+
+void SSD1322::loop_event(void) {
+  if (loop_pos >= 64)
+    loop_pos = 0;
+  set_row_address(loop_pos);
+  set_column_address(0);
+  wr_cmd8(SSD1322_CMD_WRITE_RAM);
+
+  for(uint8_t i=0; i<128; i++)
+    wr_data8(buffer[loop_pos*64+i]);	
+}
+  
+void SSD1322::start_loop(float tick) {
+  loop_pos = 0;
+  bah.attach(this, &SSD1322::loop_event, tick);
+}
+
+void SSD1322::stop_loop() {
+  bah.detach();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/SSD1322.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,244 @@
+#ifndef MBED_SSD1322_H
+#define MBED_SSD1322_H
+
+#include "mbed.h"
+
+#include "SPI8.h"
+
+#include "Protocols.h"
+#include "GraphicsDisplay.h"
+
+/** Mirror mode */
+enum mirror_t {X,Y,XY,NONE};
+
+/** A common base class for monochrome Display
+*/
+class SSD1322 : public GraphicsDisplay
+{
+
+public:         
+
+  
+    /** Create a monochrome SSD1322 SPI interface
+    * @param name The name used by the parent class to access the interface
+    */
+    SSD1322(proto_t displayproto,
+	    int Hz, PinName mosi, PinName miso, PinName sclk, PinName CS, PinName reset, PinName DC,
+	    const char* name,
+	    const unsigned int lcdsize_x=128, const unsigned int lcdsize_y=64);
+    
+    /** Destructor
+    * will free framebuffer
+    */
+    virtual ~SSD1322();
+    
+
+    
+/////// functions that come for free, but can be overwritten///////////////////////////////////////////////////
+/////// ----------------------------------------------------///////////////////////////////////////////////////
+
+    /** Draw a pixel in the specified color.
+    * @param x is the horizontal offset to this pixel.
+    * @param y is the vertical offset to this pixel.
+    * @param color defines the color for the pixel.
+    */
+    virtual void pixel(int x, int y, unsigned short color);
+
+    /** Set the window, which controls where items are written to the screen.
+    * When something hits the window width, it wraps back to the left side
+    * and down a row. If the initial write is outside the window, it will
+    * be captured into the window when it crosses a boundary.
+    * @param x is the left edge in pixels.
+    * @param y is the top edge in pixels.
+    * @param w is the window width in pixels.
+    * @param h is the window height in pixels.
+    */
+    virtual void window(int x, int y, int w, int h);
+    
+    /** Read pixel color at location
+    * @param x is the horizontal offset to this pixel.
+    * @param y is the vertical offset to this pixel.
+    * @returns 16bit color, 0000=Black(pixel set), FFFF=White(pixel clear).
+    */
+    virtual unsigned short pixelread(int x, int y);
+
+    /** Push a single pixel into the window and increment position.
+    * You must first call window() then push pixels in loop.
+    * @param color is the pixel color.
+    */
+    virtual void window_pushpixel(unsigned short color);
+    
+    /** Push some pixels of the same color into the window and increment position.
+    * You must first call window() then push pixels.
+    * @param color is the pixel color.
+    * @param count: how many
+    */
+    virtual void window_pushpixel(unsigned short color, unsigned int count);
+    
+    /** Push array of pixel colors into the window and increment position.
+    * You must first call window() then push pixels.
+    * @param color is the pixel color.
+    */
+    virtual void window_pushpixelbuf(unsigned short* color, unsigned int lenght);
+ 
+    /** Framebuffer is used, it needs to be sent to SSD1322 from time to time
+    */
+    virtual void copy_to_lcd();
+    
+    /** set the contrast of the screen
+      *
+      * @param o contrast 0-63
+      * @note may be overrided in case of not standard command
+      */
+    virtual void set_contrast(int o);
+
+    /** read the contrast level
+      *
+      */
+    int get_contrast(void);
+
+    /** display inverted colors
+      *
+      * @param o = 0 normal, 1 invert
+      */
+    void invert(unsigned char o);
+
+    /** clear the entire screen
+    * The inherited one sets windomax then fill with background color
+    * We override it to speedup
+    */
+    virtual void cls();
+    
+    /** Set the orientation of the screen
+    *  x,y: 0,0 is always top left 
+    *
+    * @param o direction to use the screen (0-3)
+    * 0 = -90°
+    * 1 = default 0°
+    * 2 = +90°
+    * 3 = +180°
+    *
+    */  
+    void set_orientation(int o);
+    
+    /** Set ChipSelect high or low
+    * @param enable 0/1   
+    */
+    virtual void bus_enable(bool enable);
+    
+    /** get display X size in pixels (native, orientation independent)
+    * @returns X size in pixels
+    */
+    int sizeX();
+
+    /** get display Y size in pixels (native, orientation independent)
+    * @returns Y size in pixels
+    */
+    int sizeY();
+    
+////////////////////////////////////////////////////////////////////////////////    
+    // not implemented yet
+//////////////////////////////////////////////////////////////////
+  //  virtual unsigned short pixelread(int x, int y){return 0;};
+    virtual void window4read(int x, int y, int w, int h){};
+    void setscrollarea (int startY, int areasize){};
+    void scroll (int lines){};
+    void scrollreset(){};
+    void FastWindow(bool enable){};
+
+    unsigned int buffsize() { return _PAGES*screensize_X;};
+    unsigned short pixelpos(int x, int y);
+    void clrbuff(const unsigned char value=0x00);
+    unsigned long buffaddr(unsigned int i);
+    void fills(const unsigned char value=0xFF);
+    void ll_fill(const unsigned char value=0xFF, const unsigned char w=0x78, const unsigned char=0x80);
+    void set_row_address(unsigned char add);
+    void set_column_address(unsigned char add);
+
+    void start_loop(float tick);
+    void stop_loop(void);
+    
+protected:
+    /** Setup some stuff (malloc the buffer, etc)
+    */
+    void init();
+
+    /** set mirror mode
+      * @note may be overridden by specific display init class in case of not standard cmds or inverted wiring 
+      * @param mode NONE, X, Y, XY 
+      */
+    virtual void mirrorXY(mirror_t mode);
+
+////// functions needed by parent class ///////////////////////////////////////
+////// -------------------------------- ///////////////////////////////////////
+
+    /** Send 8bit command to display controller 
+    *
+    * @param cmd: byte to send  
+    * @note if protocol is SPI16, it will insert NOP cmd before, so if cmd is a 2byte cmd, the second cmd will be broken. Use wr_cmd16 for 2bytes cmds
+    */   
+    void wr_cmd8(unsigned char cmd);
+    
+    /** Send 8bit data to display controller 
+    *
+    * @param data: byte to send   
+    *
+    */   
+    void wr_data8(unsigned char data);
+    
+    /** Send 16bit command to display controller 
+    *
+    * @param cmd: halfword to send  
+    *
+    */   
+    void wr_cmd16(unsigned short cmd);
+    
+    /** Send same 16bit pixeldata to display controller multiple times
+    *
+    * @param data: halfword to send
+    * @param count: how many
+    *
+    */   
+    virtual void wr_gram(unsigned short data, unsigned int count);
+    
+    /** Send array of pixeldata shorts to display controller
+    *
+    * @param data: unsigned short pixeldata array
+    * @param lenght: lenght (in shorts)
+    *
+    */   
+    virtual void wr_grambuf(unsigned short* data, unsigned int lenght);
+    
+    /** HW reset sequence (without display init commands)   
+    */
+    void hw_reset();
+  
+    int contrast;
+    void loop_event(void);
+    
+protected:
+
+    Protocols* proto;
+    unsigned char *buffer;
+    const int screensize_X;
+    const int screensize_Y;
+    const int _PAGES;
+    const int _BPP;
+    const int _IC_X_SEGS;
+    const int _IC_Y_COMS;
+    const int _IC_PAGES;
+
+    Ticker bah;
+    int loop_pos;
+    // pixel location
+    int cur_x;
+    int cur_y;
+    // window location
+    int win_x1;
+    int win_x2;
+    int win_y1;
+    int win_y2;
+    int orientation;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/Terminal6x8.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,114 @@
+//Font Generated by MikroElektronika GLCD Font Creator 1.2.0.0
+//MikroElektronika 2011 
+//http://www.mikroe.com 
+
+#ifndef FONT_TERMINAL6x8
+#define FONT_TERMINAL6x8
+//GLCD FontName : Terminal6x8
+//GLCD FontSize : 6 x 8
+#ifdef TOOLCHAIN_GCC
+const unsigned char Terminal6x8[] __attribute__((aligned (2))) = {
+#else
+__align(2)
+const unsigned char Terminal6x8[] = {
+#endif		
+  0xFF/*unused*/,6,8,0xFF/*unused*/,
+        0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char  
+        0x05, 0x00, 0x00, 0x06, 0x5F, 0x06, 0x00,  // Code for char !
+        0x06, 0x00, 0x07, 0x03, 0x00, 0x07, 0x03,  // Code for char "
+        0x06, 0x00, 0x24, 0x7E, 0x24, 0x7E, 0x24,  // Code for char #
+        0x05, 0x00, 0x24, 0x2B, 0x6A, 0x12, 0x00,  // Code for char $
+        0x06, 0x00, 0x63, 0x13, 0x08, 0x64, 0x63,  // Code for char %
+        0x06, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50,  // Code for char &
+        0x04, 0x00, 0x00, 0x07, 0x03, 0x00, 0x00,  // Code for char '
+        0x04, 0x00, 0x00, 0x3E, 0x41, 0x00, 0x00,  // Code for char (
+        0x04, 0x00, 0x00, 0x41, 0x3E, 0x00, 0x00,  // Code for char )
+        0x06, 0x00, 0x08, 0x3E, 0x1C, 0x3E, 0x08,  // Code for char *
+        0x06, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,  // Code for char +
+        0x04, 0x00, 0x00, 0xE0, 0x60, 0x00, 0x00,  // Code for char ,
+        0x06, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,  // Code for char -
+        0x04, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,  // Code for char .
+        0x06, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,  // Code for char /
+        0x06, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,  // Code for char 0
+        0x05, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,  // Code for char 1
+        0x06, 0x00, 0x62, 0x51, 0x49, 0x49, 0x46,  // Code for char 2
+        0x06, 0x00, 0x22, 0x49, 0x49, 0x49, 0x36,  // Code for char 3
+        0x06, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,  // Code for char 4
+        0x06, 0x00, 0x2F, 0x49, 0x49, 0x49, 0x31,  // Code for char 5
+        0x06, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,  // Code for char 6
+        0x06, 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,  // Code for char 7
+        0x06, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,  // Code for char 8
+        0x06, 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,  // Code for char 9
+        0x04, 0x00, 0x00, 0x6C, 0x6C, 0x00, 0x00,  // Code for char :
+        0x04, 0x00, 0x00, 0xEC, 0x6C, 0x00, 0x00,  // Code for char ;
+        0x05, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,  // Code for char <
+        0x06, 0x00, 0x24, 0x24, 0x24, 0x24, 0x24,  // Code for char =
+        0x06, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,  // Code for char >
+        0x06, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06,  // Code for char ?
+        0x06, 0x00, 0x3E, 0x41, 0x5D, 0x55, 0x1E,  // Code for char @
+        0x06, 0x00, 0x7E, 0x11, 0x11, 0x11, 0x7E,  // Code for char A
+        0x06, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,  // Code for char B
+        0x06, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,  // Code for char C
+        0x06, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E,  // Code for char D
+        0x06, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,  // Code for char E
+        0x06, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,  // Code for char F
+        0x06, 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,  // Code for char G
+        0x06, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,  // Code for char H
+        0x05, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,  // Code for char I
+        0x06, 0x00, 0x30, 0x40, 0x40, 0x40, 0x3F,  // Code for char J
+        0x06, 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,  // Code for char K
+        0x06, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,  // Code for char L
+        0x06, 0x00, 0x7F, 0x02, 0x04, 0x02, 0x7F,  // Code for char M
+        0x06, 0x00, 0x7F, 0x02, 0x04, 0x08, 0x7F,  // Code for char N
+        0x06, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,  // Code for char O
+        0x06, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,  // Code for char P
+        0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,  // Code for char Q
+        0x06, 0x00, 0x7F, 0x09, 0x09, 0x19, 0x66,  // Code for char R
+        0x06, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32,  // Code for char S
+        0x06, 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,  // Code for char T
+        0x06, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,  // Code for char U
+        0x06, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,  // Code for char V
+        0x06, 0x00, 0x3F, 0x40, 0x3C, 0x40, 0x3F,  // Code for char W
+        0x06, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,  // Code for char X
+        0x06, 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,  // Code for char Y
+        0x05, 0x00, 0x71, 0x49, 0x45, 0x43, 0x00,  // Code for char Z
+        0x05, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,  // Code for char [
+        0x06, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20,  // Code for char BackSlash
+        0x05, 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,  // Code for char ]
+        0x06, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,  // Code for char ^
+        0x06, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,  // Code for char _
+        0x04, 0x00, 0x00, 0x03, 0x07, 0x00, 0x00,  // Code for char `
+        0x06, 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,  // Code for char a
+        0x06, 0x00, 0x7F, 0x44, 0x44, 0x44, 0x38,  // Code for char b
+        0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28,  // Code for char c
+        0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x7F,  // Code for char d
+        0x06, 0x00, 0x38, 0x54, 0x54, 0x54, 0x08,  // Code for char e
+        0x05, 0x00, 0x08, 0x7E, 0x09, 0x09, 0x00,  // Code for char f
+        0x06, 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,  // Code for char g
+        0x05, 0x00, 0x7F, 0x04, 0x04, 0x78, 0x00,  // Code for char h
+        0x05, 0x00, 0x00, 0x00, 0x7D, 0x40, 0x00,  // Code for char i
+        0x05, 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,  // Code for char j
+        0x05, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,  // Code for char k
+        0x05, 0x00, 0x00, 0x00, 0x7F, 0x40, 0x00,  // Code for char l
+        0x06, 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,  // Code for char m
+        0x05, 0x00, 0x7C, 0x04, 0x04, 0x78, 0x00,  // Code for char n
+        0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,  // Code for char o
+        0x06, 0x00, 0xFC, 0x44, 0x44, 0x44, 0x38,  // Code for char p
+        0x06, 0x00, 0x38, 0x44, 0x44, 0x44, 0xFC,  // Code for char q
+        0x06, 0x00, 0x44, 0x78, 0x44, 0x04, 0x08,  // Code for char r
+        0x06, 0x00, 0x08, 0x54, 0x54, 0x54, 0x20,  // Code for char s
+        0x05, 0x00, 0x04, 0x3E, 0x44, 0x24, 0x00,  // Code for char t
+        0x05, 0x00, 0x3C, 0x40, 0x20, 0x7C, 0x00,  // Code for char u
+        0x06, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,  // Code for char v
+        0x06, 0x00, 0x3C, 0x60, 0x30, 0x60, 0x3C,  // Code for char w
+        0x05, 0x00, 0x6C, 0x10, 0x10, 0x6C, 0x00,  // Code for char x
+        0x05, 0x00, 0x9C, 0xA0, 0x60, 0x3C, 0x00,  // Code for char y
+        0x05, 0x00, 0x64, 0x54, 0x54, 0x4C, 0x00,  // Code for char z
+        0x05, 0x00, 0x08, 0x3E, 0x41, 0x41, 0x00,  // Code for char {
+        0x04, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00,  // Code for char |
+        0x06, 0x00, 0x00, 0x41, 0x41, 0x3E, 0x08,  // Code for char }
+        0x05, 0x00, 0x02, 0x01, 0x02, 0x01, 0x00,  // Code for char ~
+        0x06, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C   // Code for char 
+        };
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/TextDisplay.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,77 @@
+/* mbed TextDisplay Display Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ */
+ 
+#include "TextDisplay.h"
+
+TextDisplay::TextDisplay(const char *name) : Stream(name){
+    _row = 0;
+    _column = 0;
+    if (name == NULL) {
+        _path = NULL;
+    } else {
+        _path = new char[strlen(name) + 2];
+        sprintf(_path, "/%s", name);
+    }
+}
+    
+int TextDisplay::_putc(int value) {
+    if(value == '\n') {
+        _column = 0;
+        _row++;
+        if(_row >= rows()) {
+            _row = 0;
+        }
+    } else {
+        character(_column, _row, value);
+        _column++;
+        if(_column >= columns()) {
+            _column = 0;
+            _row++;
+            if(_row >= rows()) {
+                _row = 0;
+            }
+        }
+    }
+    return value;
+}
+
+// crude cls implementation, should generally be overwritten in derived class
+void TextDisplay::cls() {
+    locate(0, 0);
+    for(int i=0; i<columns()*rows(); i++) {
+        putc(' ');
+    }
+}
+
+void TextDisplay::locate(int column, int row) {
+    _column = column;
+    _row = row;
+}
+
+int TextDisplay::_getc() {
+    return -1;
+}
+        
+void TextDisplay::foreground(uint16_t colour) {
+    _foreground = colour;
+}
+
+void TextDisplay::background(uint16_t colour) {
+    _background = colour;
+}
+
+bool TextDisplay::claim (FILE *stream) {
+    if ( _path == NULL) {
+        fprintf(stderr, "claim requires a name to be given in the instantioator of the TextDisplay instance!\r\n");
+        return false;
+    }
+    if (freopen(_path, "w", stream) == NULL) {
+        // Failed, should not happen
+        return false;
+    }
+    // make sure we use line buffering
+    setvbuf(stdout, NULL, _IOLBF, columns());
+    return true;
+} 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/unigraphic/TextDisplay.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,106 @@
+/* mbed TextDisplay Library Base Class
+ * Copyright (c) 2007-2009 sford
+ * Released under the MIT License: http://mbed.org/license/mit
+ *
+ * A common base class for Text displays
+ * To port a new display, derive from this class and implement
+ * the constructor (setup the display), character (put a character
+ * at a location), rows and columns (number of rows/cols) functions.
+ * Everything else (locate, printf, putc, cls) will come for free
+ *
+ * The model is the display will wrap at the right and bottom, so you can
+ * keep writing and will always get valid characters. The location is 
+ * maintained internally to the class to make this easy
+ */
+
+#ifndef MBED_TEXTDISPLAY_H
+#define MBED_TEXTDISPLAY_H
+
+#include "mbed.h"
+
+/** A common base class for Text displays
+*/
+class TextDisplay : public Stream {
+public:
+
+    // functions needing implementation in derived implementation class
+    // ----------------------------------------------------------------
+    /** Create a TextDisplay interface
+    * @param name The name used in the path to access the strean through the filesystem
+    */
+    TextDisplay(const char *name = NULL);
+
+    /** output a character at the given position
+    *
+    * @param column column where charater must be written
+    * @param  row where character must be written
+    * @param c the character to be written to the TextDisplay
+    * @note this method may be overridden in a derived class.
+    */
+    virtual void character(int column, int row, int c) = 0;
+
+    /** return number of rows on TextDisplay
+    * @result number of rows
+    * @note this method must be supported in the derived class.
+    */
+    virtual int rows() = 0;
+
+    /** return number of columns on TextDisplay
+    * @result number of columns
+    * @note this method must be supported in the derived class.
+    */
+    virtual int columns() = 0;
+    
+    // functions that come for free, but can be overwritten
+    // ----------------------------------------------------
+    /** redirect output from a stream (stoud, sterr) to  display
+    * @param stream stream that shall be redirected to the TextDisplay
+    * @note this method may be overridden in a derived class.
+    * @returns true if the claim succeeded.
+    */
+    virtual bool claim (FILE *stream);
+
+    /** clear the entire screen
+    * @note this method may be overridden in a derived class.
+    */
+    virtual void cls();
+
+    /** locate the cursor at a character position.
+    * Based on the currently active font, locate the cursor on screen.
+    * @note this method may be overridden in a derived class.
+    * @param column is the horizontal offset from the left side.
+    * @param row is the vertical offset from the top.
+    */
+    virtual void locate(int column, int row);
+
+    /** set the foreground color
+    * @note this method may be overridden in a derived class.
+    * @param color is color to use for foreground drawing.
+    */
+    virtual void foreground(uint16_t colour);
+
+    /** set the background color
+    * @note this method may be overridden in a derived class.
+    * @param color is color to use for background drawing.
+    */
+    virtual void background(uint16_t colour);
+
+    // putc (from Stream)
+    // printf (from Stream)
+    
+protected:
+
+    virtual int _putc(int value);
+    virtual int _getc();
+
+    // character location
+    int _column;
+    int _row;
+
+    // colours
+    volatile uint16_t _foreground;
+    volatile uint16_t _background;
+    char *_path;
+};
+
+#endif
--- a/platformio.ini	Tue Sep 13 21:32:48 2016 +0200
+++ b/platformio.ini	Tue Sep 20 23:50:45 2016 +0200
@@ -25,9 +25,9 @@
 upload_port = /media/sdb
 lib_compat_mode = 0
 
-[env:nucleo_f031k6]
-platform = ststm32
-framework = mbed
-board = nucleo_f031k6
-build_flags = -D UNIG_SPI8
-upload_port = /media/sdb
+# [env:nucleo_f031k6]
+# platform = ststm31
+# framework = mbed
+# board = nucleo_f031k6
+# build_flags = -D UNIG_SPI8
+# upload_port = /media/sdb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hp34comm.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,252 @@
+#include "hp34comm.h"
+#include "mbed.h"
+#include "CircularBuffer.h"
+
+/***** HP 34970A communication class ***/
+
+#define HP_SERIAL_TX PC_7 // serial6 RX
+#define HP_SERIAL_RX PA_1 // serial4 RX
+
+#ifdef DEBUG
+
+DigitalOut inrx(PC_0);
+DigitalOut intx(PC_1);
+DigitalOut ack(PC_3);
+DigitalOut staterx(PC_2);
+DigitalOut statetx(PH_1);
+
+#endif
+
+  
+HPSerial::HPSerial():
+  ncmd(0),
+  serial_tx(NC, HP_SERIAL_TX), serial_rx(NC, HP_SERIAL_RX) {
+  
+  //pc.printf("HPSerial init\n");
+
+  for(uint8_t i=0; i<MAX_ERRS; i++)
+    errs[i] = 0;
+  reset();
+  
+  serial_tx.baud(187500);
+  serial_tx.attach(this, &HPSerial::txIrq, Serial::RxIrq); //sic!
+  
+  serial_rx.baud(187500);
+  serial_rx.attach(this, &HPSerial::rxIrq, Serial::RxIrq);
+}
+
+bool HPSerial::cmd_available(void) {
+  return !cmdbuf.empty();
+}
+
+bool HPSerial::pop(CMD& cmd) {
+  return cmdbuf.pop(cmd);
+}
+
+bool HPSerial::cmd_buf_full(void) {
+  return cmdbuf.full();
+}
+
+unsigned int HPSerial::nerrors(uint8_t errorno) {
+  return errs[errorno];
+}
+    
+		     
+  
+void HPSerial::reset(uint8_t errorno) {
+  timeouter.detach();
+  head = 0;
+  tx_state = Idle;
+  setstatedbg();
+  tx_cmd = 0xFF;
+  tx_ack = false;
+  tx_len = 0xFF;
+  memset(buf, 0, BUF_SIZE);
+  if (errorno != 0xFF){
+    errs[errorno]++;
+  }
+  
+}
+
+void HPSerial::handleAck(uint8_t val) {
+  if ((tx_state == Rx) & (tx_cmd == 0xFF) & (tx_ack == false) & (val == 0x66)) {
+    // special case: keypad does not acknwledge and takes precedence
+    // on the "bus"
+    tx_state = Tx;
+    setstatedbg();
+  } else
+    
+    if (tx_ack == true)
+      reset(0);
+  
+    else
+      if (tx_cmd == 0xFF) // still at the beginning of a packet, expect 0x99 as ack
+	if (val == 0x99)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else 
+	  reset(1);
+
+      else // expect 0x00 as ack
+	if (val == 0x00)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+	    wait_us(2);
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else
+	  reset(2);
+}
+
+void HPSerial::pushCmd(TrState direction, uint8_t cmd, uint8_t size, char *payload) {
+  CMD val;
+  uint8_t i;
+  val.id = ncmd++;
+  val.direction = direction;
+  val.cmd = cmd;
+  val.size = size;
+  for(i=0; i<size; i++)
+    val.value[i] = payload[i];
+  val.value[i] = 0x00;
+  cmdbuf.push(val);
+}
+
+void HPSerial::handleChar(uint8_t val) {
+  if (tx_ack == false)
+    reset(3);
+  else // remaining of the state machine
+    if (tx_cmd == 0xFF) {
+      // begin of transmission, expect a cmd
+      tx_cmd = val;
+      tx_ack = false;
+      if (tx_state == Rx)
+	tx_len = 0xFF;
+      else
+	tx_len = 0x00; // no payload: tx_cmd is the key stroke
+    }
+    else if (tx_len == 0xFF) {
+      // got a cmd, expect a payload size
+      tx_len = val;
+      tx_ack = false;
+    }
+    else if (tx_len > 0) {
+      // a payload char
+      buf[head++] = val;
+      tx_len--;
+      tx_ack = false;
+    }
+    else { // end of payload, manage sent content
+      uint8_t cur_state = tx_state;
+      pushCmd(tx_state, tx_cmd, head, buf); 
+      
+      switch(val) {
+      case 0x66: // a new transmisson
+	reset();
+	tx_state = cur_state;
+	setstatedbg();
+	break;
+      case 0x55:
+	reset();
+	break;
+      default:
+	reset(6);
+	break;
+      }
+    }
+}
+
+
+
+void HPSerial::setstatedbg(void) {
+  /*
+    if (tx_state == Rx)
+    staterx = 1;
+    else
+    staterx = 0;
+    if (tx_state == Tx)
+    statetx = 1;
+    else
+    statetx = 0;
+  */
+}
+
+void HPSerial::rxIrq(void) {
+  uint8_t val;
+  if(serial_rx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+    inrx=1;
+#endif
+    val = serial_rx.getc();
+    
+    timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+    
+    if (tx_state == Idle)
+      if (val == 0x66) {
+	// no transmission in progress, expect a start of transmission
+	tx_state = Rx;
+	tx_ack = false;
+	setstatedbg();
+      }
+      else
+	reset(4);
+    
+    else if (tx_state == Tx)  // manage the acks
+      handleAck(val);
+    
+    else 
+      handleChar(val);
+#ifdef DEBUG
+    inrx=0;
+#endif
+  }
+}
+
+void HPSerial::txIrq(void) {
+  uint8_t val;
+  if(serial_tx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+    intx=1;
+#endif
+    val = serial_tx.getc();
+    
+    timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+    
+    if (tx_state == Idle)
+      if (val == 0x66) {
+	// no transmission in progress, expect a start of transmission
+	tx_state = Tx;
+	tx_ack = false;
+	setstatedbg();
+      }
+      else
+	reset(5);
+    
+    else if (tx_state == Rx)  // manage the acks
+      handleAck(val);
+    
+    else 
+      handleChar(val);
+  }
+#ifdef DEBUG
+  intx=0;
+#endif
+}
+
+void HPSerial::timeout(void) {
+  if (tx_state != Idle) {
+    reset(7);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hp34comm.cpp~	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,241 @@
+
+#include "hp34comm.h"
+
+/***** HP 34970A communication class ***/
+
+
+
+  
+HPSerial::HPSerial():
+  ncmd(0),
+  serial_tx(NC, HP_SERIAL_TX), serial_rx(NC, HP_SERIAL_RX) {
+  
+  //pc.printf("HPSerial init\n");
+
+  for(uint8_t i=0; i<MAX_ERRS; i++)
+    errs[i] = 0;
+  reset();
+  
+  serial_tx.baud(187500);
+  serial_tx.attach(this, &HPSerial::txIrq, Serial::RxIrq); //sic!
+  
+  serial_rx.baud(187500);
+  serial_rx.attach(this, &HPSerial::rxIrq, Serial::RxIrq);
+}
+
+bool HPSerial::cmd_available(void) {
+  return !cmdbuf.empty();
+}
+
+bool HPSerial::pop(CMD& cmd) {
+  return cmdbuf.pop(cmd);
+}
+
+bool HPSerial::cmd_buf_full(void) {
+  return cmdbuf.full();
+}
+
+unsigned int HPSerial::nerrors(uint8_t errorno) {
+  return errs[errorno];
+}
+    
+		     
+  
+void HPSerial::reset(uint8_t errorno=0xFF) {
+  timeouter.detach();
+  head = 0;
+  tx_state = Idle;
+  setstatedbg();
+  tx_cmd = 0xFF;
+  tx_ack = false;
+  tx_len = 0xFF;
+  memset(buf, 0, BUF_SIZE);
+  if (errorno != 0xFF){
+    errs[errorno]++;
+    pulse(errorno+1);
+  }
+  
+}
+
+void HPSerial::handleAck(uint8_t val) {
+  if ((tx_state == Rx) & (tx_cmd == 0xFF) & (tx_ack == false) & (val == 0x66)) {
+    // special case: keypad does not acknwledge and takes precedence
+    // on the "bus"
+    tx_state = Tx;
+    setstatedbg();
+  } else
+    
+    if (tx_ack == true)
+      reset(0);
+  
+    else
+      if (tx_cmd == 0xFF) // still at the beginning of a packet, expect 0x99 as ack
+	if (val == 0x99)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else 
+	  reset(1);
+
+      else // expect 0x00 as ack
+	if (val == 0x00)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+	    wait_us(2);
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else
+	  reset(2);
+}
+
+void HPSerial::pushCmd(TrState direction, uint8_t cmd, uint8_t size, char *payload) {
+  CMD val;
+  uint8_t i;
+  val.id = ncmd++;
+  val.direction = direction;
+  val.cmd = cmd;
+  val.size = size;
+  for(i=0; i<size; i++)
+    val.value[i] = payload[i];
+  val.value[i] = 0x00;
+  cmdbuf.push(val);
+}
+
+void HPSerial::handleChar(uint8_t val) {
+  if (tx_ack == false)
+    reset(3);
+  else // remaining of the state machine
+    if (tx_cmd == 0xFF) {
+      // begin of transmission, expect a cmd
+      tx_cmd = val;
+      tx_ack = false;
+      if (tx_state == Rx)
+	tx_len = 0xFF;
+      else
+	tx_len = 0x00; // no payload: tx_cmd is the key stroke
+    }
+    else if (tx_len == 0xFF) {
+      // got a cmd, expect a payload size
+      tx_len = val;
+      tx_ack = false;
+    }
+    else if (tx_len > 0) {
+      // a payload char
+      buf[head++] = val;
+      tx_len--;
+      tx_ack = false;
+    }
+    else { // end of payload, manage sent content
+      uint8_t cur_state = tx_state;
+      pushCmd(tx_state, tx_cmd, head, buf); 
+      
+      switch(val) {
+      case 0x66: // a new transmisson
+	reset();
+	tx_state = cur_state;
+	setstatedbg();
+	break;
+      case 0x55:
+	reset();
+	break;
+      default:
+	reset(6);
+	break;
+      }
+    }
+}
+
+
+
+void HPSerial::setstatedbg(void) {
+  /*
+    if (tx_state == Rx)
+    staterx = 1;
+    else
+    staterx = 0;
+    if (tx_state == Tx)
+    statetx = 1;
+    else
+    statetx = 0;
+  */
+}
+
+void HPSerial::rxIrq(void) {
+  uint8_t val;
+  if(serial_rx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+    inrx=1;
+#endif
+    val = serial_rx.getc();
+    
+    timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+    
+    if (tx_state == Idle)
+      if (val == 0x66) {
+	// no transmission in progress, expect a start of transmission
+	tx_state = Rx;
+	tx_ack = false;
+	setstatedbg();
+      }
+      else
+	reset(4);
+    
+    else if (tx_state == Tx)  // manage the acks
+      handleAck(val);
+    
+    else 
+      handleChar(val);
+#ifdef DEBUG
+    inrx=0;
+#endif
+  }
+}
+
+void HPSerial::txIrq(void) {
+  uint8_t val;
+  if(serial_tx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+    intx=1;
+#endif
+    val = serial_tx.getc();
+    
+    timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+    
+    if (tx_state == Idle)
+      if (val == 0x66) {
+	// no transmission in progress, expect a start of transmission
+	tx_state = Tx;
+	tx_ack = false;
+	setstatedbg();
+      }
+      else
+	reset(5);
+    
+    else if (tx_state == Rx)  // manage the acks
+      handleAck(val);
+    
+    else 
+      handleChar(val);
+  }
+#ifdef DEBUG
+  intx=0;
+#endif
+}
+
+void HPSerial::timeout(void) {
+  if (tx_state != Idle) {
+    reset(7);
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hp34comm.h	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,65 @@
+#ifndef HP34COMM_H
+#define HP34COMM_H
+
+#include "mbed.h"
+#include "CircularBuffer.h"
+
+/***** HP 34970A communication class ***/
+
+#define MAX_ERRS 10
+#define MAX_BUFF 32
+#define BUF_SIZE 32
+
+class HPSerial {
+
+public:
+  enum TrState {
+        Idle = 0,
+        Tx,
+        Rx,
+    };
+  typedef struct _CMD
+  {
+    TrState direction;
+    uint8_t cmd;
+    uint8_t size;
+    char value[MAX_BUFF+1];
+    unsigned long id;
+  } CMD;
+
+
+  
+  HPSerial();
+  
+  bool cmd_available(void);
+  bool pop(CMD& cmd);
+  bool cmd_buf_full(void);
+  unsigned int nerrors(uint8_t errorno);
+		     
+  
+private:
+  void reset(uint8_t errorno=0xFF);
+  void handleAck(uint8_t val);
+  void pushCmd(TrState direction, uint8_t cmd, uint8_t size, char *payload);
+  void handleChar(uint8_t val);
+  void setstatedbg(void);    
+  void rxIrq(void);
+  void txIrq(void);
+  void timeout(void);
+
+ private:
+  RawSerial serial_tx;
+  RawSerial serial_rx;
+  uint8_t buf[BUF_SIZE];
+  uint8_t head;
+  uint8_t tx_state;
+  uint8_t tx_cmd;
+  uint8_t tx_len;
+  bool tx_ack;
+  CircularBuffer<CMD, 32> cmdbuf;
+  unsigned long ncmd;
+  unsigned int errs[MAX_ERRS];
+  Ticker timeouter;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hp34comm.h~	Tue Sep 20 23:50:45 2016 +0200
@@ -0,0 +1,270 @@
+#ifndef HP34COMM_H
+#define HP34COMM_H
+
+/***** HP 34970A communication class ***/
+
+class HPSerial {
+
+public:
+  enum TrState {
+        Idle = 0,
+        Tx,
+        Rx,
+    };
+  typedef struct _CMD
+  {
+    TrState direction;
+    uint8_t cmd;
+    uint8_t size;
+    char value[MAX_BUFF+1];
+    unsigned long id;
+  } CMD;
+
+
+  
+  HPSerial(): ncmd(0), serial_tx(NC, HP_SERIAL_TX), serial_rx(NC, HP_SERIAL_RX) {
+    pc.printf("HPSerial init\n");
+    for(uint8_t i=0; i<MAX_ERRS; i++)
+      errs[i] = 0;
+    reset();
+
+    serial_tx.baud(187500);
+    serial_tx.attach(this, &HPSerial::txIrq, Serial::RxIrq); //sic!
+
+    serial_rx.baud(187500);
+    serial_rx.attach(this, &HPSerial::rxIrq, Serial::RxIrq);
+  }
+
+  bool cmd_available(void) {
+    return !cmdbuf.empty();
+  }
+
+  bool pop(CMD& cmd) {
+    return cmdbuf.pop(cmd);
+  }
+
+  bool cmd_buf_full(void) {
+    return cmdbuf.full();
+  }
+
+  unsigned int nerrors(uint8_t errorno) {
+    return errs[errorno];
+  }
+    
+		     
+  
+private:
+  void reset(uint8_t errorno=0xFF) {
+    timeouter.detach();
+    head = 0;
+    tx_state = Idle;
+    setstatedbg();
+    tx_cmd = 0xFF;
+    tx_ack = false;
+    tx_len = 0xFF;
+    memset(buf, 0, BUF_SIZE);
+    if (errorno != 0xFF){
+      errs[errorno]++;
+      pulse(errorno+1);
+    }
+    
+  }
+
+  void handleAck(uint8_t val) {
+    if ((tx_state == Rx) & (tx_cmd == 0xFF) & (tx_ack == false) & (val == 0x66)) {
+      // special case: keypad does not acknwledge and takes precedence
+      // on the "bus"
+      tx_state = Tx;
+      setstatedbg();
+    } else
+    
+    if (tx_ack == true)
+      reset(0);
+
+    else
+      if (tx_cmd == 0xFF) // still at the beginning of a packet, expect 0x99 as ack
+	if (val == 0x99)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else 
+	  reset(1);
+
+      else // expect 0x00 as ack
+	if (val == 0x00)
+	  {
+	    tx_ack = true;
+#ifdef DEBUG
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+	    wait_us(2);
+	    ack = 1;
+	    wait_us(2);
+	    ack = 0;
+#endif
+	  }
+	else
+	  reset(2);
+  }
+
+  void pushCmd(TrState direction, uint8_t cmd, uint8_t size, char *payload) {
+    CMD val;
+    uint8_t i;
+    val.id = ncmd++;
+    val.direction = direction;
+    val.cmd = cmd;
+    val.size = size;
+    for(i=0; i<size; i++)
+      val.value[i] = payload[i];
+    val.value[i] = 0x00;
+    cmdbuf.push(val);
+  }
+  
+  void handleChar(uint8_t val) {
+    if (tx_ack == false)
+      reset(3);
+    else // remaining of the state machine
+      if (tx_cmd == 0xFF) {
+	// begin of transmission, expect a cmd
+	tx_cmd = val;
+	tx_ack = false;
+	if (tx_state == Rx)
+	  tx_len = 0xFF;
+	else
+	  tx_len = 0x00; // no payload: tx_cmd is the key stroke
+      }
+      else if (tx_len == 0xFF) {
+	// got a cmd, expect a payload size
+	tx_len = val;
+	tx_ack = false;
+      }
+      else if (tx_len > 0) {
+	// a payload char
+	buf[head++] = val;
+	tx_len--;
+	tx_ack = false;
+      }
+      else { // end of payload, manage sent content
+	uint8_t cur_state = tx_state;
+	pushCmd(tx_state, tx_cmd, head, buf); 
+
+	switch(val) {
+	case 0x66: // a new transmisson
+	  reset();
+	  tx_state = cur_state;
+	  setstatedbg();
+	  break;
+	case 0x55:
+	  reset();
+	  break;
+	default:
+	  reset(6);
+	  break;
+	}
+      }
+  }
+    
+
+
+  void setstatedbg(void) {
+    /*
+    if (tx_state == Rx)
+      staterx = 1;
+    else
+      staterx = 0;
+    if (tx_state == Tx)
+      statetx = 1;
+    else
+      statetx = 0;
+    */
+  }
+    
+  void rxIrq(void) {
+    uint8_t val;
+    if(serial_rx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+      inrx=1;
+#endif
+      val = serial_rx.getc();
+
+      timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+      
+      if (tx_state == Idle)
+	if (val == 0x66) {
+	  // no transmission in progress, expect a start of transmission
+	  tx_state = Rx;
+	  tx_ack = false;
+	  setstatedbg();
+	}
+	else
+	  reset(4);
+    
+      else if (tx_state == Tx)  // manage the acks
+	handleAck(val);
+      
+      else 
+	handleChar(val);
+#ifdef DEBUG
+      inrx=0;
+#endif
+    }
+  }
+  
+  void txIrq(void) {
+    uint8_t val;
+    if(serial_tx.readable()) { // no reason why we would end here without this condition, but hey
+#ifdef DEBUG
+      intx=1;
+#endif
+      val = serial_tx.getc();
+
+      timeouter.attach(this, &HPSerial::timeout, 0.001); // if nothing else happen in the next ms, reset
+      
+      if (tx_state == Idle)
+	if (val == 0x66) {
+	  // no transmission in progress, expect a start of transmission
+	  tx_state = Tx;
+	  tx_ack = false;
+	  setstatedbg();
+	}
+	else
+	  reset(5);
+    
+      else if (tx_state == Rx)  // manage the acks
+	handleAck(val);
+      
+      else 
+	handleChar(val);
+    }
+#ifdef DEBUG
+    intx=0;
+#endif
+  }
+
+  void timeout(void) {
+    if (tx_state != Idle) {
+      reset(7);
+    }
+  }
+private:
+  RawSerial serial_tx;
+  RawSerial serial_rx;
+  uint8_t buf[BUF_SIZE];
+  uint8_t head;
+  uint8_t tx_state;
+  uint8_t tx_cmd;
+  uint8_t tx_len;
+  bool tx_ack;
+  CircularBuffer<CMD, 32> cmdbuf;
+  unsigned long ncmd;
+  unsigned int errs[MAX_ERRS];
+  Ticker timeouter;
+};
+
+#endif
--- a/src/main.cpp	Tue Sep 13 21:32:48 2016 +0200
+++ b/src/main.cpp	Tue Sep 20 23:50:45 2016 +0200
@@ -1,8 +1,8 @@
 #include "stdio.h"
 
 #include "mbed.h"
+#include "rtos.h"
 #include "string"
-#include "CircularBuffer.h"
 
 #include "Terminal6x8.h"
 #include "Mono19x27.h"
@@ -10,18 +10,15 @@
 #include "Arial12x12.h"
 
 #include "SSD1322.h"
+#include "hp34comm.h"
 
 Serial pc(USBTX, USBRX);
 
-//BufferedSerial hp(NC, PA_1, 64, 0); // serial4
-#define HP_SERIAL_TX PC_7 // serial6 RX
-#define HP_SERIAL_RX PA_1 // serial4 RX
+#define DEBUG
 
-SSD1322 dsp(SPI_8, 10000000, PB_15, PB_14, PB_13, PB_12, D11, D12, "SSD1322", 256, 64); 
+SSD1322 dsp(SPI_8, 20000000, PB_15, PB_14, PB_13, PB_12, D11, D12, "SSD1322", 256, 64); 
 
-#define BUF_SIZE 32
-#define MAX_BUFF 15
-#define MAX_ERRS 10
+
 uint8_t curchar;
 uint8_t cmd;
 uint8_t nchars;
@@ -34,7 +31,7 @@
   uint8_t bgcolor;
   uint8_t x0;
   uint8_t y0;
-  uint8_t fmt; // 0=>ascii, 1=>hex, 2=>bits, 3=>flags
+  uint8_t fmt; // 0x01=>ascii, 0x02=>hex, 0x04=>bits, 0x08=>flags, 0x80=>ignore
   uint8_t maxsize;
   uint8_t width;
   const unsigned char* font;
@@ -43,13 +40,12 @@
 
 static DSP table[] =
 {
-  { 0x00, 0xF,   0x0,  0,  0, 0, MAX_BUFF, 245, Mono19x27}, // main display
-  { 0x0C, 0xF,   0x0,204, 38, 0, 3,        45, Mono15x22}, // channels display
-  { 0x01, 0xF,   0x0,  0,  0, 4, MAX_BUFF, 0, Terminal6x8}, 
-  { 0x02, 0xF,   0x0,  0,  0, 4, MAX_BUFF, 0, Terminal6x8},
-  { 0x0A, 0xF,   0x0,  0, 57, 2, 4,        0, Terminal6x8},
-  { 0x0A, 0xF,   0x0,  0,  0, 3, 4,        0, Terminal6x8}, // flags
-  { 0xFF, 0xF,   0x0,  0,  0, 4, MAX_BUFF, 0, Terminal6x8},
+  { 0x00, 0xF,   0x0,  0,  0, 0x01, MAX_BUFF, 245, Mono19x27}, // main display
+  { 0x0C, 0xF,   0x0,204, 38, 0x01, 3,        45, Mono15x22}, // channels display
+  { 0x01, 0xF,   0x0,  0,  0, 0x80, MAX_BUFF, 0, Terminal6x8}, 
+  { 0x02, 0xF,   0x0,  0,  0, 0x80, MAX_BUFF, 0, Terminal6x8},
+  { 0x0A, 0xF,   0x0,  0, 57, 0x0C, 4,        0, Terminal6x8}, // flags + bits
+  { 0xFF, 0xF,   0x0,  0,  0, 0x80, MAX_BUFF, 0, Terminal6x8},
 };
 
 // 9x10
@@ -93,16 +89,16 @@
 static const FLAG flags[] =
   {
     //{ 0x00, 160, 30, "Alarm"},  // for the 'alarm' box
-    { 0x00, 246, 0,  NULL, icon_alarm},      // F1.1
-    { 0x01, 246, 11, NULL, icon_curve},      // F1.2
-    { 0x03, 204, 30, "Channel"},    // F1.4
-    { 0x14, 68,  44, "4W"},         // F2.5
-    { 0x33, 40, 44,  "VIEW"},       // F4.4
-    { 0x34, 0, 30,   "MON"},        // F4.5
-    { 0x36, 0, 44,   "CONFIG"},     // F4.7
+    { 0x00, 246, 0,  NULL, icon_alarm}, // F1.1
+    { 0x01, 246, 11, NULL, icon_curve}, // F1.2
+    { 0x03, 204, 30, "Channel"}, // F1.4
+    { 0x14, 68, 44,  "4W"},      // F2.5
+    { 0x32, 40, 44,  "*"},       // F4.3
+    { 0x33, 40, 44,  "VIEW"},    // F4.4
+    { 0x34, 0,  30,  "MON"},     // F4.5
+    { 0x35, 0,  44,  "SCAN"},    // F4.6
+    { 0x36, 0,  44,  "CONFIG"},  // F4.7
     
-    { 0xFF, 0, 0,  "SCAN"},  // F4.6 or F4.3
-    { 0xFF, 0, 0,  "*"},
     { 0xFF, 0, 0,  "ADRS"},
     { 0xFF, 0, 0,  "RMT"},
     { 0xFF, 0, 0,  "ERROR"},
@@ -125,218 +121,49 @@
     
   };
 
+typedef struct _FRAME
+{
+  uint8_t flag;
+  uint8_t x0;
+  uint8_t y0;
+  uint8_t x1;
+  uint8_t y1;
+} FRAME;
+
+static const FRAME frames[] =
+  {
+    { 0x02, 203, 35, 248, 55}, // F1.3
+  };
+
 
 #ifdef DEBUG
 #define DBGPIN PC_0
 
 DigitalOut dbgpin(DBGPIN);
-inline void DebugPulse(uint8_t count=1)
+inline void pulse(uint8_t count=1, bool stayup=false)
 {
+  dbgpin = 0; 
+  wait_us(2);
   while (count--)
   {
     dbgpin = 1;
-    dbgpin = 0;
-  }
+    wait_us(2);
+    dbgpin = 0; 
+    wait_us(2);
+ }
+  if (stayup)
+    dbgpin = 1;
+    
 }
 #else
-inline void DebugPulse(uint8_t count=1)
+inline void pulse(uint8_t count=1, bool stayup=false)
 {}
 #endif
 
 
-
-/***** HP 34970A communication class ***/
-
-class HPSerial {
-
-public:
-  enum TrState {
-        Idle = 0,
-        Tx,
-        Rx,
-    };
-  typedef struct _CMD
-  {
-    TrState direction;
-    uint8_t cmd;
-    uint8_t size;
-    char value[MAX_BUFF+1];
-    unsigned long id;
-  } CMD;
-
-
-  
-  HPSerial(): ncmd(0), serial_tx(NC, HP_SERIAL_TX), serial_rx(NC, HP_SERIAL_RX) {
-    pc.printf("HPSerial init\n");
-    for(uint8_t i=0; i<MAX_ERRS; i++)
-      errs[i] = 0;
-    reset();
-
-    serial_tx.baud(187500);
-    serial_tx.attach(this, &HPSerial::txIrq, Serial::RxIrq); //sic!
-
-    serial_rx.baud(187500);
-    serial_rx.attach(this, &HPSerial::rxIrq, Serial::RxIrq);
-  }
-
-  bool cmd_available(void) {
-    return !cmdbuf.empty();
-  }
-
-  bool pop(CMD& cmd) {
-    return cmdbuf.pop(cmd);
-  }
-
-  bool cmd_buf_full(void) {
-    return cmdbuf.full();
-  }
-
-  unsigned int nerrors(uint8_t errorno) {
-    return errs[errorno];
-  }
-    
-		     
-  
-private:
-  void reset(uint8_t errorno=0xFF) {
-    head = 0;
-    tx_state = Idle;
-    tx_cmd = 0xFF;
-    tx_ack = false;
-    tx_len = 0xFF;
-    memset(buf, 0, BUF_SIZE);
-    if (errorno != 0xFF)
-      errs[errorno]++;
-  }
-
-  void handleAck(uint8_t val) {
-    if (tx_ack == true)
-      reset(0);
-
-    else 
-      if (tx_cmd == 0xFF) // still at the beginning of a packet, expect 0x99 as ack
-	if (val == 0x99)
-	  tx_ack = true;
-	else 
-	  reset(1);
-
-      else // expect 0x00 as ack
-	if (val == 0x00)
-	  tx_ack = true;
-	else
-	  reset(2);
-  }
-
-  void pushCmd(TrState direction, uint8_t cmd, uint8_t size, char *payload) {
-    CMD val;
-    uint8_t i;
-    val.id = ncmd++;
-    val.direction = direction;
-    val.cmd = cmd;
-    val.size = size;
-    for(i=0; i<size; i++)
-      val.value[i] = payload[i];
-    val.value[i] = 0x00;
-    cmdbuf.push(val);
-  }
-  
-  void handleChar(uint8_t val) {
-    if (tx_ack == false)
-      reset(3);
-    else // remaining of the state machine
-      if (tx_cmd == 0xFF) {
-	// begin of transmission, expect a cmd
-	tx_cmd = val;
-	tx_ack = false;
-	tx_len = 0xFF;
-      }
-      else if (tx_len == 0xFF) {
-	// got a cmd, expect a payload size
-	tx_len = val;
-	tx_ack = false;
-      }
-      else if (tx_len > 0) {
-	// a payload char
-	buf[head++] = val;
-	tx_len--;
-	tx_ack = false;
-      }
-      else {
-	uint8_t cur_state = tx_state;
-	pushCmd(tx_state, tx_cmd, head, buf); 
-	reset();
-	
-	if (val != 0x55) { // not an end of transmission
-	  // should be another cmd I think
-	  tx_cmd = val;
-	  tx_state = cur_state;
-	}
-      }
-  }
-
-  
-  void rxIrq(void) {
-    uint8_t val;
-    if(serial_rx.readable()) { // no reason why we would end here without this condition, but hey
-      val = serial_rx.getc();
-      
-      if (tx_state == Idle)
-	if (val == 0x66) {
-	  // no transmission in progress, expect a start of transmission
-	  tx_state = Rx;
-	  tx_ack = false;
-	}
-	else
-	  reset(4);
-    
-      else if (tx_state == Tx)  // manage the acks
-	handleAck(val);
-      
-      else 
-	handleChar(val);
-    }
-  }
-  
-  void txIrq(void) {
-    uint8_t val;
-    if(serial_tx.readable()) { // no reason why we would end here without this condition, but hey
-      val = serial_tx.getc();
-      
-      if (tx_state == Idle)
-	if (val == 0x66) {
-	  // no transmission in progress, expect a start of transmission
-	  tx_state = Tx;
-	  tx_ack = false;
-	}
-	else
-	  reset(5);
-    
-      else if (tx_state == Rx)  // manage the acks
-	handleAck(val);
-      
-      else 
-	handleChar(val);
-    }
-  }
-  
-private:
-  RawSerial serial_tx;
-  RawSerial serial_rx;
-  uint8_t buf[BUF_SIZE];
-  uint8_t head;
-  uint8_t tx_state;
-  uint8_t tx_cmd;
-  uint8_t tx_len;
-  bool tx_ack;
-  CircularBuffer<CMD, 32> cmdbuf;
-  unsigned long ncmd;
-  unsigned int errs[MAX_ERRS];
-};
-
-
 HPSerial hp;
-Ticker dsp_refresher;
 volatile bool must_refresh;
+Thread tdsp, tloop;
 
 void copy_to_lcd(void);
 void test_dsp();
@@ -362,7 +189,9 @@
     curchar = 0;
     nchars = 0;
 
-    
+    for (uint8_t i=0; i<sizeof(table)/sizeof(table[0]); ++i)
+      memset(table[i].buffer, 0, MAX_BUFF+1);
+      
     dsp.printf("HP34970A");
     dsp.set_font(Terminal6x8);
     for(uint8_t i=0; i<4;  i++) {
@@ -375,16 +204,23 @@
     wait(2);
     dsp.cls();
     
-    dsp_refresher.attach(&copy_to_lcd, 0.1);
     test_dsp();
+    dsp.copy_to_lcd();
     wait(2);
     dsp.cls();
     
 }
 
 void copy_to_lcd(void) {
-  if (must_refresh)
-    dsp.copy_to_lcd();
+  while(1) {
+    pulse(0, true);
+    if (must_refresh) {
+      must_refresh = false;
+      dsp.copy_to_lcd();
+    }
+    pulse(0, false);
+    Thread::wait(100);
+  }
 }
 
 void show(uint8_t cmd, char *txt, uint8_t nchar=0) {
@@ -392,6 +228,8 @@
   uint16_t bgcolor, fgcolor;
   char *oldv;
 
+  pulse(1, true);
+  
   must_refresh = false;
   
   len = MAX_BUFF;
@@ -406,13 +244,34 @@
       dsp.set_font((unsigned char*) table[i].font);
       oldv = table[i].buffer;
       
-      switch (table[i].fmt) {
-      case 0: //ascii
+
+      if (table[i].fmt & 0x01 ) {
+	// ascii
 	if (table[i].width > 0)
 	  dsp.fillrect(table[i].x0, table[i].y0, table[i].x0 + table[i].width, table[i].y0 + table[i].font[2], bgcolor);
-	dsp.printf(txt);
-	break;
-      case 1: // hex
+	for (uint8_t k=0; ;k++) {
+	  if (txt[k] == 0x00)
+	    {
+	      dsp.printf(txt);
+	      break;
+	    }
+	  if (txt[k] == 0x09) { // \t is a special char for 'unselected' display value
+	    txt[k] = 0x00;
+	    dsp.printf(txt);
+	    
+	    if (fgcolor == table[i].color)
+	      fgcolor /= 2;
+	    else
+	      fgcolor = table[i].color;
+	    dsp.foreground(fgcolor);
+	    txt = &(txt[k+1]);
+	    k = 0;
+	  }
+	}
+      }
+	
+      if (table[i].fmt & 0x02 ) {
+      // hex
 	for (uint8_t j=0;; j++) {
 	  if (txt[j] == 0x00)
 	    break;
@@ -420,8 +279,10 @@
 	}
 	for (uint8_t j=3*strlen(txt); j<table[i].maxsize; j++)
 	  dsp.printf(" ");
-	break;
-      case 2: // binary
+      }
+      
+      if (table[i].fmt & 0x04 ) {
+      // binary
 	dsp.foreground(fgcolor);
 	dsp.printf(" [");
 	for (uint8_t j=0; j<max(nchar, table[i].maxsize) ; j++) {
@@ -439,8 +300,10 @@
 	}
 	dsp.foreground(fgcolor);
 	dsp.printf("]");
-	break;
-      case 3: // flags
+      }
+
+      if (table[i].fmt & 0x08 ) {
+      // flags
 	for (uint8_t j=0; j<max(nchar, table[i].maxsize) ; j++) {
 	  for (uint8_t k=0; k<8; k++) {
 	    if ((txt[j] & (1 << k) ) != (oldv[j] & (1 << k))) {
@@ -449,6 +312,20 @@
 		dsp.foreground(fgcolor);
 	      else
 		dsp.foreground(bgcolor);
+
+	      for (uint8_t l=0;
+		   l<(sizeof(frames)/sizeof(frames[0])); ++l) {
+		if (frames[l].flag & ((j<<4) + k))
+		  dsp.rect(frames[l].x0, frames[l].y0,
+			   frames[l].x1, frames[l].y1,
+			   fgcolor); 
+		else
+		  dsp.rect(frames[l].x0, frames[l].y0,
+			   frames[l].x1, frames[l].y1,
+			   bgcolor); 
+		
+	      }
+	      
 	      for (uint8_t l=0;
 		   l<(sizeof(flags)/sizeof(flags[0])); ++l) {
 		if (flags[l].flag == ((j<<4) + k)) {
@@ -459,44 +336,47 @@
 		    Bitmap_s pic = {9, 10, 2, flags[l].icon};
 		    dsp.Bitmap_BW(pic, flags[l].x, flags[l].y);
 		  }
-		  break;
+		  //break;
 		}
-	      }
+	      }	      
 	    }
 	  }
-	  oldv[j] = txt[j];
 	}
-	break;
-      case 4: //ignore
-	break;
       }
+      
+      for(uint8_t j=0; j<table[i].maxsize; j++)
+	oldv[j] = txt[j];
     }
   }
+
   must_refresh = true;
   //dsp.copy_to_lcd();
+  pulse(1, false);
 }
 
 void test_dsp()
 {
   show(0x00, "8g8g8g8g8g8g8", 13); // main dsp
   show(0x0C, "888", 3); // channel dsp
-  show(0x0A, "\xFF\xFF\xFF\xFF", 4); // flags
+  show(0x0A, "\xFF\xFF\xFF\xFF", 4); // all flags
 }
 
 
 void loop() { // run over and over
+  while(1){
   if (hp.cmd_available())
     {
       HPSerial::CMD cmd;
       if (hp.pop(cmd))
 	{
-	  pc.printf("CMD[%s:%d %d/%d/%d/%d/%d/%d] %X\n", (cmd.direction==HPSerial::Rx)?"Rx":"Tx", cmd.id,
+	  pc.printf("CMD[%s:%d %d/%d/%d/%d/%d/%d/%d] %X\n", (cmd.direction==HPSerial::Rx)?"Rx":"Tx", cmd.id,
 		    hp.nerrors(0), 
 		    hp.nerrors(1), 
 		    hp.nerrors(2), 
 		    hp.nerrors(3), 
 		    hp.nerrors(4), 
 		    hp.nerrors(5), 
+		    hp.nerrors(6), 
 		    cmd.cmd);
 
 	  if (cmd.direction == HPSerial::Rx) {
@@ -507,11 +387,15 @@
 	  }
 	}
     }
+  Thread::wait(0.01);
+  }
 }
 
 int main()
 {
   setup();
-  while(1)
-    loop();
+  tdsp.start(copy_to_lcd);
+  tloop.start(loop);
+  while(1);
+  //loop();
 }

mercurial