diff options
author | root <root@c7h5n3o6.sofago.net> | 2012-02-06 03:33:06 +0100 |
---|---|---|
committer | root <root@c7h5n3o6.sofago.net> | 2012-02-06 03:33:06 +0100 |
commit | 066f3b61df7d9c1a2378368c81625b028d285061 (patch) | |
tree | 43553c06a16e959b4ca98e71999e45e35c404204 /src/target | |
parent | a89f40bbe02cc979640b0c5396d8acd29f8c181d (diff) | |
parent | 6efc1f395e591e19b78a3a31105ffe2b795a9d53 (diff) |
Merge branch 'master' into luca/catcher
Diffstat (limited to 'src/target')
61 files changed, 13664 insertions, 1784 deletions
diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index d8e467c1..4f7967e8 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -4,8 +4,18 @@ 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_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_dummy_OBJS=$(FB_OBJS) fb/fb_dummy.o # TI Calypso @@ -13,12 +23,12 @@ 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 $(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 $(FB_dummy_OBJS) pirelli_dpl10_ENVIRONMENTS=highram # Compal Generic @@ -34,7 +44,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 $(FB_e88_OBJS) compal_e88_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) e88loader e88flash e88loader_LDS=board/compal_e88/loader.lds @@ -45,12 +55,12 @@ 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 $(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 $(FB_e99_OBJS) compal_e99_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) e99loader_LDS=board/compal_e99/loader.lds @@ -59,7 +69,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 $(FB_j100_OBJS) se_j100_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) # Global include path @@ -67,12 +77,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..2e06199c 100644 --- a/src/target/firmware/abb/twl3025.c +++ b/src/target/firmware/abb/twl3025.c @@ -105,13 +105,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 +186,10 @@ static void twl3025_wait_ibic_access(void) void twl3025_power_off(void) { + /* 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/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..cdf4dae0 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,7 @@ #include <calypso/misc.h> #include <comm/sercomm.h> #include <comm/timer.h> +#include <fb/framebuffer.h> /* Main Program */ const char *hr = "======================================================================\n"; @@ -55,7 +55,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); } @@ -89,6 +88,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 +120,13 @@ 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); /* 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 +152,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..0513d624 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> @@ -49,6 +48,8 @@ #include <layer1/async.h> #include <layer1/tpu_window.h> +#include <fb/framebuffer.h> + const char *hr = "======================================================================\n"; /* MAIN program **************************************************************/ @@ -75,26 +76,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/rssi/main.c b/src/target/firmware/apps/rssi/main.c new file mode 100644 index 00000000..ea8bbb49 --- /dev/null +++ b/src/target/firmware/apps/rssi/main.c @@ -0,0 +1,1282 @@ +/* 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> + +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 = 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 4 +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 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 */ + +/* 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]; + + 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 Monitor Tool",-1); + fb_gotoxy(0, 10); + fb_setfg(FB_COLOR_GREEN); + fb_boxto(framebuffer->width - 1, 10); + } + fb_setfg(FB_COLOR_BLACK); + fb_setfont(FB_FONT_C64); + + /* SYNC / UL levels */ + if (mode == MODE_SYNC && cursor < 0) { + int i, tn, l; + int offset = (framebuffer->width - 96) >> 2; + 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) + 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 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 = 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(); + 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) + exit_sync(); + 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_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; + 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); + 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; +} + +/* Main Program */ +const char *hr = "======================================================================\n"; + +/* 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 gsm48_system_information_type_header *sih; + struct l1ctl_neigh_pm_ind *pm_ind; + + 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); + if (chan_type != RSL_CHAN_BCCH) + break; + msg->l3h = msg->l2h; + + power = dl->rx_level; + if (dl->fire_crc >= 2) { + si_new = 0x1ff; /* error frame indication */ + break; + } + + /* 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; + 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; + } + + 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 = 60; + } + + 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_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/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 1de61933..3659de63 100644 --- a/src/target/firmware/board/compal_e86/init.c +++ b/src/target/firmware/board/compal_e86/init.c @@ -44,7 +44,8 @@ #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 +128,7 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses UWire) */ - display = &td014_display; - display_init(); + fb_init(); bl_mode_pwl(1); bl_level(0); diff --git a/src/target/firmware/board/compal_e88/init.c b/src/target/firmware/board/compal_e88/init.c index a5bf880e..fe3fd72b 100644 --- a/src/target/firmware/board/compal_e88/init.c +++ b/src/target/firmware/board/compal_e88/init.c @@ -44,7 +44,7 @@ #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 @@ -123,8 +123,8 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses I2C) and backlight */ - display = &st7558_display; - display_init(); + fb_init(); + bl_mode_pwl(1); bl_level(50); diff --git a/src/target/firmware/board/compal_e99/init.c b/src/target/firmware/board/compal_e99/init.c index 0c218a8d..1d587fa5 100644 --- a/src/target/firmware/board/compal_e99/init.c +++ b/src/target/firmware/board/compal_e99/init.c @@ -44,7 +44,8 @@ #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,11 +128,11 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses UWire) and backlight */ - display = &ssd1783_display; - display_init(); bl_mode_pwl(1); bl_level(50); + 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 4f256ea0..d125e15f 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 @@ -123,8 +122,6 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses I2C) and backlight */ - display = &st7558_display; - display_init(); bl_mode_pwl(1); bl_level(50); diff --git a/src/target/firmware/board/pirelli_dpl10/init.c b/src/target/firmware/board/pirelli_dpl10/init.c index 53fb2576..3f3145e1 100644 --- a/src/target/firmware/board/pirelli_dpl10/init.c +++ b/src/target/firmware/board/pirelli_dpl10/init.c @@ -45,7 +45,8 @@ #include <abb/twl3025.h> #include <rf/trf6151.h> -#include <display.h> + +#include <fb/framebuffer.h> #define ARMIO_LATCH_OUT 0xfffe4802 #define ASIC_CONF_REG 0xfffef008 @@ -111,8 +112,7 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses I2C) and backlight */ - display = &st7558_display; - display_init(); + fb_init(); bl_mode_pwl(1); bl_level(0); diff --git a/src/target/firmware/board/se_j100/init.c b/src/target/firmware/board/se_j100/init.c index 30c3e6b4..c8697ddc 100644 --- a/src/target/firmware/board/se_j100/init.c +++ b/src/target/firmware/board/se_j100/init.c @@ -44,7 +44,8 @@ #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 +128,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/timer.c b/src/target/firmware/comm/timer.c index 6a649ae9..b2026b94 100644 --- a/src/target/firmware/comm/timer.c +++ b/src/target/firmware/comm/timer.c @@ -41,14 +41,14 @@ unsigned long volatile jiffies; ((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 +57,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); + 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 +72,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 +131,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 +139,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 +149,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 +169,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; 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..7a8323df --- /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 +){ + uint16_t v; + 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 dy; // char_y = screen_y + dy + 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=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 + + printf("%s: %d %d %d %d\n",__FUNCTION__,x1,y1,x2,y2); + + 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..f0ff24d5 --- /dev/null +++ b/src/target/firmware/fb/fb_dummy.c @@ -0,0 +1,69 @@ +/* + "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> + +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(char *c,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..72ed87b8 --- /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,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=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_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..f3318b15 --- /dev/null +++ b/src/target/firmware/fb/fb_st7558.c @@ -0,0 +1,133 @@ +/* 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]; + int i; + + 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..d98096f3 --- /dev/null +++ b/src/target/firmware/fb/font.c @@ -0,0 +1,57 @@ +/* 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; + +const struct fb_font *fb_fonts[]={ +// &font_4x6, +// &font_5x8, + &font_helvR08, +// &font_helvR14, +// &font_helvR24, +// &font_helvB08, + &font_helvB14, +// &font_helvB24, + &font_c64, +}; + +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/include/comm/timer.h b/src/target/firmware/include/comm/timer.h index db7d1a55..877d47b5 100644 --- a/src/target/firmware/include/comm/timer.h +++ b/src/target/firmware/include/comm/timer.h @@ -28,16 +28,16 @@ /** * 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 +58,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..40a6974b --- /dev/null +++ b/src/target/firmware/include/fb/font.h @@ -0,0 +1,81 @@ +#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, +}; + +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/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/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/include/rf/trf6151.h b/src/target/firmware/include/rf/trf6151.h index f0891b6b..c1eaf3b2 100644 --- a/src/target/firmware/include/rf/trf6151.h +++ b/src/target/firmware/include/rf/trf6151.h @@ -22,7 +22,9 @@ int trf6151_set_gain(uint8_t dbm); uint8_t trf6151_get_gain(void); /* Request the PLL to be tuned to the given frequency */ -void trf6151_set_arfcn(uint16_t arfcn, int uplink); +/* arfcn must have ARFCN_UPLINK flag set if you want uplink ! */ +/* tx selects the TX path only and doesn't set UL band ! */ +void trf6151_set_arfcn(uint16_t arfcn, int tx); enum trf6151_mode { TRF6151_IDLE, diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index ed43e142..659f3173 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> @@ -47,10 +49,17 @@ /* 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_traffic_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); } @@ -396,7 +405,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,8 +530,10 @@ 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 */ @@ -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 6281c3d6..2367d425 100644 --- a/src/target/firmware/layer1/mframe_sched.c +++ b/src/target/firmware/layer1/mframe_sched.c @@ -200,7 +200,11 @@ static const struct mframe_sched_item mf_sdcch8_7[] = { /* Measurement for MF 51 */ static const struct mframe_sched_item mf_neigh_pm51[] = { - { .sched_set = NEIGH_PM , .modulo = 51, .frame_nr = 50 }, + { .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 } }; 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 47f74241..9370589d 100644 --- a/src/target/firmware/layer1/prim_rach.c +++ b/src/target/firmware/layer1/prim_rach.c @@ -73,7 +73,7 @@ static int l1s_tx_rach_cmd(__unused uint8_t p1, __unused uint8_t p2, __unused ui dsp_api.db_w->d_task_ra = RACH_DSP_TASK; - l1s_tx_win_ctrl(l1s.serving_cell.arfcn, L1_TXWIN_AB, 0, 3); + l1s_tx_win_ctrl(l1s.serving_cell.arfcn | ARFCN_UPLINK, L1_TXWIN_AB, 0, 3); return 0; } diff --git a/src/target/firmware/layer1/prim_tch.c b/src/target/firmware/layer1/prim_tch.c index 96858fb6..292ca103 100644 --- a/src/target/firmware/layer1/prim_tch.c +++ b/src/target/firmware/layer1/prim_tch.c @@ -479,7 +479,7 @@ skip_tx_traffic: l1s_rx_win_ctrl(arfcn, L1_RXWIN_NB, 0); dsp_load_tx_task(TCHT_DSP_TASK, 0, tsc); /* burst_id unused for TCH */ - l1s_tx_win_ctrl(arfcn, L1_TXWIN_NB, 0, 3); + l1s_tx_win_ctrl(arfcn | ARFCN_UPLINK, L1_TXWIN_NB, 0, 3); return 0; } @@ -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, 0, 3); + l1s_tx_win_ctrl(arfcn, L1_TXWIN_NB | ARFCN_UPLINK, 0, 3); return 0; } diff --git a/src/target/firmware/layer1/prim_tx_nb.c b/src/target/firmware/layer1/prim_tx_nb.c index 3038178b..df13c757 100644 --- a/src/target/firmware/layer1/prim_tx_nb.c +++ b/src/target/firmware/layer1/prim_tx_nb.c @@ -123,7 +123,7 @@ static int l1s_tx_cmd(uint8_t p1, uint8_t burst_id, uint16_t p3) dsp_load_tx_task(DUL_DSP_TASK, burst_id, tsc); - l1s_tx_win_ctrl(arfcn, L1_TXWIN_NB, 0, 3); + l1s_tx_win_ctrl(arfcn | ARFCN_UPLINK, L1_TXWIN_NB, 0, 3); return 0; } diff --git a/src/target/firmware/rf/trf6151.c b/src/target/firmware/rf/trf6151.c index 53604024..96210fc6 100644 --- a/src/target/firmware/rf/trf6151.c +++ b/src/target/firmware/rf/trf6151.c @@ -428,12 +428,16 @@ static void trf6151_band_select(enum trf6151_gsm_band band) } /* Set ARFCN. Takes 2 reg_write, i.e. 8 TPU instructions */ -void trf6151_set_arfcn(uint16_t arfcn, int uplink) +void trf6151_set_arfcn(uint16_t arfcn, int tx) { uint32_t freq_khz; uint16_t pll_config; + int uplink; enum trf6151_gsm_band pll_band; + uplink = !!(arfcn & ARFCN_UPLINK); + arfcn != ~ARFCN_UPLINK; + switch (gsm_arfcn2band(arfcn)) { case GSM_BAND_850: case GSM_BAND_900: @@ -452,7 +456,7 @@ void trf6151_set_arfcn(uint16_t arfcn, int uplink) freq_khz = gsm_arfcn2freq10(arfcn, uplink) * 100; printd("ARFCN %u -> %u kHz\n", arfcn, freq_khz); - if (uplink == 0) + if (!tx) trf6151_pll_rx(freq_khz, &pll_config, &pll_band); else trf6151_pll_tx(freq_khz, &pll_config, &pll_band); @@ -512,7 +516,7 @@ uint8_t trf6151_get_gain(void) void trf6151_test(uint16_t arfcn) { - /* Select ARFCN 871 downlink */ + /* Select ARFCN downlink */ trf6151_set_arfcn(arfcn, 0); trf6151_set_mode(TRF6151_RX); @@ -532,7 +536,7 @@ void trf6151_test(uint16_t arfcn) void trf6151_tx_test(uint16_t arfcn) { /* Select ARFCN uplink */ - trf6151_set_arfcn(arfcn, 1); + trf6151_set_arfcn(arfcn | ARFCN_UPLINK, 1); trf6151_set_mode(TRF6151_TX); tpu_enq_wait(TRF6151_RX_PLL_DELAY); |