summaryrefslogtreecommitdiffstats
path: root/src/target
diff options
context:
space:
mode:
Diffstat (limited to 'src/target')
-rw-r--r--src/target/firmware/Makefile32
-rw-r--r--src/target/firmware/abb/twl3025.c19
-rw-r--r--src/target/firmware/apps/chainload/main.c1
-rw-r--r--src/target/firmware/apps/compal_dsp_dump/main.c25
-rw-r--r--src/target/firmware/apps/hello_world/main.c74
-rw-r--r--src/target/firmware/apps/l1test/main.c249
-rw-r--r--src/target/firmware/apps/layer1/main.c40
-rw-r--r--src/target/firmware/apps/loader/main.c1
-rw-r--r--src/target/firmware/apps/rssi/main.c1562
-rwxr-xr-xsrc/target/firmware/apps/simtest/main.c4
-rw-r--r--src/target/firmware/battery/compal_e88.c386
-rw-r--r--src/target/firmware/battery/dummy.c9
-rw-r--r--src/target/firmware/board/compal/highram.lds4
-rw-r--r--src/target/firmware/board/compal/ram.lds4
-rw-r--r--src/target/firmware/board/compal_e86/init.c10
-rwxr-xr-x[-rw-r--r--]src/target/firmware/board/compal_e88/init.c13
-rw-r--r--src/target/firmware/board/compal_e99/init.c11
-rw-r--r--src/target/firmware/board/gta0x/init.c6
-rw-r--r--src/target/firmware/board/pirelli_dpl10/init.c43
-rw-r--r--src/target/firmware/board/se_j100/init.c7
-rw-r--r--src/target/firmware/calypso/keypad.c17
-rw-r--r--src/target/firmware/calypso/rtc.c5
-rw-r--r--src/target/firmware/comm/msgb.c1
-rw-r--r--src/target/firmware/comm/timer.c30
-rw-r--r--src/target/firmware/display/display.c20
-rw-r--r--src/target/firmware/display/font_r8x8.c261
-rw-r--r--src/target/firmware/display/font_r8x8_horiz.c261
-rw-r--r--src/target/firmware/display/ssd1783.c257
-rw-r--r--src/target/firmware/display/ssd1963.c210
-rw-r--r--src/target/firmware/display/st7558.c121
-rw-r--r--src/target/firmware/display/td014.c185
-rw-r--r--src/target/firmware/fb/4x6.c731
-rw-r--r--src/target/firmware/fb/5x8.c802
-rw-r--r--src/target/firmware/fb/c64.c1069
-rw-r--r--src/target/firmware/fb/fb_bw8.c311
-rw-r--r--src/target/firmware/fb/fb_dummy.c70
-rw-r--r--src/target/firmware/fb/fb_rgb332.c305
-rw-r--r--src/target/firmware/fb/fb_s6b33b1x.c193
-rw-r--r--src/target/firmware/fb/fb_ssd1783.c204
-rw-r--r--src/target/firmware/fb/fb_ssd1963.c196
-rw-r--r--src/target/firmware/fb/fb_st7558.c132
-rw-r--r--src/target/firmware/fb/fb_td014.c150
-rw-r--r--src/target/firmware/fb/font.c59
-rw-r--r--src/target/firmware/fb/framebuffer.c28
-rw-r--r--src/target/firmware/fb/helvB08.c833
-rw-r--r--src/target/firmware/fb/helvB14.c1195
-rw-r--r--src/target/firmware/fb/helvB24.c1871
-rw-r--r--src/target/firmware/fb/helvR08.c826
-rw-r--r--src/target/firmware/fb/helvR14.c1198
-rw-r--r--src/target/firmware/fb/helvR24.c1870
-rw-r--r--src/target/firmware/fb/symbols.c113
-rwxr-xr-x[-rw-r--r--]src/target/firmware/include/abb/twl3025.h50
-rwxr-xr-xsrc/target/firmware/include/battery/battery.h37
-rw-r--r--src/target/firmware/include/battery/compal_e88.h15
-rw-r--r--src/target/firmware/include/comm/timer.h23
-rw-r--r--src/target/firmware/include/display.h49
-rw-r--r--src/target/firmware/include/display/ssd1783.h56
-rw-r--r--src/target/firmware/include/fb/fb_bw8.h51
-rw-r--r--src/target/firmware/include/fb/fb_rgb332.h47
-rw-r--r--src/target/firmware/include/fb/font.h82
-rw-r--r--src/target/firmware/include/fb/framebuffer.h128
-rw-r--r--src/target/firmware/include/layer1/async.h3
-rw-r--r--src/target/firmware/include/layer1/l23_api.h3
-rw-r--r--src/target/firmware/include/layer1/mframe_sched.h1
-rw-r--r--src/target/firmware/include/layer1/sync.h1
-rw-r--r--src/target/firmware/layer1/l23_api.c57
-rw-r--r--src/target/firmware/layer1/mframe_sched.c11
-rw-r--r--src/target/firmware/layer1/prim_fbsb.c20
-rw-r--r--src/target/firmware/layer1/prim_freq.c1
-rw-r--r--src/target/firmware/layer1/prim_pm.c9
-rw-r--r--src/target/firmware/layer1/prim_rach.c1
-rw-r--r--src/target/firmware/layer1/prim_rx_nb.c2
-rw-r--r--src/target/firmware/layer1/prim_tch.c2
-rw-r--r--src/target/firmware/layer1/tpu_window.c1
74 files changed, 14877 insertions, 1797 deletions
diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile
index 388a345e..a71eef60 100644
--- a/src/target/firmware/Makefile
+++ b/src/target/firmware/Makefile
@@ -4,8 +4,20 @@
BOARDS?=compal_e88 compal_e86 compal_e99 se_j100 gta0x pirelli_dpl10
# List of all applications (meant to be overridden on command line)
-APPLICATIONS?=hello_world compal_dsp_dump layer1 loader chainload
+APPLICATIONS?=hello_world compal_dsp_dump layer1 loader chainload rssi
+# Framebuffer support, board specific drivers
+#
+
+FB_OBJS=fb/framebuffer.o fb/font.o fb/helvR08.o fb/helvB14.o fb/c64.o \
+ fb/symbols.o
+
+FB_e88_OBJS=$(FB_OBJS) fb/fb_bw8.o fb/fb_st7558.o
+FB_e99_OBJS=$(FB_OBJS) fb/fb_rgb332.o fb/fb_ssd1783.o
+FB_e86_OBJS=$(FB_OBJS) fb/fb_rgb332.o fb/fb_td014.o
+FB_j100_OBJS=$(FB_OBJS) fb/fb_rgb332.o fb/fb_ssd1963.o
+FB_dpl10_OBJS=$(FB_OBJS) fb/fb_rgb332.o fb/fb_s6b33b1x.o
+FB_dummy_OBJS=$(FB_OBJS) fb/fb_dummy.o
# TI Calypso
@@ -13,12 +25,14 @@ calypso_COMMON_OBJS=board/common/calypso_uart.o board/common/calypso_pwl.o
# OpenMoko GTA0x
-gta0x_OBJS=$(calypso_COMMON_OBJS) board/gta0x/rffe_gta0x_triband.o board/gta0x/init.o board/gta0x/rf_power.o
+gta0x_OBJS=$(calypso_COMMON_OBJS) board/gta0x/rffe_gta0x_triband.o board/gta0x/init.o \
+ board/gta0x/rf_power.o battery/dummy.o $(FB_dummy_OBJS)
gta0x_ENVIRONMENTS=highram
# Pirelli DP-L10
-pirelli_dpl10_OBJS=$(calypso_COMMON_OBJS) board/pirelli_dpl10/rffe_dpl10_triband.o board/pirelli_dpl10/init.o board/pirelli_dpl10/rf_power.o
+pirelli_dpl10_OBJS=$(calypso_COMMON_OBJS) board/pirelli_dpl10/rffe_dpl10_triband.o board/pirelli_dpl10/init.o \
+ board/pirelli_dpl10/rf_power.o battery/dummy.o $(FB_dpl10_OBJS)
pirelli_dpl10_ENVIRONMENTS=highram
# Compal Generic
@@ -34,7 +48,7 @@ highram_OBJS=board/compal/start.ram.o board/compal/exceptions_redirected.o board
# Compal E88
-compal_e88_OBJS=$(compal_COMMON_OBJS) board/compal_e88/init.o
+compal_e88_OBJS=$(compal_COMMON_OBJS) board/compal_e88/init.o battery/compal_e88.o $(FB_e88_OBJS)
compal_e88_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) e88loader e88flash
e88loader_LDS=board/compal_e88/loader.lds
@@ -45,12 +59,13 @@ e88flash_OBJS=board/compal/start.rom.o board/compal/header.o board/compal/except
# Compal E86 (has a different RFFE configuration)
-compal_e86_OBJS=$(calypso_COMMON_OBJS) board/compal_e86/rffe_dualband_e86.o board/compal/rf_power.o board/compal_e86/init.o
+compal_e86_OBJS=$(calypso_COMMON_OBJS) board/compal_e86/rffe_dualband_e86.o board/compal/rf_power.o \
+ board/compal_e86/init.o battery/dummy.o $(FB_e86_OBJS)
compal_e86_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS)
# Compal E99
-compal_e99_OBJS=$(compal_COMMON_OBJS) board/compal_e99/init.o
+compal_e99_OBJS=$(compal_COMMON_OBJS) board/compal_e99/init.o battery/dummy.o $(FB_e99_OBJS)
compal_e99_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS)
e99loader_LDS=board/compal_e99/loader.lds
@@ -59,7 +74,7 @@ e99flash_LDS=board/compal_e99/flash.lds
# Sony Ericsson J100 (made by Compal)
-se_j100_OBJS=$(compal_COMMON_OBJS) board/se_j100/init.o
+se_j100_OBJS=$(compal_COMMON_OBJS) board/se_j100/init.o battery/dummy.o $(FB_j100_OBJS)
se_j100_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS)
# Global include path
@@ -67,12 +82,11 @@ INCLUDES=-Iinclude/ -I../../../include -I../../shared/libosmocore/include
# Various objects that are currently linked into all applications
FLASH_OBJS=flash/cfi_flash.o
-DISPLAY_OBJS=display/font_r8x8.o display/font_r8x8_horiz.o display/st7558.o display/td014.o display/ssd1783.o display/ssd1963.o display/display.o
ABB_OBJS=abb/twl3025.o
RF_OBJS=rf/trf6151.o
# Objects that go in all applications
-ANY_APP_OBJS+=$(ABB_OBJS) $(RF_OBJS) $(DISPLAY_OBJS) $(FLASH_OBJS)
+ANY_APP_OBJS+=$(ABB_OBJS) $(RF_OBJS) $(FLASH_OBJS)
ANY_APP_LIBS+=calypso/libcalypso.a layer1/liblayer1.a lib/libmini.a comm/libcomm.a ../../shared/libosmocore/build-target/src/.libs/libosmocore.a ../../shared/libosmocore/build-target/src/gsm/.libs/libosmogsm.a
# Libraries are defined in subdirectories
diff --git a/src/target/firmware/abb/twl3025.c b/src/target/firmware/abb/twl3025.c
index 564c34ba..e4fcf4f0 100644
--- a/src/target/firmware/abb/twl3025.c
+++ b/src/target/firmware/abb/twl3025.c
@@ -31,6 +31,7 @@
#include <calypso/tsp.h>
#include <calypso/tpu.h>
#include <abb/twl3025.h>
+#include <asm/system.h>
/* TWL3025 */
#define REG_PAGE(n) (n >> 7)
@@ -105,13 +106,6 @@ static void twl3025_irq(enum irq_nr nr)
case IRQ_EXTERNAL: // charger in/out, pwrbtn, adc done
src = twl3025_reg_read(ITSTATREG);
// printd("itstatreg 0x%02x\n", src);
- if (src & 0x04) {
- /* poll PWON status and power off the phone when the
- * powerbutton has been released (otherwise it will
- * poweron immediately again) */
- while (!(twl3025_reg_read(VRPCSTS) & 0x10)) { };
- twl3025_power_off();
- }
if (src & 0x08)
handle_charger();
if (src & 0x20)
@@ -193,6 +187,17 @@ static void twl3025_wait_ibic_access(void)
void twl3025_power_off(void)
{
+ unsigned long flags;
+
+ /* turn off all IRQs, since received frames cannot be
+ * handled form here. (otherwise the message allocation
+ * runs out of memory) */
+ local_firq_save(flags);
+
+ /* poll PWON status and power off the phone when the
+ * powerbutton has been released (otherwise it will
+ * poweron immediately again) */
+ while (!(twl3025_reg_read(VRPCSTS) & 0x10)) { };
twl3025_reg_write(VRPCDEV, 0x01);
}
diff --git a/src/target/firmware/apps/chainload/main.c b/src/target/firmware/apps/chainload/main.c
index 5121837f..9dfa2176 100644
--- a/src/target/firmware/apps/chainload/main.c
+++ b/src/target/firmware/apps/chainload/main.c
@@ -29,6 +29,7 @@
#include <delay.h>
#include <calypso/clock.h>
+#include <calypso/timer.h>
/* Main Program */
diff --git a/src/target/firmware/apps/compal_dsp_dump/main.c b/src/target/firmware/apps/compal_dsp_dump/main.c
index c823d0ae..f148d50d 100644
--- a/src/target/firmware/apps/compal_dsp_dump/main.c
+++ b/src/target/firmware/apps/compal_dsp_dump/main.c
@@ -37,6 +37,7 @@
#include <calypso/irq.h>
#include <calypso/misc.h>
#include <comm/timer.h>
+#include <fb/framebuffer.h>
/* Main Program */
const char *hr = "======================================================================\n";
@@ -52,11 +53,33 @@ int main(void)
dump_dev_id();
puts(hr);
+ fb_clear();
+
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setbg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVB14);
+
+ fb_gotoxy(2,20);
+ fb_putstr("DSP Dump",framebuffer->width-4);
+
+ fb_setfg(FB_COLOR_RED);
+ fb_setbg(FB_COLOR_BLUE);
+
+ fb_gotoxy(2,25);
+ fb_boxto(framebuffer->width-3,38);
+
+ fb_setfg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(8,33);
+ fb_putstr("osmocom-bb",framebuffer->width-4);
+
+ fb_flush();
+
/* Dump DSP content */
dsp_dump();
while (1) {
- update_timers();
+ osmo_timers_update();
}
}
diff --git a/src/target/firmware/apps/hello_world/main.c b/src/target/firmware/apps/hello_world/main.c
index 5e3ed85e..3720088e 100644
--- a/src/target/firmware/apps/hello_world/main.c
+++ b/src/target/firmware/apps/hello_world/main.c
@@ -31,7 +31,6 @@
#include <keypad.h>
#include <board.h>
#include <abb/twl3025.h>
-#include <display.h>
#include <rf/trf6151.h>
#include <calypso/clock.h>
#include <calypso/tpu.h>
@@ -41,6 +40,8 @@
#include <calypso/misc.h>
#include <comm/sercomm.h>
#include <comm/timer.h>
+#include <fb/framebuffer.h>
+#include <battery/battery.h>
/* Main Program */
const char *hr = "======================================================================\n";
@@ -55,7 +56,6 @@ static void console_rx_cb(uint8_t dlci, struct msgb *msg)
}
printf("Message on console DLCI: '%s'\n", msg->data);
- display_puts((char *) msg->data);
msgb_free(msg);
}
@@ -68,6 +68,36 @@ static void l1a_l23_rx_cb(uint8_t dlci, struct msgb *msg)
puts("\n");
}
+void
+write_battery_info(void *p){
+ char buf[128];
+
+ fb_setfg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_C64);
+
+ snprintf(buf,sizeof(buf),"B: %04d mV",battery_info.bat_volt_mV);
+ fb_gotoxy(8,41);
+ fb_putstr(buf,framebuffer->width-8);
+
+ snprintf(buf,sizeof(buf),"C: %04d mV",battery_info.charger_volt_mV);
+ fb_gotoxy(8,49);
+ fb_putstr(buf,framebuffer->width-8);
+
+ snprintf(buf,sizeof(buf),"F: %08x",battery_info.flags);
+ fb_gotoxy(8,57);
+ fb_putstr(buf,framebuffer->width-8);
+
+ fb_flush();
+ osmo_timer_schedule((struct osmo_timer_list*)p,100);
+
+}
+
+/* timer that fires the charging loop regularly */
+static struct osmo_timer_list write_battery_info_timer = {
+ .cb = &write_battery_info,
+ .data = &write_battery_info_timer
+};
+
int main(void)
{
board_init();
@@ -89,6 +119,30 @@ int main(void)
calypso_clk_dump();
puts(hr);
+ fb_clear();
+
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setbg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVB14);
+
+ fb_gotoxy(2,20);
+ fb_putstr("Hello World!",framebuffer->width-4);
+
+ fb_setfg(FB_COLOR_RED);
+ fb_setbg(FB_COLOR_BLUE);
+
+ fb_gotoxy(2,25);
+ fb_boxto(framebuffer->width-3,38);
+
+ fb_setfg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(8,33);
+ fb_putstr("osmocom-bb",framebuffer->width-4);
+
+ fb_flush();
+
+
+
/* Dump all memory */
//dump_mem();
#if 0
@@ -97,16 +151,15 @@ int main(void)
puts(hr);
#endif
- display_set_attr(DISP_ATTR_INVERT);
- display_puts("Hello World");
-
sercomm_register_rx_cb(SC_DLCI_CONSOLE, console_rx_cb);
sercomm_register_rx_cb(SC_DLCI_L1A_L23, l1a_l23_rx_cb);
+ osmo_timer_schedule(&write_battery_info_timer,100);
+
/* beyond this point we only react to interrupts */
puts("entering interrupt loop\n");
while (1) {
- update_timers();
+ osmo_timers_update();
}
twl3025_power_off();
@@ -132,16 +185,13 @@ void key_handler(enum key_codes code, enum key_states state)
case KEY_7:
case KEY_8:
case KEY_9:
- sprintf(test, "%d", code - KEY_0);
- display_puts(test);
+ // used to be display_puts...
break;
case KEY_STAR:
- sprintf(test, "*", 0);
- display_puts(test);
+ // used to be display puts...
break;
case KEY_HASH:
- sprintf(test, "#", 0);
- display_puts(test);
+ // used to be display puts...
break;
default:
break;
diff --git a/src/target/firmware/apps/l1test/main.c b/src/target/firmware/apps/l1test/main.c
deleted file mode 100644
index d1ca3d60..00000000
--- a/src/target/firmware/apps/l1test/main.c
+++ /dev/null
@@ -1,249 +0,0 @@
-/* main program of Free Software for Calypso Phone */
-
-/* (C) 2010 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <debug.h>
-#include <memory.h>
-#include <delay.h>
-#include <rffe.h>
-#include <keypad.h>
-#include <board.h>
-
-#include <abb/twl3025.h>
-#include <display.h>
-#include <rf/trf6151.h>
-
-#include <comm/sercomm.h>
-#include <comm/timer.h>
-
-#include <calypso/clock.h>
-#include <calypso/tpu.h>
-#include <calypso/tsp.h>
-#include <calypso/irq.h>
-#include <calypso/misc.h>
-
-#include <layer1/sync.h>
-#include <layer1/tpu_window.h>
-
-#define SCAN
-
-#ifdef SCAN
-/* if scanning is enabled, scan from 0 ... 124 */
-#define BASE_ARFCN 0
-#else
-/* fixed ARFCN in GSM1800 at which Harald has his GSM test license */
-#define BASE_ARFCN 871
-#endif
-
-/* Main Program */
-const char *hr = "======================================================================\n";
-
-/* Best ARFCN MAP ************************************************************/
-
-struct arfcn_map {
- uint16_t arfcn;
- int16_t dbm8;
-};
-
-static struct arfcn_map best_arfcn_map[10];
-static void best_arfcn_update(uint16_t arfcn, int16_t dbm8)
-{
- unsigned int i;
- for (i = 0; i < ARRAY_SIZE(best_arfcn_map); i++) {
- if (best_arfcn_map[i].dbm8 < dbm8 ||
- best_arfcn_map[i].dbm8 == 0) {
- best_arfcn_map[i].dbm8 = dbm8;
- best_arfcn_map[i].arfcn = arfcn;
- return;
- }
- }
-}
-
-static void best_arfcn_dump(void)
-{
- unsigned int i;
-
- for (i = 0; i < ARRAY_SIZE(best_arfcn_map); i++) {
- if (best_arfcn_map[i].dbm8 == 0)
- continue;
- printf("ARFCN %3d: %d dBm\n",
- best_arfcn_map[i].arfcn,
- best_arfcn_map[i].dbm8/8);
- }
-}
-
-
-/* MAIN program **************************************************************/
-
-enum l1test_state {
- STATE_NONE,
- STATE_PM,
- STATE_FB,
-};
-
-static void l1test_state_change(enum l1test_state new_state)
-{
- switch (new_state) {
- case STATE_PM:
- puts("Performing power measurement over GSM900\n");
- l1s_pm_test(1, BASE_ARFCN);
- break;
- case STATE_FB:
- puts("Starting FCCH Recognition\n");
- l1s_fb_test(1, 0);
- break;
- case STATE_NONE:
- /* disable frame interrupts */
- tpu_frame_irq_en(0, 0);
- break;
- }
-}
-
-/* completion call-back for the L1 Sync Power Measurement */
-static void l1s_signal_cb(struct l1_signal *sig)
-{
- uint16_t i, next_arfcn;
-
- switch (sig->signum) {
- case L1_SIG_PM:
- best_arfcn_update(sig->arfcn, sig->pm.dbm8[0]);
- next_arfcn = sig->arfcn + 1;
-
- if (next_arfcn >= 124) {
- puts("ARFCN Top 10 Rx Level\n");
- best_arfcn_dump();
-
- trf6151_rx_window(0, best_arfcn_map[0].arfcn, 40, 0);
- tpu_end_scenario();
-
- /* PM phase completed, do FB det */
- l1test_state_change(STATE_FB);
-
- break;
- }
-
- /* restart Power Measurement */
- l1s_pm_test(1, next_arfcn);
- break;
- case L1_SIG_NB:
- puts("NB SNR ");
- for (i = 0; i < 4; i++) {
- uint16_t snr = sig->nb.meas[i].snr;
- printf("%d.%03u ", l1s_snr_int(snr), l1s_snr_fract(snr));
- }
- putchar('\n');
- printf("--> Frame %d %d 0x%04X ", sig->nb.fire, sig->nb.crc, sig->nb.num_biterr);
- for (i = 0; i < ARRAY_SIZE(sig->nb.frame); i++)
- printf("%02X ", sig->nb.frame[i]);
- putchar('\n');
- break;
- }
-}
-
-static void key_handler(enum key_codes code, enum key_states state);
-
-int main(void)
-{
- board_init();
-
- puts("\n\nHello World from " __FILE__ " program code\n");
-
- puts(hr);
- /* Dump device identification */
- dump_dev_id();
- puts(hr);
-
- keypad_set_handler(&key_handler);
-
- /* Dump clock config after PLL set */
- calypso_clk_dump();
- puts(hr);
-
- display_set_attr(DISP_ATTR_INVERT);
- display_puts("l1test.bin");
-
- layer1_init();
- l1s_set_handler(&l1s_signal_cb);
-
- //dsp_checksum_task();
-#ifdef SCAN
- l1test_state_change(STATE_PM);
-#else
- l1test_state_change(STATE_FB);
-#endif
- tpu_frame_irq_en(1, 1);
-
- while (1) {
- update_timers();
- }
-
- /* NOT REACHED */
-
- twl3025_power_off();
-}
-
-static int afcout = 0;
-
-static void tspact_toggle(uint8_t num)
-{
- printf("TSPACT%u toggle\n", num);
- tsp_act_toggle((1 << num));
- tpu_enq_sleep();
- tpu_enable(1);
- tpu_wait_idle();
-}
-
-static void key_handler(enum key_codes code, enum key_states state)
-{
- if (state != PRESSED)
- return;
-
- switch (code) {
- case KEY_4:
- tspact_toggle(6); /* TRENA (RFFE) */
- break;
- case KEY_5:
- tspact_toggle(8); /* GSM_TXEN (RFFE) */
- break;
- case KEY_6:
- tspact_toggle(1); /* PAENA (RFFE) */
- break;
- case KEY_7: /* decrement AFC OUT */
- afcout -= 100;
- if (afcout < -4096)
- afcout = -4096;
- twl3025_afc_set(afcout);
- printf("AFC OUT: %u\n", twl3025_afcout_get());
- break;
- case KEY_9: /* increase AFC OUT */
- afcout += 100;
- if (afcout > 4095)
- afcout = 4095;
- twl3025_afc_set(afcout);
- printf("AFC OUT: %u\n", twl3025_afcout_get());
- break;
- default:
- break;
- }
-}
diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c
index 61a400cf..a8d4f5d5 100644
--- a/src/target/firmware/apps/layer1/main.c
+++ b/src/target/firmware/apps/layer1/main.c
@@ -32,7 +32,6 @@
#include <board.h>
#include <abb/twl3025.h>
-#include <display.h>
#include <rf/trf6151.h>
#include <comm/sercomm.h>
@@ -48,6 +47,9 @@
#include <layer1/sync.h>
#include <layer1/async.h>
#include <layer1/tpu_window.h>
+#include <layer1/l23_api.h>
+
+#include <fb/framebuffer.h>
const char *hr = "======================================================================\n";
@@ -75,26 +77,44 @@ int main(void)
calypso_clk_dump();
puts(hr);
- display_puts("layer1.bin");
+ fb_clear();
- /* initialize SIM */
- calypso_sim_init();
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setbg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVB14);
- puts("Power up simcard:\n");
- memset(atr,0,sizeof(atr));
- atrLength = calypso_sim_powerup(atr);
+ fb_gotoxy(2,20);
+ fb_putstr("Layer 1",framebuffer->width-4);
+ fb_setfg(FB_COLOR_RED);
+ fb_setbg(FB_COLOR_BLUE);
- layer1_init();
+ fb_gotoxy(2,25);
+ fb_boxto(framebuffer->width-3,38);
+
+ fb_setfg(FB_COLOR_WHITE);
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(8,33);
+ fb_putstr("osmocom-bb",framebuffer->width-4);
+
+ fb_flush();
- display_unset_attr(DISP_ATTR_INVERT);
+ /* initialize SIM */
+ calypso_sim_init();
+
+ puts("Power up simcard:\n");
+ memset(atr,0,sizeof(atr));
+ atrLength = calypso_sim_powerup(atr);
+
+ layer1_init();
tpu_frame_irq_en(1, 1);
while (1) {
l1a_compl_execute();
- update_timers();
+ osmo_timers_update();
sim_handler();
+ l1a_l23_handler();
}
/* NOT REACHED */
diff --git a/src/target/firmware/apps/loader/main.c b/src/target/firmware/apps/loader/main.c
index 2ff6f9ce..c55c56cd 100644
--- a/src/target/firmware/apps/loader/main.c
+++ b/src/target/firmware/apps/loader/main.c
@@ -45,6 +45,7 @@
#include <calypso/tsp.h>
#include <calypso/irq.h>
#include <calypso/misc.h>
+#include <calypso/backlight.h>
#include <uart.h>
#include <calypso/timer.h>
diff --git a/src/target/firmware/apps/rssi/main.c b/src/target/firmware/apps/rssi/main.c
new file mode 100644
index 00000000..7d10e1cd
--- /dev/null
+++ b/src/target/firmware/apps/rssi/main.c
@@ -0,0 +1,1562 @@
+/* Cell Monitor of Free Software for Calypso Phone */
+
+/* (C) 2012 by Andreas Eversberg <jolly@eversberg.eu>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include <debug.h>
+#include <memory.h>
+#include <delay.h>
+#include <byteorder.h>
+#include <rffe.h>
+#include <keypad.h>
+#include <board.h>
+#include <abb/twl3025.h>
+#include <rf/trf6151.h>
+#include <calypso/clock.h>
+#include <calypso/tpu.h>
+#include <calypso/tsp.h>
+#include <calypso/dsp.h>
+#include <calypso/irq.h>
+#include <calypso/misc.h>
+#include <calypso/buzzer.h>
+#include <comm/sercomm.h>
+#include <comm/timer.h>
+#include <fb/framebuffer.h>
+#include <layer1/sync.h>
+#include <layer1/async.h>
+#include <layer1/l23_api.h>
+#include <osmocom/gsm/rsl.h>
+#include <osmocom/gsm/protocol/gsm_04_08.h>
+#include <osmocom/gsm/gsm48_ie.h>
+#include <battery/battery.h>
+
+enum key_codes key_code = KEY_INV;
+int key_pressed = 0;
+enum key_codes key_pressed_code;
+unsigned long key_pressed_when;
+unsigned int key_pressed_delay;
+
+enum mode {
+ MODE_MAIN,
+ MODE_SPECTRUM,
+ MODE_ARFCN,
+ MODE_SYNC,
+ MODE_RACH,
+} mode = MODE_MAIN;
+enum mode last_mode; /* where to return after entering ARFCN */
+
+static uint16_t arfcn = 0, ul_arfcn;
+int pcs = 0;
+int uplink = 0;
+int max = 0;
+uint8_t power, max_power;
+char input[5];
+int cursor;
+
+char *sync_result = NULL;
+char *sync_msg = "";
+
+static struct band {
+ int min, max, prev, next, freq_ul, freq_dl;
+} bands[] = {
+ { 128, 251, 124, 512, 8242, 8692 }, /* GSM 850 */
+ { 955, 124, 885, 128, 8762, 9212 }, /* P,E,R GSM */
+ { 512, 885, 251, 955, 17102, 18052 }, /* DCS 1800 */
+ { 0, 0, 0, 0, 0, 0},
+};
+
+struct band *band;
+
+#define PCS_MIN 512
+#define PCS_MAX 810
+#define DCS_MIN 512
+#define DCS_MAX 885
+#define PCS_UL 18502
+#define PCS_DL 19302
+
+enum pm_mode {
+ PM_IDLE,
+ PM_SENT,
+ PM_RANGE_SENT,
+ PM_RANGE_RESULT,
+ PM_RESULT,
+} pm_mode = PM_IDLE;
+
+#define NUM_PM_DL 2
+#define NUM_PM_UL 10
+int pm_meas[NUM_PM_UL];
+int pm_count = 0;
+int pm_max = 2;
+uint8_t pm_spectrum[1024];
+int pm_scale = 1; /* scale measured power level */
+
+#define TONE_JIFFIES ((HZ < 25) ? 1 : HZ / 25)
+int tone = 0;
+unsigned long tone_time;
+int tone_on = 0;
+
+uint8_t bsic;
+uint8_t ul_levels[8], ul_max[8]; /* 8 uplink levels */
+uint8_t si_1[23];
+uint8_t si_2[23];
+uint8_t si_2bis[23];
+uint8_t si_2ter[23];
+uint8_t si_3[23];
+uint8_t si_4[23];
+uint16_t si_new = 0, ul_new;
+uint16_t mcc, mnc, lac, cell_id;
+int ccch_conf;
+int nb_num;
+struct gsm_sysinfo_freq freq[1024];
+#define NEIGH_LINES ((framebuffer->height - 25) / 8)
+
+#define FREQ_TYPE_SERV 0x01 /* frequency of the serving cell */
+#define FREQ_TYPE_NCELL 0x1c /* frequency of the neighbor cell */
+#define FREQ_TYPE_NCELL_2 0x04 /* sub channel of SI 2 */
+#define FREQ_TYPE_NCELL_2bis 0x08 /* sub channel of SI 2bis */
+#define FREQ_TYPE_NCELL_2ter 0x10 /* sub channel of SI 2ter */
+
+int rach = 0;
+struct gsm48_req_ref rach_ref;
+uint8_t rach_ra;
+unsigned long rach_when;
+uint8_t ta;
+
+enum assign {
+ ASSIGN_NONE,
+ ASSIGN_NO_TX,
+ ASSIGN_RESULT,
+ ASSIGN_REJECT,
+ ASSIGN_TIMEOUT,
+} assign;
+
+/* UI */
+
+static void print_display(char *text, int *y, int c)
+{
+ /* skip lines, given by cursor */
+ (*y)++;
+ if (c >= (*y))
+ return;
+ /* skip, if end of display area is reached */
+ if ((*y) - c > NEIGH_LINES)
+ return;
+
+ fb_gotoxy(0, 20 + (((*y) - c - 1) << 3));
+ fb_putstr(text, framebuffer->width);
+}
+
+static void refresh_display(void)
+{
+ char text[16];
+ int bat = battery_info.battery_percent;
+
+ fb_clear();
+
+ /* header */
+ fb_setbg(FB_COLOR_WHITE);
+ if (mode != MODE_SPECTRUM && !(mode == MODE_SYNC && cursor < 0)) {
+ fb_setfg(FB_COLOR_BLUE);
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(0, 7);
+ fb_putstr("Osmocom RSSI", -1);
+ fb_setfg(FB_COLOR_RGB(0xc0, 0xc0, 0x00));
+ fb_setfont(FB_FONT_SYMBOLS);
+ fb_gotoxy(framebuffer->width - 15, 8);
+ if (bat >= 100 && (battery_info.flags & BATTERY_CHG_ENABLED)
+ && !(battery_info.flags & BATTERY_CHARGING))
+ fb_putstr("@HHBC", framebuffer->width);
+ else {
+ sprintf(text, "@%c%c%cC", (bat >= 30) ? 'B':'A',
+ (bat >= 60) ? 'B':'A', (bat >= 90) ? 'B':'A');
+ fb_putstr(text, framebuffer->width);
+ }
+ fb_gotoxy(0, 8);
+ sprintf(text, "%c%cE%c%c", (power >= 40) ? 'D':'G',
+ (power >= 10) ? 'D':'G', (power >= 10) ? 'F':'G',
+ (power >= 40) ? 'F':'G');
+ fb_putstr(text, framebuffer->width);
+ fb_setfg(FB_COLOR_GREEN);
+ fb_gotoxy(0, 10);
+ fb_boxto(framebuffer->width - 1, 10);
+ }
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setfont(FB_FONT_C64);
+
+ /* RACH */
+ if (mode == MODE_RACH) {
+ unsigned long elapsed = jiffies - rach_when;
+
+ fb_gotoxy(0,28);
+ switch (assign) {
+ case ASSIGN_NONE:
+ fb_putstr("Rach sent...", -1);
+ break;
+ case ASSIGN_RESULT:
+ sprintf(text, "TA = %d", ta);
+ fb_putstr(text, -1);
+ fb_gotoxy(0,36);
+ sprintf(text, "(%dm)", ta * 554);
+ fb_putstr(text, -1);
+ break;
+ case ASSIGN_REJECT:
+ fb_putstr("Rejected!", -1);
+ break;
+ case ASSIGN_NO_TX:
+ fb_putstr("TX disabled", -1);
+ break;
+ case ASSIGN_TIMEOUT:
+ fb_putstr("Timeout", -1);
+ break;
+ }
+ switch (assign) {
+ case ASSIGN_RESULT:
+ case ASSIGN_REJECT:
+ fb_gotoxy(0,44);
+ sprintf(text, "Delay:%ldms", elapsed * 1000 / HZ);
+ fb_putstr(text, -1);
+ break;
+ default:
+ break;
+ }
+ }
+
+ /* SYNC / UL levels */
+ if (mode == MODE_SYNC && cursor < 0) {
+ int i, tn, l;
+ int offset = (framebuffer->width - 96) >> 1;
+ int height = framebuffer->height - 25;
+
+ fb_setfont(FB_FONT_HELVR08);
+ for (i = 0; i < 8; i++) {
+ if (uplink)
+ tn = (i + 3) & 7; /* UL is shifted by 3 */
+ else
+ tn = i;
+ fb_setbg(FB_COLOR_WHITE);
+ fb_gotoxy(offset + 12 * i, 7);
+ l = (max) ? ul_max[tn] : ul_levels[tn];
+ l = 110 - l;
+ if (l >= 100)
+ l -= 100;
+ sprintf(text, "%02d", l);
+ fb_putstr(text, framebuffer->width);
+ fb_setbg(FB_COLOR_BLACK);
+ fb_gotoxy(offset + 3 + 12 * i, height + 10);
+ fb_boxto(offset + 3 + 12 * i + 5, height + 10 - ul_levels[tn] * height / 64);
+ if (max) {
+ fb_gotoxy(offset + 3 + 12 * i, height + 10 - ul_max[tn] * height / 64);
+ fb_boxto(offset + 3 + 12 * i + 5, height + 10 - ul_max[tn] * height / 64);
+ }
+ }
+ fb_setbg(FB_COLOR_TRANSP);
+ if (max) {
+ fb_setfg(FB_COLOR_RED);
+ fb_gotoxy(framebuffer->width - 16, 15);
+ fb_putstr("max", framebuffer->width);
+ }
+ fb_setfont(FB_FONT_C64);
+ fb_setfg(FB_COLOR_BLUE);
+ fb_gotoxy(0, 16);
+ if (pcs && ul_arfcn >= PCS_MIN && ul_arfcn <= PCS_MAX)
+ sprintf(text, "%4dP", ul_arfcn);
+ else if (ul_arfcn >= DCS_MIN && ul_arfcn <= DCS_MAX)
+ sprintf(text, "%4dD", ul_arfcn);
+ else
+ sprintf(text, "%4d ", ul_arfcn);
+ fb_putstr(text, framebuffer->width);
+ fb_setbg(FB_COLOR_WHITE);
+ fb_setfg(FB_COLOR_BLACK);
+ }
+
+ /* SYNC / SI */
+ if (mode == MODE_SYNC && cursor == 0) {
+ fb_gotoxy(0, 20);
+ if (sync_msg[0] == 'o')
+ sprintf(text, "BSIC%d/%d %4d", bsic >> 3, bsic & 7,
+ power - 110);
+ else
+ sprintf(text, "Sync %s", sync_msg);
+ fb_putstr(text, -1);
+
+ fb_gotoxy(0,28);
+ text[0] = si_1[2] ? '1' : '-';
+ text[1] = ' ';
+ text[2] = si_2[2] ? '2' : '-';
+ text[3] = ' ';
+ text[4] = si_2bis[2] ? '2' : '-';
+ text[5] = si_2bis[2] ? 'b' : ' ';
+ text[6] = si_2ter[2] ? '2' : '-';
+ text[7] = si_2ter[2] ? 't' : ' ';
+ text[8] = ' ';
+ text[9] = si_3[2] ? '3' : '-';
+ text[10] = ' ';
+ text[11] = si_4[2] ? '4' : '-';
+ text[12] = '\0';
+ fb_putstr(text, -1);
+
+ fb_gotoxy(0, 36);
+ fb_putstr("MCC MNC LAC ", -1);
+ fb_gotoxy(0, 44);
+ if (mcc) {
+ if ((mnc & 0x00f) == 0x00f)
+ sprintf(text, "%3x %02x %04x", mcc, mnc >> 4, lac);
+ else
+ sprintf(text, "%3x %03x %04x", mcc, mnc, lac);
+ fb_putstr(text, -1);
+ } else
+ fb_putstr("--- --- ----", -1);
+ fb_gotoxy(0, 52);
+ if (si_3[2]) {
+ sprintf(text, "cell id:%04x", cell_id);
+ fb_putstr(text, -1);
+ } else
+ fb_putstr("cell id:----", -1);
+ }
+
+ /* SYNC / neighbour cells */
+ if (mode == MODE_SYNC && cursor > 0) {
+ int i, y = 0;
+
+ text[0] = '\0';
+ for (i = 0; i < 1024; i++) {
+ if (freq[i].mask & FREQ_TYPE_SERV) {
+ if (!text[0])
+ sprintf(text, "S: %4d", i);
+ else {
+ sprintf(text + 7, " %4d", i);
+ print_display(text, &y, cursor - 1);
+ text[0] = '\0';
+ }
+ }
+ }
+ if (text[0])
+ print_display(text, &y, cursor - 1);
+ text[0] = '\0';
+ for (i = 0; i < 1024; i++) {
+ if (freq[i].mask & FREQ_TYPE_NCELL) {
+ if (!text[0])
+ sprintf(text, "N: %4d", i);
+ else {
+ sprintf(text + 7, " %4d", i);
+ print_display(text, &y, cursor - 1);
+ text[0] = '\0';
+ }
+ }
+ }
+ if (text[0])
+ print_display(text, &y, cursor - 1);
+ nb_num = y;
+ }
+
+ /* ARFCN */
+ if (mode == MODE_MAIN || mode == MODE_ARFCN) {
+ fb_gotoxy(0, 20);
+ if (mode == MODE_ARFCN)
+ sprintf(text, "ARFCN %s", input);
+ else if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX)
+ sprintf(text, "ARFCN %dPCS", arfcn);
+ else if (arfcn >= DCS_MIN && arfcn <= DCS_MAX)
+ sprintf(text, "ARFCN %dDCS", arfcn);
+ else
+ sprintf(text, "ARFCN %d", arfcn);
+ fb_putstr(text,framebuffer->width);
+ }
+
+ /* cursor */
+ if (mode == MODE_ARFCN) {
+ fb_setfg(FB_COLOR_WHITE);
+ fb_setbg(FB_COLOR_BLUE);
+ fb_putstr(" ", framebuffer->width);
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setbg(FB_COLOR_WHITE);
+ }
+
+ /* Frequency / power */
+ if (mode == MODE_MAIN) {
+ int f;
+
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) {
+ if (uplink)
+ f = PCS_UL;
+ else
+ f = PCS_DL;
+ } else if (uplink)
+ f = band->freq_ul;
+ else
+ f = band->freq_dl;
+ f += ((arfcn - band->min) & 1023) << 1;
+
+ fb_gotoxy(0, 30);
+ sprintf(text, "Freq. %d.%d", f / 10, f % 10);
+ fb_putstr(text,framebuffer->width);
+
+ fb_gotoxy(0, 40);
+ sprintf(text, "Power %d", ((max) ? max_power : power) - 110);
+ fb_putstr(text, framebuffer->width);
+ if (max) {
+ fb_setfont(FB_FONT_HELVR08);
+ fb_setfg(FB_COLOR_RED);
+ fb_gotoxy(framebuffer->width - 16, 39);
+ fb_putstr("max", framebuffer->width);
+ fb_setfont(FB_FONT_C64);
+ fb_setfg(FB_COLOR_BLACK);
+ }
+ fb_setbg(FB_COLOR_BLACK);
+ fb_gotoxy(0, 45);
+ fb_boxto(framebuffer->width * power / 64, 50);
+ if (max) {
+ fb_gotoxy(framebuffer->width * max_power / 64 ,45);
+ fb_boxto(framebuffer->width * max_power / 64, 50);
+ }
+ fb_setbg(FB_COLOR_WHITE);
+ }
+
+ /* spectrum */
+ if (mode == MODE_SPECTRUM) {
+ int i;
+ uint16_t a, e, p;
+ int height = framebuffer->height - 25;
+
+ fb_gotoxy(0, 8);
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX)
+ sprintf(text, "%4dP", arfcn);
+ else if (arfcn >= DCS_MIN && arfcn <= DCS_MAX)
+ sprintf(text, "%4dD", arfcn);
+ else
+ sprintf(text, "%4d ", arfcn);
+ sprintf(text + 5, " %4d", pm_spectrum[arfcn & 1023] - 110);
+ fb_putstr(text, -1);
+ fb_setfg(FB_COLOR_RED);
+ if (max) {
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(framebuffer->width - 16,15);
+ fb_putstr("max", framebuffer->width);
+ fb_setfont(FB_FONT_C64);
+ }
+ if (pm_scale != 1) {
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(1, 15);
+ sprintf(text, "x%d", pm_scale);
+ fb_putstr(text, framebuffer->width);
+ fb_setfont(FB_FONT_C64);
+ }
+ fb_setfg(FB_COLOR_BLACK);
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) {
+ a = PCS_MIN;
+ e = PCS_MAX;
+ } else {
+ a = band->min;
+ e = band->max;
+ }
+ for (i = 0; i < framebuffer->width; i++) {
+ p = (arfcn + i - (framebuffer->width >> 1)) & 1023;
+ if ((((p - a) & 1023) & 512))
+ continue;
+ if ((((e - p) & 1023) & 512))
+ continue;
+ p = (pm_spectrum[p] * pm_scale * height / 64);
+ if (p > height)
+ p = height;
+ if (i == (framebuffer->width >> 1))
+ fb_setfg(FB_COLOR_RED);
+ fb_gotoxy(i, height + 10 - p);
+ fb_boxto(i, height + 10);
+ if (i == (framebuffer->width >> 1))
+ fb_setfg(FB_COLOR_BLACK);
+ }
+ i = framebuffer->width >> 1;
+ fb_gotoxy(i, 0);
+ fb_boxto(i, 4);
+ fb_gotoxy(i, height + 10);
+ fb_boxto(i, height + 14);
+ }
+
+ /* footer */
+ fb_setfg(FB_COLOR_GREEN);
+ fb_gotoxy(0, framebuffer->height - 10);
+ fb_boxto(framebuffer->width-1, framebuffer->height - 10);
+ fb_gotoxy(0, framebuffer->height - 1);
+ fb_setfg(FB_COLOR_RED);
+ if (mode == MODE_ARFCN)
+ sprintf(text, "%s %s", (cursor) ? "del " : "back",
+ (cursor) ? "enter" : " ");
+ else if (mode == MODE_SYNC && cursor < 0)
+ sprintf(text, "%s %s", "back",
+ (uplink) ? "UL" : "DL");
+ else if (mode == MODE_SYNC || mode == MODE_RACH)
+ sprintf(text, "%s ", "back");
+ else
+ sprintf(text, "%s %s", (pcs) ? "PCS" : "DCS",
+ (uplink) ? "UL" : "DL");
+ fb_putstr(text, -1);
+ fb_setfg(FB_COLOR_BLACK);
+ fb_setfont(FB_FONT_HELVR08);
+ fb_gotoxy(0, framebuffer->height - 2);
+ sprintf(text, "%d", tone / 25);
+ fb_putstr(text, -1);
+
+ fb_flush();
+}
+
+static void exit_arfcn(void)
+{
+ mode = last_mode;
+ refresh_display();
+}
+
+static void enter_arfcn(enum key_codes code)
+{
+ /* enter mode */
+ if (mode != MODE_ARFCN) {
+ last_mode = mode;
+ mode = MODE_ARFCN;
+ input[0] = code - KEY_0 + '0';
+ input[1] = '\0';
+ cursor = 1;
+ refresh_display();
+ return;
+ }
+
+ if (code == KEY_LEFT_SB) {
+ /* back */
+ if (cursor == 0) {
+ exit_arfcn();
+ return;
+ }
+ /* delete */
+ cursor--;
+ input[cursor] = '\0';
+ refresh_display();
+ return;
+ }
+
+ if (code == KEY_RIGHT_SB) {
+ int check = 0;
+ int i;
+ struct band *temp = NULL;
+
+ /* nothing entered */
+ if (cursor == 0) {
+ return;
+ }
+ for (i = 0; i < cursor; i++)
+ check = (check << 3) + (check << 1) + input[i] - '0';
+
+ /* check */
+ for (i = 0; bands[i].max; i++) {
+ temp = &bands[i];
+ if (temp->min < temp->max) {
+ if (check >= temp->min && check <= temp->max)
+ break;
+ } else {
+ if (check >= temp->min || check <= temp->max)
+ break;
+ }
+ }
+ if (!bands[i].max)
+ return;
+ if (check > 1023)
+ return;
+ arfcn = check;
+ band = temp;
+ mode = last_mode;
+ refresh_display();
+ return;
+ }
+
+ if (cursor == 4)
+ return;
+
+ input[cursor] = code - KEY_0 + '0';
+ cursor++;
+ input[cursor] = '\0';
+ refresh_display();
+}
+
+static int inc_dec_arfcn(int inc)
+{
+ int i;
+
+ /* select current band */
+ for (i = 0; bands[i].max; i++) {
+ band = &bands[i];
+ if (band->min < band->max) {
+ if (arfcn >= band->min && arfcn <= band->max)
+ break;
+ } else {
+ if (arfcn >= band->min || arfcn <= band->max)
+ break;
+ }
+ }
+ if (!bands[i].max)
+ return -EINVAL;
+
+ if (inc) {
+ if (arfcn == band->max)
+ arfcn = band->next;
+ else if (arfcn == 1023)
+ arfcn = 0;
+ else
+ arfcn++;
+ } else {
+ if (arfcn == band->min)
+ arfcn = band->prev;
+ else if (arfcn == 0)
+ arfcn = 1023;
+ else
+ arfcn--;
+ }
+ /* select next band */
+ for (i = 0; bands[i].max; i++) {
+ band = &bands[i];
+ if (band->min < band->max) {
+ if (arfcn >= band->min && arfcn <= band->max)
+ break;
+ } else {
+ if (arfcn >= band->min || arfcn <= band->max)
+ break;
+ }
+ }
+ if (!bands[i].max)
+ return -EINVAL;
+
+ refresh_display();
+
+ return 0;
+}
+
+static void request_ul_levels(uint16_t a);
+
+static int inc_dec_ul_arfcn(int inc)
+{
+ uint16_t a;
+
+ /* loop until we hit a serving cell or our current bcch arfcn */
+ if (inc) {
+ for (a = (ul_arfcn + 1) & 1023; a != (arfcn & 1023);
+ a = (a + 1) & 1023) {
+ if ((freq[a].mask & FREQ_TYPE_SERV))
+ break;
+ }
+ } else {
+ for (a = (ul_arfcn - 1) & 1023; a != (arfcn & 1023);
+ a = (a - 1) & 1023) {
+ if ((freq[a].mask & FREQ_TYPE_SERV))
+ break;
+ }
+ }
+ ul_arfcn = a;
+
+ refresh_display();
+
+ request_ul_levels(a);
+
+ return 0;
+}
+
+static void toggle_dcs_pcs(void)
+{
+ pcs = !pcs;
+ refresh_display();
+}
+
+static void toggle_up_down(void)
+{
+ uplink = !uplink;
+ refresh_display();
+
+ if (mode == MODE_SYNC && cursor < 0)
+ request_ul_levels(ul_arfcn);
+}
+
+static void toggle_spectrum(void)
+{
+ if (mode == MODE_MAIN) {
+ mode = MODE_SPECTRUM;
+ pm_mode = PM_IDLE;
+ } else if (mode == MODE_SPECTRUM) {
+ mode = MODE_MAIN;
+ pm_mode = PM_IDLE;
+ }
+ l1s_reset();
+ l1s_reset_hw();
+ pm_count = 0;
+ refresh_display();
+}
+
+static void tone_inc_dec(int inc)
+{
+ if (inc) {
+ if (tone + 25 <= 255)
+ tone += 25;
+ } else {
+ if (tone - 25 >= 0)
+ tone -= 25;
+ }
+
+ refresh_display();
+}
+
+static void hold_max(void)
+{
+ max = !max;
+ max_power = power;
+ refresh_display();
+}
+
+static int inc_dec_neighbour(int inc)
+{
+ if (inc) {
+ if (cursor > 0 && cursor - 1 >= (nb_num - NEIGH_LINES))
+ return -EINVAL;
+ cursor++;
+ } else {
+ if (cursor < 0)
+ return -EINVAL;
+ cursor--;
+ }
+
+ refresh_display();
+
+ return 0;
+}
+
+static int inc_dec_spectrum(int inc)
+{
+ if (inc) {
+ pm_scale <<= 1;
+ if (pm_scale > 8)
+ pm_scale = 8;
+ } else {
+ pm_scale >>= 1;
+ if (pm_scale < 1)
+ pm_scale = 1;
+ }
+
+ refresh_display();
+
+ return 0;
+}
+
+static void enter_sync(void);
+static void exit_sync(void);
+
+static void enter_rach(void);
+static void exit_rach(void);
+
+static void handle_key_code()
+{
+ /* key repeat */
+ if (key_pressed) {
+ unsigned long elapsed = jiffies - key_pressed_when;
+ if (elapsed > key_pressed_delay) {
+ key_pressed_when = jiffies;
+ key_pressed_delay = HZ / 10;
+ /* only repeat these keys */
+ if (key_pressed_code == KEY_LEFT
+ || key_pressed_code == KEY_RIGHT)
+ key_code = key_pressed_code;
+ }
+ }
+
+ if (key_code == KEY_INV)
+ return;
+
+ /* do later, do not disturb tone */
+ if (tone_on)
+ return;
+
+ switch (key_code) {
+ case KEY_0:
+ case KEY_1:
+ case KEY_2:
+ case KEY_3:
+ case KEY_4:
+ case KEY_5:
+ case KEY_6:
+ case KEY_7:
+ case KEY_8:
+ case KEY_9:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM || mode == MODE_ARFCN)
+ enter_arfcn(key_code);
+ break;
+ case KEY_UP:
+ if (mode == MODE_MAIN)
+ tone_inc_dec(1);
+ else if (mode == MODE_SYNC)
+ inc_dec_neighbour(0);
+ else if (mode == MODE_SPECTRUM)
+ inc_dec_spectrum(1);
+ break;
+ case KEY_DOWN:
+ if (mode == MODE_MAIN)
+ tone_inc_dec(0);
+ else if (mode == MODE_SYNC)
+ inc_dec_neighbour(1);
+ else if (mode == MODE_SPECTRUM)
+ inc_dec_spectrum(0);
+ break;
+ case KEY_RIGHT:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ inc_dec_arfcn(1);
+ else if (mode == MODE_SYNC && cursor < 0)
+ inc_dec_ul_arfcn(1);
+ break;
+ case KEY_LEFT:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ inc_dec_arfcn(0);
+ else if (mode == MODE_SYNC && cursor < 0)
+ inc_dec_ul_arfcn(0);
+ break;
+ case KEY_LEFT_SB:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ toggle_dcs_pcs();
+ else if (mode == MODE_ARFCN)
+ enter_arfcn(key_code);
+ else if (mode == MODE_SYNC)
+ exit_sync();
+ else if (mode == MODE_RACH)
+ exit_rach();
+ break;
+ case KEY_RIGHT_SB:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ toggle_up_down();
+ else if (mode == MODE_ARFCN)
+ enter_arfcn(key_code);
+ else if (mode == MODE_SYNC && cursor < 0)
+ toggle_up_down();
+ break;
+ case KEY_OK:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ enter_sync();
+ else if (mode == MODE_SYNC || mode == MODE_RACH)
+ enter_rach();
+ break;
+ case KEY_MENU:
+ hold_max();
+ break;
+ case KEY_POWER:
+ if (mode == MODE_ARFCN)
+ exit_arfcn();
+ else if (mode == MODE_SYNC)
+ exit_sync();
+ else if (mode == MODE_RACH)
+ exit_rach();
+ else if (mode == MODE_SPECTRUM)
+ toggle_spectrum();
+ break;
+ case KEY_STAR:
+ if (mode == MODE_MAIN || mode == MODE_SPECTRUM)
+ toggle_spectrum();
+ break;
+ default:
+ break;
+ }
+
+ key_code = KEY_INV;
+}
+
+static void handle_tone(void)
+{
+ unsigned long elapsed = jiffies - tone_time;
+
+ if (!tone_on) {
+ if (!tone || mode != MODE_MAIN)
+ return;
+ /* wait depending on power level */
+ if (elapsed < (uint8_t)(63-power))
+ return;
+ buzzer_volume(tone);
+ buzzer_note(NOTE(NOTE_C, OCTAVE_5));
+ tone_time = jiffies;
+ tone_on = 1;
+ return;
+ }
+
+ if (elapsed >= TONE_JIFFIES) {
+ tone_on = 0;
+ tone_time = jiffies;
+ buzzer_volume(0);
+ }
+}
+
+/* PM handling */
+
+static void handle_pm(void)
+{
+ /* start power measurement */
+ if (pm_mode == PM_IDLE && (mode == MODE_MAIN || mode == MODE_SPECTRUM)) {
+ struct msgb *msg = l1ctl_msgb_alloc(L1CTL_PM_REQ);
+ struct l1ctl_pm_req *pm;
+ uint16_t a, e;
+
+ pm = (struct l1ctl_pm_req *) msgb_put(msg, sizeof(*pm));
+ pm->type = 1;
+ if (mode == MODE_MAIN) {
+ a = arfcn;
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX)
+ a |= ARFCN_PCS;
+ if (uplink)
+ a |= ARFCN_UPLINK;
+ e = a;
+ pm_mode = PM_SENT;
+ }
+ if (mode == MODE_SPECTRUM) {
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) {
+ a = PCS_MIN | ARFCN_PCS;
+ e = PCS_MAX | ARFCN_PCS;
+ } else {
+ a = band->min;
+ e = band->max;
+ }
+ pm_mode = PM_RANGE_SENT;
+ }
+ if (uplink) {
+ a |= ARFCN_UPLINK;
+ e |= ARFCN_UPLINK;
+ }
+ pm->range.band_arfcn_from = htons(a);
+ pm->range.band_arfcn_to = htons(e);
+
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg);
+
+ return;
+ }
+
+ if (pm_mode == PM_RESULT) {
+ pm_mode = PM_IDLE;
+ if (pm_count == pm_max) {
+ int i = 0;
+ int sum = 0;
+
+ if (uplink) {
+ /* find max */
+ for (i = 0; i < pm_count; i++) {
+ if (pm_meas[i] > sum)
+ sum = pm_meas[i];
+ }
+ power = sum;
+ } else {
+ for (i = 0; i < pm_count; i++)
+ sum += pm_meas[i];
+ power = sum / pm_count;
+ }
+ if (power > max_power)
+ max_power = power;
+ pm_count = 0;
+ pm_max = (uplink) ? NUM_PM_UL : NUM_PM_DL;
+ if (!tone_on)
+ refresh_display();
+ }
+ return;
+ }
+
+ if (pm_mode == PM_RANGE_RESULT) {
+ pm_mode = PM_IDLE;
+ refresh_display();
+ buzzer_volume(tone);
+ buzzer_note(NOTE(NOTE_C, OCTAVE_5));
+ tone_time = jiffies;
+ tone_on = 1;
+ return;
+ }
+}
+
+/* sync / SI */
+
+static void enter_sync(void)
+{
+ struct msgb *msg = l1ctl_msgb_alloc(L1CTL_FBSB_REQ);
+ struct l1ctl_fbsb_req *req;
+ uint16_t a = arfcn;
+
+ l1s_reset();
+ l1s_reset_hw();
+ pm_count = 0;
+ pm_mode = PM_IDLE;
+
+ req = (struct l1ctl_fbsb_req *) msgb_put(msg, sizeof(*req));
+ if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX)
+ a |= ARFCN_PCS;
+ req->band_arfcn = htons(a);
+ req->timeout = htons(100);
+ /* Threshold when to consider FB_MODE1: 4kHz - 1kHz */
+ req->freq_err_thresh1 = htons(11000 - 1000);
+ /* Threshold when to consider SCH: 1kHz - 200Hz */
+ req->freq_err_thresh2 = htons(1000 - 200);
+ /* not used yet! */
+ req->num_freqerr_avg = 3;
+ req->flags = L1CTL_FBSB_F_FB01SB;
+ req->sync_info_idx = 0;
+ req->ccch_mode = CCCH_MODE_NONE;
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg);
+
+ mode = MODE_SYNC;
+ memset(ul_levels, 0, sizeof(ul_levels));
+ si_new = 0;
+ ul_new = 0;
+ ul_arfcn = arfcn;
+ si_1[2] = 0;
+ si_2[2] = 0;
+ si_2bis[2] = 0;
+ si_2ter[2] = 0;
+ si_3[2] = 0;
+ si_4[2] = 0;
+ mcc = mnc = lac = 0;
+ ccch_conf = -1;
+ memset(freq, 0, sizeof(freq));
+ cursor = 0;
+ nb_num = 0;
+ sync_msg = "trying";
+ refresh_display();
+}
+
+static void exit_sync(void)
+{
+ l1s_reset();
+ l1s_reset_hw();
+ pm_count = 0;
+ pm_mode = PM_IDLE;
+ mode = MODE_MAIN;
+}
+
+int gsm48_decode_lai(struct gsm48_loc_area_id *lai, uint16_t *_mcc,
+uint16_t *_mnc, uint16_t *_lac)
+{
+ *_mcc = ((lai->digits[0] & 0x0f) << 8)
+ | (lai->digits[0] & 0xf0)
+ | (lai->digits[1] & 0x0f);
+ *_mnc = ((lai->digits[2] & 0x0f) << 8)
+ | (lai->digits[2] & 0xf0)
+ | ((lai->digits[1] & 0xf0) >> 4);
+ *_lac = ntohs(lai->lac);
+
+ return 0;
+}
+
+static void request_ul_levels(uint16_t a)
+{
+ struct msgb *msg = l1ctl_msgb_alloc(L1CTL_NEIGH_PM_REQ);
+ struct l1ctl_neigh_pm_req *pm_req =
+ (struct l1ctl_neigh_pm_req *) msgb_put(msg, sizeof(*pm_req));
+ int i;
+
+ if (pcs && a >= PCS_MIN && a <= PCS_MAX)
+ a |= ARFCN_PCS;
+ if (uplink)
+ a |= ARFCN_UPLINK;
+ pm_req->n = 8;
+ for (i = 0; i < 8; i++) {
+ pm_req->band_arfcn[i] = htons(a);
+ pm_req->tn[i] = i;
+ }
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg);
+}
+
+static void handle_sync(void)
+{
+ struct gsm48_system_information_type_1 *si1;
+ struct gsm48_system_information_type_2 *si2;
+ struct gsm48_system_information_type_2bis *si2bis;
+ struct gsm48_system_information_type_2ter *si2ter;
+ struct gsm48_system_information_type_3 *si3;
+ struct gsm48_system_information_type_4 *si4;
+
+ if (mode != MODE_SYNC)
+ return;
+
+ /* once we synced, we take the result and request UL measurement */
+ if (sync_result) {
+ uint16_t a = ul_arfcn;
+
+ sync_msg = sync_result;
+ sync_result = NULL;
+ refresh_display();
+
+ if (sync_msg[0] != 'o')
+ return;
+
+ request_ul_levels(a);
+
+ return;
+ }
+
+ if (tone_on)
+ return;
+
+ /* no UL result, no SI result */
+ if (!ul_new && !(si_new & 0x100))
+ return;
+
+ /* new UL result */
+ if (ul_new) {
+ ul_new = 0;
+ if (cursor < 0)
+ refresh_display();
+ return;
+ }
+
+ /* decode si */
+ switch (si_new & 0xff) {
+ case GSM48_MT_RR_SYSINFO_1:
+ si1 = (struct gsm48_system_information_type_1 *)si_1;
+ gsm48_decode_freq_list(freq, si1->cell_channel_description,
+ sizeof(si1->cell_channel_description), 0xce,
+ FREQ_TYPE_SERV);
+ break;
+ case GSM48_MT_RR_SYSINFO_2:
+ si2 = (struct gsm48_system_information_type_2 *)si_2;
+ gsm48_decode_freq_list(freq, si2->bcch_frequency_list,
+ sizeof(si2->bcch_frequency_list), 0xce,
+ FREQ_TYPE_NCELL_2);
+ break;
+ case GSM48_MT_RR_SYSINFO_2bis:
+ si2bis = (struct gsm48_system_information_type_2bis *)si_2bis;
+ gsm48_decode_freq_list(freq, si2bis->bcch_frequency_list,
+ sizeof(si2bis->bcch_frequency_list), 0xce,
+ FREQ_TYPE_NCELL_2bis);
+ break;
+ case GSM48_MT_RR_SYSINFO_2ter:
+ si2ter = (struct gsm48_system_information_type_2ter *)si_2ter;
+ gsm48_decode_freq_list(freq, si2ter->ext_bcch_frequency_list,
+ sizeof(si2ter->ext_bcch_frequency_list), 0x8e,
+ FREQ_TYPE_NCELL_2ter);
+ break;
+ case GSM48_MT_RR_SYSINFO_3:
+ si3 = (struct gsm48_system_information_type_3 *)si_3;
+ gsm48_decode_lai(&si3->lai, &mcc, &mnc, &lac);
+ cell_id = ntohs(si3->cell_identity);
+ if (ccch_conf < 0) {
+ struct msgb *msg =
+ l1ctl_msgb_alloc(L1CTL_CCCH_MODE_REQ);
+ struct l1ctl_ccch_mode_req *req =
+ (struct l1ctl_ccch_mode_req *)
+ msgb_put(msg, sizeof(*req));
+
+ ccch_conf = si3->control_channel_desc.ccch_conf;
+ req->ccch_mode = (ccch_conf == 1)
+ ? CCCH_MODE_COMBINED
+ : CCCH_MODE_NON_COMBINED;
+ printf("ccch_mode=%d\n", ccch_conf);
+
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg);
+ }
+ break;
+ case GSM48_MT_RR_SYSINFO_4:
+ si4 = (struct gsm48_system_information_type_4 *)si_4;
+ gsm48_decode_lai(&si4->lai, &mcc, &mnc, &lac);
+ break;
+ }
+
+ if (cursor >= 0)
+ refresh_display();
+
+ /* tone depends on successfully received BCCH */
+ buzzer_volume(tone);
+ tone_time = jiffies;
+ tone_on = 1;
+ if ((si_new & 0xff) == 0xff)
+ buzzer_note(NOTE(NOTE_C, OCTAVE_2));
+ else
+ buzzer_note(NOTE(NOTE_C, OCTAVE_5));
+ si_new = 0;
+}
+
+static void enter_rach(void)
+{
+ if (ccch_conf < 0)
+ return;
+
+ if (rach)
+ return;
+
+#ifndef CONFIG_TX_ENABLE
+ assign = ASSIGN_NO_TX;
+ mode = MODE_RACH;
+ /* display refresh is done by rach handler */
+#else
+ struct msgb *msg1 = l1ctl_msgb_alloc(L1CTL_NEIGH_PM_REQ);
+ struct msgb *msg2 = l1ctl_msgb_alloc(L1CTL_RACH_REQ);
+ struct l1ctl_neigh_pm_req *pm_req = (struct l1ctl_neigh_pm_req *)
+ msgb_put(msg1, sizeof(*pm_req));
+ struct l1ctl_info_ul *ul = (struct l1ctl_info_ul *)
+ msgb_put(msg2, sizeof(*ul));;
+ struct l1ctl_rach_req *rach_req = (struct l1ctl_rach_req *)
+ msgb_put(msg2, sizeof(*rach_req));
+
+ l1s.tx_power = 0;
+
+ pm_req->n = 0; /* disable */
+
+ rach_ra = 0x00;
+ rach_req->ra = rach_ra;
+ rach_req->offset = 0;
+ rach_req->combined = (ccch_conf == 1);
+
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg1);
+ l1a_l23_rx(SC_DLCI_L1A_L23, msg2);
+ rach = 1;
+ rach_when = jiffies;
+ assign = ASSIGN_NONE;
+ mode = MODE_RACH;
+ refresh_display();
+#endif
+
+}
+
+static void exit_rach(void)
+{
+ rach = 0;
+
+ request_ul_levels(ul_arfcn);
+
+ mode = MODE_SYNC;
+ refresh_display();
+}
+
+static void handle_assign(void)
+{
+ if (mode != MODE_RACH)
+ return;
+
+ if (assign == ASSIGN_NONE) {
+ unsigned long elapsed = jiffies - rach_when;
+
+ if (!rach)
+ return;
+ if (elapsed < HZ * 2)
+ return;
+ assign = ASSIGN_TIMEOUT;
+ rach = 0;
+ }
+
+ refresh_display();
+ assign = ASSIGN_NONE;
+}
+
+/* Main Program */
+const char *hr = "======================================================================\n";
+
+/* match request reference agains request history */
+static int gsm48_match_ra(struct gsm48_req_ref *ref)
+{
+ uint8_t ia_t1, ia_t2, ia_t3;
+ uint8_t cr_t1, cr_t2, cr_t3;
+
+ if (rach && ref->ra == rach_ra) {
+ ia_t1 = ref->t1;
+ ia_t2 = ref->t2;
+ ia_t3 = (ref->t3_high << 3) | ref->t3_low;
+ ref = &rach_ref;
+ cr_t1 = ref->t1;
+ cr_t2 = ref->t2;
+ cr_t3 = (ref->t3_high << 3) | ref->t3_low;
+ if (ia_t1 == cr_t1 && ia_t2 == cr_t2 && ia_t3 == cr_t3)
+ return 1;
+ }
+
+ return 0;
+}
+
+
+/* note: called from IRQ context */
+static void rx_imm_ass(struct msgb *msg)
+{
+ struct gsm48_imm_ass *ia = msgb_l3(msg);
+
+ if (gsm48_match_ra(&ia->req_ref)) {
+ assign = ASSIGN_RESULT;
+ ta = ia->timing_advance;
+ rach = 0;
+ }
+}
+
+/* note: called from IRQ context */
+static void rx_imm_ass_ext(struct msgb *msg)
+{
+ struct gsm48_imm_ass_ext *ia = msgb_l3(msg);
+
+ if (gsm48_match_ra(&ia->req_ref1)) {
+ assign = ASSIGN_RESULT;
+ ta = ia->timing_advance1;
+ rach = 0;
+ }
+ if (gsm48_match_ra(&ia->req_ref2)) {
+ assign = ASSIGN_RESULT;
+ ta = ia->timing_advance2;
+ rach = 0;
+ }
+}
+
+/* note: called from IRQ context */
+static void rx_imm_ass_rej(struct msgb *msg)
+{
+ struct gsm48_imm_ass_rej *ia = msgb_l3(msg);
+ struct gsm48_req_ref *req_ref;
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ /* request reference */
+ req_ref = (struct gsm48_req_ref *)
+ (((uint8_t *)&ia->req_ref1) + i * 4);
+ if (gsm48_match_ra(req_ref)) {
+ assign = ASSIGN_REJECT;
+ rach = 0;
+ }
+ }
+}
+
+/* note: called from IRQ context */
+static void rx_pch_agch(struct msgb *msg)
+{
+ struct gsm48_system_information_type_header *sih;
+
+ /* store SI */
+ sih = msgb_l3(msg);
+ switch (sih->system_information) {
+ case GSM48_MT_RR_IMM_ASS:
+ rx_imm_ass(msg);
+ break;
+ case GSM48_MT_RR_IMM_ASS_EXT:
+ rx_imm_ass_ext(msg);
+ break;
+ case GSM48_MT_RR_IMM_ASS_REJ:
+ rx_imm_ass_rej(msg);
+ break;
+ }
+}
+
+/* note: called from IRQ context */
+static void rx_bcch(struct msgb *msg)
+{
+ struct gsm48_system_information_type_header *sih;
+
+ /* store SI */
+ sih = msgb_l3(msg);
+ switch (sih->system_information) {
+ case GSM48_MT_RR_SYSINFO_1:
+ memcpy(si_1, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ case GSM48_MT_RR_SYSINFO_2:
+ memcpy(si_2, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ case GSM48_MT_RR_SYSINFO_2bis:
+ memcpy(si_2bis, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ case GSM48_MT_RR_SYSINFO_2ter:
+ memcpy(si_2ter, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ case GSM48_MT_RR_SYSINFO_3:
+ memcpy(si_3, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ case GSM48_MT_RR_SYSINFO_4:
+ memcpy(si_4, msgb_l3(msg), msgb_l3len(msg));
+ break;
+ }
+ si_new = sih->system_information | 0x100;
+}
+
+/* note: called from IRQ context */
+static void l1a_l23_tx(struct msgb *msg)
+{
+ struct l1ctl_hdr *l1h = (struct l1ctl_hdr *) msg->l1h;
+ struct l1ctl_pm_conf *pmr;
+ struct l1ctl_info_dl *dl;
+ struct l1ctl_fbsb_conf *sb;
+ uint8_t chan_type, chan_ts, chan_ss;
+ struct l1ctl_neigh_pm_ind *pm_ind;
+ struct gsm_time tm;
+
+ switch (l1h->msg_type) {
+ case L1CTL_PM_CONF:
+ if (pm_mode == PM_SENT) {
+ pmr = (struct l1ctl_pm_conf *) l1h->data;
+ pm_meas[pm_count] = pmr->pm[0];
+ pm_count++;
+ pm_mode = PM_RESULT;
+ }
+ if (pm_mode == PM_RANGE_SENT) {
+ for (pmr = (struct l1ctl_pm_conf *) l1h->data;
+ (uint8_t *) pmr < msg->tail; pmr++) {
+ if (!max || pm_spectrum[ntohs(pmr->band_arfcn) & 1023] < pmr->pm[0])
+ pm_spectrum[ntohs(pmr->band_arfcn) & 1023] = pmr->pm[0];
+ }
+ if ((l1h->flags & L1CTL_F_DONE))
+ pm_mode = PM_RANGE_RESULT;
+ }
+ l1s.tpu_offset_correction += 5000 / NUM_PM_UL;
+ break;
+ case L1CTL_FBSB_CONF:
+ dl = (struct l1ctl_info_dl *) l1h->data;
+ sb = (struct l1ctl_fbsb_conf *) dl->payload;
+ if (sb->result == 0)
+ sync_result = "ok";
+ else
+ sync_result = "error";
+ bsic = sb->bsic;
+ break;
+ case L1CTL_DATA_IND:
+ dl = (struct l1ctl_info_dl *) l1h->data;
+ msg->l2h = dl->payload;
+ rsl_dec_chan_nr(dl->chan_nr, &chan_type, &chan_ss, &chan_ts);
+
+ power = dl->rx_level;
+ if (dl->fire_crc >= 2) {
+ if (chan_type == RSL_CHAN_BCCH)
+ si_new = 0x1ff; /* error frame indication */
+ break; /* free, but don't send to sercom */
+ }
+
+ switch (chan_type) {
+ case RSL_CHAN_BCCH:
+ msg->l3h = msg->l2h;
+ rx_bcch(msg);
+ break;
+ case RSL_CHAN_PCH_AGCH:
+ msg->l3h = msg->l2h;
+ rx_pch_agch(msg);
+ break;
+ }
+ sercomm_sendmsg(SC_DLCI_L1A_L23, msg);
+ return; /* msg is freed by sercom */
+ case L1CTL_NEIGH_PM_IND:
+ for (pm_ind = (struct l1ctl_neigh_pm_ind *) l1h->data;
+ (uint8_t *) pm_ind < msg->tail; pm_ind++) {
+ ul_levels[pm_ind->tn] = pm_ind->pm[0];
+ /* hold max only, if max enabled and level is lower */
+ if (!max || ul_levels[pm_ind->tn] > ul_max[pm_ind->tn])
+ ul_max[pm_ind->tn] = ul_levels[pm_ind->tn];
+ if (pm_ind->tn == 7)
+ ul_new = 1;
+ }
+ break;
+ case L1CTL_RACH_CONF:
+ dl = (struct l1ctl_info_dl *) l1h->data;
+ gsm_fn2gsmtime(&tm, ntohl(dl->frame_nr));
+ rach_ref.t1 = tm.t1;
+ rach_ref.t2 = tm.t2;
+ rach_ref.t3_low = tm.t3 & 0x7;
+ rach_ref.t3_high = tm.t3 >> 3;
+ break;
+ }
+
+ msgb_free(msg);
+
+}
+
+static void console_rx_cb(uint8_t dlci, struct msgb *msg)
+{
+ if (dlci != SC_DLCI_CONSOLE) {
+ printf("Message for unknown DLCI %u\n", dlci);
+ return;
+ }
+
+ printf("Message on console DLCI: '%s'\n", msg->data);
+ msgb_free(msg);
+}
+
+static void l1a_l23_rx_cb(uint8_t dlci, struct msgb *msg)
+{
+ int i;
+ printf("l1a_l23_rx_cb (DLCI %d): ", dlci);
+ for (i = 0; i < msg->len; i++)
+ printf("%02x ", msg->data[i]);
+ puts("\n");
+}
+
+static void key_handler(enum key_codes code, enum key_states state)
+{
+ if (state != PRESSED) {
+ key_pressed = 0;
+ return;
+ }
+ /* key repeat */
+ if (!key_pressed) {
+ key_pressed = 1;
+ key_pressed_when = jiffies;
+ key_pressed_code = code;
+ key_pressed_delay = HZ * 6 / 10;
+ }
+
+ key_code = code;
+}
+
+int main(void)
+{
+ board_init();
+
+ puts("\n\nOSMOCOM Monitor Tool (revision " GIT_REVISION ")\n");
+ puts(hr);
+
+ /* Dump device identification */
+ dump_dev_id();
+ puts(hr);
+
+ /* Dump clock config before PLL set */
+ calypso_clk_dump();
+ puts(hr);
+
+ keypad_set_handler(&key_handler);
+
+ /* Dump clock config after PLL set */
+ calypso_clk_dump();
+ puts(hr);
+
+ sercomm_register_rx_cb(SC_DLCI_CONSOLE, console_rx_cb);
+ sercomm_register_rx_cb(SC_DLCI_L1A_L23, l1a_l23_rx_cb);
+
+ layer1_init();
+ l1a_l23_tx_cb = l1a_l23_tx;
+
+// display_unset_attr(DISP_ATTR_INVERT);
+
+ tpu_frame_irq_en(1, 1);
+
+ buzzer_mode_pwt(1);
+ buzzer_volume(0);
+
+ memset(pm_spectrum, 0, sizeof(pm_spectrum));
+ memset(ul_max, 0, sizeof(ul_max));
+
+ /* inc 0 to 1 and refresh */
+ inc_dec_arfcn(1);
+
+ while (1) {
+ l1a_compl_execute();
+ osmo_timers_update();
+ handle_key_code();
+ l1a_l23_handler();
+ handle_pm();
+ handle_sync();
+ handle_assign();
+ handle_tone();
+ }
+
+ /* NOT REACHED */
+
+ twl3025_power_off();
+}
+
diff --git a/src/target/firmware/apps/simtest/main.c b/src/target/firmware/apps/simtest/main.c
index 4b9fbcd4..3272b572 100755
--- a/src/target/firmware/apps/simtest/main.c
+++ b/src/target/firmware/apps/simtest/main.c
@@ -31,7 +31,6 @@
#include <keypad.h>
#include <board.h>
#include <abb/twl3025.h>
-#include <display.h>
#include <rf/trf6151.h>
#include <calypso/clock.h>
#include <calypso/tpu.h>
@@ -338,9 +337,6 @@ int main(void)
puts(hr);
#endif
- display_set_attr(DISP_ATTR_INVERT);
- display_puts("SIM-TEST");
-
sercomm_register_rx_cb(SC_DLCI_CONSOLE, console_rx_cb);
do_sim_test();
diff --git a/src/target/firmware/battery/compal_e88.c b/src/target/firmware/battery/compal_e88.c
new file mode 100644
index 00000000..dfac1b79
--- /dev/null
+++ b/src/target/firmware/battery/compal_e88.c
@@ -0,0 +1,386 @@
+/* Battery management for compal_e88 */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+/*
+ * ___C123 (compal e88) very simplified diagram of charging circuitry___
+ *
+ * ICTL
+ * |
+ * v
+ * Charger -> OVP -------> P-Mosfet --->[0.15 Ohm]---> Battery
+ * (NCP345, | | |
+ * 6.85V) v v v
+ * VCHG VCCS VBAT &
+ * VBATS
+ *
+ * Inputs to IOTA:
+ * VCHG: senses voltage on the charger input
+ * VCSS/VBATS: to difference amplifier, to measure charge current
+ * VBAT: senses voltage on the battery terminal
+ * Outputs from IOTA:
+ * ICTL: Control signal for the switching mosfet
+ *
+ */
+
+#include <battery/battery.h>
+#include <battery/compal_e88.h>
+
+#include <stdint.h>
+#include <abb/twl3025.h>
+#include <comm/timer.h>
+#include <stdio.h>
+
+/* ADC calibration, scale is LSB/uV or LSB/uA, physical unit is mV or mA */
+#define ADC_TO_PHYSICAL(adc,scale) (((adc)*(scale)+500)/1000)
+#define PHYSICAL_TO_ADC(phy,scale) (((phy)*1000+(scale)/2)/(scale))
+
+/* conversion factors for internal IOTA battery charging/sensing circuitry */
+#define VREF_LSB_uV 1709 /* VREF = 1.75V --> 1.709 mV/LSB */
+#define VBAT_LSB_uV 6836 /* VBAT = 7.0 V FS --> 6.836 mV/LSB */
+#define VCHG_LSB_uV 8545 /* VCHG = 8.75V FS --> 8.545 mV/LSB */
+#define ICHG_LSB_uA 854 /* ICHG = 875mA FS --> 0.854 mA/LSB */
+
+/* battery is considered full/empty at these thresholds... */
+#define VBAT_full PHYSICAL_TO_ADC(4000,VBAT_LSB_uV)
+#define VBAT_empty PHYSICAL_TO_ADC(3200,VBAT_LSB_uV)
+
+/* we declare overvoltage at this point... */
+#define VBAT_fail PHYSICAL_TO_ADC(4250,VBAT_LSB_uV)
+
+/* DAC to ADC offsets in CC mode with my C123
+ IMEI 358317015976471, P329431014
+
+ I/mA DAC ADC
+ ----------------
+ 100 117 108
+ 150 176 168
+ 200 234 227
+ 250 293 291
+ 300 351 349
+ 350 410 410
+*/
+
+#define CHGDAC_GAIN 967 /* times 0.001 */
+#define CHGDAC_OFFS 13
+
+/* convert ADC reading to DAC value, according to calibration values
+ given above */
+#define CHGDAC_ADJ(x) (CHGDAC_GAIN*(x)/1000+CHGDAC_OFFS)
+
+/* charging current in DAC LSBs, same ref. and # of bits, but keep
+ the correction specified above in mind! */
+
+#define ICHG_set CHGDAC_ADJ(PHYSICAL_TO_ADC(200,ICHG_LSB_uA))
+#define VCHG_set CHGDAC_ADJ(VBAT_full)
+
+struct battery_info battery_info; /* global battery info */
+uint16_t bat_compal_e88_madc[MADC_NUM_CHANNELS]; /* MADC measurements */
+
+static const int BATTERY_TIMER_DELAY=5000; /* 5000ms for control loop */
+static const int ADC_TIMER_DELAY=100; /* 100ms for ADC conversion */
+
+/* thermistor sense current, turn it up to eleven! */
+#define TH_SENS (THSENS0|THSENS1|THSENS2|THEN)
+#define BATTERY_ALL_SENSE (TH_SENS|MESBAT|TYPEN)
+
+/*
+ * charger modes state machine
+ *
+ * +------------------+-------------------+
+ * | | | lost AC power
+ * | ^ ^
+ * V on AC power | @VBAT_full |
+ * +-----+ +------------+ -----> +------------+
+ * | OFF | -----> | CONST_CURR | | CONST_VOLT |
+ * +-----+ +------------+ +------------+
+ * ^ ^ | |
+ * | /failure v v failure
+ * +---------+ / gone | | condition
+ * | FAILURE | <----------+-------------------+
+ * +---------+
+ *
+ * Failure modes currently detected:
+ * + high battery voltage
+ * Failure modes TODO:
+ * + high battery temperature
+ */
+enum bat_compal_e88_chg_state {
+ CHARG_OFF,
+ CHARG_CONST_CURR,
+ CHARG_CONST_VOLT,
+ CHARG_FAIL
+};
+static enum bat_compal_e88_chg_state bat_compal_e88_chg_state;
+
+static const char *bat_compal_e88_chg_state_names[]={
+ "Off",
+ "Constant Current",
+ "Constant Voltage",
+ "Battery Failure"
+};
+
+static void
+bat_compal_e88_goto_state(enum bat_compal_e88_chg_state newstate){
+
+ if(bat_compal_e88_chg_state == newstate) /* already there? */
+ return;
+
+ printf("\033[34;1mCHARGER: %s --> %s.\033[0m\n",
+ bat_compal_e88_chg_state_names[bat_compal_e88_chg_state],
+ bat_compal_e88_chg_state_names[newstate]);
+
+ /* update user visible flags, set registers */
+ switch(newstate){
+ case CHARG_CONST_CURR:
+ battery_info.flags &= ~BATTERY_FAILURE;
+ battery_info.flags |= (BATTERY_CHG_ENABLED|
+ BATTERY_CHARGING);
+ twl3025_reg_write(BCICTL2,0);
+ twl3025_reg_write(CHGREG,0);
+ twl3025_reg_write(BCICTL2,CHEN|LEDC|CHIV);
+ twl3025_reg_write(CHGREG,ICHG_set);
+
+ break;
+
+ case CHARG_CONST_VOLT:
+ battery_info.flags &= ~( BATTERY_CHARGING |
+ BATTERY_FAILURE );
+ battery_info.flags |= BATTERY_CHG_ENABLED;
+ twl3025_reg_write(BCICTL2,0);
+ twl3025_reg_write(CHGREG,0);
+ twl3025_reg_write(BCICTL2,CHEN|LEDC);
+ twl3025_reg_write(CHGREG,VCHG_set);
+ break;
+
+ case CHARG_FAIL:
+ case CHARG_OFF:
+ default:
+ battery_info.flags &= ~( BATTERY_CHG_ENABLED |
+ BATTERY_CHARGING | BATTERY_FAILURE );
+ twl3025_reg_write(BCICTL2,0); /* turn off charger */
+ twl3025_reg_write(CHGREG,0);
+ break;
+ }
+
+ printf("BCICTL2 is 0x%03x, CHGREG=%d\n",
+ twl3025_reg_read(BCICTL2),
+ twl3025_reg_read(CHGREG));
+
+ bat_compal_e88_chg_state = newstate;
+}
+
+static void
+bat_compal_e88_chg_control(){
+ /* with AC power disconnected, always go to off state */
+ if(!(battery_info.flags & BATTERY_CHG_CONNECTED)){
+ bat_compal_e88_goto_state(CHARG_OFF);
+ return;
+ }
+
+ /* if failure condition is detected, always goto failure state */
+ if(bat_compal_e88_madc[MADC_VBAT] > VBAT_fail){
+ bat_compal_e88_goto_state(CHARG_FAIL);
+ return;
+ }
+
+ /* now AC power is present and battery is not over failure
+ thresholds */
+ switch(bat_compal_e88_chg_state){
+ case CHARG_OFF:
+ if(bat_compal_e88_madc[MADC_VBAT] >= VBAT_full)
+ bat_compal_e88_goto_state(CHARG_CONST_VOLT);
+ else
+ bat_compal_e88_goto_state(CHARG_CONST_CURR);
+ break;
+ case CHARG_CONST_CURR:
+ if(bat_compal_e88_madc[MADC_VBAT] >= VBAT_full)
+ bat_compal_e88_goto_state(CHARG_CONST_VOLT);
+ break;
+ case CHARG_CONST_VOLT:
+ break;
+ default:
+ case CHARG_FAIL:
+ if(bat_compal_e88_madc[MADC_VBAT] < VBAT_full)
+ bat_compal_e88_goto_state(CHARG_CONST_CURR);
+ break;
+ }
+}
+
+/*
+ * Charging voltage connection - state machine, remembers
+ * state in battery_info.flags.
+ *
+ * VCHG > VCHG_thr_on
+ * +-----------------+ ------------------> +---------------+
+ * | ! CHG_CONNECTED | | CHG_CONNECTED |
+ * +-----------------+ <------------------ +---------------+
+ * VCHG < VCHG_thr_off
+ */
+static void
+bat_compal_e88_chk_ac_presence(){
+ int vrpcsts = twl3025_reg_read(VRPCSTS);
+
+ /* check for presence of charging voltage */
+ if(!(battery_info.flags & BATTERY_CHG_CONNECTED)){
+ if(vrpcsts & CHGPRES){
+ puts("\033[34;1mCHARGER: external voltage connected!\033[0m\n");
+ battery_info.flags |= BATTERY_CHG_CONNECTED;
+
+ /* always keep ADC, voltage dividers and bias voltages on */
+ twl3025_unit_enable(TWL3025_UNIT_MAD,1);
+ twl3025_reg_write(BCICTL1,BATTERY_ALL_SENSE);
+ }
+ } else {
+ if(!(vrpcsts & CHGPRES)){
+ /* we'll only run ADC on demand */
+ twl3025_unit_enable(TWL3025_UNIT_MAD,0);
+ twl3025_reg_write(BCICTL1,0);
+
+ battery_info.flags &= ~ BATTERY_CHG_CONNECTED;
+ puts("\033[34;1mCHARGER: external voltage disconnected!\033[0m\n");
+ }
+ }
+}
+
+/* ---- update voltages visible to the user ---- */
+static void
+bat_compal_e88_upd_measurements(){
+ int adc,i;
+
+ battery_info.charger_volt_mV=
+ ADC_TO_PHYSICAL(bat_compal_e88_madc[MADC_VCHG],VCHG_LSB_uV);
+ battery_info.bat_volt_mV=
+ ADC_TO_PHYSICAL(bat_compal_e88_madc[MADC_VBAT],VBAT_LSB_uV);
+ battery_info.bat_chg_curr_mA=
+ ADC_TO_PHYSICAL(bat_compal_e88_madc[MADC_ICHG],ICHG_LSB_uA);
+
+ adc = bat_compal_e88_madc[MADC_VBAT];
+ if(adc <= VBAT_empty){ /* battery 0..100% */
+ battery_info.battery_percent = 0;
+ } else if (adc >= VBAT_full){
+ battery_info.battery_percent = 100;
+ } else {
+ battery_info.battery_percent =
+ (50+100*(adc-VBAT_empty))/(VBAT_full-VBAT_empty);
+ }
+
+#if 0
+ /* DEBUG */
+ printf("BAT-ADC: ");
+ for(i=0;i<MADC_NUM_CHANNELS;i++)
+ printf("%3d ",bat_compal_e88_madc[i]);
+ printf("%c\n",32);
+ printf("\tCharger at %u mV.\n",battery_info.charger_volt_mV);
+ printf("\tBattery at %u mV.\n",battery_info.bat_volt_mV);
+ printf("\tCharging at %u mA.\n",battery_info.bat_chg_curr_mA);
+ printf("\tBattery capacity is %u%%.\n",battery_info.battery_percent);
+ printf("\tBattery range is %d..%d mV.\n",
+ ADC_TO_PHYSICAL(VBAT_empty,VBAT_LSB_uV),
+ ADC_TO_PHYSICAL(VBAT_full,VBAT_LSB_uV));
+ printf("\tBattery full at %d LSB .. full at %d LSB\n",VBAT_empty,VBAT_full);
+ printf("\tCharging at %d LSB (%d mA).\n",ICHG_set,
+ ADC_TO_PHYSICAL(ICHG_set,ICHG_LSB_uA));
+ i = twl3025_reg_read(BCICTL2);
+ printf("\tBCICTL2=0x%03x\n",i);
+ printf("\tbattery-info.flags=0x%08x\n",battery_info.flags);
+ printf("\tbat_compal_e88_chg_state=%d\n",bat_compal_e88_chg_state);
+#endif
+}
+
+/* bat_compal_e88_adc_read() :
+ *
+ * Schedule a ADC conversion or read values from ADC. If we are
+ * running on battery, bias currents/voltage dividers are turned
+ * on on demand.
+ *
+ * Return 0 if new ADC values have been acquired, 1 if ADC
+ * has been scheduled for a new conversion or is not yet finished.
+ *
+ */
+
+enum bat_compal_e88_madc_stat {
+ ADC_CONVERSION = 1 << 0
+};
+static uint32_t bat_compal_e88_madc_stat=0;
+
+static int
+bat_compal_e88_adc_read(){
+ int i;
+
+ if(bat_compal_e88_madc_stat & ADC_CONVERSION){
+ i = twl3025_reg_read(MADCSTAT);
+ if(i & ADCBUSY)
+ return 1;
+ for(i=0;i<MADC_NUM_CHANNELS;i++)
+ bat_compal_e88_madc[i]=twl3025_reg_read(VBATREG+i);
+ /* if charger is connected, we keep the ADC and BIAS on
+ continuously, if running on battery, we try to save power */
+ if(!(battery_info.flags & BATTERY_CHG_CONNECTED)){
+ twl3025_reg_write(BCICTL1,0x00); /* turn off bias */
+ twl3025_unit_enable(TWL3025_UNIT_MAD,0); /* & ADC */
+ }
+ bat_compal_e88_madc_stat &= ~ ADC_CONVERSION;
+ return 0;
+ } else {
+ /* if running on battery, turn on ADC & BIAS on demand */
+ if(!(battery_info.flags & BATTERY_CHG_CONNECTED)){
+ twl3025_unit_enable(TWL3025_UNIT_MAD,1);
+ twl3025_reg_write(BCICTL1,BATTERY_ALL_SENSE);
+ }
+
+ twl3025_reg_write(MADCTRL,0xff); /* convert all channels */
+ twl3025_reg_write(VBATREG,0); /* trigger conversion */
+
+ bat_compal_e88_madc_stat |= ADC_CONVERSION;
+ return 1;
+ }
+}
+
+static void
+battery_compal_e88_timer_cb(void *p){
+ struct osmo_timer_list *tmr = (struct osmo_timer_list*)p;
+ int i;
+
+ if(bat_compal_e88_adc_read()){ /* read back ADCs after a brief delay */
+ osmo_timer_schedule(tmr,ADC_TIMER_DELAY);
+ return;
+ }
+
+ bat_compal_e88_upd_measurements(); /* convert user-accessible information */
+ bat_compal_e88_chk_ac_presence(); /* detect AC charger presence */
+ bat_compal_e88_chg_control(); /* battery charger state machine */
+
+ osmo_timer_schedule(tmr,BATTERY_TIMER_DELAY);
+}
+
+/* timer that fires the charging loop regularly */
+static struct osmo_timer_list battery_compal88_timer = {
+ .cb = &battery_compal_e88_timer_cb,
+ .data = &battery_compal88_timer
+};
+
+void
+battery_compal_e88_init(){
+ printf("%s: starting up\n",__FUNCTION__);
+ osmo_timer_schedule(&battery_compal88_timer,BATTERY_TIMER_DELAY);
+}
+
diff --git a/src/target/firmware/battery/dummy.c b/src/target/firmware/battery/dummy.c
new file mode 100644
index 00000000..3051a615
--- /dev/null
+++ b/src/target/firmware/battery/dummy.c
@@ -0,0 +1,9 @@
+#include <battery/battery.h>
+
+/* Battery Management: Dummy file when no charging logic exists. */
+struct battery_info battery_info;
+
+void battery_dummy_init(){
+ battery_info.flags = BATTERY_FAILURE; /* not implemented */
+}
+
diff --git a/src/target/firmware/board/compal/highram.lds b/src/target/firmware/board/compal/highram.lds
index 1f0a5a67..498a2fa1 100644
--- a/src/target/firmware/board/compal/highram.lds
+++ b/src/target/firmware/board/compal/highram.lds
@@ -16,9 +16,9 @@ MEMORY
/* lowram: could be anything, we place exception vectors here */
XRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00020000
/* highram binary: our text, initialized data */
- LRAM (rw) : ORIGIN = 0x00820000, LENGTH = 0x00010000
+ LRAM (rw) : ORIGIN = 0x00820000, LENGTH = 0x00014000
/* highram binary: our unitialized data, stacks, heap */
- IRAM (rw) : ORIGIN = 0x00830000, LENGTH = 0x00010000
+ IRAM (rw) : ORIGIN = 0x00834000, LENGTH = 0x0000c000
}
SECTIONS
{
diff --git a/src/target/firmware/board/compal/ram.lds b/src/target/firmware/board/compal/ram.lds
index 342870dc..9503edee 100644
--- a/src/target/firmware/board/compal/ram.lds
+++ b/src/target/firmware/board/compal/ram.lds
@@ -11,9 +11,9 @@ ENTRY(_start)
MEMORY
{
/* compal-loaded binary: our text, initialized data */
- LRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00010000
+ LRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00014000
/* compal-loaded binary: our unitialized data, stacks, heap */
- IRAM (rw) : ORIGIN = 0x00810000, LENGTH = 0x00010000
+ IRAM (rw) : ORIGIN = 0x00814000, LENGTH = 0x0000c000
}
SECTIONS
{
diff --git a/src/target/firmware/board/compal_e86/init.c b/src/target/firmware/board/compal_e86/init.c
index 0f069953..42873166 100644
--- a/src/target/firmware/board/compal_e86/init.c
+++ b/src/target/firmware/board/compal_e86/init.c
@@ -41,10 +41,12 @@
#include <calypso/backlight.h>
#include <comm/sercomm.h>
+#include <comm/timer.h>
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
+
+#include <fb/framebuffer.h>
#define ARMIO_LATCH_OUT 0xfffe4802
#define IO_CNTL_REG 0xfffe4804
@@ -128,9 +130,9 @@ void board_init(void)
timer_init();
/* Initialize LCD driver (uses UWire) */
- display = &td014_display;
- display_init();
- bl_mode_pwl(0);
+ fb_init();
+ bl_mode_pwl(1);
+ bl_level(0);
/* Initialize keypad driver */
keypad_init(1);
diff --git a/src/target/firmware/board/compal_e88/init.c b/src/target/firmware/board/compal_e88/init.c
index c5a05b54..db2914f7 100644..100755
--- a/src/target/firmware/board/compal_e88/init.c
+++ b/src/target/firmware/board/compal_e88/init.c
@@ -44,7 +44,8 @@
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
+#include <fb/framebuffer.h>
+#include <battery/compal_e88.h>
#define ARMIO_LATCH_OUT 0xfffe4802
#define IO_CNTL_REG 0xfffe4804
@@ -124,13 +125,17 @@ void board_init(void)
timer_init();
/* Initialize LCD driver (uses I2C) and backlight */
- display = &st7558_display;
- display_init();
- bl_mode_pwl(0);
+ fb_init();
+
+ bl_mode_pwl(1);
+ bl_level(0);
/* Initialize keypad driver */
keypad_init(1);
/* Initialize ABB driver (uses SPI) */
twl3025_init();
+
+ /* Initialize the charging controller */
+ battery_compal_e88_init();
}
diff --git a/src/target/firmware/board/compal_e99/init.c b/src/target/firmware/board/compal_e99/init.c
index 76878388..b69f379a 100644
--- a/src/target/firmware/board/compal_e99/init.c
+++ b/src/target/firmware/board/compal_e99/init.c
@@ -41,10 +41,12 @@
#include <calypso/backlight.h>
#include <comm/sercomm.h>
+#include <comm/timer.h>
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
+
+#include <fb/framebuffer.h>
#define ARMIO_LATCH_OUT 0xfffe4802
#define IO_CNTL_REG 0xfffe4804
@@ -128,9 +130,10 @@ void board_init(void)
timer_init();
/* Initialize LCD driver (uses UWire) and backlight */
- display = &ssd1783_display;
- display_init();
- bl_mode_pwl(0);
+ bl_mode_pwl(1);
+ bl_level(0);
+
+ fb_init();
/* Initialize keypad driver */
keypad_init(1);
diff --git a/src/target/firmware/board/gta0x/init.c b/src/target/firmware/board/gta0x/init.c
index fe1c2cbd..46e59175 100644
--- a/src/target/firmware/board/gta0x/init.c
+++ b/src/target/firmware/board/gta0x/init.c
@@ -44,7 +44,6 @@
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
#define ARMIO_LATCH_OUT 0xfffe4802
#define IO_CNTL_REG 0xfffe4804
@@ -124,9 +123,8 @@ void board_init(void)
timer_init();
/* Initialize LCD driver (uses I2C) and backlight */
- display = &st7558_display;
- display_init();
- bl_mode_pwl(0);
+ bl_mode_pwl(1);
+ bl_level(0);
/* Initialize keypad driver */
keypad_init(1);
diff --git a/src/target/firmware/board/pirelli_dpl10/init.c b/src/target/firmware/board/pirelli_dpl10/init.c
index a6d8fa6e..f7aab7a8 100644
--- a/src/target/firmware/board/pirelli_dpl10/init.c
+++ b/src/target/firmware/board/pirelli_dpl10/init.c
@@ -1,7 +1,7 @@
/* Initialization for the Pirelli DP-L10 */
/* (C) 2010 by Harald Welte <laforge@gnumonks.org>
- * (C) 2011 by Steve Markgraf <steve@steve-m.de>
+ * (C) 2011-12 by Steve Markgraf <steve@steve-m.de>
*
* All Rights Reserved
*
@@ -45,10 +45,13 @@
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
+
+#include <fb/framebuffer.h>
#define ARMIO_LATCH_OUT 0xfffe4802
+#define IO_CNTL_REG 0xfffe4804
#define ASIC_CONF_REG 0xfffef008
+#define IO_CONF_REG 0xfffef00a
static void board_io_init(void)
{
@@ -59,17 +62,36 @@ static void board_io_init(void)
reg |= ((1 << 12) | (1 << 7)); /* SCL / SDA */
/* TWL3025: Set SPI+RIF RX clock to rising edge */
reg |= (1 << 13) | (1 << 14);
+ reg &= ~(1 << 1);
writew(reg, ASIC_CONF_REG);
+
+ /* enable IO functionality */
+ reg = readw(IO_CONF_REG);
+ reg |= (1 << 9) | (1 << 4) | (1 << 3) | (1 << 2) | (1 << 1) | (1 << 0);
+ writew(reg, IO_CONF_REG);
+
+ /* set IO directions */
+ reg = readw(IO_CNTL_REG);
+ reg &= ~((1 << 7) | (1 << 4) | (1 << 1));
+ writew(reg, IO_CNTL_REG);
+
+ /* reset display controller, disable bypass mode, set nCS4 to display */
+ reg = readw(ARMIO_LATCH_OUT);
+ reg &= ~(1 << 4);
+ writew(reg, ARMIO_LATCH_OUT);
+ reg &= ~(1 << 7);
+ reg |= (1 << 4) | (1 << 1);
+ writew(reg, ARMIO_LATCH_OUT);
}
void board_init(void)
{
/* Configure the memory interface */
- calypso_mem_cfg(CALYPSO_nCS0, 3, CALYPSO_MEM_16bit, 1);
- calypso_mem_cfg(CALYPSO_nCS1, 3, CALYPSO_MEM_16bit, 1);
+ calypso_mem_cfg(CALYPSO_nCS0, 4, CALYPSO_MEM_16bit, 1);
+ calypso_mem_cfg(CALYPSO_nCS1, 4, CALYPSO_MEM_16bit, 1);
calypso_mem_cfg(CALYPSO_nCS2, 5, CALYPSO_MEM_16bit, 1);
- calypso_mem_cfg(CALYPSO_nCS3, 5, CALYPSO_MEM_16bit, 1);
- calypso_mem_cfg(CALYPSO_CS4, 0, CALYPSO_MEM_8bit, 1);
+ calypso_mem_cfg(CALYPSO_nCS3, 4, CALYPSO_MEM_16bit, 1);
+ calypso_mem_cfg(CALYPSO_CS4, 7, CALYPSO_MEM_16bit, 1);
calypso_mem_cfg(CALYPSO_nCS6, 0, CALYPSO_MEM_32bit, 1);
calypso_mem_cfg(CALYPSO_nCS7, 0, CALYPSO_MEM_32bit, 0);
@@ -111,10 +133,11 @@ void board_init(void)
/* Initialize system timers (uses hwtimer 2) */
timer_init();
- /* Initialize LCD driver (uses I2C) and backlight */
- display = &st7558_display;
- display_init();
- bl_mode_pwl(0);
+ /* Initialize LCD driver and backlight (0 is max, 255 min brightness) */
+ bl_mode_pwl(1);
+ bl_level(255);
+
+ fb_init();
/* Initialize keypad driver */
keypad_init(1);
diff --git a/src/target/firmware/board/se_j100/init.c b/src/target/firmware/board/se_j100/init.c
index 30c3e6b4..2a3de0ed 100644
--- a/src/target/firmware/board/se_j100/init.c
+++ b/src/target/firmware/board/se_j100/init.c
@@ -41,10 +41,12 @@
#include <calypso/backlight.h>
#include <comm/sercomm.h>
+#include <comm/timer.h>
#include <abb/twl3025.h>
#include <rf/trf6151.h>
-#include <display.h>
+
+#include <fb/framebuffer.h>
#define ARMIO_LATCH_OUT 0xfffe4802
#define IO_CNTL_REG 0xfffe4804
@@ -127,8 +129,7 @@ void board_init(void)
timer_init();
/* Initialize LCD driver (uses UWire) and backlight */
- display = &ssd1963_display;
- display_init();
+ fb_init();
bl_mode_pwl(1);
bl_level(50);
diff --git a/src/target/firmware/calypso/keypad.c b/src/target/firmware/calypso/keypad.c
index fd4e0ff2..f2dea9df 100644
--- a/src/target/firmware/calypso/keypad.c
+++ b/src/target/firmware/calypso/keypad.c
@@ -31,6 +31,7 @@
#include <calypso/irq.h>
#include <abb/twl3025.h>
+#include <comm/timer.h>
#define KBR_LATCH_REG 0xfffe480a
@@ -44,16 +45,13 @@ void emit_key(uint8_t key, uint8_t state)
{
printf("key=%u %s\n", key, state == PRESSED ? "pressed" : "released");
- if (state == RELEASED)
- if (key == KEY_POWER)
- twl3025_power_off();
-
if(key_handler) {
key_handler(key, state);
}
}
volatile uint32_t lastbuttons = 0;
+unsigned long power_hold = 0;
#define BTN_TO_KEY(name) \
((diff & BTN_##name) == BTN_##name) \
@@ -67,6 +65,17 @@ void dispatch_buttons(uint32_t buttons)
{
uint8_t state;
+ if ((buttons & BTN_POWER)) {
+ /* hold button 500ms to shut down */
+ if ((lastbuttons & BTN_POWER)) {
+ unsigned long elapsed = jiffies - power_hold;
+ if (elapsed > 50)
+ twl3025_power_off();
+ power_hold++;
+ } else
+ power_hold = jiffies;
+ }
+
if (buttons == lastbuttons)
return;
diff --git a/src/target/firmware/calypso/rtc.c b/src/target/firmware/calypso/rtc.c
index ce750c29..45d759f3 100644
--- a/src/target/firmware/calypso/rtc.c
+++ b/src/target/firmware/calypso/rtc.c
@@ -26,7 +26,6 @@
#include <defines.h>
#include <debug.h>
#include <memory.h>
-#include <display.h>
#include <calypso/irq.h>
#define BASE_ADDR_RTC 0xfffe1800
@@ -61,10 +60,6 @@ static int tick_ctr;
static void rtc_irq_tick(__unused enum irq_nr nr)
{
- if (tick_ctr & 1)
- display_set_attr(DISP_ATTR_INVERT);
- else
- display_unset_attr(DISP_ATTR_INVERT);
tick_ctr++;
}
diff --git a/src/target/firmware/comm/msgb.c b/src/target/firmware/comm/msgb.c
index 4215d24c..3524ba58 100644
--- a/src/target/firmware/comm/msgb.c
+++ b/src/target/firmware/comm/msgb.c
@@ -26,6 +26,7 @@
#include <debug.h>
#include <delay.h>
+#include <console.h>
#include <osmocom/core/msgb.h>
diff --git a/src/target/firmware/comm/timer.c b/src/target/firmware/comm/timer.c
index 6a649ae9..ce4f06d3 100644
--- a/src/target/firmware/comm/timer.c
+++ b/src/target/firmware/comm/timer.c
@@ -33,22 +33,20 @@ static LLIST_HEAD(timer_list);
unsigned long volatile jiffies;
-#define TIMER_HZ 100
-
#define time_after(a,b) \
(typecheck(unsigned long, a) && \
typecheck(unsigned long, b) && \
((long)(b) - (long)(a) < 0))
#define time_before(a,b) time_after(b,a)
-void add_timer(struct osmo_timer_list *timer)
+void osmo_timer_add(struct osmo_timer_list *timer)
{
struct osmo_timer_list *list_timer;
/* TODO: Optimize and remember the closest item... */
timer->active = 1;
- /* this might be called from within update_timers */
+ /* this might be called from within osmo_timers_update */
llist_for_each_entry(list_timer, &timer_list, entry)
if (timer == list_timer)
return;
@@ -57,13 +55,13 @@ void add_timer(struct osmo_timer_list *timer)
llist_add(&timer->entry, &timer_list);
}
-void schedule_timer(struct osmo_timer_list *timer, int milliseconds)
+void osmo_timer_schedule(struct osmo_timer_list *timer, int milliseconds)
{
- timer->expires = jiffies + ((milliseconds * TIMER_HZ) / 1000);
- add_timer(timer);
+ timer->expires = jiffies + ((milliseconds * HZ) / 1000);
+ osmo_timer_add(timer);
}
-void del_timer(struct osmo_timer_list *timer)
+void osmo_timer_del(struct osmo_timer_list *timer)
{
if (timer->in_list) {
timer->active = 0;
@@ -72,7 +70,7 @@ void del_timer(struct osmo_timer_list *timer)
}
}
-int timer_pending(struct osmo_timer_list *timer)
+int osmo_timer_pending(struct osmo_timer_list *timer)
{
return timer->active;
}
@@ -131,7 +129,7 @@ void prepare_timers()
/*
* fire all timers... and remove them
*/
-int update_timers(void)
+int osmo_timers_update(void)
{
struct osmo_timer_list *timer, *tmp;
int work = 0;
@@ -139,7 +137,7 @@ int update_timers(void)
/*
* The callbacks might mess with our list and in this case
* even llist_for_each_entry_safe is not safe to use. To allow
- * del_timer, add_timer, schedule_timer to be called from within
+ * osmo_timer_del, osmo_timer_add, osmo_timer_schedule to be called from within
* the callback we jump through some loops.
*
* First we set the handled flag of each active timer to zero,
@@ -149,7 +147,7 @@ int update_timers(void)
* is dispatched we will remove the non-active from the list.
*
* TODO: If this is a performance issue we can poison a global
- * variable in add_timer and del_timer and only then restart.
+ * variable in osmo_timer_add and osmo_timer_del and only then restart.
*/
llist_for_each_entry(timer, &timer_list, entry) {
timer->handled = 0;
@@ -169,14 +167,14 @@ restart:
llist_for_each_entry_safe(timer, tmp, &timer_list, entry) {
timer->handled = 0;
if (!timer->active) {
- del_timer(timer);
+ osmo_timer_del(timer);
}
}
return work;
}
-int timer_check(void)
+int osmo_timers_check(void)
{
struct osmo_timer_list *timer;
int i = 0;
@@ -200,10 +198,10 @@ void timer_init(void)
/* configure TIMER2 for our purpose */
hwtimer_enable(2, 1);
/* The timer runs at 13MHz / 32, i.e. 406.25kHz */
-#if (TIMER_HZ == 100)
+#if (HZ == 100)
hwtimer_load(2, 4062);
hwtimer_config(2, 0, 1);
-#elif (TIMER_HZ == 10)
+#elif (HZ == 10)
/* prescaler 4, 1015 ticks until expiry */
hwtimer_load(2, 1015);
hwtimer_config(2, 4, 1);
diff --git a/src/target/firmware/display/display.c b/src/target/firmware/display/display.c
deleted file mode 100644
index 1c8f1fb4..00000000
--- a/src/target/firmware/display/display.c
+++ /dev/null
@@ -1,20 +0,0 @@
-
-#include <stdint.h>
-
-#include <display.h>
-
-struct display_driver *display;
-
-int display_puts(const char *str)
-{
- char c;
-
- if (display->puts)
- display->puts(str);
- else {
- while ((c = *str++))
- display_putchar(c);
- }
-
- return 0;
-}
diff --git a/src/target/firmware/display/font_r8x8.c b/src/target/firmware/display/font_r8x8.c
deleted file mode 100644
index 6f8315d2..00000000
--- a/src/target/firmware/display/font_r8x8.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* 8x8 font, vertical scanning */
-
-const unsigned char fontdata_r8x8[] ={
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x7e, 0x81, 0x95, 0xb1, 0xb1, 0x95, 0x81, 0x7e,
- 0x7e, 0xff, 0xeb, 0xcf, 0xcf, 0xeb, 0xff, 0x7e,
- 0x0e, 0x1f, 0x3f, 0x7e, 0x3f, 0x1f, 0x0e, 0x00,
- 0x00, 0x08, 0x1c, 0x3e, 0x7f, 0x3e, 0x1c, 0x08,
- 0x00, 0x38, 0x38, 0x9f, 0xff, 0x9f, 0x38, 0x38,
- 0x10, 0x38, 0xbc, 0xff, 0xbc, 0x38, 0x10, 0x00,
- 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x00, 0x00,
- 0xff, 0xff, 0xe7, 0xc3, 0xc3, 0xe7, 0xff, 0xff,
- 0x00, 0x3c, 0x66, 0x42, 0x42, 0x66, 0x3c, 0x00,
- 0xff, 0xc3, 0x99, 0xbd, 0xbd, 0x99, 0xc3, 0xff,
- 0x70, 0xf8, 0x88, 0x88, 0xfd, 0x7f, 0x07, 0x0f,
- 0x00, 0x4e, 0x5f, 0xf1, 0xf1, 0x5f, 0x4e, 0x00,
- 0xc0, 0xe0, 0xff, 0x7f, 0x05, 0x05, 0x07, 0x07,
- 0xc0, 0xff, 0x7f, 0x05, 0x05, 0x65, 0x7f, 0x3f,
- 0x5a, 0x5a, 0x3c, 0xe7, 0xe7, 0x3c, 0x5a, 0x5a,
- 0x7f, 0x3e, 0x3e, 0x1c, 0x1c, 0x08, 0x08, 0x00,
- 0x08, 0x08, 0x1c, 0x1c, 0x3e, 0x3e, 0x7f, 0x00,
- 0x00, 0x24, 0x66, 0xff, 0xff, 0x66, 0x24, 0x00,
- 0x00, 0x5f, 0x5f, 0x00, 0x00, 0x5f, 0x5f, 0x00,
- 0x06, 0x0f, 0x09, 0x7f, 0x7f, 0x01, 0x7f, 0x7f,
- 0x40, 0xda, 0xbf, 0xa5, 0xfd, 0x59, 0x03, 0x02,
- 0x00, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x00,
- 0x80, 0x94, 0xb6, 0xff, 0xff, 0xb6, 0x94, 0x80,
- 0x00, 0x04, 0x06, 0x7f, 0x7f, 0x06, 0x04, 0x00,
- 0x00, 0x10, 0x30, 0x7f, 0x7f, 0x30, 0x10, 0x00,
- 0x08, 0x08, 0x08, 0x2a, 0x3e, 0x1c, 0x08, 0x00,
- 0x08, 0x1c, 0x3e, 0x2a, 0x08, 0x08, 0x08, 0x00,
- 0x3c, 0x3c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00,
- 0x08, 0x1c, 0x3e, 0x08, 0x08, 0x3e, 0x1c, 0x08,
- 0x30, 0x38, 0x3c, 0x3e, 0x3e, 0x3c, 0x38, 0x30,
- 0x06, 0x0e, 0x1e, 0x3e, 0x3e, 0x1e, 0x0e, 0x06,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x06, 0x5f, 0x5f, 0x06, 0x00, 0x00, 0x00,
- 0x00, 0x07, 0x07, 0x00, 0x07, 0x07, 0x00, 0x00,
- 0x14, 0x7f, 0x7f, 0x14, 0x7f, 0x7f, 0x14, 0x00,
- 0x00, 0x24, 0x2e, 0x6b, 0x6b, 0x3a, 0x12, 0x00,
- 0x00, 0x46, 0x66, 0x30, 0x18, 0x0c, 0x66, 0x62,
- 0x00, 0x30, 0x7a, 0x4f, 0x5d, 0x37, 0x7a, 0x48,
- 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x1c, 0x3e, 0x63, 0x41, 0x00, 0x00,
- 0x00, 0x00, 0x41, 0x63, 0x3e, 0x1c, 0x00, 0x00,
- 0x08, 0x2a, 0x3e, 0x1c, 0x1c, 0x3e, 0x2a, 0x08,
- 0x08, 0x08, 0x3e, 0x3e, 0x08, 0x08, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xe0, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
- 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00,
- 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x03, 0x01,
- 0x00, 0x3e, 0x7f, 0x71, 0x59, 0x4d, 0x7f, 0x3e,
- 0x00, 0x44, 0x42, 0x7f, 0x7f, 0x40, 0x40, 0x00,
- 0x00, 0x62, 0x73, 0x59, 0x49, 0x6f, 0x66, 0x00,
- 0x00, 0x22, 0x63, 0x49, 0x49, 0x7f, 0x36, 0x00,
- 0x00, 0x18, 0x1c, 0x16, 0x53, 0x7f, 0x7f, 0x50,
- 0x00, 0x27, 0x67, 0x45, 0x45, 0x7d, 0x39, 0x00,
- 0x00, 0x3c, 0x7e, 0x4b, 0x49, 0x79, 0x30, 0x00,
- 0x00, 0x03, 0x03, 0x71, 0x79, 0x0f, 0x07, 0x00,
- 0x00, 0x36, 0x7f, 0x49, 0x49, 0x7f, 0x36, 0x00,
- 0x00, 0x06, 0x4f, 0x49, 0x69, 0x3f, 0x1e, 0x00,
- 0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x80, 0xe6, 0x66, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x1c, 0x36, 0x63, 0x41, 0x00, 0x00,
- 0x00, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00,
- 0x00, 0x00, 0x41, 0x63, 0x36, 0x1c, 0x08, 0x00,
- 0x00, 0x02, 0x03, 0x51, 0x59, 0x0f, 0x06, 0x00,
- 0x00, 0x3e, 0x7f, 0x41, 0x5d, 0x55, 0x57, 0x1e,
- 0x00, 0x7c, 0x7e, 0x13, 0x13, 0x7e, 0x7c, 0x00,
- 0x00, 0x41, 0x7f, 0x7f, 0x49, 0x49, 0x7f, 0x36,
- 0x00, 0x1c, 0x3e, 0x63, 0x41, 0x41, 0x63, 0x22,
- 0x00, 0x41, 0x7f, 0x7f, 0x41, 0x63, 0x3e, 0x1c,
- 0x00, 0x41, 0x7f, 0x7f, 0x49, 0x5d, 0x41, 0x63,
- 0x00, 0x41, 0x7f, 0x7f, 0x49, 0x1d, 0x01, 0x03,
- 0x00, 0x1c, 0x3e, 0x63, 0x41, 0x51, 0x73, 0x72,
- 0x00, 0x7f, 0x7f, 0x08, 0x08, 0x7f, 0x7f, 0x00,
- 0x00, 0x00, 0x41, 0x7f, 0x7f, 0x41, 0x00, 0x00,
- 0x00, 0x30, 0x70, 0x40, 0x41, 0x7f, 0x3f, 0x01,
- 0x00, 0x41, 0x7f, 0x7f, 0x08, 0x1c, 0x77, 0x63,
- 0x00, 0x41, 0x7f, 0x7f, 0x41, 0x40, 0x60, 0x70,
- 0x00, 0x7f, 0x7f, 0x0e, 0x1c, 0x0e, 0x7f, 0x7f,
- 0x00, 0x7f, 0x7f, 0x06, 0x0c, 0x18, 0x7f, 0x7f,
- 0x00, 0x3e, 0x7f, 0x41, 0x41, 0x41, 0x7f, 0x3e,
- 0x00, 0x41, 0x7f, 0x7f, 0x49, 0x09, 0x0f, 0x06,
- 0x00, 0x1e, 0x3f, 0x21, 0x71, 0x7f, 0x5e, 0x00,
- 0x00, 0x41, 0x7f, 0x7f, 0x09, 0x19, 0x7f, 0x66,
- 0x00, 0x22, 0x67, 0x4d, 0x59, 0x73, 0x22, 0x00,
- 0x00, 0x03, 0x41, 0x7f, 0x7f, 0x41, 0x03, 0x00,
- 0x00, 0x7f, 0x7f, 0x40, 0x40, 0x7f, 0x7f, 0x00,
- 0x00, 0x1f, 0x3f, 0x60, 0x60, 0x3f, 0x1f, 0x00,
- 0x00, 0x7f, 0x7f, 0x30, 0x18, 0x30, 0x7f, 0x7f,
- 0x00, 0x43, 0x67, 0x3c, 0x18, 0x3c, 0x67, 0x43,
- 0x00, 0x07, 0x4f, 0x78, 0x78, 0x4f, 0x07, 0x00,
- 0x00, 0x47, 0x63, 0x71, 0x59, 0x4d, 0x67, 0x73,
- 0x00, 0x00, 0x7f, 0x7f, 0x41, 0x41, 0x00, 0x00,
- 0x00, 0x01, 0x03, 0x06, 0x0c, 0x18, 0x30, 0x60,
- 0x00, 0x00, 0x41, 0x41, 0x7f, 0x7f, 0x00, 0x00,
- 0x00, 0x08, 0x0c, 0x06, 0x03, 0x06, 0x0c, 0x08,
- 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x00, 0x00, 0x00, 0x03, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x20, 0x74, 0x54, 0x54, 0x3c, 0x78, 0x40,
- 0x00, 0x41, 0x7f, 0x3f, 0x48, 0x48, 0x78, 0x30,
- 0x00, 0x38, 0x7c, 0x44, 0x44, 0x6c, 0x28, 0x00,
- 0x00, 0x30, 0x78, 0x48, 0x49, 0x3f, 0x7f, 0x40,
- 0x00, 0x38, 0x7c, 0x54, 0x54, 0x5c, 0x18, 0x00,
- 0x00, 0x48, 0x7e, 0x7f, 0x49, 0x03, 0x02, 0x00,
- 0x00, 0x98, 0xbc, 0xa4, 0xa4, 0xf8, 0x7c, 0x04,
- 0x00, 0x41, 0x7f, 0x7f, 0x08, 0x04, 0x7c, 0x78,
- 0x00, 0x00, 0x44, 0x7d, 0x7d, 0x40, 0x00, 0x00,
- 0x00, 0x60, 0xe0, 0x80, 0x80, 0xfd, 0x7d, 0x00,
- 0x00, 0x41, 0x7f, 0x7f, 0x10, 0x38, 0x6c, 0x44,
- 0x00, 0x00, 0x41, 0x7f, 0x7f, 0x40, 0x00, 0x00,
- 0x00, 0x7c, 0x7c, 0x18, 0x38, 0x1c, 0x7c, 0x78,
- 0x00, 0x7c, 0x7c, 0x04, 0x04, 0x7c, 0x78, 0x00,
- 0x00, 0x38, 0x7c, 0x44, 0x44, 0x7c, 0x38, 0x00,
- 0x00, 0x84, 0xfc, 0xf8, 0xa4, 0x24, 0x3c, 0x18,
- 0x00, 0x18, 0x3c, 0x24, 0xa4, 0xf8, 0xfc, 0x84,
- 0x00, 0x44, 0x7c, 0x78, 0x4c, 0x04, 0x1c, 0x18,
- 0x00, 0x48, 0x5c, 0x54, 0x54, 0x74, 0x24, 0x00,
- 0x00, 0x00, 0x04, 0x3e, 0x7f, 0x44, 0x24, 0x00,
- 0x00, 0x3c, 0x7c, 0x40, 0x40, 0x3c, 0x7c, 0x40,
- 0x00, 0x1c, 0x3c, 0x60, 0x60, 0x3c, 0x1c, 0x00,
- 0x00, 0x3c, 0x7c, 0x70, 0x38, 0x70, 0x7c, 0x3c,
- 0x00, 0x44, 0x6c, 0x38, 0x10, 0x38, 0x6c, 0x44,
- 0x00, 0x9c, 0xbc, 0xa0, 0xa0, 0xfc, 0x7c, 0x00,
- 0x00, 0x4c, 0x64, 0x74, 0x5c, 0x4c, 0x64, 0x00,
- 0x00, 0x08, 0x08, 0x3e, 0x77, 0x41, 0x41, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x00, 0x00,
- 0x00, 0x41, 0x41, 0x77, 0x3e, 0x08, 0x08, 0x00,
- 0x00, 0x02, 0x03, 0x01, 0x03, 0x02, 0x03, 0x01,
- 0x00, 0x70, 0x78, 0x4c, 0x46, 0x4c, 0x78, 0x70,
- 0x00, 0x0e, 0x9f, 0x91, 0xb1, 0xfb, 0x4a, 0x00,
- 0x00, 0x3a, 0x7a, 0x40, 0x40, 0x7a, 0x7a, 0x40,
- 0x38, 0x7c, 0x54, 0x55, 0x5d, 0x19, 0x00, 0x00,
- 0x02, 0x23, 0x75, 0x55, 0x55, 0x7d, 0x7b, 0x42,
- 0x00, 0x21, 0x75, 0x54, 0x54, 0x7d, 0x79, 0x40,
- 0x00, 0x21, 0x75, 0x55, 0x54, 0x7c, 0x78, 0x40,
- 0x00, 0x20, 0x74, 0x57, 0x57, 0x7c, 0x78, 0x40,
- 0x00, 0x18, 0x3c, 0xa4, 0xa4, 0xe4, 0x40, 0x00,
- 0x02, 0x3b, 0x7d, 0x55, 0x55, 0x5d, 0x1b, 0x02,
- 0x39, 0x7d, 0x54, 0x54, 0x5d, 0x19, 0x00, 0x00,
- 0x00, 0x39, 0x7d, 0x55, 0x54, 0x5c, 0x18, 0x00,
- 0x00, 0x01, 0x45, 0x7c, 0x7c, 0x41, 0x01, 0x00,
- 0x00, 0x02, 0x03, 0x45, 0x7d, 0x7d, 0x43, 0x02,
- 0x00, 0x01, 0x45, 0x7d, 0x7c, 0x40, 0x00, 0x00,
- 0x00, 0x79, 0x7d, 0x16, 0x12, 0x16, 0x7d, 0x79,
- 0x00, 0x70, 0x78, 0x2b, 0x2b, 0x78, 0x70, 0x00,
- 0x44, 0x7c, 0x7c, 0x55, 0x55, 0x45, 0x00, 0x00,
- 0x20, 0x74, 0x54, 0x54, 0x7c, 0x7c, 0x54, 0x54,
- 0x00, 0x7c, 0x7e, 0x0b, 0x09, 0x7f, 0x7f, 0x49,
- 0x00, 0x32, 0x7b, 0x49, 0x49, 0x7b, 0x32, 0x00,
- 0x00, 0x32, 0x7a, 0x48, 0x48, 0x7a, 0x32, 0x00,
- 0x00, 0x32, 0x7a, 0x4a, 0x48, 0x78, 0x30, 0x00,
- 0x00, 0x3a, 0x7b, 0x41, 0x41, 0x7b, 0x7a, 0x40,
- 0x00, 0x3a, 0x7a, 0x42, 0x40, 0x78, 0x78, 0x40,
- 0x9a, 0xba, 0xa0, 0xa0, 0xfa, 0x7a, 0x00, 0x00,
- 0x01, 0x19, 0x3c, 0x66, 0x66, 0x3c, 0x19, 0x01,
- 0x00, 0x3d, 0x7d, 0x40, 0x40, 0x7d, 0x3d, 0x00,
- 0x00, 0x18, 0x3c, 0x24, 0xe7, 0xe7, 0x24, 0x24,
- 0x00, 0x68, 0x7e, 0x7f, 0x49, 0x43, 0x66, 0x20,
- 0x00, 0x2b, 0x2f, 0xfc, 0xfc, 0x2f, 0x2b, 0x00,
- 0xff, 0xff, 0x09, 0x09, 0x2f, 0xf6, 0xf8, 0xa0,
- 0x40, 0xc0, 0x88, 0xfe, 0x7f, 0x09, 0x03, 0x02,
- 0x00, 0x20, 0x74, 0x54, 0x55, 0x7d, 0x79, 0x40,
- 0x00, 0x00, 0x44, 0x7d, 0x7d, 0x41, 0x00, 0x00,
- 0x00, 0x30, 0x78, 0x48, 0x4a, 0x7a, 0x32, 0x00,
- 0x00, 0x38, 0x78, 0x40, 0x42, 0x7a, 0x7a, 0x40,
- 0x00, 0x7a, 0x7a, 0x0a, 0x0a, 0x7a, 0x70, 0x00,
- 0x00, 0x7d, 0x7d, 0x19, 0x31, 0x7d, 0x7d, 0x00,
- 0x00, 0x00, 0x26, 0x2f, 0x29, 0x2f, 0x2f, 0x28,
- 0x00, 0x00, 0x26, 0x2f, 0x29, 0x2f, 0x26, 0x00,
- 0x00, 0x30, 0x78, 0x4d, 0x45, 0x60, 0x20, 0x00,
- 0x00, 0x38, 0x38, 0x08, 0x08, 0x08, 0x08, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x38, 0x38, 0x00, 0x00,
- 0x4f, 0x6f, 0x30, 0x18, 0xcc, 0xee, 0xbb, 0x91,
- 0x4f, 0x6f, 0x30, 0x18, 0x6c, 0x76, 0xfb, 0xf9,
- 0x00, 0x00, 0x00, 0x7b, 0x7b, 0x00, 0x00, 0x00,
- 0x08, 0x1c, 0x36, 0x22, 0x08, 0x1c, 0x36, 0x22,
- 0x22, 0x36, 0x1c, 0x08, 0x22, 0x36, 0x1c, 0x08,
- 0xaa, 0x00, 0x55, 0x00, 0xaa, 0x00, 0x55, 0x00,
- 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55,
- 0xdd, 0xff, 0xaa, 0x77, 0xdd, 0xaa, 0xff, 0x77,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x14, 0x14, 0x14, 0xff, 0xff, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00,
- 0x10, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf0, 0x00,
- 0x14, 0x14, 0x14, 0xfc, 0xfc, 0x00, 0x00, 0x00,
- 0x14, 0x14, 0xf7, 0xf7, 0x00, 0xff, 0xff, 0x00,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x00,
- 0x14, 0x14, 0xf4, 0xf4, 0x04, 0xfc, 0xfc, 0x00,
- 0x14, 0x14, 0x17, 0x17, 0x10, 0x1f, 0x1f, 0x00,
- 0x10, 0x10, 0x1f, 0x1f, 0x10, 0x1f, 0x1f, 0x00,
- 0x14, 0x14, 0x14, 0x1f, 0x1f, 0x00, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0xf0, 0xf0, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x10, 0x10, 0x10, 0xff, 0xff, 0x10, 0x10, 0x10,
- 0x00, 0x00, 0x00, 0xff, 0xff, 0x14, 0x14, 0x14,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x10,
- 0x00, 0x00, 0x1f, 0x1f, 0x10, 0x17, 0x17, 0x14,
- 0x00, 0x00, 0xfc, 0xfc, 0x04, 0xf4, 0xf4, 0x14,
- 0x14, 0x14, 0x17, 0x17, 0x10, 0x17, 0x17, 0x14,
- 0x14, 0x14, 0xf4, 0xf4, 0x04, 0xf4, 0xf4, 0x14,
- 0x00, 0x00, 0xff, 0xff, 0x00, 0xf7, 0xf7, 0x14,
- 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
- 0x14, 0x14, 0xf7, 0xf7, 0x00, 0xf7, 0xf7, 0x14,
- 0x14, 0x14, 0x14, 0x17, 0x17, 0x14, 0x14, 0x14,
- 0x10, 0x10, 0x1f, 0x1f, 0x10, 0x1f, 0x1f, 0x10,
- 0x14, 0x14, 0x14, 0xf4, 0xf4, 0x14, 0x14, 0x14,
- 0x10, 0x10, 0xf0, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
- 0x00, 0x00, 0x1f, 0x1f, 0x10, 0x1f, 0x1f, 0x10,
- 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x14, 0x14, 0x14,
- 0x00, 0x00, 0x00, 0xfc, 0xfc, 0x14, 0x14, 0x14,
- 0x00, 0x00, 0xf0, 0xf0, 0x10, 0xf0, 0xf0, 0x10,
- 0x10, 0x10, 0xff, 0xff, 0x10, 0xff, 0xff, 0x10,
- 0x14, 0x14, 0x14, 0xff, 0xff, 0x14, 0x14, 0x14,
- 0x10, 0x10, 0x10, 0x1f, 0x1f, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x10, 0x10, 0x10,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
- 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
- 0x00, 0x38, 0x7c, 0x44, 0x6c, 0x38, 0x6c, 0x44,
- 0x00, 0xfc, 0xfe, 0x2a, 0x2a, 0x3e, 0x14, 0x00,
- 0x00, 0x7e, 0x7e, 0x02, 0x02, 0x06, 0x06, 0x00,
- 0x00, 0x02, 0x7e, 0x7e, 0x02, 0x7e, 0x7e, 0x02,
- 0x00, 0x63, 0x77, 0x5d, 0x49, 0x63, 0x63, 0x00,
- 0x00, 0x38, 0x7c, 0x44, 0x7c, 0x3c, 0x04, 0x04,
- 0x00, 0x80, 0xfe, 0x7e, 0x20, 0x20, 0x3e, 0x1e,
- 0x00, 0x04, 0x06, 0x02, 0x7e, 0x7c, 0x06, 0x02,
- 0x00, 0x99, 0xbd, 0xe7, 0xe7, 0xbd, 0x99, 0x00,
- 0x00, 0x1c, 0x3e, 0x6b, 0x49, 0x6b, 0x3e, 0x1c,
- 0x00, 0x4c, 0x7e, 0x73, 0x01, 0x73, 0x7e, 0x4c,
- 0x00, 0x30, 0x78, 0x4a, 0x4f, 0x7d, 0x39, 0x00,
- 0x18, 0x3c, 0x24, 0x3c, 0x3c, 0x24, 0x3c, 0x18,
- 0x98, 0xfc, 0x64, 0x3c, 0x3e, 0x27, 0x3d, 0x18,
- 0x00, 0x1c, 0x3e, 0x6b, 0x49, 0x49, 0x00, 0x00,
- 0x00, 0x7e, 0x7f, 0x01, 0x01, 0x7f, 0x7e, 0x00,
- 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x00,
- 0x00, 0x44, 0x44, 0x5f, 0x5f, 0x44, 0x44, 0x00,
- 0x00, 0x40, 0x51, 0x5b, 0x4e, 0x44, 0x40, 0x00,
- 0x00, 0x40, 0x44, 0x4e, 0x5b, 0x51, 0x40, 0x00,
- 0x00, 0x00, 0x00, 0xfe, 0xff, 0x01, 0x07, 0x06,
- 0x60, 0xe0, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00,
- 0x00, 0x08, 0x08, 0x6b, 0x6b, 0x08, 0x08, 0x00,
- 0x00, 0x24, 0x36, 0x12, 0x36, 0x24, 0x36, 0x12,
- 0x00, 0x00, 0x06, 0x0f, 0x09, 0x0f, 0x06, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00,
- 0x10, 0x30, 0x70, 0xc0, 0xff, 0xff, 0x01, 0x01,
- 0x00, 0x1f, 0x1f, 0x01, 0x1f, 0x1e, 0x00, 0x00,
- 0x00, 0x19, 0x1d, 0x17, 0x12, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x3c, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-
diff --git a/src/target/firmware/display/font_r8x8_horiz.c b/src/target/firmware/display/font_r8x8_horiz.c
deleted file mode 100644
index 046d09bf..00000000
--- a/src/target/firmware/display/font_r8x8_horiz.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/* 8x8 font, right aligned, horizontal scanning */
-
-const unsigned char fontdata_r8x8_horiz[] ={
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x7e,0x81,0xa5,0x81,0xbd,0x99,0x81,0x7e,
- 0x7e,0xff,0xdb,0xff,0xc3,0xe7,0xff,0x7e,
- 0x6c,0xfe,0xfe,0xfe,0x7c,0x38,0x10,0x00,
- 0x08,0x1c,0x3e,0x7f,0x3e,0x1c,0x08,0x00,
- 0x1c,0x1c,0x1c,0x7f,0x7f,0x6b,0x08,0x1c,
- 0x10,0x10,0x38,0x7c,0xfe,0x7c,0x10,0x38,
- 0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,
- 0xff,0xff,0xe7,0xc3,0xc3,0xe7,0xff,0xff,
- 0x00,0x3c,0x66,0x42,0x42,0x66,0x3c,0x00,
- 0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff,
- 0x0f,0x07,0x0f,0x7d,0xcc,0xcc,0xcc,0x78,
- 0x3c,0x66,0x66,0x66,0x3c,0x18,0x7e,0x18,
- 0x3f,0x33,0x3f,0x30,0x30,0x70,0xf0,0xe0,
- 0x7f,0x63,0x7f,0x63,0x63,0x67,0xe6,0xc0,
- 0x18,0xdb,0x3c,0xe7,0xe7,0x3c,0xdb,0x18,
- 0x80,0xe0,0xf8,0xfe,0xf8,0xe0,0x80,0x00,
- 0x02,0x0e,0x3e,0xfe,0x3e,0x0e,0x02,0x00,
- 0x18,0x3c,0x7e,0x18,0x18,0x7e,0x3c,0x18,
- 0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x00,
- 0x7f,0xdb,0xdb,0x7b,0x1b,0x1b,0x1b,0x00,
- 0x3e,0x63,0x38,0x6c,0x6c,0x38,0xcc,0x78,
- 0x00,0x00,0x00,0x00,0x7e,0x7e,0x7e,0x00,
- 0x18,0x3c,0x7e,0x18,0x7e,0x3c,0x18,0xff,
- 0x18,0x3c,0x7e,0x18,0x18,0x18,0x18,0x00,
- 0x18,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,
- 0x00,0x18,0x0c,0xfe,0x0c,0x18,0x00,0x00,
- 0x00,0x30,0x60,0xfe,0x60,0x30,0x00,0x00,
- 0x00,0x00,0xc0,0xc0,0xc0,0xfe,0x00,0x00,
- 0x00,0x24,0x66,0xff,0x66,0x24,0x00,0x00,
- 0x00,0x18,0x3c,0x7e,0xff,0xff,0x00,0x00,
- 0x00,0xff,0xff,0x7e,0x3c,0x18,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00,
- 0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x00,
- 0x6c,0x6c,0xfe,0x6c,0xfe,0x6c,0x6c,0x00,
- 0x18,0x3e,0x60,0x3c,0x06,0x7c,0x18,0x00,
- 0x00,0x63,0x66,0x0c,0x18,0x33,0x63,0x00,
- 0x1c,0x36,0x1c,0x3b,0x6e,0x66,0x3b,0x00,
- 0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,
- 0x0c,0x18,0x30,0x30,0x30,0x18,0x0c,0x00,
- 0x30,0x18,0x0c,0x0c,0x0c,0x18,0x30,0x00,
- 0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,
- 0x00,0x30,0x30,0xfc,0x30,0x30,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30,
- 0x00,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,
- 0x03,0x06,0x0c,0x18,0x30,0x60,0x40,0x00,
- 0x3e,0x63,0x67,0x6f,0x7b,0x73,0x3e,0x00,
- 0x18,0x38,0x58,0x18,0x18,0x18,0x7e,0x00,
- 0x3c,0x66,0x06,0x1c,0x30,0x66,0x7e,0x00,
- 0x3c,0x66,0x06,0x1c,0x06,0x66,0x3c,0x00,
- 0x0e,0x1e,0x36,0x66,0x7f,0x06,0x0f,0x00,
- 0x7e,0x60,0x7c,0x06,0x06,0x66,0x3c,0x00,
- 0x1c,0x30,0x60,0x7c,0x66,0x66,0x3c,0x00,
- 0x7e,0x66,0x06,0x0c,0x18,0x18,0x18,0x00,
- 0x3c,0x66,0x66,0x3c,0x66,0x66,0x3c,0x00,
- 0x3c,0x66,0x66,0x3e,0x06,0x0c,0x38,0x00,
- 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00,
- 0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30,
- 0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x00,
- 0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,
- 0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x00,
- 0x3c,0x66,0x06,0x0c,0x18,0x00,0x18,0x00,
- 0x3e,0x63,0x6f,0x69,0x6f,0x60,0x3e,0x00,
- 0x18,0x3c,0x66,0x66,0x7e,0x66,0x66,0x00,
- 0x7e,0x33,0x33,0x3e,0x33,0x33,0x7e,0x00,
- 0x1e,0x33,0x60,0x60,0x60,0x33,0x1e,0x00,
- 0x7c,0x36,0x33,0x33,0x33,0x36,0x7c,0x00,
- 0x7f,0x31,0x34,0x3c,0x34,0x31,0x7f,0x00,
- 0x7f,0x31,0x34,0x3c,0x34,0x30,0x78,0x00,
- 0x1e,0x33,0x60,0x60,0x67,0x33,0x1f,0x00,
- 0x66,0x66,0x66,0x7e,0x66,0x66,0x66,0x00,
- 0x3c,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,
- 0x0f,0x06,0x06,0x06,0x66,0x66,0x3c,0x00,
- 0x73,0x33,0x36,0x3c,0x36,0x33,0x73,0x00,
- 0x78,0x30,0x30,0x30,0x31,0x33,0x7f,0x00,
- 0x63,0x77,0x7f,0x7f,0x6b,0x63,0x63,0x00,
- 0x63,0x73,0x7b,0x6f,0x67,0x63,0x63,0x00,
- 0x3e,0x63,0x63,0x63,0x63,0x63,0x3e,0x00,
- 0x7e,0x33,0x33,0x3e,0x30,0x30,0x78,0x00,
- 0x3c,0x66,0x66,0x66,0x6e,0x3c,0x0e,0x00,
- 0x7e,0x33,0x33,0x3e,0x36,0x33,0x73,0x00,
- 0x3c,0x66,0x30,0x18,0x0c,0x66,0x3c,0x00,
- 0x7e,0x5a,0x18,0x18,0x18,0x18,0x3c,0x00,
- 0x66,0x66,0x66,0x66,0x66,0x66,0x7e,0x00,
- 0x66,0x66,0x66,0x66,0x66,0x3c,0x18,0x00,
- 0x63,0x63,0x63,0x6b,0x7f,0x77,0x63,0x00,
- 0x63,0x63,0x36,0x1c,0x1c,0x36,0x63,0x00,
- 0x66,0x66,0x66,0x3c,0x18,0x18,0x3c,0x00,
- 0x7f,0x63,0x46,0x0c,0x19,0x33,0x7f,0x00,
- 0x3c,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,
- 0x60,0x30,0x18,0x0c,0x06,0x03,0x01,0x00,
- 0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,
- 0x08,0x1c,0x36,0x63,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,
- 0x18,0x18,0x0c,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x3c,0x06,0x3e,0x66,0x3b,0x00,
- 0x70,0x30,0x30,0x3e,0x33,0x33,0x6e,0x00,
- 0x00,0x00,0x3c,0x66,0x60,0x66,0x3c,0x00,
- 0x0e,0x06,0x06,0x3e,0x66,0x66,0x3b,0x00,
- 0x00,0x00,0x3c,0x66,0x7e,0x60,0x3c,0x00,
- 0x1c,0x36,0x30,0x78,0x30,0x30,0x78,0x00,
- 0x00,0x00,0x3b,0x66,0x66,0x3e,0x06,0x7c,
- 0x70,0x30,0x36,0x3b,0x33,0x33,0x73,0x00,
- 0x18,0x00,0x38,0x18,0x18,0x18,0x3c,0x00,
- 0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3c,
- 0x70,0x30,0x33,0x36,0x3c,0x36,0x73,0x00,
- 0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,
- 0x00,0x00,0x66,0x7f,0x7f,0x6b,0x63,0x00,
- 0x00,0x00,0x7c,0x66,0x66,0x66,0x66,0x00,
- 0x00,0x00,0x3c,0x66,0x66,0x66,0x3c,0x00,
- 0x00,0x00,0x6e,0x33,0x33,0x3e,0x30,0x78,
- 0x00,0x00,0x3b,0x66,0x66,0x3e,0x06,0x0f,
- 0x00,0x00,0x6e,0x3b,0x33,0x30,0x78,0x00,
- 0x00,0x00,0x3e,0x60,0x3c,0x06,0x7c,0x00,
- 0x08,0x18,0x3e,0x18,0x18,0x1a,0x0c,0x00,
- 0x00,0x00,0x66,0x66,0x66,0x66,0x3b,0x00,
- 0x00,0x00,0x66,0x66,0x66,0x3c,0x18,0x00,
- 0x00,0x00,0x63,0x6b,0x7f,0x7f,0x36,0x00,
- 0x00,0x00,0x63,0x36,0x1c,0x36,0x63,0x00,
- 0x00,0x00,0x66,0x66,0x66,0x3e,0x06,0x7c,
- 0x00,0x00,0x7e,0x4c,0x18,0x32,0x7e,0x00,
- 0x0e,0x18,0x18,0x70,0x18,0x18,0x0e,0x00,
- 0x0c,0x0c,0x0c,0x00,0x0c,0x0c,0x0c,0x00,
- 0x70,0x18,0x18,0x0e,0x18,0x18,0x70,0x00,
- 0x3b,0x6e,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x08,0x1c,0x36,0x63,0x63,0x7f,0x00,
- 0x3c,0x66,0x60,0x66,0x3c,0x0c,0x06,0x3c,
- 0x00,0x66,0x00,0x66,0x66,0x66,0x3f,0x00,
- 0x1c,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
- 0x7e,0xc3,0x3c,0x06,0x3e,0x66,0x3f,0x00,
- 0x66,0x00,0x3c,0x06,0x3e,0x66,0x3f,0x00,
- 0x70,0x00,0x3c,0x06,0x3e,0x66,0x3f,0x00,
- 0x18,0x18,0x3c,0x06,0x3e,0x66,0x3f,0x00,
- 0x00,0x00,0x3c,0x60,0x60,0x3c,0x06,0x1c,
- 0x7e,0xc3,0x3c,0x66,0x7e,0x60,0x3c,0x00,
- 0xcc,0x00,0x78,0xcc,0xfc,0xc0,0x78,0x00,
- 0x70,0x00,0x3c,0x66,0x7e,0x60,0x3c,0x00,
- 0x66,0x00,0x38,0x18,0x18,0x18,0x3c,0x00,
- 0x3e,0x63,0x1c,0x0c,0x0c,0x0c,0x1e,0x00,
- 0x70,0x00,0x38,0x18,0x18,0x18,0x3c,0x00,
- 0x63,0x1c,0x36,0x63,0x7f,0x63,0x63,0x00,
- 0x18,0x18,0x00,0x3c,0x66,0x7e,0x66,0x00,
- 0x1c,0x00,0xfc,0x60,0x78,0x60,0xfc,0x00,
- 0x00,0x00,0x7f,0x0c,0x7f,0xcc,0x7f,0x00,
- 0x1f,0x36,0x66,0x7f,0x66,0x66,0x67,0x00,
- 0x3c,0x66,0x00,0x3c,0x66,0x66,0x3c,0x00,
- 0x00,0x66,0x00,0x3c,0x66,0x66,0x3c,0x00,
- 0x00,0x70,0x00,0x3c,0x66,0x66,0x3c,0x00,
- 0x3c,0x66,0x00,0x66,0x66,0x66,0x3f,0x00,
- 0x00,0x70,0x00,0x66,0x66,0x66,0x3f,0x00,
- 0x00,0xcc,0x00,0xcc,0xcc,0x7c,0x0c,0xf8,
- 0xc3,0x18,0x3c,0x66,0x66,0x3c,0x18,0x00,
- 0x66,0x00,0x66,0x66,0x66,0x66,0x3c,0x00,
- 0x0c,0x0c,0x3f,0x60,0x60,0x3f,0x0c,0x0c,
- 0x1c,0x36,0x32,0x78,0x30,0x73,0x7e,0x00,
- 0x66,0x66,0x3c,0x7e,0x18,0x7e,0x18,0x18,
- 0xf8,0xcc,0xcc,0xfa,0xc6,0xcf,0xc6,0xc7,
- 0x0e,0x1b,0x18,0x3c,0x18,0x18,0xd8,0x70,
- 0x0e,0x00,0x3c,0x06,0x3e,0x66,0x3f,0x00,
- 0x1c,0x00,0x38,0x18,0x18,0x18,0x3c,0x00,
- 0x00,0x0e,0x00,0x3c,0x66,0x66,0x3c,0x00,
- 0x00,0x0e,0x00,0x66,0x66,0x66,0x3f,0x00,
- 0x00,0x7c,0x00,0x7c,0x66,0x66,0x66,0x00,
- 0x7e,0x00,0x66,0x76,0x7e,0x6e,0x66,0x00,
- 0x1e,0x36,0x36,0x1f,0x00,0x3f,0x00,0x00,
- 0x1c,0x36,0x36,0x1c,0x00,0x3e,0x00,0x00,
- 0x18,0x00,0x18,0x30,0x60,0x66,0x3c,0x00,
- 0x00,0x00,0x00,0x7e,0x60,0x60,0x00,0x00,
- 0x00,0x00,0x00,0xfc,0x0c,0x0c,0x00,0x00,
- 0xc3,0xc6,0xcc,0xde,0x33,0x66,0xcc,0x0f,
- 0xc3,0xc6,0xcc,0xdb,0x37,0x6f,0xcf,0x03,
- 0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x00,
- 0x00,0x33,0x66,0xcc,0x66,0x33,0x00,0x00,
- 0x00,0xcc,0x66,0x33,0x66,0xcc,0x00,0x00,
- 0x22,0x88,0x22,0x88,0x22,0x88,0x22,0x88,
- 0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
- 0xdb,0x77,0xdb,0xee,0xdb,0x77,0xdb,0xee,
- 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0xf8,0x18,0x18,0x18,
- 0x18,0x18,0xf8,0x18,0xf8,0x18,0x18,0x18,
- 0x36,0x36,0x36,0x36,0xf6,0x36,0x36,0x36,
- 0x00,0x00,0x00,0x00,0xfe,0x36,0x36,0x36,
- 0x00,0x00,0xf8,0x18,0xf8,0x18,0x18,0x18,
- 0x36,0x36,0xf6,0x06,0xf6,0x36,0x36,0x36,
- 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,
- 0x00,0x00,0xfe,0x06,0xf6,0x36,0x36,0x36,
- 0x36,0x36,0xf6,0x06,0xfe,0x00,0x00,0x00,
- 0x36,0x36,0x36,0x36,0xfe,0x00,0x00,0x00,
- 0x18,0x18,0xf8,0x18,0xf8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xf8,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,
- 0x18,0x18,0x18,0x18,0xff,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0xff,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,
- 0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,
- 0x18,0x18,0x18,0x18,0xff,0x18,0x18,0x18,
- 0x18,0x18,0x1f,0x18,0x1f,0x18,0x18,0x18,
- 0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,
- 0x36,0x36,0x37,0x30,0x3f,0x00,0x00,0x00,
- 0x00,0x00,0x3f,0x30,0x37,0x36,0x36,0x36,
- 0x36,0x36,0xf7,0x00,0xff,0x00,0x00,0x00,
- 0x00,0x00,0xff,0x00,0xf7,0x36,0x36,0x36,
- 0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,
- 0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,
- 0x36,0x36,0xf7,0x00,0xf7,0x36,0x36,0x36,
- 0x18,0x18,0xff,0x00,0xff,0x00,0x00,0x00,
- 0x36,0x36,0x36,0x36,0xff,0x00,0x00,0x00,
- 0x00,0x00,0xff,0x00,0xff,0x18,0x18,0x18,
- 0x00,0x00,0x00,0x00,0xff,0x36,0x36,0x36,
- 0x36,0x36,0x36,0x36,0x3f,0x00,0x00,0x00,
- 0x18,0x18,0x1f,0x18,0x1f,0x00,0x00,0x00,
- 0x00,0x00,0x1f,0x18,0x1f,0x18,0x18,0x18,
- 0x00,0x00,0x00,0x00,0x3f,0x36,0x36,0x36,
- 0x36,0x36,0x36,0x36,0xff,0x36,0x36,0x36,
- 0x18,0x18,0xff,0x18,0xff,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0xf8,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x1f,0x18,0x18,0x18,
- 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
- 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
- 0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,
- 0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,
- 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x3b,0x6e,0x64,0x6e,0x3b,0x00,
- 0x00,0x3c,0x66,0x7c,0x66,0x7c,0x60,0x60,
- 0x00,0x7e,0x66,0x60,0x60,0x60,0x60,0x00,
- 0x00,0x7f,0x36,0x36,0x36,0x36,0x36,0x00,
- 0x7e,0x66,0x30,0x18,0x30,0x66,0x7e,0x00,
- 0x00,0x00,0x3f,0x6c,0x6c,0x6c,0x38,0x00,
- 0x00,0x33,0x33,0x33,0x33,0x3e,0x30,0x60,
- 0x00,0x3b,0x6e,0x0c,0x0c,0x0c,0x0c,0x00,
- 0x7e,0x18,0x3c,0x66,0x66,0x3c,0x18,0x7e,
- 0x1c,0x36,0x63,0x7f,0x63,0x36,0x1c,0x00,
- 0x1c,0x36,0x63,0x63,0x36,0x36,0x77,0x00,
- 0x0e,0x18,0x0c,0x3e,0x66,0x66,0x3c,0x00,
- 0x00,0x00,0x7e,0xdb,0xdb,0x7e,0x00,0x00,
- 0x06,0x0c,0x7e,0xdb,0xdb,0x7e,0x60,0xc0,
- 0x1c,0x30,0x60,0x7c,0x60,0x30,0x1c,0x00,
- 0x3c,0x66,0x66,0x66,0x66,0x66,0x66,0x00,
- 0x00,0x7e,0x00,0x7e,0x00,0x7e,0x00,0x00,
- 0x18,0x18,0x7e,0x18,0x18,0x00,0x7e,0x00,
- 0x30,0x18,0x0c,0x18,0x30,0x00,0x7e,0x00,
- 0x0c,0x18,0x30,0x18,0x0c,0x00,0x7e,0x00,
- 0x0e,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,
- 0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0x70,
- 0x18,0x18,0x00,0x7e,0x00,0x18,0x18,0x00,
- 0x00,0x3b,0x6e,0x00,0x3b,0x6e,0x00,0x00,
- 0x1c,0x36,0x36,0x1c,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x0c,0x0c,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,
- 0x0f,0x0c,0x0c,0x0c,0xec,0x6c,0x3c,0x1c,
- 0x78,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,
- 0x70,0x18,0x30,0x60,0x78,0x00,0x00,0x00,
- 0x00,0x00,0x3c,0x3c,0x3c,0x3c,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-};
-
diff --git a/src/target/firmware/display/ssd1783.c b/src/target/firmware/display/ssd1783.c
deleted file mode 100644
index 5696b48f..00000000
--- a/src/target/firmware/display/ssd1783.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Solomon SSD1783 LCD Driver (Epson S1D15G10D08B000 clone) */
-
-/* (C) 2010 by Steve Markgraf <steve@steve-m.de>
- * (C) 2010 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-//#define DEBUG
-#include <debug.h>
-#include <delay.h>
-#include <uwire.h>
-#include <display.h>
-#include <display/ssd1783.h>
-#include <calypso/clock.h>
-
-#define LCD_COLUMNS 98
-#define LCD_ROWS 67
-#define LCD_TOP_FREE_ROWS 3
-#define LCD_LEFT_FREE_COLS 0
-#define PIXEL_BYTES 3
-#define SSD1783_UWIRE_BITLEN 9
-#define SSD1783_DEV_ID 0
-#define FONT_HEIGHT 8
-#define FONT_WIDTH 8
-
-static const uint8_t rgb8_palette[] ={
- 0x00, //P01 Intermediate red tone 000
- 0x03, //P02 Intermediate red tone 001
- 0x05, //P03 Intermediate red tone 010
- 0x07, //P04 Intermediate red tone 011
- 0x09, //P05 Intermediate red tone 100
- 0x0b, //P06 Intermediate red tone 101
- 0x0d, //P07 Intermediate red tone 110
- 0x0f, //P08 Intermediate red tone 111
- 0x00, //P09 Intermediate green tone 000
- 0x03, //P10 Intermediate green tone 001
- 0x05, //P11 Intermediate green tone 010
- 0x07, //P12 Intermediate green tone 011
- 0x09, //P13 Intermediate green tone 100
- 0x0b, //P14 Intermediate green tone 101
- 0x0d, //P15 Intermediate green tone 110
- 0x0f, //P16 Intermediate green tone 111
- 0x00, //P17 Intermediate blue tone 00
- 0x05, //P18 Intermediate blue tone 01
- 0x0a, //P19 Intermediate blue tone 10
- 0x0f, //P20 Intermediate blue tone 11
-};
-
-static void ssd1783_cmd_write(const uint8_t cmd)
-{
- uint16_t cmd_out = cmd;
- uwire_xfer(SSD1783_DEV_ID, SSD1783_UWIRE_BITLEN, &cmd_out, NULL);
-}
-
-static void ssd1783_data_write(const uint8_t data)
-{
- uint16_t data_out = ((0x01 << 8) + data);
- uwire_xfer(SSD1783_DEV_ID, SSD1783_UWIRE_BITLEN, &data_out, NULL);
-}
-
-static void ssd1783_clrscr(void)
-{
- uint16_t i;
-
- /* Select the whole display area for clearing */
- ssd1783_cmd_write(CMD_PASET); /* Page address set [2] */
- ssd1783_data_write(0x00); /* Start page: 0x00 */
- ssd1783_data_write(LCD_ROWS-1); /* End page */
- ssd1783_cmd_write(CMD_CASET); /* Column address set [2] */
- ssd1783_data_write(0x00); /* Start column: 0x00 */
- ssd1783_data_write((LCD_COLUMNS/2)-1); /* End column (2 pixels per column) */
- ssd1783_cmd_write(CMD_RAMWR); /* Write to memory */
-
- /* Fill the display with white */
- for(i=0; i < (LCD_ROWS * (LCD_COLUMNS/2) * PIXEL_BYTES); i++){
- ssd1783_data_write(0xff);
- }
- ssd1783_cmd_write(CMD_NOP); /* Terminate RAMWR with NOP */
-}
-
-static void ssd1783_init(void)
-{
- unsigned int i;
-
- calypso_reset_set(RESET_EXT, 0);
- uwire_init();
- delay_ms(3);
-
- /* Begin SSD1783 initialization sequence */
- ssd1783_cmd_write(CMD_OSCON); /* Internal OSC on */
- ssd1783_cmd_write(CMD_SLPOUT); /* Sleep out (Leave sleep mode) */
-
- ssd1783_cmd_write(CMD_COMSCN); /* Common scan direction [1] */
- ssd1783_data_write(0x01); /* Scan 1 -> 68, 132 <- 69 */
- ssd1783_cmd_write(CMD_DATCTL); /* Data Scan Direction [3] */
- ssd1783_data_write(0x00); /* Normal page address, normal rotation,
- * scan direction in column direction */
- ssd1783_data_write(0x00); /* RGB arrangement: RGB-RGB */
- ssd1783_data_write(0x02); /* Gray-scale setup: 16 gray-scale Type A, 8-bit mode */
-
- /* Initialize RGB8 palette for 8-Bit color mode */
- ssd1783_cmd_write(CMD_RGBSET8); /* 256-color position set [20] */
- for(i=0; i < sizeof(rgb8_palette); i++){
- ssd1783_data_write(rgb8_palette[i]);
- }
-
- ssd1783_cmd_write(CMD_DISCTL); /* Display control [3] */
- ssd1783_data_write(0xff); /* no clock division, F1, F2 switching period = field */
- ssd1783_data_write(0x10); /* Drive duty, P24 = 1 */
- ssd1783_data_write(0x01); /* FR inverse set, P30=1 */
- ssd1783_cmd_write(CMD_SCSTART); /* Scroll start set [1] */
- ssd1783_data_write(0x00); /* Start block address 0x00 */
-
- /* Turn on the power regulator which generates VLCD */
- ssd1783_cmd_write(CMD_PWRCTR); /* Power Control [1] */
- ssd1783_data_write(0x0b); /* Booster, follower and regulator circuit on */
-
- /* FIXME: put this in a separate function (ssd1783_set_contrast) */
- ssd1783_cmd_write(CMD_VOLCTR); /* Electronic Volume Control [2] */
- ssd1783_data_write(0x29); /* Set contrast */
- ssd1783_data_write(0x05); /* Set contrast */
-
- ssd1783_cmd_write(CMD_DISINV); /* Invert Display */
- ssd1783_cmd_write(CMD_TMPGRD); /* Temperature gradient set */
- ssd1783_data_write(0x00); /* default temperature gradient (-0.05% / °C) */
- ssd1783_cmd_write(CMD_BIASSET); /* Set biasing ratio [1] */
- ssd1783_data_write(0x03); /* 1/10 bias */
- ssd1783_cmd_write(CMD_FREQSET); /* Set frequency and n-line inversion [2] */
- ssd1783_data_write(0x08); /* frequency: 75Hz (POR) */
- ssd1783_data_write(0x06); /* n-line inversion: 6 lines */
- ssd1783_cmd_write(CMD_RESCMD); /* reserved command in datasheet? */
- ssd1783_cmd_write(CMD_PWMSEL); /* Select PWM/FRC, Full/8 color mode [3] */
- ssd1783_data_write(0x28); /* fixed */
- ssd1783_data_write(0x2c); /* 5 bits PWM + 1 bit FRC (POR) */
- ssd1783_data_write(0x05); /* Full color mode (0x45 would be 8 color powersaving) */
-
- ssd1783_cmd_write(CMD_DISON); /* Display ON */
- ssd1783_clrscr(); /* Clear the display */
-}
-
-extern const unsigned char fontdata_r8x8_horiz[];
-
-/*
- * Pixel format for 8-bit mode, 12-bit color, 2 Pixel per 3 byte
- * D7, D6, D5, D4, D3, D2, D1, D0: RRRRGGGG (8 bits) 1st write
- * D7, D6, D5, D4, D3, D2, D1, D0: BBBBRRRR (8 bits) 2nd write
- * D7, D6, D5, D4, D3, D2, D1, D0: GGGGBBBB (8 bits) 3rd write
-*/
-
-static void ssd1783_goto_xy(int xpos, int ypos)
-{
- ssd1783_cmd_write(CMD_PASET);
- ssd1783_data_write(xpos);
- ssd1783_data_write(xpos + (FONT_HEIGHT-1));
-
- ssd1783_cmd_write(CMD_CASET);
- ssd1783_data_write(ypos);
- ssd1783_data_write(ypos + ((FONT_WIDTH/2)-1));
-
- ssd1783_cmd_write(CMD_NOP);
-}
-
-static int ssd1783_putc_col(unsigned char c, int fColor, int bColor)
-{
- int i, j;
- uint8_t cols = FONT_WIDTH;
- uint8_t rows = FONT_HEIGHT;
- uint8_t row_slice;
- uint8_t rowmask;
- uint16_t pixel0; /* left pixel */
- uint16_t pixel1; /* right pixel */
-
- ssd1783_cmd_write(CMD_RAMWR);
-
- for (i = 0; i < rows; i++) {
- row_slice = fontdata_r8x8_horiz[(FONT_WIDTH * c)+i];
- printd("\nSSD1783 FontData=0x%02hx", row_slice);
- rowmask = 0x80;
- for (j = 0; j < cols; j += 2) {
- if (!(row_slice & rowmask))
- pixel0 = bColor;
- else
- pixel0 = fColor;
- rowmask = rowmask >> 1;
- if (!(row_slice & rowmask))
- pixel1 = bColor;
- else
- pixel1 = fColor;
- rowmask = rowmask >> 1;
- /* Write the RGB-RGB pixel data */
- ssd1783_data_write((pixel0 >> 4) & 0xff);
- ssd1783_data_write(((pixel0 & 0x00f) << 4) | ((pixel1 >> 8) & 0x00f));
- ssd1783_data_write(pixel1 & 0xff);
- }
- }
- ssd1783_cmd_write(CMD_NOP);
-
- return c;
-}
-
-static int ssd1783_puts_col(const char *str, int txtline, int fColor, int bColor)
-{
- int i;
- for (i = 0; *str != 0x00; i += (FONT_WIDTH/2)) {
- ssd1783_goto_xy(((txtline*FONT_HEIGHT)+LCD_TOP_FREE_ROWS),
- (i + LCD_LEFT_FREE_COLS));
- ssd1783_putc_col(*str++, fColor, bColor);
- }
-
- return 0;
-}
-
-/* interface to display driver core */
-
-static void ssd1783_set_attr(unsigned long attr)
-{
- /* FIXME */
-}
-
-static int ssd1783_putc(unsigned int c)
-{
- return ssd1783_putc_col(c, BLACK, WHITE);
-}
-
-static int ssd1783_puts(const char *str)
-{
- return ssd1783_puts_col(str, 0, BLACK, WHITE);
-}
-
-const struct display_driver ssd1783_display = {
- .name = "ssd1783",
- .init = &ssd1783_init,
- .set_attr = &ssd1783_set_attr,
- .unset_attr = &ssd1783_set_attr,
- .clrscr = &ssd1783_clrscr,
- .goto_xy = &ssd1783_goto_xy,
- .putc = &ssd1783_putc,
- .puts = &ssd1783_puts,
-};
diff --git a/src/target/firmware/display/ssd1963.c b/src/target/firmware/display/ssd1963.c
deleted file mode 100644
index 49d5275c..00000000
--- a/src/target/firmware/display/ssd1963.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* Solomon SSD1963 LCD Driver (probably not exactly the SSD1963)
- * as used in the Sony Ericsson J100i */
-
-/* (C) 2010-11 by Steve Markgraf <steve@steve-m.de>
- * (C) 2010 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <debug.h>
-#include <delay.h>
-#include <uwire.h>
-#include <display.h>
-#include <calypso/clock.h>
-
-#define LCD_COLUMNS 96
-#define LCD_ROWS 64
-#define LCD_TOP_FREE_ROWS 3
-#define LCD_LEFT_FREE_COLS 0
-#define PIXEL_BYTES 3
-#define SSD1963_UWIRE_BITLEN 9
-#define SSD1963_DEV_ID 0
-#define FONT_HEIGHT 8
-#define FONT_WIDTH 8
-
-#define BLACK 0x0000
-#define WHITE 0x0fff
-
-static void ssd1963_cmd_write(const uint8_t cmd)
-{
- uint16_t cmd_out = cmd;
- uwire_xfer(SSD1963_DEV_ID, SSD1963_UWIRE_BITLEN, &cmd_out, NULL);
-}
-
-static void ssd1963_data_write(const uint8_t data)
-{
- uint16_t data_out = ((0x01 << 8) + data);
- uwire_xfer(SSD1963_DEV_ID, SSD1963_UWIRE_BITLEN, &data_out, NULL);
-}
-
-static void ssd1963_clrscr(void)
-{
- uint16_t i;
-
- /* Select the whole display area for clearing */
- ssd1963_cmd_write(0x2b);
- ssd1963_data_write(0x00);
- ssd1963_data_write(LCD_ROWS-1);
-
- ssd1963_cmd_write(0x2a);
- ssd1963_data_write(0x00);
- ssd1963_data_write(LCD_COLUMNS-1);
-
- ssd1963_cmd_write(0x2c);
-
- /* Fill the display with white */
- for(i=0; i < (LCD_ROWS * (LCD_COLUMNS/2) * PIXEL_BYTES); i++){
- ssd1963_data_write(0xff);
- }
-}
-
-static void ssd1963_init(void)
-{
- unsigned int i;
-
- calypso_reset_set(RESET_EXT, 0);
- uwire_init();
- delay_ms(3);
-
- /* Begin SSD1963 initialization sequence */
- ssd1963_cmd_write(0xb6); /* Set vertical period */
- ssd1963_data_write(0x4b);
- ssd1963_data_write(0xf1);
- ssd1963_data_write(0x40);
- ssd1963_data_write(0x40);
- ssd1963_data_write(0x00);
- ssd1963_data_write(0x8c);
- ssd1963_data_write(0x00);
-
- ssd1963_cmd_write(0x3a); /* Set pixel format */
- ssd1963_data_write(0x03); /* 0x03: 12 bit, 0x05: 16 Bit / pixel */
- ssd1963_cmd_write(0x11);
-
- /* Contrast/Electronic Volume Control */
- ssd1963_cmd_write(0xba);
- ssd1963_data_write(0x5b);
- ssd1963_data_write(0x84);
-
- ssd1963_cmd_write(0x36);
- ssd1963_data_write(0x00);
-
- ssd1963_cmd_write(0x13); /* Enter normal mode */
- ssd1963_clrscr();
-
- ssd1963_cmd_write(0x29); /* Display ON */
-}
-
-extern const unsigned char fontdata_r8x8_horiz[];
-
-/*
- * Pixel format for 8-bit mode, 12-bit color, 2 Pixel per 3 byte
- * D7, D6, D5, D4, D3, D2, D1, D0: RRRRGGGG (8 bits) 1st write
- * D7, D6, D5, D4, D3, D2, D1, D0: BBBBRRRR (8 bits) 2nd write
- * D7, D6, D5, D4, D3, D2, D1, D0: GGGGBBBB (8 bits) 3rd write
-*/
-
-static void ssd1963_goto_xy(int xpos, int ypos)
-{
- ssd1963_cmd_write(0x2b);
- ssd1963_data_write(xpos);
- ssd1963_data_write(xpos + FONT_HEIGHT-1);
-
- ssd1963_cmd_write(0x2a);
- ssd1963_data_write(ypos);
- ssd1963_data_write(ypos + FONT_WIDTH-1);
-}
-
-static int ssd1963_putc_col(unsigned char c, int fColor, int bColor)
-{
- int i, j;
- uint8_t cols = FONT_WIDTH;
- uint8_t rows = FONT_HEIGHT;
- uint8_t row_slice;
- uint8_t rowmask;
- uint16_t pixel0; /* left pixel */
- uint16_t pixel1; /* right pixel */
-
- ssd1963_cmd_write(0x2c);
-
- for (i = 0; i < rows; i++) {
- row_slice = fontdata_r8x8_horiz[(FONT_WIDTH * c)+i];
- rowmask = 0x80;
- for (j = 0; j < cols; j += 2) {
- if (!(row_slice & rowmask))
- pixel0 = bColor;
- else
- pixel0 = fColor;
- rowmask = rowmask >> 1;
- if (!(row_slice & rowmask))
- pixel1 = bColor;
- else
- pixel1 = fColor;
- rowmask = rowmask >> 1;
- /* Write the RGB-RGB pixel data */
- ssd1963_data_write((pixel0 >> 4) & 0xff);
- ssd1963_data_write(((pixel0 & 0x00f) << 4) | ((pixel1 >> 8) & 0x00f));
- ssd1963_data_write(pixel1 & 0xff);
- }
- }
- ssd1963_cmd_write(0x00);
-
- return c;
-}
-
-static int ssd1963_puts_col(const char *str, int txtline, int fColor, int bColor)
-{
- int i;
- for (i = 0; *str != 0x00; i += FONT_WIDTH) {
- ssd1963_goto_xy(((txtline*FONT_HEIGHT)+LCD_TOP_FREE_ROWS),
- (i + LCD_LEFT_FREE_COLS));
- ssd1963_putc_col(*str++, fColor, bColor);
- }
-
- return 0;
-}
-
-/* interface to display driver core */
-
-static void ssd1963_set_attr(unsigned long attr)
-{
- /* FIXME */
-}
-
-static int ssd1963_putc(unsigned int c)
-{
- return ssd1963_putc_col(c, BLACK, WHITE);
-}
-
-static int ssd1963_puts(const char *str)
-{
- return ssd1963_puts_col(str, 0, BLACK, WHITE);
-}
-
-const struct display_driver ssd1963_display = {
- .name = "ssd1963",
- .init = &ssd1963_init,
- .set_attr = &ssd1963_set_attr,
- .unset_attr = &ssd1963_set_attr,
- .clrscr = &ssd1963_clrscr,
- .goto_xy = &ssd1963_goto_xy,
- .putc = &ssd1963_putc,
- .puts = &ssd1963_puts,
-};
diff --git a/src/target/firmware/display/st7558.c b/src/target/firmware/display/st7558.c
deleted file mode 100644
index b92c2de1..00000000
--- a/src/target/firmware/display/st7558.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/* Sitronix ST7558 LCD Driver */
-
-/* (C) 2010 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <debug.h>
-#include <delay.h>
-#include <memory.h>
-#include <i2c.h>
-#include <display.h>
-#include <calypso/clock.h>
-
-#define MORE_CONTROL 0x80
-#define CONTROL_RS_RAM 0x40
-#define CONTROL_RS_CMD 0x00
-#define Y_ADDR(n) (0x40|((n)&0xf))
-#define X_ADDR(n) (0x80|((n)&0x3f))
-
-static const uint8_t setup[] = { CONTROL_RS_CMD, 0x2e, 0x21, 0x12, 0xc0, 0x0b,
- 0x20, 0x11, 0x00, 0x40, 0x80 };
-static const uint8_t home[] = { CONTROL_RS_CMD, Y_ADDR(0), X_ADDR(0) };
-
-/* video modes */
-static const uint8_t invert[] = { CONTROL_RS_CMD, 0x20, 0x0d };
-static const uint8_t normal[] = { CONTROL_RS_CMD, 0x20, 0x0c };
-static const uint8_t off[] = { CONTROL_RS_CMD, 0x20, 0x08 };
-
-#define ST7558_SLAVE_ADDR 0x3c
-static int st7558_write(const uint8_t *data, int len)
-{
- int rc = i2c_write(ST7558_SLAVE_ADDR, data[0], 1, data+1, len-1);
- return rc;
-}
-
-static const uint8_t zero16[] = { CONTROL_RS_RAM,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0 };
-static void st7558_clrscr(void)
-{
- int i;
-
- st7558_write(home, sizeof(home));
-
- for (i = 0; i < 102*9; i += 16)
- st7558_write(zero16, sizeof(zero16));
-
- st7558_write(home, sizeof(home));
-}
-
-static void st7558_init(void)
-{
- /* Release nRESET */
- calypso_reset_set(RESET_EXT, 0);
-
- i2c_init(0,0);
-
- st7558_write(setup, sizeof(setup));
- st7558_clrscr();
-}
-
-static void st7558_set_attr(unsigned long attr)
-{
- if (attr & DISP_ATTR_INVERT)
- st7558_write(invert, sizeof(invert));
-}
-
-static void st7558_unset_attr(unsigned long attr)
-{
- if (attr & DISP_ATTR_INVERT)
- st7558_write(normal, sizeof(normal));
-}
-
-/* FIXME: we need a mini-libc */
-static void *mcpy(uint8_t *dst, const uint8_t *src, int len)
-{
- while (len--)
- *dst++ = *src++;
-
- return dst;
-}
-
-extern const unsigned char fontdata_r8x8[];
-
-static void st7558_putc(unsigned char c)
-{
- uint8_t putc_buf[16];
- uint8_t bytes_per_char = 8;
-
- putc_buf[0] = CONTROL_RS_RAM;
- mcpy(putc_buf+1, fontdata_r8x8+(c*bytes_per_char), bytes_per_char);
- st7558_write(putc_buf, 1+bytes_per_char);
-}
-
-const struct display_driver st7558_display = {
- .name = "st7558",
- .init = &st7558_init,
- .clrscr = &st7558_clrscr,
- .set_attr = &st7558_set_attr,
- .unset_attr = &st7558_unset_attr,
- .putc = &st7558_putc,
-};
diff --git a/src/target/firmware/display/td014.c b/src/target/firmware/display/td014.c
deleted file mode 100644
index 11ef3eab..00000000
--- a/src/target/firmware/display/td014.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Toppoly TD014 LCD Driver, as used in the Motorola C139/C140 */
-
-/* (C) 2010 by Steve Markgraf <steve@steve-m.de>
- * (C) 2010 by Harald Welte <laforge@gnumonks.org>
- *
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <stdio.h>
-
-#include <debug.h>
-#include <delay.h>
-#include <uwire.h>
-#include <display.h>
-#include <calypso/clock.h>
-
-#define LCD_COLUMNS 96
-#define LCD_ROWS 64
-#define LCD_TOP_FREE_ROWS 3
-#define LCD_LEFT_FREE_COLS 0
-#define PIXEL_BYTES 2
-#define TD014_UWIRE_BITLEN 9
-#define TD014_DEV_ID 0
-#define FONT_HEIGHT 8
-#define FONT_WIDTH 8
-
-#define BLACK 0x0000
-#define WHITE 0xffff
-
-static void td014_cmd_write(const uint8_t cmd)
-{
- uint16_t cmd_out = cmd;
- uwire_xfer(TD014_DEV_ID, TD014_UWIRE_BITLEN, &cmd_out, NULL);
-}
-
-static void td014_data_write(const uint8_t data)
-{
- uint16_t data_out = ((0x01 << 8) + data);
- uwire_xfer(TD014_DEV_ID, TD014_UWIRE_BITLEN, &data_out, NULL);
-}
-
-static void td014_clrscr(void)
-{
- uint16_t i;
-
- /* Select the whole display area for clearing */
- td014_cmd_write(0x10);
- td014_data_write(0x00);
- td014_cmd_write(0x11);
- td014_data_write(0x00);
- td014_cmd_write(0x12);
- td014_data_write(LCD_COLUMNS-1);
- td014_cmd_write(0x13);
- td014_data_write(LCD_ROWS-1);
- td014_cmd_write(0x14);
- td014_data_write(0x00);
- td014_cmd_write(0x15);
- td014_data_write(0x00);
-
- /* Fill the display with white */
- for(i=0; i < (LCD_ROWS * LCD_COLUMNS * PIXEL_BYTES); i++) {
- td014_data_write(0xff);
- }
-}
-
-static void td014_init(void)
-{
- calypso_reset_set(RESET_EXT, 0);
- uwire_init();
- delay_ms(3);
-
- td014_cmd_write(0x3f);
- td014_data_write(0x01);
- td014_cmd_write(0x20);
- td014_data_write(0x03);
- td014_cmd_write(0x31);
- td014_data_write(0x03);
-
- td014_clrscr();
-
-}
-
-extern const unsigned char fontdata_r8x8_horiz[];
-
-static void td014_goto_xy(int xpos, int ypos)
-{
- td014_cmd_write(0x10);
- td014_data_write(ypos);
- td014_cmd_write(0x11);
- td014_data_write(xpos);
- td014_cmd_write(0x12);
- td014_data_write(ypos + FONT_HEIGHT-1);
- td014_cmd_write(0x13);
- td014_data_write(xpos + FONT_WIDTH-1);
- td014_cmd_write(0x14);
- td014_data_write(ypos);
- td014_cmd_write(0x15);
- td014_data_write(xpos);
-
-}
-
- /* RGB 556 Byte 1 | Byte 2 *
- * Pixel format: RRRRRGGG|GGBBBBBB */
-
-static int td014_putc_col(unsigned char c, int fColor, int bColor)
-{
- int i, j;
- uint8_t cols = FONT_WIDTH;
- uint8_t rows = FONT_HEIGHT;
- uint8_t row_slice;
- uint8_t rowmask;
- uint16_t pixel;
-
- for (i = 0; i < rows; i++) {
- row_slice = fontdata_r8x8_horiz[(FONT_WIDTH * c)+i];
- rowmask = 0x80;
- for (j = 0; j < cols; j++) {
- if (!(row_slice & rowmask))
- pixel = bColor;
- else
- pixel = fColor;
- rowmask = rowmask >> 1;
- /* Write the pixel data */
- td014_data_write((pixel >> 8) & 0xff);
- td014_data_write(pixel & 0xff);
- }
- }
- return c;
-}
-
-static int td014_puts_col(const char *str, int txtline, int fColor, int bColor)
-{
- int i;
- for (i = 0; *str != 0x00; i += FONT_WIDTH) {
- td014_goto_xy(((txtline*FONT_HEIGHT)+LCD_TOP_FREE_ROWS),
- (i + LCD_LEFT_FREE_COLS));
- td014_putc_col(*str++, fColor, bColor);
- }
-
- return 0;
-}
-
-/* interface to display driver core */
-
-static void td014_set_attr(unsigned long attr)
-{
- /* FIXME */
-}
-
-static int td014_putc(unsigned int c)
-{
- return td014_putc_col(c, BLACK, WHITE);
-}
-
-static int td014_puts(const char *str)
-{
- return td014_puts_col(str, 0, BLACK, WHITE);
-}
-
-const struct display_driver td014_display = {
- .name = "td014",
- .init = &td014_init,
- .set_attr = &td014_set_attr,
- .unset_attr = &td014_set_attr,
- .clrscr = &td014_clrscr,
- .goto_xy = &td014_goto_xy,
- .putc = &td014_putc,
- .puts = &td014_puts,
-};
diff --git a/src/target/firmware/fb/4x6.c b/src/target/firmware/fb/4x6.c
new file mode 100644
index 00000000..2a35eba6
--- /dev/null
+++ b/src/target/firmware/fb/4x6.c
@@ -0,0 +1,731 @@
+#include <fb/font.h>
+static const uint8_t font_4x6_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 4, 4, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0x40, /* .#...... */
+ /*000c:*/ 0x40, /* .#...... */
+ /*000d:*/ 0x40, /* .#...... */
+ /*000e:*/ 0x00, /* ........ */
+ /*000f:*/ 0x40, /* .#...... */
+/* --- new character quotedbl (34) starting at offset 0x0010 --- */
+ /*0010:*/ 4, 4, 2, 0, 3, /* width and bbox (w,h,x,y) */
+ /*0015:*/ 0xa0, /* #.#..... */
+ /*0016:*/ 0xa0, /* #.#..... */
+/* --- new character numbersign (35) starting at offset 0x0017 --- */
+ /*0017:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*001c:*/ 0xa0, /* #.#..... */
+ /*001d:*/ 0xf0, /* ####.... */
+ /*001e:*/ 0xa0, /* #.#..... */
+ /*001f:*/ 0xf0, /* ####.... */
+ /*0020:*/ 0xa0, /* #.#..... */
+/* --- new character dollar (36) starting at offset 0x0021 --- */
+ /*0021:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0026:*/ 0x40, /* .#...... */
+ /*0027:*/ 0xe0, /* ###..... */
+ /*0028:*/ 0xc0, /* ##...... */
+ /*0029:*/ 0x20, /* ..#..... */
+ /*002a:*/ 0xe0, /* ###..... */
+ /*002b:*/ 0x40, /* .#...... */
+/* --- new character percent (37) starting at offset 0x002c --- */
+ /*002c:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0031:*/ 0x80, /* #....... */
+ /*0032:*/ 0x20, /* ..#..... */
+ /*0033:*/ 0x40, /* .#...... */
+ /*0034:*/ 0x80, /* #....... */
+ /*0035:*/ 0x20, /* ..#..... */
+/* --- new character ampersand (38) starting at offset 0x0036 --- */
+ /*0036:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*003b:*/ 0x40, /* .#...... */
+ /*003c:*/ 0xa0, /* #.#..... */
+ /*003d:*/ 0x40, /* .#...... */
+ /*003e:*/ 0xa0, /* #.#..... */
+ /*003f:*/ 0x50, /* .#.#.... */
+/* --- new character quotesingle (39) starting at offset 0x0040 --- */
+ /*0040:*/ 4, 4, 2, 0, 3, /* width and bbox (w,h,x,y) */
+ /*0045:*/ 0x40, /* .#...... */
+ /*0046:*/ 0x40, /* .#...... */
+/* --- new character parenleft (40) starting at offset 0x0047 --- */
+ /*0047:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*004c:*/ 0x20, /* ..#..... */
+ /*004d:*/ 0x40, /* .#...... */
+ /*004e:*/ 0x40, /* .#...... */
+ /*004f:*/ 0x40, /* .#...... */
+ /*0050:*/ 0x40, /* .#...... */
+ /*0051:*/ 0x20, /* ..#..... */
+/* --- new character parenright (41) starting at offset 0x0052 --- */
+ /*0052:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0057:*/ 0x80, /* #....... */
+ /*0058:*/ 0x40, /* .#...... */
+ /*0059:*/ 0x40, /* .#...... */
+ /*005a:*/ 0x40, /* .#...... */
+ /*005b:*/ 0x40, /* .#...... */
+ /*005c:*/ 0x80, /* #....... */
+/* --- new character asterisk (42) starting at offset 0x005d --- */
+ /*005d:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0062:*/ 0xa0, /* #.#..... */
+ /*0063:*/ 0x40, /* .#...... */
+ /*0064:*/ 0xe0, /* ###..... */
+ /*0065:*/ 0x40, /* .#...... */
+ /*0066:*/ 0xa0, /* #.#..... */
+/* --- new character plus (43) starting at offset 0x0067 --- */
+ /*0067:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*006c:*/ 0x40, /* .#...... */
+ /*006d:*/ 0x40, /* .#...... */
+ /*006e:*/ 0xe0, /* ###..... */
+ /*006f:*/ 0x40, /* .#...... */
+ /*0070:*/ 0x40, /* .#...... */
+/* --- new character comma (44) starting at offset 0x0071 --- */
+ /*0071:*/ 4, 4, 2, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0076:*/ 0x40, /* .#...... */
+ /*0077:*/ 0x80, /* #....... */
+/* --- new character hyphen (45) starting at offset 0x0078 --- */
+ /*0078:*/ 4, 4, 1, 0, 2, /* width and bbox (w,h,x,y) */
+ /*007d:*/ 0xe0, /* ###..... */
+/* --- new character period (46) starting at offset 0x007e --- */
+ /*007e:*/ 4, 4, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0083:*/ 0x40, /* .#...... */
+/* --- new character slash (47) starting at offset 0x0084 --- */
+ /*0084:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0089:*/ 0x20, /* ..#..... */
+ /*008a:*/ 0x20, /* ..#..... */
+ /*008b:*/ 0x40, /* .#...... */
+ /*008c:*/ 0x80, /* #....... */
+ /*008d:*/ 0x80, /* #....... */
+/* --- new character zero (48) starting at offset 0x008e --- */
+ /*008e:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0093:*/ 0x40, /* .#...... */
+ /*0094:*/ 0xa0, /* #.#..... */
+ /*0095:*/ 0xe0, /* ###..... */
+ /*0096:*/ 0xa0, /* #.#..... */
+ /*0097:*/ 0x40, /* .#...... */
+/* --- new character one (49) starting at offset 0x0098 --- */
+ /*0098:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*009d:*/ 0x40, /* .#...... */
+ /*009e:*/ 0xc0, /* ##...... */
+ /*009f:*/ 0x40, /* .#...... */
+ /*00a0:*/ 0x40, /* .#...... */
+ /*00a1:*/ 0xe0, /* ###..... */
+/* --- new character two (50) starting at offset 0x00a2 --- */
+ /*00a2:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00a7:*/ 0x40, /* .#...... */
+ /*00a8:*/ 0xa0, /* #.#..... */
+ /*00a9:*/ 0x20, /* ..#..... */
+ /*00aa:*/ 0x40, /* .#...... */
+ /*00ab:*/ 0xe0, /* ###..... */
+/* --- new character three (51) starting at offset 0x00ac --- */
+ /*00ac:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00b1:*/ 0xe0, /* ###..... */
+ /*00b2:*/ 0x20, /* ..#..... */
+ /*00b3:*/ 0x40, /* .#...... */
+ /*00b4:*/ 0x20, /* ..#..... */
+ /*00b5:*/ 0xc0, /* ##...... */
+/* --- new character four (52) starting at offset 0x00b6 --- */
+ /*00b6:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00bb:*/ 0xa0, /* #.#..... */
+ /*00bc:*/ 0xa0, /* #.#..... */
+ /*00bd:*/ 0xe0, /* ###..... */
+ /*00be:*/ 0x20, /* ..#..... */
+ /*00bf:*/ 0x20, /* ..#..... */
+/* --- new character five (53) starting at offset 0x00c0 --- */
+ /*00c0:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00c5:*/ 0xe0, /* ###..... */
+ /*00c6:*/ 0x80, /* #....... */
+ /*00c7:*/ 0xc0, /* ##...... */
+ /*00c8:*/ 0x20, /* ..#..... */
+ /*00c9:*/ 0xc0, /* ##...... */
+/* --- new character six (54) starting at offset 0x00ca --- */
+ /*00ca:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00cf:*/ 0x60, /* .##..... */
+ /*00d0:*/ 0x80, /* #....... */
+ /*00d1:*/ 0xc0, /* ##...... */
+ /*00d2:*/ 0xa0, /* #.#..... */
+ /*00d3:*/ 0x40, /* .#...... */
+/* --- new character seven (55) starting at offset 0x00d4 --- */
+ /*00d4:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00d9:*/ 0xe0, /* ###..... */
+ /*00da:*/ 0x20, /* ..#..... */
+ /*00db:*/ 0x40, /* .#...... */
+ /*00dc:*/ 0x80, /* #....... */
+ /*00dd:*/ 0x80, /* #....... */
+/* --- new character eight (56) starting at offset 0x00de --- */
+ /*00de:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00e3:*/ 0x60, /* .##..... */
+ /*00e4:*/ 0xa0, /* #.#..... */
+ /*00e5:*/ 0x40, /* .#...... */
+ /*00e6:*/ 0xa0, /* #.#..... */
+ /*00e7:*/ 0xc0, /* ##...... */
+/* --- new character nine (57) starting at offset 0x00e8 --- */
+ /*00e8:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ed:*/ 0x40, /* .#...... */
+ /*00ee:*/ 0xa0, /* #.#..... */
+ /*00ef:*/ 0x60, /* .##..... */
+ /*00f0:*/ 0x20, /* ..#..... */
+ /*00f1:*/ 0xc0, /* ##...... */
+/* --- new character colon (58) starting at offset 0x00f2 --- */
+ /*00f2:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00f7:*/ 0x40, /* .#...... */
+ /*00f8:*/ 0x00, /* ........ */
+ /*00f9:*/ 0x00, /* ........ */
+ /*00fa:*/ 0x40, /* .#...... */
+/* --- new character semicolon (59) starting at offset 0x00fb --- */
+ /*00fb:*/ 4, 4, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0100:*/ 0x40, /* .#...... */
+ /*0101:*/ 0x00, /* ........ */
+ /*0102:*/ 0x00, /* ........ */
+ /*0103:*/ 0x40, /* .#...... */
+ /*0104:*/ 0x80, /* #....... */
+/* --- new character less (60) starting at offset 0x0105 --- */
+ /*0105:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*010a:*/ 0x20, /* ..#..... */
+ /*010b:*/ 0x40, /* .#...... */
+ /*010c:*/ 0x80, /* #....... */
+ /*010d:*/ 0x40, /* .#...... */
+ /*010e:*/ 0x20, /* ..#..... */
+/* --- new character equal (61) starting at offset 0x010f --- */
+ /*010f:*/ 4, 4, 3, 0, 1, /* width and bbox (w,h,x,y) */
+ /*0114:*/ 0xe0, /* ###..... */
+ /*0115:*/ 0x00, /* ........ */
+ /*0116:*/ 0xe0, /* ###..... */
+/* --- new character greater (62) starting at offset 0x0117 --- */
+ /*0117:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*011c:*/ 0x80, /* #....... */
+ /*011d:*/ 0x40, /* .#...... */
+ /*011e:*/ 0x20, /* ..#..... */
+ /*011f:*/ 0x40, /* .#...... */
+ /*0120:*/ 0x80, /* #....... */
+/* --- new character question (63) starting at offset 0x0121 --- */
+ /*0121:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0126:*/ 0xc0, /* ##...... */
+ /*0127:*/ 0x20, /* ..#..... */
+ /*0128:*/ 0x40, /* .#...... */
+ /*0129:*/ 0x00, /* ........ */
+ /*012a:*/ 0x40, /* .#...... */
+/* --- new character at (64) starting at offset 0x012b --- */
+ /*012b:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0130:*/ 0x60, /* .##..... */
+ /*0131:*/ 0xa0, /* #.#..... */
+ /*0132:*/ 0xa0, /* #.#..... */
+ /*0133:*/ 0x80, /* #....... */
+ /*0134:*/ 0x60, /* .##..... */
+/* --- new character A (65) starting at offset 0x0135 --- */
+ /*0135:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*013a:*/ 0x40, /* .#...... */
+ /*013b:*/ 0xa0, /* #.#..... */
+ /*013c:*/ 0xe0, /* ###..... */
+ /*013d:*/ 0xa0, /* #.#..... */
+ /*013e:*/ 0xa0, /* #.#..... */
+/* --- new character B (66) starting at offset 0x013f --- */
+ /*013f:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0144:*/ 0xc0, /* ##...... */
+ /*0145:*/ 0xa0, /* #.#..... */
+ /*0146:*/ 0xc0, /* ##...... */
+ /*0147:*/ 0xa0, /* #.#..... */
+ /*0148:*/ 0xc0, /* ##...... */
+/* --- new character C (67) starting at offset 0x0149 --- */
+ /*0149:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*014e:*/ 0x40, /* .#...... */
+ /*014f:*/ 0xa0, /* #.#..... */
+ /*0150:*/ 0x80, /* #....... */
+ /*0151:*/ 0xa0, /* #.#..... */
+ /*0152:*/ 0x40, /* .#...... */
+/* --- new character D (68) starting at offset 0x0153 --- */
+ /*0153:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0158:*/ 0xc0, /* ##...... */
+ /*0159:*/ 0xa0, /* #.#..... */
+ /*015a:*/ 0xa0, /* #.#..... */
+ /*015b:*/ 0xa0, /* #.#..... */
+ /*015c:*/ 0xc0, /* ##...... */
+/* --- new character E (69) starting at offset 0x015d --- */
+ /*015d:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0162:*/ 0xe0, /* ###..... */
+ /*0163:*/ 0x80, /* #....... */
+ /*0164:*/ 0xc0, /* ##...... */
+ /*0165:*/ 0x80, /* #....... */
+ /*0166:*/ 0xe0, /* ###..... */
+/* --- new character F (70) starting at offset 0x0167 --- */
+ /*0167:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*016c:*/ 0xe0, /* ###..... */
+ /*016d:*/ 0x80, /* #....... */
+ /*016e:*/ 0xc0, /* ##...... */
+ /*016f:*/ 0x80, /* #....... */
+ /*0170:*/ 0x80, /* #....... */
+/* --- new character G (71) starting at offset 0x0171 --- */
+ /*0171:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0176:*/ 0x60, /* .##..... */
+ /*0177:*/ 0x80, /* #....... */
+ /*0178:*/ 0xa0, /* #.#..... */
+ /*0179:*/ 0xa0, /* #.#..... */
+ /*017a:*/ 0x60, /* .##..... */
+/* --- new character H (72) starting at offset 0x017b --- */
+ /*017b:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0180:*/ 0xa0, /* #.#..... */
+ /*0181:*/ 0xa0, /* #.#..... */
+ /*0182:*/ 0xe0, /* ###..... */
+ /*0183:*/ 0xa0, /* #.#..... */
+ /*0184:*/ 0xa0, /* #.#..... */
+/* --- new character I (73) starting at offset 0x0185 --- */
+ /*0185:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*018a:*/ 0xe0, /* ###..... */
+ /*018b:*/ 0x40, /* .#...... */
+ /*018c:*/ 0x40, /* .#...... */
+ /*018d:*/ 0x40, /* .#...... */
+ /*018e:*/ 0xe0, /* ###..... */
+/* --- new character J (74) starting at offset 0x018f --- */
+ /*018f:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0194:*/ 0x20, /* ..#..... */
+ /*0195:*/ 0x20, /* ..#..... */
+ /*0196:*/ 0x20, /* ..#..... */
+ /*0197:*/ 0xa0, /* #.#..... */
+ /*0198:*/ 0x40, /* .#...... */
+/* --- new character K (75) starting at offset 0x0199 --- */
+ /*0199:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*019e:*/ 0xa0, /* #.#..... */
+ /*019f:*/ 0xa0, /* #.#..... */
+ /*01a0:*/ 0xc0, /* ##...... */
+ /*01a1:*/ 0xa0, /* #.#..... */
+ /*01a2:*/ 0xa0, /* #.#..... */
+/* --- new character L (76) starting at offset 0x01a3 --- */
+ /*01a3:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01a8:*/ 0x80, /* #....... */
+ /*01a9:*/ 0x80, /* #....... */
+ /*01aa:*/ 0x80, /* #....... */
+ /*01ab:*/ 0x80, /* #....... */
+ /*01ac:*/ 0xe0, /* ###..... */
+/* --- new character M (77) starting at offset 0x01ad --- */
+ /*01ad:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01b2:*/ 0xa0, /* #.#..... */
+ /*01b3:*/ 0xe0, /* ###..... */
+ /*01b4:*/ 0xe0, /* ###..... */
+ /*01b5:*/ 0xa0, /* #.#..... */
+ /*01b6:*/ 0xa0, /* #.#..... */
+/* --- new character N (78) starting at offset 0x01b7 --- */
+ /*01b7:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01bc:*/ 0x20, /* ..#..... */
+ /*01bd:*/ 0xa0, /* #.#..... */
+ /*01be:*/ 0xe0, /* ###..... */
+ /*01bf:*/ 0xa0, /* #.#..... */
+ /*01c0:*/ 0x80, /* #....... */
+/* --- new character O (79) starting at offset 0x01c1 --- */
+ /*01c1:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01c6:*/ 0x40, /* .#...... */
+ /*01c7:*/ 0xa0, /* #.#..... */
+ /*01c8:*/ 0xa0, /* #.#..... */
+ /*01c9:*/ 0xa0, /* #.#..... */
+ /*01ca:*/ 0x40, /* .#...... */
+/* --- new character P (80) starting at offset 0x01cb --- */
+ /*01cb:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01d0:*/ 0xc0, /* ##...... */
+ /*01d1:*/ 0xa0, /* #.#..... */
+ /*01d2:*/ 0xc0, /* ##...... */
+ /*01d3:*/ 0x80, /* #....... */
+ /*01d4:*/ 0x80, /* #....... */
+/* --- new character Q (81) starting at offset 0x01d5 --- */
+ /*01d5:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*01da:*/ 0x40, /* .#...... */
+ /*01db:*/ 0xa0, /* #.#..... */
+ /*01dc:*/ 0xa0, /* #.#..... */
+ /*01dd:*/ 0xa0, /* #.#..... */
+ /*01de:*/ 0x40, /* .#...... */
+ /*01df:*/ 0x20, /* ..#..... */
+/* --- new character R (82) starting at offset 0x01e0 --- */
+ /*01e0:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01e5:*/ 0xc0, /* ##...... */
+ /*01e6:*/ 0xa0, /* #.#..... */
+ /*01e7:*/ 0xc0, /* ##...... */
+ /*01e8:*/ 0xa0, /* #.#..... */
+ /*01e9:*/ 0xa0, /* #.#..... */
+/* --- new character S (83) starting at offset 0x01ea --- */
+ /*01ea:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01ef:*/ 0x60, /* .##..... */
+ /*01f0:*/ 0x80, /* #....... */
+ /*01f1:*/ 0x40, /* .#...... */
+ /*01f2:*/ 0x20, /* ..#..... */
+ /*01f3:*/ 0xc0, /* ##...... */
+/* --- new character T (84) starting at offset 0x01f4 --- */
+ /*01f4:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01f9:*/ 0xe0, /* ###..... */
+ /*01fa:*/ 0x40, /* .#...... */
+ /*01fb:*/ 0x40, /* .#...... */
+ /*01fc:*/ 0x40, /* .#...... */
+ /*01fd:*/ 0x40, /* .#...... */
+/* --- new character U (85) starting at offset 0x01fe --- */
+ /*01fe:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0203:*/ 0xa0, /* #.#..... */
+ /*0204:*/ 0xa0, /* #.#..... */
+ /*0205:*/ 0xa0, /* #.#..... */
+ /*0206:*/ 0xa0, /* #.#..... */
+ /*0207:*/ 0xe0, /* ###..... */
+/* --- new character V (86) starting at offset 0x0208 --- */
+ /*0208:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*020d:*/ 0xa0, /* #.#..... */
+ /*020e:*/ 0xa0, /* #.#..... */
+ /*020f:*/ 0xa0, /* #.#..... */
+ /*0210:*/ 0xe0, /* ###..... */
+ /*0211:*/ 0x40, /* .#...... */
+/* --- new character W (87) starting at offset 0x0212 --- */
+ /*0212:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0217:*/ 0xa0, /* #.#..... */
+ /*0218:*/ 0xa0, /* #.#..... */
+ /*0219:*/ 0xe0, /* ###..... */
+ /*021a:*/ 0xe0, /* ###..... */
+ /*021b:*/ 0xa0, /* #.#..... */
+/* --- new character X (88) starting at offset 0x021c --- */
+ /*021c:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0221:*/ 0xa0, /* #.#..... */
+ /*0222:*/ 0xa0, /* #.#..... */
+ /*0223:*/ 0x40, /* .#...... */
+ /*0224:*/ 0xa0, /* #.#..... */
+ /*0225:*/ 0xa0, /* #.#..... */
+/* --- new character Y (89) starting at offset 0x0226 --- */
+ /*0226:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*022b:*/ 0xa0, /* #.#..... */
+ /*022c:*/ 0xa0, /* #.#..... */
+ /*022d:*/ 0x40, /* .#...... */
+ /*022e:*/ 0x40, /* .#...... */
+ /*022f:*/ 0x40, /* .#...... */
+/* --- new character Z (90) starting at offset 0x0230 --- */
+ /*0230:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0235:*/ 0xe0, /* ###..... */
+ /*0236:*/ 0x20, /* ..#..... */
+ /*0237:*/ 0x40, /* .#...... */
+ /*0238:*/ 0x80, /* #....... */
+ /*0239:*/ 0xe0, /* ###..... */
+/* --- new character bracketleft (91) starting at offset 0x023a --- */
+ /*023a:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*023f:*/ 0x60, /* .##..... */
+ /*0240:*/ 0x40, /* .#...... */
+ /*0241:*/ 0x40, /* .#...... */
+ /*0242:*/ 0x40, /* .#...... */
+ /*0243:*/ 0x60, /* .##..... */
+/* --- new character backslash (92) starting at offset 0x0244 --- */
+ /*0244:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0249:*/ 0x80, /* #....... */
+ /*024a:*/ 0x80, /* #....... */
+ /*024b:*/ 0x40, /* .#...... */
+ /*024c:*/ 0x20, /* ..#..... */
+ /*024d:*/ 0x20, /* ..#..... */
+/* --- new character bracketright (93) starting at offset 0x024e --- */
+ /*024e:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0253:*/ 0xc0, /* ##...... */
+ /*0254:*/ 0x40, /* .#...... */
+ /*0255:*/ 0x40, /* .#...... */
+ /*0256:*/ 0x40, /* .#...... */
+ /*0257:*/ 0xc0, /* ##...... */
+/* --- new character asciicircum (94) starting at offset 0x0258 --- */
+ /*0258:*/ 4, 4, 2, 0, 3, /* width and bbox (w,h,x,y) */
+ /*025d:*/ 0x40, /* .#...... */
+ /*025e:*/ 0xa0, /* #.#..... */
+/* --- new character underscore (95) starting at offset 0x025f --- */
+ /*025f:*/ 4, 4, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0264:*/ 0xe0, /* ###..... */
+/* --- new character grave (96) starting at offset 0x0265 --- */
+ /*0265:*/ 4, 4, 2, 0, 3, /* width and bbox (w,h,x,y) */
+ /*026a:*/ 0x40, /* .#...... */
+ /*026b:*/ 0x20, /* ..#..... */
+/* --- new character a (97) starting at offset 0x026c --- */
+ /*026c:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0271:*/ 0x60, /* .##..... */
+ /*0272:*/ 0xa0, /* #.#..... */
+ /*0273:*/ 0xa0, /* #.#..... */
+ /*0274:*/ 0x60, /* .##..... */
+/* --- new character b (98) starting at offset 0x0275 --- */
+ /*0275:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*027a:*/ 0x80, /* #....... */
+ /*027b:*/ 0xc0, /* ##...... */
+ /*027c:*/ 0xa0, /* #.#..... */
+ /*027d:*/ 0xa0, /* #.#..... */
+ /*027e:*/ 0xc0, /* ##...... */
+/* --- new character c (99) starting at offset 0x027f --- */
+ /*027f:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0284:*/ 0x60, /* .##..... */
+ /*0285:*/ 0x80, /* #....... */
+ /*0286:*/ 0x80, /* #....... */
+ /*0287:*/ 0x60, /* .##..... */
+/* --- new character d (100) starting at offset 0x0288 --- */
+ /*0288:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*028d:*/ 0x20, /* ..#..... */
+ /*028e:*/ 0x60, /* .##..... */
+ /*028f:*/ 0xa0, /* #.#..... */
+ /*0290:*/ 0xa0, /* #.#..... */
+ /*0291:*/ 0x60, /* .##..... */
+/* --- new character e (101) starting at offset 0x0292 --- */
+ /*0292:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0297:*/ 0x40, /* .#...... */
+ /*0298:*/ 0xa0, /* #.#..... */
+ /*0299:*/ 0xc0, /* ##...... */
+ /*029a:*/ 0x60, /* .##..... */
+/* --- new character f (102) starting at offset 0x029b --- */
+ /*029b:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02a0:*/ 0x20, /* ..#..... */
+ /*02a1:*/ 0x40, /* .#...... */
+ /*02a2:*/ 0xe0, /* ###..... */
+ /*02a3:*/ 0x40, /* .#...... */
+ /*02a4:*/ 0x40, /* .#...... */
+/* --- new character g (103) starting at offset 0x02a5 --- */
+ /*02a5:*/ 4, 4, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*02aa:*/ 0x60, /* .##..... */
+ /*02ab:*/ 0xa0, /* #.#..... */
+ /*02ac:*/ 0x60, /* .##..... */
+ /*02ad:*/ 0x20, /* ..#..... */
+ /*02ae:*/ 0xc0, /* ##...... */
+/* --- new character h (104) starting at offset 0x02af --- */
+ /*02af:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02b4:*/ 0x80, /* #....... */
+ /*02b5:*/ 0xc0, /* ##...... */
+ /*02b6:*/ 0xa0, /* #.#..... */
+ /*02b7:*/ 0xa0, /* #.#..... */
+ /*02b8:*/ 0xa0, /* #.#..... */
+/* --- new character i (105) starting at offset 0x02b9 --- */
+ /*02b9:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02be:*/ 0x40, /* .#...... */
+ /*02bf:*/ 0x00, /* ........ */
+ /*02c0:*/ 0xc0, /* ##...... */
+ /*02c1:*/ 0x40, /* .#...... */
+ /*02c2:*/ 0xe0, /* ###..... */
+/* --- new character j (106) starting at offset 0x02c3 --- */
+ /*02c3:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*02c8:*/ 0x20, /* ..#..... */
+ /*02c9:*/ 0x00, /* ........ */
+ /*02ca:*/ 0x20, /* ..#..... */
+ /*02cb:*/ 0x20, /* ..#..... */
+ /*02cc:*/ 0x20, /* ..#..... */
+ /*02cd:*/ 0xc0, /* ##...... */
+/* --- new character k (107) starting at offset 0x02ce --- */
+ /*02ce:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02d3:*/ 0x80, /* #....... */
+ /*02d4:*/ 0xa0, /* #.#..... */
+ /*02d5:*/ 0xc0, /* ##...... */
+ /*02d6:*/ 0xa0, /* #.#..... */
+ /*02d7:*/ 0xa0, /* #.#..... */
+/* --- new character l (108) starting at offset 0x02d8 --- */
+ /*02d8:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02dd:*/ 0xc0, /* ##...... */
+ /*02de:*/ 0x40, /* .#...... */
+ /*02df:*/ 0x40, /* .#...... */
+ /*02e0:*/ 0x40, /* .#...... */
+ /*02e1:*/ 0xe0, /* ###..... */
+/* --- new character m (109) starting at offset 0x02e2 --- */
+ /*02e2:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02e7:*/ 0xa0, /* #.#..... */
+ /*02e8:*/ 0xe0, /* ###..... */
+ /*02e9:*/ 0xa0, /* #.#..... */
+ /*02ea:*/ 0xa0, /* #.#..... */
+/* --- new character n (110) starting at offset 0x02eb --- */
+ /*02eb:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02f0:*/ 0xc0, /* ##...... */
+ /*02f1:*/ 0xa0, /* #.#..... */
+ /*02f2:*/ 0xa0, /* #.#..... */
+ /*02f3:*/ 0xa0, /* #.#..... */
+/* --- new character o (111) starting at offset 0x02f4 --- */
+ /*02f4:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02f9:*/ 0x40, /* .#...... */
+ /*02fa:*/ 0xa0, /* #.#..... */
+ /*02fb:*/ 0xa0, /* #.#..... */
+ /*02fc:*/ 0x40, /* .#...... */
+/* --- new character p (112) starting at offset 0x02fd --- */
+ /*02fd:*/ 4, 4, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0302:*/ 0xc0, /* ##...... */
+ /*0303:*/ 0xa0, /* #.#..... */
+ /*0304:*/ 0xc0, /* ##...... */
+ /*0305:*/ 0x80, /* #....... */
+ /*0306:*/ 0x80, /* #....... */
+/* --- new character q (113) starting at offset 0x0307 --- */
+ /*0307:*/ 4, 4, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*030c:*/ 0x60, /* .##..... */
+ /*030d:*/ 0xa0, /* #.#..... */
+ /*030e:*/ 0xa0, /* #.#..... */
+ /*030f:*/ 0x60, /* .##..... */
+ /*0310:*/ 0x20, /* ..#..... */
+/* --- new character r (114) starting at offset 0x0311 --- */
+ /*0311:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0316:*/ 0xa0, /* #.#..... */
+ /*0317:*/ 0xc0, /* ##...... */
+ /*0318:*/ 0x80, /* #....... */
+ /*0319:*/ 0x80, /* #....... */
+/* --- new character s (115) starting at offset 0x031a --- */
+ /*031a:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*031f:*/ 0x60, /* .##..... */
+ /*0320:*/ 0xc0, /* ##...... */
+ /*0321:*/ 0x20, /* ..#..... */
+ /*0322:*/ 0xc0, /* ##...... */
+/* --- new character t (116) starting at offset 0x0323 --- */
+ /*0323:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0328:*/ 0x40, /* .#...... */
+ /*0329:*/ 0xe0, /* ###..... */
+ /*032a:*/ 0x40, /* .#...... */
+ /*032b:*/ 0x40, /* .#...... */
+ /*032c:*/ 0x20, /* ..#..... */
+/* --- new character u (117) starting at offset 0x032d --- */
+ /*032d:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0332:*/ 0xa0, /* #.#..... */
+ /*0333:*/ 0xa0, /* #.#..... */
+ /*0334:*/ 0xa0, /* #.#..... */
+ /*0335:*/ 0x60, /* .##..... */
+/* --- new character v (118) starting at offset 0x0336 --- */
+ /*0336:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*033b:*/ 0xa0, /* #.#..... */
+ /*033c:*/ 0xa0, /* #.#..... */
+ /*033d:*/ 0xa0, /* #.#..... */
+ /*033e:*/ 0x40, /* .#...... */
+/* --- new character w (119) starting at offset 0x033f --- */
+ /*033f:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0344:*/ 0xa0, /* #.#..... */
+ /*0345:*/ 0xa0, /* #.#..... */
+ /*0346:*/ 0xe0, /* ###..... */
+ /*0347:*/ 0xa0, /* #.#..... */
+/* --- new character x (120) starting at offset 0x0348 --- */
+ /*0348:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*034d:*/ 0xa0, /* #.#..... */
+ /*034e:*/ 0x40, /* .#...... */
+ /*034f:*/ 0x40, /* .#...... */
+ /*0350:*/ 0xa0, /* #.#..... */
+/* --- new character y (121) starting at offset 0x0351 --- */
+ /*0351:*/ 4, 4, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0356:*/ 0xa0, /* #.#..... */
+ /*0357:*/ 0xa0, /* #.#..... */
+ /*0358:*/ 0x60, /* .##..... */
+ /*0359:*/ 0x20, /* ..#..... */
+ /*035a:*/ 0xc0, /* ##...... */
+/* --- new character z (122) starting at offset 0x035b --- */
+ /*035b:*/ 4, 4, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0360:*/ 0xe0, /* ###..... */
+ /*0361:*/ 0x20, /* ..#..... */
+ /*0362:*/ 0x40, /* .#...... */
+ /*0363:*/ 0xe0, /* ###..... */
+/* --- new character braceleft (123) starting at offset 0x0364 --- */
+ /*0364:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0369:*/ 0x20, /* ..#..... */
+ /*036a:*/ 0x40, /* .#...... */
+ /*036b:*/ 0xc0, /* ##...... */
+ /*036c:*/ 0x40, /* .#...... */
+ /*036d:*/ 0x40, /* .#...... */
+ /*036e:*/ 0x20, /* ..#..... */
+/* --- new character bar (124) starting at offset 0x036f --- */
+ /*036f:*/ 4, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0374:*/ 0x40, /* .#...... */
+ /*0375:*/ 0x40, /* .#...... */
+ /*0376:*/ 0x40, /* .#...... */
+ /*0377:*/ 0x40, /* .#...... */
+ /*0378:*/ 0x40, /* .#...... */
+/* --- new character braceright (125) starting at offset 0x0379 --- */
+ /*0379:*/ 4, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*037e:*/ 0x80, /* #....... */
+ /*037f:*/ 0x40, /* .#...... */
+ /*0380:*/ 0x60, /* .##..... */
+ /*0381:*/ 0x40, /* .#...... */
+ /*0382:*/ 0x40, /* .#...... */
+ /*0383:*/ 0x80, /* #....... */
+/* --- new character asciitilde (126) starting at offset 0x0384 --- */
+ /*0384:*/ 4, 4, 2, 0, 3, /* width and bbox (w,h,x,y) */
+ /*0389:*/ 0x50, /* .#.#.... */
+ /*038a:*/ 0xa0, /* #.#..... */
+};
+static const uint16_t font_4x6_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0010 /* quotedbl */,
+ 0x0017 /* numbersign */,
+ 0x0021 /* dollar */,
+ 0x002c /* percent */,
+ 0x0036 /* ampersand */,
+ 0x0040 /* quotesingle */,
+ 0x0047 /* parenleft */,
+ 0x0052 /* parenright */,
+ 0x005d /* asterisk */,
+ 0x0067 /* plus */,
+ 0x0071 /* comma */,
+ 0x0078 /* hyphen */,
+ 0x007e /* period */,
+ 0x0084 /* slash */,
+ 0x008e /* zero */,
+ 0x0098 /* one */,
+ 0x00a2 /* two */,
+ 0x00ac /* three */,
+ 0x00b6 /* four */,
+ 0x00c0 /* five */,
+ 0x00ca /* six */,
+ 0x00d4 /* seven */,
+ 0x00de /* eight */,
+ 0x00e8 /* nine */,
+ 0x00f2 /* colon */,
+ 0x00fb /* semicolon */,
+ 0x0105 /* less */,
+ 0x010f /* equal */,
+ 0x0117 /* greater */,
+ 0x0121 /* question */,
+ 0x012b /* at */,
+ 0x0135 /* A */,
+ 0x013f /* B */,
+ 0x0149 /* C */,
+ 0x0153 /* D */,
+ 0x015d /* E */,
+ 0x0167 /* F */,
+ 0x0171 /* G */,
+ 0x017b /* H */,
+ 0x0185 /* I */,
+ 0x018f /* J */,
+ 0x0199 /* K */,
+ 0x01a3 /* L */,
+ 0x01ad /* M */,
+ 0x01b7 /* N */,
+ 0x01c1 /* O */,
+ 0x01cb /* P */,
+ 0x01d5 /* Q */,
+ 0x01e0 /* R */,
+ 0x01ea /* S */,
+ 0x01f4 /* T */,
+ 0x01fe /* U */,
+ 0x0208 /* V */,
+ 0x0212 /* W */,
+ 0x021c /* X */,
+ 0x0226 /* Y */,
+ 0x0230 /* Z */,
+ 0x023a /* bracketleft */,
+ 0x0244 /* backslash */,
+ 0x024e /* bracketright */,
+ 0x0258 /* asciicircum */,
+ 0x025f /* underscore */,
+ 0x0265 /* grave */,
+ 0x026c /* a */,
+ 0x0275 /* b */,
+ 0x027f /* c */,
+ 0x0288 /* d */,
+ 0x0292 /* e */,
+ 0x029b /* f */,
+ 0x02a5 /* g */,
+ 0x02af /* h */,
+ 0x02b9 /* i */,
+ 0x02c3 /* j */,
+ 0x02ce /* k */,
+ 0x02d8 /* l */,
+ 0x02e2 /* m */,
+ 0x02eb /* n */,
+ 0x02f4 /* o */,
+ 0x02fd /* p */,
+ 0x0307 /* q */,
+ 0x0311 /* r */,
+ 0x031a /* s */,
+ 0x0323 /* t */,
+ 0x032d /* u */,
+ 0x0336 /* v */,
+ 0x033f /* w */,
+ 0x0348 /* x */,
+ 0x0351 /* y */,
+ 0x035b /* z */,
+ 0x0364 /* braceleft */,
+ 0x036f /* bar */,
+ 0x0379 /* braceright */,
+ 0x0384 /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_4x6 = {
+ .height = 6,
+ .ascent = 5,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_4x6_data,
+ .charoffs = font_4x6_offsets,
+};
diff --git a/src/target/firmware/fb/5x8.c b/src/target/firmware/fb/5x8.c
new file mode 100644
index 00000000..e2003298
--- /dev/null
+++ b/src/target/firmware/fb/5x8.c
@@ -0,0 +1,802 @@
+#include <fb/font.h>
+static const uint8_t font_5x8_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 5, 5, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0x20, /* ..#..... */
+ /*000c:*/ 0x20, /* ..#..... */
+ /*000d:*/ 0x20, /* ..#..... */
+ /*000e:*/ 0x20, /* ..#..... */
+ /*000f:*/ 0x00, /* ........ */
+ /*0010:*/ 0x20, /* ..#..... */
+/* --- new character quotedbl (34) starting at offset 0x0011 --- */
+ /*0011:*/ 5, 5, 3, 0, 3, /* width and bbox (w,h,x,y) */
+ /*0016:*/ 0x50, /* .#.#.... */
+ /*0017:*/ 0x50, /* .#.#.... */
+ /*0018:*/ 0x50, /* .#.#.... */
+/* --- new character numbersign (35) starting at offset 0x0019 --- */
+ /*0019:*/ 5, 5, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*001e:*/ 0x50, /* .#.#.... */
+ /*001f:*/ 0x50, /* .#.#.... */
+ /*0020:*/ 0xf8, /* #####... */
+ /*0021:*/ 0x50, /* .#.#.... */
+ /*0022:*/ 0xf8, /* #####... */
+ /*0023:*/ 0x50, /* .#.#.... */
+ /*0024:*/ 0x50, /* .#.#.... */
+/* --- new character dollar (36) starting at offset 0x0025 --- */
+ /*0025:*/ 5, 5, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*002a:*/ 0x20, /* ..#..... */
+ /*002b:*/ 0x70, /* .###.... */
+ /*002c:*/ 0xa0, /* #.#..... */
+ /*002d:*/ 0x70, /* .###.... */
+ /*002e:*/ 0x28, /* ..#.#... */
+ /*002f:*/ 0x70, /* .###.... */
+ /*0030:*/ 0x20, /* ..#..... */
+/* --- new character percent (37) starting at offset 0x0031 --- */
+ /*0031:*/ 5, 5, 5, 0, 1, /* width and bbox (w,h,x,y) */
+ /*0036:*/ 0x40, /* .#...... */
+ /*0037:*/ 0x50, /* .#.#.... */
+ /*0038:*/ 0x20, /* ..#..... */
+ /*0039:*/ 0x50, /* .#.#.... */
+ /*003a:*/ 0x10, /* ...#.... */
+/* --- new character ampersand (38) starting at offset 0x003b --- */
+ /*003b:*/ 5, 5, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0040:*/ 0x40, /* .#...... */
+ /*0041:*/ 0xa0, /* #.#..... */
+ /*0042:*/ 0xa0, /* #.#..... */
+ /*0043:*/ 0x40, /* .#...... */
+ /*0044:*/ 0xa0, /* #.#..... */
+ /*0045:*/ 0xa0, /* #.#..... */
+ /*0046:*/ 0x50, /* .#.#.... */
+/* --- new character quotesingle (39) starting at offset 0x0047 --- */
+ /*0047:*/ 5, 5, 3, 0, 3, /* width and bbox (w,h,x,y) */
+ /*004c:*/ 0x20, /* ..#..... */
+ /*004d:*/ 0x20, /* ..#..... */
+ /*004e:*/ 0x20, /* ..#..... */
+/* --- new character parenleft (40) starting at offset 0x004f --- */
+ /*004f:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0054:*/ 0x20, /* ..#..... */
+ /*0055:*/ 0x40, /* .#...... */
+ /*0056:*/ 0x40, /* .#...... */
+ /*0057:*/ 0x40, /* .#...... */
+ /*0058:*/ 0x40, /* .#...... */
+ /*0059:*/ 0x20, /* ..#..... */
+/* --- new character parenright (41) starting at offset 0x005a --- */
+ /*005a:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*005f:*/ 0x40, /* .#...... */
+ /*0060:*/ 0x20, /* ..#..... */
+ /*0061:*/ 0x20, /* ..#..... */
+ /*0062:*/ 0x20, /* ..#..... */
+ /*0063:*/ 0x20, /* ..#..... */
+ /*0064:*/ 0x40, /* .#...... */
+/* --- new character asterisk (42) starting at offset 0x0065 --- */
+ /*0065:*/ 5, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*006a:*/ 0x90, /* #..#.... */
+ /*006b:*/ 0x60, /* .##..... */
+ /*006c:*/ 0xf0, /* ####.... */
+ /*006d:*/ 0x60, /* .##..... */
+ /*006e:*/ 0x90, /* #..#.... */
+/* --- new character plus (43) starting at offset 0x006f --- */
+ /*006f:*/ 5, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0074:*/ 0x20, /* ..#..... */
+ /*0075:*/ 0x20, /* ..#..... */
+ /*0076:*/ 0xf8, /* #####... */
+ /*0077:*/ 0x20, /* ..#..... */
+ /*0078:*/ 0x20, /* ..#..... */
+/* --- new character comma (44) starting at offset 0x0079 --- */
+ /*0079:*/ 5, 5, 3, 0, -1, /* width and bbox (w,h,x,y) */
+ /*007e:*/ 0x30, /* ..##.... */
+ /*007f:*/ 0x20, /* ..#..... */
+ /*0080:*/ 0x40, /* .#...... */
+/* --- new character hyphen (45) starting at offset 0x0081 --- */
+ /*0081:*/ 5, 5, 1, 0, 2, /* width and bbox (w,h,x,y) */
+ /*0086:*/ 0x70, /* .###.... */
+/* --- new character period (46) starting at offset 0x0087 --- */
+ /*0087:*/ 5, 5, 3, 0, -1, /* width and bbox (w,h,x,y) */
+ /*008c:*/ 0x20, /* ..#..... */
+ /*008d:*/ 0x70, /* .###.... */
+ /*008e:*/ 0x20, /* ..#..... */
+/* --- new character slash (47) starting at offset 0x008f --- */
+ /*008f:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0094:*/ 0x10, /* ...#.... */
+ /*0095:*/ 0x10, /* ...#.... */
+ /*0096:*/ 0x20, /* ..#..... */
+ /*0097:*/ 0x40, /* .#...... */
+ /*0098:*/ 0x80, /* #....... */
+ /*0099:*/ 0x80, /* #....... */
+/* --- new character zero (48) starting at offset 0x009a --- */
+ /*009a:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*009f:*/ 0x20, /* ..#..... */
+ /*00a0:*/ 0x50, /* .#.#.... */
+ /*00a1:*/ 0x50, /* .#.#.... */
+ /*00a2:*/ 0x50, /* .#.#.... */
+ /*00a3:*/ 0x50, /* .#.#.... */
+ /*00a4:*/ 0x20, /* ..#..... */
+/* --- new character one (49) starting at offset 0x00a5 --- */
+ /*00a5:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00aa:*/ 0x20, /* ..#..... */
+ /*00ab:*/ 0x60, /* .##..... */
+ /*00ac:*/ 0x20, /* ..#..... */
+ /*00ad:*/ 0x20, /* ..#..... */
+ /*00ae:*/ 0x20, /* ..#..... */
+ /*00af:*/ 0x70, /* .###.... */
+/* --- new character two (50) starting at offset 0x00b0 --- */
+ /*00b0:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00b5:*/ 0x60, /* .##..... */
+ /*00b6:*/ 0x90, /* #..#.... */
+ /*00b7:*/ 0x10, /* ...#.... */
+ /*00b8:*/ 0x60, /* .##..... */
+ /*00b9:*/ 0x80, /* #....... */
+ /*00ba:*/ 0xf0, /* ####.... */
+/* --- new character three (51) starting at offset 0x00bb --- */
+ /*00bb:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00c0:*/ 0xf0, /* ####.... */
+ /*00c1:*/ 0x20, /* ..#..... */
+ /*00c2:*/ 0x60, /* .##..... */
+ /*00c3:*/ 0x10, /* ...#.... */
+ /*00c4:*/ 0x90, /* #..#.... */
+ /*00c5:*/ 0x60, /* .##..... */
+/* --- new character four (52) starting at offset 0x00c6 --- */
+ /*00c6:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00cb:*/ 0x20, /* ..#..... */
+ /*00cc:*/ 0x60, /* .##..... */
+ /*00cd:*/ 0xa0, /* #.#..... */
+ /*00ce:*/ 0xf0, /* ####.... */
+ /*00cf:*/ 0x20, /* ..#..... */
+ /*00d0:*/ 0x20, /* ..#..... */
+/* --- new character five (53) starting at offset 0x00d1 --- */
+ /*00d1:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00d6:*/ 0xf0, /* ####.... */
+ /*00d7:*/ 0x80, /* #....... */
+ /*00d8:*/ 0xe0, /* ###..... */
+ /*00d9:*/ 0x10, /* ...#.... */
+ /*00da:*/ 0x90, /* #..#.... */
+ /*00db:*/ 0x60, /* .##..... */
+/* --- new character six (54) starting at offset 0x00dc --- */
+ /*00dc:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00e1:*/ 0x60, /* .##..... */
+ /*00e2:*/ 0x80, /* #....... */
+ /*00e3:*/ 0xe0, /* ###..... */
+ /*00e4:*/ 0x90, /* #..#.... */
+ /*00e5:*/ 0x90, /* #..#.... */
+ /*00e6:*/ 0x60, /* .##..... */
+/* --- new character seven (55) starting at offset 0x00e7 --- */
+ /*00e7:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ec:*/ 0xf0, /* ####.... */
+ /*00ed:*/ 0x10, /* ...#.... */
+ /*00ee:*/ 0x20, /* ..#..... */
+ /*00ef:*/ 0x20, /* ..#..... */
+ /*00f0:*/ 0x40, /* .#...... */
+ /*00f1:*/ 0x40, /* .#...... */
+/* --- new character eight (56) starting at offset 0x00f2 --- */
+ /*00f2:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00f7:*/ 0x60, /* .##..... */
+ /*00f8:*/ 0x90, /* #..#.... */
+ /*00f9:*/ 0x60, /* .##..... */
+ /*00fa:*/ 0x90, /* #..#.... */
+ /*00fb:*/ 0x90, /* #..#.... */
+ /*00fc:*/ 0x60, /* .##..... */
+/* --- new character nine (57) starting at offset 0x00fd --- */
+ /*00fd:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0102:*/ 0x60, /* .##..... */
+ /*0103:*/ 0x90, /* #..#.... */
+ /*0104:*/ 0x90, /* #..#.... */
+ /*0105:*/ 0x70, /* .###.... */
+ /*0106:*/ 0x10, /* ...#.... */
+ /*0107:*/ 0x60, /* .##..... */
+/* --- new character colon (58) starting at offset 0x0108 --- */
+ /*0108:*/ 5, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*010d:*/ 0x60, /* .##..... */
+ /*010e:*/ 0x60, /* .##..... */
+ /*010f:*/ 0x00, /* ........ */
+ /*0110:*/ 0x60, /* .##..... */
+ /*0111:*/ 0x60, /* .##..... */
+/* --- new character semicolon (59) starting at offset 0x0112 --- */
+ /*0112:*/ 5, 5, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0117:*/ 0x30, /* ..##.... */
+ /*0118:*/ 0x30, /* ..##.... */
+ /*0119:*/ 0x00, /* ........ */
+ /*011a:*/ 0x30, /* ..##.... */
+ /*011b:*/ 0x20, /* ..#..... */
+ /*011c:*/ 0x40, /* .#...... */
+/* --- new character less (60) starting at offset 0x011d --- */
+ /*011d:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0122:*/ 0x10, /* ...#.... */
+ /*0123:*/ 0x20, /* ..#..... */
+ /*0124:*/ 0x40, /* .#...... */
+ /*0125:*/ 0x40, /* .#...... */
+ /*0126:*/ 0x20, /* ..#..... */
+ /*0127:*/ 0x10, /* ...#.... */
+/* --- new character equal (61) starting at offset 0x0128 --- */
+ /*0128:*/ 5, 5, 3, 0, 1, /* width and bbox (w,h,x,y) */
+ /*012d:*/ 0xf0, /* ####.... */
+ /*012e:*/ 0x00, /* ........ */
+ /*012f:*/ 0xf0, /* ####.... */
+/* --- new character greater (62) starting at offset 0x0130 --- */
+ /*0130:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0135:*/ 0x40, /* .#...... */
+ /*0136:*/ 0x20, /* ..#..... */
+ /*0137:*/ 0x10, /* ...#.... */
+ /*0138:*/ 0x10, /* ...#.... */
+ /*0139:*/ 0x20, /* ..#..... */
+ /*013a:*/ 0x40, /* .#...... */
+/* --- new character question (63) starting at offset 0x013b --- */
+ /*013b:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0140:*/ 0x20, /* ..#..... */
+ /*0141:*/ 0x50, /* .#.#.... */
+ /*0142:*/ 0x10, /* ...#.... */
+ /*0143:*/ 0x20, /* ..#..... */
+ /*0144:*/ 0x00, /* ........ */
+ /*0145:*/ 0x20, /* ..#..... */
+/* --- new character at (64) starting at offset 0x0146 --- */
+ /*0146:*/ 5, 5, 8, 0, -1, /* width and bbox (w,h,x,y) */
+ /*014b:*/ 0x30, /* ..##.... */
+ /*014c:*/ 0x48, /* .#..#... */
+ /*014d:*/ 0x98, /* #..##... */
+ /*014e:*/ 0xa8, /* #.#.#... */
+ /*014f:*/ 0xa8, /* #.#.#... */
+ /*0150:*/ 0x90, /* #..#.... */
+ /*0151:*/ 0x40, /* .#...... */
+ /*0152:*/ 0x30, /* ..##.... */
+/* --- new character A (65) starting at offset 0x0153 --- */
+ /*0153:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0158:*/ 0x60, /* .##..... */
+ /*0159:*/ 0x90, /* #..#.... */
+ /*015a:*/ 0x90, /* #..#.... */
+ /*015b:*/ 0xf0, /* ####.... */
+ /*015c:*/ 0x90, /* #..#.... */
+ /*015d:*/ 0x90, /* #..#.... */
+/* --- new character B (66) starting at offset 0x015e --- */
+ /*015e:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0163:*/ 0xe0, /* ###..... */
+ /*0164:*/ 0x90, /* #..#.... */
+ /*0165:*/ 0xe0, /* ###..... */
+ /*0166:*/ 0x90, /* #..#.... */
+ /*0167:*/ 0x90, /* #..#.... */
+ /*0168:*/ 0xe0, /* ###..... */
+/* --- new character C (67) starting at offset 0x0169 --- */
+ /*0169:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*016e:*/ 0x60, /* .##..... */
+ /*016f:*/ 0x90, /* #..#.... */
+ /*0170:*/ 0x80, /* #....... */
+ /*0171:*/ 0x80, /* #....... */
+ /*0172:*/ 0x90, /* #..#.... */
+ /*0173:*/ 0x60, /* .##..... */
+/* --- new character D (68) starting at offset 0x0174 --- */
+ /*0174:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0179:*/ 0xe0, /* ###..... */
+ /*017a:*/ 0x90, /* #..#.... */
+ /*017b:*/ 0x90, /* #..#.... */
+ /*017c:*/ 0x90, /* #..#.... */
+ /*017d:*/ 0x90, /* #..#.... */
+ /*017e:*/ 0xe0, /* ###..... */
+/* --- new character E (69) starting at offset 0x017f --- */
+ /*017f:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0184:*/ 0xf0, /* ####.... */
+ /*0185:*/ 0x80, /* #....... */
+ /*0186:*/ 0xe0, /* ###..... */
+ /*0187:*/ 0x80, /* #....... */
+ /*0188:*/ 0x80, /* #....... */
+ /*0189:*/ 0xf0, /* ####.... */
+/* --- new character F (70) starting at offset 0x018a --- */
+ /*018a:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*018f:*/ 0xf0, /* ####.... */
+ /*0190:*/ 0x80, /* #....... */
+ /*0191:*/ 0xe0, /* ###..... */
+ /*0192:*/ 0x80, /* #....... */
+ /*0193:*/ 0x80, /* #....... */
+ /*0194:*/ 0x80, /* #....... */
+/* --- new character G (71) starting at offset 0x0195 --- */
+ /*0195:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*019a:*/ 0x60, /* .##..... */
+ /*019b:*/ 0x90, /* #..#.... */
+ /*019c:*/ 0x80, /* #....... */
+ /*019d:*/ 0xb0, /* #.##.... */
+ /*019e:*/ 0x90, /* #..#.... */
+ /*019f:*/ 0x60, /* .##..... */
+/* --- new character H (72) starting at offset 0x01a0 --- */
+ /*01a0:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01a5:*/ 0x90, /* #..#.... */
+ /*01a6:*/ 0x90, /* #..#.... */
+ /*01a7:*/ 0xf0, /* ####.... */
+ /*01a8:*/ 0x90, /* #..#.... */
+ /*01a9:*/ 0x90, /* #..#.... */
+ /*01aa:*/ 0x90, /* #..#.... */
+/* --- new character I (73) starting at offset 0x01ab --- */
+ /*01ab:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01b0:*/ 0x70, /* .###.... */
+ /*01b1:*/ 0x20, /* ..#..... */
+ /*01b2:*/ 0x20, /* ..#..... */
+ /*01b3:*/ 0x20, /* ..#..... */
+ /*01b4:*/ 0x20, /* ..#..... */
+ /*01b5:*/ 0x70, /* .###.... */
+/* --- new character J (74) starting at offset 0x01b6 --- */
+ /*01b6:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01bb:*/ 0x70, /* .###.... */
+ /*01bc:*/ 0x20, /* ..#..... */
+ /*01bd:*/ 0x20, /* ..#..... */
+ /*01be:*/ 0x20, /* ..#..... */
+ /*01bf:*/ 0xa0, /* #.#..... */
+ /*01c0:*/ 0x40, /* .#...... */
+/* --- new character K (75) starting at offset 0x01c1 --- */
+ /*01c1:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01c6:*/ 0x90, /* #..#.... */
+ /*01c7:*/ 0xa0, /* #.#..... */
+ /*01c8:*/ 0xc0, /* ##...... */
+ /*01c9:*/ 0xa0, /* #.#..... */
+ /*01ca:*/ 0xa0, /* #.#..... */
+ /*01cb:*/ 0x90, /* #..#.... */
+/* --- new character L (76) starting at offset 0x01cc --- */
+ /*01cc:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01d1:*/ 0x80, /* #....... */
+ /*01d2:*/ 0x80, /* #....... */
+ /*01d3:*/ 0x80, /* #....... */
+ /*01d4:*/ 0x80, /* #....... */
+ /*01d5:*/ 0x80, /* #....... */
+ /*01d6:*/ 0xf0, /* ####.... */
+/* --- new character M (77) starting at offset 0x01d7 --- */
+ /*01d7:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01dc:*/ 0x90, /* #..#.... */
+ /*01dd:*/ 0xf0, /* ####.... */
+ /*01de:*/ 0xf0, /* ####.... */
+ /*01df:*/ 0x90, /* #..#.... */
+ /*01e0:*/ 0x90, /* #..#.... */
+ /*01e1:*/ 0x90, /* #..#.... */
+/* --- new character N (78) starting at offset 0x01e2 --- */
+ /*01e2:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01e7:*/ 0x90, /* #..#.... */
+ /*01e8:*/ 0xd0, /* ##.#.... */
+ /*01e9:*/ 0xf0, /* ####.... */
+ /*01ea:*/ 0xb0, /* #.##.... */
+ /*01eb:*/ 0xb0, /* #.##.... */
+ /*01ec:*/ 0x90, /* #..#.... */
+/* --- new character O (79) starting at offset 0x01ed --- */
+ /*01ed:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01f2:*/ 0x60, /* .##..... */
+ /*01f3:*/ 0x90, /* #..#.... */
+ /*01f4:*/ 0x90, /* #..#.... */
+ /*01f5:*/ 0x90, /* #..#.... */
+ /*01f6:*/ 0x90, /* #..#.... */
+ /*01f7:*/ 0x60, /* .##..... */
+/* --- new character P (80) starting at offset 0x01f8 --- */
+ /*01f8:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01fd:*/ 0xe0, /* ###..... */
+ /*01fe:*/ 0x90, /* #..#.... */
+ /*01ff:*/ 0x90, /* #..#.... */
+ /*0200:*/ 0xe0, /* ###..... */
+ /*0201:*/ 0x80, /* #....... */
+ /*0202:*/ 0x80, /* #....... */
+/* --- new character Q (81) starting at offset 0x0203 --- */
+ /*0203:*/ 5, 5, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0208:*/ 0x60, /* .##..... */
+ /*0209:*/ 0x90, /* #..#.... */
+ /*020a:*/ 0x90, /* #..#.... */
+ /*020b:*/ 0xd0, /* ##.#.... */
+ /*020c:*/ 0xb0, /* #.##.... */
+ /*020d:*/ 0x60, /* .##..... */
+ /*020e:*/ 0x10, /* ...#.... */
+/* --- new character R (82) starting at offset 0x020f --- */
+ /*020f:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0214:*/ 0xe0, /* ###..... */
+ /*0215:*/ 0x90, /* #..#.... */
+ /*0216:*/ 0x90, /* #..#.... */
+ /*0217:*/ 0xe0, /* ###..... */
+ /*0218:*/ 0x90, /* #..#.... */
+ /*0219:*/ 0x90, /* #..#.... */
+/* --- new character S (83) starting at offset 0x021a --- */
+ /*021a:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*021f:*/ 0x60, /* .##..... */
+ /*0220:*/ 0x90, /* #..#.... */
+ /*0221:*/ 0x40, /* .#...... */
+ /*0222:*/ 0x20, /* ..#..... */
+ /*0223:*/ 0x90, /* #..#.... */
+ /*0224:*/ 0x60, /* .##..... */
+/* --- new character T (84) starting at offset 0x0225 --- */
+ /*0225:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*022a:*/ 0x70, /* .###.... */
+ /*022b:*/ 0x20, /* ..#..... */
+ /*022c:*/ 0x20, /* ..#..... */
+ /*022d:*/ 0x20, /* ..#..... */
+ /*022e:*/ 0x20, /* ..#..... */
+ /*022f:*/ 0x20, /* ..#..... */
+/* --- new character U (85) starting at offset 0x0230 --- */
+ /*0230:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0235:*/ 0x90, /* #..#.... */
+ /*0236:*/ 0x90, /* #..#.... */
+ /*0237:*/ 0x90, /* #..#.... */
+ /*0238:*/ 0x90, /* #..#.... */
+ /*0239:*/ 0x90, /* #..#.... */
+ /*023a:*/ 0x60, /* .##..... */
+/* --- new character V (86) starting at offset 0x023b --- */
+ /*023b:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0240:*/ 0x90, /* #..#.... */
+ /*0241:*/ 0x90, /* #..#.... */
+ /*0242:*/ 0x90, /* #..#.... */
+ /*0243:*/ 0x90, /* #..#.... */
+ /*0244:*/ 0x60, /* .##..... */
+ /*0245:*/ 0x60, /* .##..... */
+/* --- new character W (87) starting at offset 0x0246 --- */
+ /*0246:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*024b:*/ 0x90, /* #..#.... */
+ /*024c:*/ 0x90, /* #..#.... */
+ /*024d:*/ 0x90, /* #..#.... */
+ /*024e:*/ 0xf0, /* ####.... */
+ /*024f:*/ 0xf0, /* ####.... */
+ /*0250:*/ 0x90, /* #..#.... */
+/* --- new character X (88) starting at offset 0x0251 --- */
+ /*0251:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0256:*/ 0x90, /* #..#.... */
+ /*0257:*/ 0x90, /* #..#.... */
+ /*0258:*/ 0x60, /* .##..... */
+ /*0259:*/ 0x60, /* .##..... */
+ /*025a:*/ 0x90, /* #..#.... */
+ /*025b:*/ 0x90, /* #..#.... */
+/* --- new character Y (89) starting at offset 0x025c --- */
+ /*025c:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0261:*/ 0x88, /* #...#... */
+ /*0262:*/ 0x88, /* #...#... */
+ /*0263:*/ 0x50, /* .#.#.... */
+ /*0264:*/ 0x20, /* ..#..... */
+ /*0265:*/ 0x20, /* ..#..... */
+ /*0266:*/ 0x20, /* ..#..... */
+/* --- new character Z (90) starting at offset 0x0267 --- */
+ /*0267:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*026c:*/ 0xf0, /* ####.... */
+ /*026d:*/ 0x10, /* ...#.... */
+ /*026e:*/ 0x20, /* ..#..... */
+ /*026f:*/ 0x40, /* .#...... */
+ /*0270:*/ 0x80, /* #....... */
+ /*0271:*/ 0xf0, /* ####.... */
+/* --- new character bracketleft (91) starting at offset 0x0272 --- */
+ /*0272:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0277:*/ 0x70, /* .###.... */
+ /*0278:*/ 0x40, /* .#...... */
+ /*0279:*/ 0x40, /* .#...... */
+ /*027a:*/ 0x40, /* .#...... */
+ /*027b:*/ 0x40, /* .#...... */
+ /*027c:*/ 0x70, /* .###.... */
+/* --- new character backslash (92) starting at offset 0x027d --- */
+ /*027d:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0282:*/ 0x80, /* #....... */
+ /*0283:*/ 0x80, /* #....... */
+ /*0284:*/ 0x40, /* .#...... */
+ /*0285:*/ 0x20, /* ..#..... */
+ /*0286:*/ 0x10, /* ...#.... */
+ /*0287:*/ 0x10, /* ...#.... */
+/* --- new character bracketright (93) starting at offset 0x0288 --- */
+ /*0288:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*028d:*/ 0x70, /* .###.... */
+ /*028e:*/ 0x10, /* ...#.... */
+ /*028f:*/ 0x10, /* ...#.... */
+ /*0290:*/ 0x10, /* ...#.... */
+ /*0291:*/ 0x10, /* ...#.... */
+ /*0292:*/ 0x70, /* .###.... */
+/* --- new character asciicircum (94) starting at offset 0x0293 --- */
+ /*0293:*/ 5, 5, 2, 0, 4, /* width and bbox (w,h,x,y) */
+ /*0298:*/ 0x20, /* ..#..... */
+ /*0299:*/ 0x50, /* .#.#.... */
+/* --- new character underscore (95) starting at offset 0x029a --- */
+ /*029a:*/ 5, 5, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*029f:*/ 0xf0, /* ####.... */
+/* --- new character grave (96) starting at offset 0x02a0 --- */
+ /*02a0:*/ 5, 5, 2, 0, 4, /* width and bbox (w,h,x,y) */
+ /*02a5:*/ 0x40, /* .#...... */
+ /*02a6:*/ 0x20, /* ..#..... */
+/* --- new character a (97) starting at offset 0x02a7 --- */
+ /*02a7:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02ac:*/ 0x70, /* .###.... */
+ /*02ad:*/ 0x90, /* #..#.... */
+ /*02ae:*/ 0x90, /* #..#.... */
+ /*02af:*/ 0x70, /* .###.... */
+/* --- new character b (98) starting at offset 0x02b0 --- */
+ /*02b0:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02b5:*/ 0x80, /* #....... */
+ /*02b6:*/ 0x80, /* #....... */
+ /*02b7:*/ 0xe0, /* ###..... */
+ /*02b8:*/ 0x90, /* #..#.... */
+ /*02b9:*/ 0x90, /* #..#.... */
+ /*02ba:*/ 0xe0, /* ###..... */
+/* --- new character c (99) starting at offset 0x02bb --- */
+ /*02bb:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02c0:*/ 0x30, /* ..##.... */
+ /*02c1:*/ 0x40, /* .#...... */
+ /*02c2:*/ 0x40, /* .#...... */
+ /*02c3:*/ 0x30, /* ..##.... */
+/* --- new character d (100) starting at offset 0x02c4 --- */
+ /*02c4:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02c9:*/ 0x10, /* ...#.... */
+ /*02ca:*/ 0x10, /* ...#.... */
+ /*02cb:*/ 0x70, /* .###.... */
+ /*02cc:*/ 0x90, /* #..#.... */
+ /*02cd:*/ 0x90, /* #..#.... */
+ /*02ce:*/ 0x70, /* .###.... */
+/* --- new character e (101) starting at offset 0x02cf --- */
+ /*02cf:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02d4:*/ 0x60, /* .##..... */
+ /*02d5:*/ 0xb0, /* #.##.... */
+ /*02d6:*/ 0xc0, /* ##...... */
+ /*02d7:*/ 0x60, /* .##..... */
+/* --- new character f (102) starting at offset 0x02d8 --- */
+ /*02d8:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02dd:*/ 0x20, /* ..#..... */
+ /*02de:*/ 0x50, /* .#.#.... */
+ /*02df:*/ 0x40, /* .#...... */
+ /*02e0:*/ 0xe0, /* ###..... */
+ /*02e1:*/ 0x40, /* .#...... */
+ /*02e2:*/ 0x40, /* .#...... */
+/* --- new character g (103) starting at offset 0x02e3 --- */
+ /*02e3:*/ 5, 5, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*02e8:*/ 0x60, /* .##..... */
+ /*02e9:*/ 0x90, /* #..#.... */
+ /*02ea:*/ 0x70, /* .###.... */
+ /*02eb:*/ 0x10, /* ...#.... */
+ /*02ec:*/ 0x60, /* .##..... */
+/* --- new character h (104) starting at offset 0x02ed --- */
+ /*02ed:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02f2:*/ 0x80, /* #....... */
+ /*02f3:*/ 0x80, /* #....... */
+ /*02f4:*/ 0xe0, /* ###..... */
+ /*02f5:*/ 0x90, /* #..#.... */
+ /*02f6:*/ 0x90, /* #..#.... */
+ /*02f7:*/ 0x90, /* #..#.... */
+/* --- new character i (105) starting at offset 0x02f8 --- */
+ /*02f8:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02fd:*/ 0x20, /* ..#..... */
+ /*02fe:*/ 0x00, /* ........ */
+ /*02ff:*/ 0x60, /* .##..... */
+ /*0300:*/ 0x20, /* ..#..... */
+ /*0301:*/ 0x20, /* ..#..... */
+ /*0302:*/ 0x70, /* .###.... */
+/* --- new character j (106) starting at offset 0x0303 --- */
+ /*0303:*/ 5, 5, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0308:*/ 0x10, /* ...#.... */
+ /*0309:*/ 0x00, /* ........ */
+ /*030a:*/ 0x10, /* ...#.... */
+ /*030b:*/ 0x10, /* ...#.... */
+ /*030c:*/ 0x10, /* ...#.... */
+ /*030d:*/ 0x50, /* .#.#.... */
+ /*030e:*/ 0x20, /* ..#..... */
+/* --- new character k (107) starting at offset 0x030f --- */
+ /*030f:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0314:*/ 0x80, /* #....... */
+ /*0315:*/ 0x80, /* #....... */
+ /*0316:*/ 0x90, /* #..#.... */
+ /*0317:*/ 0xe0, /* ###..... */
+ /*0318:*/ 0x90, /* #..#.... */
+ /*0319:*/ 0x90, /* #..#.... */
+/* --- new character l (108) starting at offset 0x031a --- */
+ /*031a:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*031f:*/ 0x60, /* .##..... */
+ /*0320:*/ 0x20, /* ..#..... */
+ /*0321:*/ 0x20, /* ..#..... */
+ /*0322:*/ 0x20, /* ..#..... */
+ /*0323:*/ 0x20, /* ..#..... */
+ /*0324:*/ 0x70, /* .###.... */
+/* --- new character m (109) starting at offset 0x0325 --- */
+ /*0325:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*032a:*/ 0xd0, /* ##.#.... */
+ /*032b:*/ 0xa8, /* #.#.#... */
+ /*032c:*/ 0xa8, /* #.#.#... */
+ /*032d:*/ 0xa8, /* #.#.#... */
+/* --- new character n (110) starting at offset 0x032e --- */
+ /*032e:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0333:*/ 0xe0, /* ###..... */
+ /*0334:*/ 0x90, /* #..#.... */
+ /*0335:*/ 0x90, /* #..#.... */
+ /*0336:*/ 0x90, /* #..#.... */
+/* --- new character o (111) starting at offset 0x0337 --- */
+ /*0337:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*033c:*/ 0x60, /* .##..... */
+ /*033d:*/ 0x90, /* #..#.... */
+ /*033e:*/ 0x90, /* #..#.... */
+ /*033f:*/ 0x60, /* .##..... */
+/* --- new character p (112) starting at offset 0x0340 --- */
+ /*0340:*/ 5, 5, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0345:*/ 0xe0, /* ###..... */
+ /*0346:*/ 0x90, /* #..#.... */
+ /*0347:*/ 0xe0, /* ###..... */
+ /*0348:*/ 0x80, /* #....... */
+ /*0349:*/ 0x80, /* #....... */
+/* --- new character q (113) starting at offset 0x034a --- */
+ /*034a:*/ 5, 5, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*034f:*/ 0x70, /* .###.... */
+ /*0350:*/ 0x90, /* #..#.... */
+ /*0351:*/ 0x70, /* .###.... */
+ /*0352:*/ 0x10, /* ...#.... */
+ /*0353:*/ 0x10, /* ...#.... */
+/* --- new character r (114) starting at offset 0x0354 --- */
+ /*0354:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0359:*/ 0xa0, /* #.#..... */
+ /*035a:*/ 0xd0, /* ##.#.... */
+ /*035b:*/ 0x80, /* #....... */
+ /*035c:*/ 0x80, /* #....... */
+/* --- new character s (115) starting at offset 0x035d --- */
+ /*035d:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0362:*/ 0x30, /* ..##.... */
+ /*0363:*/ 0x60, /* .##..... */
+ /*0364:*/ 0x10, /* ...#.... */
+ /*0365:*/ 0x60, /* .##..... */
+/* --- new character t (116) starting at offset 0x0366 --- */
+ /*0366:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*036b:*/ 0x40, /* .#...... */
+ /*036c:*/ 0x40, /* .#...... */
+ /*036d:*/ 0xe0, /* ###..... */
+ /*036e:*/ 0x40, /* .#...... */
+ /*036f:*/ 0x50, /* .#.#.... */
+ /*0370:*/ 0x20, /* ..#..... */
+/* --- new character u (117) starting at offset 0x0371 --- */
+ /*0371:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0376:*/ 0x90, /* #..#.... */
+ /*0377:*/ 0x90, /* #..#.... */
+ /*0378:*/ 0x90, /* #..#.... */
+ /*0379:*/ 0x70, /* .###.... */
+/* --- new character v (118) starting at offset 0x037a --- */
+ /*037a:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*037f:*/ 0x50, /* .#.#.... */
+ /*0380:*/ 0x50, /* .#.#.... */
+ /*0381:*/ 0x50, /* .#.#.... */
+ /*0382:*/ 0x20, /* ..#..... */
+/* --- new character w (119) starting at offset 0x0383 --- */
+ /*0383:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0388:*/ 0x88, /* #...#... */
+ /*0389:*/ 0xa8, /* #.#.#... */
+ /*038a:*/ 0xa8, /* #.#.#... */
+ /*038b:*/ 0x50, /* .#.#.... */
+/* --- new character x (120) starting at offset 0x038c --- */
+ /*038c:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0391:*/ 0x90, /* #..#.... */
+ /*0392:*/ 0x60, /* .##..... */
+ /*0393:*/ 0x60, /* .##..... */
+ /*0394:*/ 0x90, /* #..#.... */
+/* --- new character y (121) starting at offset 0x0395 --- */
+ /*0395:*/ 5, 5, 5, 0, -1, /* width and bbox (w,h,x,y) */
+ /*039a:*/ 0x90, /* #..#.... */
+ /*039b:*/ 0x90, /* #..#.... */
+ /*039c:*/ 0x70, /* .###.... */
+ /*039d:*/ 0x90, /* #..#.... */
+ /*039e:*/ 0x60, /* .##..... */
+/* --- new character z (122) starting at offset 0x039f --- */
+ /*039f:*/ 5, 5, 4, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03a4:*/ 0xf0, /* ####.... */
+ /*03a5:*/ 0x20, /* ..#..... */
+ /*03a6:*/ 0x40, /* .#...... */
+ /*03a7:*/ 0xf0, /* ####.... */
+/* --- new character braceleft (123) starting at offset 0x03a8 --- */
+ /*03a8:*/ 5, 5, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ad:*/ 0x30, /* ..##.... */
+ /*03ae:*/ 0x40, /* .#...... */
+ /*03af:*/ 0x20, /* ..#..... */
+ /*03b0:*/ 0xc0, /* ##...... */
+ /*03b1:*/ 0x20, /* ..#..... */
+ /*03b2:*/ 0x40, /* .#...... */
+ /*03b3:*/ 0x30, /* ..##.... */
+/* --- new character bar (124) starting at offset 0x03b4 --- */
+ /*03b4:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03b9:*/ 0x20, /* ..#..... */
+ /*03ba:*/ 0x20, /* ..#..... */
+ /*03bb:*/ 0x20, /* ..#..... */
+ /*03bc:*/ 0x20, /* ..#..... */
+ /*03bd:*/ 0x20, /* ..#..... */
+ /*03be:*/ 0x20, /* ..#..... */
+/* --- new character braceright (125) starting at offset 0x03bf --- */
+ /*03bf:*/ 5, 5, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03c4:*/ 0xc0, /* ##...... */
+ /*03c5:*/ 0x20, /* ..#..... */
+ /*03c6:*/ 0x40, /* .#...... */
+ /*03c7:*/ 0x30, /* ..##.... */
+ /*03c8:*/ 0x40, /* .#...... */
+ /*03c9:*/ 0x20, /* ..#..... */
+ /*03ca:*/ 0xc0, /* ##...... */
+/* --- new character asciitilde (126) starting at offset 0x03cb --- */
+ /*03cb:*/ 5, 5, 2, 0, 4, /* width and bbox (w,h,x,y) */
+ /*03d0:*/ 0x50, /* .#.#.... */
+ /*03d1:*/ 0xa0, /* #.#..... */
+};
+static const uint16_t font_5x8_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0011 /* quotedbl */,
+ 0x0019 /* numbersign */,
+ 0x0025 /* dollar */,
+ 0x0031 /* percent */,
+ 0x003b /* ampersand */,
+ 0x0047 /* quotesingle */,
+ 0x004f /* parenleft */,
+ 0x005a /* parenright */,
+ 0x0065 /* asterisk */,
+ 0x006f /* plus */,
+ 0x0079 /* comma */,
+ 0x0081 /* hyphen */,
+ 0x0087 /* period */,
+ 0x008f /* slash */,
+ 0x009a /* zero */,
+ 0x00a5 /* one */,
+ 0x00b0 /* two */,
+ 0x00bb /* three */,
+ 0x00c6 /* four */,
+ 0x00d1 /* five */,
+ 0x00dc /* six */,
+ 0x00e7 /* seven */,
+ 0x00f2 /* eight */,
+ 0x00fd /* nine */,
+ 0x0108 /* colon */,
+ 0x0112 /* semicolon */,
+ 0x011d /* less */,
+ 0x0128 /* equal */,
+ 0x0130 /* greater */,
+ 0x013b /* question */,
+ 0x0146 /* at */,
+ 0x0153 /* A */,
+ 0x015e /* B */,
+ 0x0169 /* C */,
+ 0x0174 /* D */,
+ 0x017f /* E */,
+ 0x018a /* F */,
+ 0x0195 /* G */,
+ 0x01a0 /* H */,
+ 0x01ab /* I */,
+ 0x01b6 /* J */,
+ 0x01c1 /* K */,
+ 0x01cc /* L */,
+ 0x01d7 /* M */,
+ 0x01e2 /* N */,
+ 0x01ed /* O */,
+ 0x01f8 /* P */,
+ 0x0203 /* Q */,
+ 0x020f /* R */,
+ 0x021a /* S */,
+ 0x0225 /* T */,
+ 0x0230 /* U */,
+ 0x023b /* V */,
+ 0x0246 /* W */,
+ 0x0251 /* X */,
+ 0x025c /* Y */,
+ 0x0267 /* Z */,
+ 0x0272 /* bracketleft */,
+ 0x027d /* backslash */,
+ 0x0288 /* bracketright */,
+ 0x0293 /* asciicircum */,
+ 0x029a /* underscore */,
+ 0x02a0 /* grave */,
+ 0x02a7 /* a */,
+ 0x02b0 /* b */,
+ 0x02bb /* c */,
+ 0x02c4 /* d */,
+ 0x02cf /* e */,
+ 0x02d8 /* f */,
+ 0x02e3 /* g */,
+ 0x02ed /* h */,
+ 0x02f8 /* i */,
+ 0x0303 /* j */,
+ 0x030f /* k */,
+ 0x031a /* l */,
+ 0x0325 /* m */,
+ 0x032e /* n */,
+ 0x0337 /* o */,
+ 0x0340 /* p */,
+ 0x034a /* q */,
+ 0x0354 /* r */,
+ 0x035d /* s */,
+ 0x0366 /* t */,
+ 0x0371 /* u */,
+ 0x037a /* v */,
+ 0x0383 /* w */,
+ 0x038c /* x */,
+ 0x0395 /* y */,
+ 0x039f /* z */,
+ 0x03a8 /* braceleft */,
+ 0x03b4 /* bar */,
+ 0x03bf /* braceright */,
+ 0x03cb /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_5x8 = {
+ .height = 8,
+ .ascent = 7,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_5x8_data,
+ .charoffs = font_5x8_offsets,
+};
diff --git a/src/target/firmware/fb/c64.c b/src/target/firmware/fb/c64.c
new file mode 100644
index 00000000..82ebfa35
--- /dev/null
+++ b/src/target/firmware/fb/c64.c
@@ -0,0 +1,1069 @@
+#include <fb/font.h>
+static const uint8_t font_c64_data[] = {
+/* --- new character ' ' (32) starting at offset 0x0000 --- */
+ /*0000:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+ /*0006:*/ 0x00, /* ........ */
+ /*0007:*/ 0x00, /* ........ */
+ /*0008:*/ 0x00, /* ........ */
+ /*0009:*/ 0x00, /* ........ */
+ /*000a:*/ 0x00, /* ........ */
+ /*000b:*/ 0x00, /* ........ */
+ /*000c:*/ 0x00, /* ........ */
+/* --- new character '!' (33) starting at offset 0x000d --- */
+ /*000d:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0012:*/ 0x18, /* ...##... */
+ /*0013:*/ 0x18, /* ...##... */
+ /*0014:*/ 0x18, /* ...##... */
+ /*0015:*/ 0x18, /* ...##... */
+ /*0016:*/ 0x00, /* ........ */
+ /*0017:*/ 0x00, /* ........ */
+ /*0018:*/ 0x18, /* ...##... */
+ /*0019:*/ 0x00, /* ........ */
+/* --- new character '"' (34) starting at offset 0x001a --- */
+ /*001a:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*001f:*/ 0x66, /* .##..##. */
+ /*0020:*/ 0x66, /* .##..##. */
+ /*0021:*/ 0x66, /* .##..##. */
+ /*0022:*/ 0x00, /* ........ */
+ /*0023:*/ 0x00, /* ........ */
+ /*0024:*/ 0x00, /* ........ */
+ /*0025:*/ 0x00, /* ........ */
+ /*0026:*/ 0x00, /* ........ */
+/* --- new character '#' (35) starting at offset 0x0027 --- */
+ /*0027:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*002c:*/ 0x66, /* .##..##. */
+ /*002d:*/ 0x66, /* .##..##. */
+ /*002e:*/ 0xff, /* ######## */
+ /*002f:*/ 0x66, /* .##..##. */
+ /*0030:*/ 0xff, /* ######## */
+ /*0031:*/ 0x66, /* .##..##. */
+ /*0032:*/ 0x66, /* .##..##. */
+ /*0033:*/ 0x00, /* ........ */
+/* --- new character '$' (36) starting at offset 0x0034 --- */
+ /*0034:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0039:*/ 0x18, /* ...##... */
+ /*003a:*/ 0x3e, /* ..#####. */
+ /*003b:*/ 0x60, /* .##..... */
+ /*003c:*/ 0x3c, /* ..####.. */
+ /*003d:*/ 0x06, /* .....##. */
+ /*003e:*/ 0x7c, /* .#####.. */
+ /*003f:*/ 0x18, /* ...##... */
+ /*0040:*/ 0x00, /* ........ */
+/* --- new character '%' (37) starting at offset 0x0041 --- */
+ /*0041:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0046:*/ 0x62, /* .##...#. */
+ /*0047:*/ 0x66, /* .##..##. */
+ /*0048:*/ 0x0c, /* ....##.. */
+ /*0049:*/ 0x18, /* ...##... */
+ /*004a:*/ 0x30, /* ..##.... */
+ /*004b:*/ 0x66, /* .##..##. */
+ /*004c:*/ 0x46, /* .#...##. */
+ /*004d:*/ 0x00, /* ........ */
+/* --- new character '&' (38) starting at offset 0x004e --- */
+ /*004e:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0053:*/ 0x3c, /* ..####.. */
+ /*0054:*/ 0x66, /* .##..##. */
+ /*0055:*/ 0x3c, /* ..####.. */
+ /*0056:*/ 0x38, /* ..###... */
+ /*0057:*/ 0x67, /* .##..### */
+ /*0058:*/ 0x66, /* .##..##. */
+ /*0059:*/ 0x3f, /* ..###### */
+ /*005a:*/ 0x00, /* ........ */
+/* --- new character ''' (39) starting at offset 0x005b --- */
+ /*005b:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0060:*/ 0x06, /* .....##. */
+ /*0061:*/ 0x0c, /* ....##.. */
+ /*0062:*/ 0x18, /* ...##... */
+ /*0063:*/ 0x00, /* ........ */
+ /*0064:*/ 0x00, /* ........ */
+ /*0065:*/ 0x00, /* ........ */
+ /*0066:*/ 0x00, /* ........ */
+ /*0067:*/ 0x00, /* ........ */
+/* --- new character '(' (40) starting at offset 0x0068 --- */
+ /*0068:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*006d:*/ 0x0c, /* ....##.. */
+ /*006e:*/ 0x18, /* ...##... */
+ /*006f:*/ 0x30, /* ..##.... */
+ /*0070:*/ 0x30, /* ..##.... */
+ /*0071:*/ 0x30, /* ..##.... */
+ /*0072:*/ 0x18, /* ...##... */
+ /*0073:*/ 0x0c, /* ....##.. */
+ /*0074:*/ 0x00, /* ........ */
+/* --- new character ')' (41) starting at offset 0x0075 --- */
+ /*0075:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*007a:*/ 0x30, /* ..##.... */
+ /*007b:*/ 0x18, /* ...##... */
+ /*007c:*/ 0x0c, /* ....##.. */
+ /*007d:*/ 0x0c, /* ....##.. */
+ /*007e:*/ 0x0c, /* ....##.. */
+ /*007f:*/ 0x18, /* ...##... */
+ /*0080:*/ 0x30, /* ..##.... */
+ /*0081:*/ 0x00, /* ........ */
+/* --- new character '*' (42) starting at offset 0x0082 --- */
+ /*0082:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0087:*/ 0x00, /* ........ */
+ /*0088:*/ 0x66, /* .##..##. */
+ /*0089:*/ 0x3c, /* ..####.. */
+ /*008a:*/ 0xff, /* ######## */
+ /*008b:*/ 0x3c, /* ..####.. */
+ /*008c:*/ 0x66, /* .##..##. */
+ /*008d:*/ 0x00, /* ........ */
+ /*008e:*/ 0x00, /* ........ */
+/* --- new character '+' (43) starting at offset 0x008f --- */
+ /*008f:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0094:*/ 0x00, /* ........ */
+ /*0095:*/ 0x18, /* ...##... */
+ /*0096:*/ 0x18, /* ...##... */
+ /*0097:*/ 0x7e, /* .######. */
+ /*0098:*/ 0x18, /* ...##... */
+ /*0099:*/ 0x18, /* ...##... */
+ /*009a:*/ 0x00, /* ........ */
+ /*009b:*/ 0x00, /* ........ */
+/* --- new character ',' (44) starting at offset 0x009c --- */
+ /*009c:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00a1:*/ 0x00, /* ........ */
+ /*00a2:*/ 0x00, /* ........ */
+ /*00a3:*/ 0x00, /* ........ */
+ /*00a4:*/ 0x00, /* ........ */
+ /*00a5:*/ 0x00, /* ........ */
+ /*00a6:*/ 0x18, /* ...##... */
+ /*00a7:*/ 0x18, /* ...##... */
+ /*00a8:*/ 0x30, /* ..##.... */
+/* --- new character '-' (45) starting at offset 0x00a9 --- */
+ /*00a9:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ae:*/ 0x00, /* ........ */
+ /*00af:*/ 0x00, /* ........ */
+ /*00b0:*/ 0x00, /* ........ */
+ /*00b1:*/ 0x7e, /* .######. */
+ /*00b2:*/ 0x00, /* ........ */
+ /*00b3:*/ 0x00, /* ........ */
+ /*00b4:*/ 0x00, /* ........ */
+ /*00b5:*/ 0x00, /* ........ */
+/* --- new character '.' (46) starting at offset 0x00b6 --- */
+ /*00b6:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00bb:*/ 0x00, /* ........ */
+ /*00bc:*/ 0x00, /* ........ */
+ /*00bd:*/ 0x00, /* ........ */
+ /*00be:*/ 0x00, /* ........ */
+ /*00bf:*/ 0x00, /* ........ */
+ /*00c0:*/ 0x18, /* ...##... */
+ /*00c1:*/ 0x18, /* ...##... */
+ /*00c2:*/ 0x00, /* ........ */
+/* --- new character '/' (47) starting at offset 0x00c3 --- */
+ /*00c3:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00c8:*/ 0x00, /* ........ */
+ /*00c9:*/ 0x03, /* ......## */
+ /*00ca:*/ 0x06, /* .....##. */
+ /*00cb:*/ 0x0c, /* ....##.. */
+ /*00cc:*/ 0x18, /* ...##... */
+ /*00cd:*/ 0x30, /* ..##.... */
+ /*00ce:*/ 0x60, /* .##..... */
+ /*00cf:*/ 0x00, /* ........ */
+/* --- new character '0' (48) starting at offset 0x00d0 --- */
+ /*00d0:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00d5:*/ 0x3c, /* ..####.. */
+ /*00d6:*/ 0x66, /* .##..##. */
+ /*00d7:*/ 0x6e, /* .##.###. */
+ /*00d8:*/ 0x76, /* .###.##. */
+ /*00d9:*/ 0x66, /* .##..##. */
+ /*00da:*/ 0x66, /* .##..##. */
+ /*00db:*/ 0x3c, /* ..####.. */
+ /*00dc:*/ 0x00, /* ........ */
+/* --- new character '1' (49) starting at offset 0x00dd --- */
+ /*00dd:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00e2:*/ 0x18, /* ...##... */
+ /*00e3:*/ 0x18, /* ...##... */
+ /*00e4:*/ 0x38, /* ..###... */
+ /*00e5:*/ 0x18, /* ...##... */
+ /*00e6:*/ 0x18, /* ...##... */
+ /*00e7:*/ 0x18, /* ...##... */
+ /*00e8:*/ 0x7e, /* .######. */
+ /*00e9:*/ 0x00, /* ........ */
+/* --- new character '2' (50) starting at offset 0x00ea --- */
+ /*00ea:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ef:*/ 0x3c, /* ..####.. */
+ /*00f0:*/ 0x66, /* .##..##. */
+ /*00f1:*/ 0x06, /* .....##. */
+ /*00f2:*/ 0x0c, /* ....##.. */
+ /*00f3:*/ 0x30, /* ..##.... */
+ /*00f4:*/ 0x60, /* .##..... */
+ /*00f5:*/ 0x7e, /* .######. */
+ /*00f6:*/ 0x00, /* ........ */
+/* --- new character '3' (51) starting at offset 0x00f7 --- */
+ /*00f7:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00fc:*/ 0x3c, /* ..####.. */
+ /*00fd:*/ 0x66, /* .##..##. */
+ /*00fe:*/ 0x06, /* .....##. */
+ /*00ff:*/ 0x1c, /* ...###.. */
+ /*0100:*/ 0x06, /* .....##. */
+ /*0101:*/ 0x66, /* .##..##. */
+ /*0102:*/ 0x3c, /* ..####.. */
+ /*0103:*/ 0x00, /* ........ */
+/* --- new character '4' (52) starting at offset 0x0104 --- */
+ /*0104:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0109:*/ 0x06, /* .....##. */
+ /*010a:*/ 0x0e, /* ....###. */
+ /*010b:*/ 0x1e, /* ...####. */
+ /*010c:*/ 0x66, /* .##..##. */
+ /*010d:*/ 0x7f, /* .####### */
+ /*010e:*/ 0x06, /* .....##. */
+ /*010f:*/ 0x06, /* .....##. */
+ /*0110:*/ 0x00, /* ........ */
+/* --- new character '5' (53) starting at offset 0x0111 --- */
+ /*0111:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0116:*/ 0x7e, /* .######. */
+ /*0117:*/ 0x60, /* .##..... */
+ /*0118:*/ 0x7c, /* .#####.. */
+ /*0119:*/ 0x06, /* .....##. */
+ /*011a:*/ 0x06, /* .....##. */
+ /*011b:*/ 0x66, /* .##..##. */
+ /*011c:*/ 0x3c, /* ..####.. */
+ /*011d:*/ 0x00, /* ........ */
+/* --- new character '6' (54) starting at offset 0x011e --- */
+ /*011e:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0123:*/ 0x3c, /* ..####.. */
+ /*0124:*/ 0x66, /* .##..##. */
+ /*0125:*/ 0x60, /* .##..... */
+ /*0126:*/ 0x7c, /* .#####.. */
+ /*0127:*/ 0x66, /* .##..##. */
+ /*0128:*/ 0x66, /* .##..##. */
+ /*0129:*/ 0x3c, /* ..####.. */
+ /*012a:*/ 0x00, /* ........ */
+/* --- new character '7' (55) starting at offset 0x012b --- */
+ /*012b:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0130:*/ 0x7e, /* .######. */
+ /*0131:*/ 0x66, /* .##..##. */
+ /*0132:*/ 0x0c, /* ....##.. */
+ /*0133:*/ 0x18, /* ...##... */
+ /*0134:*/ 0x18, /* ...##... */
+ /*0135:*/ 0x18, /* ...##... */
+ /*0136:*/ 0x18, /* ...##... */
+ /*0137:*/ 0x00, /* ........ */
+/* --- new character '8' (56) starting at offset 0x0138 --- */
+ /*0138:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*013d:*/ 0x3c, /* ..####.. */
+ /*013e:*/ 0x66, /* .##..##. */
+ /*013f:*/ 0x66, /* .##..##. */
+ /*0140:*/ 0x3c, /* ..####.. */
+ /*0141:*/ 0x66, /* .##..##. */
+ /*0142:*/ 0x66, /* .##..##. */
+ /*0143:*/ 0x3c, /* ..####.. */
+ /*0144:*/ 0x00, /* ........ */
+/* --- new character '9' (57) starting at offset 0x0145 --- */
+ /*0145:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*014a:*/ 0x3c, /* ..####.. */
+ /*014b:*/ 0x66, /* .##..##. */
+ /*014c:*/ 0x66, /* .##..##. */
+ /*014d:*/ 0x3e, /* ..#####. */
+ /*014e:*/ 0x06, /* .....##. */
+ /*014f:*/ 0x66, /* .##..##. */
+ /*0150:*/ 0x3c, /* ..####.. */
+ /*0151:*/ 0x00, /* ........ */
+/* --- new character ':' (58) starting at offset 0x0152 --- */
+ /*0152:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0157:*/ 0x00, /* ........ */
+ /*0158:*/ 0x00, /* ........ */
+ /*0159:*/ 0x18, /* ...##... */
+ /*015a:*/ 0x00, /* ........ */
+ /*015b:*/ 0x00, /* ........ */
+ /*015c:*/ 0x18, /* ...##... */
+ /*015d:*/ 0x00, /* ........ */
+ /*015e:*/ 0x00, /* ........ */
+/* --- new character ';' (59) starting at offset 0x015f --- */
+ /*015f:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0164:*/ 0x00, /* ........ */
+ /*0165:*/ 0x00, /* ........ */
+ /*0166:*/ 0x18, /* ...##... */
+ /*0167:*/ 0x00, /* ........ */
+ /*0168:*/ 0x00, /* ........ */
+ /*0169:*/ 0x18, /* ...##... */
+ /*016a:*/ 0x18, /* ...##... */
+ /*016b:*/ 0x30, /* ..##.... */
+/* --- new character '<' (60) starting at offset 0x016c --- */
+ /*016c:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0171:*/ 0x0e, /* ....###. */
+ /*0172:*/ 0x18, /* ...##... */
+ /*0173:*/ 0x30, /* ..##.... */
+ /*0174:*/ 0x60, /* .##..... */
+ /*0175:*/ 0x30, /* ..##.... */
+ /*0176:*/ 0x18, /* ...##... */
+ /*0177:*/ 0x0e, /* ....###. */
+ /*0178:*/ 0x00, /* ........ */
+/* --- new character '=' (61) starting at offset 0x0179 --- */
+ /*0179:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*017e:*/ 0x00, /* ........ */
+ /*017f:*/ 0x00, /* ........ */
+ /*0180:*/ 0x7e, /* .######. */
+ /*0181:*/ 0x00, /* ........ */
+ /*0182:*/ 0x7e, /* .######. */
+ /*0183:*/ 0x00, /* ........ */
+ /*0184:*/ 0x00, /* ........ */
+ /*0185:*/ 0x00, /* ........ */
+/* --- new character '>' (62) starting at offset 0x0186 --- */
+ /*0186:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*018b:*/ 0x70, /* .###.... */
+ /*018c:*/ 0x18, /* ...##... */
+ /*018d:*/ 0x0c, /* ....##.. */
+ /*018e:*/ 0x06, /* .....##. */
+ /*018f:*/ 0x0c, /* ....##.. */
+ /*0190:*/ 0x18, /* ...##... */
+ /*0191:*/ 0x70, /* .###.... */
+ /*0192:*/ 0x00, /* ........ */
+/* --- new character '?' (63) starting at offset 0x0193 --- */
+ /*0193:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0198:*/ 0x3c, /* ..####.. */
+ /*0199:*/ 0x66, /* .##..##. */
+ /*019a:*/ 0x06, /* .....##. */
+ /*019b:*/ 0x0c, /* ....##.. */
+ /*019c:*/ 0x18, /* ...##... */
+ /*019d:*/ 0x00, /* ........ */
+ /*019e:*/ 0x18, /* ...##... */
+ /*019f:*/ 0x00, /* ........ */
+/* --- new character '@' (64) starting at offset 0x01a0 --- */
+ /*01a0:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01a5:*/ 0x3c, /* ..####.. */
+ /*01a6:*/ 0x66, /* .##..##. */
+ /*01a7:*/ 0x6e, /* .##.###. */
+ /*01a8:*/ 0x6e, /* .##.###. */
+ /*01a9:*/ 0x60, /* .##..... */
+ /*01aa:*/ 0x62, /* .##...#. */
+ /*01ab:*/ 0x3c, /* ..####.. */
+ /*01ac:*/ 0x00, /* ........ */
+/* --- new character 'A' (65) starting at offset 0x01ad --- */
+ /*01ad:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01b2:*/ 0x18, /* ...##... */
+ /*01b3:*/ 0x3c, /* ..####.. */
+ /*01b4:*/ 0x66, /* .##..##. */
+ /*01b5:*/ 0x7e, /* .######. */
+ /*01b6:*/ 0x66, /* .##..##. */
+ /*01b7:*/ 0x66, /* .##..##. */
+ /*01b8:*/ 0x66, /* .##..##. */
+ /*01b9:*/ 0x00, /* ........ */
+/* --- new character 'B' (66) starting at offset 0x01ba --- */
+ /*01ba:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01bf:*/ 0x7c, /* .#####.. */
+ /*01c0:*/ 0x66, /* .##..##. */
+ /*01c1:*/ 0x66, /* .##..##. */
+ /*01c2:*/ 0x7c, /* .#####.. */
+ /*01c3:*/ 0x66, /* .##..##. */
+ /*01c4:*/ 0x66, /* .##..##. */
+ /*01c5:*/ 0x7c, /* .#####.. */
+ /*01c6:*/ 0x00, /* ........ */
+/* --- new character 'C' (67) starting at offset 0x01c7 --- */
+ /*01c7:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01cc:*/ 0x3c, /* ..####.. */
+ /*01cd:*/ 0x66, /* .##..##. */
+ /*01ce:*/ 0x60, /* .##..... */
+ /*01cf:*/ 0x60, /* .##..... */
+ /*01d0:*/ 0x60, /* .##..... */
+ /*01d1:*/ 0x66, /* .##..##. */
+ /*01d2:*/ 0x3c, /* ..####.. */
+ /*01d3:*/ 0x00, /* ........ */
+/* --- new character 'D' (68) starting at offset 0x01d4 --- */
+ /*01d4:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01d9:*/ 0x78, /* .####... */
+ /*01da:*/ 0x6c, /* .##.##.. */
+ /*01db:*/ 0x66, /* .##..##. */
+ /*01dc:*/ 0x66, /* .##..##. */
+ /*01dd:*/ 0x66, /* .##..##. */
+ /*01de:*/ 0x6c, /* .##.##.. */
+ /*01df:*/ 0x78, /* .####... */
+ /*01e0:*/ 0x00, /* ........ */
+/* --- new character 'E' (69) starting at offset 0x01e1 --- */
+ /*01e1:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01e6:*/ 0x7e, /* .######. */
+ /*01e7:*/ 0x60, /* .##..... */
+ /*01e8:*/ 0x60, /* .##..... */
+ /*01e9:*/ 0x78, /* .####... */
+ /*01ea:*/ 0x60, /* .##..... */
+ /*01eb:*/ 0x60, /* .##..... */
+ /*01ec:*/ 0x7e, /* .######. */
+ /*01ed:*/ 0x00, /* ........ */
+/* --- new character 'F' (70) starting at offset 0x01ee --- */
+ /*01ee:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01f3:*/ 0x7e, /* .######. */
+ /*01f4:*/ 0x60, /* .##..... */
+ /*01f5:*/ 0x60, /* .##..... */
+ /*01f6:*/ 0x78, /* .####... */
+ /*01f7:*/ 0x60, /* .##..... */
+ /*01f8:*/ 0x60, /* .##..... */
+ /*01f9:*/ 0x60, /* .##..... */
+ /*01fa:*/ 0x00, /* ........ */
+/* --- new character 'G' (71) starting at offset 0x01fb --- */
+ /*01fb:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0200:*/ 0x3c, /* ..####.. */
+ /*0201:*/ 0x66, /* .##..##. */
+ /*0202:*/ 0x60, /* .##..... */
+ /*0203:*/ 0x6e, /* .##.###. */
+ /*0204:*/ 0x66, /* .##..##. */
+ /*0205:*/ 0x66, /* .##..##. */
+ /*0206:*/ 0x3c, /* ..####.. */
+ /*0207:*/ 0x00, /* ........ */
+/* --- new character 'H' (72) starting at offset 0x0208 --- */
+ /*0208:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*020d:*/ 0x66, /* .##..##. */
+ /*020e:*/ 0x66, /* .##..##. */
+ /*020f:*/ 0x66, /* .##..##. */
+ /*0210:*/ 0x7e, /* .######. */
+ /*0211:*/ 0x66, /* .##..##. */
+ /*0212:*/ 0x66, /* .##..##. */
+ /*0213:*/ 0x66, /* .##..##. */
+ /*0214:*/ 0x00, /* ........ */
+/* --- new character 'I' (73) starting at offset 0x0215 --- */
+ /*0215:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*021a:*/ 0x3c, /* ..####.. */
+ /*021b:*/ 0x18, /* ...##... */
+ /*021c:*/ 0x18, /* ...##... */
+ /*021d:*/ 0x18, /* ...##... */
+ /*021e:*/ 0x18, /* ...##... */
+ /*021f:*/ 0x18, /* ...##... */
+ /*0220:*/ 0x3c, /* ..####.. */
+ /*0221:*/ 0x00, /* ........ */
+/* --- new character 'J' (74) starting at offset 0x0222 --- */
+ /*0222:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0227:*/ 0x1e, /* ...####. */
+ /*0228:*/ 0x0c, /* ....##.. */
+ /*0229:*/ 0x0c, /* ....##.. */
+ /*022a:*/ 0x0c, /* ....##.. */
+ /*022b:*/ 0x0c, /* ....##.. */
+ /*022c:*/ 0x6c, /* .##.##.. */
+ /*022d:*/ 0x38, /* ..###... */
+ /*022e:*/ 0x00, /* ........ */
+/* --- new character 'K' (75) starting at offset 0x022f --- */
+ /*022f:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0234:*/ 0x66, /* .##..##. */
+ /*0235:*/ 0x6c, /* .##.##.. */
+ /*0236:*/ 0x78, /* .####... */
+ /*0237:*/ 0x70, /* .###.... */
+ /*0238:*/ 0x78, /* .####... */
+ /*0239:*/ 0x6c, /* .##.##.. */
+ /*023a:*/ 0x66, /* .##..##. */
+ /*023b:*/ 0x00, /* ........ */
+/* --- new character 'L' (76) starting at offset 0x023c --- */
+ /*023c:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0241:*/ 0x60, /* .##..... */
+ /*0242:*/ 0x60, /* .##..... */
+ /*0243:*/ 0x60, /* .##..... */
+ /*0244:*/ 0x60, /* .##..... */
+ /*0245:*/ 0x60, /* .##..... */
+ /*0246:*/ 0x60, /* .##..... */
+ /*0247:*/ 0x7e, /* .######. */
+ /*0248:*/ 0x00, /* ........ */
+/* --- new character 'M' (77) starting at offset 0x0249 --- */
+ /*0249:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*024e:*/ 0x63, /* .##...## */
+ /*024f:*/ 0x77, /* .###.### */
+ /*0250:*/ 0x7f, /* .####### */
+ /*0251:*/ 0x6b, /* .##.#.## */
+ /*0252:*/ 0x63, /* .##...## */
+ /*0253:*/ 0x63, /* .##...## */
+ /*0254:*/ 0x63, /* .##...## */
+ /*0255:*/ 0x00, /* ........ */
+/* --- new character 'N' (78) starting at offset 0x0256 --- */
+ /*0256:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*025b:*/ 0x66, /* .##..##. */
+ /*025c:*/ 0x76, /* .###.##. */
+ /*025d:*/ 0x7e, /* .######. */
+ /*025e:*/ 0x7e, /* .######. */
+ /*025f:*/ 0x6e, /* .##.###. */
+ /*0260:*/ 0x66, /* .##..##. */
+ /*0261:*/ 0x66, /* .##..##. */
+ /*0262:*/ 0x00, /* ........ */
+/* --- new character 'O' (79) starting at offset 0x0263 --- */
+ /*0263:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0268:*/ 0x3c, /* ..####.. */
+ /*0269:*/ 0x66, /* .##..##. */
+ /*026a:*/ 0x66, /* .##..##. */
+ /*026b:*/ 0x66, /* .##..##. */
+ /*026c:*/ 0x66, /* .##..##. */
+ /*026d:*/ 0x66, /* .##..##. */
+ /*026e:*/ 0x3c, /* ..####.. */
+ /*026f:*/ 0x00, /* ........ */
+/* --- new character 'P' (80) starting at offset 0x0270 --- */
+ /*0270:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0275:*/ 0x7c, /* .#####.. */
+ /*0276:*/ 0x66, /* .##..##. */
+ /*0277:*/ 0x66, /* .##..##. */
+ /*0278:*/ 0x7c, /* .#####.. */
+ /*0279:*/ 0x60, /* .##..... */
+ /*027a:*/ 0x60, /* .##..... */
+ /*027b:*/ 0x60, /* .##..... */
+ /*027c:*/ 0x00, /* ........ */
+/* --- new character 'Q' (81) starting at offset 0x027d --- */
+ /*027d:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0282:*/ 0x3c, /* ..####.. */
+ /*0283:*/ 0x66, /* .##..##. */
+ /*0284:*/ 0x66, /* .##..##. */
+ /*0285:*/ 0x66, /* .##..##. */
+ /*0286:*/ 0x66, /* .##..##. */
+ /*0287:*/ 0x3c, /* ..####.. */
+ /*0288:*/ 0x0e, /* ....###. */
+ /*0289:*/ 0x00, /* ........ */
+/* --- new character 'R' (82) starting at offset 0x028a --- */
+ /*028a:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*028f:*/ 0x7c, /* .#####.. */
+ /*0290:*/ 0x66, /* .##..##. */
+ /*0291:*/ 0x66, /* .##..##. */
+ /*0292:*/ 0x7c, /* .#####.. */
+ /*0293:*/ 0x78, /* .####... */
+ /*0294:*/ 0x6c, /* .##.##.. */
+ /*0295:*/ 0x66, /* .##..##. */
+ /*0296:*/ 0x00, /* ........ */
+/* --- new character 'S' (83) starting at offset 0x0297 --- */
+ /*0297:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*029c:*/ 0x3c, /* ..####.. */
+ /*029d:*/ 0x66, /* .##..##. */
+ /*029e:*/ 0x60, /* .##..... */
+ /*029f:*/ 0x3c, /* ..####.. */
+ /*02a0:*/ 0x06, /* .....##. */
+ /*02a1:*/ 0x66, /* .##..##. */
+ /*02a2:*/ 0x3c, /* ..####.. */
+ /*02a3:*/ 0x00, /* ........ */
+/* --- new character 'T' (84) starting at offset 0x02a4 --- */
+ /*02a4:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02a9:*/ 0x7e, /* .######. */
+ /*02aa:*/ 0x18, /* ...##... */
+ /*02ab:*/ 0x18, /* ...##... */
+ /*02ac:*/ 0x18, /* ...##... */
+ /*02ad:*/ 0x18, /* ...##... */
+ /*02ae:*/ 0x18, /* ...##... */
+ /*02af:*/ 0x18, /* ...##... */
+ /*02b0:*/ 0x00, /* ........ */
+/* --- new character 'U' (85) starting at offset 0x02b1 --- */
+ /*02b1:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02b6:*/ 0x66, /* .##..##. */
+ /*02b7:*/ 0x66, /* .##..##. */
+ /*02b8:*/ 0x66, /* .##..##. */
+ /*02b9:*/ 0x66, /* .##..##. */
+ /*02ba:*/ 0x66, /* .##..##. */
+ /*02bb:*/ 0x66, /* .##..##. */
+ /*02bc:*/ 0x3c, /* ..####.. */
+ /*02bd:*/ 0x00, /* ........ */
+/* --- new character 'V' (86) starting at offset 0x02be --- */
+ /*02be:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02c3:*/ 0x66, /* .##..##. */
+ /*02c4:*/ 0x66, /* .##..##. */
+ /*02c5:*/ 0x66, /* .##..##. */
+ /*02c6:*/ 0x66, /* .##..##. */
+ /*02c7:*/ 0x66, /* .##..##. */
+ /*02c8:*/ 0x3c, /* ..####.. */
+ /*02c9:*/ 0x18, /* ...##... */
+ /*02ca:*/ 0x00, /* ........ */
+/* --- new character 'W' (87) starting at offset 0x02cb --- */
+ /*02cb:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02d0:*/ 0x63, /* .##...## */
+ /*02d1:*/ 0x63, /* .##...## */
+ /*02d2:*/ 0x63, /* .##...## */
+ /*02d3:*/ 0x6b, /* .##.#.## */
+ /*02d4:*/ 0x7f, /* .####### */
+ /*02d5:*/ 0x77, /* .###.### */
+ /*02d6:*/ 0x63, /* .##...## */
+ /*02d7:*/ 0x00, /* ........ */
+/* --- new character 'X' (88) starting at offset 0x02d8 --- */
+ /*02d8:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02dd:*/ 0x66, /* .##..##. */
+ /*02de:*/ 0x66, /* .##..##. */
+ /*02df:*/ 0x3c, /* ..####.. */
+ /*02e0:*/ 0x18, /* ...##... */
+ /*02e1:*/ 0x3c, /* ..####.. */
+ /*02e2:*/ 0x66, /* .##..##. */
+ /*02e3:*/ 0x66, /* .##..##. */
+ /*02e4:*/ 0x00, /* ........ */
+/* --- new character 'Y' (89) starting at offset 0x02e5 --- */
+ /*02e5:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02ea:*/ 0x66, /* .##..##. */
+ /*02eb:*/ 0x66, /* .##..##. */
+ /*02ec:*/ 0x66, /* .##..##. */
+ /*02ed:*/ 0x3c, /* ..####.. */
+ /*02ee:*/ 0x18, /* ...##... */
+ /*02ef:*/ 0x18, /* ...##... */
+ /*02f0:*/ 0x18, /* ...##... */
+ /*02f1:*/ 0x00, /* ........ */
+/* --- new character 'Z' (90) starting at offset 0x02f2 --- */
+ /*02f2:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02f7:*/ 0x7e, /* .######. */
+ /*02f8:*/ 0x06, /* .....##. */
+ /*02f9:*/ 0x0c, /* ....##.. */
+ /*02fa:*/ 0x18, /* ...##... */
+ /*02fb:*/ 0x30, /* ..##.... */
+ /*02fc:*/ 0x60, /* .##..... */
+ /*02fd:*/ 0x7e, /* .######. */
+ /*02fe:*/ 0x00, /* ........ */
+/* --- new character '[' (91) starting at offset 0x02ff --- */
+ /*02ff:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0304:*/ 0x3c, /* ..####.. */
+ /*0305:*/ 0x30, /* ..##.... */
+ /*0306:*/ 0x30, /* ..##.... */
+ /*0307:*/ 0x30, /* ..##.... */
+ /*0308:*/ 0x30, /* ..##.... */
+ /*0309:*/ 0x30, /* ..##.... */
+ /*030a:*/ 0x3c, /* ..####.. */
+ /*030b:*/ 0x00, /* ........ */
+/* --- new character '\' (92) starting at offset 0x030c --- */
+ /*030c:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0311:*/ 0x00, /* ........ */
+ /*0312:*/ 0xc0, /* ##...... */
+ /*0313:*/ 0x60, /* .##..... */
+ /*0314:*/ 0x30, /* ..##.... */
+ /*0315:*/ 0x18, /* ...##... */
+ /*0316:*/ 0x0c, /* ....##.. */
+ /*0317:*/ 0x06, /* .....##. */
+ /*0318:*/ 0x00, /* ........ */
+/* --- new character ']' (93) starting at offset 0x0319 --- */
+ /*0319:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*031e:*/ 0x3c, /* ..####.. */
+ /*031f:*/ 0x0c, /* ....##.. */
+ /*0320:*/ 0x0c, /* ....##.. */
+ /*0321:*/ 0x0c, /* ....##.. */
+ /*0322:*/ 0x0c, /* ....##.. */
+ /*0323:*/ 0x0c, /* ....##.. */
+ /*0324:*/ 0x3c, /* ..####.. */
+ /*0325:*/ 0x00, /* ........ */
+/* --- new character '^' (94) starting at offset 0x0326 --- */
+ /*0326:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*032b:*/ 0x18, /* ...##... */
+ /*032c:*/ 0x3c, /* ..####.. */
+ /*032d:*/ 0x66, /* .##..##. */
+ /*032e:*/ 0x00, /* ........ */
+ /*032f:*/ 0x00, /* ........ */
+ /*0330:*/ 0x00, /* ........ */
+ /*0331:*/ 0x00, /* ........ */
+ /*0332:*/ 0x00, /* ........ */
+/* --- new character '_' (95) starting at offset 0x0333 --- */
+ /*0333:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0338:*/ 0x00, /* ........ */
+ /*0339:*/ 0x00, /* ........ */
+ /*033a:*/ 0x00, /* ........ */
+ /*033b:*/ 0x00, /* ........ */
+ /*033c:*/ 0x00, /* ........ */
+ /*033d:*/ 0x00, /* ........ */
+ /*033e:*/ 0x00, /* ........ */
+ /*033f:*/ 0xff, /* ######## */
+/* --- new character '`' (96) starting at offset 0x0340 --- */
+ /*0340:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0345:*/ 0x60, /* .##..... */
+ /*0346:*/ 0x30, /* ..##.... */
+ /*0347:*/ 0x18, /* ...##... */
+ /*0348:*/ 0x00, /* ........ */
+ /*0349:*/ 0x00, /* ........ */
+ /*034a:*/ 0x00, /* ........ */
+ /*034b:*/ 0x00, /* ........ */
+ /*034c:*/ 0x00, /* ........ */
+/* --- new character 'a' (97) starting at offset 0x034d --- */
+ /*034d:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0352:*/ 0x00, /* ........ */
+ /*0353:*/ 0x00, /* ........ */
+ /*0354:*/ 0x3c, /* ..####.. */
+ /*0355:*/ 0x06, /* .....##. */
+ /*0356:*/ 0x3e, /* ..#####. */
+ /*0357:*/ 0x66, /* .##..##. */
+ /*0358:*/ 0x3e, /* ..#####. */
+ /*0359:*/ 0x00, /* ........ */
+/* --- new character 'b' (98) starting at offset 0x035a --- */
+ /*035a:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*035f:*/ 0x00, /* ........ */
+ /*0360:*/ 0x60, /* .##..... */
+ /*0361:*/ 0x60, /* .##..... */
+ /*0362:*/ 0x7c, /* .#####.. */
+ /*0363:*/ 0x66, /* .##..##. */
+ /*0364:*/ 0x66, /* .##..##. */
+ /*0365:*/ 0x7c, /* .#####.. */
+ /*0366:*/ 0x00, /* ........ */
+/* --- new character 'c' (99) starting at offset 0x0367 --- */
+ /*0367:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*036c:*/ 0x00, /* ........ */
+ /*036d:*/ 0x00, /* ........ */
+ /*036e:*/ 0x3c, /* ..####.. */
+ /*036f:*/ 0x60, /* .##..... */
+ /*0370:*/ 0x60, /* .##..... */
+ /*0371:*/ 0x60, /* .##..... */
+ /*0372:*/ 0x3c, /* ..####.. */
+ /*0373:*/ 0x00, /* ........ */
+/* --- new character 'd' (100) starting at offset 0x0374 --- */
+ /*0374:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0379:*/ 0x00, /* ........ */
+ /*037a:*/ 0x06, /* .....##. */
+ /*037b:*/ 0x06, /* .....##. */
+ /*037c:*/ 0x3e, /* ..#####. */
+ /*037d:*/ 0x66, /* .##..##. */
+ /*037e:*/ 0x66, /* .##..##. */
+ /*037f:*/ 0x3e, /* ..#####. */
+ /*0380:*/ 0x00, /* ........ */
+/* --- new character 'e' (101) starting at offset 0x0381 --- */
+ /*0381:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0386:*/ 0x00, /* ........ */
+ /*0387:*/ 0x00, /* ........ */
+ /*0388:*/ 0x3c, /* ..####.. */
+ /*0389:*/ 0x66, /* .##..##. */
+ /*038a:*/ 0x7e, /* .######. */
+ /*038b:*/ 0x60, /* .##..... */
+ /*038c:*/ 0x3c, /* ..####.. */
+ /*038d:*/ 0x00, /* ........ */
+/* --- new character 'f' (102) starting at offset 0x038e --- */
+ /*038e:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0393:*/ 0x00, /* ........ */
+ /*0394:*/ 0x0e, /* ....###. */
+ /*0395:*/ 0x18, /* ...##... */
+ /*0396:*/ 0x3e, /* ..#####. */
+ /*0397:*/ 0x18, /* ...##... */
+ /*0398:*/ 0x18, /* ...##... */
+ /*0399:*/ 0x18, /* ...##... */
+ /*039a:*/ 0x00, /* ........ */
+/* --- new character 'g' (103) starting at offset 0x039b --- */
+ /*039b:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03a0:*/ 0x00, /* ........ */
+ /*03a1:*/ 0x00, /* ........ */
+ /*03a2:*/ 0x3e, /* ..#####. */
+ /*03a3:*/ 0x66, /* .##..##. */
+ /*03a4:*/ 0x66, /* .##..##. */
+ /*03a5:*/ 0x3e, /* ..#####. */
+ /*03a6:*/ 0x06, /* .....##. */
+ /*03a7:*/ 0x7c, /* .#####.. */
+/* --- new character 'h' (104) starting at offset 0x03a8 --- */
+ /*03a8:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ad:*/ 0x00, /* ........ */
+ /*03ae:*/ 0x60, /* .##..... */
+ /*03af:*/ 0x60, /* .##..... */
+ /*03b0:*/ 0x7c, /* .#####.. */
+ /*03b1:*/ 0x66, /* .##..##. */
+ /*03b2:*/ 0x66, /* .##..##. */
+ /*03b3:*/ 0x66, /* .##..##. */
+ /*03b4:*/ 0x00, /* ........ */
+/* --- new character 'i' (105) starting at offset 0x03b5 --- */
+ /*03b5:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ba:*/ 0x00, /* ........ */
+ /*03bb:*/ 0x18, /* ...##... */
+ /*03bc:*/ 0x00, /* ........ */
+ /*03bd:*/ 0x38, /* ..###... */
+ /*03be:*/ 0x18, /* ...##... */
+ /*03bf:*/ 0x18, /* ...##... */
+ /*03c0:*/ 0x3c, /* ..####.. */
+ /*03c1:*/ 0x00, /* ........ */
+/* --- new character 'j' (106) starting at offset 0x03c2 --- */
+ /*03c2:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03c7:*/ 0x00, /* ........ */
+ /*03c8:*/ 0x06, /* .....##. */
+ /*03c9:*/ 0x00, /* ........ */
+ /*03ca:*/ 0x06, /* .....##. */
+ /*03cb:*/ 0x06, /* .....##. */
+ /*03cc:*/ 0x06, /* .....##. */
+ /*03cd:*/ 0x06, /* .....##. */
+ /*03ce:*/ 0x3c, /* ..####.. */
+/* --- new character 'k' (107) starting at offset 0x03cf --- */
+ /*03cf:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03d4:*/ 0x00, /* ........ */
+ /*03d5:*/ 0x60, /* .##..... */
+ /*03d6:*/ 0x60, /* .##..... */
+ /*03d7:*/ 0x6c, /* .##.##.. */
+ /*03d8:*/ 0x78, /* .####... */
+ /*03d9:*/ 0x6c, /* .##.##.. */
+ /*03da:*/ 0x66, /* .##..##. */
+ /*03db:*/ 0x00, /* ........ */
+/* --- new character 'l' (108) starting at offset 0x03dc --- */
+ /*03dc:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03e1:*/ 0x00, /* ........ */
+ /*03e2:*/ 0x38, /* ..###... */
+ /*03e3:*/ 0x18, /* ...##... */
+ /*03e4:*/ 0x18, /* ...##... */
+ /*03e5:*/ 0x18, /* ...##... */
+ /*03e6:*/ 0x18, /* ...##... */
+ /*03e7:*/ 0x3c, /* ..####.. */
+ /*03e8:*/ 0x00, /* ........ */
+/* --- new character 'm' (109) starting at offset 0x03e9 --- */
+ /*03e9:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ee:*/ 0x00, /* ........ */
+ /*03ef:*/ 0x00, /* ........ */
+ /*03f0:*/ 0x66, /* .##..##. */
+ /*03f1:*/ 0x7f, /* .####### */
+ /*03f2:*/ 0x7f, /* .####### */
+ /*03f3:*/ 0x6b, /* .##.#.## */
+ /*03f4:*/ 0x63, /* .##...## */
+ /*03f5:*/ 0x00, /* ........ */
+/* --- new character 'n' (110) starting at offset 0x03f6 --- */
+ /*03f6:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03fb:*/ 0x00, /* ........ */
+ /*03fc:*/ 0x00, /* ........ */
+ /*03fd:*/ 0x7c, /* .#####.. */
+ /*03fe:*/ 0x66, /* .##..##. */
+ /*03ff:*/ 0x66, /* .##..##. */
+ /*0400:*/ 0x66, /* .##..##. */
+ /*0401:*/ 0x66, /* .##..##. */
+ /*0402:*/ 0x00, /* ........ */
+/* --- new character 'o' (111) starting at offset 0x0403 --- */
+ /*0403:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0408:*/ 0x00, /* ........ */
+ /*0409:*/ 0x00, /* ........ */
+ /*040a:*/ 0x3c, /* ..####.. */
+ /*040b:*/ 0x66, /* .##..##. */
+ /*040c:*/ 0x66, /* .##..##. */
+ /*040d:*/ 0x66, /* .##..##. */
+ /*040e:*/ 0x3c, /* ..####.. */
+ /*040f:*/ 0x00, /* ........ */
+/* --- new character 'p' (112) starting at offset 0x0410 --- */
+ /*0410:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0415:*/ 0x00, /* ........ */
+ /*0416:*/ 0x00, /* ........ */
+ /*0417:*/ 0x7c, /* .#####.. */
+ /*0418:*/ 0x66, /* .##..##. */
+ /*0419:*/ 0x66, /* .##..##. */
+ /*041a:*/ 0x7c, /* .#####.. */
+ /*041b:*/ 0x60, /* .##..... */
+ /*041c:*/ 0x60, /* .##..... */
+/* --- new character 'q' (113) starting at offset 0x041d --- */
+ /*041d:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0422:*/ 0x00, /* ........ */
+ /*0423:*/ 0x00, /* ........ */
+ /*0424:*/ 0x3e, /* ..#####. */
+ /*0425:*/ 0x66, /* .##..##. */
+ /*0426:*/ 0x66, /* .##..##. */
+ /*0427:*/ 0x3e, /* ..#####. */
+ /*0428:*/ 0x06, /* .....##. */
+ /*0429:*/ 0x06, /* .....##. */
+/* --- new character 'r' (114) starting at offset 0x042a --- */
+ /*042a:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*042f:*/ 0x00, /* ........ */
+ /*0430:*/ 0x00, /* ........ */
+ /*0431:*/ 0x7c, /* .#####.. */
+ /*0432:*/ 0x66, /* .##..##. */
+ /*0433:*/ 0x60, /* .##..... */
+ /*0434:*/ 0x60, /* .##..... */
+ /*0435:*/ 0x60, /* .##..... */
+ /*0436:*/ 0x00, /* ........ */
+/* --- new character 's' (115) starting at offset 0x0437 --- */
+ /*0437:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*043c:*/ 0x00, /* ........ */
+ /*043d:*/ 0x00, /* ........ */
+ /*043e:*/ 0x3e, /* ..#####. */
+ /*043f:*/ 0x60, /* .##..... */
+ /*0440:*/ 0x3c, /* ..####.. */
+ /*0441:*/ 0x06, /* .....##. */
+ /*0442:*/ 0x7c, /* .#####.. */
+ /*0443:*/ 0x00, /* ........ */
+/* --- new character 't' (116) starting at offset 0x0444 --- */
+ /*0444:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0449:*/ 0x00, /* ........ */
+ /*044a:*/ 0x18, /* ...##... */
+ /*044b:*/ 0x7e, /* .######. */
+ /*044c:*/ 0x18, /* ...##... */
+ /*044d:*/ 0x18, /* ...##... */
+ /*044e:*/ 0x18, /* ...##... */
+ /*044f:*/ 0x0e, /* ....###. */
+ /*0450:*/ 0x00, /* ........ */
+/* --- new character 'u' (117) starting at offset 0x0451 --- */
+ /*0451:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0456:*/ 0x00, /* ........ */
+ /*0457:*/ 0x00, /* ........ */
+ /*0458:*/ 0x66, /* .##..##. */
+ /*0459:*/ 0x66, /* .##..##. */
+ /*045a:*/ 0x66, /* .##..##. */
+ /*045b:*/ 0x66, /* .##..##. */
+ /*045c:*/ 0x3e, /* ..#####. */
+ /*045d:*/ 0x00, /* ........ */
+/* --- new character 'v' (118) starting at offset 0x045e --- */
+ /*045e:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0463:*/ 0x00, /* ........ */
+ /*0464:*/ 0x00, /* ........ */
+ /*0465:*/ 0x66, /* .##..##. */
+ /*0466:*/ 0x66, /* .##..##. */
+ /*0467:*/ 0x66, /* .##..##. */
+ /*0468:*/ 0x3c, /* ..####.. */
+ /*0469:*/ 0x18, /* ...##... */
+ /*046a:*/ 0x00, /* ........ */
+/* --- new character 'w' (119) starting at offset 0x046b --- */
+ /*046b:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0470:*/ 0x00, /* ........ */
+ /*0471:*/ 0x00, /* ........ */
+ /*0472:*/ 0x63, /* .##...## */
+ /*0473:*/ 0x6b, /* .##.#.## */
+ /*0474:*/ 0x7f, /* .####### */
+ /*0475:*/ 0x3e, /* ..#####. */
+ /*0476:*/ 0x36, /* ..##.##. */
+ /*0477:*/ 0x00, /* ........ */
+/* --- new character 'x' (120) starting at offset 0x0478 --- */
+ /*0478:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*047d:*/ 0x00, /* ........ */
+ /*047e:*/ 0x00, /* ........ */
+ /*047f:*/ 0x66, /* .##..##. */
+ /*0480:*/ 0x3c, /* ..####.. */
+ /*0481:*/ 0x18, /* ...##... */
+ /*0482:*/ 0x3c, /* ..####.. */
+ /*0483:*/ 0x66, /* .##..##. */
+ /*0484:*/ 0x00, /* ........ */
+/* --- new character 'y' (121) starting at offset 0x0485 --- */
+ /*0485:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*048a:*/ 0x00, /* ........ */
+ /*048b:*/ 0x00, /* ........ */
+ /*048c:*/ 0x66, /* .##..##. */
+ /*048d:*/ 0x66, /* .##..##. */
+ /*048e:*/ 0x66, /* .##..##. */
+ /*048f:*/ 0x3e, /* ..#####. */
+ /*0490:*/ 0x0c, /* ....##.. */
+ /*0491:*/ 0x78, /* .####... */
+/* --- new character 'z' (122) starting at offset 0x0492 --- */
+ /*0492:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0497:*/ 0x00, /* ........ */
+ /*0498:*/ 0x00, /* ........ */
+ /*0499:*/ 0x7e, /* .######. */
+ /*049a:*/ 0x0c, /* ....##.. */
+ /*049b:*/ 0x18, /* ...##... */
+ /*049c:*/ 0x30, /* ..##.... */
+ /*049d:*/ 0x7e, /* .######. */
+ /*049e:*/ 0x00, /* ........ */
+/* --- new character '{' (123) starting at offset 0x049f --- */
+ /*049f:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04a4:*/ 0x1c, /* ...###.. */
+ /*04a5:*/ 0x30, /* ..##.... */
+ /*04a6:*/ 0x30, /* ..##.... */
+ /*04a7:*/ 0x60, /* .##..... */
+ /*04a8:*/ 0x30, /* ..##.... */
+ /*04a9:*/ 0x30, /* ..##.... */
+ /*04aa:*/ 0x1c, /* ...###.. */
+ /*04ab:*/ 0x00, /* ........ */
+/* --- new character '|' (124) starting at offset 0x04ac --- */
+ /*04ac:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04b1:*/ 0x18, /* ...##... */
+ /*04b2:*/ 0x18, /* ...##... */
+ /*04b3:*/ 0x18, /* ...##... */
+ /*04b4:*/ 0x18, /* ...##... */
+ /*04b5:*/ 0x18, /* ...##... */
+ /*04b6:*/ 0x18, /* ...##... */
+ /*04b7:*/ 0x18, /* ...##... */
+ /*04b8:*/ 0x00, /* ........ */
+/* --- new character '}' (125) starting at offset 0x04b9 --- */
+ /*04b9:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04be:*/ 0x38, /* ..###... */
+ /*04bf:*/ 0x0c, /* ....##.. */
+ /*04c0:*/ 0x0c, /* ....##.. */
+ /*04c1:*/ 0x06, /* .....##. */
+ /*04c2:*/ 0x0c, /* ....##.. */
+ /*04c3:*/ 0x0c, /* ....##.. */
+ /*04c4:*/ 0x38, /* ..###... */
+ /*04c5:*/ 0x00, /* ........ */
+/* --- new character '~' (126) starting at offset 0x04c6 --- */
+ /*04c6:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04cb:*/ 0x33, /* ..##..## */
+ /*04cc:*/ 0x7e, /* .######. */
+ /*04cd:*/ 0xcc, /* ##..##.. */
+ /*04ce:*/ 0x00, /* ........ */
+ /*04cf:*/ 0x00, /* ........ */
+ /*04d0:*/ 0x00, /* ........ */
+ /*04d1:*/ 0x00, /* ........ */
+ /*04d2:*/ 0x00, /* ........ */
+/* --- new character '' (127) starting at offset 0x04d3 --- */
+ /*04d3:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04d8:*/ 0x00, /* ........ */
+ /*04d9:*/ 0x08, /* ....#... */
+ /*04da:*/ 0x0c, /* ....##.. */
+ /*04db:*/ 0xfe, /* #######. */
+ /*04dc:*/ 0xfe, /* #######. */
+ /*04dd:*/ 0x0c, /* ....##.. */
+ /*04de:*/ 0x08, /* ....#... */
+ /*04df:*/ 0x00, /* ........ */
+};
+static const uint16_t font_c64_offsets[] = {
+ 0x0000 /* ' ' */,
+ 0x000d /* '!' */,
+ 0x001a /* '"' */,
+ 0x0027 /* '#' */,
+ 0x0034 /* '$' */,
+ 0x0041 /* '%' */,
+ 0x004e /* '&' */,
+ 0x005b /* ''' */,
+ 0x0068 /* '(' */,
+ 0x0075 /* ')' */,
+ 0x0082 /* '*' */,
+ 0x008f /* '+' */,
+ 0x009c /* ',' */,
+ 0x00a9 /* '-' */,
+ 0x00b6 /* '.' */,
+ 0x00c3 /* '/' */,
+ 0x00d0 /* '0' */,
+ 0x00dd /* '1' */,
+ 0x00ea /* '2' */,
+ 0x00f7 /* '3' */,
+ 0x0104 /* '4' */,
+ 0x0111 /* '5' */,
+ 0x011e /* '6' */,
+ 0x012b /* '7' */,
+ 0x0138 /* '8' */,
+ 0x0145 /* '9' */,
+ 0x0152 /* ':' */,
+ 0x015f /* ';' */,
+ 0x016c /* '<' */,
+ 0x0179 /* '=' */,
+ 0x0186 /* '>' */,
+ 0x0193 /* '?' */,
+ 0x01a0 /* '@' */,
+ 0x01ad /* 'A' */,
+ 0x01ba /* 'B' */,
+ 0x01c7 /* 'C' */,
+ 0x01d4 /* 'D' */,
+ 0x01e1 /* 'E' */,
+ 0x01ee /* 'F' */,
+ 0x01fb /* 'G' */,
+ 0x0208 /* 'H' */,
+ 0x0215 /* 'I' */,
+ 0x0222 /* 'J' */,
+ 0x022f /* 'K' */,
+ 0x023c /* 'L' */,
+ 0x0249 /* 'M' */,
+ 0x0256 /* 'N' */,
+ 0x0263 /* 'O' */,
+ 0x0270 /* 'P' */,
+ 0x027d /* 'Q' */,
+ 0x028a /* 'R' */,
+ 0x0297 /* 'S' */,
+ 0x02a4 /* 'T' */,
+ 0x02b1 /* 'U' */,
+ 0x02be /* 'V' */,
+ 0x02cb /* 'W' */,
+ 0x02d8 /* 'X' */,
+ 0x02e5 /* 'Y' */,
+ 0x02f2 /* 'Z' */,
+ 0x02ff /* '[' */,
+ 0x030c /* '\' */,
+ 0x0319 /* ']' */,
+ 0x0326 /* '^' */,
+ 0x0333 /* '_' */,
+ 0x0340 /* '`' */,
+ 0x034d /* 'a' */,
+ 0x035a /* 'b' */,
+ 0x0367 /* 'c' */,
+ 0x0374 /* 'd' */,
+ 0x0381 /* 'e' */,
+ 0x038e /* 'f' */,
+ 0x039b /* 'g' */,
+ 0x03a8 /* 'h' */,
+ 0x03b5 /* 'i' */,
+ 0x03c2 /* 'j' */,
+ 0x03cf /* 'k' */,
+ 0x03dc /* 'l' */,
+ 0x03e9 /* 'm' */,
+ 0x03f6 /* 'n' */,
+ 0x0403 /* 'o' */,
+ 0x0410 /* 'p' */,
+ 0x041d /* 'q' */,
+ 0x042a /* 'r' */,
+ 0x0437 /* 's' */,
+ 0x0444 /* 't' */,
+ 0x0451 /* 'u' */,
+ 0x045e /* 'v' */,
+ 0x046b /* 'w' */,
+ 0x0478 /* 'x' */,
+ 0x0485 /* 'y' */,
+ 0x0492 /* 'z' */,
+ 0x049f /* '{' */,
+ 0x04ac /* '|' */,
+ 0x04b9 /* '}' */,
+ 0x04c6 /* '~' */,
+ 0x04d3 /* '' */,
+};
+const struct fb_font font_c64 = {
+ .height = 8,
+ .ascent = 8,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_c64_data,
+ .charoffs = font_c64_offsets,
+};
diff --git a/src/target/firmware/fb/fb_bw8.c b/src/target/firmware/fb/fb_bw8.c
new file mode 100644
index 00000000..ffb59d81
--- /dev/null
+++ b/src/target/firmware/fb/fb_bw8.c
@@ -0,0 +1,311 @@
+/* utility functions for a black-and-white framebuffer organized
+ as 8-vertically-stacked-pixels per byte. This matches the
+ ST7558 LC Display Controller used on the Motorola C123 */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_bw8.h>
+
+#include <stdio.h> // debugging
+
+void fb_bw8_clear(){
+ int i,n;
+
+ /* bytes to clear */
+ n = (framebuffer->height+7)/8 * framebuffer->width;
+ for(i=0;i<n;i++)
+ fb_bw8->mem[i]=0;
+
+ /* mark everything as dirty */
+ fb_bw8->damage_x1 = 0;
+ fb_bw8->damage_x2 = framebuffer->width;
+ fb_bw8->damage_y1 = 0;
+ fb_bw8->damage_y2 = framebuffer->height;
+}
+
+/* update damage rectangle to include the area
+ x1,y1 (upper left) to x2,y2 (lower right)
+ Note that all pixels *including* x1y2 and x2y2 are
+ marked as dirty */
+static void fb_bw8_update_damage(
+ uint16_t x1,uint16_t y1, /* left upper corner (inclusive) */
+ uint16_t x2,uint16_t y2 /* right lower corner (inclusive) */
+){
+ fb_sanitize_box(&x1,&y1,&x2,&y2);
+
+ x2++; /* see definition of fb_bw8->damage_x2/y2 */
+ y2++;
+
+ /* maybe currently everything is clean? */
+ if(fb_bw8->damage_x1 == fb_bw8->damage_x2 ||
+ fb_bw8->damage_y1 == fb_bw8->damage_y2){
+ fb_bw8->damage_x1 = x1;
+ fb_bw8->damage_y1 = y1;
+ fb_bw8->damage_x2 = x2;
+ fb_bw8->damage_y2 = y2;
+/*
+ printf("%s: was clean! damage now %d %d %d %d\n",
+ __FUNCTION__,fb_bw8->damage_x1,fb_bw8->damage_y1,
+ fb_bw8->damage_x2,fb_bw8->damage_y2);
+*/
+ return;
+ }
+
+ /* grow damage box */
+ if(x1 < fb_bw8->damage_x1)
+ fb_bw8->damage_x1 = x1;
+ if(y1 < fb_bw8->damage_y1)
+ fb_bw8->damage_y1 = y1;
+ if(x2 > fb_bw8->damage_x2)
+ fb_bw8->damage_x2 = x2;
+ if(y2 > fb_bw8->damage_y2)
+ fb_bw8->damage_y2 = y2;
+#if 0
+ printf("%s: damage now %d %d %d %d\n",
+ __FUNCTION__,fb_bw8->damage_x1,fb_bw8->damage_y1,
+ fb_bw8->damage_x2,fb_bw8->damage_y2);
+#endif
+}
+
+static void fb_bw8_line(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2){
+ fb_sanitize_box(&x1,&y1,&x2,&y2);
+ /* FIXME : this is currently unimplemented! */
+}
+
+void fb_bw8_lineto(uint16_t x,uint16_t y){
+ fb_bw8_line(framebuffer->cursor_x,framebuffer->cursor_y,x,y);
+ framebuffer->cursor_x = x;
+ framebuffer->cursor_y = y;
+}
+
+/* depending on color set (add to or_mask) or clear
+ (remove from and_mask) bit number bitnum */
+static void set_pixel(uint8_t *and_mask,
+ uint8_t *or_mask,
+ int bitnum,
+ uint32_t color
+){
+ if(color == FB_COLOR_TRANSP)
+ return;
+ if(color == FB_COLOR_WHITE)
+ *and_mask &= ~(1<<bitnum);
+ else
+ *or_mask |= 1<<bitnum;
+}
+
+static void set_fg_pixel(uint8_t *and_mask,uint8_t *or_mask,int bitnum){
+ set_pixel(and_mask,or_mask,bitnum,framebuffer->fg_color);
+}
+
+static void set_bg_pixel(uint8_t *and_mask,uint8_t *or_mask,int bitnum){
+ set_pixel(and_mask,or_mask,bitnum,framebuffer->bg_color);
+}
+
+static void fb_bw8_box(uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
+{
+ uint16_t y,w;
+ uint8_t *p;
+
+ uint8_t and_mask,or_mask; // filling
+ uint8_t and_mask_side,or_mask_side; // left and right side
+
+ fb_sanitize_box(&x1,&y1,&x2,&y2);
+ fb_bw8_update_damage(x1,y1,x2,y2);
+
+ for(y=y1&0xfff8;y<=y2;y+=8){
+ /* don't clear any pixels (white) */
+ and_mask = and_mask_side = 0xff;
+ or_mask = or_mask_side = 0;
+
+ for(w=0;w<8;w++){ /* check which pixels are affected */
+ if(y+w >= y1 && y+w <= y2){
+ set_bg_pixel(&and_mask,&or_mask,w);
+ set_fg_pixel(&and_mask_side,&or_mask_side,w);
+ }
+
+ if(y+w == y1 || y+w == y2){ /* top and bottom line */
+ set_fg_pixel(&and_mask,&or_mask,w);
+ }
+ }
+
+ p = fb_bw8->mem + (y/8)*framebuffer->width + x1;
+ for(w=x1;w<=x2;w++){
+ if(w == x1 || w == x2)
+ *p = (*p & and_mask_side)|or_mask_side;
+ else
+ *p = (*p & and_mask)|or_mask;
+ p++;
+ }
+ }
+}
+
+/* draw box from cursor to (x,y) */
+void
+fb_bw8_boxto(uint16_t x,uint16_t y){
+ fb_bw8_box(framebuffer->cursor_x,framebuffer->cursor_y,x,y);
+ framebuffer->cursor_x = x;
+ framebuffer->cursor_y = y;
+}
+
+/* this is the most ridiculous function ever, because it has to
+ fiddle with two braindead bitmaps at once, both being
+ organized differently */
+
+/* draw text at current position, with current font and colours up
+ to a width of maxwidth pixels, return pixelwidth consumed */
+
+int
+fb_bw8_putstr(char *str,int maxwidth){
+ const struct fb_font *font = fb_fonts[framebuffer->font];
+ const struct fb_char *fchr;
+
+ int x1,y1,x2,y2; // will become bounding box
+ int w; // 0..7 while building bits per byte
+ int y; // coordinates in display
+ int char_x,char_y; // coordinates in font character
+ int bitmap_x,bitmap_y; // coordinates in character's bitmap
+ int byte_per_line; // depending on character width in font
+ int bitmap_offs,bitmap_bit; // offset inside bitmap, bit number of pixel
+ int fb8_offs; // offset to current pixel in framebuffer
+ uint8_t and_mask,or_mask; // to draw on framebuffer
+ uint8_t *p; // pointer into framebuffer memorya
+ int total_w; // total width
+
+ /* center, if maxwidth < 0 */
+ if (maxwidth < 0) {
+ total_w = 0;
+ /* count width of string */
+ for(p=(uint8_t *)str;*p;p++){
+ fchr = fb_font_get_char(font,*p);
+ if(!fchr) /* FIXME: Does '?' exist in every font? */
+ fchr = fb_font_get_char(font,'?');
+ total_w += fchr->width;
+
+ } // str
+ if (total_w <= framebuffer->width)
+ framebuffer->cursor_x =
+ (framebuffer->width - total_w) >> 1;
+ maxwidth = framebuffer->width;
+ }
+
+ x1 = framebuffer->cursor_x; // first col (incl!)
+ x2 = x1 + maxwidth - 1; // last col (incl!)
+ if(x2 >= framebuffer->width)
+ x2 = framebuffer->width - 1;
+
+ y1 = framebuffer->cursor_y - font->ascent + 1; // first row
+ y2 = y1 + font->height - 1; // last row
+
+#if 0
+ printf("%s: %d %d %d %d\n",__FUNCTION__,x1,y1,x2,y2);
+#endif
+
+ if(y1 < 0) // sanitize in case of overflow
+ y1 = 0;
+ if(y2 >= framebuffer->height)
+ y2 = framebuffer->height - 1;
+
+ fb8_offs = x1 + (y1 & 0xfff8)/8;
+
+ /* iterate over all characters */
+ for(;*str && framebuffer->cursor_x <= x2;str++){
+ fchr = fb_font_get_char(font,*str);
+ if(!fchr) /* FIXME: Does '?' exist in every font? */
+ fchr = fb_font_get_char(font,'?');
+
+ byte_per_line = (fchr->bbox_w+7)/8;;
+
+ /* character pixels, left to right */
+ for(char_x=0;
+ char_x<fchr->width && char_x + framebuffer->cursor_x <= x2;
+ char_x++
+ ){
+ /* character pixels, top to bottom, in stripes
+ of 8 to match LCD RAM organisation */
+ for(y=y1&0xfff8;y<=y2;y+=8){ // display lines
+ /* bitmap coordinates, X= left to right */
+ bitmap_x = char_x - fchr->bbox_x;
+ /* character coords. Y increases from
+ cursor upwards */
+ char_y = framebuffer->cursor_y-y;
+ /* bitmap index = height-(bitmap coords)-1 */
+ bitmap_y = fchr->bbox_h -
+ (char_y - fchr->bbox_y) - 1;
+
+ fb8_offs = framebuffer->cursor_x +
+ char_x + (y/8)*framebuffer->width;
+
+ and_mask = 0xff;
+ or_mask = 0x00;
+
+ /* top to bottom inside of a 8bit column */
+ for(w=0;w<8;w++,bitmap_y++){
+ /* inside drawing area? */
+ if(y+w < y1 || y+w > y2)
+ continue;
+
+ /* outside pixel data of this
+ character? */
+ if(bitmap_x < 0 ||
+ bitmap_x >= fchr->bbox_w ||
+ bitmap_y < 0 ||
+ bitmap_y >= fchr->bbox_h
+ )
+ goto outside_char_bitmap;
+
+ /* check bit in pixel data for
+ this character */
+ bitmap_offs = bitmap_x/8+
+ bitmap_y*byte_per_line;
+ bitmap_bit = 7-(bitmap_x%8);
+
+ /* bit is set */
+ if(fchr->data[bitmap_offs] &
+ (1<<bitmap_bit)){
+ set_fg_pixel(&and_mask,
+ &or_mask,w);
+ } else { // unset, or outside bitmap
+outside_char_bitmap:
+ set_bg_pixel(&and_mask,
+ &or_mask,w);
+ }
+ } // for(w...)
+ /* adjust byte in framebuffer */
+ p = fb_bw8->mem + fb8_offs;
+ *p = ( *p & and_mask ) | or_mask;
+ } // for(y...)
+ } // for(char_x...)
+ framebuffer->cursor_x += char_x;
+ } // str
+
+ x2 = framebuffer->cursor_x;
+ fb_bw8_update_damage(x1,y1,x2,y2);
+ return x2-x1;
+}
+
+int
+fb_bw8_putchar(char c,int maxwidth){
+ char tmp[2];
+ tmp[0]=c;
+ tmp[1]=c;
+ return fb_bw8_putstr(tmp,maxwidth);
+}
diff --git a/src/target/firmware/fb/fb_dummy.c b/src/target/firmware/fb/fb_dummy.c
new file mode 100644
index 00000000..cb053de4
--- /dev/null
+++ b/src/target/firmware/fb/fb_dummy.c
@@ -0,0 +1,70 @@
+/*
+ "hardware" driver for a dummy framebuffer. Used when no
+ display hardware is supported
+ */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <defines.h>
+
+static void
+fb_dummy_init(){
+}
+
+static void
+fb_dummy_clear(){
+}
+
+static void
+fb_dummy_boxto(uint16_t x,uint16_t y){
+ framebuffer->cursor_x = x;
+ framebuffer->cursor_y = y;
+}
+
+static void
+fb_dummy_lineto(uint16_t x,uint16_t y){
+ framebuffer->cursor_x = x;
+ framebuffer->cursor_y = y;
+}
+
+static int
+fb_dummy_putstr(__unused char *c, __unused int maxwidth){
+ return 0;
+}
+
+static void
+fb_dummy_flush(){
+}
+
+struct framebuffer fb_dummy_framebuffer = {
+ .name = "dummyfb",
+ .init = fb_dummy_init,
+ .clear = fb_dummy_clear,
+ .boxto = fb_dummy_boxto,
+ .lineto = fb_dummy_lineto,
+ .putstr = fb_dummy_putstr,
+ .flush = fb_dummy_flush,
+ .width = 128,
+ .height = 64
+};
+
+struct framebuffer *framebuffer = & fb_dummy_framebuffer;
diff --git a/src/target/firmware/fb/fb_rgb332.c b/src/target/firmware/fb/fb_rgb332.c
new file mode 100644
index 00000000..08d64e13
--- /dev/null
+++ b/src/target/firmware/fb/fb_rgb332.c
@@ -0,0 +1,305 @@
+/* utility functions for a color framebuffer organized
+ as one pixel per byte, with bits mapped as RRRGGGBB.
+ This matches the SSD1783 LC Display Controller used
+ on the Motorola C155 */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_rgb332.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void
+fb_rgb332_clear(){
+ int i,n;
+
+ /* bytes to clear */
+ n = framebuffer->height * framebuffer->width;
+ for(i=0;i<n;i++)
+ fb_rgb332->mem[i]=0xff; /* white */
+
+ /* mark everything as dirty */
+ fb_rgb332->damage_x1 = 0;
+ fb_rgb332->damage_x2 = framebuffer->width;
+ fb_rgb332->damage_y1 = 0;
+ fb_rgb332->damage_y2 = framebuffer->height;
+}
+
+/* update damage rectangle to include the area
+ x1,y1 (upper left) to x2,y2 (lower right)
+ Note that all pixels *including* x1y2 and x2y2 are
+ marked as dirty */
+static void
+fb_rgb332_update_damage(
+ uint16_t x1,uint16_t y1, /* left upper corner (inclusive) */
+ uint16_t x2,uint16_t y2 /* right lower corner (inclusive) */
+){
+ fb_sanitize_box(&x1,&y1,&x2,&y2);
+
+ x2++; /* see definition of fb_rgb332->damage_x2/y2 */
+ y2++;
+
+ /* maybe currently everything is clean? */
+ if(fb_rgb332->damage_x1 == fb_rgb332->damage_x2 ||
+ fb_rgb332->damage_y1 == fb_rgb332->damage_y2
+ ){
+ fb_rgb332->damage_x1 = x1;
+ fb_rgb332->damage_y1 = y1;
+ fb_rgb332->damage_x2 = x2;
+ fb_rgb332->damage_y2 = y2;
+ return;
+ }
+
+ /* grow damage box */
+ if(x1 < fb_rgb332->damage_x1)
+ fb_rgb332->damage_x1 = x1;
+ if(y1 < fb_rgb332->damage_y1)
+ fb_rgb332->damage_y1 = y1;
+ if(x2 > fb_rgb332->damage_x2)
+ fb_rgb332->damage_x2 = x2;
+ if(y2 > fb_rgb332->damage_y2)
+ fb_rgb332->damage_y2 = y2;
+#if 0
+ printf("%s: damage now %d %d %d %d\n",
+ __FUNCTION__,fb_rgb332->damage_x1,fb_rgb332->damage_y1,
+ fb_rgb332->damage_x2,fb_rgb332->damage_y2);
+#endif
+}
+
+/* we trust gcc to move this expensive bitshifting out of
+ the loops in the drawing funtcions */
+static uint8_t rgb_to_pixel(uint32_t color){
+ uint8_t ret;
+ ret = (FB_COLOR_TO_R(color) & 0xe0); /* 765 = RRR */
+ ret |= (FB_COLOR_TO_G(color) & 0xe0) >> 3; /* 432 = GGG */
+ ret |= (FB_COLOR_TO_B(color) & 0xc0) >> 6; /* 10 = BB */
+ return ret;
+}
+
+static void set_pix(uint8_t *pixel,uint32_t color){
+ if(color == FB_COLOR_TRANSP)
+ return;
+ *pixel = rgb_to_pixel(color);
+}
+
+static void set_fg(uint8_t *pixel){
+ set_pix(pixel,framebuffer->fg_color);
+}
+
+static void set_bg(uint8_t *pixel){
+ set_pix(pixel,framebuffer->bg_color);
+}
+
+void fb_rgb332_boxto(uint16_t x2,uint16_t y2)
+{
+ uint16_t x1 = framebuffer->cursor_x;
+ uint16_t y1 = framebuffer->cursor_y;
+ int x,y;
+ uint8_t *p;
+
+ framebuffer->cursor_x = x2;
+ framebuffer->cursor_y = y2;
+
+ fb_sanitize_box(&x1,&y1,&x2,&y2);
+ fb_rgb332_update_damage(x1,y1,x2,y2);
+
+ for(y=y1; y<=y2; y++){
+ p = & fb_rgb332->mem[x1 + framebuffer->width * y];
+ for(x=x1;x<=x2;x++){
+ set_bg(p);
+ if(y==y1 || y==y2 || x==x1 || x==x2) /* border */
+ set_fg(p);
+ p++;
+ }
+ }
+}
+
+/* draw a line like Brensenham did... (roughly) */
+void fb_rgb332_lineto(uint16_t x2,uint16_t y2){
+ uint8_t *p,pixel; /* framebuffer pointer */
+ int delta_regular; /* framebuffer offset per step */
+ int delta_step; /* " */
+
+ uint16_t x1 = framebuffer->cursor_x; /* start */
+ uint16_t y1 = framebuffer->cursor_y;
+
+ int t,tmax; /* counter for steps */
+ int err_inc,err_accu=0; /* error delta and accumulator for */
+ /* Brensenham's algorhithm */
+
+ fb_limit_fb_range(&x1,&y1);
+ fb_limit_fb_range(&x2,&y2);
+ fb_rgb332_update_damage(x1,y1,x2,y2);
+
+ framebuffer->cursor_x = x2; /* end pixel */
+ framebuffer->cursor_y = y2;
+
+ /* pointer to first pixel, pixel value in FB memory */
+ p = fb_rgb332->mem + framebuffer->width * y1 + x1;
+ pixel = rgb_to_pixel(framebuffer->fg_color);
+
+ if(abs(x2-x1) >= abs(y2-y1)){ /* shallow line */
+ /* set pointer deltas for directions */
+ delta_regular = 1; /* X */
+ if(x2 < x1)
+ delta_regular = -delta_regular;
+ delta_step = framebuffer->width; /* Y */
+ if(y2 < y1)
+ delta_step = -delta_step;
+ tmax = abs(x2-x1);
+ err_inc = abs(y2-y1);
+ } else { /* steep line */
+ delta_regular = framebuffer->width; /* Y */
+ if(y2 < y1)
+ delta_regular = -delta_regular;
+ delta_step = 1; /* X */
+ if(x2 < x1)
+ delta_step = -1;
+ tmax = abs(y2-y1);
+ err_inc = abs(x2-y1);
+ }
+
+#if 0
+ printf("%s: (%d,%d) -> (%d,%d) step=%d regular=%d err_inc=%d tmax=%d\n",
+ __FUNCTION__,x1,y1,x2,y2,delta_step,delta_regular,err_inc,tmax);
+#endif
+
+ for(t=0;t<=tmax;t++){
+ *p = pixel;
+ err_accu += err_inc;
+ if(err_accu >= tmax){
+ p += delta_step;
+ err_accu -= tmax;
+ }
+ p += delta_regular;
+ }
+}
+
+int fb_rgb332_putstr(char *str,int maxwidth){
+ const struct fb_font *font = fb_fonts[framebuffer->font];
+ const struct fb_char *fchr;
+
+ int x1,y1,x2,y2; // will become bounding box
+ int y; // coordinates in display
+ int char_x=0,char_y; // coordinates in font character
+ int bitmap_x,bitmap_y; // coordinates in character's bitmap
+ int byte_per_line; // depending on character width in font
+ int bitmap_offs,bitmap_bit; // offset inside bitmap, bit number of pixel
+ uint8_t *p,fgpixel,bgpixel,trans; // pointer into framebuffer memory
+ int total_w; // total width
+
+ /* center, if maxwidth < 0 */
+ if (maxwidth < 0) {
+ total_w = 0;
+ /* count width of string */
+ for(p=(uint8_t *)str;*p;p++){
+ fchr = fb_font_get_char(font,*p);
+ if(!fchr) /* FIXME: Does '?' exist in every font? */
+ fchr = fb_font_get_char(font,'?');
+ total_w += fchr->width;
+
+ } // str
+ if (total_w <= framebuffer->width)
+ framebuffer->cursor_x =
+ (framebuffer->width - total_w) >> 1;
+ else
+ framebuffer->cursor_x = 1;
+ maxwidth = framebuffer->width;
+ }
+
+ x1 = framebuffer->cursor_x; // first col (incl!)
+ x2 = x1 + maxwidth - 1; // last col (incl!)
+ if(x2 >= framebuffer->width)
+ x2 = framebuffer->width - 1;
+
+ y1 = framebuffer->cursor_y - font->ascent + 1; // first row
+ y2 = y1 + font->height - 1; // last row
+
+ fgpixel = rgb_to_pixel(framebuffer->fg_color);
+ bgpixel = rgb_to_pixel(framebuffer->bg_color);
+ trans = (framebuffer->bg_color == FB_COLOR_TRANSP);
+
+ if(y1 < 0) // sanitize in case of overflow
+ y1 = 0;
+ if(y2 >= framebuffer->height)
+ y2 = framebuffer->height - 1;
+
+ /* iterate over all characters */
+ for(;*str && framebuffer->cursor_x <= x2;str++){
+ fchr = fb_font_get_char(font,*str);
+ if(!fchr) /* FIXME: Does '?' exist in every font? */
+ fchr = fb_font_get_char(font,'?');
+ if(!fchr)
+ return 0;
+ byte_per_line = (fchr->bbox_w+7)/8;
+
+ for(y=y1;y<=y2;y++){
+ p=fb_rgb332->mem+y*framebuffer->width;
+ p+=framebuffer->cursor_x;
+
+ for(char_x=0;
+ char_x<fchr->width &&
+ char_x+framebuffer->cursor_x <= x2;
+ char_x++
+ ){
+ /* bitmap coordinates, X= left to right */
+ bitmap_x = char_x - fchr->bbox_x;
+ /* character coords. Y increases from
+ cursor upwards */
+ char_y = framebuffer->cursor_y-y;
+ /* bitmap index = height-(bitmap coords)-1 */
+ bitmap_y = fchr->bbox_h -
+ (char_y - fchr->bbox_y) - 1;
+
+ /* outside pixel data of this
+ character? */
+ if(bitmap_x < 0 ||
+ bitmap_x >= fchr->bbox_w ||
+ bitmap_y < 0 ||
+ bitmap_y >= fchr->bbox_h
+ )
+ goto outside_char_bitmap;
+
+ /* check bit in pixel data for
+ this character */
+ bitmap_offs=bitmap_x/8+bitmap_y*byte_per_line;
+ bitmap_bit=7-(bitmap_x%8);
+
+ /* bit is set */
+ if(fchr->data[bitmap_offs]&(1<<bitmap_bit)){
+ *p = fgpixel;
+ } else { // unset, or outside bitmap
+outside_char_bitmap:
+ if (!trans)
+ *p = bgpixel;
+ }
+ p++;
+ } // for(x...)
+ } // for(char_x...)
+ framebuffer->cursor_x += char_x;
+ } // str
+
+ x2 = framebuffer->cursor_x;
+ fb_rgb332_update_damage(x1,y1,x2,y2);
+ return x2-x1;
+}
+
diff --git a/src/target/firmware/fb/fb_s6b33b1x.c b/src/target/firmware/fb/fb_s6b33b1x.c
new file mode 100644
index 00000000..3629a101
--- /dev/null
+++ b/src/target/firmware/fb/fb_s6b33b1x.c
@@ -0,0 +1,193 @@
+/* Framebuffer implementation - combined Sunplus SPCA552E and
+ * Samsung S6B33B1X LCD driver - as used in the Pirelli DP-L10 */
+
+/* (C) 2012 by Steve Markgraf <steve@steve-m.de>
+ *
+ * based on fb_ssd1783.c:
+ * (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_rgb332.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <delay.h>
+#include <memory.h>
+
+#define S6B33B1X_WIDTH 128
+#define S6B33B1X_HEIGHT 128
+#define LCD_INVIS_X_PIXELS 4
+
+#define ARMIO_LATCH_OUT 0xfffe4802
+#define nCS4_ADDR 0x02800000
+
+static uint8_t fb_s6b33b1x_mem[S6B33B1X_WIDTH * S6B33B1X_HEIGHT];
+
+enum s6b33b1x_cmdflag { CMD, DATA, END };
+
+struct s6b33b1x_cmdlist {
+ enum s6b33b1x_cmdflag is_cmd:8; /* 1: is a command, 0: is data, 2: end marker! */
+ uint8_t data; /* 8 bit to send to LC display */
+} __attribute__((packed));
+
+static const struct s6b33b1x_cmdlist
+s6b33b1x_initdata[] = {
+ { CMD, 0x26 }, /* CMD DCDC and AMP ON/OFF set */
+ { DATA, 0x00 }, /* DATA: everything off */
+ { CMD, 0x02 }, /* CMD Oscillation Mode Set */
+ { DATA, 0x00 }, /* DATA: oscillator off */
+ { CMD, 0x2c }, /* CMD Standby Mode off */
+ { CMD, 0x50 }, /* CMD Display off */
+ { CMD, 0x02 }, /* CMD Oscillation Mode Set */
+ { DATA, 0x01 }, /* DATA: oscillator on */
+ { CMD, 0x26 }, /* CMD DCDC and AMP ON/OFF set */
+ { DATA, 0x01 }, /* DATA: Booster 1 on */
+ { CMD, 0x26 }, /* CMD DCDC and AMP ON/OFF set */
+ { DATA, 0x09 }, /* DATA: Booster 1 on, OP-AMP on */
+ { CMD, 0x26 }, /* CMD DCDC and AMP ON/OFF set */
+ { DATA, 0x0b }, /* DATA: Booster 1 + 2 on, OP-AMP on */
+ { CMD, 0x26 }, /* CMD DCDC and AMP ON/OFF set */
+ { DATA, 0x0f }, /* DATA: Booster 1 + 2 + 3 on, OP-AMP on */
+ { CMD, 0x20 }, /* CMD DC-DC Select */
+ { DATA, 0x01 }, /* DATA: step up x1.5 */
+ { CMD, 0x24 }, /* CMD DCDC Clock Division Set */
+ { DATA, 0x0a }, /* DATA: fPCK = fOSC/6 */
+ { CMD, 0x2a }, /* CMD Contrast Control */
+ { DATA, 0x2d }, /* DATA: default contrast */
+ { CMD, 0x30 }, /* CMD Adressing mode set */
+ { DATA, 0x0b }, /* DATA: 65536 color mode */
+ { CMD, 0x10 }, /* CMD Driver output mode set */
+ { DATA, 0x03 }, /* DATA: Display duty: 1/132 */
+ { CMD, 0x34 }, /* CMD N-line inversion set */
+ { DATA, 0x88 }, /* DATA: inversion on, one frame, every 8 blocks */
+ { CMD, 0x40 }, /* CMD Entry mode set */
+ { DATA, 0x00 }, /* DATA: Y address counter mode */
+ { CMD, 0x28 }, /* CMD Temperature Compensation set */
+ { DATA, 0x01 }, /* DATA: slope -0.05%/degC */
+ { CMD, 0x32 }, /* CMD ROW vector mode set */
+ { DATA, 0x01 }, /* DATA: every 2 subgroup */
+ { CMD, 0x51 }, /* CMD Display on */
+ { END, 0x00 }, /* MARKER: end of list */
+};
+
+static void fb_s6b33b1x_send_cmdlist(const struct s6b33b1x_cmdlist *p)
+{
+ while(p->is_cmd != END){
+ writew(p->data, nCS4_ADDR);
+ p++;
+ }
+}
+
+static void fb_spca_write(uint16_t addr, uint16_t val)
+{
+ writew(addr, nCS4_ADDR);
+ writew(val , nCS4_ADDR | 2);
+}
+
+static void fb_spca_init(void)
+{
+ uint16_t reg;
+
+ /* Initialize Sunplus SPCA552E Media Controller for bypass mode */
+ fb_spca_write(0x7e, 0x00); /* internal register access */
+ delay_ms(10);
+ fb_spca_write(0x7a, 0x00); /* keep CPU in reset state */
+ delay_ms(10);
+ fb_spca_write(0x7f, 0x00); /* select main page */
+ delay_ms(5);
+ fb_spca_write(0x72, 0x07); /* don't reshape timing, 16 bit mode */
+ fb_spca_write(0x14, 0x03);
+ fb_spca_write(0x7f, 0x00); /* select main page */
+ delay_ms(5);
+ fb_spca_write(0x06, 0xff);
+ fb_spca_write(0x7f, 0x09);
+ fb_spca_write(0x19, 0x08); /* backlight: 0x08 is on, 0x0c is off */
+ fb_spca_write(0x23, 0x18);
+
+ /* enable bypass mode */
+ reg = readw(ARMIO_LATCH_OUT);
+ reg |= (1 << 7);
+ writew(reg, ARMIO_LATCH_OUT);
+}
+
+static void fb_s6b33b1x_init(void)
+{
+ printf("%s: initializing LCD.\n",__FUNCTION__);
+
+ fb_spca_init();
+ fb_s6b33b1x_send_cmdlist(s6b33b1x_initdata);
+}
+
+static void fb_s6b33b1x_flush(void)
+{
+ int x,y;
+ uint8_t *p;
+ struct s6b33b1x_cmdlist prepare_disp_write_cmds[] = {
+ { CMD, 0x42 }, /* set column address */
+ { DATA, fb_rgb332->damage_x1 + LCD_INVIS_X_PIXELS },
+ { DATA, fb_rgb332->damage_x2 + LCD_INVIS_X_PIXELS - 1 },
+ { CMD, 0x43 }, /* set page address (Y) */
+ { DATA, fb_rgb332->damage_y1 },
+ { DATA, fb_rgb332->damage_y2 - 1 },
+ { END, 0x00 }
+ };
+
+ /* If everything's clean, just return */
+ if(fb_rgb332->damage_x1 == fb_rgb332->damage_x2 ||
+ fb_rgb332->damage_y1 == fb_rgb332->damage_y2) {
+ printf("%s: no damage\n",__FUNCTION__);
+ return;
+ }
+
+ fb_s6b33b1x_send_cmdlist(prepare_disp_write_cmds);
+
+ for(y=fb_rgb332->damage_y1;y<fb_rgb332->damage_y2;y++) {
+ p = & fb_rgb332->mem[y * framebuffer->width]; // start of line
+ p += fb_rgb332->damage_x1; // start of damage area
+
+ for(x=fb_rgb332->damage_x1; x<fb_rgb332->damage_x2; x++) {
+ uint16_t data = rgb332_to_565(*p++);
+ writew(data , nCS4_ADDR | 2);
+ }
+ }
+
+ fb_rgb332->damage_x1 = fb_rgb332->damage_x2 = 0;
+ fb_rgb332->damage_y1 = fb_rgb332->damage_y2 = 0;
+}
+
+static struct framebuffer fb_s6b33b1x_framebuffer = {
+ .name = "s6b33b1x",
+ .init = fb_s6b33b1x_init,
+ .clear = fb_rgb332_clear,
+ .boxto = fb_rgb332_boxto,
+ .lineto = fb_rgb332_lineto,
+ .putstr = fb_rgb332_putstr,
+ .flush = fb_s6b33b1x_flush,
+ .width = S6B33B1X_WIDTH,
+ .height = S6B33B1X_HEIGHT
+};
+
+static struct fb_rgb332 fb_s6b33b1x_rgb332 = {
+ .mem = fb_s6b33b1x_mem
+};
+
+struct framebuffer *framebuffer = &fb_s6b33b1x_framebuffer;
+struct fb_rgb332 *fb_rgb332 = &fb_s6b33b1x_rgb332;
diff --git a/src/target/firmware/fb/fb_ssd1783.c b/src/target/firmware/fb/fb_ssd1783.c
new file mode 100644
index 00000000..cacdce03
--- /dev/null
+++ b/src/target/firmware/fb/fb_ssd1783.c
@@ -0,0 +1,204 @@
+/* Framebuffer implementation - SSD1783 LCD driver for C155 */
+/* Based on ssd1783.c by Steve Markgraf and Harald Welte */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_rgb332.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <delay.h>
+#include <uwire.h>
+#include <calypso/clock.h>
+
+#define SSD1783_WIDTH 98
+#define SSD1783_HEIGHT 67
+#define SSD1783_UWIRE_BITLEN 9
+#define SSD1783_DEV_ID 0
+
+#define LCD_TOP_FREE_ROWS 3
+#define LCD_LEFT_FREE_COLS 0
+#define PIXEL_BYTES 3
+#define FONT_HEIGHT 8
+#define FONT_WIDTH 8
+
+static uint8_t fb_ssd1783_mem[SSD1783_WIDTH * SSD1783_HEIGHT];
+
+enum ssd1783_cmdflag { CMD, DATA, END };
+
+struct ssd1783_cmdlist {
+ enum ssd1783_cmdflag is_cmd:8; /* 1: is a command, 0: is data, 2: end marker! */
+ uint8_t data; /* 8 bit to send to LC display */
+} __attribute__((packed));
+
+static const struct ssd1783_cmdlist
+ssd1783_initdata[] = {
+ { CMD, 0xD1 }, /* CMD set internal oscillator on */
+ { CMD, 0x94 }, /* CMD leave sleep mode */
+ { CMD, 0xbb }, /* CMD Set COM Output Scan Direction: */
+ { DATA, 0x01 }, /* DATA: 01: COM0-79, then COM159-80 */
+/* -------- DIFFERENT FROM ORIGINAL CODE: -------------- */
+/* we use 8bit per pixel packed RGB 332 */
+ { CMD, 0xbc }, /* CMD Set Data Output Scan Direction */
+ { DATA, 0x00 }, /* DATA: column scan, normal rotation, normal display */
+ { DATA, 0x00 }, /* DATA: RGB color arrangement R G B R G B ... */
+/*-->*/ { DATA, 0x01 }, /* DATA: 8 bit per pixel mode MSB <RRRGGGBB> LSB */
+/* --------- /DIFFERENT ---------- */
+ { CMD, 0xce }, /* CMD Set 256 Color Look Up Table LUT */
+ { DATA, 0x00 }, /* DATA red 000 */
+ { DATA, 0x03 }, /* DATA red 001 */
+ { DATA, 0x05 }, /* DATA red 010 */
+ { DATA, 0x07 }, /* DATA red 011 */
+ { DATA, 0x09 }, /* DATA red 100 */
+ { DATA, 0x0b }, /* DATA red 101 */
+ { DATA, 0x0d }, /* DATA red 110 */
+ { DATA, 0x0f }, /* DATA red 111 */
+ { DATA, 0x00 }, /* DATA green 000 */
+ { DATA, 0x03 }, /* DATA green 001 */
+ { DATA, 0x05 }, /* DATA green 010 */
+ { DATA, 0x07 }, /* DATA green 011 */
+ { DATA, 0x09 }, /* DATA green 100 */
+ { DATA, 0x0b }, /* DATA green 101 */
+ { DATA, 0x0d }, /* DATA green 110 */
+ { DATA, 0x0f }, /* DATA green 111 */
+ { DATA, 0x00 }, /* DATA blue 00 */
+ { DATA, 0x05 }, /* DATA blue 01 */
+ { DATA, 0x0a }, /* DATA blue 10 */
+ { DATA, 0x0f }, /* DATA blue 11 */
+ { CMD, 0xca }, /* CMD Set Display Control - Driver Duty Selection */
+ { DATA, 0xff }, // can't find description of the values in the original
+ { DATA, 0x10 }, // display/ssd1783.c in my datasheet :-(
+ { DATA, 0x01 }, //
+ { CMD, 0xab }, /* CMD Set Scroll Start */
+ { DATA, 0x00 }, /* DATA: Starting address at block 0 */
+ { CMD, 0x20 }, /* CMD Set power control register */
+ { DATA, 0x0b }, /* DATA: booster 6x, reference gen. & int regulator */
+ { CMD, 0x81 }, /* CMD Contrast Lvl & Int. Regul. Resistor Ratio */
+ { DATA, 0x29 }, /* DATA: contrast = 0x29 */
+ { DATA, 0x05 }, /* DATA: 0x05 = 0b101 -> 1+R2/R1 = 11.37 */
+ { CMD, 0xa7 }, /* CMD Invert Display */
+ { CMD, 0x82 }, /* CMD Set Temperature Compensation Coefficient */
+ { DATA, 0x00 }, /* DATA: Gradient is -0.10 % / degC */
+ { CMD, 0xfb }, /* CMD Set Biasing Ratio */
+ { DATA, 0x03 }, /* DATA: 1/10 bias */
+ { CMD, 0xf2 }, /* CMD Set Frame Frequency and N-line inversion */
+ { DATA, 0x08 }, /* DATA: 75 Hz (POR) */
+ { DATA, 0x06 }, /* DATA: n-line inversion: 6 lines */
+ { CMD, 0xf7 }, /* CMD Select PWM/FRC Select Full Col./8col mode */
+ { DATA, 0x28 }, /* DATA: always 0x28 */
+ { DATA, 0x8c }, /* DATA: 4bit PWM + 2 bit FRC */
+ { DATA, 0x05 }, /* DATA: full color mode */
+ { CMD, 0xaf }, /* CMD Display On */
+ { END, 0x00 }, /* MARKER: end of list */
+};
+
+static void
+fb_ssd1783_send_cmdlist(const struct ssd1783_cmdlist *p){
+ int i=0;
+ while(p->is_cmd != END){
+ uint16_t sendcmd = p->data;
+ if(p->is_cmd == DATA)
+ sendcmd |= 0x0100; /* 9th bit is cmd/data flag */
+ uwire_xfer(SSD1783_DEV_ID, SSD1783_UWIRE_BITLEN, &sendcmd, NULL);
+ p++;
+ i++;
+ }
+}
+
+static void
+fb_ssd1783_init(void){
+ printf("%s: initializing LCD.\n",__FUNCTION__);
+ calypso_reset_set(RESET_EXT, 0);
+ delay_ms(5);
+ uwire_init();
+ delay_ms(5);
+ fb_ssd1783_send_cmdlist(ssd1783_initdata);
+}
+
+/* somehow the palette is messed up, RRR seems to have the
+ bits reversed! R0 R1 R2 G G G B B ---> R2 R1 R0 G G G B B */
+static uint8_t fix_rrr(uint8_t v){
+ return (v & 0x5f) | (v & 0x80) >> 2 | (v & 0x20) << 2;
+}
+
+static void
+fb_ssd1783_flush(void){
+ int x,y;
+ uint8_t *p;
+ struct ssd1783_cmdlist prepare_disp_write_cmds[] = {
+ { CMD, 0x15 }, /* set column address */
+ { DATA, fb_rgb332->damage_x1 },
+ { DATA, fb_rgb332->damage_x2-1 },
+ { CMD, 0x75 }, /* set page address (Y) */
+ { DATA, fb_rgb332->damage_y1 },
+ { DATA, fb_rgb332->damage_y2-1 },
+ { CMD, 0x5c }, /* enter write display ram mode */
+ { END, 0x00 }
+ };
+ struct ssd1783_cmdlist nop[] = {
+ { CMD, 0x25 }, // NOP command
+ { END, 0x00 }
+ };
+
+ /* If everything's clean, just return */
+ if(fb_rgb332->damage_x1 == fb_rgb332->damage_x2 ||
+ fb_rgb332->damage_y1 == fb_rgb332->damage_y2){
+ printf("%s: no damage\n",__FUNCTION__);
+ return;
+ }
+
+ fb_ssd1783_send_cmdlist(prepare_disp_write_cmds);
+
+ for(y=fb_rgb332->damage_y1;y<fb_rgb332->damage_y2;y++){
+ p = & fb_rgb332->mem[y * framebuffer->width]; // start of line
+ p += fb_rgb332->damage_x1; // start of damage area
+
+ for(x=fb_rgb332->damage_x1;x<fb_rgb332->damage_x2;x++){
+ uint16_t data = 0x0100 | fix_rrr(*p++); // dummy data
+ uwire_xfer(SSD1783_DEV_ID, SSD1783_UWIRE_BITLEN,
+ &data, NULL);
+ }
+ }
+ fb_ssd1783_send_cmdlist(nop);
+
+ fb_rgb332->damage_x1 = fb_rgb332->damage_x2 = 0;
+ fb_rgb332->damage_y1 = fb_rgb332->damage_y2 = 0;
+}
+
+static struct framebuffer fb_ssd1783_framebuffer = {
+ .name = "ssd1783",
+ .init = fb_ssd1783_init,
+ .clear = fb_rgb332_clear,
+ .boxto = fb_rgb332_boxto,
+ .lineto = fb_rgb332_lineto,
+ .putstr = fb_rgb332_putstr,
+ .flush = fb_ssd1783_flush,
+ .width = SSD1783_WIDTH,
+ .height = SSD1783_HEIGHT
+};
+
+static struct fb_rgb332 fb_ssd1783_rgb332 = {
+ .mem = fb_ssd1783_mem
+};
+
+struct framebuffer *framebuffer = &fb_ssd1783_framebuffer;
+struct fb_rgb332 *fb_rgb332 = &fb_ssd1783_rgb332;
diff --git a/src/target/firmware/fb/fb_ssd1963.c b/src/target/firmware/fb/fb_ssd1963.c
new file mode 100644
index 00000000..361434e4
--- /dev/null
+++ b/src/target/firmware/fb/fb_ssd1963.c
@@ -0,0 +1,196 @@
+/* Framebuffer implementation - SSD1963 (S1D15G14 clone) LCD driver for J100i */
+/* Based on ssd1963.c by Steve Markgraf and Harald Welte */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ * (C) 2012 by Steve Markgraf <steve@steve-m.de>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_rgb332.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <delay.h>
+#include <uwire.h>
+#include <calypso/clock.h>
+
+#define SSD1963_WIDTH 96
+#define SSD1963_HEIGHT 64
+#define SSD1963_UWIRE_BITLEN 9
+#define SSD1963_DEV_ID 0
+
+static uint8_t fb_ssd1963_mem[SSD1963_WIDTH * SSD1963_HEIGHT];
+
+enum ssd1963_cmdflag { CMD, DATA, END };
+
+struct ssd1963_cmdlist {
+ enum ssd1963_cmdflag is_cmd:8; /* 1: is a command, 0: is data, 2: end marker! */
+ uint8_t data; /* 8 bit to send to LC display */
+} __attribute__((packed));
+
+static const struct ssd1963_cmdlist
+ssd1963_initdata[] = {
+ { CMD, 0xb6 }, /* CMD Display Control, set panel parameters */
+ { DATA, 0x4b },
+ { DATA, 0xf1 },
+ { DATA, 0x40 },
+ { DATA, 0x40 },
+ { DATA, 0x00 },
+ { DATA, 0x8c },
+ { DATA, 0x00 },
+ { CMD, 0x3a }, /* CMD Set pixel format */
+ { DATA, 0x02 }, /* DATA: 8 bit per pixel */
+ { CMD, 0x2d }, /* Colour set, RGB332 -> RGB 565 mapping */
+ { DATA, 0x00 }, /* DATA red 000 */
+ { DATA, 0x04 }, /* DATA red 001 */
+ { DATA, 0x09 }, /* DATA red 010 */
+ { DATA, 0x0d }, /* DATA red 011 */
+ { DATA, 0x12 }, /* DATA red 100 */
+ { DATA, 0x16 }, /* DATA red 101 */
+ { DATA, 0x1b }, /* DATA red 110 */
+ { DATA, 0x1f }, /* DATA red 111 */
+ { DATA, 0x00 }, /* Those bytes are probably a second palette */
+ { DATA, 0x00 }, /* for an unused powersaving mode with reduced colors */
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 }, /* DATA green 000 */
+ { DATA, 0x09 }, /* DATA green 001 */
+ { DATA, 0x12 }, /* DATA green 010 */
+ { DATA, 0x1b }, /* DATA green 011 */
+ { DATA, 0x24 }, /* DATA green 100 */
+ { DATA, 0x2d }, /* DATA green 101 */
+ { DATA, 0x36 }, /* DATA green 110 */
+ { DATA, 0x3f }, /* DATA green 111 */
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 }, /* DATA blue 00 */
+ { DATA, 0x0a }, /* DATA blue 01 */
+ { DATA, 0x15 }, /* DATA blue 10 */
+ { DATA, 0x1f }, /* DATA blue 11 */
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { DATA, 0x00 },
+ { CMD, 0x11 }, /* CMD Exit sleep mode*/
+ { CMD, 0xba }, /* CMD Set contrast/Electronic Volume Control */
+ { DATA, 0x5b }, /* DATA: */
+ { DATA, 0x84 }, /* DATA: */
+ { CMD, 0x36 }, /* CMD Memory access control */
+ { DATA, 0x00 }, /* DATA: */
+ { CMD, 0x13 }, /* CMD Enter normal mode */
+ { CMD, 0x29 }, /* CMD Set display on */
+ { END, 0x00 }, /* MARKER: end of list */
+};
+
+static void
+fb_ssd1963_send_cmdlist(const struct ssd1963_cmdlist *p) {
+ int i=0;
+ while(p->is_cmd != END){
+ uint16_t sendcmd = p->data;
+ if(p->is_cmd == DATA)
+ sendcmd |= 0x0100; /* 9th bit is cmd/data flag */
+ uwire_xfer(SSD1963_DEV_ID, SSD1963_UWIRE_BITLEN, &sendcmd, NULL);
+ p++;
+ i++;
+ }
+}
+
+static void
+fb_ssd1963_init(void){
+ printf("%s: initializing LCD.\n",__FUNCTION__);
+ calypso_reset_set(RESET_EXT, 0);
+ delay_ms(5);
+ uwire_init();
+ delay_ms(5);
+ fb_ssd1963_send_cmdlist(ssd1963_initdata);
+}
+
+static void
+fb_ssd1963_flush(void){
+ int x,y;
+ uint8_t *p;
+ struct ssd1963_cmdlist prepare_disp_write_cmds[] = {
+ { CMD, 0x2a }, /* set column address */
+ { DATA, fb_rgb332->damage_x1 },
+ { DATA, fb_rgb332->damage_x2-1 },
+ { CMD, 0x2b }, /* set page address (Y) */
+ { DATA, fb_rgb332->damage_y1 },
+ { DATA, fb_rgb332->damage_y2-1 },
+ { CMD, 0x2c }, /* enter write display ram mode */
+ { END, 0x00 }
+ };
+ struct ssd1963_cmdlist nop[] = {
+ { CMD, 0x00 }, // NOP command
+ { END, 0x00 }
+ };
+
+ /* If everything's clean, just return */
+ if(fb_rgb332->damage_x1 == fb_rgb332->damage_x2 ||
+ fb_rgb332->damage_y1 == fb_rgb332->damage_y2) {
+ printf("%s: no damage\n",__FUNCTION__);
+ return;
+ }
+
+ fb_ssd1963_send_cmdlist(prepare_disp_write_cmds);
+
+ for(y=fb_rgb332->damage_y1;y<fb_rgb332->damage_y2;y++) {
+ p = & fb_rgb332->mem[y * framebuffer->width]; // start of line
+ p += fb_rgb332->damage_x1; // start of damage area
+
+ for(x=fb_rgb332->damage_x1;x<fb_rgb332->damage_x2;x++) {
+ uint16_t data = 0x0100 | *p++;
+ uwire_xfer(SSD1963_DEV_ID, SSD1963_UWIRE_BITLEN,
+ &data, NULL);
+ }
+ }
+ fb_ssd1963_send_cmdlist(nop);
+
+ fb_rgb332->damage_x1 = fb_rgb332->damage_x2 = 0;
+ fb_rgb332->damage_y1 = fb_rgb332->damage_y2 = 0;
+}
+
+static struct framebuffer fb_ssd1963_framebuffer = {
+ .name = "ssd1963",
+ .init = fb_ssd1963_init,
+ .clear = fb_rgb332_clear,
+ .boxto = fb_rgb332_boxto,
+ .lineto = fb_rgb332_lineto,
+ .putstr = fb_rgb332_putstr,
+ .flush = fb_ssd1963_flush,
+ .width = SSD1963_WIDTH,
+ .height = SSD1963_HEIGHT
+};
+
+static struct fb_rgb332 fb_ssd1963_rgb332 = {
+ .mem = fb_ssd1963_mem
+};
+
+struct framebuffer *framebuffer = &fb_ssd1963_framebuffer;
+struct fb_rgb332 *fb_rgb332 = &fb_ssd1963_rgb332;
diff --git a/src/target/firmware/fb/fb_st7558.c b/src/target/firmware/fb/fb_st7558.c
new file mode 100644
index 00000000..fdcd38fb
--- /dev/null
+++ b/src/target/firmware/fb/fb_st7558.c
@@ -0,0 +1,132 @@
+/* Framebuffer implementation - ST1783 LCD driver for C123 */
+/* Based on st7558.c by Harald Welte */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_bw8.h>
+
+#include <i2c.h>
+#include <calypso/clock.h>
+#include <delay.h>
+
+#include <stdio.h>
+
+/* Sitronix ST7558 LCD Driver for OSMOCOM framebuffer interface. */
+/* (c) 2010 Christian Vogel <vogelchr@vogel.cx> */
+/* Based on the initial LCD driver by Harald Welte */
+
+#define CONTROL_RS_CMD
+
+#define ST7558_SLAVE_ADDR 0x3c
+#define ST7558_CMD_ADDR 0x00
+#define ST7558_RAM_ADDR 0x40
+
+#define ST7558_WIDTH 96 /* in pixels */
+#define ST7558_HEIGHT 65
+
+#define I2C_MAX_TRANSFER 16
+
+static uint8_t
+fb_st7558_mem[ST7558_WIDTH * ((ST7558_HEIGHT+7)/8)];
+
+/* setup as initially proposed by Harald in st7558.c */
+static const uint8_t st7558_setup[] = {
+ 0x2e, /* ext. display control, set mirror X, set mirror Y*/
+ 0x21, /* function set, enable extended instruction mode */
+ 0x12, /* bias system BS[2,1,0] = [0,1,0] */
+ 0xc0, /* set V_OP (V_OP6 = 1, V_OP[5:0] = 0) */
+ 0x0b, /* booster stages PC1=1, PC0=1 */
+ 0x20, /* function set, disable extended instruction mode */
+ 0x11, /* V_LCD L/H select, PRS=1 */
+ 0x00, /* NOP */
+ 0x0c, /* normal video mode */
+ 0x40, /* set X address to 0 */
+ 0x80 /* set Y address to 0 */
+};
+
+
+static void
+fb_st7558_init(){
+ calypso_reset_set(RESET_EXT, 0);
+ i2c_init(0,0);
+
+ /* initialize controller */
+ i2c_write(ST7558_SLAVE_ADDR,ST7558_CMD_ADDR,1,
+ st7558_setup,sizeof(st7558_setup));
+}
+
+static void
+fb_st7558_flush(){
+ uint16_t x;
+ int page,chunksize,nbytes;
+ uint8_t *p;
+ uint8_t cmd[2];
+
+ if(fb_bw8->damage_y1 == fb_bw8->damage_y2 ||
+ fb_bw8->damage_x1 == fb_bw8->damage_x2)
+ return; /* nothing to update */
+
+ /* update display in stripes of 8 rows, called "pages" */
+ for(page=fb_bw8->damage_y1 >> 3;page <= fb_bw8->damage_y2>>3;page++){
+ /* base offset in RAM framebuffer */
+ x = fb_bw8->damage_x1;
+ nbytes = fb_bw8->damage_x2 - fb_bw8->damage_x1;
+ p = fb_bw8->mem + (page * framebuffer->width + x);
+
+ /* i2c fifo can only handle a maximum of 16 bytes */
+ while(nbytes){
+ cmd[0]=0x40 | page; /* Set Y address of RAM. */
+ cmd[1]=0x80 | x;
+ chunksize = nbytes > I2C_MAX_TRANSFER ? I2C_MAX_TRANSFER : nbytes;
+
+ i2c_write(ST7558_SLAVE_ADDR,ST7558_CMD_ADDR,1,cmd,sizeof(cmd));
+ i2c_write(ST7558_SLAVE_ADDR,ST7558_RAM_ADDR,1,p,chunksize);
+
+ nbytes -= chunksize;
+ p+=I2C_MAX_TRANSFER;
+ x+=I2C_MAX_TRANSFER;
+ }
+ }
+
+ /* mark current buffer as unmodified! */
+ fb_bw8->damage_x1 = fb_bw8->damage_x2 = 0;
+ fb_bw8->damage_y1 = fb_bw8->damage_y2 = 0;
+}
+
+static struct framebuffer fb_st7558_framebuffer = {
+ .name = "st7558",
+ .init = fb_st7558_init,
+ .clear = fb_bw8_clear,
+ .boxto = fb_bw8_boxto,
+ .lineto = fb_bw8_lineto,
+ .putstr = fb_bw8_putstr,
+ .flush = fb_st7558_flush,
+ .width = ST7558_WIDTH,
+ .height = ST7558_HEIGHT
+};
+
+static struct fb_bw8 fb_st7558_bw8 = {
+ .mem = fb_st7558_mem
+};
+
+struct framebuffer *framebuffer = &fb_st7558_framebuffer;
+struct fb_bw8 *fb_bw8 = &fb_st7558_bw8;
diff --git a/src/target/firmware/fb/fb_td014.c b/src/target/firmware/fb/fb_td014.c
new file mode 100644
index 00000000..c7bde0ca
--- /dev/null
+++ b/src/target/firmware/fb/fb_td014.c
@@ -0,0 +1,150 @@
+/* Framebuffer implementation - Toppoly TD014 LCD driver for Motorola C139/40 */
+/* Based on td014.c by Steve Markgraf and Harald Welte */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ * (C) 2012 by Steve Markgraf <steve@steve-m.de>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+#include <fb/fb_rgb332.h>
+
+#include <stdint.h>
+#include <stdio.h>
+#include <delay.h>
+#include <uwire.h>
+#include <calypso/clock.h>
+
+#define TD014_WIDTH 96
+#define TD014_HEIGHT 64
+#define TD014_UWIRE_BITLEN 9
+#define TD014_DEV_ID 0
+
+static uint8_t fb_td014_mem[TD014_WIDTH * TD014_HEIGHT];
+
+enum td014_cmdflag { CMD, DATA, END };
+
+struct td014_cmdlist {
+ enum td014_cmdflag is_cmd:8; /* 1: is a command, 0: is data, 2: end marker! */
+ uint8_t data; /* 8 bit to send to LC display */
+} __attribute__((packed));
+
+static const struct td014_cmdlist
+td014_initdata[] = {
+ { CMD, 0x3f },
+ { DATA, 0x01 },
+ { CMD, 0x20 },
+ { DATA, 0x03 },
+ { CMD, 0x31 },
+ { DATA, 0x03 },
+ { END, 0x00 }, /* MARKER: end of list */
+};
+
+static void
+fb_td014_send_cmdlist(const struct td014_cmdlist *p) {
+ int i=0;
+ while(p->is_cmd != END){
+ uint16_t sendcmd = p->data;
+ if(p->is_cmd == DATA)
+ sendcmd |= 0x0100; /* 9th bit is cmd/data flag */
+ uwire_xfer(TD014_DEV_ID, TD014_UWIRE_BITLEN, &sendcmd, NULL);
+ p++;
+ i++;
+ }
+}
+
+static void
+fb_td014_init(void) {
+ printf("%s: initializing LCD.\n",__FUNCTION__);
+ calypso_reset_set(RESET_EXT, 0);
+ delay_ms(5);
+ uwire_init();
+ delay_ms(5);
+
+ fb_td014_send_cmdlist(td014_initdata);
+}
+
+static void
+fb_td014_flush(void) {
+ int x,y;
+ uint8_t *p;
+ struct td014_cmdlist prepare_disp_write_cmds[] = {
+ { CMD, 0x10 },
+ { DATA, fb_rgb332->damage_x1 },
+ { CMD, 0x11 },
+ { DATA, fb_rgb332->damage_y1 },
+ { CMD, 0x12 },
+ { DATA, fb_rgb332->damage_x2-1 },
+ { CMD, 0x13 },
+ { DATA, fb_rgb332->damage_y2-1 },
+ { CMD, 0x14 },
+ { DATA, fb_rgb332->damage_x1 },
+ { CMD, 0x15 },
+ { DATA, fb_rgb332->damage_y1 },
+ { END, 0x00 }
+ };
+
+ /* If everything's clean, just return */
+ if(fb_rgb332->damage_x1 == fb_rgb332->damage_x2 ||
+ fb_rgb332->damage_y1 == fb_rgb332->damage_y2) {
+ printf("%s: no damage\n",__FUNCTION__);
+ return;
+ }
+
+ fb_td014_send_cmdlist(prepare_disp_write_cmds);
+
+ for(y=fb_rgb332->damage_y1;y<fb_rgb332->damage_y2;y++) {
+ p = & fb_rgb332->mem[y * framebuffer->width]; // start of line
+ p += fb_rgb332->damage_x1; // start of damage area
+
+ for(x=fb_rgb332->damage_x1; x<fb_rgb332->damage_x2; x++) {
+ uint16_t pixel = rgb332_to_565(*p++);
+ uint16_t data = 0x0100 | (pixel >> 8);
+
+ uwire_xfer(TD014_DEV_ID, TD014_UWIRE_BITLEN,
+ &data, NULL);
+
+ data = 0x0100 | (pixel & 0xff);
+ uwire_xfer(TD014_DEV_ID, TD014_UWIRE_BITLEN,
+ &data, NULL);
+ }
+ }
+
+ fb_rgb332->damage_x1 = fb_rgb332->damage_x2 = 0;
+ fb_rgb332->damage_y1 = fb_rgb332->damage_y2 = 0;
+}
+
+static struct framebuffer fb_td014_framebuffer = {
+ .name = "td014",
+ .init = fb_td014_init,
+ .clear = fb_rgb332_clear,
+ .boxto = fb_rgb332_boxto,
+ .lineto = fb_rgb332_lineto,
+ .putstr = fb_rgb332_putstr,
+ .flush = fb_td014_flush,
+ .width = TD014_WIDTH,
+ .height = TD014_HEIGHT
+};
+
+static struct fb_rgb332 fb_td014_rgb332 = {
+ .mem = fb_td014_mem
+};
+
+struct framebuffer *framebuffer = &fb_td014_framebuffer;
+struct fb_rgb332 *fb_rgb332 = &fb_td014_rgb332;
diff --git a/src/target/firmware/fb/font.c b/src/target/firmware/fb/font.c
new file mode 100644
index 00000000..18c1bfe9
--- /dev/null
+++ b/src/target/firmware/fb/font.c
@@ -0,0 +1,59 @@
+/* Font Handling - Utility Functions */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/font.h>
+
+/* what fonts are linked in? */
+extern const struct fb_font font_4x6;
+extern const struct fb_font font_5x8;
+extern const struct fb_font font_helvR08;
+extern const struct fb_font font_helvR14;
+//extern const struct fb_font font_helvR24;
+//extern const struct fb_font font_helvB08;
+extern const struct fb_font font_helvB14;
+// extern const struct fb_font font_helvB24;
+extern const struct fb_font font_c64;
+extern const struct fb_font font_symbols;
+
+const struct fb_font *fb_fonts[]={
+// &font_4x6,
+// &font_5x8,
+ &font_helvR08,
+// &font_helvR14,
+// &font_helvR24,
+// &font_helvB08,
+ &font_helvB14,
+// &font_helvB24,
+ &font_c64,
+ &font_symbols,
+};
+
+const struct fb_char *
+fb_font_get_char(const struct fb_font *fnt,unsigned char c){
+ if(c < fnt->firstchar || c > fnt->lastchar)
+ return NULL;
+ uint16_t offs = fnt->charoffs[c-fnt->firstchar];
+ if(offs == FB_FONT_NOCHAR)
+ return NULL;
+ return (struct fb_char *)(fnt->chardata + offs);
+}
+
diff --git a/src/target/firmware/fb/framebuffer.c b/src/target/firmware/fb/framebuffer.c
new file mode 100644
index 00000000..ab547694
--- /dev/null
+++ b/src/target/firmware/fb/framebuffer.c
@@ -0,0 +1,28 @@
+/* Framebuffer - Utility Functions */
+
+/* (C) 2010 by Christian Vogel <vogelchr@vogel.cx>
+ *
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <fb/framebuffer.h>
+
+/* currently everything's inline in framebuffer .h */
+
+
+
diff --git a/src/target/firmware/fb/helvB08.c b/src/target/firmware/fb/helvB08.c
new file mode 100644
index 00000000..97dd92ca
--- /dev/null
+++ b/src/target/firmware/fb/helvB08.c
@@ -0,0 +1,833 @@
+#include <fb/font.h>
+static const uint8_t font_helvB08_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 2, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 3, 2, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0xc0, /* ##...... */
+ /*000c:*/ 0xc0, /* ##...... */
+ /*000d:*/ 0xc0, /* ##...... */
+ /*000e:*/ 0x80, /* #....... */
+ /*000f:*/ 0x00, /* ........ */
+ /*0010:*/ 0x80, /* #....... */
+ /*0011:*/ 0x80, /* #....... */
+/* --- new character quotedbl (34) starting at offset 0x0012 --- */
+ /*0012:*/ 4, 3, 2, 0, 4, /* width and bbox (w,h,x,y) */
+ /*0017:*/ 0xa0, /* #.#..... */
+ /*0018:*/ 0xa0, /* #.#..... */
+/* --- new character numbersign (35) starting at offset 0x0019 --- */
+ /*0019:*/ 5, 5, 6, -1, 0, /* width and bbox (w,h,x,y) */
+ /*001e:*/ 0x50, /* .#.#.... */
+ /*001f:*/ 0xf8, /* #####... */
+ /*0020:*/ 0x50, /* .#.#.... */
+ /*0021:*/ 0xf8, /* #####... */
+ /*0022:*/ 0xa0, /* #.#..... */
+ /*0023:*/ 0xa0, /* #.#..... */
+/* --- new character dollar (36) starting at offset 0x0024 --- */
+ /*0024:*/ 5, 4, 8, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0029:*/ 0x20, /* ..#..... */
+ /*002a:*/ 0x70, /* .###.... */
+ /*002b:*/ 0xc0, /* ##...... */
+ /*002c:*/ 0xe0, /* ###..... */
+ /*002d:*/ 0x70, /* .###.... */
+ /*002e:*/ 0x30, /* ..##.... */
+ /*002f:*/ 0xe0, /* ###..... */
+ /*0030:*/ 0x40, /* .#...... */
+/* --- new character percent (37) starting at offset 0x0031 --- */
+ /*0031:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0036:*/ 0x68, /* .##.#... */
+ /*0037:*/ 0xb0, /* #.##.... */
+ /*0038:*/ 0xe0, /* ###..... */
+ /*0039:*/ 0x38, /* ..###... */
+ /*003a:*/ 0x68, /* .##.#... */
+ /*003b:*/ 0xb0, /* #.##.... */
+/* --- new character ampersand (38) starting at offset 0x003c --- */
+ /*003c:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0041:*/ 0x70, /* .###.... */
+ /*0042:*/ 0x50, /* .#.#.... */
+ /*0043:*/ 0x60, /* .##..... */
+ /*0044:*/ 0xf8, /* #####... */
+ /*0045:*/ 0xd0, /* ##.#.... */
+ /*0046:*/ 0x68, /* .##.#... */
+/* --- new character quotesingle (39) starting at offset 0x0047 --- */
+ /*0047:*/ 3, 1, 3, 1, 5, /* width and bbox (w,h,x,y) */
+ /*004c:*/ 0x80, /* #....... */
+ /*004d:*/ 0x80, /* #....... */
+ /*004e:*/ 0x80, /* #....... */
+/* --- new character parenleft (40) starting at offset 0x004f --- */
+ /*004f:*/ 3, 2, 8, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0054:*/ 0x40, /* .#...... */
+ /*0055:*/ 0x40, /* .#...... */
+ /*0056:*/ 0x80, /* #....... */
+ /*0057:*/ 0x80, /* #....... */
+ /*0058:*/ 0x80, /* #....... */
+ /*0059:*/ 0x80, /* #....... */
+ /*005a:*/ 0x40, /* .#...... */
+ /*005b:*/ 0x40, /* .#...... */
+/* --- new character parenright (41) starting at offset 0x005c --- */
+ /*005c:*/ 3, 2, 8, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0061:*/ 0x80, /* #....... */
+ /*0062:*/ 0x80, /* #....... */
+ /*0063:*/ 0x40, /* .#...... */
+ /*0064:*/ 0x40, /* .#...... */
+ /*0065:*/ 0x40, /* .#...... */
+ /*0066:*/ 0x40, /* .#...... */
+ /*0067:*/ 0x80, /* #....... */
+ /*0068:*/ 0x80, /* #....... */
+/* --- new character asterisk (42) starting at offset 0x0069 --- */
+ /*0069:*/ 3, 3, 3, 0, 3, /* width and bbox (w,h,x,y) */
+ /*006e:*/ 0x40, /* .#...... */
+ /*006f:*/ 0xe0, /* ###..... */
+ /*0070:*/ 0x40, /* .#...... */
+/* --- new character plus (43) starting at offset 0x0071 --- */
+ /*0071:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0076:*/ 0x20, /* ..#..... */
+ /*0077:*/ 0x20, /* ..#..... */
+ /*0078:*/ 0xf0, /* ####.... */
+ /*0079:*/ 0x20, /* ..#..... */
+ /*007a:*/ 0x20, /* ..#..... */
+/* --- new character comma (44) starting at offset 0x007b --- */
+ /*007b:*/ 2, 2, 3, -1, -1, /* width and bbox (w,h,x,y) */
+ /*0080:*/ 0x40, /* .#...... */
+ /*0081:*/ 0x40, /* .#...... */
+ /*0082:*/ 0x80, /* #....... */
+/* --- new character hyphen (45) starting at offset 0x0083 --- */
+ /*0083:*/ 4, 3, 1, 0, 2, /* width and bbox (w,h,x,y) */
+ /*0088:*/ 0xe0, /* ###..... */
+/* --- new character period (46) starting at offset 0x0089 --- */
+ /*0089:*/ 2, 1, 2, 0, 0, /* width and bbox (w,h,x,y) */
+ /*008e:*/ 0x80, /* #....... */
+ /*008f:*/ 0x80, /* #....... */
+/* --- new character slash (47) starting at offset 0x0090 --- */
+ /*0090:*/ 3, 3, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0095:*/ 0x20, /* ..#..... */
+ /*0096:*/ 0x20, /* ..#..... */
+ /*0097:*/ 0x40, /* .#...... */
+ /*0098:*/ 0x40, /* .#...... */
+ /*0099:*/ 0x80, /* #....... */
+ /*009a:*/ 0x80, /* #....... */
+/* --- new character zero (48) starting at offset 0x009b --- */
+ /*009b:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00a0:*/ 0x60, /* .##..... */
+ /*00a1:*/ 0xd0, /* ##.#.... */
+ /*00a2:*/ 0xd0, /* ##.#.... */
+ /*00a3:*/ 0xd0, /* ##.#.... */
+ /*00a4:*/ 0xd0, /* ##.#.... */
+ /*00a5:*/ 0x60, /* .##..... */
+/* --- new character one (49) starting at offset 0x00a6 --- */
+ /*00a6:*/ 5, 3, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ab:*/ 0x20, /* ..#..... */
+ /*00ac:*/ 0xe0, /* ###..... */
+ /*00ad:*/ 0x60, /* .##..... */
+ /*00ae:*/ 0x60, /* .##..... */
+ /*00af:*/ 0x60, /* .##..... */
+ /*00b0:*/ 0x60, /* .##..... */
+/* --- new character two (50) starting at offset 0x00b1 --- */
+ /*00b1:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00b6:*/ 0x60, /* .##..... */
+ /*00b7:*/ 0xb0, /* #.##.... */
+ /*00b8:*/ 0x30, /* ..##.... */
+ /*00b9:*/ 0x60, /* .##..... */
+ /*00ba:*/ 0xc0, /* ##...... */
+ /*00bb:*/ 0xf0, /* ####.... */
+/* --- new character three (51) starting at offset 0x00bc --- */
+ /*00bc:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00c1:*/ 0x60, /* .##..... */
+ /*00c2:*/ 0xb0, /* #.##.... */
+ /*00c3:*/ 0x60, /* .##..... */
+ /*00c4:*/ 0x30, /* ..##.... */
+ /*00c5:*/ 0xb0, /* #.##.... */
+ /*00c6:*/ 0x60, /* .##..... */
+/* --- new character four (52) starting at offset 0x00c7 --- */
+ /*00c7:*/ 5, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00cc:*/ 0x30, /* ..##.... */
+ /*00cd:*/ 0x50, /* .#.#.... */
+ /*00ce:*/ 0xd0, /* ##.#.... */
+ /*00cf:*/ 0xf8, /* #####... */
+ /*00d0:*/ 0x30, /* ..##.... */
+ /*00d1:*/ 0x30, /* ..##.... */
+/* --- new character five (53) starting at offset 0x00d2 --- */
+ /*00d2:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00d7:*/ 0x70, /* .###.... */
+ /*00d8:*/ 0xc0, /* ##...... */
+ /*00d9:*/ 0xe0, /* ###..... */
+ /*00da:*/ 0x30, /* ..##.... */
+ /*00db:*/ 0xb0, /* #.##.... */
+ /*00dc:*/ 0x60, /* .##..... */
+/* --- new character six (54) starting at offset 0x00dd --- */
+ /*00dd:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00e2:*/ 0x70, /* .###.... */
+ /*00e3:*/ 0xc0, /* ##...... */
+ /*00e4:*/ 0xe0, /* ###..... */
+ /*00e5:*/ 0xd0, /* ##.#.... */
+ /*00e6:*/ 0xd0, /* ##.#.... */
+ /*00e7:*/ 0x60, /* .##..... */
+/* --- new character seven (55) starting at offset 0x00e8 --- */
+ /*00e8:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00ed:*/ 0xf0, /* ####.... */
+ /*00ee:*/ 0x30, /* ..##.... */
+ /*00ef:*/ 0x30, /* ..##.... */
+ /*00f0:*/ 0x60, /* .##..... */
+ /*00f1:*/ 0x40, /* .#...... */
+ /*00f2:*/ 0xc0, /* ##...... */
+/* --- new character eight (56) starting at offset 0x00f3 --- */
+ /*00f3:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00f8:*/ 0x60, /* .##..... */
+ /*00f9:*/ 0xd0, /* ##.#.... */
+ /*00fa:*/ 0x60, /* .##..... */
+ /*00fb:*/ 0xd0, /* ##.#.... */
+ /*00fc:*/ 0xd0, /* ##.#.... */
+ /*00fd:*/ 0x60, /* .##..... */
+/* --- new character nine (57) starting at offset 0x00fe --- */
+ /*00fe:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0103:*/ 0x60, /* .##..... */
+ /*0104:*/ 0xb0, /* #.##.... */
+ /*0105:*/ 0xb0, /* #.##.... */
+ /*0106:*/ 0x70, /* .###.... */
+ /*0107:*/ 0x30, /* ..##.... */
+ /*0108:*/ 0xe0, /* ###..... */
+/* --- new character colon (58) starting at offset 0x0109 --- */
+ /*0109:*/ 2, 1, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*010e:*/ 0x80, /* #....... */
+ /*010f:*/ 0x80, /* #....... */
+ /*0110:*/ 0x00, /* ........ */
+ /*0111:*/ 0x80, /* #....... */
+ /*0112:*/ 0x80, /* #....... */
+/* --- new character semicolon (59) starting at offset 0x0113 --- */
+ /*0113:*/ 2, 2, 6, -1, -1, /* width and bbox (w,h,x,y) */
+ /*0118:*/ 0x40, /* .#...... */
+ /*0119:*/ 0x40, /* .#...... */
+ /*011a:*/ 0x00, /* ........ */
+ /*011b:*/ 0x40, /* .#...... */
+ /*011c:*/ 0x40, /* .#...... */
+ /*011d:*/ 0x80, /* #....... */
+/* --- new character less (60) starting at offset 0x011e --- */
+ /*011e:*/ 4, 3, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0123:*/ 0x20, /* ..#..... */
+ /*0124:*/ 0x40, /* .#...... */
+ /*0125:*/ 0x80, /* #....... */
+ /*0126:*/ 0x40, /* .#...... */
+ /*0127:*/ 0x20, /* ..#..... */
+/* --- new character equal (61) starting at offset 0x0128 --- */
+ /*0128:*/ 5, 4, 3, 0, 1, /* width and bbox (w,h,x,y) */
+ /*012d:*/ 0xf0, /* ####.... */
+ /*012e:*/ 0x00, /* ........ */
+ /*012f:*/ 0xf0, /* ####.... */
+/* --- new character greater (62) starting at offset 0x0130 --- */
+ /*0130:*/ 4, 3, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0135:*/ 0x80, /* #....... */
+ /*0136:*/ 0x40, /* .#...... */
+ /*0137:*/ 0x20, /* ..#..... */
+ /*0138:*/ 0x40, /* .#...... */
+ /*0139:*/ 0x80, /* #....... */
+/* --- new character question (63) starting at offset 0x013a --- */
+ /*013a:*/ 5, 4, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*013f:*/ 0xe0, /* ###..... */
+ /*0140:*/ 0x30, /* ..##.... */
+ /*0141:*/ 0x60, /* .##..... */
+ /*0142:*/ 0x40, /* .#...... */
+ /*0143:*/ 0x00, /* ........ */
+ /*0144:*/ 0x40, /* .#...... */
+ /*0145:*/ 0x40, /* .#...... */
+/* --- new character at (64) starting at offset 0x0146 --- */
+ /*0146:*/ 9, 8, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*014b:*/ 0x7e, /* .######. */
+ /*014c:*/ 0xc3, /* ##....## */
+ /*014d:*/ 0x99, /* #..##..# */
+ /*014e:*/ 0xa9, /* #.#.#..# */
+ /*014f:*/ 0x99, /* #..##..# */
+ /*0150:*/ 0xce, /* ##..###. */
+ /*0151:*/ 0x60, /* .##..... */
+/* --- new character A (65) starting at offset 0x0152 --- */
+ /*0152:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0157:*/ 0x70, /* .###.... */
+ /*0158:*/ 0xd8, /* ##.##... */
+ /*0159:*/ 0xd8, /* ##.##... */
+ /*015a:*/ 0xf8, /* #####... */
+ /*015b:*/ 0xd8, /* ##.##... */
+ /*015c:*/ 0xd8, /* ##.##... */
+/* --- new character B (66) starting at offset 0x015d --- */
+ /*015d:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0162:*/ 0xf0, /* ####.... */
+ /*0163:*/ 0xd8, /* ##.##... */
+ /*0164:*/ 0xf0, /* ####.... */
+ /*0165:*/ 0xd8, /* ##.##... */
+ /*0166:*/ 0xd8, /* ##.##... */
+ /*0167:*/ 0xf0, /* ####.... */
+/* --- new character C (67) starting at offset 0x0168 --- */
+ /*0168:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*016d:*/ 0x78, /* .####... */
+ /*016e:*/ 0xc8, /* ##..#... */
+ /*016f:*/ 0xc0, /* ##...... */
+ /*0170:*/ 0xc0, /* ##...... */
+ /*0171:*/ 0xc8, /* ##..#... */
+ /*0172:*/ 0x78, /* .####... */
+/* --- new character D (68) starting at offset 0x0173 --- */
+ /*0173:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0178:*/ 0xf0, /* ####.... */
+ /*0179:*/ 0xd8, /* ##.##... */
+ /*017a:*/ 0xd8, /* ##.##... */
+ /*017b:*/ 0xd8, /* ##.##... */
+ /*017c:*/ 0xd8, /* ##.##... */
+ /*017d:*/ 0xf0, /* ####.... */
+/* --- new character E (69) starting at offset 0x017e --- */
+ /*017e:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0183:*/ 0xf0, /* ####.... */
+ /*0184:*/ 0xc0, /* ##...... */
+ /*0185:*/ 0xf0, /* ####.... */
+ /*0186:*/ 0xc0, /* ##...... */
+ /*0187:*/ 0xc0, /* ##...... */
+ /*0188:*/ 0xf0, /* ####.... */
+/* --- new character F (70) starting at offset 0x0189 --- */
+ /*0189:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*018e:*/ 0xf0, /* ####.... */
+ /*018f:*/ 0xc0, /* ##...... */
+ /*0190:*/ 0xf0, /* ####.... */
+ /*0191:*/ 0xc0, /* ##...... */
+ /*0192:*/ 0xc0, /* ##...... */
+ /*0193:*/ 0xc0, /* ##...... */
+/* --- new character G (71) starting at offset 0x0194 --- */
+ /*0194:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0199:*/ 0x78, /* .####... */
+ /*019a:*/ 0xc8, /* ##..#... */
+ /*019b:*/ 0xc0, /* ##...... */
+ /*019c:*/ 0xd8, /* ##.##... */
+ /*019d:*/ 0xc8, /* ##..#... */
+ /*019e:*/ 0x78, /* .####... */
+/* --- new character H (72) starting at offset 0x019f --- */
+ /*019f:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01a4:*/ 0xd8, /* ##.##... */
+ /*01a5:*/ 0xd8, /* ##.##... */
+ /*01a6:*/ 0xf8, /* #####... */
+ /*01a7:*/ 0xd8, /* ##.##... */
+ /*01a8:*/ 0xd8, /* ##.##... */
+ /*01a9:*/ 0xd8, /* ##.##... */
+/* --- new character I (73) starting at offset 0x01aa --- */
+ /*01aa:*/ 2, 1, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01af:*/ 0x80, /* #....... */
+ /*01b0:*/ 0x80, /* #....... */
+ /*01b1:*/ 0x80, /* #....... */
+ /*01b2:*/ 0x80, /* #....... */
+ /*01b3:*/ 0x80, /* #....... */
+ /*01b4:*/ 0x80, /* #....... */
+/* --- new character J (74) starting at offset 0x01b5 --- */
+ /*01b5:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01ba:*/ 0x30, /* ..##.... */
+ /*01bb:*/ 0x30, /* ..##.... */
+ /*01bc:*/ 0x30, /* ..##.... */
+ /*01bd:*/ 0x30, /* ..##.... */
+ /*01be:*/ 0xb0, /* #.##.... */
+ /*01bf:*/ 0x60, /* .##..... */
+/* --- new character K (75) starting at offset 0x01c0 --- */
+ /*01c0:*/ 6, 6, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01c5:*/ 0xd8, /* ##.##... */
+ /*01c6:*/ 0xd0, /* ##.#.... */
+ /*01c7:*/ 0xe0, /* ###..... */
+ /*01c8:*/ 0xf0, /* ####.... */
+ /*01c9:*/ 0xd8, /* ##.##... */
+ /*01ca:*/ 0xcc, /* ##..##.. */
+/* --- new character L (76) starting at offset 0x01cb --- */
+ /*01cb:*/ 5, 4, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01d0:*/ 0xc0, /* ##...... */
+ /*01d1:*/ 0xc0, /* ##...... */
+ /*01d2:*/ 0xc0, /* ##...... */
+ /*01d3:*/ 0xc0, /* ##...... */
+ /*01d4:*/ 0xc0, /* ##...... */
+ /*01d5:*/ 0xf0, /* ####.... */
+/* --- new character M (77) starting at offset 0x01d6 --- */
+ /*01d6:*/ 8, 7, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01db:*/ 0xc6, /* ##...##. */
+ /*01dc:*/ 0xc6, /* ##...##. */
+ /*01dd:*/ 0xee, /* ###.###. */
+ /*01de:*/ 0xfe, /* #######. */
+ /*01df:*/ 0xd6, /* ##.#.##. */
+ /*01e0:*/ 0xd6, /* ##.#.##. */
+/* --- new character N (78) starting at offset 0x01e1 --- */
+ /*01e1:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01e6:*/ 0xc8, /* ##..#... */
+ /*01e7:*/ 0xc8, /* ##..#... */
+ /*01e8:*/ 0xe8, /* ###.#... */
+ /*01e9:*/ 0xf8, /* #####... */
+ /*01ea:*/ 0xd8, /* ##.##... */
+ /*01eb:*/ 0xc8, /* ##..#... */
+/* --- new character O (79) starting at offset 0x01ec --- */
+ /*01ec:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01f1:*/ 0x70, /* .###.... */
+ /*01f2:*/ 0xd8, /* ##.##... */
+ /*01f3:*/ 0xc8, /* ##..#... */
+ /*01f4:*/ 0xc8, /* ##..#... */
+ /*01f5:*/ 0xd8, /* ##.##... */
+ /*01f6:*/ 0x70, /* .###.... */
+/* --- new character P (80) starting at offset 0x01f7 --- */
+ /*01f7:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01fc:*/ 0xf0, /* ####.... */
+ /*01fd:*/ 0xd8, /* ##.##... */
+ /*01fe:*/ 0xd8, /* ##.##... */
+ /*01ff:*/ 0xf0, /* ####.... */
+ /*0200:*/ 0xc0, /* ##...... */
+ /*0201:*/ 0xc0, /* ##...... */
+/* --- new character Q (81) starting at offset 0x0202 --- */
+ /*0202:*/ 6, 6, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0207:*/ 0x70, /* .###.... */
+ /*0208:*/ 0xd8, /* ##.##... */
+ /*0209:*/ 0xc8, /* ##..#... */
+ /*020a:*/ 0xc8, /* ##..#... */
+ /*020b:*/ 0xd8, /* ##.##... */
+ /*020c:*/ 0x78, /* .####... */
+ /*020d:*/ 0x04, /* .....#.. */
+/* --- new character R (82) starting at offset 0x020e --- */
+ /*020e:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0213:*/ 0xf0, /* ####.... */
+ /*0214:*/ 0xd8, /* ##.##... */
+ /*0215:*/ 0xd8, /* ##.##... */
+ /*0216:*/ 0xf0, /* ####.... */
+ /*0217:*/ 0xd8, /* ##.##... */
+ /*0218:*/ 0xd8, /* ##.##... */
+/* --- new character S (83) starting at offset 0x0219 --- */
+ /*0219:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*021e:*/ 0x78, /* .####... */
+ /*021f:*/ 0xc0, /* ##...... */
+ /*0220:*/ 0xf0, /* ####.... */
+ /*0221:*/ 0x38, /* ..###... */
+ /*0222:*/ 0xd8, /* ##.##... */
+ /*0223:*/ 0x70, /* .###.... */
+/* --- new character T (84) starting at offset 0x0224 --- */
+ /*0224:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0229:*/ 0xf8, /* #####... */
+ /*022a:*/ 0x60, /* .##..... */
+ /*022b:*/ 0x60, /* .##..... */
+ /*022c:*/ 0x60, /* .##..... */
+ /*022d:*/ 0x60, /* .##..... */
+ /*022e:*/ 0x60, /* .##..... */
+/* --- new character U (85) starting at offset 0x022f --- */
+ /*022f:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0234:*/ 0xd8, /* ##.##... */
+ /*0235:*/ 0xd8, /* ##.##... */
+ /*0236:*/ 0xd8, /* ##.##... */
+ /*0237:*/ 0xd8, /* ##.##... */
+ /*0238:*/ 0xd8, /* ##.##... */
+ /*0239:*/ 0x70, /* .###.... */
+/* --- new character V (86) starting at offset 0x023a --- */
+ /*023a:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*023f:*/ 0xe8, /* ###.#... */
+ /*0240:*/ 0x68, /* .##.#... */
+ /*0241:*/ 0x68, /* .##.#... */
+ /*0242:*/ 0x68, /* .##.#... */
+ /*0243:*/ 0x70, /* .###.... */
+ /*0244:*/ 0x20, /* ..#..... */
+/* --- new character W (87) starting at offset 0x0245 --- */
+ /*0245:*/ 9, 8, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*024a:*/ 0xdb, /* ##.##.## */
+ /*024b:*/ 0xdb, /* ##.##.## */
+ /*024c:*/ 0xda, /* ##.##.#. */
+ /*024d:*/ 0xda, /* ##.##.#. */
+ /*024e:*/ 0x6c, /* .##.##.. */
+ /*024f:*/ 0x6c, /* .##.##.. */
+/* --- new character X (88) starting at offset 0x0250 --- */
+ /*0250:*/ 6, 5, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0255:*/ 0xd8, /* ##.##... */
+ /*0256:*/ 0xd8, /* ##.##... */
+ /*0257:*/ 0x70, /* .###.... */
+ /*0258:*/ 0x70, /* .###.... */
+ /*0259:*/ 0xd8, /* ##.##... */
+ /*025a:*/ 0xd8, /* ##.##... */
+/* --- new character Y (89) starting at offset 0x025b --- */
+ /*025b:*/ 7, 6, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0260:*/ 0xec, /* ###.##.. */
+ /*0261:*/ 0x68, /* .##.#... */
+ /*0262:*/ 0x68, /* .##.#... */
+ /*0263:*/ 0x78, /* .####... */
+ /*0264:*/ 0x30, /* ..##.... */
+ /*0265:*/ 0x30, /* ..##.... */
+/* --- new character Z (90) starting at offset 0x0266 --- */
+ /*0266:*/ 6, 6, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*026b:*/ 0xfc, /* ######.. */
+ /*026c:*/ 0x38, /* ..###... */
+ /*026d:*/ 0x30, /* ..##.... */
+ /*026e:*/ 0x60, /* .##..... */
+ /*026f:*/ 0xe0, /* ###..... */
+ /*0270:*/ 0xf8, /* #####... */
+/* --- new character bracketleft (91) starting at offset 0x0271 --- */
+ /*0271:*/ 3, 2, 8, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0276:*/ 0xc0, /* ##...... */
+ /*0277:*/ 0x80, /* #....... */
+ /*0278:*/ 0x80, /* #....... */
+ /*0279:*/ 0x80, /* #....... */
+ /*027a:*/ 0x80, /* #....... */
+ /*027b:*/ 0x80, /* #....... */
+ /*027c:*/ 0x80, /* #....... */
+ /*027d:*/ 0xc0, /* ##...... */
+/* --- new character backslash (92) starting at offset 0x027e --- */
+ /*027e:*/ 3, 3, 6, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0283:*/ 0x80, /* #....... */
+ /*0284:*/ 0x80, /* #....... */
+ /*0285:*/ 0x40, /* .#...... */
+ /*0286:*/ 0x40, /* .#...... */
+ /*0287:*/ 0x20, /* ..#..... */
+ /*0288:*/ 0x20, /* ..#..... */
+/* --- new character bracketright (93) starting at offset 0x0289 --- */
+ /*0289:*/ 3, 2, 8, 0, -2, /* width and bbox (w,h,x,y) */
+ /*028e:*/ 0xc0, /* ##...... */
+ /*028f:*/ 0x40, /* .#...... */
+ /*0290:*/ 0x40, /* .#...... */
+ /*0291:*/ 0x40, /* .#...... */
+ /*0292:*/ 0x40, /* .#...... */
+ /*0293:*/ 0x40, /* .#...... */
+ /*0294:*/ 0x40, /* .#...... */
+ /*0295:*/ 0xc0, /* ##...... */
+/* --- new character asciicircum (94) starting at offset 0x0296 --- */
+ /*0296:*/ 4, 4, 3, 0, 3, /* width and bbox (w,h,x,y) */
+ /*029b:*/ 0x60, /* .##..... */
+ /*029c:*/ 0x60, /* .##..... */
+ /*029d:*/ 0x90, /* #..#.... */
+/* --- new character underscore (95) starting at offset 0x029e --- */
+ /*029e:*/ 5, 5, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*02a3:*/ 0xf8, /* #####... */
+/* --- new character grave (96) starting at offset 0x02a4 --- */
+ /*02a4:*/ 3, 2, 2, 0, 6, /* width and bbox (w,h,x,y) */
+ /*02a9:*/ 0x80, /* #....... */
+ /*02aa:*/ 0x40, /* .#...... */
+/* --- new character a (97) starting at offset 0x02ab --- */
+ /*02ab:*/ 5, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02b0:*/ 0xe0, /* ###..... */
+ /*02b1:*/ 0x30, /* ..##.... */
+ /*02b2:*/ 0xf0, /* ####.... */
+ /*02b3:*/ 0xb0, /* #.##.... */
+ /*02b4:*/ 0xd8, /* ##.##... */
+/* --- new character b (98) starting at offset 0x02b5 --- */
+ /*02b5:*/ 5, 4, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02ba:*/ 0xc0, /* ##...... */
+ /*02bb:*/ 0xc0, /* ##...... */
+ /*02bc:*/ 0xe0, /* ###..... */
+ /*02bd:*/ 0xd0, /* ##.#.... */
+ /*02be:*/ 0xd0, /* ##.#.... */
+ /*02bf:*/ 0xd0, /* ##.#.... */
+ /*02c0:*/ 0xe0, /* ###..... */
+/* --- new character c (99) starting at offset 0x02c1 --- */
+ /*02c1:*/ 4, 3, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02c6:*/ 0x60, /* .##..... */
+ /*02c7:*/ 0xc0, /* ##...... */
+ /*02c8:*/ 0xc0, /* ##...... */
+ /*02c9:*/ 0xc0, /* ##...... */
+ /*02ca:*/ 0x60, /* .##..... */
+/* --- new character d (100) starting at offset 0x02cb --- */
+ /*02cb:*/ 5, 4, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02d0:*/ 0x30, /* ..##.... */
+ /*02d1:*/ 0x30, /* ..##.... */
+ /*02d2:*/ 0x70, /* .###.... */
+ /*02d3:*/ 0xb0, /* #.##.... */
+ /*02d4:*/ 0xb0, /* #.##.... */
+ /*02d5:*/ 0xb0, /* #.##.... */
+ /*02d6:*/ 0x70, /* .###.... */
+/* --- new character e (101) starting at offset 0x02d7 --- */
+ /*02d7:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02dc:*/ 0x60, /* .##..... */
+ /*02dd:*/ 0xd0, /* ##.#.... */
+ /*02de:*/ 0xf0, /* ####.... */
+ /*02df:*/ 0xc0, /* ##...... */
+ /*02e0:*/ 0x60, /* .##..... */
+/* --- new character f (102) starting at offset 0x02e1 --- */
+ /*02e1:*/ 3, 4, 7, -1, 0, /* width and bbox (w,h,x,y) */
+ /*02e6:*/ 0x30, /* ..##.... */
+ /*02e7:*/ 0x60, /* .##..... */
+ /*02e8:*/ 0xf0, /* ####.... */
+ /*02e9:*/ 0x60, /* .##..... */
+ /*02ea:*/ 0x60, /* .##..... */
+ /*02eb:*/ 0x60, /* .##..... */
+ /*02ec:*/ 0x60, /* .##..... */
+/* --- new character g (103) starting at offset 0x02ed --- */
+ /*02ed:*/ 5, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*02f2:*/ 0xd0, /* ##.#.... */
+ /*02f3:*/ 0xb0, /* #.##.... */
+ /*02f4:*/ 0xb0, /* #.##.... */
+ /*02f5:*/ 0xf0, /* ####.... */
+ /*02f6:*/ 0x30, /* ..##.... */
+ /*02f7:*/ 0xe0, /* ###..... */
+/* --- new character h (104) starting at offset 0x02f8 --- */
+ /*02f8:*/ 5, 4, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02fd:*/ 0xc0, /* ##...... */
+ /*02fe:*/ 0xc0, /* ##...... */
+ /*02ff:*/ 0xe0, /* ###..... */
+ /*0300:*/ 0xd0, /* ##.#.... */
+ /*0301:*/ 0xd0, /* ##.#.... */
+ /*0302:*/ 0xd0, /* ##.#.... */
+ /*0303:*/ 0xd0, /* ##.#.... */
+/* --- new character i (105) starting at offset 0x0304 --- */
+ /*0304:*/ 2, 1, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0309:*/ 0x80, /* #....... */
+ /*030a:*/ 0x00, /* ........ */
+ /*030b:*/ 0x80, /* #....... */
+ /*030c:*/ 0x80, /* #....... */
+ /*030d:*/ 0x80, /* #....... */
+ /*030e:*/ 0x80, /* #....... */
+ /*030f:*/ 0x80, /* #....... */
+/* --- new character j (106) starting at offset 0x0310 --- */
+ /*0310:*/ 2, 2, 8, -1, -1, /* width and bbox (w,h,x,y) */
+ /*0315:*/ 0x40, /* .#...... */
+ /*0316:*/ 0x00, /* ........ */
+ /*0317:*/ 0x40, /* .#...... */
+ /*0318:*/ 0x40, /* .#...... */
+ /*0319:*/ 0x40, /* .#...... */
+ /*031a:*/ 0x40, /* .#...... */
+ /*031b:*/ 0x40, /* .#...... */
+ /*031c:*/ 0x80, /* #....... */
+/* --- new character k (107) starting at offset 0x031d --- */
+ /*031d:*/ 5, 4, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0322:*/ 0xc0, /* ##...... */
+ /*0323:*/ 0xc0, /* ##...... */
+ /*0324:*/ 0xd0, /* ##.#.... */
+ /*0325:*/ 0xd0, /* ##.#.... */
+ /*0326:*/ 0xe0, /* ###..... */
+ /*0327:*/ 0xd0, /* ##.#.... */
+ /*0328:*/ 0xd0, /* ##.#.... */
+/* --- new character l (108) starting at offset 0x0329 --- */
+ /*0329:*/ 2, 1, 7, 0, 0, /* width and bbox (w,h,x,y) */
+ /*032e:*/ 0x80, /* #....... */
+ /*032f:*/ 0x80, /* #....... */
+ /*0330:*/ 0x80, /* #....... */
+ /*0331:*/ 0x80, /* #....... */
+ /*0332:*/ 0x80, /* #....... */
+ /*0333:*/ 0x80, /* #....... */
+ /*0334:*/ 0x80, /* #....... */
+/* --- new character m (109) starting at offset 0x0335 --- */
+ /*0335:*/ 7, 6, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*033a:*/ 0xe8, /* ###.#... */
+ /*033b:*/ 0xd4, /* ##.#.#.. */
+ /*033c:*/ 0xd4, /* ##.#.#.. */
+ /*033d:*/ 0xd4, /* ##.#.#.. */
+ /*033e:*/ 0xd4, /* ##.#.#.. */
+/* --- new character n (110) starting at offset 0x033f --- */
+ /*033f:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0344:*/ 0xe0, /* ###..... */
+ /*0345:*/ 0xd0, /* ##.#.... */
+ /*0346:*/ 0xd0, /* ##.#.... */
+ /*0347:*/ 0xd0, /* ##.#.... */
+ /*0348:*/ 0xd0, /* ##.#.... */
+/* --- new character o (111) starting at offset 0x0349 --- */
+ /*0349:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*034e:*/ 0x60, /* .##..... */
+ /*034f:*/ 0xd0, /* ##.#.... */
+ /*0350:*/ 0xd0, /* ##.#.... */
+ /*0351:*/ 0xd0, /* ##.#.... */
+ /*0352:*/ 0x60, /* .##..... */
+/* --- new character p (112) starting at offset 0x0353 --- */
+ /*0353:*/ 5, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0358:*/ 0xe0, /* ###..... */
+ /*0359:*/ 0xd0, /* ##.#.... */
+ /*035a:*/ 0xd0, /* ##.#.... */
+ /*035b:*/ 0xd0, /* ##.#.... */
+ /*035c:*/ 0xe0, /* ###..... */
+ /*035d:*/ 0xc0, /* ##...... */
+/* --- new character q (113) starting at offset 0x035e --- */
+ /*035e:*/ 5, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0363:*/ 0x70, /* .###.... */
+ /*0364:*/ 0xb0, /* #.##.... */
+ /*0365:*/ 0xb0, /* #.##.... */
+ /*0366:*/ 0xb0, /* #.##.... */
+ /*0367:*/ 0x70, /* .###.... */
+ /*0368:*/ 0x30, /* ..##.... */
+/* --- new character r (114) starting at offset 0x0369 --- */
+ /*0369:*/ 3, 3, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*036e:*/ 0xa0, /* #.#..... */
+ /*036f:*/ 0xe0, /* ###..... */
+ /*0370:*/ 0xc0, /* ##...... */
+ /*0371:*/ 0xc0, /* ##...... */
+ /*0372:*/ 0xc0, /* ##...... */
+/* --- new character s (115) starting at offset 0x0373 --- */
+ /*0373:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0378:*/ 0x70, /* .###.... */
+ /*0379:*/ 0xc0, /* ##...... */
+ /*037a:*/ 0xf0, /* ####.... */
+ /*037b:*/ 0x30, /* ..##.... */
+ /*037c:*/ 0xe0, /* ###..... */
+/* --- new character t (116) starting at offset 0x037d --- */
+ /*037d:*/ 3, 4, 7, -1, 0, /* width and bbox (w,h,x,y) */
+ /*0382:*/ 0x20, /* ..#..... */
+ /*0383:*/ 0x60, /* .##..... */
+ /*0384:*/ 0xf0, /* ####.... */
+ /*0385:*/ 0x60, /* .##..... */
+ /*0386:*/ 0x60, /* .##..... */
+ /*0387:*/ 0x60, /* .##..... */
+ /*0388:*/ 0x30, /* ..##.... */
+/* --- new character u (117) starting at offset 0x0389 --- */
+ /*0389:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*038e:*/ 0xd0, /* ##.#.... */
+ /*038f:*/ 0xd0, /* ##.#.... */
+ /*0390:*/ 0xd0, /* ##.#.... */
+ /*0391:*/ 0xf0, /* ####.... */
+ /*0392:*/ 0x50, /* .#.#.... */
+/* --- new character v (118) starting at offset 0x0393 --- */
+ /*0393:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0398:*/ 0xd0, /* ##.#.... */
+ /*0399:*/ 0xd0, /* ##.#.... */
+ /*039a:*/ 0xd0, /* ##.#.... */
+ /*039b:*/ 0x60, /* .##..... */
+ /*039c:*/ 0x40, /* .#...... */
+/* --- new character w (119) starting at offset 0x039d --- */
+ /*039d:*/ 6, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03a2:*/ 0xa8, /* #.#.#... */
+ /*03a3:*/ 0xa8, /* #.#.#... */
+ /*03a4:*/ 0xf8, /* #####... */
+ /*03a5:*/ 0xf8, /* #####... */
+ /*03a6:*/ 0x48, /* .#..#... */
+/* --- new character x (120) starting at offset 0x03a7 --- */
+ /*03a7:*/ 6, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ac:*/ 0xd8, /* ##.##... */
+ /*03ad:*/ 0xd8, /* ##.##... */
+ /*03ae:*/ 0x70, /* .###.... */
+ /*03af:*/ 0xd8, /* ##.##... */
+ /*03b0:*/ 0xd8, /* ##.##... */
+/* --- new character y (121) starting at offset 0x03b1 --- */
+ /*03b1:*/ 5, 4, 6, 0, -1, /* width and bbox (w,h,x,y) */
+ /*03b6:*/ 0xd0, /* ##.#.... */
+ /*03b7:*/ 0xd0, /* ##.#.... */
+ /*03b8:*/ 0xd0, /* ##.#.... */
+ /*03b9:*/ 0x70, /* .###.... */
+ /*03ba:*/ 0x60, /* .##..... */
+ /*03bb:*/ 0x60, /* .##..... */
+/* --- new character z (122) starting at offset 0x03bc --- */
+ /*03bc:*/ 5, 4, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03c1:*/ 0xf0, /* ####.... */
+ /*03c2:*/ 0x30, /* ..##.... */
+ /*03c3:*/ 0x60, /* .##..... */
+ /*03c4:*/ 0xc0, /* ##...... */
+ /*03c5:*/ 0xf0, /* ####.... */
+/* --- new character braceleft (123) starting at offset 0x03c6 --- */
+ /*03c6:*/ 4, 3, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*03cb:*/ 0x20, /* ..#..... */
+ /*03cc:*/ 0x40, /* .#...... */
+ /*03cd:*/ 0x40, /* .#...... */
+ /*03ce:*/ 0x80, /* #....... */
+ /*03cf:*/ 0x40, /* .#...... */
+ /*03d0:*/ 0x40, /* .#...... */
+ /*03d1:*/ 0x20, /* ..#..... */
+/* --- new character bar (124) starting at offset 0x03d2 --- */
+ /*03d2:*/ 2, 1, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*03d7:*/ 0x80, /* #....... */
+ /*03d8:*/ 0x80, /* #....... */
+ /*03d9:*/ 0x80, /* #....... */
+ /*03da:*/ 0x80, /* #....... */
+ /*03db:*/ 0x80, /* #....... */
+ /*03dc:*/ 0x80, /* #....... */
+ /*03dd:*/ 0x80, /* #....... */
+/* --- new character braceright (125) starting at offset 0x03de --- */
+ /*03de:*/ 4, 3, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*03e3:*/ 0x80, /* #....... */
+ /*03e4:*/ 0x40, /* .#...... */
+ /*03e5:*/ 0x40, /* .#...... */
+ /*03e6:*/ 0x20, /* ..#..... */
+ /*03e7:*/ 0x40, /* .#...... */
+ /*03e8:*/ 0x40, /* .#...... */
+ /*03e9:*/ 0x80, /* #....... */
+/* --- new character asciitilde (126) starting at offset 0x03ea --- */
+ /*03ea:*/ 5, 5, 2, 0, 2, /* width and bbox (w,h,x,y) */
+ /*03ef:*/ 0x58, /* .#.##... */
+ /*03f0:*/ 0xb0, /* #.##.... */
+};
+static const uint16_t font_helvB08_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0012 /* quotedbl */,
+ 0x0019 /* numbersign */,
+ 0x0024 /* dollar */,
+ 0x0031 /* percent */,
+ 0x003c /* ampersand */,
+ 0x0047 /* quotesingle */,
+ 0x004f /* parenleft */,
+ 0x005c /* parenright */,
+ 0x0069 /* asterisk */,
+ 0x0071 /* plus */,
+ 0x007b /* comma */,
+ 0x0083 /* hyphen */,
+ 0x0089 /* period */,
+ 0x0090 /* slash */,
+ 0x009b /* zero */,
+ 0x00a6 /* one */,
+ 0x00b1 /* two */,
+ 0x00bc /* three */,
+ 0x00c7 /* four */,
+ 0x00d2 /* five */,
+ 0x00dd /* six */,
+ 0x00e8 /* seven */,
+ 0x00f3 /* eight */,
+ 0x00fe /* nine */,
+ 0x0109 /* colon */,
+ 0x0113 /* semicolon */,
+ 0x011e /* less */,
+ 0x0128 /* equal */,
+ 0x0130 /* greater */,
+ 0x013a /* question */,
+ 0x0146 /* at */,
+ 0x0152 /* A */,
+ 0x015d /* B */,
+ 0x0168 /* C */,
+ 0x0173 /* D */,
+ 0x017e /* E */,
+ 0x0189 /* F */,
+ 0x0194 /* G */,
+ 0x019f /* H */,
+ 0x01aa /* I */,
+ 0x01b5 /* J */,
+ 0x01c0 /* K */,
+ 0x01cb /* L */,
+ 0x01d6 /* M */,
+ 0x01e1 /* N */,
+ 0x01ec /* O */,
+ 0x01f7 /* P */,
+ 0x0202 /* Q */,
+ 0x020e /* R */,
+ 0x0219 /* S */,
+ 0x0224 /* T */,
+ 0x022f /* U */,
+ 0x023a /* V */,
+ 0x0245 /* W */,
+ 0x0250 /* X */,
+ 0x025b /* Y */,
+ 0x0266 /* Z */,
+ 0x0271 /* bracketleft */,
+ 0x027e /* backslash */,
+ 0x0289 /* bracketright */,
+ 0x0296 /* asciicircum */,
+ 0x029e /* underscore */,
+ 0x02a4 /* grave */,
+ 0x02ab /* a */,
+ 0x02b5 /* b */,
+ 0x02c1 /* c */,
+ 0x02cb /* d */,
+ 0x02d7 /* e */,
+ 0x02e1 /* f */,
+ 0x02ed /* g */,
+ 0x02f8 /* h */,
+ 0x0304 /* i */,
+ 0x0310 /* j */,
+ 0x031d /* k */,
+ 0x0329 /* l */,
+ 0x0335 /* m */,
+ 0x033f /* n */,
+ 0x0349 /* o */,
+ 0x0353 /* p */,
+ 0x035e /* q */,
+ 0x0369 /* r */,
+ 0x0373 /* s */,
+ 0x037d /* t */,
+ 0x0389 /* u */,
+ 0x0393 /* v */,
+ 0x039d /* w */,
+ 0x03a7 /* x */,
+ 0x03b1 /* y */,
+ 0x03bc /* z */,
+ 0x03c6 /* braceleft */,
+ 0x03d2 /* bar */,
+ 0x03de /* braceright */,
+ 0x03ea /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvB08 = {
+ .height = 10,
+ .ascent = 8,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvB08_data,
+ .charoffs = font_helvB08_offsets,
+};
diff --git a/src/target/firmware/fb/helvB14.c b/src/target/firmware/fb/helvB14.c
new file mode 100644
index 00000000..40c310ee
--- /dev/null
+++ b/src/target/firmware/fb/helvB14.c
@@ -0,0 +1,1195 @@
+#include <fb/font.h>
+static const uint8_t font_helvB14_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 4, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 4, 2, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0xc0, /* ##...... */
+ /*000c:*/ 0xc0, /* ##...... */
+ /*000d:*/ 0xc0, /* ##...... */
+ /*000e:*/ 0xc0, /* ##...... */
+ /*000f:*/ 0xc0, /* ##...... */
+ /*0010:*/ 0xc0, /* ##...... */
+ /*0011:*/ 0x80, /* #....... */
+ /*0012:*/ 0x80, /* #....... */
+ /*0013:*/ 0x00, /* ........ */
+ /*0014:*/ 0xc0, /* ##...... */
+ /*0015:*/ 0xc0, /* ##...... */
+/* --- new character quotedbl (34) starting at offset 0x0016 --- */
+ /*0016:*/ 7, 5, 3, 1, 8, /* width and bbox (w,h,x,y) */
+ /*001b:*/ 0xd8, /* ##.##... */
+ /*001c:*/ 0xd8, /* ##.##... */
+ /*001d:*/ 0x90, /* #..#.... */
+/* --- new character numbersign (35) starting at offset 0x001e --- */
+ /*001e:*/ 9, 9, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0023:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0025:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0027:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0029:*/ 0x7f,0x80, /* .########....... */
+ /*002b:*/ 0x36,0x00, /* ..##.##......... */
+ /*002d:*/ 0x36,0x00, /* ..##.##......... */
+ /*002f:*/ 0xff,0x00, /* ########........ */
+ /*0031:*/ 0x6c,0x00, /* .##.##.......... */
+ /*0033:*/ 0x6c,0x00, /* .##.##.......... */
+ /*0035:*/ 0x6c,0x00, /* .##.##.......... */
+/* --- new character dollar (36) starting at offset 0x0037 --- */
+ /*0037:*/ 8, 7, 13, 0, -2, /* width and bbox (w,h,x,y) */
+ /*003c:*/ 0x10, /* ...#.... */
+ /*003d:*/ 0x7c, /* .#####.. */
+ /*003e:*/ 0xd6, /* ##.#.##. */
+ /*003f:*/ 0xd6, /* ##.#.##. */
+ /*0040:*/ 0xf0, /* ####.... */
+ /*0041:*/ 0x78, /* .####... */
+ /*0042:*/ 0x1c, /* ...###.. */
+ /*0043:*/ 0x16, /* ...#.##. */
+ /*0044:*/ 0xd6, /* ##.#.##. */
+ /*0045:*/ 0xd6, /* ##.#.##. */
+ /*0046:*/ 0x7c, /* .#####.. */
+ /*0047:*/ 0x10, /* ...#.... */
+ /*0048:*/ 0x10, /* ...#.... */
+/* --- new character percent (37) starting at offset 0x0049 --- */
+ /*0049:*/ 13, 12, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*004e:*/ 0x78,0x80, /* .####...#....... */
+ /*0050:*/ 0xcd,0x80, /* ##..##.##....... */
+ /*0052:*/ 0xcd,0x00, /* ##..##.#........ */
+ /*0054:*/ 0x7b,0x00, /* .####.##........ */
+ /*0056:*/ 0x06,0x00, /* .....##......... */
+ /*0058:*/ 0x04,0x00, /* .....#.......... */
+ /*005a:*/ 0x0d,0xe0, /* ....##.####..... */
+ /*005c:*/ 0x0b,0x30, /* ....#.##..##.... */
+ /*005e:*/ 0x1b,0x30, /* ...##.##..##.... */
+ /*0060:*/ 0x11,0xe0, /* ...#...####..... */
+/* --- new character ampersand (38) starting at offset 0x0062 --- */
+ /*0062:*/ 11, 9, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0067:*/ 0x38,0x00, /* ..###........... */
+ /*0069:*/ 0x6c,0x00, /* .##.##.......... */
+ /*006b:*/ 0x6c,0x00, /* .##.##.......... */
+ /*006d:*/ 0x38,0x00, /* ..###........... */
+ /*006f:*/ 0x73,0x00, /* .###..##........ */
+ /*0071:*/ 0xfb,0x00, /* #####.##........ */
+ /*0073:*/ 0xce,0x00, /* ##..###......... */
+ /*0075:*/ 0xc6,0x00, /* ##...##......... */
+ /*0077:*/ 0xcf,0x00, /* ##..####........ */
+ /*0079:*/ 0x7d,0x80, /* .#####.##....... */
+/* --- new character quotesingle (39) starting at offset 0x007b --- */
+ /*007b:*/ 4, 2, 3, 1, 8, /* width and bbox (w,h,x,y) */
+ /*0080:*/ 0xc0, /* ##...... */
+ /*0081:*/ 0xc0, /* ##...... */
+ /*0082:*/ 0x80, /* #....... */
+/* --- new character parenleft (40) starting at offset 0x0083 --- */
+ /*0083:*/ 5, 4, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*0088:*/ 0x30, /* ..##.... */
+ /*0089:*/ 0x60, /* .##..... */
+ /*008a:*/ 0x60, /* .##..... */
+ /*008b:*/ 0xc0, /* ##...... */
+ /*008c:*/ 0xc0, /* ##...... */
+ /*008d:*/ 0xc0, /* ##...... */
+ /*008e:*/ 0xc0, /* ##...... */
+ /*008f:*/ 0xc0, /* ##...... */
+ /*0090:*/ 0xc0, /* ##...... */
+ /*0091:*/ 0xc0, /* ##...... */
+ /*0092:*/ 0xc0, /* ##...... */
+ /*0093:*/ 0x60, /* .##..... */
+ /*0094:*/ 0x60, /* .##..... */
+ /*0095:*/ 0x30, /* ..##.... */
+/* --- new character parenright (41) starting at offset 0x0096 --- */
+ /*0096:*/ 5, 4, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*009b:*/ 0xc0, /* ##...... */
+ /*009c:*/ 0x60, /* .##..... */
+ /*009d:*/ 0x60, /* .##..... */
+ /*009e:*/ 0x30, /* ..##.... */
+ /*009f:*/ 0x30, /* ..##.... */
+ /*00a0:*/ 0x30, /* ..##.... */
+ /*00a1:*/ 0x30, /* ..##.... */
+ /*00a2:*/ 0x30, /* ..##.... */
+ /*00a3:*/ 0x30, /* ..##.... */
+ /*00a4:*/ 0x30, /* ..##.... */
+ /*00a5:*/ 0x30, /* ..##.... */
+ /*00a6:*/ 0x60, /* .##..... */
+ /*00a7:*/ 0x60, /* .##..... */
+ /*00a8:*/ 0xc0, /* ##...... */
+/* --- new character asterisk (42) starting at offset 0x00a9 --- */
+ /*00a9:*/ 6, 5, 4, 0, 7, /* width and bbox (w,h,x,y) */
+ /*00ae:*/ 0x20, /* ..#..... */
+ /*00af:*/ 0xf8, /* #####... */
+ /*00b0:*/ 0x70, /* .###.... */
+ /*00b1:*/ 0xd8, /* ##.##... */
+/* --- new character plus (43) starting at offset 0x00b2 --- */
+ /*00b2:*/ 9, 8, 7, 0, 1, /* width and bbox (w,h,x,y) */
+ /*00b7:*/ 0x18, /* ...##... */
+ /*00b8:*/ 0x18, /* ...##... */
+ /*00b9:*/ 0x18, /* ...##... */
+ /*00ba:*/ 0xff, /* ######## */
+ /*00bb:*/ 0x18, /* ...##... */
+ /*00bc:*/ 0x18, /* ...##... */
+ /*00bd:*/ 0x18, /* ...##... */
+/* --- new character comma (44) starting at offset 0x00be --- */
+ /*00be:*/ 4, 3, 3, 0, -1, /* width and bbox (w,h,x,y) */
+ /*00c3:*/ 0x60, /* .##..... */
+ /*00c4:*/ 0x60, /* .##..... */
+ /*00c5:*/ 0xc0, /* ##...... */
+/* --- new character hyphen (45) starting at offset 0x00c6 --- */
+ /*00c6:*/ 5, 5, 1, 0, 4, /* width and bbox (w,h,x,y) */
+ /*00cb:*/ 0xf8, /* #####... */
+/* --- new character period (46) starting at offset 0x00cc --- */
+ /*00cc:*/ 4, 2, 2, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00d1:*/ 0xc0, /* ##...... */
+ /*00d2:*/ 0xc0, /* ##...... */
+/* --- new character slash (47) starting at offset 0x00d3 --- */
+ /*00d3:*/ 4, 4, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00d8:*/ 0x30, /* ..##.... */
+ /*00d9:*/ 0x30, /* ..##.... */
+ /*00da:*/ 0x20, /* ..#..... */
+ /*00db:*/ 0x20, /* ..#..... */
+ /*00dc:*/ 0x60, /* .##..... */
+ /*00dd:*/ 0x60, /* .##..... */
+ /*00de:*/ 0x60, /* .##..... */
+ /*00df:*/ 0x40, /* .#...... */
+ /*00e0:*/ 0x40, /* .#...... */
+ /*00e1:*/ 0xc0, /* ##...... */
+ /*00e2:*/ 0xc0, /* ##...... */
+/* --- new character zero (48) starting at offset 0x00e3 --- */
+ /*00e3:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00e8:*/ 0x38, /* ..###... */
+ /*00e9:*/ 0x6c, /* .##.##.. */
+ /*00ea:*/ 0xc6, /* ##...##. */
+ /*00eb:*/ 0xc6, /* ##...##. */
+ /*00ec:*/ 0xc6, /* ##...##. */
+ /*00ed:*/ 0xc6, /* ##...##. */
+ /*00ee:*/ 0xc6, /* ##...##. */
+ /*00ef:*/ 0xc6, /* ##...##. */
+ /*00f0:*/ 0x6c, /* .##.##.. */
+ /*00f1:*/ 0x38, /* ..###... */
+/* --- new character one (49) starting at offset 0x00f2 --- */
+ /*00f2:*/ 8, 4, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00f7:*/ 0x30, /* ..##.... */
+ /*00f8:*/ 0xf0, /* ####.... */
+ /*00f9:*/ 0x30, /* ..##.... */
+ /*00fa:*/ 0x30, /* ..##.... */
+ /*00fb:*/ 0x30, /* ..##.... */
+ /*00fc:*/ 0x30, /* ..##.... */
+ /*00fd:*/ 0x30, /* ..##.... */
+ /*00fe:*/ 0x30, /* ..##.... */
+ /*00ff:*/ 0x30, /* ..##.... */
+ /*0100:*/ 0x30, /* ..##.... */
+/* --- new character two (50) starting at offset 0x0101 --- */
+ /*0101:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0106:*/ 0x7c, /* .#####.. */
+ /*0107:*/ 0xe6, /* ###..##. */
+ /*0108:*/ 0xc6, /* ##...##. */
+ /*0109:*/ 0x0e, /* ....###. */
+ /*010a:*/ 0x0c, /* ....##.. */
+ /*010b:*/ 0x38, /* ..###... */
+ /*010c:*/ 0x70, /* .###.... */
+ /*010d:*/ 0xe0, /* ###..... */
+ /*010e:*/ 0xc0, /* ##...... */
+ /*010f:*/ 0xfe, /* #######. */
+/* --- new character three (51) starting at offset 0x0110 --- */
+ /*0110:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0115:*/ 0x7c, /* .#####.. */
+ /*0116:*/ 0xce, /* ##..###. */
+ /*0117:*/ 0xc6, /* ##...##. */
+ /*0118:*/ 0x06, /* .....##. */
+ /*0119:*/ 0x3c, /* ..####.. */
+ /*011a:*/ 0x06, /* .....##. */
+ /*011b:*/ 0x06, /* .....##. */
+ /*011c:*/ 0xc6, /* ##...##. */
+ /*011d:*/ 0xce, /* ##..###. */
+ /*011e:*/ 0x7c, /* .#####.. */
+/* --- new character four (52) starting at offset 0x011f --- */
+ /*011f:*/ 8, 8, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0124:*/ 0x0e, /* ....###. */
+ /*0125:*/ 0x1e, /* ...####. */
+ /*0126:*/ 0x36, /* ..##.##. */
+ /*0127:*/ 0x66, /* .##..##. */
+ /*0128:*/ 0xc6, /* ##...##. */
+ /*0129:*/ 0xc6, /* ##...##. */
+ /*012a:*/ 0xff, /* ######## */
+ /*012b:*/ 0x06, /* .....##. */
+ /*012c:*/ 0x06, /* .....##. */
+ /*012d:*/ 0x06, /* .....##. */
+/* --- new character five (53) starting at offset 0x012e --- */
+ /*012e:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0133:*/ 0x7e, /* .######. */
+ /*0134:*/ 0x60, /* .##..... */
+ /*0135:*/ 0xc0, /* ##...... */
+ /*0136:*/ 0xf8, /* #####... */
+ /*0137:*/ 0x1c, /* ...###.. */
+ /*0138:*/ 0x06, /* .....##. */
+ /*0139:*/ 0x06, /* .....##. */
+ /*013a:*/ 0xc6, /* ##...##. */
+ /*013b:*/ 0xec, /* ###.##.. */
+ /*013c:*/ 0x78, /* .####... */
+/* --- new character six (54) starting at offset 0x013d --- */
+ /*013d:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0142:*/ 0x3c, /* ..####.. */
+ /*0143:*/ 0x76, /* .###.##. */
+ /*0144:*/ 0x66, /* .##..##. */
+ /*0145:*/ 0xc0, /* ##...... */
+ /*0146:*/ 0xdc, /* ##.###.. */
+ /*0147:*/ 0xf6, /* ####.##. */
+ /*0148:*/ 0xc6, /* ##...##. */
+ /*0149:*/ 0xc6, /* ##...##. */
+ /*014a:*/ 0x6e, /* .##.###. */
+ /*014b:*/ 0x3c, /* ..####.. */
+/* --- new character seven (55) starting at offset 0x014c --- */
+ /*014c:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0151:*/ 0xfe, /* #######. */
+ /*0152:*/ 0x06, /* .....##. */
+ /*0153:*/ 0x0c, /* ....##.. */
+ /*0154:*/ 0x0c, /* ....##.. */
+ /*0155:*/ 0x18, /* ...##... */
+ /*0156:*/ 0x18, /* ...##... */
+ /*0157:*/ 0x30, /* ..##.... */
+ /*0158:*/ 0x30, /* ..##.... */
+ /*0159:*/ 0x60, /* .##..... */
+ /*015a:*/ 0x60, /* .##..... */
+/* --- new character eight (56) starting at offset 0x015b --- */
+ /*015b:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0160:*/ 0x7c, /* .#####.. */
+ /*0161:*/ 0xee, /* ###.###. */
+ /*0162:*/ 0xc6, /* ##...##. */
+ /*0163:*/ 0xc6, /* ##...##. */
+ /*0164:*/ 0x7c, /* .#####.. */
+ /*0165:*/ 0xee, /* ###.###. */
+ /*0166:*/ 0xc6, /* ##...##. */
+ /*0167:*/ 0xc6, /* ##...##. */
+ /*0168:*/ 0xc6, /* ##...##. */
+ /*0169:*/ 0x7c, /* .#####.. */
+/* --- new character nine (57) starting at offset 0x016a --- */
+ /*016a:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*016f:*/ 0x7c, /* .#####.. */
+ /*0170:*/ 0xee, /* ###.###. */
+ /*0171:*/ 0xc6, /* ##...##. */
+ /*0172:*/ 0xc6, /* ##...##. */
+ /*0173:*/ 0xe6, /* ###..##. */
+ /*0174:*/ 0x7e, /* .######. */
+ /*0175:*/ 0x06, /* .....##. */
+ /*0176:*/ 0xc6, /* ##...##. */
+ /*0177:*/ 0xce, /* ##..###. */
+ /*0178:*/ 0x7c, /* .#####.. */
+/* --- new character colon (58) starting at offset 0x0179 --- */
+ /*0179:*/ 5, 2, 8, 2, 0, /* width and bbox (w,h,x,y) */
+ /*017e:*/ 0xc0, /* ##...... */
+ /*017f:*/ 0xc0, /* ##...... */
+ /*0180:*/ 0x00, /* ........ */
+ /*0181:*/ 0x00, /* ........ */
+ /*0182:*/ 0x00, /* ........ */
+ /*0183:*/ 0x00, /* ........ */
+ /*0184:*/ 0xc0, /* ##...... */
+ /*0185:*/ 0xc0, /* ##...... */
+/* --- new character semicolon (59) starting at offset 0x0186 --- */
+ /*0186:*/ 5, 3, 9, 1, -1, /* width and bbox (w,h,x,y) */
+ /*018b:*/ 0x60, /* .##..... */
+ /*018c:*/ 0x60, /* .##..... */
+ /*018d:*/ 0x00, /* ........ */
+ /*018e:*/ 0x00, /* ........ */
+ /*018f:*/ 0x00, /* ........ */
+ /*0190:*/ 0x00, /* ........ */
+ /*0191:*/ 0x60, /* .##..... */
+ /*0192:*/ 0x60, /* .##..... */
+ /*0193:*/ 0xc0, /* ##...... */
+/* --- new character less (60) starting at offset 0x0194 --- */
+ /*0194:*/ 8, 6, 5, 1, 2, /* width and bbox (w,h,x,y) */
+ /*0199:*/ 0x1c, /* ...###.. */
+ /*019a:*/ 0x70, /* .###.... */
+ /*019b:*/ 0xc0, /* ##...... */
+ /*019c:*/ 0x70, /* .###.... */
+ /*019d:*/ 0x1c, /* ...###.. */
+/* --- new character equal (61) starting at offset 0x019e --- */
+ /*019e:*/ 9, 7, 3, 1, 3, /* width and bbox (w,h,x,y) */
+ /*01a3:*/ 0xfe, /* #######. */
+ /*01a4:*/ 0x00, /* ........ */
+ /*01a5:*/ 0xfe, /* #######. */
+/* --- new character greater (62) starting at offset 0x01a6 --- */
+ /*01a6:*/ 8, 6, 5, 1, 2, /* width and bbox (w,h,x,y) */
+ /*01ab:*/ 0xe0, /* ###..... */
+ /*01ac:*/ 0x38, /* ..###... */
+ /*01ad:*/ 0x0c, /* ....##.. */
+ /*01ae:*/ 0x38, /* ..###... */
+ /*01af:*/ 0xe0, /* ###..... */
+/* --- new character question (63) starting at offset 0x01b0 --- */
+ /*01b0:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01b5:*/ 0x7c, /* .#####.. */
+ /*01b6:*/ 0xc6, /* ##...##. */
+ /*01b7:*/ 0xc6, /* ##...##. */
+ /*01b8:*/ 0x06, /* .....##. */
+ /*01b9:*/ 0x0c, /* ....##.. */
+ /*01ba:*/ 0x18, /* ...##... */
+ /*01bb:*/ 0x30, /* ..##.... */
+ /*01bc:*/ 0x30, /* ..##.... */
+ /*01bd:*/ 0x00, /* ........ */
+ /*01be:*/ 0x30, /* ..##.... */
+ /*01bf:*/ 0x30, /* ..##.... */
+/* --- new character at (64) starting at offset 0x01c0 --- */
+ /*01c0:*/ 14, 13, 12, 0, -1, /* width and bbox (w,h,x,y) */
+ /*01c5:*/ 0x0f,0x80, /* ....#####....... */
+ /*01c7:*/ 0x38,0xe0, /* ..###...###..... */
+ /*01c9:*/ 0x70,0x70, /* .###.....###.... */
+ /*01cb:*/ 0x66,0xb0, /* .##..##.#.##.... */
+ /*01cd:*/ 0xcd,0x98, /* ##..##.##..##... */
+ /*01cf:*/ 0xd9,0x98, /* ##.##..##..##... */
+ /*01d1:*/ 0xdb,0x18, /* ##.##.##...##... */
+ /*01d3:*/ 0xdb,0x30, /* ##.##.##..##.... */
+ /*01d5:*/ 0xce,0xe0, /* ##..###.###..... */
+ /*01d7:*/ 0x60,0x00, /* .##............. */
+ /*01d9:*/ 0x31,0x80, /* ..##...##....... */
+ /*01db:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character A (65) starting at offset 0x01dd --- */
+ /*01dd:*/ 10, 10, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01e2:*/ 0x0c,0x00, /* ....##.......... */
+ /*01e4:*/ 0x0c,0x00, /* ....##.......... */
+ /*01e6:*/ 0x1e,0x00, /* ...####......... */
+ /*01e8:*/ 0x12,0x00, /* ...#..#......... */
+ /*01ea:*/ 0x33,0x00, /* ..##..##........ */
+ /*01ec:*/ 0x33,0x00, /* ..##..##........ */
+ /*01ee:*/ 0x61,0x80, /* .##....##....... */
+ /*01f0:*/ 0x7f,0x80, /* .########....... */
+ /*01f2:*/ 0x61,0x80, /* .##....##....... */
+ /*01f4:*/ 0xc0,0xc0, /* ##......##...... */
+ /*01f6:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character B (66) starting at offset 0x01f8 --- */
+ /*01f8:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01fd:*/ 0xfe, /* #######. */
+ /*01fe:*/ 0xc7, /* ##...### */
+ /*01ff:*/ 0xc3, /* ##....## */
+ /*0200:*/ 0xc3, /* ##....## */
+ /*0201:*/ 0xc6, /* ##...##. */
+ /*0202:*/ 0xfc, /* ######.. */
+ /*0203:*/ 0xc6, /* ##...##. */
+ /*0204:*/ 0xc3, /* ##....## */
+ /*0205:*/ 0xc3, /* ##....## */
+ /*0206:*/ 0xc7, /* ##...### */
+ /*0207:*/ 0xfe, /* #######. */
+/* --- new character C (67) starting at offset 0x0208 --- */
+ /*0208:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*020d:*/ 0x1f,0x00, /* ...#####........ */
+ /*020f:*/ 0x7b,0x80, /* .####.###....... */
+ /*0211:*/ 0x60,0x80, /* .##.....#....... */
+ /*0213:*/ 0xc0,0x00, /* ##.............. */
+ /*0215:*/ 0xc0,0x00, /* ##.............. */
+ /*0217:*/ 0xc0,0x00, /* ##.............. */
+ /*0219:*/ 0xc0,0x00, /* ##.............. */
+ /*021b:*/ 0xc0,0x00, /* ##.............. */
+ /*021d:*/ 0x60,0x80, /* .##.....#....... */
+ /*021f:*/ 0x7b,0x80, /* .####.###....... */
+ /*0221:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character D (68) starting at offset 0x0223 --- */
+ /*0223:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0228:*/ 0xfc,0x00, /* ######.......... */
+ /*022a:*/ 0xc7,0x00, /* ##...###........ */
+ /*022c:*/ 0xc3,0x00, /* ##....##........ */
+ /*022e:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0230:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0232:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0234:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0236:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0238:*/ 0xc3,0x00, /* ##....##........ */
+ /*023a:*/ 0xc7,0x00, /* ##...###........ */
+ /*023c:*/ 0xfc,0x00, /* ######.......... */
+/* --- new character E (69) starting at offset 0x023e --- */
+ /*023e:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0243:*/ 0xfe, /* #######. */
+ /*0244:*/ 0xc0, /* ##...... */
+ /*0245:*/ 0xc0, /* ##...... */
+ /*0246:*/ 0xc0, /* ##...... */
+ /*0247:*/ 0xc0, /* ##...... */
+ /*0248:*/ 0xfe, /* #######. */
+ /*0249:*/ 0xc0, /* ##...... */
+ /*024a:*/ 0xc0, /* ##...... */
+ /*024b:*/ 0xc0, /* ##...... */
+ /*024c:*/ 0xc0, /* ##...... */
+ /*024d:*/ 0xfe, /* #######. */
+/* --- new character F (70) starting at offset 0x024e --- */
+ /*024e:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0253:*/ 0xfe, /* #######. */
+ /*0254:*/ 0xc0, /* ##...... */
+ /*0255:*/ 0xc0, /* ##...... */
+ /*0256:*/ 0xc0, /* ##...... */
+ /*0257:*/ 0xc0, /* ##...... */
+ /*0258:*/ 0xfc, /* ######.. */
+ /*0259:*/ 0xc0, /* ##...... */
+ /*025a:*/ 0xc0, /* ##...... */
+ /*025b:*/ 0xc0, /* ##...... */
+ /*025c:*/ 0xc0, /* ##...... */
+ /*025d:*/ 0xc0, /* ##...... */
+/* --- new character G (71) starting at offset 0x025e --- */
+ /*025e:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0263:*/ 0x1f,0x00, /* ...#####........ */
+ /*0265:*/ 0x7b,0x80, /* .####.###....... */
+ /*0267:*/ 0x60,0x80, /* .##.....#....... */
+ /*0269:*/ 0xc0,0x00, /* ##.............. */
+ /*026b:*/ 0xc0,0x00, /* ##.............. */
+ /*026d:*/ 0xc7,0x80, /* ##...####....... */
+ /*026f:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0271:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0273:*/ 0x61,0x80, /* .##....##....... */
+ /*0275:*/ 0x7b,0x80, /* .####.###....... */
+ /*0277:*/ 0x1e,0x80, /* ...####.#....... */
+/* --- new character H (72) starting at offset 0x0279 --- */
+ /*0279:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*027e:*/ 0xc3, /* ##....## */
+ /*027f:*/ 0xc3, /* ##....## */
+ /*0280:*/ 0xc3, /* ##....## */
+ /*0281:*/ 0xc3, /* ##....## */
+ /*0282:*/ 0xc3, /* ##....## */
+ /*0283:*/ 0xff, /* ######## */
+ /*0284:*/ 0xc3, /* ##....## */
+ /*0285:*/ 0xc3, /* ##....## */
+ /*0286:*/ 0xc3, /* ##....## */
+ /*0287:*/ 0xc3, /* ##....## */
+ /*0288:*/ 0xc3, /* ##....## */
+/* --- new character I (73) starting at offset 0x0289 --- */
+ /*0289:*/ 4, 2, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*028e:*/ 0xc0, /* ##...... */
+ /*028f:*/ 0xc0, /* ##...... */
+ /*0290:*/ 0xc0, /* ##...... */
+ /*0291:*/ 0xc0, /* ##...... */
+ /*0292:*/ 0xc0, /* ##...... */
+ /*0293:*/ 0xc0, /* ##...... */
+ /*0294:*/ 0xc0, /* ##...... */
+ /*0295:*/ 0xc0, /* ##...... */
+ /*0296:*/ 0xc0, /* ##...... */
+ /*0297:*/ 0xc0, /* ##...... */
+ /*0298:*/ 0xc0, /* ##...... */
+/* --- new character J (74) starting at offset 0x0299 --- */
+ /*0299:*/ 8, 7, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*029e:*/ 0x06, /* .....##. */
+ /*029f:*/ 0x06, /* .....##. */
+ /*02a0:*/ 0x06, /* .....##. */
+ /*02a1:*/ 0x06, /* .....##. */
+ /*02a2:*/ 0x06, /* .....##. */
+ /*02a3:*/ 0x06, /* .....##. */
+ /*02a4:*/ 0x06, /* .....##. */
+ /*02a5:*/ 0xc6, /* ##...##. */
+ /*02a6:*/ 0xc6, /* ##...##. */
+ /*02a7:*/ 0xee, /* ###.###. */
+ /*02a8:*/ 0x7c, /* .#####.. */
+/* --- new character K (75) starting at offset 0x02a9 --- */
+ /*02a9:*/ 10, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02ae:*/ 0xc3,0x00, /* ##....##........ */
+ /*02b0:*/ 0xc6,0x00, /* ##...##......... */
+ /*02b2:*/ 0xcc,0x00, /* ##..##.......... */
+ /*02b4:*/ 0xd8,0x00, /* ##.##........... */
+ /*02b6:*/ 0xf0,0x00, /* ####............ */
+ /*02b8:*/ 0xf0,0x00, /* ####............ */
+ /*02ba:*/ 0xd8,0x00, /* ##.##........... */
+ /*02bc:*/ 0xcc,0x00, /* ##..##.......... */
+ /*02be:*/ 0xc6,0x00, /* ##...##......... */
+ /*02c0:*/ 0xc3,0x00, /* ##....##........ */
+ /*02c2:*/ 0xc1,0x80, /* ##.....##....... */
+/* --- new character L (76) starting at offset 0x02c4 --- */
+ /*02c4:*/ 8, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02c9:*/ 0xc0, /* ##...... */
+ /*02ca:*/ 0xc0, /* ##...... */
+ /*02cb:*/ 0xc0, /* ##...... */
+ /*02cc:*/ 0xc0, /* ##...... */
+ /*02cd:*/ 0xc0, /* ##...... */
+ /*02ce:*/ 0xc0, /* ##...... */
+ /*02cf:*/ 0xc0, /* ##...... */
+ /*02d0:*/ 0xc0, /* ##...... */
+ /*02d1:*/ 0xc0, /* ##...... */
+ /*02d2:*/ 0xc0, /* ##...... */
+ /*02d3:*/ 0xfe, /* #######. */
+/* --- new character M (77) starting at offset 0x02d4 --- */
+ /*02d4:*/ 13, 11, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02d9:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02db:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02dd:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*02df:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*02e1:*/ 0xf1,0xe0, /* ####...####..... */
+ /*02e3:*/ 0xd1,0x60, /* ##.#...#.##..... */
+ /*02e5:*/ 0xd1,0x60, /* ##.#...#.##..... */
+ /*02e7:*/ 0xdb,0x60, /* ##.##.##.##..... */
+ /*02e9:*/ 0xca,0x60, /* ##..#.#..##..... */
+ /*02eb:*/ 0xce,0x60, /* ##..###..##..... */
+ /*02ed:*/ 0xc4,0x60, /* ##...#...##..... */
+/* --- new character N (78) starting at offset 0x02ef --- */
+ /*02ef:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02f4:*/ 0xc1,0x80, /* ##.....##....... */
+ /*02f6:*/ 0xe1,0x80, /* ###....##....... */
+ /*02f8:*/ 0xe1,0x80, /* ###....##....... */
+ /*02fa:*/ 0xd1,0x80, /* ##.#...##....... */
+ /*02fc:*/ 0xd9,0x80, /* ##.##..##....... */
+ /*02fe:*/ 0xc9,0x80, /* ##..#..##....... */
+ /*0300:*/ 0xcd,0x80, /* ##..##.##....... */
+ /*0302:*/ 0xc5,0x80, /* ##...#.##....... */
+ /*0304:*/ 0xc3,0x80, /* ##....###....... */
+ /*0306:*/ 0xc3,0x80, /* ##....###....... */
+ /*0308:*/ 0xc1,0x80, /* ##.....##....... */
+/* --- new character O (79) starting at offset 0x030a --- */
+ /*030a:*/ 12, 10, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*030f:*/ 0x1e,0x00, /* ...####......... */
+ /*0311:*/ 0x73,0x80, /* .###..###....... */
+ /*0313:*/ 0x61,0x80, /* .##....##....... */
+ /*0315:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0317:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0319:*/ 0xc0,0xc0, /* ##......##...... */
+ /*031b:*/ 0xc0,0xc0, /* ##......##...... */
+ /*031d:*/ 0xc0,0xc0, /* ##......##...... */
+ /*031f:*/ 0x61,0x80, /* .##....##....... */
+ /*0321:*/ 0x73,0x80, /* .###..###....... */
+ /*0323:*/ 0x1e,0x00, /* ...####......... */
+/* --- new character P (80) starting at offset 0x0325 --- */
+ /*0325:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*032a:*/ 0xfe, /* #######. */
+ /*032b:*/ 0xc7, /* ##...### */
+ /*032c:*/ 0xc3, /* ##....## */
+ /*032d:*/ 0xc3, /* ##....## */
+ /*032e:*/ 0xc7, /* ##...### */
+ /*032f:*/ 0xfe, /* #######. */
+ /*0330:*/ 0xc0, /* ##...... */
+ /*0331:*/ 0xc0, /* ##...... */
+ /*0332:*/ 0xc0, /* ##...... */
+ /*0333:*/ 0xc0, /* ##...... */
+ /*0334:*/ 0xc0, /* ##...... */
+/* --- new character Q (81) starting at offset 0x0335 --- */
+ /*0335:*/ 12, 10, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*033a:*/ 0x1e,0x00, /* ...####......... */
+ /*033c:*/ 0x73,0x80, /* .###..###....... */
+ /*033e:*/ 0x61,0x80, /* .##....##....... */
+ /*0340:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0342:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0344:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0346:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0348:*/ 0xc6,0xc0, /* ##...##.##...... */
+ /*034a:*/ 0x63,0x80, /* .##...###....... */
+ /*034c:*/ 0x73,0x80, /* .###..###....... */
+ /*034e:*/ 0x1e,0xc0, /* ...####.##...... */
+/* --- new character R (82) starting at offset 0x0350 --- */
+ /*0350:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0355:*/ 0xfe,0x00, /* #######......... */
+ /*0357:*/ 0xc7,0x00, /* ##...###........ */
+ /*0359:*/ 0xc3,0x00, /* ##....##........ */
+ /*035b:*/ 0xc3,0x00, /* ##....##........ */
+ /*035d:*/ 0xc7,0x00, /* ##...###........ */
+ /*035f:*/ 0xfe,0x00, /* #######......... */
+ /*0361:*/ 0xc3,0x00, /* ##....##........ */
+ /*0363:*/ 0xc3,0x00, /* ##....##........ */
+ /*0365:*/ 0xc3,0x00, /* ##....##........ */
+ /*0367:*/ 0xc3,0x00, /* ##....##........ */
+ /*0369:*/ 0xc1,0x80, /* ##.....##....... */
+/* --- new character S (83) starting at offset 0x036b --- */
+ /*036b:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0370:*/ 0x7e, /* .######. */
+ /*0371:*/ 0xe7, /* ###..### */
+ /*0372:*/ 0xc3, /* ##....## */
+ /*0373:*/ 0xe0, /* ###..... */
+ /*0374:*/ 0x78, /* .####... */
+ /*0375:*/ 0x1e, /* ...####. */
+ /*0376:*/ 0x07, /* .....### */
+ /*0377:*/ 0x03, /* ......## */
+ /*0378:*/ 0xc3, /* ##....## */
+ /*0379:*/ 0xee, /* ###.###. */
+ /*037a:*/ 0x7c, /* .#####.. */
+/* --- new character T (84) starting at offset 0x037b --- */
+ /*037b:*/ 8, 8, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0380:*/ 0xff, /* ######## */
+ /*0381:*/ 0x18, /* ...##... */
+ /*0382:*/ 0x18, /* ...##... */
+ /*0383:*/ 0x18, /* ...##... */
+ /*0384:*/ 0x18, /* ...##... */
+ /*0385:*/ 0x18, /* ...##... */
+ /*0386:*/ 0x18, /* ...##... */
+ /*0387:*/ 0x18, /* ...##... */
+ /*0388:*/ 0x18, /* ...##... */
+ /*0389:*/ 0x18, /* ...##... */
+ /*038a:*/ 0x18, /* ...##... */
+/* --- new character U (85) starting at offset 0x038b --- */
+ /*038b:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0390:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0392:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0394:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0396:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0398:*/ 0xc1,0x80, /* ##.....##....... */
+ /*039a:*/ 0xc1,0x80, /* ##.....##....... */
+ /*039c:*/ 0xc1,0x80, /* ##.....##....... */
+ /*039e:*/ 0xc1,0x80, /* ##.....##....... */
+ /*03a0:*/ 0xc1,0x80, /* ##.....##....... */
+ /*03a2:*/ 0x63,0x00, /* .##...##........ */
+ /*03a4:*/ 0x3e,0x00, /* ..#####......... */
+/* --- new character V (86) starting at offset 0x03a6 --- */
+ /*03a6:*/ 10, 10, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03ab:*/ 0xc0,0xc0, /* ##......##...... */
+ /*03ad:*/ 0xc0,0xc0, /* ##......##...... */
+ /*03af:*/ 0x61,0x80, /* .##....##....... */
+ /*03b1:*/ 0x61,0x80, /* .##....##....... */
+ /*03b3:*/ 0x73,0x80, /* .###..###....... */
+ /*03b5:*/ 0x33,0x00, /* ..##..##........ */
+ /*03b7:*/ 0x33,0x00, /* ..##..##........ */
+ /*03b9:*/ 0x1e,0x00, /* ...####......... */
+ /*03bb:*/ 0x1e,0x00, /* ...####......... */
+ /*03bd:*/ 0x0c,0x00, /* ....##.......... */
+ /*03bf:*/ 0x0c,0x00, /* ....##.......... */
+/* --- new character W (87) starting at offset 0x03c1 --- */
+ /*03c1:*/ 14, 14, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03c6:*/ 0xc3,0x0c, /* ##....##....##.. */
+ /*03c8:*/ 0xc3,0x0c, /* ##....##....##.. */
+ /*03ca:*/ 0xc3,0x0c, /* ##....##....##.. */
+ /*03cc:*/ 0x67,0x98, /* .##..####..##... */
+ /*03ce:*/ 0x64,0x98, /* .##..#..#..##... */
+ /*03d0:*/ 0x64,0x98, /* .##..#..#..##... */
+ /*03d2:*/ 0x6c,0xd8, /* .##.##..##.##... */
+ /*03d4:*/ 0x2c,0xd0, /* ..#.##..##.#.... */
+ /*03d6:*/ 0x38,0x70, /* ..###....###.... */
+ /*03d8:*/ 0x18,0x60, /* ...##....##..... */
+ /*03da:*/ 0x18,0x60, /* ...##....##..... */
+/* --- new character X (88) starting at offset 0x03dc --- */
+ /*03dc:*/ 9, 9, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03e1:*/ 0xc1,0x80, /* ##.....##....... */
+ /*03e3:*/ 0xc1,0x80, /* ##.....##....... */
+ /*03e5:*/ 0x63,0x00, /* .##...##........ */
+ /*03e7:*/ 0x36,0x00, /* ..##.##......... */
+ /*03e9:*/ 0x1c,0x00, /* ...###.......... */
+ /*03eb:*/ 0x1c,0x00, /* ...###.......... */
+ /*03ed:*/ 0x36,0x00, /* ..##.##......... */
+ /*03ef:*/ 0x63,0x00, /* .##...##........ */
+ /*03f1:*/ 0x63,0x00, /* .##...##........ */
+ /*03f3:*/ 0xc1,0x80, /* ##.....##....... */
+ /*03f5:*/ 0xc1,0x80, /* ##.....##....... */
+/* --- new character Y (89) starting at offset 0x03f7 --- */
+ /*03f7:*/ 10, 10, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03fc:*/ 0xc0,0xc0, /* ##......##...... */
+ /*03fe:*/ 0x61,0x80, /* .##....##....... */
+ /*0400:*/ 0x61,0x80, /* .##....##....... */
+ /*0402:*/ 0x33,0x00, /* ..##..##........ */
+ /*0404:*/ 0x33,0x00, /* ..##..##........ */
+ /*0406:*/ 0x1e,0x00, /* ...####......... */
+ /*0408:*/ 0x1e,0x00, /* ...####......... */
+ /*040a:*/ 0x0c,0x00, /* ....##.......... */
+ /*040c:*/ 0x0c,0x00, /* ....##.......... */
+ /*040e:*/ 0x0c,0x00, /* ....##.......... */
+ /*0410:*/ 0x0c,0x00, /* ....##.......... */
+/* --- new character Z (90) starting at offset 0x0412 --- */
+ /*0412:*/ 9, 8, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0417:*/ 0xff, /* ######## */
+ /*0418:*/ 0x03, /* ......## */
+ /*0419:*/ 0x06, /* .....##. */
+ /*041a:*/ 0x0c, /* ....##.. */
+ /*041b:*/ 0x1c, /* ...###.. */
+ /*041c:*/ 0x18, /* ...##... */
+ /*041d:*/ 0x30, /* ..##.... */
+ /*041e:*/ 0x70, /* .###.... */
+ /*041f:*/ 0x60, /* .##..... */
+ /*0420:*/ 0xc0, /* ##...... */
+ /*0421:*/ 0xff, /* ######## */
+/* --- new character bracketleft (91) starting at offset 0x0422 --- */
+ /*0422:*/ 5, 4, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0427:*/ 0xf0, /* ####.... */
+ /*0428:*/ 0xc0, /* ##...... */
+ /*0429:*/ 0xc0, /* ##...... */
+ /*042a:*/ 0xc0, /* ##...... */
+ /*042b:*/ 0xc0, /* ##...... */
+ /*042c:*/ 0xc0, /* ##...... */
+ /*042d:*/ 0xc0, /* ##...... */
+ /*042e:*/ 0xc0, /* ##...... */
+ /*042f:*/ 0xc0, /* ##...... */
+ /*0430:*/ 0xc0, /* ##...... */
+ /*0431:*/ 0xc0, /* ##...... */
+ /*0432:*/ 0xc0, /* ##...... */
+ /*0433:*/ 0xc0, /* ##...... */
+ /*0434:*/ 0xf0, /* ####.... */
+/* --- new character backslash (92) starting at offset 0x0435 --- */
+ /*0435:*/ 4, 4, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*043a:*/ 0xc0, /* ##...... */
+ /*043b:*/ 0xc0, /* ##...... */
+ /*043c:*/ 0xc0, /* ##...... */
+ /*043d:*/ 0x40, /* .#...... */
+ /*043e:*/ 0x60, /* .##..... */
+ /*043f:*/ 0x60, /* .##..... */
+ /*0440:*/ 0x60, /* .##..... */
+ /*0441:*/ 0x20, /* ..#..... */
+ /*0442:*/ 0x30, /* ..##.... */
+ /*0443:*/ 0x30, /* ..##.... */
+ /*0444:*/ 0x30, /* ..##.... */
+/* --- new character bracketright (93) starting at offset 0x0445 --- */
+ /*0445:*/ 5, 4, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*044a:*/ 0xf0, /* ####.... */
+ /*044b:*/ 0x30, /* ..##.... */
+ /*044c:*/ 0x30, /* ..##.... */
+ /*044d:*/ 0x30, /* ..##.... */
+ /*044e:*/ 0x30, /* ..##.... */
+ /*044f:*/ 0x30, /* ..##.... */
+ /*0450:*/ 0x30, /* ..##.... */
+ /*0451:*/ 0x30, /* ..##.... */
+ /*0452:*/ 0x30, /* ..##.... */
+ /*0453:*/ 0x30, /* ..##.... */
+ /*0454:*/ 0x30, /* ..##.... */
+ /*0455:*/ 0x30, /* ..##.... */
+ /*0456:*/ 0x30, /* ..##.... */
+ /*0457:*/ 0xf0, /* ####.... */
+/* --- new character asciicircum (94) starting at offset 0x0458 --- */
+ /*0458:*/ 8, 6, 4, 1, 7, /* width and bbox (w,h,x,y) */
+ /*045d:*/ 0x30, /* ..##.... */
+ /*045e:*/ 0x78, /* .####... */
+ /*045f:*/ 0xcc, /* ##..##.. */
+ /*0460:*/ 0x84, /* #....#.. */
+/* --- new character underscore (95) starting at offset 0x0461 --- */
+ /*0461:*/ 8, 8, 1, 0, -3, /* width and bbox (w,h,x,y) */
+ /*0466:*/ 0xff, /* ######## */
+/* --- new character grave (96) starting at offset 0x0467 --- */
+ /*0467:*/ 5, 3, 2, 1, 9, /* width and bbox (w,h,x,y) */
+ /*046c:*/ 0xc0, /* ##...... */
+ /*046d:*/ 0x60, /* .##..... */
+/* --- new character a (97) starting at offset 0x046e --- */
+ /*046e:*/ 8, 7, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0473:*/ 0x78, /* .####... */
+ /*0474:*/ 0xcc, /* ##..##.. */
+ /*0475:*/ 0x0c, /* ....##.. */
+ /*0476:*/ 0x7c, /* .#####.. */
+ /*0477:*/ 0xcc, /* ##..##.. */
+ /*0478:*/ 0xcc, /* ##..##.. */
+ /*0479:*/ 0xfc, /* ######.. */
+ /*047a:*/ 0x76, /* .###.##. */
+/* --- new character b (98) starting at offset 0x047b --- */
+ /*047b:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0480:*/ 0xc0, /* ##...... */
+ /*0481:*/ 0xc0, /* ##...... */
+ /*0482:*/ 0xc0, /* ##...... */
+ /*0483:*/ 0xf8, /* #####... */
+ /*0484:*/ 0xec, /* ###.##.. */
+ /*0485:*/ 0xc6, /* ##...##. */
+ /*0486:*/ 0xc6, /* ##...##. */
+ /*0487:*/ 0xc6, /* ##...##. */
+ /*0488:*/ 0xc6, /* ##...##. */
+ /*0489:*/ 0xec, /* ###.##.. */
+ /*048a:*/ 0xd8, /* ##.##... */
+/* --- new character c (99) starting at offset 0x048b --- */
+ /*048b:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0490:*/ 0x38, /* ..###... */
+ /*0491:*/ 0x7c, /* .#####.. */
+ /*0492:*/ 0xc4, /* ##...#.. */
+ /*0493:*/ 0xc0, /* ##...... */
+ /*0494:*/ 0xc0, /* ##...... */
+ /*0495:*/ 0xc4, /* ##...#.. */
+ /*0496:*/ 0x7c, /* .#####.. */
+ /*0497:*/ 0x38, /* ..###... */
+/* --- new character d (100) starting at offset 0x0498 --- */
+ /*0498:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*049d:*/ 0x06, /* .....##. */
+ /*049e:*/ 0x06, /* .....##. */
+ /*049f:*/ 0x06, /* .....##. */
+ /*04a0:*/ 0x3e, /* ..#####. */
+ /*04a1:*/ 0x6e, /* .##.###. */
+ /*04a2:*/ 0xc6, /* ##...##. */
+ /*04a3:*/ 0xc6, /* ##...##. */
+ /*04a4:*/ 0xc6, /* ##...##. */
+ /*04a5:*/ 0xc6, /* ##...##. */
+ /*04a6:*/ 0x6e, /* .##.###. */
+ /*04a7:*/ 0x36, /* ..##.##. */
+/* --- new character e (101) starting at offset 0x04a8 --- */
+ /*04a8:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04ad:*/ 0x78, /* .####... */
+ /*04ae:*/ 0xcc, /* ##..##.. */
+ /*04af:*/ 0xcc, /* ##..##.. */
+ /*04b0:*/ 0xfc, /* ######.. */
+ /*04b1:*/ 0xc0, /* ##...... */
+ /*04b2:*/ 0xc0, /* ##...... */
+ /*04b3:*/ 0xec, /* ###.##.. */
+ /*04b4:*/ 0x78, /* .####... */
+/* --- new character f (102) starting at offset 0x04b5 --- */
+ /*04b5:*/ 4, 5, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*04ba:*/ 0x38, /* ..###... */
+ /*04bb:*/ 0x60, /* .##..... */
+ /*04bc:*/ 0x60, /* .##..... */
+ /*04bd:*/ 0xf0, /* ####.... */
+ /*04be:*/ 0x60, /* .##..... */
+ /*04bf:*/ 0x60, /* .##..... */
+ /*04c0:*/ 0x60, /* .##..... */
+ /*04c1:*/ 0x60, /* .##..... */
+ /*04c2:*/ 0x60, /* .##..... */
+ /*04c3:*/ 0x60, /* .##..... */
+ /*04c4:*/ 0x60, /* .##..... */
+/* --- new character g (103) starting at offset 0x04c5 --- */
+ /*04c5:*/ 9, 7, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*04ca:*/ 0x3a, /* ..###.#. */
+ /*04cb:*/ 0x6e, /* .##.###. */
+ /*04cc:*/ 0xc6, /* ##...##. */
+ /*04cd:*/ 0xc6, /* ##...##. */
+ /*04ce:*/ 0xc6, /* ##...##. */
+ /*04cf:*/ 0xc6, /* ##...##. */
+ /*04d0:*/ 0x6e, /* .##.###. */
+ /*04d1:*/ 0x3e, /* ..#####. */
+ /*04d2:*/ 0x06, /* .....##. */
+ /*04d3:*/ 0xce, /* ##..###. */
+ /*04d4:*/ 0x7c, /* .#####.. */
+/* --- new character h (104) starting at offset 0x04d5 --- */
+ /*04d5:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04da:*/ 0xc0, /* ##...... */
+ /*04db:*/ 0xc0, /* ##...... */
+ /*04dc:*/ 0xc0, /* ##...... */
+ /*04dd:*/ 0xdc, /* ##.###.. */
+ /*04de:*/ 0xee, /* ###.###. */
+ /*04df:*/ 0xc6, /* ##...##. */
+ /*04e0:*/ 0xc6, /* ##...##. */
+ /*04e1:*/ 0xc6, /* ##...##. */
+ /*04e2:*/ 0xc6, /* ##...##. */
+ /*04e3:*/ 0xc6, /* ##...##. */
+ /*04e4:*/ 0xc6, /* ##...##. */
+/* --- new character i (105) starting at offset 0x04e5 --- */
+ /*04e5:*/ 4, 2, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04ea:*/ 0xc0, /* ##...... */
+ /*04eb:*/ 0xc0, /* ##...... */
+ /*04ec:*/ 0x00, /* ........ */
+ /*04ed:*/ 0xc0, /* ##...... */
+ /*04ee:*/ 0xc0, /* ##...... */
+ /*04ef:*/ 0xc0, /* ##...... */
+ /*04f0:*/ 0xc0, /* ##...... */
+ /*04f1:*/ 0xc0, /* ##...... */
+ /*04f2:*/ 0xc0, /* ##...... */
+ /*04f3:*/ 0xc0, /* ##...... */
+ /*04f4:*/ 0xc0, /* ##...... */
+/* --- new character j (106) starting at offset 0x04f5 --- */
+ /*04f5:*/ 4, 3, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*04fa:*/ 0x60, /* .##..... */
+ /*04fb:*/ 0x60, /* .##..... */
+ /*04fc:*/ 0x00, /* ........ */
+ /*04fd:*/ 0x60, /* .##..... */
+ /*04fe:*/ 0x60, /* .##..... */
+ /*04ff:*/ 0x60, /* .##..... */
+ /*0500:*/ 0x60, /* .##..... */
+ /*0501:*/ 0x60, /* .##..... */
+ /*0502:*/ 0x60, /* .##..... */
+ /*0503:*/ 0x60, /* .##..... */
+ /*0504:*/ 0x60, /* .##..... */
+ /*0505:*/ 0x60, /* .##..... */
+ /*0506:*/ 0xe0, /* ###..... */
+ /*0507:*/ 0xc0, /* ##...... */
+/* --- new character k (107) starting at offset 0x0508 --- */
+ /*0508:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*050d:*/ 0xc0, /* ##...... */
+ /*050e:*/ 0xc0, /* ##...... */
+ /*050f:*/ 0xc0, /* ##...... */
+ /*0510:*/ 0xcc, /* ##..##.. */
+ /*0511:*/ 0xd8, /* ##.##... */
+ /*0512:*/ 0xf0, /* ####.... */
+ /*0513:*/ 0xf0, /* ####.... */
+ /*0514:*/ 0xd8, /* ##.##... */
+ /*0515:*/ 0xd8, /* ##.##... */
+ /*0516:*/ 0xcc, /* ##..##.. */
+ /*0517:*/ 0xcc, /* ##..##.. */
+/* --- new character l (108) starting at offset 0x0518 --- */
+ /*0518:*/ 4, 2, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*051d:*/ 0xc0, /* ##...... */
+ /*051e:*/ 0xc0, /* ##...... */
+ /*051f:*/ 0xc0, /* ##...... */
+ /*0520:*/ 0xc0, /* ##...... */
+ /*0521:*/ 0xc0, /* ##...... */
+ /*0522:*/ 0xc0, /* ##...... */
+ /*0523:*/ 0xc0, /* ##...... */
+ /*0524:*/ 0xc0, /* ##...... */
+ /*0525:*/ 0xc0, /* ##...... */
+ /*0526:*/ 0xc0, /* ##...... */
+ /*0527:*/ 0xc0, /* ##...... */
+/* --- new character m (109) starting at offset 0x0528 --- */
+ /*0528:*/ 12, 10, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*052d:*/ 0xdb,0x80, /* ##.##.###....... */
+ /*052f:*/ 0xee,0xc0, /* ###.###.##...... */
+ /*0531:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*0533:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*0535:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*0537:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*0539:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*053b:*/ 0xcc,0xc0, /* ##..##..##...... */
+/* --- new character n (110) starting at offset 0x053d --- */
+ /*053d:*/ 9, 7, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0542:*/ 0xdc, /* ##.###.. */
+ /*0543:*/ 0xee, /* ###.###. */
+ /*0544:*/ 0xc6, /* ##...##. */
+ /*0545:*/ 0xc6, /* ##...##. */
+ /*0546:*/ 0xc6, /* ##...##. */
+ /*0547:*/ 0xc6, /* ##...##. */
+ /*0548:*/ 0xc6, /* ##...##. */
+ /*0549:*/ 0xc6, /* ##...##. */
+/* --- new character o (111) starting at offset 0x054a --- */
+ /*054a:*/ 9, 7, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*054f:*/ 0x38, /* ..###... */
+ /*0550:*/ 0x6c, /* .##.##.. */
+ /*0551:*/ 0xc6, /* ##...##. */
+ /*0552:*/ 0xc6, /* ##...##. */
+ /*0553:*/ 0xc6, /* ##...##. */
+ /*0554:*/ 0xc6, /* ##...##. */
+ /*0555:*/ 0x6c, /* .##.##.. */
+ /*0556:*/ 0x38, /* ..###... */
+/* --- new character p (112) starting at offset 0x0557 --- */
+ /*0557:*/ 9, 7, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*055c:*/ 0xd8, /* ##.##... */
+ /*055d:*/ 0xec, /* ###.##.. */
+ /*055e:*/ 0xc6, /* ##...##. */
+ /*055f:*/ 0xc6, /* ##...##. */
+ /*0560:*/ 0xc6, /* ##...##. */
+ /*0561:*/ 0xc6, /* ##...##. */
+ /*0562:*/ 0xec, /* ###.##.. */
+ /*0563:*/ 0xf8, /* #####... */
+ /*0564:*/ 0xc0, /* ##...... */
+ /*0565:*/ 0xc0, /* ##...... */
+ /*0566:*/ 0xc0, /* ##...... */
+/* --- new character q (113) starting at offset 0x0567 --- */
+ /*0567:*/ 9, 7, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*056c:*/ 0x36, /* ..##.##. */
+ /*056d:*/ 0x6e, /* .##.###. */
+ /*056e:*/ 0xc6, /* ##...##. */
+ /*056f:*/ 0xc6, /* ##...##. */
+ /*0570:*/ 0xc6, /* ##...##. */
+ /*0571:*/ 0xc6, /* ##...##. */
+ /*0572:*/ 0x6e, /* .##.###. */
+ /*0573:*/ 0x3e, /* ..#####. */
+ /*0574:*/ 0x06, /* .....##. */
+ /*0575:*/ 0x06, /* .....##. */
+ /*0576:*/ 0x06, /* .....##. */
+/* --- new character r (114) starting at offset 0x0577 --- */
+ /*0577:*/ 6, 5, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*057c:*/ 0xd8, /* ##.##... */
+ /*057d:*/ 0xf8, /* #####... */
+ /*057e:*/ 0xc0, /* ##...... */
+ /*057f:*/ 0xc0, /* ##...... */
+ /*0580:*/ 0xc0, /* ##...... */
+ /*0581:*/ 0xc0, /* ##...... */
+ /*0582:*/ 0xc0, /* ##...... */
+ /*0583:*/ 0xc0, /* ##...... */
+/* --- new character s (115) starting at offset 0x0584 --- */
+ /*0584:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0589:*/ 0x78, /* .####... */
+ /*058a:*/ 0xec, /* ###.##.. */
+ /*058b:*/ 0xc0, /* ##...... */
+ /*058c:*/ 0x78, /* .####... */
+ /*058d:*/ 0x1c, /* ...###.. */
+ /*058e:*/ 0x0c, /* ....##.. */
+ /*058f:*/ 0xec, /* ###.##.. */
+ /*0590:*/ 0x78, /* .####... */
+/* --- new character t (116) starting at offset 0x0591 --- */
+ /*0591:*/ 5, 5, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0596:*/ 0x60, /* .##..... */
+ /*0597:*/ 0x60, /* .##..... */
+ /*0598:*/ 0xf8, /* #####... */
+ /*0599:*/ 0x60, /* .##..... */
+ /*059a:*/ 0x60, /* .##..... */
+ /*059b:*/ 0x60, /* .##..... */
+ /*059c:*/ 0x60, /* .##..... */
+ /*059d:*/ 0x60, /* .##..... */
+ /*059e:*/ 0x68, /* .##.#... */
+ /*059f:*/ 0x30, /* ..##.... */
+/* --- new character u (117) starting at offset 0x05a0 --- */
+ /*05a0:*/ 9, 7, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*05a5:*/ 0xc6, /* ##...##. */
+ /*05a6:*/ 0xc6, /* ##...##. */
+ /*05a7:*/ 0xc6, /* ##...##. */
+ /*05a8:*/ 0xc6, /* ##...##. */
+ /*05a9:*/ 0xc6, /* ##...##. */
+ /*05aa:*/ 0xc6, /* ##...##. */
+ /*05ab:*/ 0xee, /* ###.###. */
+ /*05ac:*/ 0x76, /* .###.##. */
+/* --- new character v (118) starting at offset 0x05ad --- */
+ /*05ad:*/ 8, 8, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*05b2:*/ 0xc3, /* ##....## */
+ /*05b3:*/ 0xc3, /* ##....## */
+ /*05b4:*/ 0x66, /* .##..##. */
+ /*05b5:*/ 0x66, /* .##..##. */
+ /*05b6:*/ 0x24, /* ..#..#.. */
+ /*05b7:*/ 0x3c, /* ..####.. */
+ /*05b8:*/ 0x18, /* ...##... */
+ /*05b9:*/ 0x18, /* ...##... */
+/* --- new character w (119) starting at offset 0x05ba --- */
+ /*05ba:*/ 10, 10, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*05bf:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*05c1:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*05c3:*/ 0xcc,0xc0, /* ##..##..##...... */
+ /*05c5:*/ 0x6d,0x80, /* .##.##.##....... */
+ /*05c7:*/ 0x6d,0x80, /* .##.##.##....... */
+ /*05c9:*/ 0x33,0x00, /* ..##..##........ */
+ /*05cb:*/ 0x33,0x00, /* ..##..##........ */
+ /*05cd:*/ 0x33,0x00, /* ..##..##........ */
+/* --- new character x (120) starting at offset 0x05cf --- */
+ /*05cf:*/ 7, 7, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*05d4:*/ 0xc6, /* ##...##. */
+ /*05d5:*/ 0xc6, /* ##...##. */
+ /*05d6:*/ 0x6c, /* .##.##.. */
+ /*05d7:*/ 0x38, /* ..###... */
+ /*05d8:*/ 0x38, /* ..###... */
+ /*05d9:*/ 0x6c, /* .##.##.. */
+ /*05da:*/ 0xc6, /* ##...##. */
+ /*05db:*/ 0xc6, /* ##...##. */
+/* --- new character y (121) starting at offset 0x05dc --- */
+ /*05dc:*/ 8, 8, 11, 0, -3, /* width and bbox (w,h,x,y) */
+ /*05e1:*/ 0xc3, /* ##....## */
+ /*05e2:*/ 0xc3, /* ##....## */
+ /*05e3:*/ 0x66, /* .##..##. */
+ /*05e4:*/ 0x66, /* .##..##. */
+ /*05e5:*/ 0x24, /* ..#..#.. */
+ /*05e6:*/ 0x3c, /* ..####.. */
+ /*05e7:*/ 0x18, /* ...##... */
+ /*05e8:*/ 0x18, /* ...##... */
+ /*05e9:*/ 0x18, /* ...##... */
+ /*05ea:*/ 0x30, /* ..##.... */
+ /*05eb:*/ 0x70, /* .###.... */
+/* --- new character z (122) starting at offset 0x05ec --- */
+ /*05ec:*/ 6, 6, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*05f1:*/ 0xfc, /* ######.. */
+ /*05f2:*/ 0x0c, /* ....##.. */
+ /*05f3:*/ 0x18, /* ...##... */
+ /*05f4:*/ 0x30, /* ..##.... */
+ /*05f5:*/ 0x30, /* ..##.... */
+ /*05f6:*/ 0x60, /* .##..... */
+ /*05f7:*/ 0xc0, /* ##...... */
+ /*05f8:*/ 0xfc, /* ######.. */
+/* --- new character braceleft (123) starting at offset 0x05f9 --- */
+ /*05f9:*/ 6, 5, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*05fe:*/ 0x18, /* ...##... */
+ /*05ff:*/ 0x30, /* ..##.... */
+ /*0600:*/ 0x30, /* ..##.... */
+ /*0601:*/ 0x30, /* ..##.... */
+ /*0602:*/ 0x30, /* ..##.... */
+ /*0603:*/ 0x60, /* .##..... */
+ /*0604:*/ 0xc0, /* ##...... */
+ /*0605:*/ 0x60, /* .##..... */
+ /*0606:*/ 0x30, /* ..##.... */
+ /*0607:*/ 0x30, /* ..##.... */
+ /*0608:*/ 0x30, /* ..##.... */
+ /*0609:*/ 0x30, /* ..##.... */
+ /*060a:*/ 0x30, /* ..##.... */
+ /*060b:*/ 0x18, /* ...##... */
+/* --- new character bar (124) starting at offset 0x060c --- */
+ /*060c:*/ 4, 2, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0611:*/ 0xc0, /* ##...... */
+ /*0612:*/ 0xc0, /* ##...... */
+ /*0613:*/ 0xc0, /* ##...... */
+ /*0614:*/ 0xc0, /* ##...... */
+ /*0615:*/ 0xc0, /* ##...... */
+ /*0616:*/ 0xc0, /* ##...... */
+ /*0617:*/ 0xc0, /* ##...... */
+ /*0618:*/ 0xc0, /* ##...... */
+ /*0619:*/ 0xc0, /* ##...... */
+ /*061a:*/ 0xc0, /* ##...... */
+ /*061b:*/ 0xc0, /* ##...... */
+ /*061c:*/ 0xc0, /* ##...... */
+ /*061d:*/ 0xc0, /* ##...... */
+ /*061e:*/ 0xc0, /* ##...... */
+/* --- new character braceright (125) starting at offset 0x061f --- */
+ /*061f:*/ 6, 5, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0624:*/ 0xc0, /* ##...... */
+ /*0625:*/ 0x60, /* .##..... */
+ /*0626:*/ 0x60, /* .##..... */
+ /*0627:*/ 0x60, /* .##..... */
+ /*0628:*/ 0x60, /* .##..... */
+ /*0629:*/ 0x30, /* ..##.... */
+ /*062a:*/ 0x18, /* ...##... */
+ /*062b:*/ 0x30, /* ..##.... */
+ /*062c:*/ 0x60, /* .##..... */
+ /*062d:*/ 0x60, /* .##..... */
+ /*062e:*/ 0x60, /* .##..... */
+ /*062f:*/ 0x60, /* .##..... */
+ /*0630:*/ 0x60, /* .##..... */
+ /*0631:*/ 0xc0, /* ##...... */
+/* --- new character asciitilde (126) starting at offset 0x0632 --- */
+ /*0632:*/ 9, 7, 3, 1, 3, /* width and bbox (w,h,x,y) */
+ /*0637:*/ 0x72, /* .###..#. */
+ /*0638:*/ 0xde, /* ##.####. */
+ /*0639:*/ 0x8c, /* #...##.. */
+};
+static const uint16_t font_helvB14_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0016 /* quotedbl */,
+ 0x001e /* numbersign */,
+ 0x0037 /* dollar */,
+ 0x0049 /* percent */,
+ 0x0062 /* ampersand */,
+ 0x007b /* quotesingle */,
+ 0x0083 /* parenleft */,
+ 0x0096 /* parenright */,
+ 0x00a9 /* asterisk */,
+ 0x00b2 /* plus */,
+ 0x00be /* comma */,
+ 0x00c6 /* hyphen */,
+ 0x00cc /* period */,
+ 0x00d3 /* slash */,
+ 0x00e3 /* zero */,
+ 0x00f2 /* one */,
+ 0x0101 /* two */,
+ 0x0110 /* three */,
+ 0x011f /* four */,
+ 0x012e /* five */,
+ 0x013d /* six */,
+ 0x014c /* seven */,
+ 0x015b /* eight */,
+ 0x016a /* nine */,
+ 0x0179 /* colon */,
+ 0x0186 /* semicolon */,
+ 0x0194 /* less */,
+ 0x019e /* equal */,
+ 0x01a6 /* greater */,
+ 0x01b0 /* question */,
+ 0x01c0 /* at */,
+ 0x01dd /* A */,
+ 0x01f8 /* B */,
+ 0x0208 /* C */,
+ 0x0223 /* D */,
+ 0x023e /* E */,
+ 0x024e /* F */,
+ 0x025e /* G */,
+ 0x0279 /* H */,
+ 0x0289 /* I */,
+ 0x0299 /* J */,
+ 0x02a9 /* K */,
+ 0x02c4 /* L */,
+ 0x02d4 /* M */,
+ 0x02ef /* N */,
+ 0x030a /* O */,
+ 0x0325 /* P */,
+ 0x0335 /* Q */,
+ 0x0350 /* R */,
+ 0x036b /* S */,
+ 0x037b /* T */,
+ 0x038b /* U */,
+ 0x03a6 /* V */,
+ 0x03c1 /* W */,
+ 0x03dc /* X */,
+ 0x03f7 /* Y */,
+ 0x0412 /* Z */,
+ 0x0422 /* bracketleft */,
+ 0x0435 /* backslash */,
+ 0x0445 /* bracketright */,
+ 0x0458 /* asciicircum */,
+ 0x0461 /* underscore */,
+ 0x0467 /* grave */,
+ 0x046e /* a */,
+ 0x047b /* b */,
+ 0x048b /* c */,
+ 0x0498 /* d */,
+ 0x04a8 /* e */,
+ 0x04b5 /* f */,
+ 0x04c5 /* g */,
+ 0x04d5 /* h */,
+ 0x04e5 /* i */,
+ 0x04f5 /* j */,
+ 0x0508 /* k */,
+ 0x0518 /* l */,
+ 0x0528 /* m */,
+ 0x053d /* n */,
+ 0x054a /* o */,
+ 0x0557 /* p */,
+ 0x0567 /* q */,
+ 0x0577 /* r */,
+ 0x0584 /* s */,
+ 0x0591 /* t */,
+ 0x05a0 /* u */,
+ 0x05ad /* v */,
+ 0x05ba /* w */,
+ 0x05cf /* x */,
+ 0x05dc /* y */,
+ 0x05ec /* z */,
+ 0x05f9 /* braceleft */,
+ 0x060c /* bar */,
+ 0x061f /* braceright */,
+ 0x0632 /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvB14 = {
+ .height = 16,
+ .ascent = 13,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvB14_data,
+ .charoffs = font_helvB14_offsets,
+};
diff --git a/src/target/firmware/fb/helvB24.c b/src/target/firmware/fb/helvB24.c
new file mode 100644
index 00000000..509b9db5
--- /dev/null
+++ b/src/target/firmware/fb/helvB24.c
@@ -0,0 +1,1871 @@
+#include <fb/font.h>
+static const uint8_t font_helvB24_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 6, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 7, 3, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0xe0, /* ###..... */
+ /*000c:*/ 0xe0, /* ###..... */
+ /*000d:*/ 0xe0, /* ###..... */
+ /*000e:*/ 0xe0, /* ###..... */
+ /*000f:*/ 0xe0, /* ###..... */
+ /*0010:*/ 0xe0, /* ###..... */
+ /*0011:*/ 0xe0, /* ###..... */
+ /*0012:*/ 0xe0, /* ###..... */
+ /*0013:*/ 0xe0, /* ###..... */
+ /*0014:*/ 0xe0, /* ###..... */
+ /*0015:*/ 0xe0, /* ###..... */
+ /*0016:*/ 0xe0, /* ###..... */
+ /*0017:*/ 0xe0, /* ###..... */
+ /*0018:*/ 0xe0, /* ###..... */
+ /*0019:*/ 0x00, /* ........ */
+ /*001a:*/ 0x00, /* ........ */
+ /*001b:*/ 0xe0, /* ###..... */
+ /*001c:*/ 0xe0, /* ###..... */
+ /*001d:*/ 0xe0, /* ###..... */
+/* --- new character quotedbl (34) starting at offset 0x001e --- */
+ /*001e:*/ 9, 5, 6, 2, 13, /* width and bbox (w,h,x,y) */
+ /*0023:*/ 0xd8, /* ##.##... */
+ /*0024:*/ 0xd8, /* ##.##... */
+ /*0025:*/ 0xd8, /* ##.##... */
+ /*0026:*/ 0xd8, /* ##.##... */
+ /*0027:*/ 0xd8, /* ##.##... */
+ /*0028:*/ 0x90, /* #..#.... */
+/* --- new character numbersign (35) starting at offset 0x0029 --- */
+ /*0029:*/ 14, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*002e:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0030:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0032:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0034:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0036:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0038:*/ 0x7f,0xf0, /* .###########.... */
+ /*003a:*/ 0x7f,0xf0, /* .###########.... */
+ /*003c:*/ 0x19,0x80, /* ...##..##....... */
+ /*003e:*/ 0x19,0x80, /* ...##..##....... */
+ /*0040:*/ 0x19,0x80, /* ...##..##....... */
+ /*0042:*/ 0x19,0x80, /* ...##..##....... */
+ /*0044:*/ 0xff,0xe0, /* ###########..... */
+ /*0046:*/ 0xff,0xe0, /* ###########..... */
+ /*0048:*/ 0x33,0x00, /* ..##..##........ */
+ /*004a:*/ 0x33,0x00, /* ..##..##........ */
+ /*004c:*/ 0x33,0x00, /* ..##..##........ */
+ /*004e:*/ 0x33,0x00, /* ..##..##........ */
+ /*0050:*/ 0x33,0x00, /* ..##..##........ */
+/* --- new character dollar (36) starting at offset 0x0052 --- */
+ /*0052:*/ 13, 12, 21, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0057:*/ 0x06,0x00, /* .....##......... */
+ /*0059:*/ 0x3f,0x80, /* ..#######....... */
+ /*005b:*/ 0x7f,0xc0, /* .#########...... */
+ /*005d:*/ 0xf6,0xe0, /* ####.##.###..... */
+ /*005f:*/ 0xe6,0xe0, /* ###..##.###..... */
+ /*0061:*/ 0xe6,0xe0, /* ###..##.###..... */
+ /*0063:*/ 0xf6,0x00, /* ####.##......... */
+ /*0065:*/ 0x7e,0x00, /* .######......... */
+ /*0067:*/ 0x3e,0x00, /* ..#####......... */
+ /*0069:*/ 0x0f,0x00, /* ....####........ */
+ /*006b:*/ 0x07,0xc0, /* .....#####...... */
+ /*006d:*/ 0x07,0xe0, /* .....######..... */
+ /*006f:*/ 0x06,0xf0, /* .....##.####.... */
+ /*0071:*/ 0xe6,0x70, /* ###..##..###.... */
+ /*0073:*/ 0xe6,0x70, /* ###..##..###.... */
+ /*0075:*/ 0xe6,0x70, /* ###..##..###.... */
+ /*0077:*/ 0xf6,0xf0, /* ####.##.####.... */
+ /*0079:*/ 0x7f,0xe0, /* .##########..... */
+ /*007b:*/ 0x1f,0xc0, /* ...#######...... */
+ /*007d:*/ 0x06,0x00, /* .....##......... */
+ /*007f:*/ 0x06,0x00, /* .....##......... */
+/* --- new character percent (37) starting at offset 0x0081 --- */
+ /*0081:*/ 22, 21, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0086:*/ 0x00,0x07,0x00, /* .............###........ */
+ /*0089:*/ 0x3e,0x07,0x00, /* ..#####......###........ */
+ /*008c:*/ 0x7f,0x0e,0x00, /* .#######....###......... */
+ /*008f:*/ 0xe3,0x8e,0x00, /* ###...###...###......... */
+ /*0092:*/ 0xc1,0x9c,0x00, /* ##.....##..###.......... */
+ /*0095:*/ 0xc1,0x9c,0x00, /* ##.....##..###.......... */
+ /*0098:*/ 0xe3,0xb8,0x00, /* ###...###.###........... */
+ /*009b:*/ 0x7f,0x38,0x00, /* .#######..###........... */
+ /*009e:*/ 0x3e,0x70,0x00, /* ..#####..###............ */
+ /*00a1:*/ 0x00,0x70,0x00, /* .........###............ */
+ /*00a4:*/ 0x00,0xe3,0xe0, /* ........###...#####..... */
+ /*00a7:*/ 0x00,0xe7,0xf0, /* ........###..#######.... */
+ /*00aa:*/ 0x01,0xce,0x38, /* .......###..###...###... */
+ /*00ad:*/ 0x01,0xcc,0x18, /* .......###..##.....##... */
+ /*00b0:*/ 0x03,0x8c,0x18, /* ......###...##.....##... */
+ /*00b3:*/ 0x03,0x8e,0x38, /* ......###...###...###... */
+ /*00b6:*/ 0x07,0x07,0xf0, /* .....###.....#######.... */
+ /*00b9:*/ 0x07,0x03,0xe0, /* .....###......#####..... */
+/* --- new character ampersand (38) starting at offset 0x00bc --- */
+ /*00bc:*/ 18, 16, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00c1:*/ 0x0f,0x80, /* ....#####....... */
+ /*00c3:*/ 0x1f,0xc0, /* ...#######...... */
+ /*00c5:*/ 0x3d,0xe0, /* ..####.####..... */
+ /*00c7:*/ 0x38,0xe0, /* ..###...###..... */
+ /*00c9:*/ 0x38,0xe0, /* ..###...###..... */
+ /*00cb:*/ 0x38,0xe0, /* ..###...###..... */
+ /*00cd:*/ 0x1d,0xc0, /* ...###.###...... */
+ /*00cf:*/ 0x0f,0x80, /* ....#####....... */
+ /*00d1:*/ 0x1f,0x00, /* ...#####........ */
+ /*00d3:*/ 0x3f,0x9c, /* ..#######..###.. */
+ /*00d5:*/ 0x7b,0xdc, /* .####.####.###.. */
+ /*00d7:*/ 0x71,0xfc, /* .###...#######.. */
+ /*00d9:*/ 0xe0,0xf8, /* ###.....#####... */
+ /*00db:*/ 0xe0,0x70, /* ###......###.... */
+ /*00dd:*/ 0xe0,0xf8, /* ###.....#####... */
+ /*00df:*/ 0xf1,0xfc, /* ####...#######.. */
+ /*00e1:*/ 0x7f,0xce, /* .#########..###. */
+ /*00e3:*/ 0x1f,0x87, /* ...######....### */
+/* --- new character quotesingle (39) starting at offset 0x00e5 --- */
+ /*00e5:*/ 6, 2, 6, 2, 13, /* width and bbox (w,h,x,y) */
+ /*00ea:*/ 0xc0, /* ##...... */
+ /*00eb:*/ 0xc0, /* ##...... */
+ /*00ec:*/ 0xc0, /* ##...... */
+ /*00ed:*/ 0xc0, /* ##...... */
+ /*00ee:*/ 0xc0, /* ##...... */
+ /*00ef:*/ 0x80, /* #....... */
+/* --- new character parenleft (40) starting at offset 0x00f0 --- */
+ /*00f0:*/ 8, 6, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*00f5:*/ 0x0c, /* ....##.. */
+ /*00f6:*/ 0x1c, /* ...###.. */
+ /*00f7:*/ 0x38, /* ..###... */
+ /*00f8:*/ 0x38, /* ..###... */
+ /*00f9:*/ 0x70, /* .###.... */
+ /*00fa:*/ 0x70, /* .###.... */
+ /*00fb:*/ 0x60, /* .##..... */
+ /*00fc:*/ 0xe0, /* ###..... */
+ /*00fd:*/ 0xe0, /* ###..... */
+ /*00fe:*/ 0xe0, /* ###..... */
+ /*00ff:*/ 0xe0, /* ###..... */
+ /*0100:*/ 0xe0, /* ###..... */
+ /*0101:*/ 0xe0, /* ###..... */
+ /*0102:*/ 0xe0, /* ###..... */
+ /*0103:*/ 0xe0, /* ###..... */
+ /*0104:*/ 0xe0, /* ###..... */
+ /*0105:*/ 0xe0, /* ###..... */
+ /*0106:*/ 0x60, /* .##..... */
+ /*0107:*/ 0x70, /* .###.... */
+ /*0108:*/ 0x70, /* .###.... */
+ /*0109:*/ 0x38, /* ..###... */
+ /*010a:*/ 0x38, /* ..###... */
+ /*010b:*/ 0x1c, /* ...###.. */
+ /*010c:*/ 0x0c, /* ....##.. */
+/* --- new character parenright (41) starting at offset 0x010d --- */
+ /*010d:*/ 8, 6, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0112:*/ 0xc0, /* ##...... */
+ /*0113:*/ 0xe0, /* ###..... */
+ /*0114:*/ 0x70, /* .###.... */
+ /*0115:*/ 0x70, /* .###.... */
+ /*0116:*/ 0x38, /* ..###... */
+ /*0117:*/ 0x38, /* ..###... */
+ /*0118:*/ 0x18, /* ...##... */
+ /*0119:*/ 0x1c, /* ...###.. */
+ /*011a:*/ 0x1c, /* ...###.. */
+ /*011b:*/ 0x1c, /* ...###.. */
+ /*011c:*/ 0x1c, /* ...###.. */
+ /*011d:*/ 0x1c, /* ...###.. */
+ /*011e:*/ 0x1c, /* ...###.. */
+ /*011f:*/ 0x1c, /* ...###.. */
+ /*0120:*/ 0x1c, /* ...###.. */
+ /*0121:*/ 0x1c, /* ...###.. */
+ /*0122:*/ 0x1c, /* ...###.. */
+ /*0123:*/ 0x18, /* ...##... */
+ /*0124:*/ 0x38, /* ..###... */
+ /*0125:*/ 0x38, /* ..###... */
+ /*0126:*/ 0x70, /* .###.... */
+ /*0127:*/ 0x70, /* .###.... */
+ /*0128:*/ 0xe0, /* ###..... */
+ /*0129:*/ 0xc0, /* ##...... */
+/* --- new character asterisk (42) starting at offset 0x012a --- */
+ /*012a:*/ 10, 8, 7, 1, 12, /* width and bbox (w,h,x,y) */
+ /*012f:*/ 0x18, /* ...##... */
+ /*0130:*/ 0x18, /* ...##... */
+ /*0131:*/ 0xdb, /* ##.##.## */
+ /*0132:*/ 0xff, /* ######## */
+ /*0133:*/ 0x3c, /* ..####.. */
+ /*0134:*/ 0x66, /* .##..##. */
+ /*0135:*/ 0x66, /* .##..##. */
+/* --- new character plus (43) starting at offset 0x0136 --- */
+ /*0136:*/ 15, 11, 12, 2, 1, /* width and bbox (w,h,x,y) */
+ /*013b:*/ 0x0e,0x00, /* ....###......... */
+ /*013d:*/ 0x0e,0x00, /* ....###......... */
+ /*013f:*/ 0x0e,0x00, /* ....###......... */
+ /*0141:*/ 0x0e,0x00, /* ....###......... */
+ /*0143:*/ 0x0e,0x00, /* ....###......... */
+ /*0145:*/ 0xff,0xe0, /* ###########..... */
+ /*0147:*/ 0xff,0xe0, /* ###########..... */
+ /*0149:*/ 0x0e,0x00, /* ....###......... */
+ /*014b:*/ 0x0e,0x00, /* ....###......... */
+ /*014d:*/ 0x0e,0x00, /* ....###......... */
+ /*014f:*/ 0x0e,0x00, /* ....###......... */
+ /*0151:*/ 0x0e,0x00, /* ....###......... */
+/* --- new character comma (44) starting at offset 0x0153 --- */
+ /*0153:*/ 7, 3, 6, 2, -3, /* width and bbox (w,h,x,y) */
+ /*0158:*/ 0xe0, /* ###..... */
+ /*0159:*/ 0xe0, /* ###..... */
+ /*015a:*/ 0xe0, /* ###..... */
+ /*015b:*/ 0x60, /* .##..... */
+ /*015c:*/ 0x60, /* .##..... */
+ /*015d:*/ 0xc0, /* ##...... */
+/* --- new character hyphen (45) starting at offset 0x015e --- */
+ /*015e:*/ 8, 7, 3, 0, 6, /* width and bbox (w,h,x,y) */
+ /*0163:*/ 0xfe, /* #######. */
+ /*0164:*/ 0xfe, /* #######. */
+ /*0165:*/ 0xfe, /* #######. */
+/* --- new character period (46) starting at offset 0x0166 --- */
+ /*0166:*/ 7, 3, 3, 2, 0, /* width and bbox (w,h,x,y) */
+ /*016b:*/ 0xe0, /* ###..... */
+ /*016c:*/ 0xe0, /* ###..... */
+ /*016d:*/ 0xe0, /* ###..... */
+/* --- new character slash (47) starting at offset 0x016e --- */
+ /*016e:*/ 8, 8, 19, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0173:*/ 0x07, /* .....### */
+ /*0174:*/ 0x07, /* .....### */
+ /*0175:*/ 0x06, /* .....##. */
+ /*0176:*/ 0x06, /* .....##. */
+ /*0177:*/ 0x0e, /* ....###. */
+ /*0178:*/ 0x0c, /* ....##.. */
+ /*0179:*/ 0x0c, /* ....##.. */
+ /*017a:*/ 0x1c, /* ...###.. */
+ /*017b:*/ 0x1c, /* ...###.. */
+ /*017c:*/ 0x18, /* ...##... */
+ /*017d:*/ 0x18, /* ...##... */
+ /*017e:*/ 0x38, /* ..###... */
+ /*017f:*/ 0x30, /* ..##.... */
+ /*0180:*/ 0x30, /* ..##.... */
+ /*0181:*/ 0x70, /* .###.... */
+ /*0182:*/ 0x60, /* .##..... */
+ /*0183:*/ 0x60, /* .##..... */
+ /*0184:*/ 0xe0, /* ###..... */
+ /*0185:*/ 0xe0, /* ###..... */
+/* --- new character zero (48) starting at offset 0x0186 --- */
+ /*0186:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*018b:*/ 0x1f,0x80, /* ...######....... */
+ /*018d:*/ 0x3f,0xc0, /* ..########...... */
+ /*018f:*/ 0x79,0xe0, /* .####..####..... */
+ /*0191:*/ 0x70,0xe0, /* .###....###..... */
+ /*0193:*/ 0x70,0xe0, /* .###....###..... */
+ /*0195:*/ 0xe0,0x70, /* ###......###.... */
+ /*0197:*/ 0xe0,0x70, /* ###......###.... */
+ /*0199:*/ 0xe0,0x70, /* ###......###.... */
+ /*019b:*/ 0xe0,0x70, /* ###......###.... */
+ /*019d:*/ 0xe0,0x70, /* ###......###.... */
+ /*019f:*/ 0xe0,0x70, /* ###......###.... */
+ /*01a1:*/ 0xe0,0x70, /* ###......###.... */
+ /*01a3:*/ 0xe0,0x70, /* ###......###.... */
+ /*01a5:*/ 0x70,0xe0, /* .###....###..... */
+ /*01a7:*/ 0x70,0xe0, /* .###....###..... */
+ /*01a9:*/ 0x79,0xe0, /* .####..####..... */
+ /*01ab:*/ 0x3f,0xc0, /* ..########...... */
+ /*01ad:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character one (49) starting at offset 0x01af --- */
+ /*01af:*/ 13, 7, 18, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01b4:*/ 0x0e, /* ....###. */
+ /*01b5:*/ 0x0e, /* ....###. */
+ /*01b6:*/ 0x1e, /* ...####. */
+ /*01b7:*/ 0xfe, /* #######. */
+ /*01b8:*/ 0xfe, /* #######. */
+ /*01b9:*/ 0x0e, /* ....###. */
+ /*01ba:*/ 0x0e, /* ....###. */
+ /*01bb:*/ 0x0e, /* ....###. */
+ /*01bc:*/ 0x0e, /* ....###. */
+ /*01bd:*/ 0x0e, /* ....###. */
+ /*01be:*/ 0x0e, /* ....###. */
+ /*01bf:*/ 0x0e, /* ....###. */
+ /*01c0:*/ 0x0e, /* ....###. */
+ /*01c1:*/ 0x0e, /* ....###. */
+ /*01c2:*/ 0x0e, /* ....###. */
+ /*01c3:*/ 0x0e, /* ....###. */
+ /*01c4:*/ 0x0e, /* ....###. */
+ /*01c5:*/ 0x0e, /* ....###. */
+/* --- new character two (50) starting at offset 0x01c6 --- */
+ /*01c6:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01cb:*/ 0x1f,0x00, /* ...#####........ */
+ /*01cd:*/ 0x7f,0xc0, /* .#########...... */
+ /*01cf:*/ 0x71,0xe0, /* .###...####..... */
+ /*01d1:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*01d3:*/ 0xe0,0x70, /* ###......###.... */
+ /*01d5:*/ 0xe0,0x70, /* ###......###.... */
+ /*01d7:*/ 0x00,0x70, /* .........###.... */
+ /*01d9:*/ 0x00,0xe0, /* ........###..... */
+ /*01db:*/ 0x01,0xe0, /* .......####..... */
+ /*01dd:*/ 0x03,0xc0, /* ......####...... */
+ /*01df:*/ 0x07,0x80, /* .....####....... */
+ /*01e1:*/ 0x1f,0x00, /* ...#####........ */
+ /*01e3:*/ 0x3c,0x00, /* ..####.......... */
+ /*01e5:*/ 0x78,0x00, /* .####........... */
+ /*01e7:*/ 0xf0,0x00, /* ####............ */
+ /*01e9:*/ 0xe0,0x00, /* ###............. */
+ /*01eb:*/ 0xff,0xf0, /* ############.... */
+ /*01ed:*/ 0xff,0xf0, /* ############.... */
+/* --- new character three (51) starting at offset 0x01ef --- */
+ /*01ef:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*01f4:*/ 0x1f,0x00, /* ...#####........ */
+ /*01f6:*/ 0x7f,0xc0, /* .#########...... */
+ /*01f8:*/ 0x71,0xc0, /* .###...###...... */
+ /*01fa:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*01fc:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*01fe:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0200:*/ 0x00,0xe0, /* ........###..... */
+ /*0202:*/ 0x01,0xc0, /* .......###...... */
+ /*0204:*/ 0x0f,0x80, /* ....#####....... */
+ /*0206:*/ 0x0f,0xe0, /* ....#######..... */
+ /*0208:*/ 0x00,0xe0, /* ........###..... */
+ /*020a:*/ 0x00,0x70, /* .........###.... */
+ /*020c:*/ 0x00,0x70, /* .........###.... */
+ /*020e:*/ 0xe0,0x70, /* ###......###.... */
+ /*0210:*/ 0xe0,0xf0, /* ###.....####.... */
+ /*0212:*/ 0x71,0xe0, /* .###...####..... */
+ /*0214:*/ 0x7f,0xe0, /* .##########..... */
+ /*0216:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character four (52) starting at offset 0x0218 --- */
+ /*0218:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*021d:*/ 0x01,0xc0, /* .......###...... */
+ /*021f:*/ 0x03,0xc0, /* ......####...... */
+ /*0221:*/ 0x03,0xc0, /* ......####...... */
+ /*0223:*/ 0x07,0xc0, /* .....#####...... */
+ /*0225:*/ 0x07,0xc0, /* .....#####...... */
+ /*0227:*/ 0x0d,0xc0, /* ....##.###...... */
+ /*0229:*/ 0x1d,0xc0, /* ...###.###...... */
+ /*022b:*/ 0x19,0xc0, /* ...##..###...... */
+ /*022d:*/ 0x31,0xc0, /* ..##...###...... */
+ /*022f:*/ 0x71,0xc0, /* .###...###...... */
+ /*0231:*/ 0x61,0xc0, /* .##....###...... */
+ /*0233:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0235:*/ 0xff,0xf0, /* ############.... */
+ /*0237:*/ 0xff,0xf0, /* ############.... */
+ /*0239:*/ 0x01,0xc0, /* .......###...... */
+ /*023b:*/ 0x01,0xc0, /* .......###...... */
+ /*023d:*/ 0x01,0xc0, /* .......###...... */
+ /*023f:*/ 0x01,0xc0, /* .......###...... */
+/* --- new character five (53) starting at offset 0x0241 --- */
+ /*0241:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0246:*/ 0x7f,0xe0, /* .##########..... */
+ /*0248:*/ 0x7f,0xe0, /* .##########..... */
+ /*024a:*/ 0x70,0x00, /* .###............ */
+ /*024c:*/ 0x70,0x00, /* .###............ */
+ /*024e:*/ 0x70,0x00, /* .###............ */
+ /*0250:*/ 0x70,0x00, /* .###............ */
+ /*0252:*/ 0x7f,0x80, /* .########....... */
+ /*0254:*/ 0x7f,0xc0, /* .#########...... */
+ /*0256:*/ 0x71,0xe0, /* .###...####..... */
+ /*0258:*/ 0x00,0xe0, /* ........###..... */
+ /*025a:*/ 0x00,0x70, /* .........###.... */
+ /*025c:*/ 0x00,0x70, /* .........###.... */
+ /*025e:*/ 0x00,0x70, /* .........###.... */
+ /*0260:*/ 0xe0,0x70, /* ###......###.... */
+ /*0262:*/ 0xe0,0xf0, /* ###.....####.... */
+ /*0264:*/ 0xf1,0xe0, /* ####...####..... */
+ /*0266:*/ 0x7f,0xc0, /* .#########...... */
+ /*0268:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character six (54) starting at offset 0x026a --- */
+ /*026a:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*026f:*/ 0x0f,0x80, /* ....#####....... */
+ /*0271:*/ 0x3f,0xe0, /* ..#########..... */
+ /*0273:*/ 0x78,0xe0, /* .####...###..... */
+ /*0275:*/ 0x70,0x70, /* .###.....###.... */
+ /*0277:*/ 0xe0,0x70, /* ###......###.... */
+ /*0279:*/ 0xe0,0x00, /* ###............. */
+ /*027b:*/ 0xe0,0x00, /* ###............. */
+ /*027d:*/ 0xef,0x00, /* ###.####........ */
+ /*027f:*/ 0xff,0xc0, /* ##########...... */
+ /*0281:*/ 0xf9,0xe0, /* #####..####..... */
+ /*0283:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0285:*/ 0xe0,0x70, /* ###......###.... */
+ /*0287:*/ 0xe0,0x70, /* ###......###.... */
+ /*0289:*/ 0xe0,0x70, /* ###......###.... */
+ /*028b:*/ 0x70,0xe0, /* .###....###..... */
+ /*028d:*/ 0x79,0xe0, /* .####..####..... */
+ /*028f:*/ 0x3f,0xc0, /* ..########...... */
+ /*0291:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character seven (55) starting at offset 0x0293 --- */
+ /*0293:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0298:*/ 0xff,0xf0, /* ############.... */
+ /*029a:*/ 0xff,0xf0, /* ############.... */
+ /*029c:*/ 0x00,0xf0, /* ........####.... */
+ /*029e:*/ 0x00,0xe0, /* ........###..... */
+ /*02a0:*/ 0x01,0xc0, /* .......###...... */
+ /*02a2:*/ 0x01,0xc0, /* .......###...... */
+ /*02a4:*/ 0x03,0x80, /* ......###....... */
+ /*02a6:*/ 0x03,0x80, /* ......###....... */
+ /*02a8:*/ 0x07,0x00, /* .....###........ */
+ /*02aa:*/ 0x07,0x00, /* .....###........ */
+ /*02ac:*/ 0x0e,0x00, /* ....###......... */
+ /*02ae:*/ 0x0e,0x00, /* ....###......... */
+ /*02b0:*/ 0x1e,0x00, /* ...####......... */
+ /*02b2:*/ 0x1c,0x00, /* ...###.......... */
+ /*02b4:*/ 0x1c,0x00, /* ...###.......... */
+ /*02b6:*/ 0x3c,0x00, /* ..####.......... */
+ /*02b8:*/ 0x38,0x00, /* ..###........... */
+ /*02ba:*/ 0x38,0x00, /* ..###........... */
+/* --- new character eight (56) starting at offset 0x02bc --- */
+ /*02bc:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02c1:*/ 0x0f,0x00, /* ....####........ */
+ /*02c3:*/ 0x3f,0xc0, /* ..########...... */
+ /*02c5:*/ 0x39,0xc0, /* ..###..###...... */
+ /*02c7:*/ 0x70,0xe0, /* .###....###..... */
+ /*02c9:*/ 0x70,0xe0, /* .###....###..... */
+ /*02cb:*/ 0x70,0xe0, /* .###....###..... */
+ /*02cd:*/ 0x70,0xe0, /* .###....###..... */
+ /*02cf:*/ 0x39,0xc0, /* ..###..###...... */
+ /*02d1:*/ 0x1f,0x80, /* ...######....... */
+ /*02d3:*/ 0x3f,0xc0, /* ..########...... */
+ /*02d5:*/ 0x70,0xe0, /* .###....###..... */
+ /*02d7:*/ 0xe0,0x70, /* ###......###.... */
+ /*02d9:*/ 0xe0,0x70, /* ###......###.... */
+ /*02db:*/ 0xe0,0x70, /* ###......###.... */
+ /*02dd:*/ 0xe0,0x70, /* ###......###.... */
+ /*02df:*/ 0x70,0xe0, /* .###....###..... */
+ /*02e1:*/ 0x7f,0xe0, /* .##########..... */
+ /*02e3:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character nine (57) starting at offset 0x02e5 --- */
+ /*02e5:*/ 13, 12, 18, 0, 0, /* width and bbox (w,h,x,y) */
+ /*02ea:*/ 0x1f,0x80, /* ...######....... */
+ /*02ec:*/ 0x7f,0xc0, /* .#########...... */
+ /*02ee:*/ 0x79,0xe0, /* .####..####..... */
+ /*02f0:*/ 0xf0,0xe0, /* ####....###..... */
+ /*02f2:*/ 0xe0,0x70, /* ###......###.... */
+ /*02f4:*/ 0xe0,0x70, /* ###......###.... */
+ /*02f6:*/ 0xe0,0x70, /* ###......###.... */
+ /*02f8:*/ 0xe0,0x70, /* ###......###.... */
+ /*02fa:*/ 0xf0,0xf0, /* ####....####.... */
+ /*02fc:*/ 0x79,0xf0, /* .####..#####.... */
+ /*02fe:*/ 0x7f,0xf0, /* .###########.... */
+ /*0300:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*0302:*/ 0x00,0x70, /* .........###.... */
+ /*0304:*/ 0x00,0x70, /* .........###.... */
+ /*0306:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0308:*/ 0xf3,0xe0, /* ####..#####..... */
+ /*030a:*/ 0x7f,0xc0, /* .#########...... */
+ /*030c:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character colon (58) starting at offset 0x030e --- */
+ /*030e:*/ 7, 3, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0313:*/ 0xe0, /* ###..... */
+ /*0314:*/ 0xe0, /* ###..... */
+ /*0315:*/ 0xe0, /* ###..... */
+ /*0316:*/ 0x00, /* ........ */
+ /*0317:*/ 0x00, /* ........ */
+ /*0318:*/ 0x00, /* ........ */
+ /*0319:*/ 0x00, /* ........ */
+ /*031a:*/ 0x00, /* ........ */
+ /*031b:*/ 0x00, /* ........ */
+ /*031c:*/ 0x00, /* ........ */
+ /*031d:*/ 0x00, /* ........ */
+ /*031e:*/ 0xe0, /* ###..... */
+ /*031f:*/ 0xe0, /* ###..... */
+ /*0320:*/ 0xe0, /* ###..... */
+/* --- new character semicolon (59) starting at offset 0x0321 --- */
+ /*0321:*/ 7, 3, 17, 2, -3, /* width and bbox (w,h,x,y) */
+ /*0326:*/ 0xe0, /* ###..... */
+ /*0327:*/ 0xe0, /* ###..... */
+ /*0328:*/ 0xe0, /* ###..... */
+ /*0329:*/ 0x00, /* ........ */
+ /*032a:*/ 0x00, /* ........ */
+ /*032b:*/ 0x00, /* ........ */
+ /*032c:*/ 0x00, /* ........ */
+ /*032d:*/ 0x00, /* ........ */
+ /*032e:*/ 0x00, /* ........ */
+ /*032f:*/ 0x00, /* ........ */
+ /*0330:*/ 0x00, /* ........ */
+ /*0331:*/ 0xe0, /* ###..... */
+ /*0332:*/ 0xe0, /* ###..... */
+ /*0333:*/ 0xe0, /* ###..... */
+ /*0334:*/ 0x60, /* .##..... */
+ /*0335:*/ 0x60, /* .##..... */
+ /*0336:*/ 0xc0, /* ##...... */
+/* --- new character less (60) starting at offset 0x0337 --- */
+ /*0337:*/ 15, 13, 12, 0, 1, /* width and bbox (w,h,x,y) */
+ /*033c:*/ 0x00,0x38, /* ..........###... */
+ /*033e:*/ 0x00,0xf8, /* ........#####... */
+ /*0340:*/ 0x03,0xe0, /* ......#####..... */
+ /*0342:*/ 0x0f,0x80, /* ....#####....... */
+ /*0344:*/ 0x3e,0x00, /* ..#####......... */
+ /*0346:*/ 0xf0,0x00, /* ####............ */
+ /*0348:*/ 0xf0,0x00, /* ####............ */
+ /*034a:*/ 0x3e,0x00, /* ..#####......... */
+ /*034c:*/ 0x0f,0x80, /* ....#####....... */
+ /*034e:*/ 0x03,0xe0, /* ......#####..... */
+ /*0350:*/ 0x00,0xf8, /* ........#####... */
+ /*0352:*/ 0x00,0x38, /* ..........###... */
+/* --- new character equal (61) starting at offset 0x0354 --- */
+ /*0354:*/ 14, 10, 6, 2, 4, /* width and bbox (w,h,x,y) */
+ /*0359:*/ 0xff,0xc0, /* ##########...... */
+ /*035b:*/ 0xff,0xc0, /* ##########...... */
+ /*035d:*/ 0x00,0x00, /* ................ */
+ /*035f:*/ 0x00,0x00, /* ................ */
+ /*0361:*/ 0xff,0xc0, /* ##########...... */
+ /*0363:*/ 0xff,0xc0, /* ##########...... */
+/* --- new character greater (62) starting at offset 0x0365 --- */
+ /*0365:*/ 14, 13, 12, 0, 1, /* width and bbox (w,h,x,y) */
+ /*036a:*/ 0xe0,0x00, /* ###............. */
+ /*036c:*/ 0xf8,0x00, /* #####........... */
+ /*036e:*/ 0x3e,0x00, /* ..#####......... */
+ /*0370:*/ 0x0f,0x80, /* ....#####....... */
+ /*0372:*/ 0x03,0xe0, /* ......#####..... */
+ /*0374:*/ 0x00,0x78, /* .........####... */
+ /*0376:*/ 0x00,0x78, /* .........####... */
+ /*0378:*/ 0x03,0xe0, /* ......#####..... */
+ /*037a:*/ 0x0f,0x80, /* ....#####....... */
+ /*037c:*/ 0x3e,0x00, /* ..#####......... */
+ /*037e:*/ 0xf8,0x00, /* #####........... */
+ /*0380:*/ 0xe0,0x00, /* ###............. */
+/* --- new character question (63) starting at offset 0x0382 --- */
+ /*0382:*/ 15, 11, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0387:*/ 0x1f,0x80, /* ...######....... */
+ /*0389:*/ 0x7f,0xc0, /* .#########...... */
+ /*038b:*/ 0x79,0xe0, /* .####..####..... */
+ /*038d:*/ 0xf0,0xe0, /* ####....###..... */
+ /*038f:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0391:*/ 0xe1,0xe0, /* ###....####..... */
+ /*0393:*/ 0x01,0xc0, /* .......###...... */
+ /*0395:*/ 0x03,0xc0, /* ......####...... */
+ /*0397:*/ 0x07,0x80, /* .....####....... */
+ /*0399:*/ 0x07,0x00, /* .....###........ */
+ /*039b:*/ 0x0e,0x00, /* ....###......... */
+ /*039d:*/ 0x0e,0x00, /* ....###......... */
+ /*039f:*/ 0x0e,0x00, /* ....###......... */
+ /*03a1:*/ 0x0e,0x00, /* ....###......... */
+ /*03a3:*/ 0x00,0x00, /* ................ */
+ /*03a5:*/ 0x00,0x00, /* ................ */
+ /*03a7:*/ 0x0e,0x00, /* ....###......... */
+ /*03a9:*/ 0x0e,0x00, /* ....###......... */
+ /*03ab:*/ 0x0e,0x00, /* ....###......... */
+/* --- new character at (64) starting at offset 0x03ad --- */
+ /*03ad:*/ 24, 22, 22, 1, -4, /* width and bbox (w,h,x,y) */
+ /*03b2:*/ 0x01,0xff,0x00, /* .......#########........ */
+ /*03b5:*/ 0x07,0xff,0xc0, /* .....#############...... */
+ /*03b8:*/ 0x0f,0x81,0xf0, /* ....#####......#####.... */
+ /*03bb:*/ 0x1e,0x00,0x78, /* ...####..........####... */
+ /*03be:*/ 0x3c,0x00,0x38, /* ..####............###... */
+ /*03c1:*/ 0x78,0x7d,0x9c, /* .####....#####.##..###.. */
+ /*03c4:*/ 0x70,0xff,0x9c, /* .###....#########..###.. */
+ /*03c7:*/ 0xf1,0xc7,0x1c, /* ####...###...###...###.. */
+ /*03ca:*/ 0xe3,0x87,0x1c, /* ###...###....###...###.. */
+ /*03cd:*/ 0xe3,0x0e,0x1c, /* ###...##....###....###.. */
+ /*03d0:*/ 0xe7,0x0e,0x38, /* ###..###....###...###... */
+ /*03d3:*/ 0xe7,0x0c,0x38, /* ###..###....##....###... */
+ /*03d6:*/ 0xe7,0x1c,0x70, /* ###..###...###...###.... */
+ /*03d9:*/ 0xe7,0x1c,0x70, /* ###..###...###...###.... */
+ /*03dc:*/ 0xe3,0x9d,0xe0, /* ###...###..###.####..... */
+ /*03df:*/ 0xf3,0xff,0xc0, /* ####..############...... */
+ /*03e2:*/ 0x71,0xf7,0x00, /* .###...#####.###........ */
+ /*03e5:*/ 0x78,0x00,0x00, /* .####................... */
+ /*03e8:*/ 0x3c,0x00,0x00, /* ..####.................. */
+ /*03eb:*/ 0x1f,0x07,0x00, /* ...#####.....###........ */
+ /*03ee:*/ 0x0f,0xff,0x00, /* ....############........ */
+ /*03f1:*/ 0x03,0xfc,0x00, /* ......########.......... */
+/* --- new character A (65) starting at offset 0x03f4 --- */
+ /*03f4:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*03f9:*/ 0x03,0xc0, /* ......####...... */
+ /*03fb:*/ 0x03,0xc0, /* ......####...... */
+ /*03fd:*/ 0x07,0xe0, /* .....######..... */
+ /*03ff:*/ 0x07,0xe0, /* .....######..... */
+ /*0401:*/ 0x0e,0x60, /* ....###..##..... */
+ /*0403:*/ 0x0e,0x70, /* ....###..###.... */
+ /*0405:*/ 0x0e,0x70, /* ....###..###.... */
+ /*0407:*/ 0x1c,0x38, /* ...###....###... */
+ /*0409:*/ 0x1c,0x38, /* ...###....###... */
+ /*040b:*/ 0x1c,0x38, /* ...###....###... */
+ /*040d:*/ 0x38,0x1c, /* ..###......###.. */
+ /*040f:*/ 0x38,0x1c, /* ..###......###.. */
+ /*0411:*/ 0x3f,0xfc, /* ..############.. */
+ /*0413:*/ 0x7f,0xfe, /* .##############. */
+ /*0415:*/ 0x70,0x0e, /* .###........###. */
+ /*0417:*/ 0x70,0x0e, /* .###........###. */
+ /*0419:*/ 0xe0,0x07, /* ###..........### */
+ /*041b:*/ 0xe0,0x07, /* ###..........### */
+ /*041d:*/ 0xe0,0x07, /* ###..........### */
+/* --- new character B (66) starting at offset 0x041f --- */
+ /*041f:*/ 18, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0424:*/ 0xff,0xe0, /* ###########..... */
+ /*0426:*/ 0xff,0xf8, /* #############... */
+ /*0428:*/ 0xe0,0x78, /* ###......####... */
+ /*042a:*/ 0xe0,0x1c, /* ###........###.. */
+ /*042c:*/ 0xe0,0x1c, /* ###........###.. */
+ /*042e:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0430:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0432:*/ 0xe0,0x38, /* ###.......###... */
+ /*0434:*/ 0xff,0xf0, /* ############.... */
+ /*0436:*/ 0xff,0xf8, /* #############... */
+ /*0438:*/ 0xe0,0x1c, /* ###........###.. */
+ /*043a:*/ 0xe0,0x0e, /* ###.........###. */
+ /*043c:*/ 0xe0,0x0e, /* ###.........###. */
+ /*043e:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0440:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0442:*/ 0xe0,0x1e, /* ###........####. */
+ /*0444:*/ 0xe0,0x7c, /* ###......#####.. */
+ /*0446:*/ 0xff,0xf8, /* #############... */
+ /*0448:*/ 0xff,0xe0, /* ###########..... */
+/* --- new character C (67) starting at offset 0x044a --- */
+ /*044a:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*044f:*/ 0x07,0xf0, /* .....#######.... */
+ /*0451:*/ 0x1f,0xfc, /* ...###########.. */
+ /*0453:*/ 0x3e,0x3e, /* ..#####...#####. */
+ /*0455:*/ 0x78,0x0f, /* .####.......#### */
+ /*0457:*/ 0x70,0x07, /* .###.........### */
+ /*0459:*/ 0xf0,0x00, /* ####............ */
+ /*045b:*/ 0xe0,0x00, /* ###............. */
+ /*045d:*/ 0xe0,0x00, /* ###............. */
+ /*045f:*/ 0xe0,0x00, /* ###............. */
+ /*0461:*/ 0xe0,0x00, /* ###............. */
+ /*0463:*/ 0xe0,0x00, /* ###............. */
+ /*0465:*/ 0xe0,0x00, /* ###............. */
+ /*0467:*/ 0xe0,0x00, /* ###............. */
+ /*0469:*/ 0xf0,0x07, /* ####.........### */
+ /*046b:*/ 0x70,0x07, /* .###.........### */
+ /*046d:*/ 0x78,0x0f, /* .####.......#### */
+ /*046f:*/ 0x3e,0x3e, /* ..#####...#####. */
+ /*0471:*/ 0x1f,0xfc, /* ...###########.. */
+ /*0473:*/ 0x07,0xf0, /* .....#######.... */
+/* --- new character D (68) starting at offset 0x0475 --- */
+ /*0475:*/ 19, 16, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*047a:*/ 0xff,0xe0, /* ###########..... */
+ /*047c:*/ 0xff,0xf8, /* #############... */
+ /*047e:*/ 0xe0,0x7c, /* ###......#####.. */
+ /*0480:*/ 0xe0,0x1e, /* ###........####. */
+ /*0482:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0484:*/ 0xe0,0x0f, /* ###.........#### */
+ /*0486:*/ 0xe0,0x07, /* ###..........### */
+ /*0488:*/ 0xe0,0x07, /* ###..........### */
+ /*048a:*/ 0xe0,0x07, /* ###..........### */
+ /*048c:*/ 0xe0,0x07, /* ###..........### */
+ /*048e:*/ 0xe0,0x07, /* ###..........### */
+ /*0490:*/ 0xe0,0x07, /* ###..........### */
+ /*0492:*/ 0xe0,0x07, /* ###..........### */
+ /*0494:*/ 0xe0,0x0f, /* ###.........#### */
+ /*0496:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0498:*/ 0xe0,0x1e, /* ###........####. */
+ /*049a:*/ 0xe0,0x7c, /* ###......#####.. */
+ /*049c:*/ 0xff,0xf8, /* #############... */
+ /*049e:*/ 0xff,0xe0, /* ###########..... */
+/* --- new character E (69) starting at offset 0x04a0 --- */
+ /*04a0:*/ 16, 13, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*04a5:*/ 0xff,0xf0, /* ############.... */
+ /*04a7:*/ 0xff,0xf0, /* ############.... */
+ /*04a9:*/ 0xe0,0x00, /* ###............. */
+ /*04ab:*/ 0xe0,0x00, /* ###............. */
+ /*04ad:*/ 0xe0,0x00, /* ###............. */
+ /*04af:*/ 0xe0,0x00, /* ###............. */
+ /*04b1:*/ 0xe0,0x00, /* ###............. */
+ /*04b3:*/ 0xe0,0x00, /* ###............. */
+ /*04b5:*/ 0xff,0xe0, /* ###########..... */
+ /*04b7:*/ 0xff,0xe0, /* ###########..... */
+ /*04b9:*/ 0xe0,0x00, /* ###............. */
+ /*04bb:*/ 0xe0,0x00, /* ###............. */
+ /*04bd:*/ 0xe0,0x00, /* ###............. */
+ /*04bf:*/ 0xe0,0x00, /* ###............. */
+ /*04c1:*/ 0xe0,0x00, /* ###............. */
+ /*04c3:*/ 0xe0,0x00, /* ###............. */
+ /*04c5:*/ 0xe0,0x00, /* ###............. */
+ /*04c7:*/ 0xff,0xf8, /* #############... */
+ /*04c9:*/ 0xff,0xf8, /* #############... */
+/* --- new character F (70) starting at offset 0x04cb --- */
+ /*04cb:*/ 15, 12, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*04d0:*/ 0xff,0xf0, /* ############.... */
+ /*04d2:*/ 0xff,0xf0, /* ############.... */
+ /*04d4:*/ 0xe0,0x00, /* ###............. */
+ /*04d6:*/ 0xe0,0x00, /* ###............. */
+ /*04d8:*/ 0xe0,0x00, /* ###............. */
+ /*04da:*/ 0xe0,0x00, /* ###............. */
+ /*04dc:*/ 0xe0,0x00, /* ###............. */
+ /*04de:*/ 0xe0,0x00, /* ###............. */
+ /*04e0:*/ 0xff,0xe0, /* ###########..... */
+ /*04e2:*/ 0xff,0xe0, /* ###########..... */
+ /*04e4:*/ 0xe0,0x00, /* ###............. */
+ /*04e6:*/ 0xe0,0x00, /* ###............. */
+ /*04e8:*/ 0xe0,0x00, /* ###............. */
+ /*04ea:*/ 0xe0,0x00, /* ###............. */
+ /*04ec:*/ 0xe0,0x00, /* ###............. */
+ /*04ee:*/ 0xe0,0x00, /* ###............. */
+ /*04f0:*/ 0xe0,0x00, /* ###............. */
+ /*04f2:*/ 0xe0,0x00, /* ###............. */
+ /*04f4:*/ 0xe0,0x00, /* ###............. */
+/* --- new character G (71) starting at offset 0x04f6 --- */
+ /*04f6:*/ 19, 17, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04fb:*/ 0x07,0xf0,0x00, /* .....#######............ */
+ /*04fe:*/ 0x1f,0xfc,0x00, /* ...###########.......... */
+ /*0501:*/ 0x3e,0x3e,0x00, /* ..#####...#####......... */
+ /*0504:*/ 0x78,0x0f,0x00, /* .####.......####........ */
+ /*0507:*/ 0x70,0x07,0x00, /* .###.........###........ */
+ /*050a:*/ 0xf0,0x00,0x00, /* ####.................... */
+ /*050d:*/ 0xe0,0x00,0x00, /* ###..................... */
+ /*0510:*/ 0xe0,0x00,0x00, /* ###..................... */
+ /*0513:*/ 0xe0,0x00,0x00, /* ###..................... */
+ /*0516:*/ 0xe0,0x7f,0x80, /* ###......########....... */
+ /*0519:*/ 0xe0,0x7f,0x80, /* ###......########....... */
+ /*051c:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*051f:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*0522:*/ 0xf0,0x03,0x80, /* ####..........###....... */
+ /*0525:*/ 0x70,0x07,0x80, /* .###.........####....... */
+ /*0528:*/ 0x78,0x0f,0x80, /* .####.......#####....... */
+ /*052b:*/ 0x3e,0x3f,0x80, /* ..#####...#######....... */
+ /*052e:*/ 0x1f,0xfb,0x80, /* ...##########.###....... */
+ /*0531:*/ 0x07,0xf1,0x80, /* .....#######...##....... */
+/* --- new character H (72) starting at offset 0x0534 --- */
+ /*0534:*/ 19, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0539:*/ 0xe0,0x0e, /* ###.........###. */
+ /*053b:*/ 0xe0,0x0e, /* ###.........###. */
+ /*053d:*/ 0xe0,0x0e, /* ###.........###. */
+ /*053f:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0541:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0543:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0545:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0547:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0549:*/ 0xff,0xfe, /* ###############. */
+ /*054b:*/ 0xff,0xfe, /* ###############. */
+ /*054d:*/ 0xe0,0x0e, /* ###.........###. */
+ /*054f:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0551:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0553:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0555:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0557:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0559:*/ 0xe0,0x0e, /* ###.........###. */
+ /*055b:*/ 0xe0,0x0e, /* ###.........###. */
+ /*055d:*/ 0xe0,0x0e, /* ###.........###. */
+/* --- new character I (73) starting at offset 0x055f --- */
+ /*055f:*/ 7, 3, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0564:*/ 0xe0, /* ###..... */
+ /*0565:*/ 0xe0, /* ###..... */
+ /*0566:*/ 0xe0, /* ###..... */
+ /*0567:*/ 0xe0, /* ###..... */
+ /*0568:*/ 0xe0, /* ###..... */
+ /*0569:*/ 0xe0, /* ###..... */
+ /*056a:*/ 0xe0, /* ###..... */
+ /*056b:*/ 0xe0, /* ###..... */
+ /*056c:*/ 0xe0, /* ###..... */
+ /*056d:*/ 0xe0, /* ###..... */
+ /*056e:*/ 0xe0, /* ###..... */
+ /*056f:*/ 0xe0, /* ###..... */
+ /*0570:*/ 0xe0, /* ###..... */
+ /*0571:*/ 0xe0, /* ###..... */
+ /*0572:*/ 0xe0, /* ###..... */
+ /*0573:*/ 0xe0, /* ###..... */
+ /*0574:*/ 0xe0, /* ###..... */
+ /*0575:*/ 0xe0, /* ###..... */
+ /*0576:*/ 0xe0, /* ###..... */
+/* --- new character J (74) starting at offset 0x0577 --- */
+ /*0577:*/ 14, 11, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*057c:*/ 0x00,0xe0, /* ........###..... */
+ /*057e:*/ 0x00,0xe0, /* ........###..... */
+ /*0580:*/ 0x00,0xe0, /* ........###..... */
+ /*0582:*/ 0x00,0xe0, /* ........###..... */
+ /*0584:*/ 0x00,0xe0, /* ........###..... */
+ /*0586:*/ 0x00,0xe0, /* ........###..... */
+ /*0588:*/ 0x00,0xe0, /* ........###..... */
+ /*058a:*/ 0x00,0xe0, /* ........###..... */
+ /*058c:*/ 0x00,0xe0, /* ........###..... */
+ /*058e:*/ 0x00,0xe0, /* ........###..... */
+ /*0590:*/ 0x00,0xe0, /* ........###..... */
+ /*0592:*/ 0x00,0xe0, /* ........###..... */
+ /*0594:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0596:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0598:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*059a:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*059c:*/ 0x71,0xe0, /* .###...####..... */
+ /*059e:*/ 0x7f,0xc0, /* .#########...... */
+ /*05a0:*/ 0x3f,0x80, /* ..#######....... */
+/* --- new character K (75) starting at offset 0x05a2 --- */
+ /*05a2:*/ 18, 16, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*05a7:*/ 0xe0,0x3c, /* ###.......####.. */
+ /*05a9:*/ 0xe0,0x78, /* ###......####... */
+ /*05ab:*/ 0xe0,0xf0, /* ###.....####.... */
+ /*05ad:*/ 0xe1,0xe0, /* ###....####..... */
+ /*05af:*/ 0xe3,0xc0, /* ###...####...... */
+ /*05b1:*/ 0xe7,0x80, /* ###..####....... */
+ /*05b3:*/ 0xef,0x00, /* ###.####........ */
+ /*05b5:*/ 0xfe,0x00, /* #######......... */
+ /*05b7:*/ 0xfe,0x00, /* #######......... */
+ /*05b9:*/ 0xff,0x00, /* ########........ */
+ /*05bb:*/ 0xf7,0x80, /* ####.####....... */
+ /*05bd:*/ 0xe3,0xc0, /* ###...####...... */
+ /*05bf:*/ 0xe1,0xe0, /* ###....####..... */
+ /*05c1:*/ 0xe0,0xf0, /* ###.....####.... */
+ /*05c3:*/ 0xe0,0x78, /* ###......####... */
+ /*05c5:*/ 0xe0,0x3c, /* ###.......####.. */
+ /*05c7:*/ 0xe0,0x1e, /* ###........####. */
+ /*05c9:*/ 0xe0,0x0f, /* ###.........#### */
+ /*05cb:*/ 0xe0,0x07, /* ###..........### */
+/* --- new character L (76) starting at offset 0x05cd --- */
+ /*05cd:*/ 15, 12, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*05d2:*/ 0xe0,0x00, /* ###............. */
+ /*05d4:*/ 0xe0,0x00, /* ###............. */
+ /*05d6:*/ 0xe0,0x00, /* ###............. */
+ /*05d8:*/ 0xe0,0x00, /* ###............. */
+ /*05da:*/ 0xe0,0x00, /* ###............. */
+ /*05dc:*/ 0xe0,0x00, /* ###............. */
+ /*05de:*/ 0xe0,0x00, /* ###............. */
+ /*05e0:*/ 0xe0,0x00, /* ###............. */
+ /*05e2:*/ 0xe0,0x00, /* ###............. */
+ /*05e4:*/ 0xe0,0x00, /* ###............. */
+ /*05e6:*/ 0xe0,0x00, /* ###............. */
+ /*05e8:*/ 0xe0,0x00, /* ###............. */
+ /*05ea:*/ 0xe0,0x00, /* ###............. */
+ /*05ec:*/ 0xe0,0x00, /* ###............. */
+ /*05ee:*/ 0xe0,0x00, /* ###............. */
+ /*05f0:*/ 0xe0,0x00, /* ###............. */
+ /*05f2:*/ 0xe0,0x00, /* ###............. */
+ /*05f4:*/ 0xff,0xf0, /* ############.... */
+ /*05f6:*/ 0xff,0xf0, /* ############.... */
+/* --- new character M (77) starting at offset 0x05f8 --- */
+ /*05f8:*/ 23, 19, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*05fd:*/ 0xe0,0x00,0xe0, /* ###.............###..... */
+ /*0600:*/ 0xf0,0x01,0xe0, /* ####...........####..... */
+ /*0603:*/ 0xf0,0x01,0xe0, /* ####...........####..... */
+ /*0606:*/ 0xf8,0x03,0xe0, /* #####.........#####..... */
+ /*0609:*/ 0xf8,0x03,0xe0, /* #####.........#####..... */
+ /*060c:*/ 0xfc,0x07,0xe0, /* ######.......######..... */
+ /*060f:*/ 0xec,0x06,0xe0, /* ###.##.......##.###..... */
+ /*0612:*/ 0xee,0x0e,0xe0, /* ###.###.....###.###..... */
+ /*0615:*/ 0xe6,0x0c,0xe0, /* ###..##.....##..###..... */
+ /*0618:*/ 0xe7,0x1c,0xe0, /* ###..###...###..###..... */
+ /*061b:*/ 0xe7,0x1c,0xe0, /* ###..###...###..###..... */
+ /*061e:*/ 0xe3,0x18,0xe0, /* ###...##...##...###..... */
+ /*0621:*/ 0xe3,0xb8,0xe0, /* ###...###.###...###..... */
+ /*0624:*/ 0xe3,0xb8,0xe0, /* ###...###.###...###..... */
+ /*0627:*/ 0xe1,0xf0,0xe0, /* ###....#####....###..... */
+ /*062a:*/ 0xe1,0xf0,0xe0, /* ###....#####....###..... */
+ /*062d:*/ 0xe0,0xe0,0xe0, /* ###.....###.....###..... */
+ /*0630:*/ 0xe0,0xe0,0xe0, /* ###.....###.....###..... */
+ /*0633:*/ 0xe0,0xe0,0xe0, /* ###.....###.....###..... */
+/* --- new character N (78) starting at offset 0x0636 --- */
+ /*0636:*/ 19, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*063b:*/ 0xe0,0x0e, /* ###.........###. */
+ /*063d:*/ 0xf0,0x0e, /* ####........###. */
+ /*063f:*/ 0xf0,0x0e, /* ####........###. */
+ /*0641:*/ 0xf8,0x0e, /* #####.......###. */
+ /*0643:*/ 0xf8,0x0e, /* #####.......###. */
+ /*0645:*/ 0xfc,0x0e, /* ######......###. */
+ /*0647:*/ 0xee,0x0e, /* ###.###.....###. */
+ /*0649:*/ 0xee,0x0e, /* ###.###.....###. */
+ /*064b:*/ 0xe7,0x0e, /* ###..###....###. */
+ /*064d:*/ 0xe3,0x8e, /* ###...###...###. */
+ /*064f:*/ 0xe3,0x8e, /* ###...###...###. */
+ /*0651:*/ 0xe1,0xce, /* ###....###..###. */
+ /*0653:*/ 0xe0,0xce, /* ###.....##..###. */
+ /*0655:*/ 0xe0,0xee, /* ###.....###.###. */
+ /*0657:*/ 0xe0,0x7e, /* ###......######. */
+ /*0659:*/ 0xe0,0x3e, /* ###.......#####. */
+ /*065b:*/ 0xe0,0x3e, /* ###.......#####. */
+ /*065d:*/ 0xe0,0x1e, /* ###........####. */
+ /*065f:*/ 0xe0,0x0e, /* ###.........###. */
+/* --- new character O (79) starting at offset 0x0661 --- */
+ /*0661:*/ 19, 17, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0666:*/ 0x07,0xf0,0x00, /* .....#######............ */
+ /*0669:*/ 0x1f,0xfc,0x00, /* ...###########.......... */
+ /*066c:*/ 0x3e,0x3e,0x00, /* ..#####...#####......... */
+ /*066f:*/ 0x78,0x0f,0x00, /* .####.......####........ */
+ /*0672:*/ 0x70,0x07,0x00, /* .###.........###........ */
+ /*0675:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*0678:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*067b:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*067e:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*0681:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*0684:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*0687:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*068a:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*068d:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*0690:*/ 0x70,0x07,0x00, /* .###.........###........ */
+ /*0693:*/ 0x78,0x0f,0x00, /* .####.......####........ */
+ /*0696:*/ 0x3e,0x3e,0x00, /* ..#####...#####......... */
+ /*0699:*/ 0x1f,0xfc,0x00, /* ...###########.......... */
+ /*069c:*/ 0x07,0xf0,0x00, /* .....#######............ */
+/* --- new character P (80) starting at offset 0x069f --- */
+ /*069f:*/ 17, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*06a4:*/ 0xff,0xe0, /* ###########..... */
+ /*06a6:*/ 0xff,0xf8, /* #############... */
+ /*06a8:*/ 0xe0,0x38, /* ###.......###... */
+ /*06aa:*/ 0xe0,0x1c, /* ###........###.. */
+ /*06ac:*/ 0xe0,0x1c, /* ###........###.. */
+ /*06ae:*/ 0xe0,0x1c, /* ###........###.. */
+ /*06b0:*/ 0xe0,0x1c, /* ###........###.. */
+ /*06b2:*/ 0xe0,0x38, /* ###.......###... */
+ /*06b4:*/ 0xff,0xf8, /* #############... */
+ /*06b6:*/ 0xff,0xf0, /* ############.... */
+ /*06b8:*/ 0xe0,0x00, /* ###............. */
+ /*06ba:*/ 0xe0,0x00, /* ###............. */
+ /*06bc:*/ 0xe0,0x00, /* ###............. */
+ /*06be:*/ 0xe0,0x00, /* ###............. */
+ /*06c0:*/ 0xe0,0x00, /* ###............. */
+ /*06c2:*/ 0xe0,0x00, /* ###............. */
+ /*06c4:*/ 0xe0,0x00, /* ###............. */
+ /*06c6:*/ 0xe0,0x00, /* ###............. */
+ /*06c8:*/ 0xe0,0x00, /* ###............. */
+/* --- new character Q (81) starting at offset 0x06ca --- */
+ /*06ca:*/ 19, 17, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*06cf:*/ 0x07,0xf0,0x00, /* .....#######............ */
+ /*06d2:*/ 0x1f,0xfc,0x00, /* ...###########.......... */
+ /*06d5:*/ 0x3e,0x3e,0x00, /* ..#####...#####......... */
+ /*06d8:*/ 0x78,0x0f,0x00, /* .####.......####........ */
+ /*06db:*/ 0x70,0x07,0x00, /* .###.........###........ */
+ /*06de:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*06e1:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06e4:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06e7:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06ea:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06ed:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06f0:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06f3:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*06f6:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*06f9:*/ 0x70,0xf7,0x00, /* .###....####.###........ */
+ /*06fc:*/ 0x78,0x7f,0x00, /* .####....#######........ */
+ /*06ff:*/ 0x3e,0x1e,0x00, /* ..#####....####......... */
+ /*0702:*/ 0x1f,0xff,0x00, /* ...#############........ */
+ /*0705:*/ 0x07,0xf7,0x80, /* .....#######.####....... */
+/* --- new character R (82) starting at offset 0x0708 --- */
+ /*0708:*/ 17, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*070d:*/ 0xff,0xe0, /* ###########..... */
+ /*070f:*/ 0xff,0xf8, /* #############... */
+ /*0711:*/ 0xe0,0x38, /* ###.......###... */
+ /*0713:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0715:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0717:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0719:*/ 0xe0,0x1c, /* ###........###.. */
+ /*071b:*/ 0xe0,0x38, /* ###.......###... */
+ /*071d:*/ 0xff,0xf8, /* #############... */
+ /*071f:*/ 0xff,0xf0, /* ############.... */
+ /*0721:*/ 0xe0,0x78, /* ###......####... */
+ /*0723:*/ 0xe0,0x38, /* ###.......###... */
+ /*0725:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0727:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0729:*/ 0xe0,0x1c, /* ###........###.. */
+ /*072b:*/ 0xe0,0x1c, /* ###........###.. */
+ /*072d:*/ 0xe0,0x1c, /* ###........###.. */
+ /*072f:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0731:*/ 0xe0,0x1c, /* ###........###.. */
+/* --- new character S (83) starting at offset 0x0733 --- */
+ /*0733:*/ 17, 15, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0738:*/ 0x07,0xe0, /* .....######..... */
+ /*073a:*/ 0x1f,0xf8, /* ...##########... */
+ /*073c:*/ 0x3c,0x7c, /* ..####...#####.. */
+ /*073e:*/ 0x78,0x1c, /* .####......###.. */
+ /*0740:*/ 0x70,0x1c, /* .###.......###.. */
+ /*0742:*/ 0x70,0x00, /* .###............ */
+ /*0744:*/ 0x78,0x00, /* .####........... */
+ /*0746:*/ 0x3e,0x00, /* ..#####......... */
+ /*0748:*/ 0x1f,0xe0, /* ...########..... */
+ /*074a:*/ 0x03,0xf8, /* ......#######... */
+ /*074c:*/ 0x00,0x7c, /* .........#####.. */
+ /*074e:*/ 0x00,0x1e, /* ...........####. */
+ /*0750:*/ 0x00,0x0e, /* ............###. */
+ /*0752:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0754:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0756:*/ 0xf0,0x1e, /* ####.......####. */
+ /*0758:*/ 0x7c,0x7c, /* .#####...#####.. */
+ /*075a:*/ 0x3f,0xf8, /* ..###########... */
+ /*075c:*/ 0x0f,0xe0, /* ....#######..... */
+/* --- new character T (84) starting at offset 0x075e --- */
+ /*075e:*/ 15, 15, 19, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0763:*/ 0xff,0xfe, /* ###############. */
+ /*0765:*/ 0xff,0xfe, /* ###############. */
+ /*0767:*/ 0x03,0x80, /* ......###....... */
+ /*0769:*/ 0x03,0x80, /* ......###....... */
+ /*076b:*/ 0x03,0x80, /* ......###....... */
+ /*076d:*/ 0x03,0x80, /* ......###....... */
+ /*076f:*/ 0x03,0x80, /* ......###....... */
+ /*0771:*/ 0x03,0x80, /* ......###....... */
+ /*0773:*/ 0x03,0x80, /* ......###....... */
+ /*0775:*/ 0x03,0x80, /* ......###....... */
+ /*0777:*/ 0x03,0x80, /* ......###....... */
+ /*0779:*/ 0x03,0x80, /* ......###....... */
+ /*077b:*/ 0x03,0x80, /* ......###....... */
+ /*077d:*/ 0x03,0x80, /* ......###....... */
+ /*077f:*/ 0x03,0x80, /* ......###....... */
+ /*0781:*/ 0x03,0x80, /* ......###....... */
+ /*0783:*/ 0x03,0x80, /* ......###....... */
+ /*0785:*/ 0x03,0x80, /* ......###....... */
+ /*0787:*/ 0x03,0x80, /* ......###....... */
+/* --- new character U (85) starting at offset 0x0789 --- */
+ /*0789:*/ 19, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*078e:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0790:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0792:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0794:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0796:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0798:*/ 0xe0,0x0e, /* ###.........###. */
+ /*079a:*/ 0xe0,0x0e, /* ###.........###. */
+ /*079c:*/ 0xe0,0x0e, /* ###.........###. */
+ /*079e:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07a0:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07a2:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07a4:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07a6:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07a8:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07aa:*/ 0xf0,0x1e, /* ####.......####. */
+ /*07ac:*/ 0x70,0x1c, /* .###.......###.. */
+ /*07ae:*/ 0x7c,0x7c, /* .#####...#####.. */
+ /*07b0:*/ 0x3f,0xf8, /* ..###########... */
+ /*07b2:*/ 0x0f,0xe0, /* ....#######..... */
+/* --- new character V (86) starting at offset 0x07b4 --- */
+ /*07b4:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*07b9:*/ 0xe0,0x07, /* ###..........### */
+ /*07bb:*/ 0xe0,0x07, /* ###..........### */
+ /*07bd:*/ 0xf0,0x0f, /* ####........#### */
+ /*07bf:*/ 0x70,0x0e, /* .###........###. */
+ /*07c1:*/ 0x78,0x1e, /* .####......####. */
+ /*07c3:*/ 0x38,0x1c, /* ..###......###.. */
+ /*07c5:*/ 0x38,0x1c, /* ..###......###.. */
+ /*07c7:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*07c9:*/ 0x1c,0x38, /* ...###....###... */
+ /*07cb:*/ 0x1c,0x38, /* ...###....###... */
+ /*07cd:*/ 0x1e,0x78, /* ...####..####... */
+ /*07cf:*/ 0x0e,0x70, /* ....###..###.... */
+ /*07d1:*/ 0x0e,0x70, /* ....###..###.... */
+ /*07d3:*/ 0x0e,0x70, /* ....###..###.... */
+ /*07d5:*/ 0x07,0xe0, /* .....######..... */
+ /*07d7:*/ 0x07,0xe0, /* .....######..... */
+ /*07d9:*/ 0x03,0xc0, /* ......####...... */
+ /*07db:*/ 0x03,0xc0, /* ......####...... */
+ /*07dd:*/ 0x03,0xc0, /* ......####...... */
+/* --- new character W (87) starting at offset 0x07df --- */
+ /*07df:*/ 23, 21, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*07e4:*/ 0xe0,0x70,0x38, /* ###......###......###... */
+ /*07e7:*/ 0xe0,0x70,0x38, /* ###......###......###... */
+ /*07ea:*/ 0xe0,0x70,0x38, /* ###......###......###... */
+ /*07ed:*/ 0xe0,0x70,0x38, /* ###......###......###... */
+ /*07f0:*/ 0x70,0xf8,0x70, /* .###....#####....###.... */
+ /*07f3:*/ 0x70,0xf8,0x70, /* .###....#####....###.... */
+ /*07f6:*/ 0x70,0xd8,0x70, /* .###....##.##....###.... */
+ /*07f9:*/ 0x71,0xdc,0x70, /* .###...###.###...###.... */
+ /*07fc:*/ 0x31,0xdc,0x60, /* ..##...###.###...##..... */
+ /*07ff:*/ 0x39,0xdc,0xe0, /* ..###..###.###..###..... */
+ /*0802:*/ 0x39,0x8c,0xe0, /* ..###..##...##..###..... */
+ /*0805:*/ 0x3b,0x8e,0xe0, /* ..###.###...###.###..... */
+ /*0808:*/ 0x1b,0x8e,0xc0, /* ...##.###...###.##...... */
+ /*080b:*/ 0x1b,0x8e,0xc0, /* ...##.###...###.##...... */
+ /*080e:*/ 0x1f,0x07,0xc0, /* ...#####.....#####...... */
+ /*0811:*/ 0x1f,0x07,0xc0, /* ...#####.....#####...... */
+ /*0814:*/ 0x0e,0x03,0x80, /* ....###.......###....... */
+ /*0817:*/ 0x0e,0x03,0x80, /* ....###.......###....... */
+ /*081a:*/ 0x0e,0x03,0x80, /* ....###.......###....... */
+/* --- new character X (88) starting at offset 0x081d --- */
+ /*081d:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0822:*/ 0xe0,0x07, /* ###..........### */
+ /*0824:*/ 0xf0,0x0f, /* ####........#### */
+ /*0826:*/ 0x78,0x1e, /* .####......####. */
+ /*0828:*/ 0x38,0x1c, /* ..###......###.. */
+ /*082a:*/ 0x1c,0x38, /* ...###....###... */
+ /*082c:*/ 0x0e,0x70, /* ....###..###.... */
+ /*082e:*/ 0x0f,0xf0, /* ....########.... */
+ /*0830:*/ 0x07,0xe0, /* .....######..... */
+ /*0832:*/ 0x03,0xc0, /* ......####...... */
+ /*0834:*/ 0x03,0xc0, /* ......####...... */
+ /*0836:*/ 0x07,0xe0, /* .....######..... */
+ /*0838:*/ 0x0f,0xf0, /* ....########.... */
+ /*083a:*/ 0x0e,0x70, /* ....###..###.... */
+ /*083c:*/ 0x1c,0x38, /* ...###....###... */
+ /*083e:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0840:*/ 0x38,0x1c, /* ..###......###.. */
+ /*0842:*/ 0x70,0x0e, /* .###........###. */
+ /*0844:*/ 0xf0,0x0f, /* ####........#### */
+ /*0846:*/ 0xe0,0x07, /* ###..........### */
+/* --- new character Y (89) starting at offset 0x0848 --- */
+ /*0848:*/ 17, 15, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*084d:*/ 0xe0,0x0e, /* ###.........###. */
+ /*084f:*/ 0xf0,0x1e, /* ####.......####. */
+ /*0851:*/ 0x70,0x1c, /* .###.......###.. */
+ /*0853:*/ 0x78,0x3c, /* .####.....####.. */
+ /*0855:*/ 0x38,0x38, /* ..###.....###... */
+ /*0857:*/ 0x3c,0x78, /* ..####...####... */
+ /*0859:*/ 0x1c,0x70, /* ...###...###.... */
+ /*085b:*/ 0x1e,0xf0, /* ...####.####.... */
+ /*085d:*/ 0x0e,0xe0, /* ....###.###..... */
+ /*085f:*/ 0x0f,0xe0, /* ....#######..... */
+ /*0861:*/ 0x07,0xc0, /* .....#####...... */
+ /*0863:*/ 0x07,0xc0, /* .....#####...... */
+ /*0865:*/ 0x03,0x80, /* ......###....... */
+ /*0867:*/ 0x03,0x80, /* ......###....... */
+ /*0869:*/ 0x03,0x80, /* ......###....... */
+ /*086b:*/ 0x03,0x80, /* ......###....... */
+ /*086d:*/ 0x03,0x80, /* ......###....... */
+ /*086f:*/ 0x03,0x80, /* ......###....... */
+ /*0871:*/ 0x03,0x80, /* ......###....... */
+/* --- new character Z (90) starting at offset 0x0873 --- */
+ /*0873:*/ 16, 14, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0878:*/ 0xff,0xfc, /* ##############.. */
+ /*087a:*/ 0xff,0xfc, /* ##############.. */
+ /*087c:*/ 0x00,0x3c, /* ..........####.. */
+ /*087e:*/ 0x00,0x78, /* .........####... */
+ /*0880:*/ 0x00,0xf0, /* ........####.... */
+ /*0882:*/ 0x01,0xe0, /* .......####..... */
+ /*0884:*/ 0x01,0xe0, /* .......####..... */
+ /*0886:*/ 0x03,0xc0, /* ......####...... */
+ /*0888:*/ 0x07,0x80, /* .....####....... */
+ /*088a:*/ 0x07,0x80, /* .....####....... */
+ /*088c:*/ 0x0f,0x00, /* ....####........ */
+ /*088e:*/ 0x1e,0x00, /* ...####......... */
+ /*0890:*/ 0x1e,0x00, /* ...####......... */
+ /*0892:*/ 0x3c,0x00, /* ..####.......... */
+ /*0894:*/ 0x38,0x00, /* ..###........... */
+ /*0896:*/ 0x78,0x00, /* .####........... */
+ /*0898:*/ 0xf0,0x00, /* ####............ */
+ /*089a:*/ 0xff,0xfc, /* ##############.. */
+ /*089c:*/ 0xff,0xfc, /* ##############.. */
+/* --- new character bracketleft (91) starting at offset 0x089e --- */
+ /*089e:*/ 8, 5, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*08a3:*/ 0xf8, /* #####... */
+ /*08a4:*/ 0xf8, /* #####... */
+ /*08a5:*/ 0xe0, /* ###..... */
+ /*08a6:*/ 0xe0, /* ###..... */
+ /*08a7:*/ 0xe0, /* ###..... */
+ /*08a8:*/ 0xe0, /* ###..... */
+ /*08a9:*/ 0xe0, /* ###..... */
+ /*08aa:*/ 0xe0, /* ###..... */
+ /*08ab:*/ 0xe0, /* ###..... */
+ /*08ac:*/ 0xe0, /* ###..... */
+ /*08ad:*/ 0xe0, /* ###..... */
+ /*08ae:*/ 0xe0, /* ###..... */
+ /*08af:*/ 0xe0, /* ###..... */
+ /*08b0:*/ 0xe0, /* ###..... */
+ /*08b1:*/ 0xe0, /* ###..... */
+ /*08b2:*/ 0xe0, /* ###..... */
+ /*08b3:*/ 0xe0, /* ###..... */
+ /*08b4:*/ 0xe0, /* ###..... */
+ /*08b5:*/ 0xe0, /* ###..... */
+ /*08b6:*/ 0xe0, /* ###..... */
+ /*08b7:*/ 0xe0, /* ###..... */
+ /*08b8:*/ 0xe0, /* ###..... */
+ /*08b9:*/ 0xf8, /* #####... */
+ /*08ba:*/ 0xf8, /* #####... */
+/* --- new character backslash (92) starting at offset 0x08bb --- */
+ /*08bb:*/ 8, 8, 19, 0, 0, /* width and bbox (w,h,x,y) */
+ /*08c0:*/ 0xe0, /* ###..... */
+ /*08c1:*/ 0xe0, /* ###..... */
+ /*08c2:*/ 0x60, /* .##..... */
+ /*08c3:*/ 0x60, /* .##..... */
+ /*08c4:*/ 0x70, /* .###.... */
+ /*08c5:*/ 0x30, /* ..##.... */
+ /*08c6:*/ 0x30, /* ..##.... */
+ /*08c7:*/ 0x38, /* ..###... */
+ /*08c8:*/ 0x38, /* ..###... */
+ /*08c9:*/ 0x18, /* ...##... */
+ /*08ca:*/ 0x18, /* ...##... */
+ /*08cb:*/ 0x1c, /* ...###.. */
+ /*08cc:*/ 0x0c, /* ....##.. */
+ /*08cd:*/ 0x0c, /* ....##.. */
+ /*08ce:*/ 0x0e, /* ....###. */
+ /*08cf:*/ 0x06, /* .....##. */
+ /*08d0:*/ 0x06, /* .....##. */
+ /*08d1:*/ 0x07, /* .....### */
+ /*08d2:*/ 0x07, /* .....### */
+/* --- new character bracketright (93) starting at offset 0x08d3 --- */
+ /*08d3:*/ 8, 5, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*08d8:*/ 0xf8, /* #####... */
+ /*08d9:*/ 0xf8, /* #####... */
+ /*08da:*/ 0x38, /* ..###... */
+ /*08db:*/ 0x38, /* ..###... */
+ /*08dc:*/ 0x38, /* ..###... */
+ /*08dd:*/ 0x38, /* ..###... */
+ /*08de:*/ 0x38, /* ..###... */
+ /*08df:*/ 0x38, /* ..###... */
+ /*08e0:*/ 0x38, /* ..###... */
+ /*08e1:*/ 0x38, /* ..###... */
+ /*08e2:*/ 0x38, /* ..###... */
+ /*08e3:*/ 0x38, /* ..###... */
+ /*08e4:*/ 0x38, /* ..###... */
+ /*08e5:*/ 0x38, /* ..###... */
+ /*08e6:*/ 0x38, /* ..###... */
+ /*08e7:*/ 0x38, /* ..###... */
+ /*08e8:*/ 0x38, /* ..###... */
+ /*08e9:*/ 0x38, /* ..###... */
+ /*08ea:*/ 0x38, /* ..###... */
+ /*08eb:*/ 0x38, /* ..###... */
+ /*08ec:*/ 0x38, /* ..###... */
+ /*08ed:*/ 0x38, /* ..###... */
+ /*08ee:*/ 0xf8, /* #####... */
+ /*08ef:*/ 0xf8, /* #####... */
+/* --- new character asciicircum (94) starting at offset 0x08f0 --- */
+ /*08f0:*/ 14, 11, 9, 1, 10, /* width and bbox (w,h,x,y) */
+ /*08f5:*/ 0x0e,0x00, /* ....###......... */
+ /*08f7:*/ 0x0e,0x00, /* ....###......... */
+ /*08f9:*/ 0x1f,0x00, /* ...#####........ */
+ /*08fb:*/ 0x1b,0x00, /* ...##.##........ */
+ /*08fd:*/ 0x3b,0x80, /* ..###.###....... */
+ /*08ff:*/ 0x71,0xc0, /* .###...###...... */
+ /*0901:*/ 0x71,0xc0, /* .###...###...... */
+ /*0903:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0905:*/ 0xe0,0xe0, /* ###.....###..... */
+/* --- new character underscore (95) starting at offset 0x0907 --- */
+ /*0907:*/ 14, 14, 2, 0, -5, /* width and bbox (w,h,x,y) */
+ /*090c:*/ 0xff,0xfc, /* ##############.. */
+ /*090e:*/ 0xff,0xfc, /* ##############.. */
+/* --- new character grave (96) starting at offset 0x0910 --- */
+ /*0910:*/ 8, 6, 4, 1, 15, /* width and bbox (w,h,x,y) */
+ /*0915:*/ 0xe0, /* ###..... */
+ /*0916:*/ 0x70, /* .###.... */
+ /*0917:*/ 0x38, /* ..###... */
+ /*0918:*/ 0x1c, /* ...###.. */
+/* --- new character a (97) starting at offset 0x0919 --- */
+ /*0919:*/ 14, 12, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*091e:*/ 0x1f,0x80, /* ...######....... */
+ /*0920:*/ 0x3f,0xc0, /* ..########...... */
+ /*0922:*/ 0x71,0xe0, /* .###...####..... */
+ /*0924:*/ 0x70,0xe0, /* .###....###..... */
+ /*0926:*/ 0x00,0xe0, /* ........###..... */
+ /*0928:*/ 0x07,0xe0, /* .....######..... */
+ /*092a:*/ 0x3f,0xe0, /* ..#########..... */
+ /*092c:*/ 0x7c,0xe0, /* .#####..###..... */
+ /*092e:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0930:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0932:*/ 0xe1,0xe0, /* ###....####..... */
+ /*0934:*/ 0xf3,0xe0, /* ####..#####..... */
+ /*0936:*/ 0x7f,0xf0, /* .###########.... */
+ /*0938:*/ 0x3e,0x70, /* ..#####..###.... */
+/* --- new character b (98) starting at offset 0x093a --- */
+ /*093a:*/ 15, 12, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*093f:*/ 0xe0,0x00, /* ###............. */
+ /*0941:*/ 0xe0,0x00, /* ###............. */
+ /*0943:*/ 0xe0,0x00, /* ###............. */
+ /*0945:*/ 0xe0,0x00, /* ###............. */
+ /*0947:*/ 0xe0,0x00, /* ###............. */
+ /*0949:*/ 0xef,0x80, /* ###.#####....... */
+ /*094b:*/ 0xff,0xc0, /* ##########...... */
+ /*094d:*/ 0xf9,0xe0, /* #####..####..... */
+ /*094f:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0951:*/ 0xe0,0x70, /* ###......###.... */
+ /*0953:*/ 0xe0,0x70, /* ###......###.... */
+ /*0955:*/ 0xe0,0x70, /* ###......###.... */
+ /*0957:*/ 0xe0,0x70, /* ###......###.... */
+ /*0959:*/ 0xe0,0x70, /* ###......###.... */
+ /*095b:*/ 0xe0,0x70, /* ###......###.... */
+ /*095d:*/ 0xf0,0xe0, /* ####....###..... */
+ /*095f:*/ 0xf9,0xe0, /* #####..####..... */
+ /*0961:*/ 0xff,0xc0, /* ##########...... */
+ /*0963:*/ 0xef,0x80, /* ###.#####....... */
+/* --- new character c (99) starting at offset 0x0965 --- */
+ /*0965:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*096a:*/ 0x1f,0x80, /* ...######....... */
+ /*096c:*/ 0x3f,0xc0, /* ..########...... */
+ /*096e:*/ 0x79,0xe0, /* .####..####..... */
+ /*0970:*/ 0x70,0xe0, /* .###....###..... */
+ /*0972:*/ 0xe0,0x00, /* ###............. */
+ /*0974:*/ 0xe0,0x00, /* ###............. */
+ /*0976:*/ 0xe0,0x00, /* ###............. */
+ /*0978:*/ 0xe0,0x00, /* ###............. */
+ /*097a:*/ 0xe0,0x00, /* ###............. */
+ /*097c:*/ 0xe0,0x00, /* ###............. */
+ /*097e:*/ 0x70,0xe0, /* .###....###..... */
+ /*0980:*/ 0x79,0xe0, /* .####..####..... */
+ /*0982:*/ 0x3f,0xc0, /* ..########...... */
+ /*0984:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character d (100) starting at offset 0x0986 --- */
+ /*0986:*/ 15, 12, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*098b:*/ 0x00,0x70, /* .........###.... */
+ /*098d:*/ 0x00,0x70, /* .........###.... */
+ /*098f:*/ 0x00,0x70, /* .........###.... */
+ /*0991:*/ 0x00,0x70, /* .........###.... */
+ /*0993:*/ 0x00,0x70, /* .........###.... */
+ /*0995:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*0997:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0999:*/ 0x79,0xf0, /* .####..#####.... */
+ /*099b:*/ 0x70,0xf0, /* .###....####.... */
+ /*099d:*/ 0xe0,0x70, /* ###......###.... */
+ /*099f:*/ 0xe0,0x70, /* ###......###.... */
+ /*09a1:*/ 0xe0,0x70, /* ###......###.... */
+ /*09a3:*/ 0xe0,0x70, /* ###......###.... */
+ /*09a5:*/ 0xe0,0x70, /* ###......###.... */
+ /*09a7:*/ 0xe0,0x70, /* ###......###.... */
+ /*09a9:*/ 0x70,0xf0, /* .###....####.... */
+ /*09ab:*/ 0x79,0xf0, /* .####..#####.... */
+ /*09ad:*/ 0x3f,0xf0, /* ..##########.... */
+ /*09af:*/ 0x1f,0x70, /* ...#####.###.... */
+/* --- new character e (101) starting at offset 0x09b1 --- */
+ /*09b1:*/ 14, 12, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*09b6:*/ 0x0f,0x00, /* ....####........ */
+ /*09b8:*/ 0x3f,0xc0, /* ..########...... */
+ /*09ba:*/ 0x79,0xe0, /* .####..####..... */
+ /*09bc:*/ 0x70,0xe0, /* .###....###..... */
+ /*09be:*/ 0xe0,0x70, /* ###......###.... */
+ /*09c0:*/ 0xe0,0x70, /* ###......###.... */
+ /*09c2:*/ 0xff,0xf0, /* ############.... */
+ /*09c4:*/ 0xff,0xf0, /* ############.... */
+ /*09c6:*/ 0xe0,0x00, /* ###............. */
+ /*09c8:*/ 0xe0,0x00, /* ###............. */
+ /*09ca:*/ 0x70,0x70, /* .###.....###.... */
+ /*09cc:*/ 0x78,0xf0, /* .####...####.... */
+ /*09ce:*/ 0x3f,0xe0, /* ..#########..... */
+ /*09d0:*/ 0x0f,0x80, /* ....#####....... */
+/* --- new character f (102) starting at offset 0x09d2 --- */
+ /*09d2:*/ 9, 7, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*09d7:*/ 0x1e, /* ...####. */
+ /*09d8:*/ 0x3e, /* ..#####. */
+ /*09d9:*/ 0x38, /* ..###... */
+ /*09da:*/ 0x38, /* ..###... */
+ /*09db:*/ 0x38, /* ..###... */
+ /*09dc:*/ 0xfe, /* #######. */
+ /*09dd:*/ 0xfe, /* #######. */
+ /*09de:*/ 0x38, /* ..###... */
+ /*09df:*/ 0x38, /* ..###... */
+ /*09e0:*/ 0x38, /* ..###... */
+ /*09e1:*/ 0x38, /* ..###... */
+ /*09e2:*/ 0x38, /* ..###... */
+ /*09e3:*/ 0x38, /* ..###... */
+ /*09e4:*/ 0x38, /* ..###... */
+ /*09e5:*/ 0x38, /* ..###... */
+ /*09e6:*/ 0x38, /* ..###... */
+ /*09e7:*/ 0x38, /* ..###... */
+ /*09e8:*/ 0x38, /* ..###... */
+ /*09e9:*/ 0x38, /* ..###... */
+/* --- new character g (103) starting at offset 0x09ea --- */
+ /*09ea:*/ 15, 12, 19, 1, -5, /* width and bbox (w,h,x,y) */
+ /*09ef:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*09f1:*/ 0x3f,0xf0, /* ..##########.... */
+ /*09f3:*/ 0x79,0xf0, /* .####..#####.... */
+ /*09f5:*/ 0x70,0xf0, /* .###....####.... */
+ /*09f7:*/ 0xe0,0x70, /* ###......###.... */
+ /*09f9:*/ 0xe0,0x70, /* ###......###.... */
+ /*09fb:*/ 0xe0,0x70, /* ###......###.... */
+ /*09fd:*/ 0xe0,0x70, /* ###......###.... */
+ /*09ff:*/ 0xe0,0x70, /* ###......###.... */
+ /*0a01:*/ 0xe0,0x70, /* ###......###.... */
+ /*0a03:*/ 0x70,0xf0, /* .###....####.... */
+ /*0a05:*/ 0x79,0xf0, /* .####..#####.... */
+ /*0a07:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0a09:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*0a0b:*/ 0x00,0x70, /* .........###.... */
+ /*0a0d:*/ 0xe0,0x70, /* ###......###.... */
+ /*0a0f:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0a11:*/ 0x7f,0xe0, /* .##########..... */
+ /*0a13:*/ 0x1f,0x80, /* ...######....... */
+/* --- new character h (104) starting at offset 0x0a15 --- */
+ /*0a15:*/ 15, 11, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a1a:*/ 0xe0,0x00, /* ###............. */
+ /*0a1c:*/ 0xe0,0x00, /* ###............. */
+ /*0a1e:*/ 0xe0,0x00, /* ###............. */
+ /*0a20:*/ 0xe0,0x00, /* ###............. */
+ /*0a22:*/ 0xe0,0x00, /* ###............. */
+ /*0a24:*/ 0xef,0x00, /* ###.####........ */
+ /*0a26:*/ 0xff,0xc0, /* ##########...... */
+ /*0a28:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0a2a:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a2c:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a2e:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a30:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a32:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a34:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a36:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a38:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a3a:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a3c:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0a3e:*/ 0xe0,0xe0, /* ###.....###..... */
+/* --- new character i (105) starting at offset 0x0a40 --- */
+ /*0a40:*/ 7, 3, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a45:*/ 0xe0, /* ###..... */
+ /*0a46:*/ 0xe0, /* ###..... */
+ /*0a47:*/ 0xe0, /* ###..... */
+ /*0a48:*/ 0x00, /* ........ */
+ /*0a49:*/ 0x00, /* ........ */
+ /*0a4a:*/ 0xe0, /* ###..... */
+ /*0a4b:*/ 0xe0, /* ###..... */
+ /*0a4c:*/ 0xe0, /* ###..... */
+ /*0a4d:*/ 0xe0, /* ###..... */
+ /*0a4e:*/ 0xe0, /* ###..... */
+ /*0a4f:*/ 0xe0, /* ###..... */
+ /*0a50:*/ 0xe0, /* ###..... */
+ /*0a51:*/ 0xe0, /* ###..... */
+ /*0a52:*/ 0xe0, /* ###..... */
+ /*0a53:*/ 0xe0, /* ###..... */
+ /*0a54:*/ 0xe0, /* ###..... */
+ /*0a55:*/ 0xe0, /* ###..... */
+ /*0a56:*/ 0xe0, /* ###..... */
+ /*0a57:*/ 0xe0, /* ###..... */
+/* --- new character j (106) starting at offset 0x0a58 --- */
+ /*0a58:*/ 7, 5, 24, 0, -5, /* width and bbox (w,h,x,y) */
+ /*0a5d:*/ 0x38, /* ..###... */
+ /*0a5e:*/ 0x38, /* ..###... */
+ /*0a5f:*/ 0x38, /* ..###... */
+ /*0a60:*/ 0x00, /* ........ */
+ /*0a61:*/ 0x00, /* ........ */
+ /*0a62:*/ 0x38, /* ..###... */
+ /*0a63:*/ 0x38, /* ..###... */
+ /*0a64:*/ 0x38, /* ..###... */
+ /*0a65:*/ 0x38, /* ..###... */
+ /*0a66:*/ 0x38, /* ..###... */
+ /*0a67:*/ 0x38, /* ..###... */
+ /*0a68:*/ 0x38, /* ..###... */
+ /*0a69:*/ 0x38, /* ..###... */
+ /*0a6a:*/ 0x38, /* ..###... */
+ /*0a6b:*/ 0x38, /* ..###... */
+ /*0a6c:*/ 0x38, /* ..###... */
+ /*0a6d:*/ 0x38, /* ..###... */
+ /*0a6e:*/ 0x38, /* ..###... */
+ /*0a6f:*/ 0x38, /* ..###... */
+ /*0a70:*/ 0x38, /* ..###... */
+ /*0a71:*/ 0x38, /* ..###... */
+ /*0a72:*/ 0x38, /* ..###... */
+ /*0a73:*/ 0xf8, /* #####... */
+ /*0a74:*/ 0xf0, /* ####.... */
+/* --- new character k (107) starting at offset 0x0a75 --- */
+ /*0a75:*/ 14, 12, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a7a:*/ 0xe0,0x00, /* ###............. */
+ /*0a7c:*/ 0xe0,0x00, /* ###............. */
+ /*0a7e:*/ 0xe0,0x00, /* ###............. */
+ /*0a80:*/ 0xe0,0x00, /* ###............. */
+ /*0a82:*/ 0xe0,0x00, /* ###............. */
+ /*0a84:*/ 0xe1,0xe0, /* ###....####..... */
+ /*0a86:*/ 0xe3,0xc0, /* ###...####...... */
+ /*0a88:*/ 0xe7,0x80, /* ###..####....... */
+ /*0a8a:*/ 0xef,0x00, /* ###.####........ */
+ /*0a8c:*/ 0xfe,0x00, /* #######......... */
+ /*0a8e:*/ 0xfc,0x00, /* ######.......... */
+ /*0a90:*/ 0xfe,0x00, /* #######......... */
+ /*0a92:*/ 0xef,0x00, /* ###.####........ */
+ /*0a94:*/ 0xe7,0x00, /* ###..###........ */
+ /*0a96:*/ 0xe7,0x80, /* ###..####....... */
+ /*0a98:*/ 0xe3,0xc0, /* ###...####...... */
+ /*0a9a:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0a9c:*/ 0xe1,0xe0, /* ###....####..... */
+ /*0a9e:*/ 0xe0,0xf0, /* ###.....####.... */
+/* --- new character l (108) starting at offset 0x0aa0 --- */
+ /*0aa0:*/ 7, 3, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0aa5:*/ 0xe0, /* ###..... */
+ /*0aa6:*/ 0xe0, /* ###..... */
+ /*0aa7:*/ 0xe0, /* ###..... */
+ /*0aa8:*/ 0xe0, /* ###..... */
+ /*0aa9:*/ 0xe0, /* ###..... */
+ /*0aaa:*/ 0xe0, /* ###..... */
+ /*0aab:*/ 0xe0, /* ###..... */
+ /*0aac:*/ 0xe0, /* ###..... */
+ /*0aad:*/ 0xe0, /* ###..... */
+ /*0aae:*/ 0xe0, /* ###..... */
+ /*0aaf:*/ 0xe0, /* ###..... */
+ /*0ab0:*/ 0xe0, /* ###..... */
+ /*0ab1:*/ 0xe0, /* ###..... */
+ /*0ab2:*/ 0xe0, /* ###..... */
+ /*0ab3:*/ 0xe0, /* ###..... */
+ /*0ab4:*/ 0xe0, /* ###..... */
+ /*0ab5:*/ 0xe0, /* ###..... */
+ /*0ab6:*/ 0xe0, /* ###..... */
+ /*0ab7:*/ 0xe0, /* ###..... */
+/* --- new character m (109) starting at offset 0x0ab8 --- */
+ /*0ab8:*/ 21, 17, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0abd:*/ 0xef,0x3e,0x00, /* ###.####..#####......... */
+ /*0ac0:*/ 0xff,0xff,0x00, /* ################........ */
+ /*0ac3:*/ 0xf3,0xe7,0x80, /* ####..#####..####....... */
+ /*0ac6:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ac9:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0acc:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0acf:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ad2:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ad5:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ad8:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0adb:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ade:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ae1:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+ /*0ae4:*/ 0xe1,0xc3,0x80, /* ###....###....###....... */
+/* --- new character n (110) starting at offset 0x0ae7 --- */
+ /*0ae7:*/ 15, 11, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0aec:*/ 0xef,0x80, /* ###.#####....... */
+ /*0aee:*/ 0xff,0xc0, /* ##########...... */
+ /*0af0:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0af2:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0af4:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0af6:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0af8:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0afa:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0afc:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0afe:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0b00:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0b02:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0b04:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0b06:*/ 0xe0,0xe0, /* ###.....###..... */
+/* --- new character o (111) starting at offset 0x0b08 --- */
+ /*0b08:*/ 14, 12, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0b0d:*/ 0x0f,0x00, /* ....####........ */
+ /*0b0f:*/ 0x3f,0xc0, /* ..########...... */
+ /*0b11:*/ 0x79,0xe0, /* .####..####..... */
+ /*0b13:*/ 0x70,0xe0, /* .###....###..... */
+ /*0b15:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b17:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b19:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b1b:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b1d:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b1f:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b21:*/ 0x70,0xe0, /* .###....###..... */
+ /*0b23:*/ 0x79,0xe0, /* .####..####..... */
+ /*0b25:*/ 0x3f,0xc0, /* ..########...... */
+ /*0b27:*/ 0x0f,0x00, /* ....####........ */
+/* --- new character p (112) starting at offset 0x0b29 --- */
+ /*0b29:*/ 15, 12, 19, 2, -5, /* width and bbox (w,h,x,y) */
+ /*0b2e:*/ 0xef,0x80, /* ###.#####....... */
+ /*0b30:*/ 0xff,0xc0, /* ##########...... */
+ /*0b32:*/ 0xf9,0xe0, /* #####..####..... */
+ /*0b34:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0b36:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b38:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b3a:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b3c:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b3e:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b40:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b42:*/ 0xf0,0xe0, /* ####....###..... */
+ /*0b44:*/ 0xf9,0xe0, /* #####..####..... */
+ /*0b46:*/ 0xff,0xc0, /* ##########...... */
+ /*0b48:*/ 0xef,0x80, /* ###.#####....... */
+ /*0b4a:*/ 0xe0,0x00, /* ###............. */
+ /*0b4c:*/ 0xe0,0x00, /* ###............. */
+ /*0b4e:*/ 0xe0,0x00, /* ###............. */
+ /*0b50:*/ 0xe0,0x00, /* ###............. */
+ /*0b52:*/ 0xe0,0x00, /* ###............. */
+/* --- new character q (113) starting at offset 0x0b54 --- */
+ /*0b54:*/ 15, 12, 19, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0b59:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*0b5b:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0b5d:*/ 0x79,0xf0, /* .####..#####.... */
+ /*0b5f:*/ 0x70,0xf0, /* .###....####.... */
+ /*0b61:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b63:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b65:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b67:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b69:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b6b:*/ 0xe0,0x70, /* ###......###.... */
+ /*0b6d:*/ 0x70,0xf0, /* .###....####.... */
+ /*0b6f:*/ 0x79,0xf0, /* .####..#####.... */
+ /*0b71:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0b73:*/ 0x1f,0x70, /* ...#####.###.... */
+ /*0b75:*/ 0x00,0x70, /* .........###.... */
+ /*0b77:*/ 0x00,0x70, /* .........###.... */
+ /*0b79:*/ 0x00,0x70, /* .........###.... */
+ /*0b7b:*/ 0x00,0x70, /* .........###.... */
+ /*0b7d:*/ 0x00,0x70, /* .........###.... */
+/* --- new character r (114) starting at offset 0x0b7f --- */
+ /*0b7f:*/ 10, 7, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0b84:*/ 0xe6, /* ###..##. */
+ /*0b85:*/ 0xee, /* ###.###. */
+ /*0b86:*/ 0xfe, /* #######. */
+ /*0b87:*/ 0xf0, /* ####.... */
+ /*0b88:*/ 0xe0, /* ###..... */
+ /*0b89:*/ 0xe0, /* ###..... */
+ /*0b8a:*/ 0xe0, /* ###..... */
+ /*0b8b:*/ 0xe0, /* ###..... */
+ /*0b8c:*/ 0xe0, /* ###..... */
+ /*0b8d:*/ 0xe0, /* ###..... */
+ /*0b8e:*/ 0xe0, /* ###..... */
+ /*0b8f:*/ 0xe0, /* ###..... */
+ /*0b90:*/ 0xe0, /* ###..... */
+ /*0b91:*/ 0xe0, /* ###..... */
+/* --- new character s (115) starting at offset 0x0b92 --- */
+ /*0b92:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0b97:*/ 0x3f,0x00, /* ..######........ */
+ /*0b99:*/ 0x7f,0x80, /* .########....... */
+ /*0b9b:*/ 0xf3,0xc0, /* ####..####...... */
+ /*0b9d:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0b9f:*/ 0xe0,0x00, /* ###............. */
+ /*0ba1:*/ 0xfc,0x00, /* ######.......... */
+ /*0ba3:*/ 0x7f,0x80, /* .########....... */
+ /*0ba5:*/ 0x0f,0xc0, /* ....######...... */
+ /*0ba7:*/ 0x01,0xe0, /* .......####..... */
+ /*0ba9:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bab:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bad:*/ 0xf1,0xe0, /* ####...####..... */
+ /*0baf:*/ 0x7f,0xc0, /* .#########...... */
+ /*0bb1:*/ 0x3f,0x80, /* ..#######....... */
+/* --- new character t (116) starting at offset 0x0bb3 --- */
+ /*0bb3:*/ 9, 7, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0bb8:*/ 0x38, /* ..###... */
+ /*0bb9:*/ 0x38, /* ..###... */
+ /*0bba:*/ 0x38, /* ..###... */
+ /*0bbb:*/ 0x38, /* ..###... */
+ /*0bbc:*/ 0xfe, /* #######. */
+ /*0bbd:*/ 0xfe, /* #######. */
+ /*0bbe:*/ 0x38, /* ..###... */
+ /*0bbf:*/ 0x38, /* ..###... */
+ /*0bc0:*/ 0x38, /* ..###... */
+ /*0bc1:*/ 0x38, /* ..###... */
+ /*0bc2:*/ 0x38, /* ..###... */
+ /*0bc3:*/ 0x38, /* ..###... */
+ /*0bc4:*/ 0x38, /* ..###... */
+ /*0bc5:*/ 0x38, /* ..###... */
+ /*0bc6:*/ 0x38, /* ..###... */
+ /*0bc7:*/ 0x38, /* ..###... */
+ /*0bc8:*/ 0x3e, /* ..#####. */
+ /*0bc9:*/ 0x1e, /* ...####. */
+/* --- new character u (117) starting at offset 0x0bca --- */
+ /*0bca:*/ 15, 11, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0bcf:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bd1:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bd3:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bd5:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bd7:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bd9:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bdb:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bdd:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0bdf:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0be1:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0be3:*/ 0xe1,0xe0, /* ###....####..... */
+ /*0be5:*/ 0x73,0xe0, /* .###..#####..... */
+ /*0be7:*/ 0x7e,0xe0, /* .######.###..... */
+ /*0be9:*/ 0x1c,0xe0, /* ...###..###..... */
+/* --- new character v (118) starting at offset 0x0beb --- */
+ /*0beb:*/ 14, 12, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0bf0:*/ 0xe0,0x70, /* ###......###.... */
+ /*0bf2:*/ 0xe0,0x70, /* ###......###.... */
+ /*0bf4:*/ 0xe0,0x70, /* ###......###.... */
+ /*0bf6:*/ 0x70,0xe0, /* .###....###..... */
+ /*0bf8:*/ 0x70,0xe0, /* .###....###..... */
+ /*0bfa:*/ 0x70,0xe0, /* .###....###..... */
+ /*0bfc:*/ 0x39,0xc0, /* ..###..###...... */
+ /*0bfe:*/ 0x39,0xc0, /* ..###..###...... */
+ /*0c00:*/ 0x39,0xc0, /* ..###..###...... */
+ /*0c02:*/ 0x1f,0x80, /* ...######....... */
+ /*0c04:*/ 0x1f,0x80, /* ...######....... */
+ /*0c06:*/ 0x0f,0x00, /* ....####........ */
+ /*0c08:*/ 0x0f,0x00, /* ....####........ */
+ /*0c0a:*/ 0x0f,0x00, /* ....####........ */
+/* --- new character w (119) starting at offset 0x0c0c --- */
+ /*0c0c:*/ 19, 19, 14, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0c11:*/ 0xe0,0xe0,0xe0, /* ###.....###.....###..... */
+ /*0c14:*/ 0xe0,0xe0,0xe0, /* ###.....###.....###..... */
+ /*0c17:*/ 0x60,0xe0,0xc0, /* .##.....###.....##...... */
+ /*0c1a:*/ 0x71,0xf1,0xc0, /* .###...#####...###...... */
+ /*0c1d:*/ 0x71,0xf1,0xc0, /* .###...#####...###...... */
+ /*0c20:*/ 0x31,0xb1,0x80, /* ..##...##.##...##....... */
+ /*0c23:*/ 0x33,0xb9,0x80, /* ..##..###.###..##....... */
+ /*0c26:*/ 0x3b,0xbb,0x80, /* ..###.###.###.###....... */
+ /*0c29:*/ 0x1b,0x1b,0x00, /* ...##.##...##.##........ */
+ /*0c2c:*/ 0x1f,0x1f,0x00, /* ...#####...#####........ */
+ /*0c2f:*/ 0x1f,0x1f,0x00, /* ...#####...#####........ */
+ /*0c32:*/ 0x0e,0x0e,0x00, /* ....###.....###......... */
+ /*0c35:*/ 0x0e,0x0e,0x00, /* ....###.....###......... */
+ /*0c38:*/ 0x0e,0x0e,0x00, /* ....###.....###......... */
+/* --- new character x (120) starting at offset 0x0c3b --- */
+ /*0c3b:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0c40:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*0c42:*/ 0xf1,0xe0, /* ####...####..... */
+ /*0c44:*/ 0x71,0xc0, /* .###...###...... */
+ /*0c46:*/ 0x3b,0x80, /* ..###.###....... */
+ /*0c48:*/ 0x3f,0x80, /* ..#######....... */
+ /*0c4a:*/ 0x1f,0x00, /* ...#####........ */
+ /*0c4c:*/ 0x0e,0x00, /* ....###......... */
+ /*0c4e:*/ 0x1f,0x00, /* ...#####........ */
+ /*0c50:*/ 0x1f,0x00, /* ...#####........ */
+ /*0c52:*/ 0x3b,0x80, /* ..###.###....... */
+ /*0c54:*/ 0x7b,0xc0, /* .####.####...... */
+ /*0c56:*/ 0x71,0xc0, /* .###...###...... */
+ /*0c58:*/ 0xf1,0xe0, /* ####...####..... */
+ /*0c5a:*/ 0xe0,0xe0, /* ###.....###..... */
+/* --- new character y (121) starting at offset 0x0c5c --- */
+ /*0c5c:*/ 15, 13, 19, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0c61:*/ 0xe0,0x38, /* ###.......###... */
+ /*0c63:*/ 0xe0,0x38, /* ###.......###... */
+ /*0c65:*/ 0x70,0x38, /* .###......###... */
+ /*0c67:*/ 0x78,0x70, /* .####....###.... */
+ /*0c69:*/ 0x38,0x70, /* ..###....###.... */
+ /*0c6b:*/ 0x3c,0xf0, /* ..####..####.... */
+ /*0c6d:*/ 0x1c,0xe0, /* ...###..###..... */
+ /*0c6f:*/ 0x1c,0xe0, /* ...###..###..... */
+ /*0c71:*/ 0x0f,0xc0, /* ....######...... */
+ /*0c73:*/ 0x0f,0xc0, /* ....######...... */
+ /*0c75:*/ 0x07,0xc0, /* .....#####...... */
+ /*0c77:*/ 0x07,0x80, /* .....####....... */
+ /*0c79:*/ 0x03,0x80, /* ......###....... */
+ /*0c7b:*/ 0x03,0x80, /* ......###....... */
+ /*0c7d:*/ 0x07,0x00, /* .....###........ */
+ /*0c7f:*/ 0x07,0x00, /* .....###........ */
+ /*0c81:*/ 0x0e,0x00, /* ....###......... */
+ /*0c83:*/ 0x3e,0x00, /* ..#####......... */
+ /*0c85:*/ 0x3c,0x00, /* ..####.......... */
+/* --- new character z (122) starting at offset 0x0c87 --- */
+ /*0c87:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0c8c:*/ 0xff,0xe0, /* ###########..... */
+ /*0c8e:*/ 0xff,0xe0, /* ###########..... */
+ /*0c90:*/ 0x01,0xc0, /* .......###...... */
+ /*0c92:*/ 0x03,0x80, /* ......###....... */
+ /*0c94:*/ 0x07,0x80, /* .....####....... */
+ /*0c96:*/ 0x0f,0x00, /* ....####........ */
+ /*0c98:*/ 0x0e,0x00, /* ....###......... */
+ /*0c9a:*/ 0x1e,0x00, /* ...####......... */
+ /*0c9c:*/ 0x3c,0x00, /* ..####.......... */
+ /*0c9e:*/ 0x38,0x00, /* ..###........... */
+ /*0ca0:*/ 0x70,0x00, /* .###............ */
+ /*0ca2:*/ 0xf0,0x00, /* ####............ */
+ /*0ca4:*/ 0xff,0xe0, /* ###########..... */
+ /*0ca6:*/ 0xff,0xe0, /* ###########..... */
+/* --- new character braceleft (123) starting at offset 0x0ca8 --- */
+ /*0ca8:*/ 10, 7, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0cad:*/ 0x0e, /* ....###. */
+ /*0cae:*/ 0x1c, /* ...###.. */
+ /*0caf:*/ 0x38, /* ..###... */
+ /*0cb0:*/ 0x38, /* ..###... */
+ /*0cb1:*/ 0x38, /* ..###... */
+ /*0cb2:*/ 0x38, /* ..###... */
+ /*0cb3:*/ 0x38, /* ..###... */
+ /*0cb4:*/ 0x38, /* ..###... */
+ /*0cb5:*/ 0x38, /* ..###... */
+ /*0cb6:*/ 0x38, /* ..###... */
+ /*0cb7:*/ 0x70, /* .###.... */
+ /*0cb8:*/ 0xe0, /* ###..... */
+ /*0cb9:*/ 0xe0, /* ###..... */
+ /*0cba:*/ 0x70, /* .###.... */
+ /*0cbb:*/ 0x38, /* ..###... */
+ /*0cbc:*/ 0x38, /* ..###... */
+ /*0cbd:*/ 0x38, /* ..###... */
+ /*0cbe:*/ 0x38, /* ..###... */
+ /*0cbf:*/ 0x38, /* ..###... */
+ /*0cc0:*/ 0x38, /* ..###... */
+ /*0cc1:*/ 0x38, /* ..###... */
+ /*0cc2:*/ 0x38, /* ..###... */
+ /*0cc3:*/ 0x1c, /* ...###.. */
+ /*0cc4:*/ 0x0e, /* ....###. */
+/* --- new character bar (124) starting at offset 0x0cc5 --- */
+ /*0cc5:*/ 7, 3, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*0cca:*/ 0xe0, /* ###..... */
+ /*0ccb:*/ 0xe0, /* ###..... */
+ /*0ccc:*/ 0xe0, /* ###..... */
+ /*0ccd:*/ 0xe0, /* ###..... */
+ /*0cce:*/ 0xe0, /* ###..... */
+ /*0ccf:*/ 0xe0, /* ###..... */
+ /*0cd0:*/ 0xe0, /* ###..... */
+ /*0cd1:*/ 0xe0, /* ###..... */
+ /*0cd2:*/ 0xe0, /* ###..... */
+ /*0cd3:*/ 0xe0, /* ###..... */
+ /*0cd4:*/ 0xe0, /* ###..... */
+ /*0cd5:*/ 0xe0, /* ###..... */
+ /*0cd6:*/ 0xe0, /* ###..... */
+ /*0cd7:*/ 0xe0, /* ###..... */
+ /*0cd8:*/ 0xe0, /* ###..... */
+ /*0cd9:*/ 0xe0, /* ###..... */
+ /*0cda:*/ 0xe0, /* ###..... */
+ /*0cdb:*/ 0xe0, /* ###..... */
+ /*0cdc:*/ 0xe0, /* ###..... */
+ /*0cdd:*/ 0xe0, /* ###..... */
+ /*0cde:*/ 0xe0, /* ###..... */
+ /*0cdf:*/ 0xe0, /* ###..... */
+ /*0ce0:*/ 0xe0, /* ###..... */
+ /*0ce1:*/ 0xe0, /* ###..... */
+/* --- new character braceright (125) starting at offset 0x0ce2 --- */
+ /*0ce2:*/ 10, 7, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*0ce7:*/ 0xe0, /* ###..... */
+ /*0ce8:*/ 0x70, /* .###.... */
+ /*0ce9:*/ 0x38, /* ..###... */
+ /*0cea:*/ 0x38, /* ..###... */
+ /*0ceb:*/ 0x38, /* ..###... */
+ /*0cec:*/ 0x38, /* ..###... */
+ /*0ced:*/ 0x38, /* ..###... */
+ /*0cee:*/ 0x38, /* ..###... */
+ /*0cef:*/ 0x38, /* ..###... */
+ /*0cf0:*/ 0x38, /* ..###... */
+ /*0cf1:*/ 0x1c, /* ...###.. */
+ /*0cf2:*/ 0x0e, /* ....###. */
+ /*0cf3:*/ 0x0e, /* ....###. */
+ /*0cf4:*/ 0x1c, /* ...###.. */
+ /*0cf5:*/ 0x38, /* ..###... */
+ /*0cf6:*/ 0x38, /* ..###... */
+ /*0cf7:*/ 0x38, /* ..###... */
+ /*0cf8:*/ 0x38, /* ..###... */
+ /*0cf9:*/ 0x38, /* ..###... */
+ /*0cfa:*/ 0x38, /* ..###... */
+ /*0cfb:*/ 0x38, /* ..###... */
+ /*0cfc:*/ 0x38, /* ..###... */
+ /*0cfd:*/ 0x70, /* .###.... */
+ /*0cfe:*/ 0xe0, /* ###..... */
+/* --- new character asciitilde (126) starting at offset 0x0cff --- */
+ /*0cff:*/ 14, 11, 4, 1, 5, /* width and bbox (w,h,x,y) */
+ /*0d04:*/ 0x78,0xe0, /* .####...###..... */
+ /*0d06:*/ 0xfe,0xe0, /* #######.###..... */
+ /*0d08:*/ 0xef,0xe0, /* ###.#######..... */
+ /*0d0a:*/ 0xe3,0xc0, /* ###...####...... */
+};
+static const uint16_t font_helvB24_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x001e /* quotedbl */,
+ 0x0029 /* numbersign */,
+ 0x0052 /* dollar */,
+ 0x0081 /* percent */,
+ 0x00bc /* ampersand */,
+ 0x00e5 /* quotesingle */,
+ 0x00f0 /* parenleft */,
+ 0x010d /* parenright */,
+ 0x012a /* asterisk */,
+ 0x0136 /* plus */,
+ 0x0153 /* comma */,
+ 0x015e /* hyphen */,
+ 0x0166 /* period */,
+ 0x016e /* slash */,
+ 0x0186 /* zero */,
+ 0x01af /* one */,
+ 0x01c6 /* two */,
+ 0x01ef /* three */,
+ 0x0218 /* four */,
+ 0x0241 /* five */,
+ 0x026a /* six */,
+ 0x0293 /* seven */,
+ 0x02bc /* eight */,
+ 0x02e5 /* nine */,
+ 0x030e /* colon */,
+ 0x0321 /* semicolon */,
+ 0x0337 /* less */,
+ 0x0354 /* equal */,
+ 0x0365 /* greater */,
+ 0x0382 /* question */,
+ 0x03ad /* at */,
+ 0x03f4 /* A */,
+ 0x041f /* B */,
+ 0x044a /* C */,
+ 0x0475 /* D */,
+ 0x04a0 /* E */,
+ 0x04cb /* F */,
+ 0x04f6 /* G */,
+ 0x0534 /* H */,
+ 0x055f /* I */,
+ 0x0577 /* J */,
+ 0x05a2 /* K */,
+ 0x05cd /* L */,
+ 0x05f8 /* M */,
+ 0x0636 /* N */,
+ 0x0661 /* O */,
+ 0x069f /* P */,
+ 0x06ca /* Q */,
+ 0x0708 /* R */,
+ 0x0733 /* S */,
+ 0x075e /* T */,
+ 0x0789 /* U */,
+ 0x07b4 /* V */,
+ 0x07df /* W */,
+ 0x081d /* X */,
+ 0x0848 /* Y */,
+ 0x0873 /* Z */,
+ 0x089e /* bracketleft */,
+ 0x08bb /* backslash */,
+ 0x08d3 /* bracketright */,
+ 0x08f0 /* asciicircum */,
+ 0x0907 /* underscore */,
+ 0x0910 /* grave */,
+ 0x0919 /* a */,
+ 0x093a /* b */,
+ 0x0965 /* c */,
+ 0x0986 /* d */,
+ 0x09b1 /* e */,
+ 0x09d2 /* f */,
+ 0x09ea /* g */,
+ 0x0a15 /* h */,
+ 0x0a40 /* i */,
+ 0x0a58 /* j */,
+ 0x0a75 /* k */,
+ 0x0aa0 /* l */,
+ 0x0ab8 /* m */,
+ 0x0ae7 /* n */,
+ 0x0b08 /* o */,
+ 0x0b29 /* p */,
+ 0x0b54 /* q */,
+ 0x0b7f /* r */,
+ 0x0b92 /* s */,
+ 0x0bb3 /* t */,
+ 0x0bca /* u */,
+ 0x0beb /* v */,
+ 0x0c0c /* w */,
+ 0x0c3b /* x */,
+ 0x0c5c /* y */,
+ 0x0c87 /* z */,
+ 0x0ca8 /* braceleft */,
+ 0x0cc5 /* bar */,
+ 0x0ce2 /* braceright */,
+ 0x0cff /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvB24 = {
+ .height = 27,
+ .ascent = 22,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvB24_data,
+ .charoffs = font_helvB24_offsets,
+};
diff --git a/src/target/firmware/fb/helvR08.c b/src/target/firmware/fb/helvR08.c
new file mode 100644
index 00000000..7ebf82ea
--- /dev/null
+++ b/src/target/firmware/fb/helvR08.c
@@ -0,0 +1,826 @@
+#include <fb/font.h>
+static const uint8_t font_helvR08_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 2, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 2, 1, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0x80, /* #....... */
+ /*000c:*/ 0x80, /* #....... */
+ /*000d:*/ 0x80, /* #....... */
+ /*000e:*/ 0x80, /* #....... */
+ /*000f:*/ 0x00, /* ........ */
+ /*0010:*/ 0x80, /* #....... */
+/* --- new character quotedbl (34) starting at offset 0x0011 --- */
+ /*0011:*/ 3, 3, 3, 1, 3, /* width and bbox (w,h,x,y) */
+ /*0016:*/ 0xa0, /* #.#..... */
+ /*0017:*/ 0xa0, /* #.#..... */
+ /*0018:*/ 0xa0, /* #.#..... */
+/* --- new character numbersign (35) starting at offset 0x0019 --- */
+ /*0019:*/ 5, 5, 5, 0, 0, /* width and bbox (w,h,x,y) */
+ /*001e:*/ 0x50, /* .#.#.... */
+ /*001f:*/ 0xf8, /* #####... */
+ /*0020:*/ 0x50, /* .#.#.... */
+ /*0021:*/ 0xf8, /* #####... */
+ /*0022:*/ 0x50, /* .#.#.... */
+/* --- new character dollar (36) starting at offset 0x0023 --- */
+ /*0023:*/ 5, 4, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*0028:*/ 0x20, /* ..#..... */
+ /*0029:*/ 0x70, /* .###.... */
+ /*002a:*/ 0x80, /* #....... */
+ /*002b:*/ 0x60, /* .##..... */
+ /*002c:*/ 0x10, /* ...#.... */
+ /*002d:*/ 0xe0, /* ###..... */
+ /*002e:*/ 0x40, /* .#...... */
+/* --- new character percent (37) starting at offset 0x002f --- */
+ /*002f:*/ 7, 6, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0034:*/ 0xe8, /* ###.#... */
+ /*0035:*/ 0xa8, /* #.#.#... */
+ /*0036:*/ 0xd0, /* ##.#.... */
+ /*0037:*/ 0x2c, /* ..#.##.. */
+ /*0038:*/ 0x54, /* .#.#.#.. */
+ /*0039:*/ 0x5c, /* .#.###.. */
+/* --- new character ampersand (38) starting at offset 0x003a --- */
+ /*003a:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*003f:*/ 0x40, /* .#...... */
+ /*0040:*/ 0xa0, /* #.#..... */
+ /*0041:*/ 0x48, /* .#..#... */
+ /*0042:*/ 0xa8, /* #.#.#... */
+ /*0043:*/ 0xb0, /* #.##.... */
+ /*0044:*/ 0x58, /* .#.##... */
+/* --- new character quotesingle (39) starting at offset 0x0045 --- */
+ /*0045:*/ 2, 1, 2, 0, 6, /* width and bbox (w,h,x,y) */
+ /*004a:*/ 0x80, /* #....... */
+ /*004b:*/ 0x80, /* #....... */
+/* --- new character parenleft (40) starting at offset 0x004c --- */
+ /*004c:*/ 3, 2, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*0051:*/ 0x40, /* .#...... */
+ /*0052:*/ 0x80, /* #....... */
+ /*0053:*/ 0x80, /* #....... */
+ /*0054:*/ 0x80, /* #....... */
+ /*0055:*/ 0x80, /* #....... */
+ /*0056:*/ 0x80, /* #....... */
+ /*0057:*/ 0x40, /* .#...... */
+/* --- new character parenright (41) starting at offset 0x0058 --- */
+ /*0058:*/ 3, 2, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*005d:*/ 0x80, /* #....... */
+ /*005e:*/ 0x40, /* .#...... */
+ /*005f:*/ 0x40, /* .#...... */
+ /*0060:*/ 0x40, /* .#...... */
+ /*0061:*/ 0x40, /* .#...... */
+ /*0062:*/ 0x40, /* .#...... */
+ /*0063:*/ 0x80, /* #....... */
+/* --- new character asterisk (42) starting at offset 0x0064 --- */
+ /*0064:*/ 3, 3, 3, 1, 2, /* width and bbox (w,h,x,y) */
+ /*0069:*/ 0x40, /* .#...... */
+ /*006a:*/ 0xe0, /* ###..... */
+ /*006b:*/ 0x40, /* .#...... */
+/* --- new character plus (43) starting at offset 0x006c --- */
+ /*006c:*/ 5, 5, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0071:*/ 0x20, /* ..#..... */
+ /*0072:*/ 0x20, /* ..#..... */
+ /*0073:*/ 0xf8, /* #####... */
+ /*0074:*/ 0x20, /* ..#..... */
+ /*0075:*/ 0x20, /* ..#..... */
+/* --- new character comma (44) starting at offset 0x0076 --- */
+ /*0076:*/ 2, 2, 3, 0, -2, /* width and bbox (w,h,x,y) */
+ /*007b:*/ 0x40, /* .#...... */
+ /*007c:*/ 0x40, /* .#...... */
+ /*007d:*/ 0x80, /* #....... */
+/* --- new character hyphen (45) starting at offset 0x007e --- */
+ /*007e:*/ 3, 2, 1, 0, 2, /* width and bbox (w,h,x,y) */
+ /*0083:*/ 0xc0, /* ##...... */
+/* --- new character period (46) starting at offset 0x0084 --- */
+ /*0084:*/ 2, 1, 1, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0089:*/ 0x80, /* #....... */
+/* --- new character slash (47) starting at offset 0x008a --- */
+ /*008a:*/ 2, 2, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*008f:*/ 0x40, /* .#...... */
+ /*0090:*/ 0x40, /* .#...... */
+ /*0091:*/ 0x40, /* .#...... */
+ /*0092:*/ 0x80, /* #....... */
+ /*0093:*/ 0x80, /* #....... */
+ /*0094:*/ 0x80, /* #....... */
+ /*0095:*/ 0x80, /* #....... */
+/* --- new character zero (48) starting at offset 0x0096 --- */
+ /*0096:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*009b:*/ 0x60, /* .##..... */
+ /*009c:*/ 0x90, /* #..#.... */
+ /*009d:*/ 0x90, /* #..#.... */
+ /*009e:*/ 0x90, /* #..#.... */
+ /*009f:*/ 0x90, /* #..#.... */
+ /*00a0:*/ 0x60, /* .##..... */
+/* --- new character one (49) starting at offset 0x00a1 --- */
+ /*00a1:*/ 5, 2, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*00a6:*/ 0x40, /* .#...... */
+ /*00a7:*/ 0xc0, /* ##...... */
+ /*00a8:*/ 0x40, /* .#...... */
+ /*00a9:*/ 0x40, /* .#...... */
+ /*00aa:*/ 0x40, /* .#...... */
+ /*00ab:*/ 0x40, /* .#...... */
+/* --- new character two (50) starting at offset 0x00ac --- */
+ /*00ac:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00b1:*/ 0x60, /* .##..... */
+ /*00b2:*/ 0x90, /* #..#.... */
+ /*00b3:*/ 0x10, /* ...#.... */
+ /*00b4:*/ 0x20, /* ..#..... */
+ /*00b5:*/ 0x40, /* .#...... */
+ /*00b6:*/ 0xf0, /* ####.... */
+/* --- new character three (51) starting at offset 0x00b7 --- */
+ /*00b7:*/ 5, 3, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*00bc:*/ 0xc0, /* ##...... */
+ /*00bd:*/ 0x20, /* ..#..... */
+ /*00be:*/ 0xc0, /* ##...... */
+ /*00bf:*/ 0x20, /* ..#..... */
+ /*00c0:*/ 0x20, /* ..#..... */
+ /*00c1:*/ 0xc0, /* ##...... */
+/* --- new character four (52) starting at offset 0x00c2 --- */
+ /*00c2:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00c7:*/ 0x20, /* ..#..... */
+ /*00c8:*/ 0x20, /* ..#..... */
+ /*00c9:*/ 0x60, /* .##..... */
+ /*00ca:*/ 0xf0, /* ####.... */
+ /*00cb:*/ 0x20, /* ..#..... */
+ /*00cc:*/ 0x20, /* ..#..... */
+/* --- new character five (53) starting at offset 0x00cd --- */
+ /*00cd:*/ 5, 3, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*00d2:*/ 0xe0, /* ###..... */
+ /*00d3:*/ 0x80, /* #....... */
+ /*00d4:*/ 0xc0, /* ##...... */
+ /*00d5:*/ 0x20, /* ..#..... */
+ /*00d6:*/ 0x20, /* ..#..... */
+ /*00d7:*/ 0xc0, /* ##...... */
+/* --- new character six (54) starting at offset 0x00d8 --- */
+ /*00d8:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00dd:*/ 0x70, /* .###.... */
+ /*00de:*/ 0x80, /* #....... */
+ /*00df:*/ 0xe0, /* ###..... */
+ /*00e0:*/ 0x90, /* #..#.... */
+ /*00e1:*/ 0x90, /* #..#.... */
+ /*00e2:*/ 0x60, /* .##..... */
+/* --- new character seven (55) starting at offset 0x00e3 --- */
+ /*00e3:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00e8:*/ 0xf0, /* ####.... */
+ /*00e9:*/ 0x10, /* ...#.... */
+ /*00ea:*/ 0x20, /* ..#..... */
+ /*00eb:*/ 0x40, /* .#...... */
+ /*00ec:*/ 0x40, /* .#...... */
+ /*00ed:*/ 0x40, /* .#...... */
+/* --- new character eight (56) starting at offset 0x00ee --- */
+ /*00ee:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00f3:*/ 0x60, /* .##..... */
+ /*00f4:*/ 0x90, /* #..#.... */
+ /*00f5:*/ 0x60, /* .##..... */
+ /*00f6:*/ 0x90, /* #..#.... */
+ /*00f7:*/ 0x90, /* #..#.... */
+ /*00f8:*/ 0x60, /* .##..... */
+/* --- new character nine (57) starting at offset 0x00f9 --- */
+ /*00f9:*/ 5, 4, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00fe:*/ 0x60, /* .##..... */
+ /*00ff:*/ 0x90, /* #..#.... */
+ /*0100:*/ 0x90, /* #..#.... */
+ /*0101:*/ 0x70, /* .###.... */
+ /*0102:*/ 0x10, /* ...#.... */
+ /*0103:*/ 0x60, /* .##..... */
+/* --- new character colon (58) starting at offset 0x0104 --- */
+ /*0104:*/ 2, 1, 4, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0109:*/ 0x80, /* #....... */
+ /*010a:*/ 0x00, /* ........ */
+ /*010b:*/ 0x00, /* ........ */
+ /*010c:*/ 0x80, /* #....... */
+/* --- new character semicolon (59) starting at offset 0x010d --- */
+ /*010d:*/ 2, 2, 6, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0112:*/ 0x40, /* .#...... */
+ /*0113:*/ 0x00, /* ........ */
+ /*0114:*/ 0x00, /* ........ */
+ /*0115:*/ 0x40, /* .#...... */
+ /*0116:*/ 0x40, /* .#...... */
+ /*0117:*/ 0x80, /* #....... */
+/* --- new character less (60) starting at offset 0x0118 --- */
+ /*0118:*/ 5, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*011d:*/ 0x20, /* ..#..... */
+ /*011e:*/ 0x40, /* .#...... */
+ /*011f:*/ 0x80, /* #....... */
+ /*0120:*/ 0x40, /* .#...... */
+ /*0121:*/ 0x20, /* ..#..... */
+/* --- new character equal (61) starting at offset 0x0122 --- */
+ /*0122:*/ 4, 3, 3, 1, 1, /* width and bbox (w,h,x,y) */
+ /*0127:*/ 0xe0, /* ###..... */
+ /*0128:*/ 0x00, /* ........ */
+ /*0129:*/ 0xe0, /* ###..... */
+/* --- new character greater (62) starting at offset 0x012a --- */
+ /*012a:*/ 5, 3, 5, 2, 0, /* width and bbox (w,h,x,y) */
+ /*012f:*/ 0x80, /* #....... */
+ /*0130:*/ 0x40, /* .#...... */
+ /*0131:*/ 0x20, /* ..#..... */
+ /*0132:*/ 0x40, /* .#...... */
+ /*0133:*/ 0x80, /* #....... */
+/* --- new character question (63) starting at offset 0x0134 --- */
+ /*0134:*/ 5, 3, 5, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0139:*/ 0xc0, /* ##...... */
+ /*013a:*/ 0x20, /* ..#..... */
+ /*013b:*/ 0x40, /* .#...... */
+ /*013c:*/ 0x00, /* ........ */
+ /*013d:*/ 0x40, /* .#...... */
+/* --- new character at (64) starting at offset 0x013e --- */
+ /*013e:*/ 9, 8, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*0143:*/ 0x3e, /* ..#####. */
+ /*0144:*/ 0x41, /* .#.....# */
+ /*0145:*/ 0x99, /* #..##..# */
+ /*0146:*/ 0xa5, /* #.#..#.# */
+ /*0147:*/ 0x9e, /* #..####. */
+ /*0148:*/ 0x80, /* #....... */
+ /*0149:*/ 0x78, /* .####... */
+/* --- new character A (65) starting at offset 0x014a --- */
+ /*014a:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*014f:*/ 0x20, /* ..#..... */
+ /*0150:*/ 0x20, /* ..#..... */
+ /*0151:*/ 0x50, /* .#.#.... */
+ /*0152:*/ 0x70, /* .###.... */
+ /*0153:*/ 0x88, /* #...#... */
+ /*0154:*/ 0x88, /* #...#... */
+/* --- new character B (66) starting at offset 0x0155 --- */
+ /*0155:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*015a:*/ 0xe0, /* ###..... */
+ /*015b:*/ 0x90, /* #..#.... */
+ /*015c:*/ 0xe0, /* ###..... */
+ /*015d:*/ 0x90, /* #..#.... */
+ /*015e:*/ 0x90, /* #..#.... */
+ /*015f:*/ 0xe0, /* ###..... */
+/* --- new character C (67) starting at offset 0x0160 --- */
+ /*0160:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0165:*/ 0x70, /* .###.... */
+ /*0166:*/ 0x88, /* #...#... */
+ /*0167:*/ 0x80, /* #....... */
+ /*0168:*/ 0x80, /* #....... */
+ /*0169:*/ 0x88, /* #...#... */
+ /*016a:*/ 0x70, /* .###.... */
+/* --- new character D (68) starting at offset 0x016b --- */
+ /*016b:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0170:*/ 0xf0, /* ####.... */
+ /*0171:*/ 0x88, /* #...#... */
+ /*0172:*/ 0x88, /* #...#... */
+ /*0173:*/ 0x88, /* #...#... */
+ /*0174:*/ 0x88, /* #...#... */
+ /*0175:*/ 0xf0, /* ####.... */
+/* --- new character E (69) starting at offset 0x0176 --- */
+ /*0176:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*017b:*/ 0xf0, /* ####.... */
+ /*017c:*/ 0x80, /* #....... */
+ /*017d:*/ 0xe0, /* ###..... */
+ /*017e:*/ 0x80, /* #....... */
+ /*017f:*/ 0x80, /* #....... */
+ /*0180:*/ 0xf0, /* ####.... */
+/* --- new character F (70) starting at offset 0x0181 --- */
+ /*0181:*/ 5, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0186:*/ 0xf0, /* ####.... */
+ /*0187:*/ 0x80, /* #....... */
+ /*0188:*/ 0xe0, /* ###..... */
+ /*0189:*/ 0x80, /* #....... */
+ /*018a:*/ 0x80, /* #....... */
+ /*018b:*/ 0x80, /* #....... */
+/* --- new character G (71) starting at offset 0x018c --- */
+ /*018c:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0191:*/ 0x70, /* .###.... */
+ /*0192:*/ 0x80, /* #....... */
+ /*0193:*/ 0x98, /* #..##... */
+ /*0194:*/ 0x88, /* #...#... */
+ /*0195:*/ 0x88, /* #...#... */
+ /*0196:*/ 0x70, /* .###.... */
+/* --- new character H (72) starting at offset 0x0197 --- */
+ /*0197:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*019c:*/ 0x88, /* #...#... */
+ /*019d:*/ 0x88, /* #...#... */
+ /*019e:*/ 0xf8, /* #####... */
+ /*019f:*/ 0x88, /* #...#... */
+ /*01a0:*/ 0x88, /* #...#... */
+ /*01a1:*/ 0x88, /* #...#... */
+/* --- new character I (73) starting at offset 0x01a2 --- */
+ /*01a2:*/ 2, 1, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01a7:*/ 0x80, /* #....... */
+ /*01a8:*/ 0x80, /* #....... */
+ /*01a9:*/ 0x80, /* #....... */
+ /*01aa:*/ 0x80, /* #....... */
+ /*01ab:*/ 0x80, /* #....... */
+ /*01ac:*/ 0x80, /* #....... */
+/* --- new character J (74) starting at offset 0x01ad --- */
+ /*01ad:*/ 4, 3, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01b2:*/ 0x20, /* ..#..... */
+ /*01b3:*/ 0x20, /* ..#..... */
+ /*01b4:*/ 0x20, /* ..#..... */
+ /*01b5:*/ 0x20, /* ..#..... */
+ /*01b6:*/ 0xa0, /* #.#..... */
+ /*01b7:*/ 0x40, /* .#...... */
+/* --- new character K (75) starting at offset 0x01b8 --- */
+ /*01b8:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01bd:*/ 0x90, /* #..#.... */
+ /*01be:*/ 0xa0, /* #.#..... */
+ /*01bf:*/ 0xc0, /* ##...... */
+ /*01c0:*/ 0xe0, /* ###..... */
+ /*01c1:*/ 0x90, /* #..#.... */
+ /*01c2:*/ 0x90, /* #..#.... */
+/* --- new character L (76) starting at offset 0x01c3 --- */
+ /*01c3:*/ 5, 3, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01c8:*/ 0x80, /* #....... */
+ /*01c9:*/ 0x80, /* #....... */
+ /*01ca:*/ 0x80, /* #....... */
+ /*01cb:*/ 0x80, /* #....... */
+ /*01cc:*/ 0x80, /* #....... */
+ /*01cd:*/ 0xe0, /* ###..... */
+/* --- new character M (77) starting at offset 0x01ce --- */
+ /*01ce:*/ 7, 5, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01d3:*/ 0x88, /* #...#... */
+ /*01d4:*/ 0xd8, /* ##.##... */
+ /*01d5:*/ 0xa8, /* #.#.#... */
+ /*01d6:*/ 0xa8, /* #.#.#... */
+ /*01d7:*/ 0xa8, /* #.#.#... */
+ /*01d8:*/ 0xa8, /* #.#.#... */
+/* --- new character N (78) starting at offset 0x01d9 --- */
+ /*01d9:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01de:*/ 0x88, /* #...#... */
+ /*01df:*/ 0xc8, /* ##..#... */
+ /*01e0:*/ 0xa8, /* #.#.#... */
+ /*01e1:*/ 0xa8, /* #.#.#... */
+ /*01e2:*/ 0x98, /* #..##... */
+ /*01e3:*/ 0x88, /* #...#... */
+/* --- new character O (79) starting at offset 0x01e4 --- */
+ /*01e4:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01e9:*/ 0x70, /* .###.... */
+ /*01ea:*/ 0x88, /* #...#... */
+ /*01eb:*/ 0x88, /* #...#... */
+ /*01ec:*/ 0x88, /* #...#... */
+ /*01ed:*/ 0x88, /* #...#... */
+ /*01ee:*/ 0x70, /* .###.... */
+/* --- new character P (80) starting at offset 0x01ef --- */
+ /*01ef:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01f4:*/ 0xe0, /* ###..... */
+ /*01f5:*/ 0x90, /* #..#.... */
+ /*01f6:*/ 0x90, /* #..#.... */
+ /*01f7:*/ 0xe0, /* ###..... */
+ /*01f8:*/ 0x80, /* #....... */
+ /*01f9:*/ 0x80, /* #....... */
+/* --- new character Q (81) starting at offset 0x01fa --- */
+ /*01fa:*/ 6, 5, 8, 1, -2, /* width and bbox (w,h,x,y) */
+ /*01ff:*/ 0x70, /* .###.... */
+ /*0200:*/ 0x88, /* #...#... */
+ /*0201:*/ 0x88, /* #...#... */
+ /*0202:*/ 0x88, /* #...#... */
+ /*0203:*/ 0x88, /* #...#... */
+ /*0204:*/ 0x70, /* .###.... */
+ /*0205:*/ 0x20, /* ..#..... */
+ /*0206:*/ 0x10, /* ...#.... */
+/* --- new character R (82) starting at offset 0x0207 --- */
+ /*0207:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*020c:*/ 0xe0, /* ###..... */
+ /*020d:*/ 0x90, /* #..#.... */
+ /*020e:*/ 0x90, /* #..#.... */
+ /*020f:*/ 0xe0, /* ###..... */
+ /*0210:*/ 0x90, /* #..#.... */
+ /*0211:*/ 0x90, /* #..#.... */
+/* --- new character S (83) starting at offset 0x0212 --- */
+ /*0212:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0217:*/ 0x70, /* .###.... */
+ /*0218:*/ 0x80, /* #....... */
+ /*0219:*/ 0xe0, /* ###..... */
+ /*021a:*/ 0x10, /* ...#.... */
+ /*021b:*/ 0x10, /* ...#.... */
+ /*021c:*/ 0xe0, /* ###..... */
+/* --- new character T (84) starting at offset 0x021d --- */
+ /*021d:*/ 4, 3, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0222:*/ 0xe0, /* ###..... */
+ /*0223:*/ 0x40, /* .#...... */
+ /*0224:*/ 0x40, /* .#...... */
+ /*0225:*/ 0x40, /* .#...... */
+ /*0226:*/ 0x40, /* .#...... */
+ /*0227:*/ 0x40, /* .#...... */
+/* --- new character U (85) starting at offset 0x0228 --- */
+ /*0228:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*022d:*/ 0x88, /* #...#... */
+ /*022e:*/ 0x88, /* #...#... */
+ /*022f:*/ 0x88, /* #...#... */
+ /*0230:*/ 0x88, /* #...#... */
+ /*0231:*/ 0x88, /* #...#... */
+ /*0232:*/ 0x70, /* .###.... */
+/* --- new character V (86) starting at offset 0x0233 --- */
+ /*0233:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0238:*/ 0x90, /* #..#.... */
+ /*0239:*/ 0x90, /* #..#.... */
+ /*023a:*/ 0x90, /* #..#.... */
+ /*023b:*/ 0x90, /* #..#.... */
+ /*023c:*/ 0xa0, /* #.#..... */
+ /*023d:*/ 0x40, /* .#...... */
+/* --- new character W (87) starting at offset 0x023e --- */
+ /*023e:*/ 7, 7, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0243:*/ 0x92, /* #..#..#. */
+ /*0244:*/ 0x92, /* #..#..#. */
+ /*0245:*/ 0x92, /* #..#..#. */
+ /*0246:*/ 0x6c, /* .##.##.. */
+ /*0247:*/ 0x48, /* .#..#... */
+ /*0248:*/ 0x48, /* .#..#... */
+/* --- new character X (88) starting at offset 0x0249 --- */
+ /*0249:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*024e:*/ 0x90, /* #..#.... */
+ /*024f:*/ 0x90, /* #..#.... */
+ /*0250:*/ 0x60, /* .##..... */
+ /*0251:*/ 0x60, /* .##..... */
+ /*0252:*/ 0x90, /* #..#.... */
+ /*0253:*/ 0x90, /* #..#.... */
+/* --- new character Y (89) starting at offset 0x0254 --- */
+ /*0254:*/ 6, 5, 6, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0259:*/ 0xc8, /* ##..#... */
+ /*025a:*/ 0x48, /* .#..#... */
+ /*025b:*/ 0x48, /* .#..#... */
+ /*025c:*/ 0x30, /* ..##.... */
+ /*025d:*/ 0x20, /* ..#..... */
+ /*025e:*/ 0x20, /* ..#..... */
+/* --- new character Z (90) starting at offset 0x025f --- */
+ /*025f:*/ 6, 4, 6, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0264:*/ 0xf0, /* ####.... */
+ /*0265:*/ 0x10, /* ...#.... */
+ /*0266:*/ 0x20, /* ..#..... */
+ /*0267:*/ 0x40, /* .#...... */
+ /*0268:*/ 0x80, /* #....... */
+ /*0269:*/ 0xf0, /* ####.... */
+/* --- new character bracketleft (91) starting at offset 0x026a --- */
+ /*026a:*/ 2, 2, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*026f:*/ 0xc0, /* ##...... */
+ /*0270:*/ 0x80, /* #....... */
+ /*0271:*/ 0x80, /* #....... */
+ /*0272:*/ 0x80, /* #....... */
+ /*0273:*/ 0x80, /* #....... */
+ /*0274:*/ 0x80, /* #....... */
+ /*0275:*/ 0xc0, /* ##...... */
+/* --- new character backslash (92) starting at offset 0x0276 --- */
+ /*0276:*/ 2, 2, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*027b:*/ 0x80, /* #....... */
+ /*027c:*/ 0x80, /* #....... */
+ /*027d:*/ 0x80, /* #....... */
+ /*027e:*/ 0x40, /* .#...... */
+ /*027f:*/ 0x40, /* .#...... */
+ /*0280:*/ 0x40, /* .#...... */
+ /*0281:*/ 0x40, /* .#...... */
+/* --- new character bracketright (93) starting at offset 0x0282 --- */
+ /*0282:*/ 2, 2, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*0287:*/ 0xc0, /* ##...... */
+ /*0288:*/ 0x40, /* .#...... */
+ /*0289:*/ 0x40, /* .#...... */
+ /*028a:*/ 0x40, /* .#...... */
+ /*028b:*/ 0x40, /* .#...... */
+ /*028c:*/ 0x40, /* .#...... */
+ /*028d:*/ 0xc0, /* ##...... */
+/* --- new character asciicircum (94) starting at offset 0x028e --- */
+ /*028e:*/ 5, 5, 3, 0, 2, /* width and bbox (w,h,x,y) */
+ /*0293:*/ 0x20, /* ..#..... */
+ /*0294:*/ 0x50, /* .#.#.... */
+ /*0295:*/ 0x88, /* #...#... */
+/* --- new character underscore (95) starting at offset 0x0296 --- */
+ /*0296:*/ 5, 5, 1, 0, -1, /* width and bbox (w,h,x,y) */
+ /*029b:*/ 0xf8, /* #####... */
+/* --- new character grave (96) starting at offset 0x029c --- */
+ /*029c:*/ 3, 2, 2, 0, 6, /* width and bbox (w,h,x,y) */
+ /*02a1:*/ 0x80, /* #....... */
+ /*02a2:*/ 0x40, /* .#...... */
+/* --- new character a (97) starting at offset 0x02a3 --- */
+ /*02a3:*/ 4, 4, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02a8:*/ 0xc0, /* ##...... */
+ /*02a9:*/ 0x20, /* ..#..... */
+ /*02aa:*/ 0xe0, /* ###..... */
+ /*02ab:*/ 0xa0, /* #.#..... */
+ /*02ac:*/ 0xd0, /* ##.#.... */
+/* --- new character b (98) starting at offset 0x02ad --- */
+ /*02ad:*/ 5, 4, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02b2:*/ 0x80, /* #....... */
+ /*02b3:*/ 0x80, /* #....... */
+ /*02b4:*/ 0xe0, /* ###..... */
+ /*02b5:*/ 0x90, /* #..#.... */
+ /*02b6:*/ 0x90, /* #..#.... */
+ /*02b7:*/ 0x90, /* #..#.... */
+ /*02b8:*/ 0xe0, /* ###..... */
+/* --- new character c (99) starting at offset 0x02b9 --- */
+ /*02b9:*/ 4, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02be:*/ 0x60, /* .##..... */
+ /*02bf:*/ 0x80, /* #....... */
+ /*02c0:*/ 0x80, /* #....... */
+ /*02c1:*/ 0x80, /* #....... */
+ /*02c2:*/ 0x60, /* .##..... */
+/* --- new character d (100) starting at offset 0x02c3 --- */
+ /*02c3:*/ 5, 4, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02c8:*/ 0x10, /* ...#.... */
+ /*02c9:*/ 0x10, /* ...#.... */
+ /*02ca:*/ 0x70, /* .###.... */
+ /*02cb:*/ 0x90, /* #..#.... */
+ /*02cc:*/ 0x90, /* #..#.... */
+ /*02cd:*/ 0x90, /* #..#.... */
+ /*02ce:*/ 0x70, /* .###.... */
+/* --- new character e (101) starting at offset 0x02cf --- */
+ /*02cf:*/ 4, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02d4:*/ 0x40, /* .#...... */
+ /*02d5:*/ 0xa0, /* #.#..... */
+ /*02d6:*/ 0xe0, /* ###..... */
+ /*02d7:*/ 0x80, /* #....... */
+ /*02d8:*/ 0x60, /* .##..... */
+/* --- new character f (102) starting at offset 0x02d9 --- */
+ /*02d9:*/ 4, 3, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02de:*/ 0x20, /* ..#..... */
+ /*02df:*/ 0x40, /* .#...... */
+ /*02e0:*/ 0xe0, /* ###..... */
+ /*02e1:*/ 0x40, /* .#...... */
+ /*02e2:*/ 0x40, /* .#...... */
+ /*02e3:*/ 0x40, /* .#...... */
+ /*02e4:*/ 0x40, /* .#...... */
+/* --- new character g (103) starting at offset 0x02e5 --- */
+ /*02e5:*/ 5, 4, 6, 1, -1, /* width and bbox (w,h,x,y) */
+ /*02ea:*/ 0x70, /* .###.... */
+ /*02eb:*/ 0x90, /* #..#.... */
+ /*02ec:*/ 0x90, /* #..#.... */
+ /*02ed:*/ 0x70, /* .###.... */
+ /*02ee:*/ 0x10, /* ...#.... */
+ /*02ef:*/ 0x60, /* .##..... */
+/* --- new character h (104) starting at offset 0x02f0 --- */
+ /*02f0:*/ 5, 4, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02f5:*/ 0x80, /* #....... */
+ /*02f6:*/ 0x80, /* #....... */
+ /*02f7:*/ 0xe0, /* ###..... */
+ /*02f8:*/ 0x90, /* #..#.... */
+ /*02f9:*/ 0x90, /* #..#.... */
+ /*02fa:*/ 0x90, /* #..#.... */
+ /*02fb:*/ 0x90, /* #..#.... */
+/* --- new character i (105) starting at offset 0x02fc --- */
+ /*02fc:*/ 2, 1, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0301:*/ 0x80, /* #....... */
+ /*0302:*/ 0x00, /* ........ */
+ /*0303:*/ 0x80, /* #....... */
+ /*0304:*/ 0x80, /* #....... */
+ /*0305:*/ 0x80, /* #....... */
+ /*0306:*/ 0x80, /* #....... */
+ /*0307:*/ 0x80, /* #....... */
+/* --- new character j (106) starting at offset 0x0308 --- */
+ /*0308:*/ 2, 2, 9, 0, -2, /* width and bbox (w,h,x,y) */
+ /*030d:*/ 0x40, /* .#...... */
+ /*030e:*/ 0x00, /* ........ */
+ /*030f:*/ 0x40, /* .#...... */
+ /*0310:*/ 0x40, /* .#...... */
+ /*0311:*/ 0x40, /* .#...... */
+ /*0312:*/ 0x40, /* .#...... */
+ /*0313:*/ 0x40, /* .#...... */
+ /*0314:*/ 0x40, /* .#...... */
+ /*0315:*/ 0x80, /* #....... */
+/* --- new character k (107) starting at offset 0x0316 --- */
+ /*0316:*/ 4, 3, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*031b:*/ 0x80, /* #....... */
+ /*031c:*/ 0x80, /* #....... */
+ /*031d:*/ 0xa0, /* #.#..... */
+ /*031e:*/ 0xc0, /* ##...... */
+ /*031f:*/ 0xc0, /* ##...... */
+ /*0320:*/ 0xa0, /* #.#..... */
+ /*0321:*/ 0xa0, /* #.#..... */
+/* --- new character l (108) starting at offset 0x0322 --- */
+ /*0322:*/ 2, 1, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0327:*/ 0x80, /* #....... */
+ /*0328:*/ 0x80, /* #....... */
+ /*0329:*/ 0x80, /* #....... */
+ /*032a:*/ 0x80, /* #....... */
+ /*032b:*/ 0x80, /* #....... */
+ /*032c:*/ 0x80, /* #....... */
+ /*032d:*/ 0x80, /* #....... */
+/* --- new character m (109) starting at offset 0x032e --- */
+ /*032e:*/ 6, 5, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0333:*/ 0xf0, /* ####.... */
+ /*0334:*/ 0xa8, /* #.#.#... */
+ /*0335:*/ 0xa8, /* #.#.#... */
+ /*0336:*/ 0xa8, /* #.#.#... */
+ /*0337:*/ 0xa8, /* #.#.#... */
+/* --- new character n (110) starting at offset 0x0338 --- */
+ /*0338:*/ 5, 4, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*033d:*/ 0xe0, /* ###..... */
+ /*033e:*/ 0x90, /* #..#.... */
+ /*033f:*/ 0x90, /* #..#.... */
+ /*0340:*/ 0x90, /* #..#.... */
+ /*0341:*/ 0x90, /* #..#.... */
+/* --- new character o (111) starting at offset 0x0342 --- */
+ /*0342:*/ 5, 4, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0347:*/ 0x60, /* .##..... */
+ /*0348:*/ 0x90, /* #..#.... */
+ /*0349:*/ 0x90, /* #..#.... */
+ /*034a:*/ 0x90, /* #..#.... */
+ /*034b:*/ 0x60, /* .##..... */
+/* --- new character p (112) starting at offset 0x034c --- */
+ /*034c:*/ 5, 4, 6, 1, -1, /* width and bbox (w,h,x,y) */
+ /*0351:*/ 0xe0, /* ###..... */
+ /*0352:*/ 0x90, /* #..#.... */
+ /*0353:*/ 0x90, /* #..#.... */
+ /*0354:*/ 0x90, /* #..#.... */
+ /*0355:*/ 0xe0, /* ###..... */
+ /*0356:*/ 0x80, /* #....... */
+/* --- new character q (113) starting at offset 0x0357 --- */
+ /*0357:*/ 5, 4, 6, 1, -1, /* width and bbox (w,h,x,y) */
+ /*035c:*/ 0x70, /* .###.... */
+ /*035d:*/ 0x90, /* #..#.... */
+ /*035e:*/ 0x90, /* #..#.... */
+ /*035f:*/ 0x90, /* #..#.... */
+ /*0360:*/ 0x70, /* .###.... */
+ /*0361:*/ 0x10, /* ...#.... */
+/* --- new character r (114) starting at offset 0x0362 --- */
+ /*0362:*/ 3, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0367:*/ 0xa0, /* #.#..... */
+ /*0368:*/ 0xc0, /* ##...... */
+ /*0369:*/ 0x80, /* #....... */
+ /*036a:*/ 0x80, /* #....... */
+ /*036b:*/ 0x80, /* #....... */
+/* --- new character s (115) starting at offset 0x036c --- */
+ /*036c:*/ 4, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0371:*/ 0x60, /* .##..... */
+ /*0372:*/ 0x80, /* #....... */
+ /*0373:*/ 0x60, /* .##..... */
+ /*0374:*/ 0x20, /* ..#..... */
+ /*0375:*/ 0xc0, /* ##...... */
+/* --- new character t (116) starting at offset 0x0376 --- */
+ /*0376:*/ 3, 3, 7, 1, 0, /* width and bbox (w,h,x,y) */
+ /*037b:*/ 0x40, /* .#...... */
+ /*037c:*/ 0x40, /* .#...... */
+ /*037d:*/ 0xe0, /* ###..... */
+ /*037e:*/ 0x40, /* .#...... */
+ /*037f:*/ 0x40, /* .#...... */
+ /*0380:*/ 0x40, /* .#...... */
+ /*0381:*/ 0x40, /* .#...... */
+/* --- new character u (117) starting at offset 0x0382 --- */
+ /*0382:*/ 4, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0387:*/ 0xa0, /* #.#..... */
+ /*0388:*/ 0xa0, /* #.#..... */
+ /*0389:*/ 0xa0, /* #.#..... */
+ /*038a:*/ 0xa0, /* #.#..... */
+ /*038b:*/ 0x60, /* .##..... */
+/* --- new character v (118) starting at offset 0x038c --- */
+ /*038c:*/ 5, 4, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0391:*/ 0x90, /* #..#.... */
+ /*0392:*/ 0x90, /* #..#.... */
+ /*0393:*/ 0x90, /* #..#.... */
+ /*0394:*/ 0xa0, /* #.#..... */
+ /*0395:*/ 0x40, /* .#...... */
+/* --- new character w (119) starting at offset 0x0396 --- */
+ /*0396:*/ 6, 5, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*039b:*/ 0xa8, /* #.#.#... */
+ /*039c:*/ 0xa8, /* #.#.#... */
+ /*039d:*/ 0xa8, /* #.#.#... */
+ /*039e:*/ 0x50, /* .#.#.... */
+ /*039f:*/ 0x50, /* .#.#.... */
+/* --- new character x (120) starting at offset 0x03a0 --- */
+ /*03a0:*/ 5, 4, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*03a5:*/ 0x90, /* #..#.... */
+ /*03a6:*/ 0x90, /* #..#.... */
+ /*03a7:*/ 0x60, /* .##..... */
+ /*03a8:*/ 0x90, /* #..#.... */
+ /*03a9:*/ 0x90, /* #..#.... */
+/* --- new character y (121) starting at offset 0x03aa --- */
+ /*03aa:*/ 4, 4, 6, 1, -1, /* width and bbox (w,h,x,y) */
+ /*03af:*/ 0x90, /* #..#.... */
+ /*03b0:*/ 0x90, /* #..#.... */
+ /*03b1:*/ 0x90, /* #..#.... */
+ /*03b2:*/ 0x60, /* .##..... */
+ /*03b3:*/ 0x40, /* .#...... */
+ /*03b4:*/ 0x80, /* #....... */
+/* --- new character z (122) starting at offset 0x03b5 --- */
+ /*03b5:*/ 4, 3, 5, 1, 0, /* width and bbox (w,h,x,y) */
+ /*03ba:*/ 0xe0, /* ###..... */
+ /*03bb:*/ 0x20, /* ..#..... */
+ /*03bc:*/ 0x40, /* .#...... */
+ /*03bd:*/ 0x80, /* #....... */
+ /*03be:*/ 0xe0, /* ###..... */
+/* --- new character braceleft (123) starting at offset 0x03bf --- */
+ /*03bf:*/ 2, 3, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*03c4:*/ 0x20, /* ..#..... */
+ /*03c5:*/ 0x40, /* .#...... */
+ /*03c6:*/ 0x40, /* .#...... */
+ /*03c7:*/ 0xc0, /* ##...... */
+ /*03c8:*/ 0x40, /* .#...... */
+ /*03c9:*/ 0x40, /* .#...... */
+ /*03ca:*/ 0x20, /* ..#..... */
+/* --- new character bar (124) starting at offset 0x03cb --- */
+ /*03cb:*/ 2, 1, 7, 1, -1, /* width and bbox (w,h,x,y) */
+ /*03d0:*/ 0x80, /* #....... */
+ /*03d1:*/ 0x80, /* #....... */
+ /*03d2:*/ 0x80, /* #....... */
+ /*03d3:*/ 0x80, /* #....... */
+ /*03d4:*/ 0x80, /* #....... */
+ /*03d5:*/ 0x80, /* #....... */
+ /*03d6:*/ 0x80, /* #....... */
+/* --- new character braceright (125) starting at offset 0x03d7 --- */
+ /*03d7:*/ 2, 3, 7, 0, -1, /* width and bbox (w,h,x,y) */
+ /*03dc:*/ 0x80, /* #....... */
+ /*03dd:*/ 0x40, /* .#...... */
+ /*03de:*/ 0x40, /* .#...... */
+ /*03df:*/ 0x60, /* .##..... */
+ /*03e0:*/ 0x40, /* .#...... */
+ /*03e1:*/ 0x40, /* .#...... */
+ /*03e2:*/ 0x80, /* #....... */
+/* --- new character asciitilde (126) starting at offset 0x03e3 --- */
+ /*03e3:*/ 6, 5, 2, 1, 2, /* width and bbox (w,h,x,y) */
+ /*03e8:*/ 0x48, /* .#..#... */
+ /*03e9:*/ 0xb0, /* #.##.... */
+};
+static const uint16_t font_helvR08_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0011 /* quotedbl */,
+ 0x0019 /* numbersign */,
+ 0x0023 /* dollar */,
+ 0x002f /* percent */,
+ 0x003a /* ampersand */,
+ 0x0045 /* quotesingle */,
+ 0x004c /* parenleft */,
+ 0x0058 /* parenright */,
+ 0x0064 /* asterisk */,
+ 0x006c /* plus */,
+ 0x0076 /* comma */,
+ 0x007e /* hyphen */,
+ 0x0084 /* period */,
+ 0x008a /* slash */,
+ 0x0096 /* zero */,
+ 0x00a1 /* one */,
+ 0x00ac /* two */,
+ 0x00b7 /* three */,
+ 0x00c2 /* four */,
+ 0x00cd /* five */,
+ 0x00d8 /* six */,
+ 0x00e3 /* seven */,
+ 0x00ee /* eight */,
+ 0x00f9 /* nine */,
+ 0x0104 /* colon */,
+ 0x010d /* semicolon */,
+ 0x0118 /* less */,
+ 0x0122 /* equal */,
+ 0x012a /* greater */,
+ 0x0134 /* question */,
+ 0x013e /* at */,
+ 0x014a /* A */,
+ 0x0155 /* B */,
+ 0x0160 /* C */,
+ 0x016b /* D */,
+ 0x0176 /* E */,
+ 0x0181 /* F */,
+ 0x018c /* G */,
+ 0x0197 /* H */,
+ 0x01a2 /* I */,
+ 0x01ad /* J */,
+ 0x01b8 /* K */,
+ 0x01c3 /* L */,
+ 0x01ce /* M */,
+ 0x01d9 /* N */,
+ 0x01e4 /* O */,
+ 0x01ef /* P */,
+ 0x01fa /* Q */,
+ 0x0207 /* R */,
+ 0x0212 /* S */,
+ 0x021d /* T */,
+ 0x0228 /* U */,
+ 0x0233 /* V */,
+ 0x023e /* W */,
+ 0x0249 /* X */,
+ 0x0254 /* Y */,
+ 0x025f /* Z */,
+ 0x026a /* bracketleft */,
+ 0x0276 /* backslash */,
+ 0x0282 /* bracketright */,
+ 0x028e /* asciicircum */,
+ 0x0296 /* underscore */,
+ 0x029c /* grave */,
+ 0x02a3 /* a */,
+ 0x02ad /* b */,
+ 0x02b9 /* c */,
+ 0x02c3 /* d */,
+ 0x02cf /* e */,
+ 0x02d9 /* f */,
+ 0x02e5 /* g */,
+ 0x02f0 /* h */,
+ 0x02fc /* i */,
+ 0x0308 /* j */,
+ 0x0316 /* k */,
+ 0x0322 /* l */,
+ 0x032e /* m */,
+ 0x0338 /* n */,
+ 0x0342 /* o */,
+ 0x034c /* p */,
+ 0x0357 /* q */,
+ 0x0362 /* r */,
+ 0x036c /* s */,
+ 0x0376 /* t */,
+ 0x0382 /* u */,
+ 0x038c /* v */,
+ 0x0396 /* w */,
+ 0x03a0 /* x */,
+ 0x03aa /* y */,
+ 0x03b5 /* z */,
+ 0x03bf /* braceleft */,
+ 0x03cb /* bar */,
+ 0x03d7 /* braceright */,
+ 0x03e3 /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvR08 = {
+ .height = 10,
+ .ascent = 8,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvR08_data,
+ .charoffs = font_helvR08_offsets,
+};
diff --git a/src/target/firmware/fb/helvR14.c b/src/target/firmware/fb/helvR14.c
new file mode 100644
index 00000000..b0281258
--- /dev/null
+++ b/src/target/firmware/fb/helvR14.c
@@ -0,0 +1,1198 @@
+#include <fb/font.h>
+static const uint8_t font_helvR14_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 4, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 4, 1, 11, 2, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0x80, /* #....... */
+ /*000c:*/ 0x80, /* #....... */
+ /*000d:*/ 0x80, /* #....... */
+ /*000e:*/ 0x80, /* #....... */
+ /*000f:*/ 0x80, /* #....... */
+ /*0010:*/ 0x80, /* #....... */
+ /*0011:*/ 0x80, /* #....... */
+ /*0012:*/ 0x80, /* #....... */
+ /*0013:*/ 0x00, /* ........ */
+ /*0014:*/ 0x80, /* #....... */
+ /*0015:*/ 0x80, /* #....... */
+/* --- new character quotedbl (34) starting at offset 0x0016 --- */
+ /*0016:*/ 5, 3, 3, 1, 8, /* width and bbox (w,h,x,y) */
+ /*001b:*/ 0xa0, /* #.#..... */
+ /*001c:*/ 0xa0, /* #.#..... */
+ /*001d:*/ 0xa0, /* #.#..... */
+/* --- new character numbersign (35) starting at offset 0x001e --- */
+ /*001e:*/ 8, 7, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0023:*/ 0x14, /* ...#.#.. */
+ /*0024:*/ 0x14, /* ...#.#.. */
+ /*0025:*/ 0x14, /* ...#.#.. */
+ /*0026:*/ 0x7e, /* .######. */
+ /*0027:*/ 0x28, /* ..#.#... */
+ /*0028:*/ 0x28, /* ..#.#... */
+ /*0029:*/ 0xfc, /* ######.. */
+ /*002a:*/ 0x50, /* .#.#.... */
+ /*002b:*/ 0x50, /* .#.#.... */
+ /*002c:*/ 0x50, /* .#.#.... */
+/* --- new character dollar (36) starting at offset 0x002d --- */
+ /*002d:*/ 8, 7, 14, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0032:*/ 0x10, /* ...#.... */
+ /*0033:*/ 0x10, /* ...#.... */
+ /*0034:*/ 0x7c, /* .#####.. */
+ /*0035:*/ 0x92, /* #..#..#. */
+ /*0036:*/ 0x92, /* #..#..#. */
+ /*0037:*/ 0x50, /* .#.#.... */
+ /*0038:*/ 0x38, /* ..###... */
+ /*0039:*/ 0x14, /* ...#.#.. */
+ /*003a:*/ 0x12, /* ...#..#. */
+ /*003b:*/ 0x92, /* #..#..#. */
+ /*003c:*/ 0x92, /* #..#..#. */
+ /*003d:*/ 0x7c, /* .#####.. */
+ /*003e:*/ 0x10, /* ...#.... */
+ /*003f:*/ 0x10, /* ...#.... */
+/* --- new character percent (37) starting at offset 0x0040 --- */
+ /*0040:*/ 12, 11, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0045:*/ 0x70,0x80, /* .###....#....... */
+ /*0047:*/ 0x89,0x00, /* #...#..#........ */
+ /*0049:*/ 0x89,0x00, /* #...#..#........ */
+ /*004b:*/ 0x72,0x00, /* .###..#......... */
+ /*004d:*/ 0x02,0x00, /* ......#......... */
+ /*004f:*/ 0x04,0x00, /* .....#.......... */
+ /*0051:*/ 0x09,0xc0, /* ....#..###...... */
+ /*0053:*/ 0x12,0x20, /* ...#..#...#..... */
+ /*0055:*/ 0x12,0x20, /* ...#..#...#..... */
+ /*0057:*/ 0x21,0xc0, /* ..#....###...... */
+/* --- new character ampersand (38) starting at offset 0x0059 --- */
+ /*0059:*/ 10, 8, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*005e:*/ 0x30, /* ..##.... */
+ /*005f:*/ 0x48, /* .#..#... */
+ /*0060:*/ 0x48, /* .#..#... */
+ /*0061:*/ 0x30, /* ..##.... */
+ /*0062:*/ 0x20, /* ..#..... */
+ /*0063:*/ 0x52, /* .#.#..#. */
+ /*0064:*/ 0x8a, /* #...#.#. */
+ /*0065:*/ 0x84, /* #....#.. */
+ /*0066:*/ 0x8a, /* #...#.#. */
+ /*0067:*/ 0x71, /* .###...# */
+/* --- new character quotesingle (39) starting at offset 0x0068 --- */
+ /*0068:*/ 3, 1, 3, 1, 8, /* width and bbox (w,h,x,y) */
+ /*006d:*/ 0x80, /* #....... */
+ /*006e:*/ 0x80, /* #....... */
+ /*006f:*/ 0x80, /* #....... */
+/* --- new character parenleft (40) starting at offset 0x0070 --- */
+ /*0070:*/ 5, 3, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0075:*/ 0x20, /* ..#..... */
+ /*0076:*/ 0x40, /* .#...... */
+ /*0077:*/ 0x40, /* .#...... */
+ /*0078:*/ 0x80, /* #....... */
+ /*0079:*/ 0x80, /* #....... */
+ /*007a:*/ 0x80, /* #....... */
+ /*007b:*/ 0x80, /* #....... */
+ /*007c:*/ 0x80, /* #....... */
+ /*007d:*/ 0x80, /* #....... */
+ /*007e:*/ 0x80, /* #....... */
+ /*007f:*/ 0x80, /* #....... */
+ /*0080:*/ 0x40, /* .#...... */
+ /*0081:*/ 0x40, /* .#...... */
+ /*0082:*/ 0x20, /* ..#..... */
+/* --- new character parenright (41) starting at offset 0x0083 --- */
+ /*0083:*/ 5, 3, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0088:*/ 0x80, /* #....... */
+ /*0089:*/ 0x40, /* .#...... */
+ /*008a:*/ 0x40, /* .#...... */
+ /*008b:*/ 0x20, /* ..#..... */
+ /*008c:*/ 0x20, /* ..#..... */
+ /*008d:*/ 0x20, /* ..#..... */
+ /*008e:*/ 0x20, /* ..#..... */
+ /*008f:*/ 0x20, /* ..#..... */
+ /*0090:*/ 0x20, /* ..#..... */
+ /*0091:*/ 0x20, /* ..#..... */
+ /*0092:*/ 0x20, /* ..#..... */
+ /*0093:*/ 0x40, /* .#...... */
+ /*0094:*/ 0x40, /* .#...... */
+ /*0095:*/ 0x80, /* #....... */
+/* --- new character asterisk (42) starting at offset 0x0096 --- */
+ /*0096:*/ 7, 5, 4, 1, 6, /* width and bbox (w,h,x,y) */
+ /*009b:*/ 0x20, /* ..#..... */
+ /*009c:*/ 0xf8, /* #####... */
+ /*009d:*/ 0x20, /* ..#..... */
+ /*009e:*/ 0x50, /* .#.#.... */
+/* --- new character plus (43) starting at offset 0x009f --- */
+ /*009f:*/ 9, 7, 7, 1, 1, /* width and bbox (w,h,x,y) */
+ /*00a4:*/ 0x10, /* ...#.... */
+ /*00a5:*/ 0x10, /* ...#.... */
+ /*00a6:*/ 0x10, /* ...#.... */
+ /*00a7:*/ 0xfe, /* #######. */
+ /*00a8:*/ 0x10, /* ...#.... */
+ /*00a9:*/ 0x10, /* ...#.... */
+ /*00aa:*/ 0x10, /* ...#.... */
+/* --- new character comma (44) starting at offset 0x00ab --- */
+ /*00ab:*/ 3, 2, 4, 0, -2, /* width and bbox (w,h,x,y) */
+ /*00b0:*/ 0x40, /* .#...... */
+ /*00b1:*/ 0x40, /* .#...... */
+ /*00b2:*/ 0x40, /* .#...... */
+ /*00b3:*/ 0x80, /* #....... */
+/* --- new character hyphen (45) starting at offset 0x00b4 --- */
+ /*00b4:*/ 5, 4, 1, 0, 4, /* width and bbox (w,h,x,y) */
+ /*00b9:*/ 0xf0, /* ####.... */
+/* --- new character period (46) starting at offset 0x00ba --- */
+ /*00ba:*/ 3, 1, 2, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00bf:*/ 0x80, /* #....... */
+ /*00c0:*/ 0x80, /* #....... */
+/* --- new character slash (47) starting at offset 0x00c1 --- */
+ /*00c1:*/ 4, 4, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*00c6:*/ 0x10, /* ...#.... */
+ /*00c7:*/ 0x10, /* ...#.... */
+ /*00c8:*/ 0x20, /* ..#..... */
+ /*00c9:*/ 0x20, /* ..#..... */
+ /*00ca:*/ 0x20, /* ..#..... */
+ /*00cb:*/ 0x40, /* .#...... */
+ /*00cc:*/ 0x40, /* .#...... */
+ /*00cd:*/ 0x40, /* .#...... */
+ /*00ce:*/ 0x80, /* #....... */
+ /*00cf:*/ 0x80, /* #....... */
+ /*00d0:*/ 0x80, /* #....... */
+/* --- new character zero (48) starting at offset 0x00d1 --- */
+ /*00d1:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00d6:*/ 0x78, /* .####... */
+ /*00d7:*/ 0x84, /* #....#.. */
+ /*00d8:*/ 0x84, /* #....#.. */
+ /*00d9:*/ 0x84, /* #....#.. */
+ /*00da:*/ 0x84, /* #....#.. */
+ /*00db:*/ 0x84, /* #....#.. */
+ /*00dc:*/ 0x84, /* #....#.. */
+ /*00dd:*/ 0x84, /* #....#.. */
+ /*00de:*/ 0x84, /* #....#.. */
+ /*00df:*/ 0x78, /* .####... */
+/* --- new character one (49) starting at offset 0x00e0 --- */
+ /*00e0:*/ 8, 3, 10, 2, 0, /* width and bbox (w,h,x,y) */
+ /*00e5:*/ 0x20, /* ..#..... */
+ /*00e6:*/ 0xe0, /* ###..... */
+ /*00e7:*/ 0x20, /* ..#..... */
+ /*00e8:*/ 0x20, /* ..#..... */
+ /*00e9:*/ 0x20, /* ..#..... */
+ /*00ea:*/ 0x20, /* ..#..... */
+ /*00eb:*/ 0x20, /* ..#..... */
+ /*00ec:*/ 0x20, /* ..#..... */
+ /*00ed:*/ 0x20, /* ..#..... */
+ /*00ee:*/ 0x20, /* ..#..... */
+/* --- new character two (50) starting at offset 0x00ef --- */
+ /*00ef:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00f4:*/ 0x78, /* .####... */
+ /*00f5:*/ 0x84, /* #....#.. */
+ /*00f6:*/ 0x84, /* #....#.. */
+ /*00f7:*/ 0x08, /* ....#... */
+ /*00f8:*/ 0x10, /* ...#.... */
+ /*00f9:*/ 0x20, /* ..#..... */
+ /*00fa:*/ 0x40, /* .#...... */
+ /*00fb:*/ 0x80, /* #....... */
+ /*00fc:*/ 0x80, /* #....... */
+ /*00fd:*/ 0xfc, /* ######.. */
+/* --- new character three (51) starting at offset 0x00fe --- */
+ /*00fe:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0103:*/ 0x78, /* .####... */
+ /*0104:*/ 0x84, /* #....#.. */
+ /*0105:*/ 0x84, /* #....#.. */
+ /*0106:*/ 0x04, /* .....#.. */
+ /*0107:*/ 0x38, /* ..###... */
+ /*0108:*/ 0x04, /* .....#.. */
+ /*0109:*/ 0x04, /* .....#.. */
+ /*010a:*/ 0x84, /* #....#.. */
+ /*010b:*/ 0x84, /* #....#.. */
+ /*010c:*/ 0x78, /* .####... */
+/* --- new character four (52) starting at offset 0x010d --- */
+ /*010d:*/ 8, 7, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0112:*/ 0x0c, /* ....##.. */
+ /*0113:*/ 0x14, /* ...#.#.. */
+ /*0114:*/ 0x24, /* ..#..#.. */
+ /*0115:*/ 0x24, /* ..#..#.. */
+ /*0116:*/ 0x44, /* .#...#.. */
+ /*0117:*/ 0x84, /* #....#.. */
+ /*0118:*/ 0xfe, /* #######. */
+ /*0119:*/ 0x04, /* .....#.. */
+ /*011a:*/ 0x04, /* .....#.. */
+ /*011b:*/ 0x04, /* .....#.. */
+/* --- new character five (53) starting at offset 0x011c --- */
+ /*011c:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0121:*/ 0xfc, /* ######.. */
+ /*0122:*/ 0x80, /* #....... */
+ /*0123:*/ 0x80, /* #....... */
+ /*0124:*/ 0x80, /* #....... */
+ /*0125:*/ 0xf8, /* #####... */
+ /*0126:*/ 0x04, /* .....#.. */
+ /*0127:*/ 0x04, /* .....#.. */
+ /*0128:*/ 0x84, /* #....#.. */
+ /*0129:*/ 0x84, /* #....#.. */
+ /*012a:*/ 0x78, /* .####... */
+/* --- new character six (54) starting at offset 0x012b --- */
+ /*012b:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0130:*/ 0x78, /* .####... */
+ /*0131:*/ 0x84, /* #....#.. */
+ /*0132:*/ 0x80, /* #....... */
+ /*0133:*/ 0x80, /* #....... */
+ /*0134:*/ 0xb8, /* #.###... */
+ /*0135:*/ 0xc4, /* ##...#.. */
+ /*0136:*/ 0x84, /* #....#.. */
+ /*0137:*/ 0x84, /* #....#.. */
+ /*0138:*/ 0x84, /* #....#.. */
+ /*0139:*/ 0x78, /* .####... */
+/* --- new character seven (55) starting at offset 0x013a --- */
+ /*013a:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*013f:*/ 0xfc, /* ######.. */
+ /*0140:*/ 0x04, /* .....#.. */
+ /*0141:*/ 0x08, /* ....#... */
+ /*0142:*/ 0x08, /* ....#... */
+ /*0143:*/ 0x10, /* ...#.... */
+ /*0144:*/ 0x10, /* ...#.... */
+ /*0145:*/ 0x20, /* ..#..... */
+ /*0146:*/ 0x20, /* ..#..... */
+ /*0147:*/ 0x40, /* .#...... */
+ /*0148:*/ 0x40, /* .#...... */
+/* --- new character eight (56) starting at offset 0x0149 --- */
+ /*0149:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*014e:*/ 0x78, /* .####... */
+ /*014f:*/ 0x84, /* #....#.. */
+ /*0150:*/ 0x84, /* #....#.. */
+ /*0151:*/ 0x84, /* #....#.. */
+ /*0152:*/ 0x78, /* .####... */
+ /*0153:*/ 0x84, /* #....#.. */
+ /*0154:*/ 0x84, /* #....#.. */
+ /*0155:*/ 0x84, /* #....#.. */
+ /*0156:*/ 0x84, /* #....#.. */
+ /*0157:*/ 0x78, /* .####... */
+/* --- new character nine (57) starting at offset 0x0158 --- */
+ /*0158:*/ 8, 6, 10, 1, 0, /* width and bbox (w,h,x,y) */
+ /*015d:*/ 0x78, /* .####... */
+ /*015e:*/ 0x84, /* #....#.. */
+ /*015f:*/ 0x84, /* #....#.. */
+ /*0160:*/ 0x84, /* #....#.. */
+ /*0161:*/ 0x84, /* #....#.. */
+ /*0162:*/ 0x7c, /* .#####.. */
+ /*0163:*/ 0x04, /* .....#.. */
+ /*0164:*/ 0x84, /* #....#.. */
+ /*0165:*/ 0x84, /* #....#.. */
+ /*0166:*/ 0x78, /* .####... */
+/* --- new character colon (58) starting at offset 0x0167 --- */
+ /*0167:*/ 3, 1, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*016c:*/ 0x80, /* #....... */
+ /*016d:*/ 0x80, /* #....... */
+ /*016e:*/ 0x00, /* ........ */
+ /*016f:*/ 0x00, /* ........ */
+ /*0170:*/ 0x00, /* ........ */
+ /*0171:*/ 0x00, /* ........ */
+ /*0172:*/ 0x80, /* #....... */
+ /*0173:*/ 0x80, /* #....... */
+/* --- new character semicolon (59) starting at offset 0x0174 --- */
+ /*0174:*/ 4, 2, 10, 0, -2, /* width and bbox (w,h,x,y) */
+ /*0179:*/ 0x40, /* .#...... */
+ /*017a:*/ 0x40, /* .#...... */
+ /*017b:*/ 0x00, /* ........ */
+ /*017c:*/ 0x00, /* ........ */
+ /*017d:*/ 0x00, /* ........ */
+ /*017e:*/ 0x00, /* ........ */
+ /*017f:*/ 0x40, /* .#...... */
+ /*0180:*/ 0x40, /* .#...... */
+ /*0181:*/ 0x40, /* .#...... */
+ /*0182:*/ 0x80, /* #....... */
+/* --- new character less (60) starting at offset 0x0183 --- */
+ /*0183:*/ 8, 6, 5, 1, 2, /* width and bbox (w,h,x,y) */
+ /*0188:*/ 0x0c, /* ....##.. */
+ /*0189:*/ 0x30, /* ..##.... */
+ /*018a:*/ 0xc0, /* ##...... */
+ /*018b:*/ 0x30, /* ..##.... */
+ /*018c:*/ 0x0c, /* ....##.. */
+/* --- new character equal (61) starting at offset 0x018d --- */
+ /*018d:*/ 9, 6, 3, 1, 3, /* width and bbox (w,h,x,y) */
+ /*0192:*/ 0xfc, /* ######.. */
+ /*0193:*/ 0x00, /* ........ */
+ /*0194:*/ 0xfc, /* ######.. */
+/* --- new character greater (62) starting at offset 0x0195 --- */
+ /*0195:*/ 8, 6, 5, 1, 2, /* width and bbox (w,h,x,y) */
+ /*019a:*/ 0xc0, /* ##...... */
+ /*019b:*/ 0x30, /* ..##.... */
+ /*019c:*/ 0x0c, /* ....##.. */
+ /*019d:*/ 0x30, /* ..##.... */
+ /*019e:*/ 0xc0, /* ##...... */
+/* --- new character question (63) starting at offset 0x019f --- */
+ /*019f:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01a4:*/ 0x30, /* ..##.... */
+ /*01a5:*/ 0xcc, /* ##..##.. */
+ /*01a6:*/ 0x84, /* #....#.. */
+ /*01a7:*/ 0x84, /* #....#.. */
+ /*01a8:*/ 0x04, /* .....#.. */
+ /*01a9:*/ 0x08, /* ....#... */
+ /*01aa:*/ 0x10, /* ...#.... */
+ /*01ab:*/ 0x20, /* ..#..... */
+ /*01ac:*/ 0x00, /* ........ */
+ /*01ad:*/ 0x20, /* ..#..... */
+ /*01ae:*/ 0x20, /* ..#..... */
+/* --- new character at (64) starting at offset 0x01af --- */
+ /*01af:*/ 13, 11, 12, 1, -1, /* width and bbox (w,h,x,y) */
+ /*01b4:*/ 0x0f,0x00, /* ....####........ */
+ /*01b6:*/ 0x30,0xc0, /* ..##....##...... */
+ /*01b8:*/ 0x40,0x20, /* .#........#..... */
+ /*01ba:*/ 0x46,0xa0, /* .#...##.#.#..... */
+ /*01bc:*/ 0x89,0x20, /* #...#..#..#..... */
+ /*01be:*/ 0x91,0x20, /* #..#...#..#..... */
+ /*01c0:*/ 0x91,0x20, /* #..#...#..#..... */
+ /*01c2:*/ 0x93,0x40, /* #..#..##.#...... */
+ /*01c4:*/ 0x8d,0x80, /* #...##.##....... */
+ /*01c6:*/ 0x40,0x00, /* .#.............. */
+ /*01c8:*/ 0x60,0x80, /* .##.....#....... */
+ /*01ca:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character A (65) starting at offset 0x01cc --- */
+ /*01cc:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01d1:*/ 0x08,0x00, /* ....#........... */
+ /*01d3:*/ 0x08,0x00, /* ....#........... */
+ /*01d5:*/ 0x14,0x00, /* ...#.#.......... */
+ /*01d7:*/ 0x14,0x00, /* ...#.#.......... */
+ /*01d9:*/ 0x22,0x00, /* ..#...#......... */
+ /*01db:*/ 0x22,0x00, /* ..#...#......... */
+ /*01dd:*/ 0x41,0x00, /* .#.....#........ */
+ /*01df:*/ 0x7f,0x00, /* .#######........ */
+ /*01e1:*/ 0x41,0x00, /* .#.....#........ */
+ /*01e3:*/ 0x80,0x80, /* #.......#....... */
+ /*01e5:*/ 0x80,0x80, /* #.......#....... */
+/* --- new character B (66) starting at offset 0x01e7 --- */
+ /*01e7:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01ec:*/ 0xfc, /* ######.. */
+ /*01ed:*/ 0x86, /* #....##. */
+ /*01ee:*/ 0x82, /* #.....#. */
+ /*01ef:*/ 0x82, /* #.....#. */
+ /*01f0:*/ 0x82, /* #.....#. */
+ /*01f1:*/ 0xfc, /* ######.. */
+ /*01f2:*/ 0x82, /* #.....#. */
+ /*01f3:*/ 0x82, /* #.....#. */
+ /*01f4:*/ 0x82, /* #.....#. */
+ /*01f5:*/ 0x82, /* #.....#. */
+ /*01f6:*/ 0xfc, /* ######.. */
+/* --- new character C (67) starting at offset 0x01f7 --- */
+ /*01f7:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01fc:*/ 0x1c, /* ...###.. */
+ /*01fd:*/ 0x63, /* .##...## */
+ /*01fe:*/ 0x41, /* .#.....# */
+ /*01ff:*/ 0x80, /* #....... */
+ /*0200:*/ 0x80, /* #....... */
+ /*0201:*/ 0x80, /* #....... */
+ /*0202:*/ 0x80, /* #....... */
+ /*0203:*/ 0x80, /* #....... */
+ /*0204:*/ 0x41, /* .#.....# */
+ /*0205:*/ 0x63, /* .##...## */
+ /*0206:*/ 0x1c, /* ...###.. */
+/* --- new character D (68) starting at offset 0x0207 --- */
+ /*0207:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*020c:*/ 0xf8, /* #####... */
+ /*020d:*/ 0x86, /* #....##. */
+ /*020e:*/ 0x82, /* #.....#. */
+ /*020f:*/ 0x81, /* #......# */
+ /*0210:*/ 0x81, /* #......# */
+ /*0211:*/ 0x81, /* #......# */
+ /*0212:*/ 0x81, /* #......# */
+ /*0213:*/ 0x81, /* #......# */
+ /*0214:*/ 0x82, /* #.....#. */
+ /*0215:*/ 0x86, /* #....##. */
+ /*0216:*/ 0xf8, /* #####... */
+/* --- new character E (69) starting at offset 0x0217 --- */
+ /*0217:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*021c:*/ 0xfe, /* #######. */
+ /*021d:*/ 0x80, /* #....... */
+ /*021e:*/ 0x80, /* #....... */
+ /*021f:*/ 0x80, /* #....... */
+ /*0220:*/ 0x80, /* #....... */
+ /*0221:*/ 0xfc, /* ######.. */
+ /*0222:*/ 0x80, /* #....... */
+ /*0223:*/ 0x80, /* #....... */
+ /*0224:*/ 0x80, /* #....... */
+ /*0225:*/ 0x80, /* #....... */
+ /*0226:*/ 0xfe, /* #######. */
+/* --- new character F (70) starting at offset 0x0227 --- */
+ /*0227:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*022c:*/ 0xfe, /* #######. */
+ /*022d:*/ 0x80, /* #....... */
+ /*022e:*/ 0x80, /* #....... */
+ /*022f:*/ 0x80, /* #....... */
+ /*0230:*/ 0x80, /* #....... */
+ /*0231:*/ 0xfc, /* ######.. */
+ /*0232:*/ 0x80, /* #....... */
+ /*0233:*/ 0x80, /* #....... */
+ /*0234:*/ 0x80, /* #....... */
+ /*0235:*/ 0x80, /* #....... */
+ /*0236:*/ 0x80, /* #....... */
+/* --- new character G (71) starting at offset 0x0237 --- */
+ /*0237:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*023c:*/ 0x1e,0x00, /* ...####......... */
+ /*023e:*/ 0x61,0x80, /* .##....##....... */
+ /*0240:*/ 0x40,0x80, /* .#......#....... */
+ /*0242:*/ 0x80,0x00, /* #............... */
+ /*0244:*/ 0x80,0x00, /* #............... */
+ /*0246:*/ 0x87,0x80, /* #....####....... */
+ /*0248:*/ 0x80,0x80, /* #.......#....... */
+ /*024a:*/ 0x80,0x80, /* #.......#....... */
+ /*024c:*/ 0x40,0x80, /* .#......#....... */
+ /*024e:*/ 0x63,0x80, /* .##...###....... */
+ /*0250:*/ 0x1c,0x80, /* ...###..#....... */
+/* --- new character H (72) starting at offset 0x0252 --- */
+ /*0252:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0257:*/ 0x81, /* #......# */
+ /*0258:*/ 0x81, /* #......# */
+ /*0259:*/ 0x81, /* #......# */
+ /*025a:*/ 0x81, /* #......# */
+ /*025b:*/ 0x81, /* #......# */
+ /*025c:*/ 0xff, /* ######## */
+ /*025d:*/ 0x81, /* #......# */
+ /*025e:*/ 0x81, /* #......# */
+ /*025f:*/ 0x81, /* #......# */
+ /*0260:*/ 0x81, /* #......# */
+ /*0261:*/ 0x81, /* #......# */
+/* --- new character I (73) starting at offset 0x0262 --- */
+ /*0262:*/ 5, 1, 11, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0267:*/ 0x80, /* #....... */
+ /*0268:*/ 0x80, /* #....... */
+ /*0269:*/ 0x80, /* #....... */
+ /*026a:*/ 0x80, /* #....... */
+ /*026b:*/ 0x80, /* #....... */
+ /*026c:*/ 0x80, /* #....... */
+ /*026d:*/ 0x80, /* #....... */
+ /*026e:*/ 0x80, /* #....... */
+ /*026f:*/ 0x80, /* #....... */
+ /*0270:*/ 0x80, /* #....... */
+ /*0271:*/ 0x80, /* #....... */
+/* --- new character J (74) starting at offset 0x0272 --- */
+ /*0272:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0277:*/ 0x04, /* .....#.. */
+ /*0278:*/ 0x04, /* .....#.. */
+ /*0279:*/ 0x04, /* .....#.. */
+ /*027a:*/ 0x04, /* .....#.. */
+ /*027b:*/ 0x04, /* .....#.. */
+ /*027c:*/ 0x04, /* .....#.. */
+ /*027d:*/ 0x04, /* .....#.. */
+ /*027e:*/ 0x04, /* .....#.. */
+ /*027f:*/ 0x84, /* #....#.. */
+ /*0280:*/ 0x84, /* #....#.. */
+ /*0281:*/ 0x78, /* .####... */
+/* --- new character K (75) starting at offset 0x0282 --- */
+ /*0282:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0287:*/ 0x82, /* #.....#. */
+ /*0288:*/ 0x84, /* #....#.. */
+ /*0289:*/ 0x88, /* #...#... */
+ /*028a:*/ 0x90, /* #..#.... */
+ /*028b:*/ 0xa0, /* #.#..... */
+ /*028c:*/ 0xe0, /* ###..... */
+ /*028d:*/ 0x90, /* #..#.... */
+ /*028e:*/ 0x88, /* #...#... */
+ /*028f:*/ 0x84, /* #....#.. */
+ /*0290:*/ 0x82, /* #.....#. */
+ /*0291:*/ 0x81, /* #......# */
+/* --- new character L (76) starting at offset 0x0292 --- */
+ /*0292:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0297:*/ 0x80, /* #....... */
+ /*0298:*/ 0x80, /* #....... */
+ /*0299:*/ 0x80, /* #....... */
+ /*029a:*/ 0x80, /* #....... */
+ /*029b:*/ 0x80, /* #....... */
+ /*029c:*/ 0x80, /* #....... */
+ /*029d:*/ 0x80, /* #....... */
+ /*029e:*/ 0x80, /* #....... */
+ /*029f:*/ 0x80, /* #....... */
+ /*02a0:*/ 0x80, /* #....... */
+ /*02a1:*/ 0xfc, /* ######.. */
+/* --- new character M (77) starting at offset 0x02a2 --- */
+ /*02a2:*/ 13, 11, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02a7:*/ 0x80,0x20, /* #.........#..... */
+ /*02a9:*/ 0x80,0x20, /* #.........#..... */
+ /*02ab:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02ad:*/ 0xa0,0xa0, /* #.#.....#.#..... */
+ /*02af:*/ 0xa0,0xa0, /* #.#.....#.#..... */
+ /*02b1:*/ 0x91,0x20, /* #..#...#..#..... */
+ /*02b3:*/ 0x91,0x20, /* #..#...#..#..... */
+ /*02b5:*/ 0x8a,0x20, /* #...#.#...#..... */
+ /*02b7:*/ 0x8a,0x20, /* #...#.#...#..... */
+ /*02b9:*/ 0x84,0x20, /* #....#....#..... */
+ /*02bb:*/ 0x84,0x20, /* #....#....#..... */
+/* --- new character N (78) starting at offset 0x02bd --- */
+ /*02bd:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02c2:*/ 0xc1, /* ##.....# */
+ /*02c3:*/ 0xc1, /* ##.....# */
+ /*02c4:*/ 0xa1, /* #.#....# */
+ /*02c5:*/ 0x91, /* #..#...# */
+ /*02c6:*/ 0x91, /* #..#...# */
+ /*02c7:*/ 0x89, /* #...#..# */
+ /*02c8:*/ 0x89, /* #...#..# */
+ /*02c9:*/ 0x85, /* #....#.# */
+ /*02ca:*/ 0x85, /* #....#.# */
+ /*02cb:*/ 0x83, /* #.....## */
+ /*02cc:*/ 0x83, /* #.....## */
+/* --- new character O (79) starting at offset 0x02cd --- */
+ /*02cd:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02d2:*/ 0x1c,0x00, /* ...###.......... */
+ /*02d4:*/ 0x63,0x00, /* .##...##........ */
+ /*02d6:*/ 0x41,0x00, /* .#.....#........ */
+ /*02d8:*/ 0x80,0x80, /* #.......#....... */
+ /*02da:*/ 0x80,0x80, /* #.......#....... */
+ /*02dc:*/ 0x80,0x80, /* #.......#....... */
+ /*02de:*/ 0x80,0x80, /* #.......#....... */
+ /*02e0:*/ 0x80,0x80, /* #.......#....... */
+ /*02e2:*/ 0x41,0x00, /* .#.....#........ */
+ /*02e4:*/ 0x63,0x00, /* .##...##........ */
+ /*02e6:*/ 0x1c,0x00, /* ...###.......... */
+/* --- new character P (80) starting at offset 0x02e8 --- */
+ /*02e8:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02ed:*/ 0xfc, /* ######.. */
+ /*02ee:*/ 0x86, /* #....##. */
+ /*02ef:*/ 0x82, /* #.....#. */
+ /*02f0:*/ 0x82, /* #.....#. */
+ /*02f1:*/ 0x86, /* #....##. */
+ /*02f2:*/ 0xfc, /* ######.. */
+ /*02f3:*/ 0x80, /* #....... */
+ /*02f4:*/ 0x80, /* #....... */
+ /*02f5:*/ 0x80, /* #....... */
+ /*02f6:*/ 0x80, /* #....... */
+ /*02f7:*/ 0x80, /* #....... */
+/* --- new character Q (81) starting at offset 0x02f8 --- */
+ /*02f8:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02fd:*/ 0x1c,0x00, /* ...###.......... */
+ /*02ff:*/ 0x63,0x00, /* .##...##........ */
+ /*0301:*/ 0x41,0x00, /* .#.....#........ */
+ /*0303:*/ 0x80,0x80, /* #.......#....... */
+ /*0305:*/ 0x80,0x80, /* #.......#....... */
+ /*0307:*/ 0x80,0x80, /* #.......#....... */
+ /*0309:*/ 0x88,0x80, /* #...#...#....... */
+ /*030b:*/ 0x84,0x80, /* #....#..#....... */
+ /*030d:*/ 0x43,0x00, /* .#....##........ */
+ /*030f:*/ 0x63,0x00, /* .##...##........ */
+ /*0311:*/ 0x1c,0x80, /* ...###..#....... */
+/* --- new character R (82) starting at offset 0x0313 --- */
+ /*0313:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0318:*/ 0xfc, /* ######.. */
+ /*0319:*/ 0x86, /* #....##. */
+ /*031a:*/ 0x82, /* #.....#. */
+ /*031b:*/ 0x82, /* #.....#. */
+ /*031c:*/ 0x84, /* #....#.. */
+ /*031d:*/ 0xf8, /* #####... */
+ /*031e:*/ 0x84, /* #....#.. */
+ /*031f:*/ 0x82, /* #.....#. */
+ /*0320:*/ 0x82, /* #.....#. */
+ /*0321:*/ 0x82, /* #.....#. */
+ /*0322:*/ 0x82, /* #.....#. */
+/* --- new character S (83) starting at offset 0x0323 --- */
+ /*0323:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0328:*/ 0x38, /* ..###... */
+ /*0329:*/ 0xc6, /* ##...##. */
+ /*032a:*/ 0x82, /* #.....#. */
+ /*032b:*/ 0x80, /* #....... */
+ /*032c:*/ 0x60, /* .##..... */
+ /*032d:*/ 0x18, /* ...##... */
+ /*032e:*/ 0x06, /* .....##. */
+ /*032f:*/ 0x02, /* ......#. */
+ /*0330:*/ 0x82, /* #.....#. */
+ /*0331:*/ 0xc6, /* ##...##. */
+ /*0332:*/ 0x38, /* ..###... */
+/* --- new character T (84) starting at offset 0x0333 --- */
+ /*0333:*/ 9, 9, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0338:*/ 0xff,0x80, /* #########....... */
+ /*033a:*/ 0x08,0x00, /* ....#........... */
+ /*033c:*/ 0x08,0x00, /* ....#........... */
+ /*033e:*/ 0x08,0x00, /* ....#........... */
+ /*0340:*/ 0x08,0x00, /* ....#........... */
+ /*0342:*/ 0x08,0x00, /* ....#........... */
+ /*0344:*/ 0x08,0x00, /* ....#........... */
+ /*0346:*/ 0x08,0x00, /* ....#........... */
+ /*0348:*/ 0x08,0x00, /* ....#........... */
+ /*034a:*/ 0x08,0x00, /* ....#........... */
+ /*034c:*/ 0x08,0x00, /* ....#........... */
+/* --- new character U (85) starting at offset 0x034e --- */
+ /*034e:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0353:*/ 0x81, /* #......# */
+ /*0354:*/ 0x81, /* #......# */
+ /*0355:*/ 0x81, /* #......# */
+ /*0356:*/ 0x81, /* #......# */
+ /*0357:*/ 0x81, /* #......# */
+ /*0358:*/ 0x81, /* #......# */
+ /*0359:*/ 0x81, /* #......# */
+ /*035a:*/ 0x81, /* #......# */
+ /*035b:*/ 0x81, /* #......# */
+ /*035c:*/ 0x42, /* .#....#. */
+ /*035d:*/ 0x3c, /* ..####.. */
+/* --- new character V (86) starting at offset 0x035e --- */
+ /*035e:*/ 11, 9, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0363:*/ 0x80,0x80, /* #.......#....... */
+ /*0365:*/ 0x80,0x80, /* #.......#....... */
+ /*0367:*/ 0x41,0x00, /* .#.....#........ */
+ /*0369:*/ 0x41,0x00, /* .#.....#........ */
+ /*036b:*/ 0x22,0x00, /* ..#...#......... */
+ /*036d:*/ 0x22,0x00, /* ..#...#......... */
+ /*036f:*/ 0x22,0x00, /* ..#...#......... */
+ /*0371:*/ 0x14,0x00, /* ...#.#.......... */
+ /*0373:*/ 0x14,0x00, /* ...#.#.......... */
+ /*0375:*/ 0x08,0x00, /* ....#........... */
+ /*0377:*/ 0x08,0x00, /* ....#........... */
+/* --- new character W (87) starting at offset 0x0379 --- */
+ /*0379:*/ 15, 13, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*037e:*/ 0x82,0x08, /* #.....#.....#... */
+ /*0380:*/ 0x82,0x08, /* #.....#.....#... */
+ /*0382:*/ 0x85,0x08, /* #....#.#....#... */
+ /*0384:*/ 0x45,0x10, /* .#...#.#...#.... */
+ /*0386:*/ 0x45,0x10, /* .#...#.#...#.... */
+ /*0388:*/ 0x45,0x10, /* .#...#.#...#.... */
+ /*038a:*/ 0x28,0xa0, /* ..#.#...#.#..... */
+ /*038c:*/ 0x28,0xa0, /* ..#.#...#.#..... */
+ /*038e:*/ 0x28,0xa0, /* ..#.#...#.#..... */
+ /*0390:*/ 0x10,0x40, /* ...#.....#...... */
+ /*0392:*/ 0x10,0x40, /* ...#.....#...... */
+/* --- new character X (88) starting at offset 0x0394 --- */
+ /*0394:*/ 10, 8, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0399:*/ 0x81, /* #......# */
+ /*039a:*/ 0x81, /* #......# */
+ /*039b:*/ 0x42, /* .#....#. */
+ /*039c:*/ 0x24, /* ..#..#.. */
+ /*039d:*/ 0x18, /* ...##... */
+ /*039e:*/ 0x18, /* ...##... */
+ /*039f:*/ 0x24, /* ..#..#.. */
+ /*03a0:*/ 0x42, /* .#....#. */
+ /*03a1:*/ 0x42, /* .#....#. */
+ /*03a2:*/ 0x81, /* #......# */
+ /*03a3:*/ 0x81, /* #......# */
+/* --- new character Y (89) starting at offset 0x03a4 --- */
+ /*03a4:*/ 9, 9, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03a9:*/ 0x80,0x80, /* #.......#....... */
+ /*03ab:*/ 0x41,0x00, /* .#.....#........ */
+ /*03ad:*/ 0x41,0x00, /* .#.....#........ */
+ /*03af:*/ 0x22,0x00, /* ..#...#......... */
+ /*03b1:*/ 0x22,0x00, /* ..#...#......... */
+ /*03b3:*/ 0x14,0x00, /* ...#.#.......... */
+ /*03b5:*/ 0x08,0x00, /* ....#........... */
+ /*03b7:*/ 0x08,0x00, /* ....#........... */
+ /*03b9:*/ 0x08,0x00, /* ....#........... */
+ /*03bb:*/ 0x08,0x00, /* ....#........... */
+ /*03bd:*/ 0x08,0x00, /* ....#........... */
+/* --- new character Z (90) starting at offset 0x03bf --- */
+ /*03bf:*/ 9, 7, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*03c4:*/ 0xfe, /* #######. */
+ /*03c5:*/ 0x02, /* ......#. */
+ /*03c6:*/ 0x04, /* .....#.. */
+ /*03c7:*/ 0x08, /* ....#... */
+ /*03c8:*/ 0x18, /* ...##... */
+ /*03c9:*/ 0x10, /* ...#.... */
+ /*03ca:*/ 0x20, /* ..#..... */
+ /*03cb:*/ 0x60, /* .##..... */
+ /*03cc:*/ 0x40, /* .#...... */
+ /*03cd:*/ 0x80, /* #....... */
+ /*03ce:*/ 0xfe, /* #######. */
+/* --- new character bracketleft (91) starting at offset 0x03cf --- */
+ /*03cf:*/ 4, 3, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*03d4:*/ 0xe0, /* ###..... */
+ /*03d5:*/ 0x80, /* #....... */
+ /*03d6:*/ 0x80, /* #....... */
+ /*03d7:*/ 0x80, /* #....... */
+ /*03d8:*/ 0x80, /* #....... */
+ /*03d9:*/ 0x80, /* #....... */
+ /*03da:*/ 0x80, /* #....... */
+ /*03db:*/ 0x80, /* #....... */
+ /*03dc:*/ 0x80, /* #....... */
+ /*03dd:*/ 0x80, /* #....... */
+ /*03de:*/ 0x80, /* #....... */
+ /*03df:*/ 0x80, /* #....... */
+ /*03e0:*/ 0x80, /* #....... */
+ /*03e1:*/ 0xe0, /* ###..... */
+/* --- new character backslash (92) starting at offset 0x03e2 --- */
+ /*03e2:*/ 4, 4, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*03e7:*/ 0x80, /* #....... */
+ /*03e8:*/ 0x80, /* #....... */
+ /*03e9:*/ 0x40, /* .#...... */
+ /*03ea:*/ 0x40, /* .#...... */
+ /*03eb:*/ 0x40, /* .#...... */
+ /*03ec:*/ 0x20, /* ..#..... */
+ /*03ed:*/ 0x20, /* ..#..... */
+ /*03ee:*/ 0x20, /* ..#..... */
+ /*03ef:*/ 0x10, /* ...#.... */
+ /*03f0:*/ 0x10, /* ...#.... */
+ /*03f1:*/ 0x10, /* ...#.... */
+/* --- new character bracketright (93) starting at offset 0x03f2 --- */
+ /*03f2:*/ 4, 3, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*03f7:*/ 0xe0, /* ###..... */
+ /*03f8:*/ 0x20, /* ..#..... */
+ /*03f9:*/ 0x20, /* ..#..... */
+ /*03fa:*/ 0x20, /* ..#..... */
+ /*03fb:*/ 0x20, /* ..#..... */
+ /*03fc:*/ 0x20, /* ..#..... */
+ /*03fd:*/ 0x20, /* ..#..... */
+ /*03fe:*/ 0x20, /* ..#..... */
+ /*03ff:*/ 0x20, /* ..#..... */
+ /*0400:*/ 0x20, /* ..#..... */
+ /*0401:*/ 0x20, /* ..#..... */
+ /*0402:*/ 0x20, /* ..#..... */
+ /*0403:*/ 0x20, /* ..#..... */
+ /*0404:*/ 0xe0, /* ###..... */
+/* --- new character asciicircum (94) starting at offset 0x0405 --- */
+ /*0405:*/ 7, 7, 4, 0, 6, /* width and bbox (w,h,x,y) */
+ /*040a:*/ 0x10, /* ...#.... */
+ /*040b:*/ 0x28, /* ..#.#... */
+ /*040c:*/ 0x44, /* .#...#.. */
+ /*040d:*/ 0x82, /* #.....#. */
+/* --- new character underscore (95) starting at offset 0x040e --- */
+ /*040e:*/ 8, 8, 1, 0, -3, /* width and bbox (w,h,x,y) */
+ /*0413:*/ 0xff, /* ######## */
+/* --- new character grave (96) starting at offset 0x0414 --- */
+ /*0414:*/ 5, 2, 2, 1, 9, /* width and bbox (w,h,x,y) */
+ /*0419:*/ 0x80, /* #....... */
+ /*041a:*/ 0x40, /* .#...... */
+/* --- new character a (97) starting at offset 0x041b --- */
+ /*041b:*/ 8, 7, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0420:*/ 0x78, /* .####... */
+ /*0421:*/ 0xcc, /* ##..##.. */
+ /*0422:*/ 0x04, /* .....#.. */
+ /*0423:*/ 0x7c, /* .#####.. */
+ /*0424:*/ 0xc4, /* ##...#.. */
+ /*0425:*/ 0x84, /* #....#.. */
+ /*0426:*/ 0xcc, /* ##..##.. */
+ /*0427:*/ 0x76, /* .###.##. */
+/* --- new character b (98) starting at offset 0x0428 --- */
+ /*0428:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*042d:*/ 0x80, /* #....... */
+ /*042e:*/ 0x80, /* #....... */
+ /*042f:*/ 0x80, /* #....... */
+ /*0430:*/ 0xb8, /* #.###... */
+ /*0431:*/ 0xcc, /* ##..##.. */
+ /*0432:*/ 0x84, /* #....#.. */
+ /*0433:*/ 0x84, /* #....#.. */
+ /*0434:*/ 0x84, /* #....#.. */
+ /*0435:*/ 0x84, /* #....#.. */
+ /*0436:*/ 0xcc, /* ##..##.. */
+ /*0437:*/ 0xb8, /* #.###... */
+/* --- new character c (99) starting at offset 0x0438 --- */
+ /*0438:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*043d:*/ 0x78, /* .####... */
+ /*043e:*/ 0xcc, /* ##..##.. */
+ /*043f:*/ 0x80, /* #....... */
+ /*0440:*/ 0x80, /* #....... */
+ /*0441:*/ 0x80, /* #....... */
+ /*0442:*/ 0x84, /* #....#.. */
+ /*0443:*/ 0xcc, /* ##..##.. */
+ /*0444:*/ 0x78, /* .####... */
+/* --- new character d (100) starting at offset 0x0445 --- */
+ /*0445:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*044a:*/ 0x04, /* .....#.. */
+ /*044b:*/ 0x04, /* .....#.. */
+ /*044c:*/ 0x04, /* .....#.. */
+ /*044d:*/ 0x74, /* .###.#.. */
+ /*044e:*/ 0xcc, /* ##..##.. */
+ /*044f:*/ 0x84, /* #....#.. */
+ /*0450:*/ 0x84, /* #....#.. */
+ /*0451:*/ 0x84, /* #....#.. */
+ /*0452:*/ 0x84, /* #....#.. */
+ /*0453:*/ 0xcc, /* ##..##.. */
+ /*0454:*/ 0x74, /* .###.#.. */
+/* --- new character e (101) starting at offset 0x0455 --- */
+ /*0455:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*045a:*/ 0x78, /* .####... */
+ /*045b:*/ 0xcc, /* ##..##.. */
+ /*045c:*/ 0x84, /* #....#.. */
+ /*045d:*/ 0xfc, /* ######.. */
+ /*045e:*/ 0x80, /* #....... */
+ /*045f:*/ 0x80, /* #....... */
+ /*0460:*/ 0xcc, /* ##..##.. */
+ /*0461:*/ 0x78, /* .####... */
+/* --- new character f (102) starting at offset 0x0462 --- */
+ /*0462:*/ 3, 4, 11, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0467:*/ 0x30, /* ..##.... */
+ /*0468:*/ 0x40, /* .#...... */
+ /*0469:*/ 0x40, /* .#...... */
+ /*046a:*/ 0xe0, /* ###..... */
+ /*046b:*/ 0x40, /* .#...... */
+ /*046c:*/ 0x40, /* .#...... */
+ /*046d:*/ 0x40, /* .#...... */
+ /*046e:*/ 0x40, /* .#...... */
+ /*046f:*/ 0x40, /* .#...... */
+ /*0470:*/ 0x40, /* .#...... */
+ /*0471:*/ 0x40, /* .#...... */
+/* --- new character g (103) starting at offset 0x0472 --- */
+ /*0472:*/ 8, 6, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0477:*/ 0x74, /* .###.#.. */
+ /*0478:*/ 0xcc, /* ##..##.. */
+ /*0479:*/ 0x84, /* #....#.. */
+ /*047a:*/ 0x84, /* #....#.. */
+ /*047b:*/ 0x84, /* #....#.. */
+ /*047c:*/ 0x84, /* #....#.. */
+ /*047d:*/ 0xcc, /* ##..##.. */
+ /*047e:*/ 0x74, /* .###.#.. */
+ /*047f:*/ 0x04, /* .....#.. */
+ /*0480:*/ 0xcc, /* ##..##.. */
+ /*0481:*/ 0x78, /* .####... */
+/* --- new character h (104) starting at offset 0x0482 --- */
+ /*0482:*/ 8, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0487:*/ 0x80, /* #....... */
+ /*0488:*/ 0x80, /* #....... */
+ /*0489:*/ 0x80, /* #....... */
+ /*048a:*/ 0xb8, /* #.###... */
+ /*048b:*/ 0xcc, /* ##..##.. */
+ /*048c:*/ 0x84, /* #....#.. */
+ /*048d:*/ 0x84, /* #....#.. */
+ /*048e:*/ 0x84, /* #....#.. */
+ /*048f:*/ 0x84, /* #....#.. */
+ /*0490:*/ 0x84, /* #....#.. */
+ /*0491:*/ 0x84, /* #....#.. */
+/* --- new character i (105) starting at offset 0x0492 --- */
+ /*0492:*/ 3, 1, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0497:*/ 0x80, /* #....... */
+ /*0498:*/ 0x80, /* #....... */
+ /*0499:*/ 0x00, /* ........ */
+ /*049a:*/ 0x80, /* #....... */
+ /*049b:*/ 0x80, /* #....... */
+ /*049c:*/ 0x80, /* #....... */
+ /*049d:*/ 0x80, /* #....... */
+ /*049e:*/ 0x80, /* #....... */
+ /*049f:*/ 0x80, /* #....... */
+ /*04a0:*/ 0x80, /* #....... */
+ /*04a1:*/ 0x80, /* #....... */
+/* --- new character j (106) starting at offset 0x04a2 --- */
+ /*04a2:*/ 3, 3, 14, -1, -3, /* width and bbox (w,h,x,y) */
+ /*04a7:*/ 0x20, /* ..#..... */
+ /*04a8:*/ 0x20, /* ..#..... */
+ /*04a9:*/ 0x00, /* ........ */
+ /*04aa:*/ 0x20, /* ..#..... */
+ /*04ab:*/ 0x20, /* ..#..... */
+ /*04ac:*/ 0x20, /* ..#..... */
+ /*04ad:*/ 0x20, /* ..#..... */
+ /*04ae:*/ 0x20, /* ..#..... */
+ /*04af:*/ 0x20, /* ..#..... */
+ /*04b0:*/ 0x20, /* ..#..... */
+ /*04b1:*/ 0x20, /* ..#..... */
+ /*04b2:*/ 0x20, /* ..#..... */
+ /*04b3:*/ 0x20, /* ..#..... */
+ /*04b4:*/ 0xc0, /* ##...... */
+/* --- new character k (107) starting at offset 0x04b5 --- */
+ /*04b5:*/ 7, 6, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04ba:*/ 0x80, /* #....... */
+ /*04bb:*/ 0x80, /* #....... */
+ /*04bc:*/ 0x80, /* #....... */
+ /*04bd:*/ 0x88, /* #...#... */
+ /*04be:*/ 0x90, /* #..#.... */
+ /*04bf:*/ 0xa0, /* #.#..... */
+ /*04c0:*/ 0xc0, /* ##...... */
+ /*04c1:*/ 0xa0, /* #.#..... */
+ /*04c2:*/ 0x90, /* #..#.... */
+ /*04c3:*/ 0x88, /* #...#... */
+ /*04c4:*/ 0x84, /* #....#.. */
+/* --- new character l (108) starting at offset 0x04c5 --- */
+ /*04c5:*/ 3, 1, 11, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04ca:*/ 0x80, /* #....... */
+ /*04cb:*/ 0x80, /* #....... */
+ /*04cc:*/ 0x80, /* #....... */
+ /*04cd:*/ 0x80, /* #....... */
+ /*04ce:*/ 0x80, /* #....... */
+ /*04cf:*/ 0x80, /* #....... */
+ /*04d0:*/ 0x80, /* #....... */
+ /*04d1:*/ 0x80, /* #....... */
+ /*04d2:*/ 0x80, /* #....... */
+ /*04d3:*/ 0x80, /* #....... */
+ /*04d4:*/ 0x80, /* #....... */
+/* --- new character m (109) starting at offset 0x04d5 --- */
+ /*04d5:*/ 11, 9, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04da:*/ 0xb3,0x00, /* #.##..##........ */
+ /*04dc:*/ 0xcc,0x80, /* ##..##..#....... */
+ /*04de:*/ 0x88,0x80, /* #...#...#....... */
+ /*04e0:*/ 0x88,0x80, /* #...#...#....... */
+ /*04e2:*/ 0x88,0x80, /* #...#...#....... */
+ /*04e4:*/ 0x88,0x80, /* #...#...#....... */
+ /*04e6:*/ 0x88,0x80, /* #...#...#....... */
+ /*04e8:*/ 0x88,0x80, /* #...#...#....... */
+/* --- new character n (110) starting at offset 0x04ea --- */
+ /*04ea:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04ef:*/ 0xb8, /* #.###... */
+ /*04f0:*/ 0xcc, /* ##..##.. */
+ /*04f1:*/ 0x84, /* #....#.. */
+ /*04f2:*/ 0x84, /* #....#.. */
+ /*04f3:*/ 0x84, /* #....#.. */
+ /*04f4:*/ 0x84, /* #....#.. */
+ /*04f5:*/ 0x84, /* #....#.. */
+ /*04f6:*/ 0x84, /* #....#.. */
+/* --- new character o (111) starting at offset 0x04f7 --- */
+ /*04f7:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04fc:*/ 0x78, /* .####... */
+ /*04fd:*/ 0xcc, /* ##..##.. */
+ /*04fe:*/ 0x84, /* #....#.. */
+ /*04ff:*/ 0x84, /* #....#.. */
+ /*0500:*/ 0x84, /* #....#.. */
+ /*0501:*/ 0x84, /* #....#.. */
+ /*0502:*/ 0xcc, /* ##..##.. */
+ /*0503:*/ 0x78, /* .####... */
+/* --- new character p (112) starting at offset 0x0504 --- */
+ /*0504:*/ 8, 6, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0509:*/ 0xb8, /* #.###... */
+ /*050a:*/ 0xcc, /* ##..##.. */
+ /*050b:*/ 0x84, /* #....#.. */
+ /*050c:*/ 0x84, /* #....#.. */
+ /*050d:*/ 0x84, /* #....#.. */
+ /*050e:*/ 0x84, /* #....#.. */
+ /*050f:*/ 0xcc, /* ##..##.. */
+ /*0510:*/ 0xb8, /* #.###... */
+ /*0511:*/ 0x80, /* #....... */
+ /*0512:*/ 0x80, /* #....... */
+ /*0513:*/ 0x80, /* #....... */
+/* --- new character q (113) starting at offset 0x0514 --- */
+ /*0514:*/ 8, 6, 11, 1, -3, /* width and bbox (w,h,x,y) */
+ /*0519:*/ 0x74, /* .###.#.. */
+ /*051a:*/ 0xcc, /* ##..##.. */
+ /*051b:*/ 0x84, /* #....#.. */
+ /*051c:*/ 0x84, /* #....#.. */
+ /*051d:*/ 0x84, /* #....#.. */
+ /*051e:*/ 0x84, /* #....#.. */
+ /*051f:*/ 0xcc, /* ##..##.. */
+ /*0520:*/ 0x74, /* .###.#.. */
+ /*0521:*/ 0x04, /* .....#.. */
+ /*0522:*/ 0x04, /* .....#.. */
+ /*0523:*/ 0x04, /* .....#.. */
+/* --- new character r (114) starting at offset 0x0524 --- */
+ /*0524:*/ 5, 4, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0529:*/ 0xb0, /* #.##.... */
+ /*052a:*/ 0xc0, /* ##...... */
+ /*052b:*/ 0x80, /* #....... */
+ /*052c:*/ 0x80, /* #....... */
+ /*052d:*/ 0x80, /* #....... */
+ /*052e:*/ 0x80, /* #....... */
+ /*052f:*/ 0x80, /* #....... */
+ /*0530:*/ 0x80, /* #....... */
+/* --- new character s (115) starting at offset 0x0531 --- */
+ /*0531:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0536:*/ 0x78, /* .####... */
+ /*0537:*/ 0x84, /* #....#.. */
+ /*0538:*/ 0x80, /* #....... */
+ /*0539:*/ 0x78, /* .####... */
+ /*053a:*/ 0x0c, /* ....##.. */
+ /*053b:*/ 0x04, /* .....#.. */
+ /*053c:*/ 0x84, /* #....#.. */
+ /*053d:*/ 0x78, /* .####... */
+/* --- new character t (116) starting at offset 0x053e --- */
+ /*053e:*/ 4, 4, 10, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0543:*/ 0x40, /* .#...... */
+ /*0544:*/ 0x40, /* .#...... */
+ /*0545:*/ 0xf0, /* ####.... */
+ /*0546:*/ 0x40, /* .#...... */
+ /*0547:*/ 0x40, /* .#...... */
+ /*0548:*/ 0x40, /* .#...... */
+ /*0549:*/ 0x40, /* .#...... */
+ /*054a:*/ 0x40, /* .#...... */
+ /*054b:*/ 0x40, /* .#...... */
+ /*054c:*/ 0x30, /* ..##.... */
+/* --- new character u (117) starting at offset 0x054d --- */
+ /*054d:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0552:*/ 0x84, /* #....#.. */
+ /*0553:*/ 0x84, /* #....#.. */
+ /*0554:*/ 0x84, /* #....#.. */
+ /*0555:*/ 0x84, /* #....#.. */
+ /*0556:*/ 0x84, /* #....#.. */
+ /*0557:*/ 0x84, /* #....#.. */
+ /*0558:*/ 0xcc, /* ##..##.. */
+ /*0559:*/ 0x74, /* .###.#.. */
+/* --- new character v (118) starting at offset 0x055a --- */
+ /*055a:*/ 8, 6, 8, 1, 0, /* width and bbox (w,h,x,y) */
+ /*055f:*/ 0x84, /* #....#.. */
+ /*0560:*/ 0x84, /* #....#.. */
+ /*0561:*/ 0x84, /* #....#.. */
+ /*0562:*/ 0x48, /* .#..#... */
+ /*0563:*/ 0x48, /* .#..#... */
+ /*0564:*/ 0x48, /* .#..#... */
+ /*0565:*/ 0x30, /* ..##.... */
+ /*0566:*/ 0x30, /* ..##.... */
+/* --- new character w (119) starting at offset 0x0567 --- */
+ /*0567:*/ 10, 9, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*056c:*/ 0x88,0x80, /* #...#...#....... */
+ /*056e:*/ 0x88,0x80, /* #...#...#....... */
+ /*0570:*/ 0x88,0x80, /* #...#...#....... */
+ /*0572:*/ 0x49,0x00, /* .#..#..#........ */
+ /*0574:*/ 0x49,0x00, /* .#..#..#........ */
+ /*0576:*/ 0x55,0x00, /* .#.#.#.#........ */
+ /*0578:*/ 0x22,0x00, /* ..#...#......... */
+ /*057a:*/ 0x22,0x00, /* ..#...#......... */
+/* --- new character x (120) starting at offset 0x057c --- */
+ /*057c:*/ 7, 7, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0581:*/ 0xc6, /* ##...##. */
+ /*0582:*/ 0x44, /* .#...#.. */
+ /*0583:*/ 0x28, /* ..#.#... */
+ /*0584:*/ 0x10, /* ...#.... */
+ /*0585:*/ 0x10, /* ...#.... */
+ /*0586:*/ 0x28, /* ..#.#... */
+ /*0587:*/ 0x44, /* .#...#.. */
+ /*0588:*/ 0xc6, /* ##...##. */
+/* --- new character y (121) starting at offset 0x0589 --- */
+ /*0589:*/ 7, 7, 11, 0, -3, /* width and bbox (w,h,x,y) */
+ /*058e:*/ 0x82, /* #.....#. */
+ /*058f:*/ 0x82, /* #.....#. */
+ /*0590:*/ 0x44, /* .#...#.. */
+ /*0591:*/ 0x44, /* .#...#.. */
+ /*0592:*/ 0x24, /* ..#..#.. */
+ /*0593:*/ 0x28, /* ..#.#... */
+ /*0594:*/ 0x18, /* ...##... */
+ /*0595:*/ 0x10, /* ...#.... */
+ /*0596:*/ 0x10, /* ...#.... */
+ /*0597:*/ 0x30, /* ..##.... */
+ /*0598:*/ 0x60, /* .##..... */
+/* --- new character z (122) starting at offset 0x0599 --- */
+ /*0599:*/ 7, 6, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*059e:*/ 0xfc, /* ######.. */
+ /*059f:*/ 0x04, /* .....#.. */
+ /*05a0:*/ 0x08, /* ....#... */
+ /*05a1:*/ 0x10, /* ...#.... */
+ /*05a2:*/ 0x20, /* ..#..... */
+ /*05a3:*/ 0x40, /* .#...... */
+ /*05a4:*/ 0x80, /* #....... */
+ /*05a5:*/ 0xfc, /* ######.. */
+/* --- new character braceleft (123) starting at offset 0x05a6 --- */
+ /*05a6:*/ 5, 5, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*05ab:*/ 0x18, /* ...##... */
+ /*05ac:*/ 0x20, /* ..#..... */
+ /*05ad:*/ 0x20, /* ..#..... */
+ /*05ae:*/ 0x20, /* ..#..... */
+ /*05af:*/ 0x20, /* ..#..... */
+ /*05b0:*/ 0x40, /* .#...... */
+ /*05b1:*/ 0x80, /* #....... */
+ /*05b2:*/ 0x40, /* .#...... */
+ /*05b3:*/ 0x20, /* ..#..... */
+ /*05b4:*/ 0x20, /* ..#..... */
+ /*05b5:*/ 0x20, /* ..#..... */
+ /*05b6:*/ 0x20, /* ..#..... */
+ /*05b7:*/ 0x20, /* ..#..... */
+ /*05b8:*/ 0x18, /* ...##... */
+/* --- new character bar (124) starting at offset 0x05b9 --- */
+ /*05b9:*/ 3, 1, 14, 1, -3, /* width and bbox (w,h,x,y) */
+ /*05be:*/ 0x80, /* #....... */
+ /*05bf:*/ 0x80, /* #....... */
+ /*05c0:*/ 0x80, /* #....... */
+ /*05c1:*/ 0x80, /* #....... */
+ /*05c2:*/ 0x80, /* #....... */
+ /*05c3:*/ 0x80, /* #....... */
+ /*05c4:*/ 0x80, /* #....... */
+ /*05c5:*/ 0x80, /* #....... */
+ /*05c6:*/ 0x80, /* #....... */
+ /*05c7:*/ 0x80, /* #....... */
+ /*05c8:*/ 0x80, /* #....... */
+ /*05c9:*/ 0x80, /* #....... */
+ /*05ca:*/ 0x80, /* #....... */
+ /*05cb:*/ 0x80, /* #....... */
+/* --- new character braceright (125) starting at offset 0x05cc --- */
+ /*05cc:*/ 5, 5, 14, 0, -3, /* width and bbox (w,h,x,y) */
+ /*05d1:*/ 0xc0, /* ##...... */
+ /*05d2:*/ 0x20, /* ..#..... */
+ /*05d3:*/ 0x20, /* ..#..... */
+ /*05d4:*/ 0x20, /* ..#..... */
+ /*05d5:*/ 0x20, /* ..#..... */
+ /*05d6:*/ 0x10, /* ...#.... */
+ /*05d7:*/ 0x08, /* ....#... */
+ /*05d8:*/ 0x10, /* ...#.... */
+ /*05d9:*/ 0x20, /* ..#..... */
+ /*05da:*/ 0x20, /* ..#..... */
+ /*05db:*/ 0x20, /* ..#..... */
+ /*05dc:*/ 0x20, /* ..#..... */
+ /*05dd:*/ 0x20, /* ..#..... */
+ /*05de:*/ 0xc0, /* ##...... */
+/* --- new character asciitilde (126) starting at offset 0x05df --- */
+ /*05df:*/ 8, 6, 3, 1, 3, /* width and bbox (w,h,x,y) */
+ /*05e4:*/ 0x64, /* .##..#.. */
+ /*05e5:*/ 0xb4, /* #.##.#.. */
+ /*05e6:*/ 0x98, /* #..##... */
+};
+static const uint16_t font_helvR14_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x0016 /* quotedbl */,
+ 0x001e /* numbersign */,
+ 0x002d /* dollar */,
+ 0x0040 /* percent */,
+ 0x0059 /* ampersand */,
+ 0x0068 /* quotesingle */,
+ 0x0070 /* parenleft */,
+ 0x0083 /* parenright */,
+ 0x0096 /* asterisk */,
+ 0x009f /* plus */,
+ 0x00ab /* comma */,
+ 0x00b4 /* hyphen */,
+ 0x00ba /* period */,
+ 0x00c1 /* slash */,
+ 0x00d1 /* zero */,
+ 0x00e0 /* one */,
+ 0x00ef /* two */,
+ 0x00fe /* three */,
+ 0x010d /* four */,
+ 0x011c /* five */,
+ 0x012b /* six */,
+ 0x013a /* seven */,
+ 0x0149 /* eight */,
+ 0x0158 /* nine */,
+ 0x0167 /* colon */,
+ 0x0174 /* semicolon */,
+ 0x0183 /* less */,
+ 0x018d /* equal */,
+ 0x0195 /* greater */,
+ 0x019f /* question */,
+ 0x01af /* at */,
+ 0x01cc /* A */,
+ 0x01e7 /* B */,
+ 0x01f7 /* C */,
+ 0x0207 /* D */,
+ 0x0217 /* E */,
+ 0x0227 /* F */,
+ 0x0237 /* G */,
+ 0x0252 /* H */,
+ 0x0262 /* I */,
+ 0x0272 /* J */,
+ 0x0282 /* K */,
+ 0x0292 /* L */,
+ 0x02a2 /* M */,
+ 0x02bd /* N */,
+ 0x02cd /* O */,
+ 0x02e8 /* P */,
+ 0x02f8 /* Q */,
+ 0x0313 /* R */,
+ 0x0323 /* S */,
+ 0x0333 /* T */,
+ 0x034e /* U */,
+ 0x035e /* V */,
+ 0x0379 /* W */,
+ 0x0394 /* X */,
+ 0x03a4 /* Y */,
+ 0x03bf /* Z */,
+ 0x03cf /* bracketleft */,
+ 0x03e2 /* backslash */,
+ 0x03f2 /* bracketright */,
+ 0x0405 /* asciicircum */,
+ 0x040e /* underscore */,
+ 0x0414 /* grave */,
+ 0x041b /* a */,
+ 0x0428 /* b */,
+ 0x0438 /* c */,
+ 0x0445 /* d */,
+ 0x0455 /* e */,
+ 0x0462 /* f */,
+ 0x0472 /* g */,
+ 0x0482 /* h */,
+ 0x0492 /* i */,
+ 0x04a2 /* j */,
+ 0x04b5 /* k */,
+ 0x04c5 /* l */,
+ 0x04d5 /* m */,
+ 0x04ea /* n */,
+ 0x04f7 /* o */,
+ 0x0504 /* p */,
+ 0x0514 /* q */,
+ 0x0524 /* r */,
+ 0x0531 /* s */,
+ 0x053e /* t */,
+ 0x054d /* u */,
+ 0x055a /* v */,
+ 0x0567 /* w */,
+ 0x057c /* x */,
+ 0x0589 /* y */,
+ 0x0599 /* z */,
+ 0x05a6 /* braceleft */,
+ 0x05b9 /* bar */,
+ 0x05cc /* braceright */,
+ 0x05df /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvR14 = {
+ .height = 16,
+ .ascent = 13,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvR14_data,
+ .charoffs = font_helvR14_offsets,
+};
diff --git a/src/target/firmware/fb/helvR24.c b/src/target/firmware/fb/helvR24.c
new file mode 100644
index 00000000..18ff0c40
--- /dev/null
+++ b/src/target/firmware/fb/helvR24.c
@@ -0,0 +1,1870 @@
+#include <fb/font.h>
+static const uint8_t font_helvR24_data[] = {
+/* --- new character space (32) starting at offset 0x0000 --- */
+ /*0000:*/ 6, 1, 1, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x00, /* ........ */
+/* --- new character exclam (33) starting at offset 0x0006 --- */
+ /*0006:*/ 6, 2, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*000b:*/ 0xc0, /* ##...... */
+ /*000c:*/ 0xc0, /* ##...... */
+ /*000d:*/ 0xc0, /* ##...... */
+ /*000e:*/ 0xc0, /* ##...... */
+ /*000f:*/ 0xc0, /* ##...... */
+ /*0010:*/ 0xc0, /* ##...... */
+ /*0011:*/ 0xc0, /* ##...... */
+ /*0012:*/ 0xc0, /* ##...... */
+ /*0013:*/ 0xc0, /* ##...... */
+ /*0014:*/ 0xc0, /* ##...... */
+ /*0015:*/ 0xc0, /* ##...... */
+ /*0016:*/ 0xc0, /* ##...... */
+ /*0017:*/ 0x80, /* #....... */
+ /*0018:*/ 0x80, /* #....... */
+ /*0019:*/ 0x00, /* ........ */
+ /*001a:*/ 0x00, /* ........ */
+ /*001b:*/ 0xc0, /* ##...... */
+ /*001c:*/ 0xc0, /* ##...... */
+ /*001d:*/ 0xc0, /* ##...... */
+/* --- new character quotedbl (34) starting at offset 0x001e --- */
+ /*001e:*/ 8, 6, 6, 1, 13, /* width and bbox (w,h,x,y) */
+ /*0023:*/ 0xcc, /* ##..##.. */
+ /*0024:*/ 0xcc, /* ##..##.. */
+ /*0025:*/ 0xcc, /* ##..##.. */
+ /*0026:*/ 0xcc, /* ##..##.. */
+ /*0027:*/ 0xcc, /* ##..##.. */
+ /*0028:*/ 0x44, /* .#...#.. */
+/* --- new character numbersign (35) starting at offset 0x0029 --- */
+ /*0029:*/ 14, 11, 17, 2, 0, /* width and bbox (w,h,x,y) */
+ /*002e:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0030:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0032:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0034:*/ 0x19,0x80, /* ...##..##....... */
+ /*0036:*/ 0xff,0xe0, /* ###########..... */
+ /*0038:*/ 0xff,0xe0, /* ###########..... */
+ /*003a:*/ 0x19,0x80, /* ...##..##....... */
+ /*003c:*/ 0x19,0x80, /* ...##..##....... */
+ /*003e:*/ 0x33,0x00, /* ..##..##........ */
+ /*0040:*/ 0x33,0x00, /* ..##..##........ */
+ /*0042:*/ 0xff,0xe0, /* ###########..... */
+ /*0044:*/ 0xff,0xe0, /* ###########..... */
+ /*0046:*/ 0x33,0x00, /* ..##..##........ */
+ /*0048:*/ 0x33,0x00, /* ..##..##........ */
+ /*004a:*/ 0x66,0x00, /* .##..##......... */
+ /*004c:*/ 0x66,0x00, /* .##..##......... */
+ /*004e:*/ 0x66,0x00, /* .##..##......... */
+/* --- new character dollar (36) starting at offset 0x0050 --- */
+ /*0050:*/ 13, 11, 21, 1, -2, /* width and bbox (w,h,x,y) */
+ /*0055:*/ 0x06,0x00, /* .....##......... */
+ /*0057:*/ 0x06,0x00, /* .....##......... */
+ /*0059:*/ 0x3f,0x80, /* ..#######....... */
+ /*005b:*/ 0x7f,0xc0, /* .#########...... */
+ /*005d:*/ 0xe6,0xe0, /* ###..##.###..... */
+ /*005f:*/ 0xc6,0x60, /* ##...##..##..... */
+ /*0061:*/ 0xc6,0x00, /* ##...##......... */
+ /*0063:*/ 0xe6,0x00, /* ###..##......... */
+ /*0065:*/ 0x76,0x00, /* .###.##......... */
+ /*0067:*/ 0x3e,0x00, /* ..#####......... */
+ /*0069:*/ 0x0f,0x80, /* ....#####....... */
+ /*006b:*/ 0x07,0xc0, /* .....#####...... */
+ /*006d:*/ 0x06,0xe0, /* .....##.###..... */
+ /*006f:*/ 0x06,0x60, /* .....##..##..... */
+ /*0071:*/ 0xc6,0x60, /* ##...##..##..... */
+ /*0073:*/ 0xc6,0x60, /* ##...##..##..... */
+ /*0075:*/ 0xe6,0xe0, /* ###..##.###..... */
+ /*0077:*/ 0x7f,0xc0, /* .#########...... */
+ /*0079:*/ 0x3f,0x80, /* ..#######....... */
+ /*007b:*/ 0x06,0x00, /* .....##......... */
+ /*007d:*/ 0x06,0x00, /* .....##......... */
+/* --- new character percent (37) starting at offset 0x007f --- */
+ /*007f:*/ 22, 19, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0084:*/ 0x00,0x06,0x00, /* .............##......... */
+ /*0087:*/ 0x3c,0x0c,0x00, /* ..####......##.......... */
+ /*008a:*/ 0x7e,0x0c,0x00, /* .######.....##.......... */
+ /*008d:*/ 0xc3,0x18,0x00, /* ##....##...##........... */
+ /*0090:*/ 0xc3,0x18,0x00, /* ##....##...##........... */
+ /*0093:*/ 0xc3,0x30,0x00, /* ##....##..##............ */
+ /*0096:*/ 0xc3,0x30,0x00, /* ##....##..##............ */
+ /*0099:*/ 0x7e,0x60,0x00, /* .######..##............. */
+ /*009c:*/ 0x3c,0x60,0x00, /* ..####...##............. */
+ /*009f:*/ 0x00,0xc0,0x00, /* ........##.............. */
+ /*00a2:*/ 0x00,0xc7,0x80, /* ........##...####....... */
+ /*00a5:*/ 0x01,0x8f,0xc0, /* .......##...######...... */
+ /*00a8:*/ 0x01,0x98,0x60, /* .......##..##....##..... */
+ /*00ab:*/ 0x03,0x18,0x60, /* ......##...##....##..... */
+ /*00ae:*/ 0x03,0x18,0x60, /* ......##...##....##..... */
+ /*00b1:*/ 0x06,0x18,0x60, /* .....##....##....##..... */
+ /*00b4:*/ 0x06,0x0f,0xc0, /* .....##.....######...... */
+ /*00b7:*/ 0x04,0x07,0x80, /* .....#.......####....... */
+/* --- new character ampersand (38) starting at offset 0x00ba --- */
+ /*00ba:*/ 17, 14, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*00bf:*/ 0x0f,0x00, /* ....####........ */
+ /*00c1:*/ 0x1f,0x80, /* ...######....... */
+ /*00c3:*/ 0x39,0xc0, /* ..###..###...... */
+ /*00c5:*/ 0x30,0xc0, /* ..##....##...... */
+ /*00c7:*/ 0x30,0xc0, /* ..##....##...... */
+ /*00c9:*/ 0x30,0xc0, /* ..##....##...... */
+ /*00cb:*/ 0x19,0x80, /* ...##..##....... */
+ /*00cd:*/ 0x0f,0x00, /* ....####........ */
+ /*00cf:*/ 0x1e,0x00, /* ...####......... */
+ /*00d1:*/ 0x3f,0x18, /* ..######...##... */
+ /*00d3:*/ 0x73,0x98, /* .###..###..##... */
+ /*00d5:*/ 0x61,0xd8, /* .##....###.##... */
+ /*00d7:*/ 0xc0,0xf0, /* ##......####.... */
+ /*00d9:*/ 0xc0,0x60, /* ##.......##..... */
+ /*00db:*/ 0xc0,0xf0, /* ##......####.... */
+ /*00dd:*/ 0xe1,0xd8, /* ###....###.##... */
+ /*00df:*/ 0x7f,0x9c, /* .########..###.. */
+ /*00e1:*/ 0x1e,0x00, /* ...####......... */
+/* --- new character quotesingle (39) starting at offset 0x00e3 --- */
+ /*00e3:*/ 6, 2, 6, 2, 13, /* width and bbox (w,h,x,y) */
+ /*00e8:*/ 0xc0, /* ##...... */
+ /*00e9:*/ 0xc0, /* ##...... */
+ /*00ea:*/ 0xc0, /* ##...... */
+ /*00eb:*/ 0xc0, /* ##...... */
+ /*00ec:*/ 0xc0, /* ##...... */
+ /*00ed:*/ 0x40, /* .#...... */
+/* --- new character parenleft (40) starting at offset 0x00ee --- */
+ /*00ee:*/ 8, 5, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*00f3:*/ 0x18, /* ...##... */
+ /*00f4:*/ 0x18, /* ...##... */
+ /*00f5:*/ 0x30, /* ..##.... */
+ /*00f6:*/ 0x30, /* ..##.... */
+ /*00f7:*/ 0x60, /* .##..... */
+ /*00f8:*/ 0x60, /* .##..... */
+ /*00f9:*/ 0x60, /* .##..... */
+ /*00fa:*/ 0xc0, /* ##...... */
+ /*00fb:*/ 0xc0, /* ##...... */
+ /*00fc:*/ 0xc0, /* ##...... */
+ /*00fd:*/ 0xc0, /* ##...... */
+ /*00fe:*/ 0xc0, /* ##...... */
+ /*00ff:*/ 0xc0, /* ##...... */
+ /*0100:*/ 0xc0, /* ##...... */
+ /*0101:*/ 0xc0, /* ##...... */
+ /*0102:*/ 0xc0, /* ##...... */
+ /*0103:*/ 0xc0, /* ##...... */
+ /*0104:*/ 0x60, /* .##..... */
+ /*0105:*/ 0x60, /* .##..... */
+ /*0106:*/ 0x60, /* .##..... */
+ /*0107:*/ 0x30, /* ..##.... */
+ /*0108:*/ 0x30, /* ..##.... */
+ /*0109:*/ 0x18, /* ...##... */
+ /*010a:*/ 0x18, /* ...##... */
+/* --- new character parenright (41) starting at offset 0x010b --- */
+ /*010b:*/ 8, 5, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0110:*/ 0xc0, /* ##...... */
+ /*0111:*/ 0xc0, /* ##...... */
+ /*0112:*/ 0x60, /* .##..... */
+ /*0113:*/ 0x60, /* .##..... */
+ /*0114:*/ 0x30, /* ..##.... */
+ /*0115:*/ 0x30, /* ..##.... */
+ /*0116:*/ 0x30, /* ..##.... */
+ /*0117:*/ 0x18, /* ...##... */
+ /*0118:*/ 0x18, /* ...##... */
+ /*0119:*/ 0x18, /* ...##... */
+ /*011a:*/ 0x18, /* ...##... */
+ /*011b:*/ 0x18, /* ...##... */
+ /*011c:*/ 0x18, /* ...##... */
+ /*011d:*/ 0x18, /* ...##... */
+ /*011e:*/ 0x18, /* ...##... */
+ /*011f:*/ 0x18, /* ...##... */
+ /*0120:*/ 0x18, /* ...##... */
+ /*0121:*/ 0x30, /* ..##.... */
+ /*0122:*/ 0x30, /* ..##.... */
+ /*0123:*/ 0x30, /* ..##.... */
+ /*0124:*/ 0x60, /* .##..... */
+ /*0125:*/ 0x60, /* .##..... */
+ /*0126:*/ 0xc0, /* ##...... */
+ /*0127:*/ 0xc0, /* ##...... */
+/* --- new character asterisk (42) starting at offset 0x0128 --- */
+ /*0128:*/ 10, 7, 7, 1, 12, /* width and bbox (w,h,x,y) */
+ /*012d:*/ 0x10, /* ...#.... */
+ /*012e:*/ 0x10, /* ...#.... */
+ /*012f:*/ 0xd6, /* ##.#.##. */
+ /*0130:*/ 0x7c, /* .#####.. */
+ /*0131:*/ 0x38, /* ..###... */
+ /*0132:*/ 0x6c, /* .##.##.. */
+ /*0133:*/ 0x44, /* .#...#.. */
+/* --- new character plus (43) starting at offset 0x0134 --- */
+ /*0134:*/ 14, 12, 12, 1, 1, /* width and bbox (w,h,x,y) */
+ /*0139:*/ 0x06,0x00, /* .....##......... */
+ /*013b:*/ 0x06,0x00, /* .....##......... */
+ /*013d:*/ 0x06,0x00, /* .....##......... */
+ /*013f:*/ 0x06,0x00, /* .....##......... */
+ /*0141:*/ 0x06,0x00, /* .....##......... */
+ /*0143:*/ 0xff,0xf0, /* ############.... */
+ /*0145:*/ 0xff,0xf0, /* ############.... */
+ /*0147:*/ 0x06,0x00, /* .....##......... */
+ /*0149:*/ 0x06,0x00, /* .....##......... */
+ /*014b:*/ 0x06,0x00, /* .....##......... */
+ /*014d:*/ 0x06,0x00, /* .....##......... */
+ /*014f:*/ 0x06,0x00, /* .....##......... */
+/* --- new character comma (44) starting at offset 0x0151 --- */
+ /*0151:*/ 6, 2, 6, 2, -3, /* width and bbox (w,h,x,y) */
+ /*0156:*/ 0xc0, /* ##...... */
+ /*0157:*/ 0xc0, /* ##...... */
+ /*0158:*/ 0xc0, /* ##...... */
+ /*0159:*/ 0x40, /* .#...... */
+ /*015a:*/ 0x40, /* .#...... */
+ /*015b:*/ 0x80, /* #....... */
+/* --- new character hyphen (45) starting at offset 0x015c --- */
+ /*015c:*/ 8, 6, 2, 1, 6, /* width and bbox (w,h,x,y) */
+ /*0161:*/ 0xfc, /* ######.. */
+ /*0162:*/ 0xfc, /* ######.. */
+/* --- new character period (46) starting at offset 0x0163 --- */
+ /*0163:*/ 6, 2, 3, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0168:*/ 0xc0, /* ##...... */
+ /*0169:*/ 0xc0, /* ##...... */
+ /*016a:*/ 0xc0, /* ##...... */
+/* --- new character slash (47) starting at offset 0x016b --- */
+ /*016b:*/ 7, 7, 19, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0170:*/ 0x06, /* .....##. */
+ /*0171:*/ 0x06, /* .....##. */
+ /*0172:*/ 0x06, /* .....##. */
+ /*0173:*/ 0x0c, /* ....##.. */
+ /*0174:*/ 0x0c, /* ....##.. */
+ /*0175:*/ 0x0c, /* ....##.. */
+ /*0176:*/ 0x18, /* ...##... */
+ /*0177:*/ 0x18, /* ...##... */
+ /*0178:*/ 0x18, /* ...##... */
+ /*0179:*/ 0x18, /* ...##... */
+ /*017a:*/ 0x30, /* ..##.... */
+ /*017b:*/ 0x30, /* ..##.... */
+ /*017c:*/ 0x30, /* ..##.... */
+ /*017d:*/ 0x60, /* .##..... */
+ /*017e:*/ 0x60, /* .##..... */
+ /*017f:*/ 0x60, /* .##..... */
+ /*0180:*/ 0xc0, /* ##...... */
+ /*0181:*/ 0xc0, /* ##...... */
+ /*0182:*/ 0xc0, /* ##...... */
+/* --- new character zero (48) starting at offset 0x0183 --- */
+ /*0183:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0188:*/ 0x1f,0x00, /* ...#####........ */
+ /*018a:*/ 0x3f,0x80, /* ..#######....... */
+ /*018c:*/ 0x71,0xc0, /* .###...###...... */
+ /*018e:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0190:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0192:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0194:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0196:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0198:*/ 0xc0,0x60, /* ##.......##..... */
+ /*019a:*/ 0xc0,0x60, /* ##.......##..... */
+ /*019c:*/ 0xc0,0x60, /* ##.......##..... */
+ /*019e:*/ 0xc0,0x60, /* ##.......##..... */
+ /*01a0:*/ 0xc0,0x60, /* ##.......##..... */
+ /*01a2:*/ 0x60,0xc0, /* .##.....##...... */
+ /*01a4:*/ 0x60,0xc0, /* .##.....##...... */
+ /*01a6:*/ 0x71,0xc0, /* .###...###...... */
+ /*01a8:*/ 0x3f,0x80, /* ..#######....... */
+ /*01aa:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character one (49) starting at offset 0x01ac --- */
+ /*01ac:*/ 13, 6, 18, 2, 0, /* width and bbox (w,h,x,y) */
+ /*01b1:*/ 0x0c, /* ....##.. */
+ /*01b2:*/ 0x0c, /* ....##.. */
+ /*01b3:*/ 0x1c, /* ...###.. */
+ /*01b4:*/ 0xfc, /* ######.. */
+ /*01b5:*/ 0xfc, /* ######.. */
+ /*01b6:*/ 0x0c, /* ....##.. */
+ /*01b7:*/ 0x0c, /* ....##.. */
+ /*01b8:*/ 0x0c, /* ....##.. */
+ /*01b9:*/ 0x0c, /* ....##.. */
+ /*01ba:*/ 0x0c, /* ....##.. */
+ /*01bb:*/ 0x0c, /* ....##.. */
+ /*01bc:*/ 0x0c, /* ....##.. */
+ /*01bd:*/ 0x0c, /* ....##.. */
+ /*01be:*/ 0x0c, /* ....##.. */
+ /*01bf:*/ 0x0c, /* ....##.. */
+ /*01c0:*/ 0x0c, /* ....##.. */
+ /*01c1:*/ 0x0c, /* ....##.. */
+ /*01c2:*/ 0x0c, /* ....##.. */
+/* --- new character two (50) starting at offset 0x01c3 --- */
+ /*01c3:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01c8:*/ 0x1e,0x00, /* ...####......... */
+ /*01ca:*/ 0x7f,0x80, /* .########....... */
+ /*01cc:*/ 0x61,0xc0, /* .##....###...... */
+ /*01ce:*/ 0xc0,0xc0, /* ##......##...... */
+ /*01d0:*/ 0xc0,0x60, /* ##.......##..... */
+ /*01d2:*/ 0xc0,0x60, /* ##.......##..... */
+ /*01d4:*/ 0x00,0x60, /* .........##..... */
+ /*01d6:*/ 0x00,0xc0, /* ........##...... */
+ /*01d8:*/ 0x01,0xc0, /* .......###...... */
+ /*01da:*/ 0x03,0x80, /* ......###....... */
+ /*01dc:*/ 0x0f,0x00, /* ....####........ */
+ /*01de:*/ 0x1c,0x00, /* ...###.......... */
+ /*01e0:*/ 0x38,0x00, /* ..###........... */
+ /*01e2:*/ 0x70,0x00, /* .###............ */
+ /*01e4:*/ 0xe0,0x00, /* ###............. */
+ /*01e6:*/ 0xc0,0x00, /* ##.............. */
+ /*01e8:*/ 0xff,0xe0, /* ###########..... */
+ /*01ea:*/ 0xff,0xe0, /* ###########..... */
+/* --- new character three (51) starting at offset 0x01ec --- */
+ /*01ec:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*01f1:*/ 0x1f,0x00, /* ...#####........ */
+ /*01f3:*/ 0x7f,0x80, /* .########....... */
+ /*01f5:*/ 0x61,0x80, /* .##....##....... */
+ /*01f7:*/ 0xc0,0xc0, /* ##......##...... */
+ /*01f9:*/ 0xc0,0xc0, /* ##......##...... */
+ /*01fb:*/ 0xc0,0xc0, /* ##......##...... */
+ /*01fd:*/ 0x00,0xc0, /* ........##...... */
+ /*01ff:*/ 0x01,0x80, /* .......##....... */
+ /*0201:*/ 0x0f,0x00, /* ....####........ */
+ /*0203:*/ 0x0f,0xc0, /* ....######...... */
+ /*0205:*/ 0x00,0xc0, /* ........##...... */
+ /*0207:*/ 0x00,0x60, /* .........##..... */
+ /*0209:*/ 0x00,0x60, /* .........##..... */
+ /*020b:*/ 0xc0,0x60, /* ##.......##..... */
+ /*020d:*/ 0xc0,0xc0, /* ##......##...... */
+ /*020f:*/ 0x61,0xc0, /* .##....###...... */
+ /*0211:*/ 0x7f,0x80, /* .########....... */
+ /*0213:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character four (52) starting at offset 0x0215 --- */
+ /*0215:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*021a:*/ 0x01,0x80, /* .......##....... */
+ /*021c:*/ 0x03,0x80, /* ......###....... */
+ /*021e:*/ 0x03,0x80, /* ......###....... */
+ /*0220:*/ 0x07,0x80, /* .....####....... */
+ /*0222:*/ 0x0f,0x80, /* ....#####....... */
+ /*0224:*/ 0x0d,0x80, /* ....##.##....... */
+ /*0226:*/ 0x19,0x80, /* ...##..##....... */
+ /*0228:*/ 0x39,0x80, /* ..###..##....... */
+ /*022a:*/ 0x31,0x80, /* ..##...##....... */
+ /*022c:*/ 0x61,0x80, /* .##....##....... */
+ /*022e:*/ 0xe1,0x80, /* ###....##....... */
+ /*0230:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0232:*/ 0xff,0xe0, /* ###########..... */
+ /*0234:*/ 0xff,0xe0, /* ###########..... */
+ /*0236:*/ 0x01,0x80, /* .......##....... */
+ /*0238:*/ 0x01,0x80, /* .......##....... */
+ /*023a:*/ 0x01,0x80, /* .......##....... */
+ /*023c:*/ 0x01,0x80, /* .......##....... */
+/* --- new character five (53) starting at offset 0x023e --- */
+ /*023e:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0243:*/ 0x7f,0xc0, /* .#########...... */
+ /*0245:*/ 0x7f,0xc0, /* .#########...... */
+ /*0247:*/ 0x60,0x00, /* .##............. */
+ /*0249:*/ 0x60,0x00, /* .##............. */
+ /*024b:*/ 0x60,0x00, /* .##............. */
+ /*024d:*/ 0x60,0x00, /* .##............. */
+ /*024f:*/ 0x6e,0x00, /* .##.###......... */
+ /*0251:*/ 0x7f,0x80, /* .########....... */
+ /*0253:*/ 0x71,0xc0, /* .###...###...... */
+ /*0255:*/ 0x00,0xc0, /* ........##...... */
+ /*0257:*/ 0x00,0x60, /* .........##..... */
+ /*0259:*/ 0x00,0x60, /* .........##..... */
+ /*025b:*/ 0x00,0x60, /* .........##..... */
+ /*025d:*/ 0xc0,0x60, /* ##.......##..... */
+ /*025f:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0261:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0263:*/ 0x7f,0x80, /* .########....... */
+ /*0265:*/ 0x1e,0x00, /* ...####......... */
+/* --- new character six (54) starting at offset 0x0267 --- */
+ /*0267:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*026c:*/ 0x0f,0x00, /* ....####........ */
+ /*026e:*/ 0x3f,0xc0, /* ..########...... */
+ /*0270:*/ 0x70,0xc0, /* .###....##...... */
+ /*0272:*/ 0x60,0x60, /* .##......##..... */
+ /*0274:*/ 0xe0,0x60, /* ###......##..... */
+ /*0276:*/ 0xc0,0x00, /* ##.............. */
+ /*0278:*/ 0xc0,0x00, /* ##.............. */
+ /*027a:*/ 0xcf,0x00, /* ##..####........ */
+ /*027c:*/ 0xdf,0x80, /* ##.######....... */
+ /*027e:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0280:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0282:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0284:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0286:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0288:*/ 0xe0,0x60, /* ###......##..... */
+ /*028a:*/ 0x60,0xc0, /* .##.....##...... */
+ /*028c:*/ 0x7f,0xc0, /* .#########...... */
+ /*028e:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character seven (55) starting at offset 0x0290 --- */
+ /*0290:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0295:*/ 0xff,0xe0, /* ###########..... */
+ /*0297:*/ 0xff,0xe0, /* ###########..... */
+ /*0299:*/ 0x00,0xe0, /* ........###..... */
+ /*029b:*/ 0x00,0xc0, /* ........##...... */
+ /*029d:*/ 0x01,0x80, /* .......##....... */
+ /*029f:*/ 0x01,0x80, /* .......##....... */
+ /*02a1:*/ 0x03,0x00, /* ......##........ */
+ /*02a3:*/ 0x03,0x00, /* ......##........ */
+ /*02a5:*/ 0x06,0x00, /* .....##......... */
+ /*02a7:*/ 0x06,0x00, /* .....##......... */
+ /*02a9:*/ 0x0c,0x00, /* ....##.......... */
+ /*02ab:*/ 0x0c,0x00, /* ....##.......... */
+ /*02ad:*/ 0x1c,0x00, /* ...###.......... */
+ /*02af:*/ 0x18,0x00, /* ...##........... */
+ /*02b1:*/ 0x18,0x00, /* ...##........... */
+ /*02b3:*/ 0x38,0x00, /* ..###........... */
+ /*02b5:*/ 0x30,0x00, /* ..##............ */
+ /*02b7:*/ 0x30,0x00, /* ..##............ */
+/* --- new character eight (56) starting at offset 0x02b9 --- */
+ /*02b9:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02be:*/ 0x0e,0x00, /* ....###......... */
+ /*02c0:*/ 0x3f,0x80, /* ..#######....... */
+ /*02c2:*/ 0x31,0x80, /* ..##...##....... */
+ /*02c4:*/ 0x60,0xc0, /* .##.....##...... */
+ /*02c6:*/ 0x60,0xc0, /* .##.....##...... */
+ /*02c8:*/ 0x60,0xc0, /* .##.....##...... */
+ /*02ca:*/ 0x60,0xc0, /* .##.....##...... */
+ /*02cc:*/ 0x31,0x80, /* ..##...##....... */
+ /*02ce:*/ 0x1f,0x00, /* ...#####........ */
+ /*02d0:*/ 0x3f,0x80, /* ..#######....... */
+ /*02d2:*/ 0x60,0xc0, /* .##.....##...... */
+ /*02d4:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*02d6:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02d8:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02da:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02dc:*/ 0x71,0xc0, /* .###...###...... */
+ /*02de:*/ 0x7f,0xc0, /* .#########...... */
+ /*02e0:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character nine (57) starting at offset 0x02e2 --- */
+ /*02e2:*/ 13, 11, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*02e7:*/ 0x1f,0x00, /* ...#####........ */
+ /*02e9:*/ 0x7f,0xc0, /* .#########...... */
+ /*02eb:*/ 0x71,0xc0, /* .###...###...... */
+ /*02ed:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*02ef:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02f1:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02f3:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02f5:*/ 0xc0,0x60, /* ##.......##..... */
+ /*02f7:*/ 0xe0,0xe0, /* ###.....###..... */
+ /*02f9:*/ 0x71,0xe0, /* .###...####..... */
+ /*02fb:*/ 0x7f,0x60, /* .#######.##..... */
+ /*02fd:*/ 0x1e,0x60, /* ...####..##..... */
+ /*02ff:*/ 0x00,0x60, /* .........##..... */
+ /*0301:*/ 0x00,0xe0, /* ........###..... */
+ /*0303:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0305:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0307:*/ 0x7f,0x80, /* .########....... */
+ /*0309:*/ 0x1e,0x00, /* ...####......... */
+/* --- new character colon (58) starting at offset 0x030b --- */
+ /*030b:*/ 6, 2, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0310:*/ 0xc0, /* ##...... */
+ /*0311:*/ 0xc0, /* ##...... */
+ /*0312:*/ 0xc0, /* ##...... */
+ /*0313:*/ 0x00, /* ........ */
+ /*0314:*/ 0x00, /* ........ */
+ /*0315:*/ 0x00, /* ........ */
+ /*0316:*/ 0x00, /* ........ */
+ /*0317:*/ 0x00, /* ........ */
+ /*0318:*/ 0x00, /* ........ */
+ /*0319:*/ 0x00, /* ........ */
+ /*031a:*/ 0x00, /* ........ */
+ /*031b:*/ 0xc0, /* ##...... */
+ /*031c:*/ 0xc0, /* ##...... */
+ /*031d:*/ 0xc0, /* ##...... */
+/* --- new character semicolon (59) starting at offset 0x031e --- */
+ /*031e:*/ 6, 2, 17, 2, -3, /* width and bbox (w,h,x,y) */
+ /*0323:*/ 0xc0, /* ##...... */
+ /*0324:*/ 0xc0, /* ##...... */
+ /*0325:*/ 0xc0, /* ##...... */
+ /*0326:*/ 0x00, /* ........ */
+ /*0327:*/ 0x00, /* ........ */
+ /*0328:*/ 0x00, /* ........ */
+ /*0329:*/ 0x00, /* ........ */
+ /*032a:*/ 0x00, /* ........ */
+ /*032b:*/ 0x00, /* ........ */
+ /*032c:*/ 0x00, /* ........ */
+ /*032d:*/ 0x00, /* ........ */
+ /*032e:*/ 0xc0, /* ##...... */
+ /*032f:*/ 0xc0, /* ##...... */
+ /*0330:*/ 0xc0, /* ##...... */
+ /*0331:*/ 0x40, /* .#...... */
+ /*0332:*/ 0x40, /* .#...... */
+ /*0333:*/ 0x80, /* #....... */
+/* --- new character less (60) starting at offset 0x0334 --- */
+ /*0334:*/ 15, 12, 12, 1, 1, /* width and bbox (w,h,x,y) */
+ /*0339:*/ 0x00,0x30, /* ..........##.... */
+ /*033b:*/ 0x00,0xf0, /* ........####.... */
+ /*033d:*/ 0x03,0xc0, /* ......####...... */
+ /*033f:*/ 0x0f,0x00, /* ....####........ */
+ /*0341:*/ 0x3c,0x00, /* ..####.......... */
+ /*0343:*/ 0xe0,0x00, /* ###............. */
+ /*0345:*/ 0xe0,0x00, /* ###............. */
+ /*0347:*/ 0x3c,0x00, /* ..####.......... */
+ /*0349:*/ 0x0f,0x00, /* ....####........ */
+ /*034b:*/ 0x03,0xc0, /* ......####...... */
+ /*034d:*/ 0x00,0xf0, /* ........####.... */
+ /*034f:*/ 0x00,0x30, /* ..........##.... */
+/* --- new character equal (61) starting at offset 0x0351 --- */
+ /*0351:*/ 15, 10, 6, 2, 5, /* width and bbox (w,h,x,y) */
+ /*0356:*/ 0xff,0xc0, /* ##########...... */
+ /*0358:*/ 0xff,0xc0, /* ##########...... */
+ /*035a:*/ 0x00,0x00, /* ................ */
+ /*035c:*/ 0x00,0x00, /* ................ */
+ /*035e:*/ 0xff,0xc0, /* ##########...... */
+ /*0360:*/ 0xff,0xc0, /* ##########...... */
+/* --- new character greater (62) starting at offset 0x0362 --- */
+ /*0362:*/ 15, 12, 12, 1, 1, /* width and bbox (w,h,x,y) */
+ /*0367:*/ 0xc0,0x00, /* ##.............. */
+ /*0369:*/ 0xf0,0x00, /* ####............ */
+ /*036b:*/ 0x3c,0x00, /* ..####.......... */
+ /*036d:*/ 0x0f,0x00, /* ....####........ */
+ /*036f:*/ 0x03,0xc0, /* ......####...... */
+ /*0371:*/ 0x00,0x70, /* .........###.... */
+ /*0373:*/ 0x00,0x70, /* .........###.... */
+ /*0375:*/ 0x03,0xc0, /* ......####...... */
+ /*0377:*/ 0x0f,0x00, /* ....####........ */
+ /*0379:*/ 0x3c,0x00, /* ..####.......... */
+ /*037b:*/ 0xf0,0x00, /* ####............ */
+ /*037d:*/ 0xc0,0x00, /* ##.............. */
+/* --- new character question (63) starting at offset 0x037f --- */
+ /*037f:*/ 12, 10, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0384:*/ 0x1f,0x00, /* ...#####........ */
+ /*0386:*/ 0x7f,0x80, /* .########....... */
+ /*0388:*/ 0x71,0xc0, /* .###...###...... */
+ /*038a:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*038c:*/ 0xc0,0xc0, /* ##......##...... */
+ /*038e:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*0390:*/ 0x01,0x80, /* .......##....... */
+ /*0392:*/ 0x03,0x80, /* ......###....... */
+ /*0394:*/ 0x07,0x00, /* .....###........ */
+ /*0396:*/ 0x06,0x00, /* .....##......... */
+ /*0398:*/ 0x0c,0x00, /* ....##.......... */
+ /*039a:*/ 0x0c,0x00, /* ....##.......... */
+ /*039c:*/ 0x0c,0x00, /* ....##.......... */
+ /*039e:*/ 0x0c,0x00, /* ....##.......... */
+ /*03a0:*/ 0x00,0x00, /* ................ */
+ /*03a2:*/ 0x00,0x00, /* ................ */
+ /*03a4:*/ 0x0c,0x00, /* ....##.......... */
+ /*03a6:*/ 0x0c,0x00, /* ....##.......... */
+ /*03a8:*/ 0x0c,0x00, /* ....##.......... */
+/* --- new character at (64) starting at offset 0x03aa --- */
+ /*03aa:*/ 25, 22, 23, 2, -4, /* width and bbox (w,h,x,y) */
+ /*03af:*/ 0x00,0xff,0x00, /* ........########........ */
+ /*03b2:*/ 0x03,0xff,0xc0, /* ......############...... */
+ /*03b5:*/ 0x0f,0x01,0xe0, /* ....####.......####..... */
+ /*03b8:*/ 0x1c,0x00,0x70, /* ...###...........###.... */
+ /*03bb:*/ 0x38,0x00,0x18, /* ..###..............##... */
+ /*03be:*/ 0x30,0x00,0x18, /* ..##...............##... */
+ /*03c1:*/ 0x60,0x73,0x0c, /* .##......###..##....##.. */
+ /*03c4:*/ 0x60,0xfb,0x0c, /* .##.....#####.##....##.. */
+ /*03c7:*/ 0xc1,0xc7,0x0c, /* ##.....###...###....##.. */
+ /*03ca:*/ 0xc3,0x86,0x0c, /* ##....###....##.....##.. */
+ /*03cd:*/ 0xc3,0x06,0x0c, /* ##....##.....##.....##.. */
+ /*03d0:*/ 0xc6,0x06,0x0c, /* ##...##......##.....##.. */
+ /*03d3:*/ 0xc6,0x0c,0x1c, /* ##...##.....##.....###.. */
+ /*03d6:*/ 0xc6,0x0c,0x18, /* ##...##.....##.....##... */
+ /*03d9:*/ 0xc6,0x0c,0x38, /* ##...##.....##....###... */
+ /*03dc:*/ 0xe7,0x1c,0x70, /* ###..###...###...###.... */
+ /*03df:*/ 0x63,0xf7,0xe0, /* .##...######.######..... */
+ /*03e2:*/ 0x71,0xe3,0x80, /* .###...####...###....... */
+ /*03e5:*/ 0x38,0x00,0x00, /* ..###................... */
+ /*03e8:*/ 0x1c,0x00,0x00, /* ...###.................. */
+ /*03eb:*/ 0x0f,0x03,0x00, /* ....####......##........ */
+ /*03ee:*/ 0x07,0xff,0x00, /* .....###########........ */
+ /*03f1:*/ 0x00,0xfc,0x00, /* ........######.......... */
+/* --- new character A (65) starting at offset 0x03f4 --- */
+ /*03f4:*/ 17, 15, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*03f9:*/ 0x03,0x80, /* ......###....... */
+ /*03fb:*/ 0x03,0x80, /* ......###....... */
+ /*03fd:*/ 0x06,0xc0, /* .....##.##...... */
+ /*03ff:*/ 0x06,0xc0, /* .....##.##...... */
+ /*0401:*/ 0x0c,0x40, /* ....##...#...... */
+ /*0403:*/ 0x0c,0x60, /* ....##...##..... */
+ /*0405:*/ 0x0c,0x60, /* ....##...##..... */
+ /*0407:*/ 0x18,0x30, /* ...##.....##.... */
+ /*0409:*/ 0x18,0x30, /* ...##.....##.... */
+ /*040b:*/ 0x18,0x30, /* ...##.....##.... */
+ /*040d:*/ 0x30,0x18, /* ..##.......##... */
+ /*040f:*/ 0x3f,0xf8, /* ..###########... */
+ /*0411:*/ 0x3f,0xf8, /* ..###########... */
+ /*0413:*/ 0x60,0x0c, /* .##.........##.. */
+ /*0415:*/ 0x60,0x0c, /* .##.........##.. */
+ /*0417:*/ 0x60,0x0c, /* .##.........##.. */
+ /*0419:*/ 0xc0,0x06, /* ##...........##. */
+ /*041b:*/ 0xc0,0x06, /* ##...........##. */
+ /*041d:*/ 0xc0,0x06, /* ##...........##. */
+/* --- new character B (66) starting at offset 0x041f --- */
+ /*041f:*/ 17, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0424:*/ 0xff,0xc0, /* ##########...... */
+ /*0426:*/ 0xff,0xf0, /* ############.... */
+ /*0428:*/ 0xc0,0x70, /* ##.......###.... */
+ /*042a:*/ 0xc0,0x18, /* ##.........##... */
+ /*042c:*/ 0xc0,0x18, /* ##.........##... */
+ /*042e:*/ 0xc0,0x18, /* ##.........##... */
+ /*0430:*/ 0xc0,0x18, /* ##.........##... */
+ /*0432:*/ 0xc0,0x30, /* ##........##.... */
+ /*0434:*/ 0xff,0xe0, /* ###########..... */
+ /*0436:*/ 0xff,0xf0, /* ############.... */
+ /*0438:*/ 0xc0,0x18, /* ##.........##... */
+ /*043a:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*043c:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*043e:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0440:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0442:*/ 0xc0,0x1c, /* ##.........###.. */
+ /*0444:*/ 0xc0,0x38, /* ##........###... */
+ /*0446:*/ 0xff,0xf0, /* ############.... */
+ /*0448:*/ 0xff,0xc0, /* ##########...... */
+/* --- new character C (67) starting at offset 0x044a --- */
+ /*044a:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*044f:*/ 0x07,0xe0, /* .....######..... */
+ /*0451:*/ 0x1f,0xf8, /* ...##########... */
+ /*0453:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0455:*/ 0x70,0x0e, /* .###........###. */
+ /*0457:*/ 0x60,0x06, /* .##..........##. */
+ /*0459:*/ 0xe0,0x06, /* ###..........##. */
+ /*045b:*/ 0xc0,0x00, /* ##.............. */
+ /*045d:*/ 0xc0,0x00, /* ##.............. */
+ /*045f:*/ 0xc0,0x00, /* ##.............. */
+ /*0461:*/ 0xc0,0x00, /* ##.............. */
+ /*0463:*/ 0xc0,0x00, /* ##.............. */
+ /*0465:*/ 0xc0,0x00, /* ##.............. */
+ /*0467:*/ 0xc0,0x03, /* ##............## */
+ /*0469:*/ 0xe0,0x03, /* ###...........## */
+ /*046b:*/ 0x60,0x06, /* .##..........##. */
+ /*046d:*/ 0x70,0x0e, /* .###........###. */
+ /*046f:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0471:*/ 0x1f,0xf8, /* ...##########... */
+ /*0473:*/ 0x07,0xe0, /* .....######..... */
+/* --- new character D (68) starting at offset 0x0475 --- */
+ /*0475:*/ 18, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*047a:*/ 0xff,0xc0, /* ##########...... */
+ /*047c:*/ 0xff,0xf0, /* ############.... */
+ /*047e:*/ 0xc0,0x78, /* ##.......####... */
+ /*0480:*/ 0xc0,0x1c, /* ##.........###.. */
+ /*0482:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0484:*/ 0xc0,0x0e, /* ##..........###. */
+ /*0486:*/ 0xc0,0x06, /* ##...........##. */
+ /*0488:*/ 0xc0,0x06, /* ##...........##. */
+ /*048a:*/ 0xc0,0x06, /* ##...........##. */
+ /*048c:*/ 0xc0,0x06, /* ##...........##. */
+ /*048e:*/ 0xc0,0x06, /* ##...........##. */
+ /*0490:*/ 0xc0,0x06, /* ##...........##. */
+ /*0492:*/ 0xc0,0x06, /* ##...........##. */
+ /*0494:*/ 0xc0,0x0e, /* ##..........###. */
+ /*0496:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0498:*/ 0xc0,0x1c, /* ##.........###.. */
+ /*049a:*/ 0xc0,0x78, /* ##.......####... */
+ /*049c:*/ 0xff,0xf0, /* ############.... */
+ /*049e:*/ 0xff,0xc0, /* ##########...... */
+/* --- new character E (69) starting at offset 0x04a0 --- */
+ /*04a0:*/ 16, 12, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*04a5:*/ 0xff,0xf0, /* ############.... */
+ /*04a7:*/ 0xff,0xf0, /* ############.... */
+ /*04a9:*/ 0xc0,0x00, /* ##.............. */
+ /*04ab:*/ 0xc0,0x00, /* ##.............. */
+ /*04ad:*/ 0xc0,0x00, /* ##.............. */
+ /*04af:*/ 0xc0,0x00, /* ##.............. */
+ /*04b1:*/ 0xc0,0x00, /* ##.............. */
+ /*04b3:*/ 0xc0,0x00, /* ##.............. */
+ /*04b5:*/ 0xff,0xe0, /* ###########..... */
+ /*04b7:*/ 0xff,0xe0, /* ###########..... */
+ /*04b9:*/ 0xc0,0x00, /* ##.............. */
+ /*04bb:*/ 0xc0,0x00, /* ##.............. */
+ /*04bd:*/ 0xc0,0x00, /* ##.............. */
+ /*04bf:*/ 0xc0,0x00, /* ##.............. */
+ /*04c1:*/ 0xc0,0x00, /* ##.............. */
+ /*04c3:*/ 0xc0,0x00, /* ##.............. */
+ /*04c5:*/ 0xc0,0x00, /* ##.............. */
+ /*04c7:*/ 0xff,0xf0, /* ############.... */
+ /*04c9:*/ 0xff,0xf0, /* ############.... */
+/* --- new character F (70) starting at offset 0x04cb --- */
+ /*04cb:*/ 14, 11, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*04d0:*/ 0xff,0xe0, /* ###########..... */
+ /*04d2:*/ 0xff,0xe0, /* ###########..... */
+ /*04d4:*/ 0xc0,0x00, /* ##.............. */
+ /*04d6:*/ 0xc0,0x00, /* ##.............. */
+ /*04d8:*/ 0xc0,0x00, /* ##.............. */
+ /*04da:*/ 0xc0,0x00, /* ##.............. */
+ /*04dc:*/ 0xc0,0x00, /* ##.............. */
+ /*04de:*/ 0xc0,0x00, /* ##.............. */
+ /*04e0:*/ 0xc0,0x00, /* ##.............. */
+ /*04e2:*/ 0xff,0xc0, /* ##########...... */
+ /*04e4:*/ 0xff,0xc0, /* ##########...... */
+ /*04e6:*/ 0xc0,0x00, /* ##.............. */
+ /*04e8:*/ 0xc0,0x00, /* ##.............. */
+ /*04ea:*/ 0xc0,0x00, /* ##.............. */
+ /*04ec:*/ 0xc0,0x00, /* ##.............. */
+ /*04ee:*/ 0xc0,0x00, /* ##.............. */
+ /*04f0:*/ 0xc0,0x00, /* ##.............. */
+ /*04f2:*/ 0xc0,0x00, /* ##.............. */
+ /*04f4:*/ 0xc0,0x00, /* ##.............. */
+/* --- new character G (71) starting at offset 0x04f6 --- */
+ /*04f6:*/ 19, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*04fb:*/ 0x07,0xe0, /* .....######..... */
+ /*04fd:*/ 0x1f,0xf8, /* ...##########... */
+ /*04ff:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0501:*/ 0x70,0x0e, /* .###........###. */
+ /*0503:*/ 0x60,0x06, /* .##..........##. */
+ /*0505:*/ 0xe0,0x06, /* ###..........##. */
+ /*0507:*/ 0xc0,0x00, /* ##.............. */
+ /*0509:*/ 0xc0,0x00, /* ##.............. */
+ /*050b:*/ 0xc0,0x00, /* ##.............. */
+ /*050d:*/ 0xc0,0x7f, /* ##.......####### */
+ /*050f:*/ 0xc0,0x7f, /* ##.......####### */
+ /*0511:*/ 0xc0,0x03, /* ##............## */
+ /*0513:*/ 0xc0,0x03, /* ##............## */
+ /*0515:*/ 0xe0,0x03, /* ###...........## */
+ /*0517:*/ 0x60,0x07, /* .##..........### */
+ /*0519:*/ 0x70,0x0f, /* .###........#### */
+ /*051b:*/ 0x3c,0x3f, /* ..####....###### */
+ /*051d:*/ 0x1f,0xfb, /* ...##########.## */
+ /*051f:*/ 0x07,0xe3, /* .....######...## */
+/* --- new character H (72) starting at offset 0x0521 --- */
+ /*0521:*/ 18, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0526:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0528:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*052a:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*052c:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*052e:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0530:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0532:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0534:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0536:*/ 0xff,0xfc, /* ##############.. */
+ /*0538:*/ 0xff,0xfc, /* ##############.. */
+ /*053a:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*053c:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*053e:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0540:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0542:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0544:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0546:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0548:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*054a:*/ 0xc0,0x0c, /* ##..........##.. */
+/* --- new character I (73) starting at offset 0x054c --- */
+ /*054c:*/ 8, 2, 19, 3, 0, /* width and bbox (w,h,x,y) */
+ /*0551:*/ 0xc0, /* ##...... */
+ /*0552:*/ 0xc0, /* ##...... */
+ /*0553:*/ 0xc0, /* ##...... */
+ /*0554:*/ 0xc0, /* ##...... */
+ /*0555:*/ 0xc0, /* ##...... */
+ /*0556:*/ 0xc0, /* ##...... */
+ /*0557:*/ 0xc0, /* ##...... */
+ /*0558:*/ 0xc0, /* ##...... */
+ /*0559:*/ 0xc0, /* ##...... */
+ /*055a:*/ 0xc0, /* ##...... */
+ /*055b:*/ 0xc0, /* ##...... */
+ /*055c:*/ 0xc0, /* ##...... */
+ /*055d:*/ 0xc0, /* ##...... */
+ /*055e:*/ 0xc0, /* ##...... */
+ /*055f:*/ 0xc0, /* ##...... */
+ /*0560:*/ 0xc0, /* ##...... */
+ /*0561:*/ 0xc0, /* ##...... */
+ /*0562:*/ 0xc0, /* ##...... */
+ /*0563:*/ 0xc0, /* ##...... */
+/* --- new character J (74) starting at offset 0x0564 --- */
+ /*0564:*/ 13, 10, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0569:*/ 0x00,0xc0, /* ........##...... */
+ /*056b:*/ 0x00,0xc0, /* ........##...... */
+ /*056d:*/ 0x00,0xc0, /* ........##...... */
+ /*056f:*/ 0x00,0xc0, /* ........##...... */
+ /*0571:*/ 0x00,0xc0, /* ........##...... */
+ /*0573:*/ 0x00,0xc0, /* ........##...... */
+ /*0575:*/ 0x00,0xc0, /* ........##...... */
+ /*0577:*/ 0x00,0xc0, /* ........##...... */
+ /*0579:*/ 0x00,0xc0, /* ........##...... */
+ /*057b:*/ 0x00,0xc0, /* ........##...... */
+ /*057d:*/ 0x00,0xc0, /* ........##...... */
+ /*057f:*/ 0x00,0xc0, /* ........##...... */
+ /*0581:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0583:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0585:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0587:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0589:*/ 0x61,0x80, /* .##....##....... */
+ /*058b:*/ 0x7f,0x80, /* .########....... */
+ /*058d:*/ 0x3f,0x00, /* ..######........ */
+/* --- new character K (75) starting at offset 0x058f --- */
+ /*058f:*/ 18, 15, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0594:*/ 0xc0,0x38, /* ##........###... */
+ /*0596:*/ 0xc0,0x70, /* ##.......###.... */
+ /*0598:*/ 0xc0,0xe0, /* ##......###..... */
+ /*059a:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*059c:*/ 0xc3,0x80, /* ##....###....... */
+ /*059e:*/ 0xc7,0x00, /* ##...###........ */
+ /*05a0:*/ 0xce,0x00, /* ##..###......... */
+ /*05a2:*/ 0xdc,0x00, /* ##.###.......... */
+ /*05a4:*/ 0xfc,0x00, /* ######.......... */
+ /*05a6:*/ 0xfe,0x00, /* #######......... */
+ /*05a8:*/ 0xe7,0x00, /* ###..###........ */
+ /*05aa:*/ 0xc3,0x80, /* ##....###....... */
+ /*05ac:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*05ae:*/ 0xc0,0xe0, /* ##......###..... */
+ /*05b0:*/ 0xc0,0x70, /* ##.......###.... */
+ /*05b2:*/ 0xc0,0x38, /* ##........###... */
+ /*05b4:*/ 0xc0,0x1c, /* ##.........###.. */
+ /*05b6:*/ 0xc0,0x0e, /* ##..........###. */
+ /*05b8:*/ 0xc0,0x06, /* ##...........##. */
+/* --- new character L (76) starting at offset 0x05ba --- */
+ /*05ba:*/ 14, 11, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*05bf:*/ 0xc0,0x00, /* ##.............. */
+ /*05c1:*/ 0xc0,0x00, /* ##.............. */
+ /*05c3:*/ 0xc0,0x00, /* ##.............. */
+ /*05c5:*/ 0xc0,0x00, /* ##.............. */
+ /*05c7:*/ 0xc0,0x00, /* ##.............. */
+ /*05c9:*/ 0xc0,0x00, /* ##.............. */
+ /*05cb:*/ 0xc0,0x00, /* ##.............. */
+ /*05cd:*/ 0xc0,0x00, /* ##.............. */
+ /*05cf:*/ 0xc0,0x00, /* ##.............. */
+ /*05d1:*/ 0xc0,0x00, /* ##.............. */
+ /*05d3:*/ 0xc0,0x00, /* ##.............. */
+ /*05d5:*/ 0xc0,0x00, /* ##.............. */
+ /*05d7:*/ 0xc0,0x00, /* ##.............. */
+ /*05d9:*/ 0xc0,0x00, /* ##.............. */
+ /*05db:*/ 0xc0,0x00, /* ##.............. */
+ /*05dd:*/ 0xc0,0x00, /* ##.............. */
+ /*05df:*/ 0xc0,0x00, /* ##.............. */
+ /*05e1:*/ 0xff,0xe0, /* ###########..... */
+ /*05e3:*/ 0xff,0xe0, /* ###########..... */
+/* --- new character M (77) starting at offset 0x05e5 --- */
+ /*05e5:*/ 21, 17, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*05ea:*/ 0xc0,0x01,0x80, /* ##.............##....... */
+ /*05ed:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*05f0:*/ 0xe0,0x03,0x80, /* ###...........###....... */
+ /*05f3:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*05f6:*/ 0xf0,0x07,0x80, /* ####.........####....... */
+ /*05f9:*/ 0xd8,0x0d,0x80, /* ##.##.......##.##....... */
+ /*05fc:*/ 0xd8,0x0d,0x80, /* ##.##.......##.##....... */
+ /*05ff:*/ 0xd8,0x0d,0x80, /* ##.##.......##.##....... */
+ /*0602:*/ 0xcc,0x19,0x80, /* ##..##.....##..##....... */
+ /*0605:*/ 0xcc,0x19,0x80, /* ##..##.....##..##....... */
+ /*0608:*/ 0xcc,0x19,0x80, /* ##..##.....##..##....... */
+ /*060b:*/ 0xc6,0x31,0x80, /* ##...##...##...##....... */
+ /*060e:*/ 0xc6,0x31,0x80, /* ##...##...##...##....... */
+ /*0611:*/ 0xc6,0x31,0x80, /* ##...##...##...##....... */
+ /*0614:*/ 0xc3,0x61,0x80, /* ##....##.##....##....... */
+ /*0617:*/ 0xc3,0x61,0x80, /* ##....##.##....##....... */
+ /*061a:*/ 0xc3,0x61,0x80, /* ##....##.##....##....... */
+ /*061d:*/ 0xc1,0xc1,0x80, /* ##.....###.....##....... */
+ /*0620:*/ 0xc1,0xc1,0x80, /* ##.....###.....##....... */
+/* --- new character N (78) starting at offset 0x0623 --- */
+ /*0623:*/ 18, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0628:*/ 0xe0,0x0c, /* ###.........##.. */
+ /*062a:*/ 0xf0,0x0c, /* ####........##.. */
+ /*062c:*/ 0xf0,0x0c, /* ####........##.. */
+ /*062e:*/ 0xd8,0x0c, /* ##.##.......##.. */
+ /*0630:*/ 0xdc,0x0c, /* ##.###......##.. */
+ /*0632:*/ 0xcc,0x0c, /* ##..##......##.. */
+ /*0634:*/ 0xce,0x0c, /* ##..###.....##.. */
+ /*0636:*/ 0xc6,0x0c, /* ##...##.....##.. */
+ /*0638:*/ 0xc7,0x0c, /* ##...###....##.. */
+ /*063a:*/ 0xc3,0x0c, /* ##....##....##.. */
+ /*063c:*/ 0xc3,0x8c, /* ##....###...##.. */
+ /*063e:*/ 0xc1,0x8c, /* ##.....##...##.. */
+ /*0640:*/ 0xc1,0xcc, /* ##.....###..##.. */
+ /*0642:*/ 0xc0,0xcc, /* ##......##..##.. */
+ /*0644:*/ 0xc0,0xec, /* ##......###.##.. */
+ /*0646:*/ 0xc0,0x6c, /* ##.......##.##.. */
+ /*0648:*/ 0xc0,0x3c, /* ##........####.. */
+ /*064a:*/ 0xc0,0x3c, /* ##........####.. */
+ /*064c:*/ 0xc0,0x1c, /* ##.........###.. */
+/* --- new character O (79) starting at offset 0x064e --- */
+ /*064e:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0653:*/ 0x07,0xe0, /* .....######..... */
+ /*0655:*/ 0x1f,0xf8, /* ...##########... */
+ /*0657:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0659:*/ 0x70,0x0e, /* .###........###. */
+ /*065b:*/ 0x60,0x06, /* .##..........##. */
+ /*065d:*/ 0xe0,0x07, /* ###..........### */
+ /*065f:*/ 0xc0,0x03, /* ##............## */
+ /*0661:*/ 0xc0,0x03, /* ##............## */
+ /*0663:*/ 0xc0,0x03, /* ##............## */
+ /*0665:*/ 0xc0,0x03, /* ##............## */
+ /*0667:*/ 0xc0,0x03, /* ##............## */
+ /*0669:*/ 0xc0,0x03, /* ##............## */
+ /*066b:*/ 0xc0,0x03, /* ##............## */
+ /*066d:*/ 0xe0,0x07, /* ###..........### */
+ /*066f:*/ 0x60,0x06, /* .##..........##. */
+ /*0671:*/ 0x70,0x0e, /* .###........###. */
+ /*0673:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*0675:*/ 0x1f,0xf8, /* ...##########... */
+ /*0677:*/ 0x07,0xe0, /* .....######..... */
+/* --- new character P (80) starting at offset 0x0679 --- */
+ /*0679:*/ 16, 13, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*067e:*/ 0xff,0xe0, /* ###########..... */
+ /*0680:*/ 0xff,0xf0, /* ############.... */
+ /*0682:*/ 0xc0,0x30, /* ##........##.... */
+ /*0684:*/ 0xc0,0x18, /* ##.........##... */
+ /*0686:*/ 0xc0,0x18, /* ##.........##... */
+ /*0688:*/ 0xc0,0x18, /* ##.........##... */
+ /*068a:*/ 0xc0,0x18, /* ##.........##... */
+ /*068c:*/ 0xc0,0x30, /* ##........##.... */
+ /*068e:*/ 0xff,0xf0, /* ############.... */
+ /*0690:*/ 0xff,0xe0, /* ###########..... */
+ /*0692:*/ 0xc0,0x00, /* ##.............. */
+ /*0694:*/ 0xc0,0x00, /* ##.............. */
+ /*0696:*/ 0xc0,0x00, /* ##.............. */
+ /*0698:*/ 0xc0,0x00, /* ##.............. */
+ /*069a:*/ 0xc0,0x00, /* ##.............. */
+ /*069c:*/ 0xc0,0x00, /* ##.............. */
+ /*069e:*/ 0xc0,0x00, /* ##.............. */
+ /*06a0:*/ 0xc0,0x00, /* ##.............. */
+ /*06a2:*/ 0xc0,0x00, /* ##.............. */
+/* --- new character Q (81) starting at offset 0x06a4 --- */
+ /*06a4:*/ 18, 16, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*06a9:*/ 0x07,0xe0, /* .....######..... */
+ /*06ab:*/ 0x1f,0xf8, /* ...##########... */
+ /*06ad:*/ 0x3c,0x3c, /* ..####....####.. */
+ /*06af:*/ 0x70,0x0e, /* .###........###. */
+ /*06b1:*/ 0x60,0x06, /* .##..........##. */
+ /*06b3:*/ 0xe0,0x07, /* ###..........### */
+ /*06b5:*/ 0xc0,0x03, /* ##............## */
+ /*06b7:*/ 0xc0,0x03, /* ##............## */
+ /*06b9:*/ 0xc0,0x03, /* ##............## */
+ /*06bb:*/ 0xc0,0x03, /* ##............## */
+ /*06bd:*/ 0xc0,0x03, /* ##............## */
+ /*06bf:*/ 0xc0,0x03, /* ##............## */
+ /*06c1:*/ 0xc0,0x03, /* ##............## */
+ /*06c3:*/ 0xe0,0x07, /* ###..........### */
+ /*06c5:*/ 0x60,0xe6, /* .##.....###..##. */
+ /*06c7:*/ 0x70,0x7e, /* .###.....######. */
+ /*06c9:*/ 0x3c,0x1c, /* ..####.....###.. */
+ /*06cb:*/ 0x1f,0xfe, /* ...############. */
+ /*06cd:*/ 0x07,0xe7, /* .....######..### */
+/* --- new character R (82) starting at offset 0x06cf --- */
+ /*06cf:*/ 17, 13, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*06d4:*/ 0xff,0xe0, /* ###########..... */
+ /*06d6:*/ 0xff,0xf0, /* ############.... */
+ /*06d8:*/ 0xc0,0x30, /* ##........##.... */
+ /*06da:*/ 0xc0,0x18, /* ##.........##... */
+ /*06dc:*/ 0xc0,0x18, /* ##.........##... */
+ /*06de:*/ 0xc0,0x18, /* ##.........##... */
+ /*06e0:*/ 0xc0,0x18, /* ##.........##... */
+ /*06e2:*/ 0xc0,0x30, /* ##........##.... */
+ /*06e4:*/ 0xff,0xf0, /* ############.... */
+ /*06e6:*/ 0xff,0xe0, /* ###########..... */
+ /*06e8:*/ 0xc0,0x70, /* ##.......###.... */
+ /*06ea:*/ 0xc0,0x30, /* ##........##.... */
+ /*06ec:*/ 0xc0,0x18, /* ##.........##... */
+ /*06ee:*/ 0xc0,0x18, /* ##.........##... */
+ /*06f0:*/ 0xc0,0x18, /* ##.........##... */
+ /*06f2:*/ 0xc0,0x18, /* ##.........##... */
+ /*06f4:*/ 0xc0,0x18, /* ##.........##... */
+ /*06f6:*/ 0xc0,0x18, /* ##.........##... */
+ /*06f8:*/ 0xc0,0x18, /* ##.........##... */
+/* --- new character S (83) starting at offset 0x06fa --- */
+ /*06fa:*/ 16, 14, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*06ff:*/ 0x07,0xc0, /* .....#####...... */
+ /*0701:*/ 0x1f,0xf0, /* ...#########.... */
+ /*0703:*/ 0x38,0x38, /* ..###.....###... */
+ /*0705:*/ 0x70,0x18, /* .###.......##... */
+ /*0707:*/ 0x60,0x18, /* .##........##... */
+ /*0709:*/ 0x60,0x00, /* .##............. */
+ /*070b:*/ 0x70,0x00, /* .###............ */
+ /*070d:*/ 0x3e,0x00, /* ..#####......... */
+ /*070f:*/ 0x0f,0xc0, /* ....######...... */
+ /*0711:*/ 0x01,0xf0, /* .......#####.... */
+ /*0713:*/ 0x00,0x78, /* .........####... */
+ /*0715:*/ 0x00,0x1c, /* ...........###.. */
+ /*0717:*/ 0x00,0x0c, /* ............##.. */
+ /*0719:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*071b:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*071d:*/ 0xe0,0x1c, /* ###........###.. */
+ /*071f:*/ 0x78,0x38, /* .####.....###... */
+ /*0721:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0723:*/ 0x0f,0xc0, /* ....######...... */
+/* --- new character T (84) starting at offset 0x0725 --- */
+ /*0725:*/ 16, 14, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*072a:*/ 0xff,0xfc, /* ##############.. */
+ /*072c:*/ 0xff,0xfc, /* ##############.. */
+ /*072e:*/ 0x03,0x00, /* ......##........ */
+ /*0730:*/ 0x03,0x00, /* ......##........ */
+ /*0732:*/ 0x03,0x00, /* ......##........ */
+ /*0734:*/ 0x03,0x00, /* ......##........ */
+ /*0736:*/ 0x03,0x00, /* ......##........ */
+ /*0738:*/ 0x03,0x00, /* ......##........ */
+ /*073a:*/ 0x03,0x00, /* ......##........ */
+ /*073c:*/ 0x03,0x00, /* ......##........ */
+ /*073e:*/ 0x03,0x00, /* ......##........ */
+ /*0740:*/ 0x03,0x00, /* ......##........ */
+ /*0742:*/ 0x03,0x00, /* ......##........ */
+ /*0744:*/ 0x03,0x00, /* ......##........ */
+ /*0746:*/ 0x03,0x00, /* ......##........ */
+ /*0748:*/ 0x03,0x00, /* ......##........ */
+ /*074a:*/ 0x03,0x00, /* ......##........ */
+ /*074c:*/ 0x03,0x00, /* ......##........ */
+ /*074e:*/ 0x03,0x00, /* ......##........ */
+/* --- new character U (85) starting at offset 0x0750 --- */
+ /*0750:*/ 18, 14, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0755:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0757:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0759:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*075b:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*075d:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*075f:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0761:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0763:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0765:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0767:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0769:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*076b:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*076d:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*076f:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0771:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0773:*/ 0x60,0x18, /* .##........##... */
+ /*0775:*/ 0x70,0x38, /* .###......###... */
+ /*0777:*/ 0x3f,0xf0, /* ..##########.... */
+ /*0779:*/ 0x0f,0xc0, /* ....######...... */
+/* --- new character V (86) starting at offset 0x077b --- */
+ /*077b:*/ 17, 15, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0780:*/ 0xc0,0x06, /* ##...........##. */
+ /*0782:*/ 0xc0,0x06, /* ##...........##. */
+ /*0784:*/ 0xe0,0x0e, /* ###.........###. */
+ /*0786:*/ 0x60,0x0c, /* .##.........##.. */
+ /*0788:*/ 0x70,0x1c, /* .###.......###.. */
+ /*078a:*/ 0x30,0x18, /* ..##.......##... */
+ /*078c:*/ 0x30,0x18, /* ..##.......##... */
+ /*078e:*/ 0x38,0x38, /* ..###.....###... */
+ /*0790:*/ 0x18,0x30, /* ...##.....##.... */
+ /*0792:*/ 0x18,0x30, /* ...##.....##.... */
+ /*0794:*/ 0x1c,0x70, /* ...###...###.... */
+ /*0796:*/ 0x0c,0x60, /* ....##...##..... */
+ /*0798:*/ 0x0c,0x60, /* ....##...##..... */
+ /*079a:*/ 0x0e,0xe0, /* ....###.###..... */
+ /*079c:*/ 0x06,0xc0, /* .....##.##...... */
+ /*079e:*/ 0x06,0xc0, /* .....##.##...... */
+ /*07a0:*/ 0x03,0x80, /* ......###....... */
+ /*07a2:*/ 0x03,0x80, /* ......###....... */
+ /*07a4:*/ 0x03,0x80, /* ......###....... */
+/* --- new character W (87) starting at offset 0x07a6 --- */
+ /*07a6:*/ 22, 20, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*07ab:*/ 0xc0,0x60,0x30, /* ##.......##.......##.... */
+ /*07ae:*/ 0xc0,0x60,0x30, /* ##.......##.......##.... */
+ /*07b1:*/ 0xc0,0x60,0x30, /* ##.......##.......##.... */
+ /*07b4:*/ 0xc0,0xf0,0x30, /* ##......####......##.... */
+ /*07b7:*/ 0x60,0xf0,0x60, /* .##.....####.....##..... */
+ /*07ba:*/ 0x61,0x98,0x60, /* .##....##..##....##..... */
+ /*07bd:*/ 0x61,0x98,0x60, /* .##....##..##....##..... */
+ /*07c0:*/ 0x61,0x98,0x60, /* .##....##..##....##..... */
+ /*07c3:*/ 0x61,0x98,0x60, /* .##....##..##....##..... */
+ /*07c6:*/ 0x31,0x98,0xc0, /* ..##...##..##...##...... */
+ /*07c9:*/ 0x33,0x0c,0xc0, /* ..##..##....##..##...... */
+ /*07cc:*/ 0x33,0x0c,0xc0, /* ..##..##....##..##...... */
+ /*07cf:*/ 0x33,0x0c,0xc0, /* ..##..##....##..##...... */
+ /*07d2:*/ 0x1b,0x0d,0x80, /* ...##.##....##.##....... */
+ /*07d5:*/ 0x1b,0x0d,0x80, /* ...##.##....##.##....... */
+ /*07d8:*/ 0x1e,0x07,0x80, /* ...####......####....... */
+ /*07db:*/ 0x0e,0x07,0x00, /* ....###......###........ */
+ /*07de:*/ 0x0c,0x03,0x00, /* ....##........##........ */
+ /*07e1:*/ 0x0c,0x03,0x00, /* ....##........##........ */
+/* --- new character X (88) starting at offset 0x07e4 --- */
+ /*07e4:*/ 17, 15, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*07e9:*/ 0xc0,0x06, /* ##...........##. */
+ /*07eb:*/ 0xe0,0x0e, /* ###.........###. */
+ /*07ed:*/ 0x70,0x1c, /* .###.......###.. */
+ /*07ef:*/ 0x30,0x18, /* ..##.......##... */
+ /*07f1:*/ 0x18,0x30, /* ...##.....##.... */
+ /*07f3:*/ 0x1c,0x70, /* ...###...###.... */
+ /*07f5:*/ 0x0e,0xe0, /* ....###.###..... */
+ /*07f7:*/ 0x07,0xc0, /* .....#####...... */
+ /*07f9:*/ 0x03,0x80, /* ......###....... */
+ /*07fb:*/ 0x03,0x80, /* ......###....... */
+ /*07fd:*/ 0x07,0xc0, /* .....#####...... */
+ /*07ff:*/ 0x0e,0xe0, /* ....###.###..... */
+ /*0801:*/ 0x0c,0x60, /* ....##...##..... */
+ /*0803:*/ 0x1c,0x70, /* ...###...###.... */
+ /*0805:*/ 0x38,0x38, /* ..###.....###... */
+ /*0807:*/ 0x30,0x18, /* ..##.......##... */
+ /*0809:*/ 0x60,0x0c, /* .##.........##.. */
+ /*080b:*/ 0xe0,0x0e, /* ###.........###. */
+ /*080d:*/ 0xc0,0x06, /* ##...........##. */
+/* --- new character Y (89) starting at offset 0x080f --- */
+ /*080f:*/ 16, 14, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0814:*/ 0xc0,0x0c, /* ##..........##.. */
+ /*0816:*/ 0xe0,0x1c, /* ###........###.. */
+ /*0818:*/ 0x60,0x18, /* .##........##... */
+ /*081a:*/ 0x70,0x38, /* .###......###... */
+ /*081c:*/ 0x30,0x30, /* ..##......##.... */
+ /*081e:*/ 0x38,0x70, /* ..###....###.... */
+ /*0820:*/ 0x18,0x60, /* ...##....##..... */
+ /*0822:*/ 0x1c,0xe0, /* ...###..###..... */
+ /*0824:*/ 0x0c,0xc0, /* ....##..##...... */
+ /*0826:*/ 0x0f,0xc0, /* ....######...... */
+ /*0828:*/ 0x07,0x80, /* .....####....... */
+ /*082a:*/ 0x07,0x80, /* .....####....... */
+ /*082c:*/ 0x03,0x00, /* ......##........ */
+ /*082e:*/ 0x03,0x00, /* ......##........ */
+ /*0830:*/ 0x03,0x00, /* ......##........ */
+ /*0832:*/ 0x03,0x00, /* ......##........ */
+ /*0834:*/ 0x03,0x00, /* ......##........ */
+ /*0836:*/ 0x03,0x00, /* ......##........ */
+ /*0838:*/ 0x03,0x00, /* ......##........ */
+/* --- new character Z (90) starting at offset 0x083a --- */
+ /*083a:*/ 15, 13, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*083f:*/ 0xff,0xf8, /* #############... */
+ /*0841:*/ 0xff,0xf8, /* #############... */
+ /*0843:*/ 0x00,0x38, /* ..........###... */
+ /*0845:*/ 0x00,0x70, /* .........###.... */
+ /*0847:*/ 0x00,0xe0, /* ........###..... */
+ /*0849:*/ 0x01,0xc0, /* .......###...... */
+ /*084b:*/ 0x01,0xc0, /* .......###...... */
+ /*084d:*/ 0x03,0x80, /* ......###....... */
+ /*084f:*/ 0x07,0x00, /* .....###........ */
+ /*0851:*/ 0x07,0x00, /* .....###........ */
+ /*0853:*/ 0x0e,0x00, /* ....###......... */
+ /*0855:*/ 0x1c,0x00, /* ...###.......... */
+ /*0857:*/ 0x1c,0x00, /* ...###.......... */
+ /*0859:*/ 0x38,0x00, /* ..###........... */
+ /*085b:*/ 0x70,0x00, /* .###............ */
+ /*085d:*/ 0x70,0x00, /* .###............ */
+ /*085f:*/ 0xe0,0x00, /* ###............. */
+ /*0861:*/ 0xff,0xf8, /* #############... */
+ /*0863:*/ 0xff,0xf8, /* #############... */
+/* --- new character bracketleft (91) starting at offset 0x0865 --- */
+ /*0865:*/ 7, 4, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*086a:*/ 0xf0, /* ####.... */
+ /*086b:*/ 0xf0, /* ####.... */
+ /*086c:*/ 0xc0, /* ##...... */
+ /*086d:*/ 0xc0, /* ##...... */
+ /*086e:*/ 0xc0, /* ##...... */
+ /*086f:*/ 0xc0, /* ##...... */
+ /*0870:*/ 0xc0, /* ##...... */
+ /*0871:*/ 0xc0, /* ##...... */
+ /*0872:*/ 0xc0, /* ##...... */
+ /*0873:*/ 0xc0, /* ##...... */
+ /*0874:*/ 0xc0, /* ##...... */
+ /*0875:*/ 0xc0, /* ##...... */
+ /*0876:*/ 0xc0, /* ##...... */
+ /*0877:*/ 0xc0, /* ##...... */
+ /*0878:*/ 0xc0, /* ##...... */
+ /*0879:*/ 0xc0, /* ##...... */
+ /*087a:*/ 0xc0, /* ##...... */
+ /*087b:*/ 0xc0, /* ##...... */
+ /*087c:*/ 0xc0, /* ##...... */
+ /*087d:*/ 0xc0, /* ##...... */
+ /*087e:*/ 0xc0, /* ##...... */
+ /*087f:*/ 0xc0, /* ##...... */
+ /*0880:*/ 0xf0, /* ####.... */
+ /*0881:*/ 0xf0, /* ####.... */
+/* --- new character backslash (92) starting at offset 0x0882 --- */
+ /*0882:*/ 7, 7, 19, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0887:*/ 0xc0, /* ##...... */
+ /*0888:*/ 0xc0, /* ##...... */
+ /*0889:*/ 0xc0, /* ##...... */
+ /*088a:*/ 0x60, /* .##..... */
+ /*088b:*/ 0x60, /* .##..... */
+ /*088c:*/ 0x60, /* .##..... */
+ /*088d:*/ 0x30, /* ..##.... */
+ /*088e:*/ 0x30, /* ..##.... */
+ /*088f:*/ 0x30, /* ..##.... */
+ /*0890:*/ 0x30, /* ..##.... */
+ /*0891:*/ 0x18, /* ...##... */
+ /*0892:*/ 0x18, /* ...##... */
+ /*0893:*/ 0x18, /* ...##... */
+ /*0894:*/ 0x0c, /* ....##.. */
+ /*0895:*/ 0x0c, /* ....##.. */
+ /*0896:*/ 0x0c, /* ....##.. */
+ /*0897:*/ 0x06, /* .....##. */
+ /*0898:*/ 0x06, /* .....##. */
+ /*0899:*/ 0x06, /* .....##. */
+/* --- new character bracketright (93) starting at offset 0x089a --- */
+ /*089a:*/ 7, 4, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*089f:*/ 0xf0, /* ####.... */
+ /*08a0:*/ 0xf0, /* ####.... */
+ /*08a1:*/ 0x30, /* ..##.... */
+ /*08a2:*/ 0x30, /* ..##.... */
+ /*08a3:*/ 0x30, /* ..##.... */
+ /*08a4:*/ 0x30, /* ..##.... */
+ /*08a5:*/ 0x30, /* ..##.... */
+ /*08a6:*/ 0x30, /* ..##.... */
+ /*08a7:*/ 0x30, /* ..##.... */
+ /*08a8:*/ 0x30, /* ..##.... */
+ /*08a9:*/ 0x30, /* ..##.... */
+ /*08aa:*/ 0x30, /* ..##.... */
+ /*08ab:*/ 0x30, /* ..##.... */
+ /*08ac:*/ 0x30, /* ..##.... */
+ /*08ad:*/ 0x30, /* ..##.... */
+ /*08ae:*/ 0x30, /* ..##.... */
+ /*08af:*/ 0x30, /* ..##.... */
+ /*08b0:*/ 0x30, /* ..##.... */
+ /*08b1:*/ 0x30, /* ..##.... */
+ /*08b2:*/ 0x30, /* ..##.... */
+ /*08b3:*/ 0x30, /* ..##.... */
+ /*08b4:*/ 0x30, /* ..##.... */
+ /*08b5:*/ 0xf0, /* ####.... */
+ /*08b6:*/ 0xf0, /* ####.... */
+/* --- new character asciicircum (94) starting at offset 0x08b7 --- */
+ /*08b7:*/ 12, 10, 9, 1, 10, /* width and bbox (w,h,x,y) */
+ /*08bc:*/ 0x0c,0x00, /* ....##.......... */
+ /*08be:*/ 0x0c,0x00, /* ....##.......... */
+ /*08c0:*/ 0x1e,0x00, /* ...####......... */
+ /*08c2:*/ 0x12,0x00, /* ...#..#......... */
+ /*08c4:*/ 0x33,0x00, /* ..##..##........ */
+ /*08c6:*/ 0x61,0x80, /* .##....##....... */
+ /*08c8:*/ 0x61,0x80, /* .##....##....... */
+ /*08ca:*/ 0xc0,0xc0, /* ##......##...... */
+ /*08cc:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character underscore (95) starting at offset 0x08ce --- */
+ /*08ce:*/ 14, 14, 2, 0, -5, /* width and bbox (w,h,x,y) */
+ /*08d3:*/ 0xff,0xfc, /* ##############.. */
+ /*08d5:*/ 0xff,0xfc, /* ##############.. */
+/* --- new character grave (96) starting at offset 0x08d7 --- */
+ /*08d7:*/ 7, 5, 4, 1, 15, /* width and bbox (w,h,x,y) */
+ /*08dc:*/ 0xc0, /* ##...... */
+ /*08dd:*/ 0x60, /* .##..... */
+ /*08de:*/ 0x30, /* ..##.... */
+ /*08df:*/ 0x18, /* ...##... */
+/* --- new character a (97) starting at offset 0x08e0 --- */
+ /*08e0:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*08e5:*/ 0x1f,0x00, /* ...#####........ */
+ /*08e7:*/ 0x3f,0x80, /* ..#######....... */
+ /*08e9:*/ 0x61,0xc0, /* .##....###...... */
+ /*08eb:*/ 0x60,0xc0, /* .##.....##...... */
+ /*08ed:*/ 0x00,0xc0, /* ........##...... */
+ /*08ef:*/ 0x07,0xc0, /* .....#####...... */
+ /*08f1:*/ 0x3f,0xc0, /* ..########...... */
+ /*08f3:*/ 0x78,0xc0, /* .####...##...... */
+ /*08f5:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*08f7:*/ 0xc0,0xc0, /* ##......##...... */
+ /*08f9:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*08fb:*/ 0xe3,0xc0, /* ###...####...... */
+ /*08fd:*/ 0x7e,0xe0, /* .######.###..... */
+ /*08ff:*/ 0x3c,0x60, /* ..####...##..... */
+/* --- new character b (98) starting at offset 0x0901 --- */
+ /*0901:*/ 14, 11, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0906:*/ 0xc0,0x00, /* ##.............. */
+ /*0908:*/ 0xc0,0x00, /* ##.............. */
+ /*090a:*/ 0xc0,0x00, /* ##.............. */
+ /*090c:*/ 0xc0,0x00, /* ##.............. */
+ /*090e:*/ 0xc0,0x00, /* ##.............. */
+ /*0910:*/ 0xcf,0x00, /* ##..####........ */
+ /*0912:*/ 0xdf,0x80, /* ##.######....... */
+ /*0914:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0916:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0918:*/ 0xc0,0x60, /* ##.......##..... */
+ /*091a:*/ 0xc0,0x60, /* ##.......##..... */
+ /*091c:*/ 0xc0,0x60, /* ##.......##..... */
+ /*091e:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0920:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0922:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0924:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0926:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0928:*/ 0xdf,0x80, /* ##.######....... */
+ /*092a:*/ 0xcf,0x00, /* ##..####........ */
+/* --- new character c (99) starting at offset 0x092c --- */
+ /*092c:*/ 12, 10, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0931:*/ 0x1f,0x00, /* ...#####........ */
+ /*0933:*/ 0x3f,0x80, /* ..#######....... */
+ /*0935:*/ 0x71,0xc0, /* .###...###...... */
+ /*0937:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0939:*/ 0xc0,0x00, /* ##.............. */
+ /*093b:*/ 0xc0,0x00, /* ##.............. */
+ /*093d:*/ 0xc0,0x00, /* ##.............. */
+ /*093f:*/ 0xc0,0x00, /* ##.............. */
+ /*0941:*/ 0xc0,0x00, /* ##.............. */
+ /*0943:*/ 0xc0,0x00, /* ##.............. */
+ /*0945:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0947:*/ 0x71,0xc0, /* .###...###...... */
+ /*0949:*/ 0x3f,0x80, /* ..#######....... */
+ /*094b:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character d (100) starting at offset 0x094d --- */
+ /*094d:*/ 14, 11, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0952:*/ 0x00,0x60, /* .........##..... */
+ /*0954:*/ 0x00,0x60, /* .........##..... */
+ /*0956:*/ 0x00,0x60, /* .........##..... */
+ /*0958:*/ 0x00,0x60, /* .........##..... */
+ /*095a:*/ 0x00,0x60, /* .........##..... */
+ /*095c:*/ 0x1e,0x60, /* ...####..##..... */
+ /*095e:*/ 0x3f,0x60, /* ..######.##..... */
+ /*0960:*/ 0x71,0xe0, /* .###...####..... */
+ /*0962:*/ 0x60,0xe0, /* .##.....###..... */
+ /*0964:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0966:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0968:*/ 0xc0,0x60, /* ##.......##..... */
+ /*096a:*/ 0xc0,0x60, /* ##.......##..... */
+ /*096c:*/ 0xc0,0x60, /* ##.......##..... */
+ /*096e:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0970:*/ 0x60,0xe0, /* .##.....###..... */
+ /*0972:*/ 0x71,0xe0, /* .###...####..... */
+ /*0974:*/ 0x3f,0x60, /* ..######.##..... */
+ /*0976:*/ 0x1e,0x60, /* ...####..##..... */
+/* --- new character e (101) starting at offset 0x0978 --- */
+ /*0978:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*097d:*/ 0x0e,0x00, /* ....###......... */
+ /*097f:*/ 0x3f,0x80, /* ..#######....... */
+ /*0981:*/ 0x71,0xc0, /* .###...###...... */
+ /*0983:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0985:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0987:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0989:*/ 0xff,0xe0, /* ###########..... */
+ /*098b:*/ 0xff,0xe0, /* ###########..... */
+ /*098d:*/ 0xc0,0x00, /* ##.............. */
+ /*098f:*/ 0xc0,0x00, /* ##.............. */
+ /*0991:*/ 0x60,0x60, /* .##......##..... */
+ /*0993:*/ 0x70,0xe0, /* .###....###..... */
+ /*0995:*/ 0x3f,0xc0, /* ..########...... */
+ /*0997:*/ 0x0f,0x00, /* ....####........ */
+/* --- new character f (102) starting at offset 0x0999 --- */
+ /*0999:*/ 8, 6, 19, 1, 0, /* width and bbox (w,h,x,y) */
+ /*099e:*/ 0x1c, /* ...###.. */
+ /*099f:*/ 0x3c, /* ..####.. */
+ /*09a0:*/ 0x30, /* ..##.... */
+ /*09a1:*/ 0x30, /* ..##.... */
+ /*09a2:*/ 0x30, /* ..##.... */
+ /*09a3:*/ 0xfc, /* ######.. */
+ /*09a4:*/ 0xfc, /* ######.. */
+ /*09a5:*/ 0x30, /* ..##.... */
+ /*09a6:*/ 0x30, /* ..##.... */
+ /*09a7:*/ 0x30, /* ..##.... */
+ /*09a8:*/ 0x30, /* ..##.... */
+ /*09a9:*/ 0x30, /* ..##.... */
+ /*09aa:*/ 0x30, /* ..##.... */
+ /*09ab:*/ 0x30, /* ..##.... */
+ /*09ac:*/ 0x30, /* ..##.... */
+ /*09ad:*/ 0x30, /* ..##.... */
+ /*09ae:*/ 0x30, /* ..##.... */
+ /*09af:*/ 0x30, /* ..##.... */
+ /*09b0:*/ 0x30, /* ..##.... */
+/* --- new character g (103) starting at offset 0x09b1 --- */
+ /*09b1:*/ 14, 11, 19, 1, -5, /* width and bbox (w,h,x,y) */
+ /*09b6:*/ 0x1e,0x60, /* ...####..##..... */
+ /*09b8:*/ 0x3f,0x60, /* ..######.##..... */
+ /*09ba:*/ 0x71,0xe0, /* .###...####..... */
+ /*09bc:*/ 0x60,0xe0, /* .##.....###..... */
+ /*09be:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09c0:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09c2:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09c4:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09c6:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09c8:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09ca:*/ 0x60,0xe0, /* .##.....###..... */
+ /*09cc:*/ 0x71,0xe0, /* .###...####..... */
+ /*09ce:*/ 0x3f,0x60, /* ..######.##..... */
+ /*09d0:*/ 0x1e,0x60, /* ...####..##..... */
+ /*09d2:*/ 0x00,0x60, /* .........##..... */
+ /*09d4:*/ 0xc0,0x60, /* ##.......##..... */
+ /*09d6:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*09d8:*/ 0x7f,0xc0, /* .#########...... */
+ /*09da:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character h (104) starting at offset 0x09dc --- */
+ /*09dc:*/ 13, 10, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*09e1:*/ 0xc0,0x00, /* ##.............. */
+ /*09e3:*/ 0xc0,0x00, /* ##.............. */
+ /*09e5:*/ 0xc0,0x00, /* ##.............. */
+ /*09e7:*/ 0xc0,0x00, /* ##.............. */
+ /*09e9:*/ 0xc0,0x00, /* ##.............. */
+ /*09eb:*/ 0xce,0x00, /* ##..###......... */
+ /*09ed:*/ 0xdf,0x80, /* ##.######....... */
+ /*09ef:*/ 0xf1,0x80, /* ####...##....... */
+ /*09f1:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*09f3:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09f5:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09f7:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09f9:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09fb:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09fd:*/ 0xc0,0xc0, /* ##......##...... */
+ /*09ff:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0a01:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0a03:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0a05:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character i (105) starting at offset 0x0a07 --- */
+ /*0a07:*/ 6, 2, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a0c:*/ 0xc0, /* ##...... */
+ /*0a0d:*/ 0xc0, /* ##...... */
+ /*0a0e:*/ 0xc0, /* ##...... */
+ /*0a0f:*/ 0x00, /* ........ */
+ /*0a10:*/ 0x00, /* ........ */
+ /*0a11:*/ 0xc0, /* ##...... */
+ /*0a12:*/ 0xc0, /* ##...... */
+ /*0a13:*/ 0xc0, /* ##...... */
+ /*0a14:*/ 0xc0, /* ##...... */
+ /*0a15:*/ 0xc0, /* ##...... */
+ /*0a16:*/ 0xc0, /* ##...... */
+ /*0a17:*/ 0xc0, /* ##...... */
+ /*0a18:*/ 0xc0, /* ##...... */
+ /*0a19:*/ 0xc0, /* ##...... */
+ /*0a1a:*/ 0xc0, /* ##...... */
+ /*0a1b:*/ 0xc0, /* ##...... */
+ /*0a1c:*/ 0xc0, /* ##...... */
+ /*0a1d:*/ 0xc0, /* ##...... */
+ /*0a1e:*/ 0xc0, /* ##...... */
+/* --- new character j (106) starting at offset 0x0a1f --- */
+ /*0a1f:*/ 6, 4, 24, 0, -5, /* width and bbox (w,h,x,y) */
+ /*0a24:*/ 0x30, /* ..##.... */
+ /*0a25:*/ 0x30, /* ..##.... */
+ /*0a26:*/ 0x30, /* ..##.... */
+ /*0a27:*/ 0x00, /* ........ */
+ /*0a28:*/ 0x00, /* ........ */
+ /*0a29:*/ 0x30, /* ..##.... */
+ /*0a2a:*/ 0x30, /* ..##.... */
+ /*0a2b:*/ 0x30, /* ..##.... */
+ /*0a2c:*/ 0x30, /* ..##.... */
+ /*0a2d:*/ 0x30, /* ..##.... */
+ /*0a2e:*/ 0x30, /* ..##.... */
+ /*0a2f:*/ 0x30, /* ..##.... */
+ /*0a30:*/ 0x30, /* ..##.... */
+ /*0a31:*/ 0x30, /* ..##.... */
+ /*0a32:*/ 0x30, /* ..##.... */
+ /*0a33:*/ 0x30, /* ..##.... */
+ /*0a34:*/ 0x30, /* ..##.... */
+ /*0a35:*/ 0x30, /* ..##.... */
+ /*0a36:*/ 0x30, /* ..##.... */
+ /*0a37:*/ 0x30, /* ..##.... */
+ /*0a38:*/ 0x30, /* ..##.... */
+ /*0a39:*/ 0x30, /* ..##.... */
+ /*0a3a:*/ 0xf0, /* ####.... */
+ /*0a3b:*/ 0xe0, /* ###..... */
+/* --- new character k (107) starting at offset 0x0a3c --- */
+ /*0a3c:*/ 12, 10, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a41:*/ 0xc0,0x00, /* ##.............. */
+ /*0a43:*/ 0xc0,0x00, /* ##.............. */
+ /*0a45:*/ 0xc0,0x00, /* ##.............. */
+ /*0a47:*/ 0xc0,0x00, /* ##.............. */
+ /*0a49:*/ 0xc0,0x00, /* ##.............. */
+ /*0a4b:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0a4d:*/ 0xc3,0x80, /* ##....###....... */
+ /*0a4f:*/ 0xc7,0x00, /* ##...###........ */
+ /*0a51:*/ 0xce,0x00, /* ##..###......... */
+ /*0a53:*/ 0xdc,0x00, /* ##.###.......... */
+ /*0a55:*/ 0xf8,0x00, /* #####........... */
+ /*0a57:*/ 0xfc,0x00, /* ######.......... */
+ /*0a59:*/ 0xce,0x00, /* ##..###......... */
+ /*0a5b:*/ 0xc6,0x00, /* ##...##......... */
+ /*0a5d:*/ 0xc7,0x00, /* ##...###........ */
+ /*0a5f:*/ 0xc3,0x80, /* ##....###....... */
+ /*0a61:*/ 0xc1,0x80, /* ##.....##....... */
+ /*0a63:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*0a65:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character l (108) starting at offset 0x0a67 --- */
+ /*0a67:*/ 6, 2, 19, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a6c:*/ 0xc0, /* ##...... */
+ /*0a6d:*/ 0xc0, /* ##...... */
+ /*0a6e:*/ 0xc0, /* ##...... */
+ /*0a6f:*/ 0xc0, /* ##...... */
+ /*0a70:*/ 0xc0, /* ##...... */
+ /*0a71:*/ 0xc0, /* ##...... */
+ /*0a72:*/ 0xc0, /* ##...... */
+ /*0a73:*/ 0xc0, /* ##...... */
+ /*0a74:*/ 0xc0, /* ##...... */
+ /*0a75:*/ 0xc0, /* ##...... */
+ /*0a76:*/ 0xc0, /* ##...... */
+ /*0a77:*/ 0xc0, /* ##...... */
+ /*0a78:*/ 0xc0, /* ##...... */
+ /*0a79:*/ 0xc0, /* ##...... */
+ /*0a7a:*/ 0xc0, /* ##...... */
+ /*0a7b:*/ 0xc0, /* ##...... */
+ /*0a7c:*/ 0xc0, /* ##...... */
+ /*0a7d:*/ 0xc0, /* ##...... */
+ /*0a7e:*/ 0xc0, /* ##...... */
+/* --- new character m (109) starting at offset 0x0a7f --- */
+ /*0a7f:*/ 20, 16, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0a84:*/ 0xce,0x3c, /* ##..###...####.. */
+ /*0a86:*/ 0xff,0x7e, /* ########.######. */
+ /*0a88:*/ 0xe3,0xc7, /* ###...####...### */
+ /*0a8a:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a8c:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a8e:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a90:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a92:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a94:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a96:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a98:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a9a:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a9c:*/ 0xc1,0x83, /* ##.....##.....## */
+ /*0a9e:*/ 0xc1,0x83, /* ##.....##.....## */
+/* --- new character n (110) starting at offset 0x0aa0 --- */
+ /*0aa0:*/ 14, 10, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0aa5:*/ 0xce,0x00, /* ##..###......... */
+ /*0aa7:*/ 0xdf,0x80, /* ##.######....... */
+ /*0aa9:*/ 0xf1,0x80, /* ####...##....... */
+ /*0aab:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0aad:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0aaf:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0ab1:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0ab3:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0ab5:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0ab7:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0ab9:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0abb:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0abd:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0abf:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character o (111) starting at offset 0x0ac1 --- */
+ /*0ac1:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0ac6:*/ 0x1f,0x00, /* ...#####........ */
+ /*0ac8:*/ 0x3f,0x80, /* ..#######....... */
+ /*0aca:*/ 0x71,0xc0, /* .###...###...... */
+ /*0acc:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0ace:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ad0:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ad2:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ad4:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ad6:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ad8:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0ada:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0adc:*/ 0x71,0xc0, /* .###...###...... */
+ /*0ade:*/ 0x3f,0x80, /* ..#######....... */
+ /*0ae0:*/ 0x1f,0x00, /* ...#####........ */
+/* --- new character p (112) starting at offset 0x0ae2 --- */
+ /*0ae2:*/ 14, 11, 19, 2, -5, /* width and bbox (w,h,x,y) */
+ /*0ae7:*/ 0xcf,0x00, /* ##..####........ */
+ /*0ae9:*/ 0xdf,0x80, /* ##.######....... */
+ /*0aeb:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0aed:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0aef:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0af1:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0af3:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0af5:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0af7:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0af9:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0afb:*/ 0xe0,0xc0, /* ###.....##...... */
+ /*0afd:*/ 0xf1,0xc0, /* ####...###...... */
+ /*0aff:*/ 0xdf,0x80, /* ##.######....... */
+ /*0b01:*/ 0xcf,0x00, /* ##..####........ */
+ /*0b03:*/ 0xc0,0x00, /* ##.............. */
+ /*0b05:*/ 0xc0,0x00, /* ##.............. */
+ /*0b07:*/ 0xc0,0x00, /* ##.............. */
+ /*0b09:*/ 0xc0,0x00, /* ##.............. */
+ /*0b0b:*/ 0xc0,0x00, /* ##.............. */
+/* --- new character q (113) starting at offset 0x0b0d --- */
+ /*0b0d:*/ 14, 11, 19, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0b12:*/ 0x1e,0x60, /* ...####..##..... */
+ /*0b14:*/ 0x3f,0x60, /* ..######.##..... */
+ /*0b16:*/ 0x71,0xe0, /* .###...####..... */
+ /*0b18:*/ 0x60,0xe0, /* .##.....###..... */
+ /*0b1a:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b1c:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b1e:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b20:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b22:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b24:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0b26:*/ 0x60,0xe0, /* .##.....###..... */
+ /*0b28:*/ 0x71,0xe0, /* .###...####..... */
+ /*0b2a:*/ 0x3f,0x60, /* ..######.##..... */
+ /*0b2c:*/ 0x1e,0x60, /* ...####..##..... */
+ /*0b2e:*/ 0x00,0x60, /* .........##..... */
+ /*0b30:*/ 0x00,0x60, /* .........##..... */
+ /*0b32:*/ 0x00,0x60, /* .........##..... */
+ /*0b34:*/ 0x00,0x60, /* .........##..... */
+ /*0b36:*/ 0x00,0x60, /* .........##..... */
+/* --- new character r (114) starting at offset 0x0b38 --- */
+ /*0b38:*/ 9, 6, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0b3d:*/ 0xcc, /* ##..##.. */
+ /*0b3e:*/ 0xdc, /* ##.###.. */
+ /*0b3f:*/ 0xfc, /* ######.. */
+ /*0b40:*/ 0xe0, /* ###..... */
+ /*0b41:*/ 0xc0, /* ##...... */
+ /*0b42:*/ 0xc0, /* ##...... */
+ /*0b43:*/ 0xc0, /* ##...... */
+ /*0b44:*/ 0xc0, /* ##...... */
+ /*0b45:*/ 0xc0, /* ##...... */
+ /*0b46:*/ 0xc0, /* ##...... */
+ /*0b47:*/ 0xc0, /* ##...... */
+ /*0b48:*/ 0xc0, /* ##...... */
+ /*0b49:*/ 0xc0, /* ##...... */
+ /*0b4a:*/ 0xc0, /* ##...... */
+/* --- new character s (115) starting at offset 0x0b4b --- */
+ /*0b4b:*/ 12, 10, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0b50:*/ 0x3e,0x00, /* ..#####......... */
+ /*0b52:*/ 0x7f,0x80, /* .########....... */
+ /*0b54:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0b56:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b58:*/ 0xc0,0x00, /* ##.............. */
+ /*0b5a:*/ 0xf8,0x00, /* #####........... */
+ /*0b5c:*/ 0x7f,0x00, /* .#######........ */
+ /*0b5e:*/ 0x0f,0x80, /* ....#####....... */
+ /*0b60:*/ 0x01,0xc0, /* .......###...... */
+ /*0b62:*/ 0x00,0xc0, /* ........##...... */
+ /*0b64:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b66:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*0b68:*/ 0xff,0x80, /* #########....... */
+ /*0b6a:*/ 0x3f,0x00, /* ..######........ */
+/* --- new character t (116) starting at offset 0x0b6c --- */
+ /*0b6c:*/ 8, 6, 18, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0b71:*/ 0x30, /* ..##.... */
+ /*0b72:*/ 0x30, /* ..##.... */
+ /*0b73:*/ 0x30, /* ..##.... */
+ /*0b74:*/ 0x30, /* ..##.... */
+ /*0b75:*/ 0xfc, /* ######.. */
+ /*0b76:*/ 0xfc, /* ######.. */
+ /*0b77:*/ 0x30, /* ..##.... */
+ /*0b78:*/ 0x30, /* ..##.... */
+ /*0b79:*/ 0x30, /* ..##.... */
+ /*0b7a:*/ 0x30, /* ..##.... */
+ /*0b7b:*/ 0x30, /* ..##.... */
+ /*0b7c:*/ 0x30, /* ..##.... */
+ /*0b7d:*/ 0x30, /* ..##.... */
+ /*0b7e:*/ 0x30, /* ..##.... */
+ /*0b7f:*/ 0x30, /* ..##.... */
+ /*0b80:*/ 0x30, /* ..##.... */
+ /*0b81:*/ 0x3c, /* ..####.. */
+ /*0b82:*/ 0x1c, /* ...###.. */
+/* --- new character u (117) starting at offset 0x0b83 --- */
+ /*0b83:*/ 14, 10, 14, 2, 0, /* width and bbox (w,h,x,y) */
+ /*0b88:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b8a:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b8c:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b8e:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b90:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b92:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b94:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b96:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b98:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b9a:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0b9c:*/ 0xc1,0xc0, /* ##.....###...... */
+ /*0b9e:*/ 0x63,0xc0, /* .##...####...... */
+ /*0ba0:*/ 0x7e,0xc0, /* .######.##...... */
+ /*0ba2:*/ 0x1c,0xc0, /* ...###..##...... */
+/* --- new character v (118) starting at offset 0x0ba4 --- */
+ /*0ba4:*/ 13, 11, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0ba9:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0bab:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0bad:*/ 0xc0,0x60, /* ##.......##..... */
+ /*0baf:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0bb1:*/ 0x60,0xc0, /* .##.....##...... */
+ /*0bb3:*/ 0x71,0xc0, /* .###...###...... */
+ /*0bb5:*/ 0x31,0x80, /* ..##...##....... */
+ /*0bb7:*/ 0x31,0x80, /* ..##...##....... */
+ /*0bb9:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0bbb:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0bbd:*/ 0x1b,0x00, /* ...##.##........ */
+ /*0bbf:*/ 0x0e,0x00, /* ....###......... */
+ /*0bc1:*/ 0x0e,0x00, /* ....###......... */
+ /*0bc3:*/ 0x0e,0x00, /* ....###......... */
+/* --- new character w (119) starting at offset 0x0bc5 --- */
+ /*0bc5:*/ 18, 18, 14, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0bca:*/ 0xc0,0xc0,0xc0, /* ##......##......##...... */
+ /*0bcd:*/ 0xc0,0xc0,0xc0, /* ##......##......##...... */
+ /*0bd0:*/ 0x61,0xe1,0x80, /* .##....####....##....... */
+ /*0bd3:*/ 0x61,0xe1,0x80, /* .##....####....##....... */
+ /*0bd6:*/ 0x61,0xe1,0x80, /* .##....####....##....... */
+ /*0bd9:*/ 0x31,0x23,0x00, /* ..##...#..#...##........ */
+ /*0bdc:*/ 0x33,0x33,0x00, /* ..##..##..##..##........ */
+ /*0bdf:*/ 0x33,0x33,0x00, /* ..##..##..##..##........ */
+ /*0be2:*/ 0x1b,0x36,0x00, /* ...##.##..##.##......... */
+ /*0be5:*/ 0x1a,0x16,0x00, /* ...##.#....#.##......... */
+ /*0be8:*/ 0x1e,0x1e,0x00, /* ...####....####......... */
+ /*0beb:*/ 0x0e,0x1c,0x00, /* ....###....###.......... */
+ /*0bee:*/ 0x0c,0x0c,0x00, /* ....##......##.......... */
+ /*0bf1:*/ 0x0c,0x0c,0x00, /* ....##......##.......... */
+/* --- new character x (120) starting at offset 0x0bf4 --- */
+ /*0bf4:*/ 12, 10, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0bf9:*/ 0xc0,0xc0, /* ##......##...... */
+ /*0bfb:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0bfd:*/ 0x61,0x80, /* .##....##....... */
+ /*0bff:*/ 0x33,0x00, /* ..##..##........ */
+ /*0c01:*/ 0x3f,0x00, /* ..######........ */
+ /*0c03:*/ 0x1e,0x00, /* ...####......... */
+ /*0c05:*/ 0x0c,0x00, /* ....##.......... */
+ /*0c07:*/ 0x1e,0x00, /* ...####......... */
+ /*0c09:*/ 0x1e,0x00, /* ...####......... */
+ /*0c0b:*/ 0x33,0x00, /* ..##..##........ */
+ /*0c0d:*/ 0x73,0x80, /* .###..###....... */
+ /*0c0f:*/ 0x61,0x80, /* .##....##....... */
+ /*0c11:*/ 0xe1,0xc0, /* ###....###...... */
+ /*0c13:*/ 0xc0,0xc0, /* ##......##...... */
+/* --- new character y (121) starting at offset 0x0c15 --- */
+ /*0c15:*/ 13, 12, 19, 0, -5, /* width and bbox (w,h,x,y) */
+ /*0c1a:*/ 0xc0,0x30, /* ##........##.... */
+ /*0c1c:*/ 0xc0,0x30, /* ##........##.... */
+ /*0c1e:*/ 0x60,0x30, /* .##.......##.... */
+ /*0c20:*/ 0x70,0x60, /* .###.....##..... */
+ /*0c22:*/ 0x30,0x60, /* ..##.....##..... */
+ /*0c24:*/ 0x38,0xe0, /* ..###...###..... */
+ /*0c26:*/ 0x18,0xc0, /* ...##...##...... */
+ /*0c28:*/ 0x18,0xc0, /* ...##...##...... */
+ /*0c2a:*/ 0x0d,0x80, /* ....##.##....... */
+ /*0c2c:*/ 0x0d,0x80, /* ....##.##....... */
+ /*0c2e:*/ 0x07,0x80, /* .....####....... */
+ /*0c30:*/ 0x07,0x00, /* .....###........ */
+ /*0c32:*/ 0x03,0x00, /* ......##........ */
+ /*0c34:*/ 0x03,0x00, /* ......##........ */
+ /*0c36:*/ 0x06,0x00, /* .....##......... */
+ /*0c38:*/ 0x06,0x00, /* .....##......... */
+ /*0c3a:*/ 0x0c,0x00, /* ....##.......... */
+ /*0c3c:*/ 0x3c,0x00, /* ..####.......... */
+ /*0c3e:*/ 0x38,0x00, /* ..###........... */
+/* --- new character z (122) starting at offset 0x0c40 --- */
+ /*0c40:*/ 12, 10, 14, 1, 0, /* width and bbox (w,h,x,y) */
+ /*0c45:*/ 0xff,0xc0, /* ##########...... */
+ /*0c47:*/ 0xff,0xc0, /* ##########...... */
+ /*0c49:*/ 0x01,0x80, /* .......##....... */
+ /*0c4b:*/ 0x03,0x00, /* ......##........ */
+ /*0c4d:*/ 0x07,0x00, /* .....###........ */
+ /*0c4f:*/ 0x0e,0x00, /* ....###......... */
+ /*0c51:*/ 0x0c,0x00, /* ....##.......... */
+ /*0c53:*/ 0x1c,0x00, /* ...###.......... */
+ /*0c55:*/ 0x38,0x00, /* ..###........... */
+ /*0c57:*/ 0x30,0x00, /* ..##............ */
+ /*0c59:*/ 0x60,0x00, /* .##............. */
+ /*0c5b:*/ 0xe0,0x00, /* ###............. */
+ /*0c5d:*/ 0xff,0xc0, /* ##########...... */
+ /*0c5f:*/ 0xff,0xc0, /* ##########...... */
+/* --- new character braceleft (123) starting at offset 0x0c61 --- */
+ /*0c61:*/ 8, 6, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0c66:*/ 0x0c, /* ....##.. */
+ /*0c67:*/ 0x18, /* ...##... */
+ /*0c68:*/ 0x30, /* ..##.... */
+ /*0c69:*/ 0x30, /* ..##.... */
+ /*0c6a:*/ 0x30, /* ..##.... */
+ /*0c6b:*/ 0x30, /* ..##.... */
+ /*0c6c:*/ 0x30, /* ..##.... */
+ /*0c6d:*/ 0x30, /* ..##.... */
+ /*0c6e:*/ 0x30, /* ..##.... */
+ /*0c6f:*/ 0x30, /* ..##.... */
+ /*0c70:*/ 0x60, /* .##..... */
+ /*0c71:*/ 0xc0, /* ##...... */
+ /*0c72:*/ 0xc0, /* ##...... */
+ /*0c73:*/ 0x60, /* .##..... */
+ /*0c74:*/ 0x30, /* ..##.... */
+ /*0c75:*/ 0x30, /* ..##.... */
+ /*0c76:*/ 0x30, /* ..##.... */
+ /*0c77:*/ 0x30, /* ..##.... */
+ /*0c78:*/ 0x30, /* ..##.... */
+ /*0c79:*/ 0x30, /* ..##.... */
+ /*0c7a:*/ 0x30, /* ..##.... */
+ /*0c7b:*/ 0x30, /* ..##.... */
+ /*0c7c:*/ 0x18, /* ...##... */
+ /*0c7d:*/ 0x0c, /* ....##.. */
+/* --- new character bar (124) starting at offset 0x0c7e --- */
+ /*0c7e:*/ 6, 2, 24, 2, -5, /* width and bbox (w,h,x,y) */
+ /*0c83:*/ 0xc0, /* ##...... */
+ /*0c84:*/ 0xc0, /* ##...... */
+ /*0c85:*/ 0xc0, /* ##...... */
+ /*0c86:*/ 0xc0, /* ##...... */
+ /*0c87:*/ 0xc0, /* ##...... */
+ /*0c88:*/ 0xc0, /* ##...... */
+ /*0c89:*/ 0xc0, /* ##...... */
+ /*0c8a:*/ 0xc0, /* ##...... */
+ /*0c8b:*/ 0xc0, /* ##...... */
+ /*0c8c:*/ 0xc0, /* ##...... */
+ /*0c8d:*/ 0xc0, /* ##...... */
+ /*0c8e:*/ 0xc0, /* ##...... */
+ /*0c8f:*/ 0xc0, /* ##...... */
+ /*0c90:*/ 0xc0, /* ##...... */
+ /*0c91:*/ 0xc0, /* ##...... */
+ /*0c92:*/ 0xc0, /* ##...... */
+ /*0c93:*/ 0xc0, /* ##...... */
+ /*0c94:*/ 0xc0, /* ##...... */
+ /*0c95:*/ 0xc0, /* ##...... */
+ /*0c96:*/ 0xc0, /* ##...... */
+ /*0c97:*/ 0xc0, /* ##...... */
+ /*0c98:*/ 0xc0, /* ##...... */
+ /*0c99:*/ 0xc0, /* ##...... */
+ /*0c9a:*/ 0xc0, /* ##...... */
+/* --- new character braceright (125) starting at offset 0x0c9b --- */
+ /*0c9b:*/ 8, 6, 24, 1, -5, /* width and bbox (w,h,x,y) */
+ /*0ca0:*/ 0xc0, /* ##...... */
+ /*0ca1:*/ 0x60, /* .##..... */
+ /*0ca2:*/ 0x30, /* ..##.... */
+ /*0ca3:*/ 0x30, /* ..##.... */
+ /*0ca4:*/ 0x30, /* ..##.... */
+ /*0ca5:*/ 0x30, /* ..##.... */
+ /*0ca6:*/ 0x30, /* ..##.... */
+ /*0ca7:*/ 0x30, /* ..##.... */
+ /*0ca8:*/ 0x30, /* ..##.... */
+ /*0ca9:*/ 0x30, /* ..##.... */
+ /*0caa:*/ 0x18, /* ...##... */
+ /*0cab:*/ 0x0c, /* ....##.. */
+ /*0cac:*/ 0x0c, /* ....##.. */
+ /*0cad:*/ 0x18, /* ...##... */
+ /*0cae:*/ 0x30, /* ..##.... */
+ /*0caf:*/ 0x30, /* ..##.... */
+ /*0cb0:*/ 0x30, /* ..##.... */
+ /*0cb1:*/ 0x30, /* ..##.... */
+ /*0cb2:*/ 0x30, /* ..##.... */
+ /*0cb3:*/ 0x30, /* ..##.... */
+ /*0cb4:*/ 0x30, /* ..##.... */
+ /*0cb5:*/ 0x30, /* ..##.... */
+ /*0cb6:*/ 0x60, /* .##..... */
+ /*0cb7:*/ 0xc0, /* ##...... */
+/* --- new character asciitilde (126) starting at offset 0x0cb8 --- */
+ /*0cb8:*/ 14, 10, 4, 2, 5, /* width and bbox (w,h,x,y) */
+ /*0cbd:*/ 0x70,0xc0, /* .###....##...... */
+ /*0cbf:*/ 0xfc,0xc0, /* ######..##...... */
+ /*0cc1:*/ 0xcf,0xc0, /* ##..######...... */
+ /*0cc3:*/ 0xc3,0x80, /* ##....###....... */
+};
+static const uint16_t font_helvR24_offsets[] = {
+0x0000 /* space */,
+ 0x0006 /* exclam */,
+ 0x001e /* quotedbl */,
+ 0x0029 /* numbersign */,
+ 0x0050 /* dollar */,
+ 0x007f /* percent */,
+ 0x00ba /* ampersand */,
+ 0x00e3 /* quotesingle */,
+ 0x00ee /* parenleft */,
+ 0x010b /* parenright */,
+ 0x0128 /* asterisk */,
+ 0x0134 /* plus */,
+ 0x0151 /* comma */,
+ 0x015c /* hyphen */,
+ 0x0163 /* period */,
+ 0x016b /* slash */,
+ 0x0183 /* zero */,
+ 0x01ac /* one */,
+ 0x01c3 /* two */,
+ 0x01ec /* three */,
+ 0x0215 /* four */,
+ 0x023e /* five */,
+ 0x0267 /* six */,
+ 0x0290 /* seven */,
+ 0x02b9 /* eight */,
+ 0x02e2 /* nine */,
+ 0x030b /* colon */,
+ 0x031e /* semicolon */,
+ 0x0334 /* less */,
+ 0x0351 /* equal */,
+ 0x0362 /* greater */,
+ 0x037f /* question */,
+ 0x03aa /* at */,
+ 0x03f4 /* A */,
+ 0x041f /* B */,
+ 0x044a /* C */,
+ 0x0475 /* D */,
+ 0x04a0 /* E */,
+ 0x04cb /* F */,
+ 0x04f6 /* G */,
+ 0x0521 /* H */,
+ 0x054c /* I */,
+ 0x0564 /* J */,
+ 0x058f /* K */,
+ 0x05ba /* L */,
+ 0x05e5 /* M */,
+ 0x0623 /* N */,
+ 0x064e /* O */,
+ 0x0679 /* P */,
+ 0x06a4 /* Q */,
+ 0x06cf /* R */,
+ 0x06fa /* S */,
+ 0x0725 /* T */,
+ 0x0750 /* U */,
+ 0x077b /* V */,
+ 0x07a6 /* W */,
+ 0x07e4 /* X */,
+ 0x080f /* Y */,
+ 0x083a /* Z */,
+ 0x0865 /* bracketleft */,
+ 0x0882 /* backslash */,
+ 0x089a /* bracketright */,
+ 0x08b7 /* asciicircum */,
+ 0x08ce /* underscore */,
+ 0x08d7 /* grave */,
+ 0x08e0 /* a */,
+ 0x0901 /* b */,
+ 0x092c /* c */,
+ 0x094d /* d */,
+ 0x0978 /* e */,
+ 0x0999 /* f */,
+ 0x09b1 /* g */,
+ 0x09dc /* h */,
+ 0x0a07 /* i */,
+ 0x0a1f /* j */,
+ 0x0a3c /* k */,
+ 0x0a67 /* l */,
+ 0x0a7f /* m */,
+ 0x0aa0 /* n */,
+ 0x0ac1 /* o */,
+ 0x0ae2 /* p */,
+ 0x0b0d /* q */,
+ 0x0b38 /* r */,
+ 0x0b4b /* s */,
+ 0x0b6c /* t */,
+ 0x0b83 /* u */,
+ 0x0ba4 /* v */,
+ 0x0bc5 /* w */,
+ 0x0bf4 /* x */,
+ 0x0c15 /* y */,
+ 0x0c40 /* z */,
+ 0x0c61 /* braceleft */,
+ 0x0c7e /* bar */,
+ 0x0c9b /* braceright */,
+ 0x0cb8 /* asciitilde */,
+ 0xffff /* (no glyph) */
+};
+const struct fb_font font_helvR24 = {
+ .height = 27,
+ .ascent = 22,
+ .firstchar = 32, /* space */
+ .lastchar = 127, /* ? */
+ .chardata = font_helvR24_data,
+ .charoffs = font_helvR24_offsets,
+};
diff --git a/src/target/firmware/fb/symbols.c b/src/target/firmware/fb/symbols.c
new file mode 100644
index 00000000..e9eab82a
--- /dev/null
+++ b/src/target/firmware/fb/symbols.c
@@ -0,0 +1,113 @@
+#include <fb/font.h>
+static const uint8_t font_symbols_data[] = {
+/* @ battery - */
+ /*0000:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0005:*/ 0x60, /* .##..... */
+ /*0006:*/ 0x40, /* .#...... */
+ /*0007:*/ 0x40, /* .#...... */
+ /*0008:*/ 0x40, /* .#...... */
+ /*0009:*/ 0x40, /* .#...... */
+ /*000a:*/ 0x40, /* .#...... */
+ /*000b:*/ 0x40, /* .#...... */
+ /*000c:*/ 0x60, /* .##..... */
+/* A battery empty */
+ /*000d:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0012:*/ 0xe0, /* ###..... */
+ /*0013:*/ 0x00, /* ........ */
+ /*0014:*/ 0x00, /* ........ */
+ /*0015:*/ 0x00, /* ........ */
+ /*0016:*/ 0x00, /* ........ */
+ /*0017:*/ 0x00, /* ........ */
+ /*0018:*/ 0x00, /* ........ */
+ /*0019:*/ 0xe0, /* ###..... */
+/* B battery full */
+ /*001a:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*001f:*/ 0xe0, /* ###..... */
+ /*0020:*/ 0x00, /* ........ */
+ /*0021:*/ 0xc0, /* ##...... */
+ /*0022:*/ 0xc0, /* ##...... */
+ /*0023:*/ 0xc0, /* ##...... */
+ /*0024:*/ 0xc0, /* ##...... */
+ /*0025:*/ 0x00, /* ........ */
+ /*0026:*/ 0xe0, /* ###..... */
+/* C battery + */
+ /*0027:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*002c:*/ 0x80, /* #....... */
+ /*002d:*/ 0x80, /* #....... */
+ /*002e:*/ 0xc0, /* ##...... */
+ /*002f:*/ 0xc0, /* ##...... */
+ /*0030:*/ 0xc0, /* ##...... */
+ /*0031:*/ 0xc0, /* ##...... */
+ /*0032:*/ 0x80, /* #....... */
+ /*0033:*/ 0x80, /* #....... */
+/* D radiation left */
+ /*0034:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0039:*/ 0x20, /* ..#..... */
+ /*003a:*/ 0x40, /* .#...... */
+ /*003b:*/ 0x20, /* ..#..... */
+ /*003c:*/ 0x00, /* ........ */
+ /*003d:*/ 0x00, /* ........ */
+ /*003e:*/ 0x00, /* ........ */
+ /*003f:*/ 0x00, /* ........ */
+ /*0040:*/ 0x00, /* ........ */
+/* E tower */
+ /*0041:*/ 5, 5, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0046:*/ 0x20, /* ..#..... */
+ /*0047:*/ 0x50, /* .#.#.... */
+ /*0048:*/ 0x20, /* ..#..... */
+ /*0049:*/ 0x20, /* ..#..... */
+ /*004a:*/ 0x50, /* .#.#.... */
+ /*004b:*/ 0x50, /* .#.#.... */
+ /*004c:*/ 0x88, /* #...#... */
+ /*004d:*/ 0xf8, /* #####... */
+/* F radiation right */
+ /*004e:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0053:*/ 0x80, /* #....... */
+ /*0054:*/ 0x40, /* .#...... */
+ /*0055:*/ 0x80, /* #....... */
+ /*0056:*/ 0x00, /* ........ */
+ /*0057:*/ 0x00, /* ........ */
+ /*0058:*/ 0x00, /* ........ */
+ /*0059:*/ 0x00, /* ........ */
+ /*005a:*/ 0x00, /* ........ */
+/* G no radiation */
+ /*005b:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*0060:*/ 0x00, /* ........ */
+ /*0061:*/ 0x00, /* ........ */
+ /*0062:*/ 0x00, /* ........ */
+ /*0063:*/ 0x00, /* ........ */
+ /*0064:*/ 0x00, /* ........ */
+ /*0065:*/ 0x00, /* ........ */
+ /*0066:*/ 0x00, /* ........ */
+ /*0067:*/ 0x00, /* ........ */
+/* H battery loaded */
+ /*0068:*/ 3, 3, 8, 0, 0, /* width and bbox (w,h,x,y) */
+ /*006d:*/ 0xe0, /* ###..... */
+ /*006e:*/ 0x00, /* ........ */
+ /*006f:*/ 0xe0, /* ###..... */
+ /*0070:*/ 0xe0, /* ###..... */
+ /*0071:*/ 0xe0, /* ###..... */
+ /*0072:*/ 0xe0, /* ###..... */
+ /*0073:*/ 0x00, /* ........ */
+ /*0074:*/ 0xe0, /* ###..... */
+};
+static const uint16_t font_symbols_offsets[] = {
+ 0x0000 /* '@' */,
+ 0x000d /* 'A' */,
+ 0x001a /* 'B' */,
+ 0x0027 /* 'C' */,
+ 0x0034 /* 'D' */,
+ 0x0041 /* 'E' */,
+ 0x004e /* 'F' */,
+ 0x005b /* 'G' */,
+ 0x0068 /* 'H' */,
+};
+const struct fb_font font_symbols = {
+ .height = 8,
+ .ascent = 8,
+ .firstchar = 64, /* '@' */
+ .lastchar = 72,
+ .chardata = font_symbols_data,
+ .charoffs = font_symbols_offsets,
+};
+
diff --git a/src/target/firmware/include/abb/twl3025.h b/src/target/firmware/include/abb/twl3025.h
index 2cd35a58..36406449 100644..100755
--- a/src/target/firmware/include/abb/twl3025.h
+++ b/src/target/firmware/include/abb/twl3025.h
@@ -69,6 +69,56 @@ enum twl3025_reg {
};
#define BULDATA2 BULDATA1
+/* available ADC inputs on IOTA */
+enum twl3025_dac_inputs {/* === Signal ============================= */
+ MADC_VBAT=0, /* battery voltage / 4 */
+ MADC_VCHG=1, /* charger voltage / 5 */
+ MADC_ICHG=2, /* I-sense amp or CHGREG DAC output */
+ MADC_VBKP=3, /* backup battery voltage / 4 */
+ MADC_ADIN1=4, /* VADCID, sense battery type, not used */
+ MADC_ADIN2=5, /* Temperature sensor in Battery */
+ MADC_ADIN3=6, /* Mode_detect: sense 2.5mm jack insertion */
+ MADC_ADIN4=7, /* RITA: TEMP_SEN */
+ MADC_NUM_CHANNELS=8
+};
+
+enum madcstat_reg_bits { /* monitoring ADC status register */
+ ADCBUSY = 0x01 /* if set, a conversion is currently going on */
+};
+
+/* BCICTL1 register bits */
+enum bcictl1_reg_bits {
+ MESBAT = 1<<0, /* connect resistive divider for bat voltage */
+ DACNBUF = 1<<1, /* bypass DAC buffer */
+ THSENS0 = 1<<3, /* thermal sensor bias current (ADIN2), bit 0 */
+ THSENS1 = 1<<4, /* "" bit 1 */
+ THSENS2 = 1<<5, /* "" bit 2 */
+ THEN = 1<<6, /* enable thermal sensor bias current (ADIN1) */
+ TYPEN = 1<<7 /* enable bias current for battery type reading */
+};
+
+/* BCICTL1 register bits */
+enum bcictl2_reg_bits {
+ CHEN = 1<<0, /* enable charger */
+ CHIV = 1<<1, /* 1=constant current, 0=constant voltage */
+ CHBPASSPA=1<<2, /* full charging of the battery during pulse radio */
+ CLIB = 1<<3, /* calibrate I-to-V amp (short input pins) */
+ CHDISPA = 1<<4, /* disabel charging during pulse radio (???) */
+ LEDC = 1<<5, /* enable LED during charge */
+ CGAIN4 = 1<<6, /* if set, I-to-V amp gain is reduced from 10 to 4 */
+ PREOFF = 1<<7 /* disable battery precharge */
+};
+
+enum vrpcsts_reg_bits {
+ ONBSTS = 1<<0, /* button push switched on the mobile */
+ ONRSTS = 1<<1, /* RPWON terminal switched on the mobile */
+ ITWSTS = 1<<2, /* ITWAKEUP terminal switched on the mobile */
+ CHGSTS = 1<<3, /* plugging in charger has switched on the mobile */
+ ONREFLT= 1<<4, /* state of PWON terminal after debouncing */
+ ONMRFLT= 1<<5, /* state of RPWON terminal after debouncing */
+ CHGPRES= 1<<6 /* charger is connected */
+};
+
enum togbr2_bits {
TOGBR2_KEEPR = (1 << 0), /* Clear KEEPON bit */
TOGBR2_KEEPS = (1 << 1), /* Set KEEPON bit */
diff --git a/src/target/firmware/include/battery/battery.h b/src/target/firmware/include/battery/battery.h
new file mode 100755
index 00000000..4270d7c6
--- /dev/null
+++ b/src/target/firmware/include/battery/battery.h
@@ -0,0 +1,37 @@
+#ifndef _BATTERY_BATTERY_H
+#define _BATTERY_BATTERY_H
+
+/* User-visible state of the battery charger.
+ *
+ * If CHG_CONNECTED, power is externally supplied to the mobile.
+ *
+ * If CHG_ENABLED, the charger will try to provide charge
+ * to the battery if needed, but this state might be switchable?
+ *
+ * BATTERY_CHARGING: Battery is not full, so a significant charging
+ * current (not trickle charge) is supplied.
+ *
+ * BATTERY_FAILURE: Overtemperature, overvoltage, ... if this bit
+ * is set, charging should be inhibited.
+ */
+
+
+enum battery_flags {
+ BATTERY_CHG_CONNECTED = 1 << 0, /* AC adapter is connected */
+ BATTERY_CHG_ENABLED = 1 << 1, /* if needed charger could charge */
+ BATTERY_CHARGING = 1 << 2, /* charger is actively charging */
+ BATTERY_FAILURE = 1 << 3, /* problem exists preventing charge */
+};
+
+struct battery_info {
+ enum battery_flags flags;
+ int charger_volt_mV; /* charger connection voltage */
+ int bat_volt_mV; /* battery terminal voltage */
+ int bat_chg_curr_mA; /* battery charging current */
+ int battery_percent; /* 0(empty) .. 100(full) */
+};
+
+extern struct battery_info
+battery_info;
+
+#endif
diff --git a/src/target/firmware/include/battery/compal_e88.h b/src/target/firmware/include/battery/compal_e88.h
new file mode 100644
index 00000000..c6c96f39
--- /dev/null
+++ b/src/target/firmware/include/battery/compal_e88.h
@@ -0,0 +1,15 @@
+#ifndef _BATTERY_COMPAL_E88_H
+#define _BATTERY_COMPAL_E88_H
+
+#include <stdint.h>
+#include <abb/twl3025.h>
+
+/* initialize the charger control loop on C123 */
+
+extern void
+battery_compal_e88_init();
+
+extern uint16_t
+compal_e88_madc[MADC_NUM_CHANNELS];
+
+#endif
diff --git a/src/target/firmware/include/comm/timer.h b/src/target/firmware/include/comm/timer.h
index db7d1a55..1996f666 100644
--- a/src/target/firmware/include/comm/timer.h
+++ b/src/target/firmware/include/comm/timer.h
@@ -25,19 +25,21 @@
#include <osmocom/core/linuxlist.h>
+#define HZ 100
+
/**
* Timer management:
* - Create a struct osmo_timer_list
- * - Fill out timeout and use add_timer or
- * use schedule_timer to schedule a timer in
+ * - Fill out timeout and use osmo_timer_add or
+ * use osmo_timer_schedule to schedule a timer in
* x seconds and microseconds from now...
- * - Use del_timer to remove the timer
+ * - Use osmo_timer_del to remove the timer
*
* Internally:
* - We hook into select.c to give a timeval of the
* nearest timer. On already passed timers we give
* it a 0 to immediately fire after the select
- * - update_timers will call the callbacks and remove
+ * - osmo_timers_update will call the callbacks and remove
* the timers.
*
*/
@@ -58,18 +60,17 @@ extern unsigned long volatile jiffies;
/**
* timer management
*/
-void add_timer(struct osmo_timer_list *timer);
-void schedule_timer(struct osmo_timer_list *timer, int miliseconds);
-void del_timer(struct osmo_timer_list *timer);
-int timer_pending(struct osmo_timer_list *timer);
+void osmo_timer_add(struct osmo_timer_list *timer);
+void osmo_timer_schedule(struct osmo_timer_list *timer, int miliseconds);
+void osmo_timer_del(struct osmo_timer_list *timer);
+int osmo_timer_pending(struct osmo_timer_list *timer);
/**
* internal timer list management
*/
-void prepare_timers(void);
-int update_timers(void);
-int timer_check(void);
+int osmo_timers_update(void);
+int osmo_timers_check(void);
void timer_init(void);
diff --git a/src/target/firmware/include/display.h b/src/target/firmware/include/display.h
deleted file mode 100644
index 3941b8cb..00000000
--- a/src/target/firmware/include/display.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef _DISPLAY_DRIVER_H
-#define _DISPLAY_DRIVER_H
-
-enum display_attr {
- DISP_ATTR_INVERT = 0x0001,
-};
-
-struct display_driver {
- char *name;
- void (*init)(void);
- void (*set_attr)(unsigned long attr);
- void (*unset_attr)(unsigned long attr);
- void (*clrscr)(void);
- void (*goto_xy)(int xpos, int ypos);
- void (*set_color)(int fgcolor, int bgcolor);
- int (*putc)(unsigned char c);
- int (*puts)(const char *str);
-};
-
-extern struct display_driver *display;
-
-static inline void display_init(void)
-{
- display->init();
-}
-static inline void display_set_attr(unsigned long attr)
-{
- display->set_attr(attr);
-}
-static inline void display_unset_attr(unsigned long attr)
-{
- display->unset_attr(attr);
-}
-static inline void display_clrscr(void)
-{
- display->clrscr();
-}
-static inline int display_putchar(unsigned char c)
-{
- return display->putc(c);
-}
-int display_puts(const char *s);
-
-extern const struct display_driver st7558_display;
-extern const struct display_driver ssd1783_display;
-extern const struct display_driver ssd1963_display;
-extern const struct display_driver td014_display;
-
-#endif
diff --git a/src/target/firmware/include/display/ssd1783.h b/src/target/firmware/include/display/ssd1783.h
deleted file mode 100644
index c72eebac..00000000
--- a/src/target/firmware/include/display/ssd1783.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef _SSD1783_H
-#define _SSD1783_H
-
-/* Some basic colors */
-#define RED 0x0f00
-#define GREEN 0x00f0
-#define BLUE 0x000f
-#define YELLOW 0x0ff0
-#define MAGENTA 0x0f0f
-#define CYAN 0x00ff
-#define BLACK 0x0000
-#define WHITE 0x0fff
-
-/* Epson S1D15G10D08B000 commandset */
-#define CMD_DISON 0xaf // Display on
-#define CMD_DISOFF 0xae // Display off
-#define CMD_DISNOR 0xa6 // Normal display
-#define CMD_DISINV 0xa7 // Inverse display
-#define CMD_COMSCN 0xbb // Common scan direction
-#define CMD_DISCTL 0xca // Display control
-#define CMD_SLPIN 0x95 // Sleep in
-#define CMD_SLPOUT 0x94 // Sleep out
-#define CMD_PASET 0x75 // Page address set
-#define CMD_CASET 0x15 // Column address set
-#define CMD_DATCTL 0xbc // Data scan direction, etc.
-#define CMD_RGBSET8 0xce // 256-color position set
-#define CMD_RAMWR 0x5c // Writing to memory
-#define CMD_RAMRD 0x5d // Reading from memory
-#define CMD_PTLIN 0xa8 // Partial display in
-#define CMD_PTLOUT 0xa9 // Partial display out
-#define CMD_RMWIN 0xe0 // Read and modify write
-#define CMD_RMWOUT 0xee // End
-#define CMD_ASCSE 0xaa // Area scroll set
-#define CMD_SCSTART 0xab // Scroll start set
-#define CMD_OSCON 0xd1 // Internal oscillation on
-#define CMD_OSCOFF 0xd2 // Internal oscillation off
-#define CMD_PWRCTR 0x20 // Power control
-#define CMD_VOLCTR 0x81 // Electronic volume control
-#define CMD_VOLUP 0xd6 // Increment electronic control by 1
-#define CMD_VOLDOWN 0xd7 // Decrement electronic control by 1
-#define CMD_TMPGRD 0x82 // Temperature gradient set
-#define CMD_EPCTIN 0xcd // Control EEPROM
-#define CMD_EPCOUT 0xcc // Cancel EEPROM control
-#define CMD_EPMWR 0xfc // Write into EEPROM
-#define CMD_EPMRD 0xfd // Read from EEPROM
-#define CMD_EPSRRD1 0x7c // Read register 1
-#define CMD_EPSRRD2 0x7d // Read register 2
-#define CMD_NOP 0x25 // NOP instruction
-
-/* Extended SSD1783 commandset, partly (also has HW graphic functionalities) */
-#define CMD_BIASSET 0xfb // Set bias ratio
-#define CMD_FREQSET 0xf2 // Set frequency and n-line inversion
-#define CMD_RESCMD 0xa2 // reserved command
-#define CMD_PWMSEL 0xf7 // Select PWM/FRC, Full/8 color mode
-
-#endif
diff --git a/src/target/firmware/include/fb/fb_bw8.h b/src/target/firmware/include/fb/fb_bw8.h
new file mode 100644
index 00000000..c77fa71f
--- /dev/null
+++ b/src/target/firmware/include/fb/fb_bw8.h
@@ -0,0 +1,51 @@
+#ifndef FB_BW8_H
+#define FB_BW8_H
+
+/* 8bit monochrome framebuffer, organized with 8 stacked pixels
+ per byte, backed by local memory. fb_bw8.c lists functions that
+ are common to simmilar organized displays. */
+
+/*
+ Sketch of Memory Layout
+ Left Upper Corner of Display
+
+ col0 col2
+ col1
+ +-------------
+ 1st row: | A0 B0 C0
+ 2nd row: | A1 B1 C1
+ ...
+ 7th row: | A6 B6 C6
+ 8th row: | A7 B7 C7
+ 9th row: | Q0 R0 S0
+ 10th row: | Q1 R1 S1 ...
+ ...
+
+ Backing store (and internal display memory?) looks like...
+
+ uint8_t mem[] = { A, B, C, .... Q, R, S, ... }
+
+ We work on a in-memory copy of the framebuffer and only
+ update the physical display on demand. The damage window
+ has two corners, left upper inclusive x1,y1 and right
+ lower x2,y2 exclusive. So dirty pixels are defined to
+ be x1 <= x_pixel < x2 and y1 <= y_pixel < y2.
+*/
+
+/* data specific to a bw8-type framebuffer as described above */
+
+struct fb_bw8 {
+ uint8_t *mem; /* set to backingstore memory */
+ uint16_t damage_x1,damage_y1; /* current damage window, ul */
+ uint16_t damage_x2,damage_y2; /* current damage window, lr */
+};
+
+extern struct fb_bw8 *fb_bw8; /* symbol defined by the specific LCD driver */
+
+extern void fb_bw8_clear();
+extern void fb_bw8_boxto(uint16_t x,uint16_t y); /* draw a box from cursor to x,y */
+extern void fb_bw8_lineto(uint16_t x,uint16_t y); /* draw a line from cursor to x,y */
+
+extern int fb_bw8_putstr(char *str,int maxwidth);
+
+#endif
diff --git a/src/target/firmware/include/fb/fb_rgb332.h b/src/target/firmware/include/fb/fb_rgb332.h
new file mode 100644
index 00000000..4df44e4e
--- /dev/null
+++ b/src/target/firmware/include/fb/fb_rgb332.h
@@ -0,0 +1,47 @@
+#ifndef FB_RGB332_H
+#define FB_RGB332_H
+
+/* RGB framebuffer with 1 byte per pixel, bits mapped as RRRGGGBB */
+
+struct fb_rgb332 {
+ uint8_t *mem; /* set to backingstore memory */
+ uint16_t damage_x1,damage_y1; /* current damage window, ul (incl) */
+ uint16_t damage_x2,damage_y2; /* current damage window, lr (excl) */
+};
+
+extern void fb_rgb332_clear();
+
+/* draw a box from cursor to x,y */
+extern void fb_rgb332_boxto(uint16_t x,uint16_t y);
+/* draw a line from cursor to x,y */
+extern void fb_rgb332_lineto(uint16_t x,uint16_t y);
+
+/* put string str onto framebuffer with line (bottom
+ left pixel of, e.g. "m") starting at cursor.
+ Maximum width consumed is maxwidth, actual width
+ needed is returned */
+extern int fb_rgb332_putstr(char *str,int maxwidth);
+
+extern struct fb_rgb332 *fb_rgb332;
+
+/* this convenience function can be used if you choose to
+ * back a RGB565 display with a RGB332 framebuffer to conserve
+ * ARM memory. It converts a rgb332 value to rgb565 as indicated
+ * in the comments. */
+
+static inline uint16_t
+rgb332_to_565(uint8_t rgb332){
+
+ uint8_t red = (rgb332 & 0xe0) >> 5 ; // rrr. .... -> .... .rrr
+ uint8_t green = ((rgb332 & 0x1c) >> 2); // ...g gg.. -> .... .ggg
+ uint8_t blue = rgb332 & 0x03; // .... ..bb -> .... ..bb
+
+ red = (red << 2) | (red >> 1); /* .....210 -> ...21021 */
+ green = (green << 3) | (green); /* .....210 -> ..210210 */
+ blue = (blue << 3) | (blue << 1) | (blue >> 1); /* ......10 -> ...10101 */
+
+ /* rrrrrggg gggbbbbb */
+ return (red << 11) | (green << 5) | blue;
+}
+
+#endif
diff --git a/src/target/firmware/include/fb/font.h b/src/target/firmware/include/fb/font.h
new file mode 100644
index 00000000..9dee8ffb
--- /dev/null
+++ b/src/target/firmware/include/fb/font.h
@@ -0,0 +1,82 @@
+#ifndef _FB_FONT_H
+#define _FB_FONT_H
+
+#include <stdint.h>
+#include <unistd.h>
+
+/*
+ Example:
+ Font Helvetica 14
+
+
+ Character W ('X' and '.' is the character font data)
+
+ X.....X......&...
+ X.....X......X...
+ X....X.X.....X...
+ .X...X.X....X....
+ .X...X.X....X....
+ .X...X.X....X....
+ ..X.X....X.X.....
+ ..X.X....X.X.....
+ ..X.X....X.X.....
+ ...X......X......
+ @%..X......X...$..
+ <---dwidth---->
+
+ @ is the cursor position (origin) for this character
+ $ is the cursor position (origin) for the next character
+ % is the character boundingbox origin,
+ & is the character boundingbox top right corner
+
+ */
+
+/* data for char c is found by getting the index into the
+ chardata array from the charoffs array.
+
+ if charoffs[c] == FB_FONT_NOCHAR, then this glyph does
+ not exist! Better use the convenience function fb_font_get_char below! */
+
+#define FB_FONT_NOCHAR 0xffff
+
+struct fb_font {
+ int8_t height; /* total height of font */
+ int8_t ascent; /* topmost pixel is "ascend" above
+ current cursor position y */
+ uint8_t firstchar,lastchar; /* range of characters in font (iso8859-1) */
+ uint8_t const *chardata;
+ uint16_t const *charoffs; /* byte offsets relative to chardata */
+ uint8_t const *widths; /* widths for characters */
+};
+
+struct fb_char {
+ int8_t width;
+ int8_t bbox_w,bbox_h,bbox_x,bbox_y;
+ uint8_t data[0];
+};
+
+/* there are currently 6 fonts available, Helvetica 8, 14, 24 point
+ in bold and regular shapes. The following enum has to match the
+ order of the array fb_fonts in framebuffer.c!
+*/
+
+enum fb_font_id {
+// FB_FONT_4X6,
+// FB_FONT_5X8,
+ FB_FONT_HELVR08,
+// FB_FONT_HELVR14
+// FB_FONT_HELVR24,
+// FB_FONT_HELVB08,
+ FB_FONT_HELVB14,
+// FB_FONT_HELVB24,
+ FB_FONT_C64,
+ FB_FONT_SYMBOLS,
+};
+
+extern const struct fb_font *fb_fonts[]; // note: has to match fb_font_id enum!
+
+extern const struct fb_char *
+fb_font_get_char(const struct fb_font *fnt,unsigned char c);
+
+#endif
+
diff --git a/src/target/firmware/include/fb/framebuffer.h b/src/target/firmware/include/fb/framebuffer.h
new file mode 100644
index 00000000..e765b36d
--- /dev/null
+++ b/src/target/firmware/include/fb/framebuffer.h
@@ -0,0 +1,128 @@
+#ifndef _FB_FRAMEBUFFER_H
+#define _FB_FRAMEBUFFER_H
+
+#include <fb/font.h>
+#include <stdint.h>
+
+/* color is encoded as <special><red><green><blue> */
+/* if a color is "special", then the RGB components most likely
+ don't make sense. Use "special" colours when you have to
+ mask out bits with transparency or you have to encode
+ colours in a fixed color palette... */
+
+#define FB_COLOR_WHITE 0x00ffffffU
+#define FB_COLOR_BLACK 0x00000000U
+#define FB_COLOR_TRANSP 0x01ffffffU
+
+#define FB_COLOR_RGB(r,g,b) ((((r) & 0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))
+#define FB_COLOR_RED FB_COLOR_RGB(0xff,0x00,0x00)
+#define FB_COLOR_GREEN FB_COLOR_RGB(0x00,0xff,0x00)
+#define FB_COLOR_BLUE FB_COLOR_RGB(0x00,0x00,0xff)
+
+/* encode */
+
+/* decode */
+#define FB_COLOR_IS_SPECIAL(v) (!!((v) & 0xff000000U))
+#define FB_COLOR_TO_R(v) (((v)>>16) & 0xff)
+#define FB_COLOR_TO_G(v) (((v)>> 8) & 0xff)
+#define FB_COLOR_TO_B(v) ( (v) & 0xff)
+
+struct framebuffer {
+ char name[8]; // keep it short!
+ void (*init)(); // (re)initialize
+ void (*clear)(); // clear display
+ void (*boxto)(uint16_t x,uint16_t y); // draw box to xy
+ void (*lineto)(uint16_t x,uint16_t y); // draw line to xy
+ int (*putstr)(char *c,int maxwidth); // put text in current font to fb
+ void (*flush)(); // flush changes
+
+ uint16_t width,height; // width/height of fb
+ uint16_t cursor_x,cursor_y; // current cursor
+ uint32_t fg_color,bg_color; // current fg/bg color
+ enum fb_font_id font; // current font
+};
+
+/* there is a single framebuffer, the specific driver defines
+ the "framebuffer" symbol */
+extern struct framebuffer *framebuffer;
+
+static inline void
+fb_init(){
+ framebuffer->init();
+}
+
+static inline void
+fb_clear(){
+ framebuffer->clear();
+}
+
+static inline void
+fb_boxto(uint16_t x,uint16_t y){
+ framebuffer->boxto(x,y);
+}
+
+static inline void
+fb_lineto(uint16_t x,uint16_t y){
+ framebuffer->lineto(x,y);
+}
+
+static inline int
+fb_putstr(char *str,int maxwidth){
+ return framebuffer->putstr(str,maxwidth);
+}
+
+static inline void
+fb_flush(){
+ framebuffer->flush();
+}
+
+static inline void
+fb_gotoxy(uint16_t x,uint16_t y){
+ framebuffer->cursor_x = x;
+ framebuffer->cursor_y = y;
+}
+
+static inline void
+fb_setfg(uint32_t color){
+ framebuffer->fg_color = color;
+}
+
+static inline void
+fb_setbg(uint32_t color){
+ framebuffer->bg_color = color;
+}
+
+static inline void
+fb_setfont(enum fb_font_id fid){
+ framebuffer->font = fid;
+}
+
+/* utility function: limit coordinates to area of framebuffer */
+static inline void
+fb_limit_fb_range(uint16_t *x,uint16_t *y){
+ if(*x >= framebuffer->width)
+ *x = framebuffer->width - 1;
+ if(*y >= framebuffer->height)
+ *y = framebuffer->height - 1;
+}
+
+/* utility function: limit box coordinates to area of framebuffer
+ and make sure that x1y1 is left upper edge, x2y2 is right lower */
+static inline void
+fb_sanitize_box(uint16_t *x1,uint16_t *y1,uint16_t *x2,uint16_t *y2){
+ fb_limit_fb_range(x1,y1);
+ fb_limit_fb_range(x2,y2);
+ if(*x1 > *x2){
+ uint16_t tmp = *x1;
+ *x1 = *x2;
+ *x2 = tmp;
+ }
+ if(*y1 > *y2){
+ uint16_t tmp = *y1;
+ *y1 = *y2;
+ *y2 = tmp;
+ }
+}
+
+#endif
+
diff --git a/src/target/firmware/include/layer1/async.h b/src/target/firmware/include/layer1/async.h
index a9fa08d9..de996a67 100644
--- a/src/target/firmware/include/layer1/async.h
+++ b/src/target/firmware/include/layer1/async.h
@@ -44,6 +44,9 @@ void l1a_mftask_enable(enum mframe_task task);
/* Disable a repeating multiframe task */
void l1a_mftask_disable(enum mframe_task task);
+/* Set the mask for repeating multiframe tasks */
+void l1a_mftask_set(uint32_t tasks);
+
/* Set TCH mode */
uint8_t l1a_tch_mode_set(uint8_t mode);
diff --git a/src/target/firmware/include/layer1/l23_api.h b/src/target/firmware/include/layer1/l23_api.h
index 9b10b62a..e4a3fd0a 100644
--- a/src/target/firmware/include/layer1/l23_api.h
+++ b/src/target/firmware/include/layer1/l23_api.h
@@ -6,9 +6,12 @@
#include <l1ctl_proto.h>
void l1a_l23api_init(void);
+void l1a_l23_handler(void);
void l1_queue_for_l2(struct msgb *msg);
struct msgb *l1ctl_msgb_alloc(uint8_t msg_type);
struct msgb *l1_create_l2_msg(int msg_type, uint32_t fn, uint16_t snr, uint16_t arfcn);
+extern void (*l1a_l23_tx_cb)(struct msgb *msg);
+void l1a_l23_rx(uint8_t dlci, struct msgb *msg);
void l1ctl_tx_reset(uint8_t msg_type, uint8_t reset_type);
diff --git a/src/target/firmware/include/layer1/mframe_sched.h b/src/target/firmware/include/layer1/mframe_sched.h
index 3b2039a2..ecdb1ec8 100644
--- a/src/target/firmware/include/layer1/mframe_sched.h
+++ b/src/target/firmware/include/layer1/mframe_sched.h
@@ -28,6 +28,7 @@ enum mframe_task {
MF_TASK_TCH_H_0,
MF_TASK_TCH_H_1,
+ MF_TASK_NEIGH_PM51_C0T0,
MF_TASK_NEIGH_PM51,
MF_TASK_NEIGH_PM26E,
MF_TASK_NEIGH_PM26O,
diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h
index aa03c827..dae85a1a 100644
--- a/src/target/firmware/include/layer1/sync.h
+++ b/src/target/firmware/include/layer1/sync.h
@@ -151,6 +151,7 @@ struct l1s_state {
uint8_t pos;
uint8_t running;
uint16_t band_arfcn[64];
+ uint8_t tn[64];
uint8_t level[64];
} neigh_pm;
};
diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c
index 24c6d3ae..4aed9ff0 100644
--- a/src/target/firmware/layer1/l23_api.c
+++ b/src/target/firmware/layer1/l23_api.c
@@ -29,6 +29,8 @@
#include <debug.h>
#include <byteorder.h>
+#include <asm/system.h>
+
#include <osmocom/core/msgb.h>
#include <osmocom/gsm/protocol/gsm_04_08.h>
#include <comm/sercomm.h>
@@ -38,19 +40,28 @@
#include <layer1/mframe_sched.h>
#include <layer1/prim.h>
#include <layer1/tpu_window.h>
+#include <layer1/sched_gsmtime.h>
#include <abb/twl3025.h>
#include <rf/trf6151.h>
#include <calypso/sim.h>
+#include <calypso/dsp.h>
#include <l1ctl_proto.h>
/* the size we will allocate struct msgb* for HDLC */
#define L3_MSG_HEAD 4
-#define L3_MSG_SIZE (sizeof(struct l1ctl_hdr)+sizeof(struct l1ctl_info_dl)+sizeof(struct l1ctl_burst_ind) + L3_MSG_HEAD)
+#define L3_MSG_DATA 200
+#define L3_MSG_SIZE (L3_MSG_HEAD + sizeof(struct l1ctl_hdr) + L3_MSG_DATA)
+
+void (*l1a_l23_tx_cb)(struct msgb *msg) = NULL;
void l1_queue_for_l2(struct msgb *msg)
{
+ if (l1a_l23_tx_cb) {
+ l1a_l23_tx_cb(msg);
+ return;
+ }
/* forward via serial for now */
sercomm_sendmsg(SC_DLCI_L1A_L23, msg);
}
@@ -217,8 +228,8 @@ static void l1ctl_rx_dm_est_req(struct msgb *msg)
printd("L1CTL_DM_EST_REQ (arfcn=%u, chan_nr=0x%02x, tsc=%u)\n",
ntohs(est_req->h0.band_arfcn), ul->chan_nr, est_req->tsc);
- /* disable neighbour cell measurement */
- mframe_disable(MF_TASK_NEIGH_PM51);
+ /* disable neighbour cell measurement of C0 TS 0 */
+ mframe_disable(MF_TASK_NEIGH_PM51_C0T0);
/* configure dedicated channel state */
l1s.dedicated.type = chan_nr2dchan_type(ul->chan_nr);
@@ -396,7 +407,7 @@ static void l1ctl_rx_pm_req(struct msgb *msg)
l1s.pm.range.arfcn_start, l1s.pm.range.arfcn_end);
break;
}
-
+ l1s_reset_hw(); /* must reset, otherwise measurement results are delayed */
l1s_pm_test(1, l1s.pm.range.arfcn_next);
}
@@ -521,14 +532,16 @@ static void l1ctl_rx_neigh_pm_req(struct msgb *msg)
/* now reset pointer and fill list */
l1s.neigh_pm.pos = 0;
l1s.neigh_pm.running = 0;
- for (i = 0; i < pm_req->n; i++)
+ for (i = 0; i < pm_req->n; i++) {
l1s.neigh_pm.band_arfcn[i] = ntohs(pm_req->band_arfcn[i]);
+ l1s.neigh_pm.tn[i] = pm_req->tn[i];
+ }
printf("L1CTL_NEIGH_PM_REQ new list with %u entries\n", pm_req->n);
l1s.neigh_pm.n = pm_req->n; /* atomic */
- /* on BCCH enable PM on frame 51 */
+ /* on C0 enable PM on frame 51 */
if (l1s.dedicated.type == GSM_DCHAN_NONE)
- mframe_enable(MF_TASK_NEIGH_PM51);
+ mframe_enable(MF_TASK_NEIGH_PM51_C0T0);
}
/* receive a L1CTL_TRAFFIC_REQ from L23 */
@@ -553,8 +566,6 @@ static void l1ctl_rx_traffic_req(struct msgb *msg)
l1a_txq_msgb_enq(&l1s.tx_queue[L1S_CHAN_TRAFFIC], msg);
}
-void sim_apdu(uint16_t len, uint8_t *data);
-
static void l1ctl_sim_req(struct msgb *msg)
{
uint16_t len = msg->len - sizeof(struct l1ctl_hdr);
@@ -573,10 +584,31 @@ static void l1ctl_sim_req(struct msgb *msg)
sim_apdu(len, data);
}
+static struct llist_head l23_rx_queue = LLIST_HEAD_INIT(l23_rx_queue);
+
/* callback from SERCOMM when L2 sends a message to L1 */
-static void l1a_l23_rx_cb(uint8_t dlci, struct msgb *msg)
+void l1a_l23_rx(uint8_t dlci, struct msgb *msg)
{
- struct l1ctl_hdr *l1h = (struct l1ctl_hdr *) msg->data;
+ unsigned long flags;
+
+ local_firq_save(flags);
+ msgb_enqueue(&l23_rx_queue, msg);
+ local_irq_restore(flags);
+}
+
+void l1a_l23_handler(void)
+{
+ struct msgb *msg;
+ struct l1ctl_hdr *l1h;
+ unsigned long flags;
+
+ local_firq_save(flags);
+ msg = msgb_dequeue(&l23_rx_queue);
+ local_irq_restore(flags);
+ if (!msg)
+ return;
+
+ l1h = (struct l1ctl_hdr *) msg->data;
#if 0
{
@@ -653,5 +685,6 @@ exit_nofree:
void l1a_l23api_init(void)
{
- sercomm_register_rx_cb(SC_DLCI_L1A_L23, l1a_l23_rx_cb);
+ sercomm_register_rx_cb(SC_DLCI_L1A_L23, l1a_l23_rx);
}
+
diff --git a/src/target/firmware/layer1/mframe_sched.c b/src/target/firmware/layer1/mframe_sched.c
index 9087e8be..bdc849a7 100644
--- a/src/target/firmware/layer1/mframe_sched.c
+++ b/src/target/firmware/layer1/mframe_sched.c
@@ -202,6 +202,16 @@ static const struct mframe_sched_item mf_sdcch8_7[] = {
{ .sched_set = NULL }
};
+/* Measurement for MF 51 C0 */
+static const struct mframe_sched_item mf_neigh_pm51_c0t0[] = {
+ { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 0 },
+ { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 10 },
+ { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 20 },
+ { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 30 },
+ { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 40 },
+ { .sched_set = NULL }
+};
+
/* Measurement for MF 51 */
static const struct mframe_sched_item mf_neigh_pm51[] = {
{ .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 50 },
@@ -314,6 +324,7 @@ static const struct mframe_sched_item *sched_set_for_task[32] = {
[MF_TASK_TCH_H_0] = mf_tch_h_0,
[MF_TASK_TCH_H_1] = mf_tch_h_1,
+ [MF_TASK_NEIGH_PM51_C0T0] = mf_neigh_pm51_c0t0,
[MF_TASK_NEIGH_PM51] = mf_neigh_pm51,
[MF_TASK_NEIGH_PM26E] = mf_neigh_pm26_even,
[MF_TASK_NEIGH_PM26O] = mf_neigh_pm26_odd,
diff --git a/src/target/firmware/layer1/prim_fbsb.c b/src/target/firmware/layer1/prim_fbsb.c
index 7affd75d..6bc0aef4 100644
--- a/src/target/firmware/layer1/prim_fbsb.c
+++ b/src/target/firmware/layer1/prim_fbsb.c
@@ -30,6 +30,7 @@
#include <debug.h>
#include <memory.h>
#include <byteorder.h>
+#include <rffe.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/msgb.h>
#include <calypso/dsp_api.h>
@@ -47,6 +48,7 @@
#include <layer1/mframe_sched.h>
#include <layer1/tpu_window.h>
#include <layer1/l23_api.h>
+#include <layer1/agc.h>
#include <l1ctl_proto.h>
@@ -83,6 +85,9 @@ struct l1a_fb_state {
static struct l1a_fb_state fbs;
static struct mon_state *last_fb = &fbs.mon;
+static uint32_t fbsb_last_fn;
+static uint8_t fbsb_seq;
+
static void dump_mon_state(struct mon_state *fb)
{
#if 0
@@ -485,6 +490,19 @@ static int l1s_fbdet_resp(__unused uint8_t p1, uint8_t attempt,
printf(" delay=%d (fn_offset=%d + 11 - fn=%u - 1\n", delay,
fn_offset, l1s.current_time.fn);
printf(" scheduling next FB/SB detection task with delay %u\n", delay);
+
+ if ((fn_offset-fbsb_last_fn) < 30)
+ fbsb_seq++;
+ fbsb_last_fn = fn_offset;
+
+ if (fbsb_seq > 1) {
+ printf("-- Forcing DSP reset --\n\n");
+ last_fb->attempt = 13;
+ l1s_compl_sched(L1_COMPL_FB);
+ dsp_power_on();
+ l1s_reset();
+ }
+
if (abs(last_fb->freq_diff) < fbs.req.freq_err_thresh2 &&
last_fb->snr > FB1_SNR_THRESH) {
/* synchronize before reading SB */
@@ -551,6 +569,8 @@ void l1s_fbsb_req(uint8_t base_fn, struct l1ctl_fbsb_req *req)
fbs.initial_freq_err = 0;
fbs.fb_retries = 0;
fbs.afc_retries = 0;
+ fbsb_seq = 0;
+ fbsb_last_fn = 0;
/* Make sure we start at a 'center' AFCDAC output value */
afc_reset();
diff --git a/src/target/firmware/layer1/prim_freq.c b/src/target/firmware/layer1/prim_freq.c
index 88bc4532..ca6dc9e4 100644
--- a/src/target/firmware/layer1/prim_freq.c
+++ b/src/target/firmware/layer1/prim_freq.c
@@ -45,6 +45,7 @@
#include <layer1/tdma_sched.h>
#include <layer1/tpu_window.h>
#include <layer1/l23_api.h>
+#include <layer1/sched_gsmtime.h>
#include <l1ctl_proto.h>
diff --git a/src/target/firmware/layer1/prim_pm.c b/src/target/firmware/layer1/prim_pm.c
index c2d85ac7..1630600a 100644
--- a/src/target/firmware/layer1/prim_pm.c
+++ b/src/target/firmware/layer1/prim_pm.c
@@ -118,10 +118,11 @@ static int l1s_pm_resp(uint8_t num_meas, __unused uint8_t p2,
pmr->pm[1] = 0;
if (l1s.pm.mode == 1) {
- if (l1s.pm.range.arfcn_next <= l1s.pm.range.arfcn_end) {
+ if (l1s.pm.range.arfcn_next != l1s.pm.range.arfcn_end) {
/* schedule PM for next ARFCN in range */
+ l1s.pm.range.arfcn_next =
+ (l1s.pm.range.arfcn_next+1) & 0xfbff;
l1s_pm_test(1, l1s.pm.range.arfcn_next);
- l1s.pm.range.arfcn_next++;
} else {
/* we have finished, flush the msgb to L2 */
struct l1ctl_hdr *l1h = l1s.pm.msg->l1h;
@@ -174,7 +175,8 @@ static int l1s_neigh_pm_cmd(uint8_t num_meas,
* num_meas > 1 */
/* do measurement dummy, in case l1s.neigh_pm.n == 0 */
l1s_rx_win_ctrl((l1s.neigh_pm.n) ?
- l1s.neigh_pm.band_arfcn[l1s.neigh_pm.pos] : 0, L1_RXWIN_PW, 0);
+ l1s.neigh_pm.band_arfcn[l1s.neigh_pm.pos] : 0,
+ L1_RXWIN_PW, l1s.neigh_pm.tn[l1s.neigh_pm.pos]);
/* restore last gain */
rffe_set_gain(last_gain);
@@ -217,6 +219,7 @@ static int l1s_neigh_pm_resp(__unused uint8_t p1, __unused uint8_t p2,
mi = (struct l1ctl_neigh_pm_ind *)
msgb_put(msg, sizeof(*mi));
mi->band_arfcn = htons(l1s.neigh_pm.band_arfcn[i]);
+ mi->tn = l1s.neigh_pm.tn[i];
mi->pm[0] = l1s.neigh_pm.level[i];
mi->pm[1] = 0;
}
diff --git a/src/target/firmware/layer1/prim_rach.c b/src/target/firmware/layer1/prim_rach.c
index 9370589d..27e89abb 100644
--- a/src/target/firmware/layer1/prim_rach.c
+++ b/src/target/firmware/layer1/prim_rach.c
@@ -46,6 +46,7 @@
#include <layer1/tdma_sched.h>
#include <layer1/tpu_window.h>
#include <layer1/l23_api.h>
+#include <layer1/sched_gsmtime.h>
#include <l1ctl_proto.h>
diff --git a/src/target/firmware/layer1/prim_rx_nb.c b/src/target/firmware/layer1/prim_rx_nb.c
index 7eb45483..ade23a01 100644
--- a/src/target/firmware/layer1/prim_rx_nb.c
+++ b/src/target/firmware/layer1/prim_rx_nb.c
@@ -29,6 +29,7 @@
#include <debug.h>
#include <memory.h>
#include <byteorder.h>
+#include <rffe.h>
#include <osmocom/gsm/gsm_utils.h>
#include <osmocom/core/msgb.h>
#include <calypso/dsp_api.h>
@@ -48,6 +49,7 @@
#include <layer1/l23_api.h>
#include <layer1/rfch.h>
#include <layer1/prim.h>
+#include <layer1/agc.h>
#include <l1ctl_proto.h>
diff --git a/src/target/firmware/layer1/prim_tch.c b/src/target/firmware/layer1/prim_tch.c
index 292ca103..a26c58ea 100644
--- a/src/target/firmware/layer1/prim_tch.c
+++ b/src/target/firmware/layer1/prim_tch.c
@@ -738,7 +738,7 @@ static int l1s_tch_a_cmd(__unused uint8_t p1, __unused uint8_t p2, uint16_t p3)
l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0);
dsp_load_tx_task(TCHA_DSP_TASK, 0, tsc); /* burst_id unused for TCHA */
- l1s_tx_win_ctrl(arfcn, L1_TXWIN_NB | ARFCN_UPLINK, 0, 3);
+ l1s_tx_win_ctrl(arfcn | ARFCN_UPLINK, L1_TXWIN_NB, 0, 3);
return 0;
}
diff --git a/src/target/firmware/layer1/tpu_window.c b/src/target/firmware/layer1/tpu_window.c
index 2fdb048c..f4e76c16 100644
--- a/src/target/firmware/layer1/tpu_window.c
+++ b/src/target/firmware/layer1/tpu_window.c
@@ -33,6 +33,7 @@
#include <layer1/sync.h>
#include <layer1/tpu_window.h>
+#include <layer1/rfch.h>
/* all units in GSM quarter-bits (923.1ns) */
#define L1_TDMA_LENGTH_Q 5000