From c4701d420479f45c2fdf1526945edd707ed32a55 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 26 Jan 2012 18:56:16 +0100 Subject: Added callback function to forward L1CTL packets to rather than SERCOM This is experimental, maybe there should be a better way to do that. --- src/target/firmware/include/layer1/l23_api.h | 2 ++ src/target/firmware/layer1/l23_api.c | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/include/layer1/l23_api.h b/src/target/firmware/include/layer1/l23_api.h index 9b10b62a..4ea71018 100644 --- a/src/target/firmware/include/layer1/l23_api.h +++ b/src/target/firmware/include/layer1/l23_api.h @@ -9,6 +9,8 @@ void l1a_l23api_init(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/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index ed43e142..f8152c5c 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -49,8 +49,14 @@ #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) +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); } @@ -574,7 +580,7 @@ static void l1ctl_sim_req(struct msgb *msg) } /* 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; @@ -653,5 +659,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); } + -- cgit v1.2.3 From 6ab18bedb1dca6c3a91b23293583ccf33bc5e70f Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 15 Dec 2011 07:10:10 +0100 Subject: firmware/layer1: Using queue to process received l23 frames in main loop Instead of processing the frames out of the interrupt context, they are queued until serial interrupt returns and main loop is processed. --- src/target/firmware/apps/layer1/main.c | 1 + src/target/firmware/include/layer1/l23_api.h | 1 + src/target/firmware/layer1/l23_api.c | 25 ++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c index 61a400cf..0abfc063 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -95,6 +95,7 @@ int main(void) l1a_compl_execute(); update_timers(); sim_handler(); + l1a_l23_handler(); } /* NOT REACHED */ diff --git a/src/target/firmware/include/layer1/l23_api.h b/src/target/firmware/include/layer1/l23_api.h index 4ea71018..e4a3fd0a 100644 --- a/src/target/firmware/include/layer1/l23_api.h +++ b/src/target/firmware/include/layer1/l23_api.h @@ -6,6 +6,7 @@ #include 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); diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index f8152c5c..58a093f4 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -29,6 +29,8 @@ #include #include +#include + #include #include #include @@ -579,10 +581,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 */ 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 { -- cgit v1.2.3 From f04f53d3b7909cc77d1b451bc8596c4d69ce8172 Mon Sep 17 00:00:00 2001 From: Sylvain Munaut Date: Fri, 2 Sep 2011 23:09:20 +0200 Subject: target/rf: Make the trf6151_set_arfcn use ARFCN_UPLINK flag to select UL/DL This way we can independentely control what frequency we want and wheter we want to TX or RX. This allow TX on DL band and RX on UL band. This also means all call to tx_window setup now need to properly set the ARFCN_UPLINK flag ! Signed-off-by: Sylvain Munaut --- src/target/firmware/include/rf/trf6151.h | 4 +++- src/target/firmware/layer1/prim_rach.c | 2 +- src/target/firmware/layer1/prim_tch.c | 4 ++-- src/target/firmware/layer1/prim_tx_nb.c | 2 +- src/target/firmware/rf/trf6151.c | 12 ++++++++---- 5 files changed, 15 insertions(+), 9 deletions(-) (limited to 'src/target') 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/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); -- cgit v1.2.3 From a6c98a79b29e964268ab2debd7ebd7fd2daf709d Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Wed, 25 Jan 2012 12:19:23 +0100 Subject: Hold function for power button to turn off the phone In order to allow applications to use the power button, the keypad handler will wait half a second if the key is pressed and hold, until the power is turned off. This way the application does not need to handle it. The power off function will then wait until the button is released, so the phone will not start again while the button is still pressed. --- src/target/firmware/abb/twl3025.c | 11 ++++------- src/target/firmware/calypso/keypad.c | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 11 deletions(-) (limited to 'src/target') 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/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 #include +#include #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; -- cgit v1.2.3 From 40fc52108899de210ed233d4014037c952453ecd Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 28 Jan 2012 12:02:06 +0100 Subject: layer1: Fixed power measurement, adding ARFCN wrapping Power measurement returned the first measurement result twice, now it is returned only once. Wrapping of ARFCN allows to measure the E-band en block. After measuring the ARFCN 1023, the ARFCN wraps to 0. Special flags like ARFCN_UPLINK or ARFCN_PCS are preserved while wrapping. --- src/target/firmware/layer1/l23_api.c | 2 +- src/target/firmware/layer1/prim_pm.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 58a093f4..2581b5bb 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -404,7 +404,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); } diff --git a/src/target/firmware/layer1/prim_pm.c b/src/target/firmware/layer1/prim_pm.c index c2d85ac7..07b72097 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; -- cgit v1.2.3 From 0eecdf24f3da797e3c6342e60b28f7dfcd467976 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 29 Jan 2012 09:41:45 +0100 Subject: timers: comply with timer rename in libosmocore libosmocore has prefixed the timer functions with omso_* already in May 2011 (0b21c1c8850d7f33f55d9399d14055a7cdda3614), and we follow suit here for API consistency reasons. --- src/target/firmware/apps/compal_dsp_dump/main.c | 2 +- src/target/firmware/apps/hello_world/main.c | 2 +- src/target/firmware/apps/layer1/main.c | 2 +- src/target/firmware/comm/timer.c | 22 +++++++++++----------- src/target/firmware/include/comm/timer.h | 21 ++++++++++----------- 5 files changed, 24 insertions(+), 25 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/compal_dsp_dump/main.c b/src/target/firmware/apps/compal_dsp_dump/main.c index c823d0ae..8debae73 100644 --- a/src/target/firmware/apps/compal_dsp_dump/main.c +++ b/src/target/firmware/apps/compal_dsp_dump/main.c @@ -56,7 +56,7 @@ int main(void) 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..56fae2fe 100644 --- a/src/target/firmware/apps/hello_world/main.c +++ b/src/target/firmware/apps/hello_world/main.c @@ -106,7 +106,7 @@ int main(void) /* beyond this point we only react to interrupts */ puts("entering interrupt loop\n"); while (1) { - update_timers(); + osmo_timers_update(); } twl3025_power_off(); diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c index 0abfc063..c2e882e8 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -93,7 +93,7 @@ int main(void) while (1) { l1a_compl_execute(); - update_timers(); + osmo_timers_update(); sim_handler(); l1a_l23_handler(); } 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/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); -- cgit v1.2.3 From 41eed0ee31a11815c07bf4b789d723ee73dc20cd Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Fri, 1 Oct 2010 15:06:13 +0200 Subject: Removing all traces of the old display drivers. --- src/target/firmware/Makefile | 3 +- src/target/firmware/apps/hello_world/main.c | 14 +- src/target/firmware/apps/layer1/main.c | 4 - src/target/firmware/apps/simtest/main.c | 4 - src/target/firmware/board/compal_e88/init.c | 3 - src/target/firmware/board/compal_e99/init.c | 3 - src/target/firmware/board/gta0x/init.c | 3 - src/target/firmware/calypso/rtc.c | 5 - src/target/firmware/display/font_r8x8_horiz.c | 261 -------------------------- src/target/firmware/display/ssd1783.c | 257 ------------------------- src/target/firmware/include/display/ssd1783.h | 56 ------ 11 files changed, 4 insertions(+), 609 deletions(-) delete mode 100644 src/target/firmware/display/font_r8x8_horiz.c delete mode 100644 src/target/firmware/display/ssd1783.c delete mode 100644 src/target/firmware/include/display/ssd1783.h (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 388a345e..12bfa098 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -67,12 +67,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/apps/hello_world/main.c b/src/target/firmware/apps/hello_world/main.c index 56fae2fe..1f49145e 100644 --- a/src/target/firmware/apps/hello_world/main.c +++ b/src/target/firmware/apps/hello_world/main.c @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -55,7 +54,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); } @@ -97,9 +95,6 @@ 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); @@ -132,16 +127,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/layer1/main.c b/src/target/firmware/apps/layer1/main.c index c2e882e8..fb4a1fae 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -32,7 +32,6 @@ #include #include -#include #include #include @@ -75,8 +74,6 @@ int main(void) calypso_clk_dump(); puts(hr); - display_puts("layer1.bin"); - /* initialize SIM */ calypso_sim_init(); @@ -84,7 +81,6 @@ int main(void) memset(atr,0,sizeof(atr)); atrLength = calypso_sim_powerup(atr); - layer1_init(); display_unset_attr(DISP_ATTR_INVERT); 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 #include #include -#include #include #include #include @@ -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_e88/init.c b/src/target/firmware/board/compal_e88/init.c index a5bf880e..b2c360c1 100644 --- a/src/target/firmware/board/compal_e88/init.c +++ b/src/target/firmware/board/compal_e88/init.c @@ -44,7 +44,6 @@ #include #include -#include #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/compal_e99/init.c b/src/target/firmware/board/compal_e99/init.c index 0c218a8d..8714368a 100644 --- a/src/target/firmware/board/compal_e99/init.c +++ b/src/target/firmware/board/compal_e99/init.c @@ -44,7 +44,6 @@ #include #include -#include #define ARMIO_LATCH_OUT 0xfffe4802 #define IO_CNTL_REG 0xfffe4804 @@ -127,8 +126,6 @@ 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); 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 #include -#include #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/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 #include #include -#include #include #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/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 - * (C) 2010 by Harald Welte - * - * 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 -#include -//#define DEBUG -#include -#include -#include -#include -#include -#include - -#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/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 -- cgit v1.2.3 From 45d88fa052995da4fb77deb72ddf1597cfdb058c Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Mon, 11 Oct 2010 20:49:39 +0200 Subject: Calypso FB: 8 Fonts, header file and utility functions. I only activate two fonts, Helvetica Regular 8pt and bold 14pt because the others bloat the binary too much. --- src/target/firmware/fb/4x6.c | 731 +++++++++++++ src/target/firmware/fb/5x8.c | 802 ++++++++++++++ src/target/firmware/fb/font.c | 55 + src/target/firmware/fb/helvB08.c | 833 +++++++++++++++ src/target/firmware/fb/helvB14.c | 1195 +++++++++++++++++++++ src/target/firmware/fb/helvB24.c | 1871 +++++++++++++++++++++++++++++++++ src/target/firmware/fb/helvR08.c | 826 +++++++++++++++ src/target/firmware/fb/helvR14.c | 1198 +++++++++++++++++++++ src/target/firmware/fb/helvR24.c | 1870 ++++++++++++++++++++++++++++++++ src/target/firmware/include/fb/font.h | 80 ++ 10 files changed, 9461 insertions(+) create mode 100644 src/target/firmware/fb/4x6.c create mode 100644 src/target/firmware/fb/5x8.c create mode 100644 src/target/firmware/fb/font.c create mode 100644 src/target/firmware/fb/helvB08.c create mode 100644 src/target/firmware/fb/helvB14.c create mode 100644 src/target/firmware/fb/helvB24.c create mode 100644 src/target/firmware/fb/helvR08.c create mode 100644 src/target/firmware/fb/helvR14.c create mode 100644 src/target/firmware/fb/helvR24.c create mode 100644 src/target/firmware/include/fb/font.h (limited to 'src/target') 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 +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 +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/font.c b/src/target/firmware/fb/font.c new file mode 100644 index 00000000..2b82416c --- /dev/null +++ b/src/target/firmware/fb/font.c @@ -0,0 +1,55 @@ +/* Font Handling - Utility Functions */ + +/* (C) 2010 by Christian Vogel + * + * 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 + +/* 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; + +const struct fb_font *fb_fonts[]={ +// &font_4x6, +// &font_5x8, + &font_helvR08, +// &font_helvR14, +// &font_helvR24, +// &font_helvB08, + &font_helvB14, +// &font_helvB24 +}; + +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/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 +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 +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 +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 +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 +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 +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/fb/font.h b/src/target/firmware/include/fb/font.h new file mode 100644 index 00000000..680ee476 --- /dev/null +++ b/src/target/firmware/include/fb/font.h @@ -0,0 +1,80 @@ +#ifndef _FB_FONT_H +#define _FB_FONT_H + +#include +#include + +/* + 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 +}; + +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 + -- cgit v1.2.3 From ec097f532e5fd77cc627f8d18a0455bbeb694962 Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Mon, 11 Oct 2010 20:51:55 +0200 Subject: Calypso FB: Main framebuffer header file. --- src/target/firmware/fb/framebuffer.c | 28 ++++++ src/target/firmware/include/fb/framebuffer.h | 128 +++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 src/target/firmware/fb/framebuffer.c create mode 100644 src/target/firmware/include/fb/framebuffer.h (limited to 'src/target') 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 + * + * 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 + +/* currently everything's inline in framebuffer .h */ + + + 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 +#include + +/* color is encoded as */ +/* 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 + -- cgit v1.2.3 From 080124619d964ccb0ebcb3fb9703423e79029b1f Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Mon, 11 Oct 2010 20:53:25 +0200 Subject: Calypso FB: C123 / ST7558 Black and White Support --- src/target/firmware/board/compal_e88/init.c | 3 + src/target/firmware/fb/fb_bw8.c | 293 ++++++++++++++++++++++++++++ src/target/firmware/fb/fb_st7558.c | 133 +++++++++++++ src/target/firmware/include/fb/fb_bw8.h | 51 +++++ 4 files changed, 480 insertions(+) create mode 100644 src/target/firmware/fb/fb_bw8.c create mode 100644 src/target/firmware/fb/fb_st7558.c create mode 100644 src/target/firmware/include/fb/fb_bw8.h (limited to 'src/target') diff --git a/src/target/firmware/board/compal_e88/init.c b/src/target/firmware/board/compal_e88/init.c index b2c360c1..fe3fd72b 100644 --- a/src/target/firmware/board/compal_e88/init.c +++ b/src/target/firmware/board/compal_e88/init.c @@ -44,6 +44,7 @@ #include #include +#include #define ARMIO_LATCH_OUT 0xfffe4802 #define IO_CNTL_REG 0xfffe4804 @@ -122,6 +123,8 @@ void board_init(void) timer_init(); /* Initialize LCD driver (uses I2C) and backlight */ + fb_init(); + bl_mode_pwl(1); bl_level(50); diff --git a/src/target/firmware/fb/fb_bw8.c b/src/target/firmware/fb/fb_bw8.c new file mode 100644 index 00000000..7365713a --- /dev/null +++ b/src/target/firmware/fb/fb_bw8.c @@ -0,0 +1,293 @@ +/* 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 + * + * 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 +#include + +#include // debugging + +void fb_bw8_clear(){ + int i,n; + + /* bytes to clear */ + n = (framebuffer->height+7)/8 * framebuffer->width; + for(i=0;imem[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<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 memory + + 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_xwidth && 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<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_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 + * + * 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 +#include + +#include +#include +#include + +#include + +/* Sitronix ST7558 LCD Driver for OSMOCOM framebuffer interface. */ +/* (c) 2010 Christian Vogel */ +/* 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/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 -- cgit v1.2.3 From df4218c8fd6d4a20c8840fd6246e41c58172bc09 Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Mon, 11 Oct 2010 20:54:57 +0200 Subject: Calypso FB: C155 / SSD1783 Color Support --- src/target/firmware/board/compal_e99/init.c | 4 + src/target/firmware/fb/fb_rgb332.c | 283 ++++++++++++++++++++++++++++ src/target/firmware/fb/fb_ssd1783.c | 194 +++++++++++++++++++ src/target/firmware/include/fb/fb_rgb332.h | 27 +++ 4 files changed, 508 insertions(+) create mode 100644 src/target/firmware/fb/fb_rgb332.c create mode 100644 src/target/firmware/fb/fb_ssd1783.c create mode 100644 src/target/firmware/include/fb/fb_rgb332.h (limited to 'src/target') diff --git a/src/target/firmware/board/compal_e99/init.c b/src/target/firmware/board/compal_e99/init.c index 8714368a..1d587fa5 100644 --- a/src/target/firmware/board/compal_e99/init.c +++ b/src/target/firmware/board/compal_e99/init.c @@ -45,6 +45,8 @@ #include #include +#include + #define ARMIO_LATCH_OUT 0xfffe4802 #define IO_CNTL_REG 0xfffe4804 #define ASIC_CONF_REG 0xfffef008 @@ -129,6 +131,8 @@ void board_init(void) bl_mode_pwl(1); bl_level(50); + fb_init(); + /* Initialize keypad driver */ keypad_init(1); diff --git a/src/target/firmware/fb/fb_rgb332.c b/src/target/firmware/fb/fb_rgb332.c new file mode 100644 index 00000000..223e792d --- /dev/null +++ b/src/target/firmware/fb/fb_rgb332.c @@ -0,0 +1,283 @@ +/* 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 + * + * 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 +#include +#include +#include + +void +fb_rgb332_clear(){ + int i,n; + + /* bytes to clear */ + n = framebuffer->height * framebuffer->width; + for(i=0;imem[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) >> 2; /* 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; // pointer into framebuffer memory + + 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); + + 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_xwidth && + 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<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..19aa86db --- /dev/null +++ b/src/target/firmware/fb/fb_ssd1783.c @@ -0,0 +1,194 @@ +/* Framebuffer implementation - SSD1783 LCD driver for C155 */ +/* Based on ssd1783.c by Steve Markgraf and Harald Welte */ + +/* (C) 2010 by Christian Vogel + * + * 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 +#include + +#include +#include +#include +#include +#include + +#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 LSB */ +/* --------- /DIFFERENT ---------- */ + { CMD, 0xce }, /* CMD Set 256 Color Look Up Table LUT */ + { DATA, 0x00 }, /* DATA: R[000], G[000], B[00] 3-bit R and G have */ + { DATA, 0x09 }, /* DATA: R[001], G[001] eight levels defined */ + { DATA, 0x12 }, /* DATA: R[010], G[010] of which the first and */ + { DATA, 0x1b }, /* DATA: R[011], G[011] the last are shared */ + { DATA, 0x24 }, /* DATA: R[100], G[100] by 2-bit blue */ + { DATA, 0x2d }, /* DATA: R[101], G[101] The intermediate two */ + { DATA, 0x36 }, /* DATA: R[110], G[110] steps are defined */ + { DATA, 0x3f }, /* DATA: R[111], G[111], B[11] separately */ + { DATA, 0x12 }, /* DATA: B[01] */ + { DATA, 0x24 }, /* DATA: B[10] */ + { 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;ydamage_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;xdamage_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/include/fb/fb_rgb332.h b/src/target/firmware/include/fb/fb_rgb332.h new file mode 100644 index 00000000..8bf8168f --- /dev/null +++ b/src/target/firmware/include/fb/fb_rgb332.h @@ -0,0 +1,27 @@ +#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; + +#endif -- cgit v1.2.3 From de8bb97ed51af386c35c659e94c9f08248ed65a4 Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Thu, 14 Oct 2010 21:00:16 +0200 Subject: Calypso FB: Makefile, "dummy" driver, Hello World --- src/target/firmware/Makefile | 20 ++++++--- src/target/firmware/apps/hello_world/main.c | 25 +++++++++++ src/target/firmware/fb/fb_dummy.c | 69 +++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 src/target/firmware/fb/fb_dummy.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 12bfa098..624b0555 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -6,6 +6,14 @@ 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 +# Framebuffer support, board specific drivers +# + +FB_OBJS=fb/framebuffer.o fb/font.o fb/helvR08.o fb/helvB14.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_dummy_OBJS=$(FB_OBJS) fb/fb_dummy.o # TI Calypso @@ -13,12 +21,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 +42,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 +53,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_dummy_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 +67,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_dummy_OBJS) se_j100_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) # Global include path diff --git a/src/target/firmware/apps/hello_world/main.c b/src/target/firmware/apps/hello_world/main.c index 1f49145e..174d7e3f 100644 --- a/src/target/firmware/apps/hello_world/main.c +++ b/src/target/firmware/apps/hello_world/main.c @@ -40,6 +40,7 @@ #include #include #include +#include /* Main Program */ const char *hr = "======================================================================\n"; @@ -87,6 +88,30 @@ int main(void) calypso_clk_dump(); puts(hr); + fb_clear(); + + fb_setfg(FB_COLOR_GREEN); + 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 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 + * + * 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 + +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; -- cgit v1.2.3 From 30dd87115c56fa6915881d93cd4d0ccb18dab035 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 15 Dec 2011 07:14:40 +0100 Subject: firmware/framebuffer: Adding fixed with font with 8x8 pixles --- src/target/firmware/Makefile | 2 +- src/target/firmware/fb/c64.c | 1069 +++++++++++++++++++++++++++++++++ src/target/firmware/fb/font.c | 4 +- src/target/firmware/include/fb/font.h | 3 +- 4 files changed, 1075 insertions(+), 3 deletions(-) create mode 100644 src/target/firmware/fb/c64.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 624b0555..8394d441 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -9,7 +9,7 @@ APPLICATIONS?=hello_world compal_dsp_dump layer1 loader chainload # Framebuffer support, board specific drivers # -FB_OBJS=fb/framebuffer.o fb/font.o fb/helvR08.o fb/helvB14.o +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 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 +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/font.c b/src/target/firmware/fb/font.c index 2b82416c..d98096f3 100644 --- a/src/target/firmware/fb/font.c +++ b/src/target/firmware/fb/font.c @@ -31,6 +31,7 @@ extern const struct fb_font font_helvR14; //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, @@ -40,7 +41,8 @@ const struct fb_font *fb_fonts[]={ // &font_helvR24, // &font_helvB08, &font_helvB14, -// &font_helvB24 +// &font_helvB24, + &font_c64, }; const struct fb_char * diff --git a/src/target/firmware/include/fb/font.h b/src/target/firmware/include/fb/font.h index 680ee476..40a6974b 100644 --- a/src/target/firmware/include/fb/font.h +++ b/src/target/firmware/include/fb/font.h @@ -68,7 +68,8 @@ enum fb_font_id { // FB_FONT_HELVR24, // FB_FONT_HELVB08, FB_FONT_HELVB14, -// FB_FONT_HELVB24 +// FB_FONT_HELVB24, + FB_FONT_C64, }; extern const struct fb_font *fb_fonts[]; // note: has to match fb_font_id enum! -- cgit v1.2.3 From 593d905f0fa70631a1329aa1c1191a888ca0c99f Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 15 Dec 2011 05:58:24 +0100 Subject: firmare/framebuffer: Option to center text This is usefull, because actual width of proportional font text and display width may not be known to application. --- src/target/firmware/fb/fb_bw8.c | 20 +++++++++++++++++++- src/target/firmware/fb/fb_rgb332.c | 20 ++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) (limited to 'src/target') diff --git a/src/target/firmware/fb/fb_bw8.c b/src/target/firmware/fb/fb_bw8.c index 7365713a..7a8323df 100644 --- a/src/target/firmware/fb/fb_bw8.c +++ b/src/target/firmware/fb/fb_bw8.c @@ -189,7 +189,25 @@ fb_bw8_putstr(char *str,int maxwidth){ 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 memory + 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!) diff --git a/src/target/firmware/fb/fb_rgb332.c b/src/target/firmware/fb/fb_rgb332.c index 223e792d..26cbeec5 100644 --- a/src/target/firmware/fb/fb_rgb332.c +++ b/src/target/firmware/fb/fb_rgb332.c @@ -205,6 +205,26 @@ int fb_rgb332_putstr(char *str,int maxwidth){ 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; // 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!) -- cgit v1.2.3 From 4a5e3404f9e5ad9da7e12ef509e823b0953e143a Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Mon, 30 Jan 2012 08:18:26 +0100 Subject: [PATCH] fw/fb/ssd1783: fix the RGB332 color palette We revert the initialization of the palette to the behaviour of the old non-fb driver. Signed-off-by: Steve Markgraf Signed-off-by: Andreas Eversberg --- src/target/firmware/fb/fb_ssd1783.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/fb/fb_ssd1783.c b/src/target/firmware/fb/fb_ssd1783.c index 19aa86db..cacdce03 100644 --- a/src/target/firmware/fb/fb_ssd1783.c +++ b/src/target/firmware/fb/fb_ssd1783.c @@ -64,16 +64,26 @@ ssd1783_initdata[] = { /*-->*/ { DATA, 0x01 }, /* DATA: 8 bit per pixel mode MSB LSB */ /* --------- /DIFFERENT ---------- */ { CMD, 0xce }, /* CMD Set 256 Color Look Up Table LUT */ - { DATA, 0x00 }, /* DATA: R[000], G[000], B[00] 3-bit R and G have */ - { DATA, 0x09 }, /* DATA: R[001], G[001] eight levels defined */ - { DATA, 0x12 }, /* DATA: R[010], G[010] of which the first and */ - { DATA, 0x1b }, /* DATA: R[011], G[011] the last are shared */ - { DATA, 0x24 }, /* DATA: R[100], G[100] by 2-bit blue */ - { DATA, 0x2d }, /* DATA: R[101], G[101] The intermediate two */ - { DATA, 0x36 }, /* DATA: R[110], G[110] steps are defined */ - { DATA, 0x3f }, /* DATA: R[111], G[111], B[11] separately */ - { DATA, 0x12 }, /* DATA: B[01] */ - { DATA, 0x24 }, /* DATA: B[10] */ + { 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 :-( -- cgit v1.2.3 From fc49eccb0cb0a1d6b3c12e173867473f8d3d4393 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 30 Jan 2012 08:21:29 +0100 Subject: firmware/fb: Adding transparent background color for fonts --- src/target/firmware/fb/fb_rgb332.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/fb/fb_rgb332.c b/src/target/firmware/fb/fb_rgb332.c index 26cbeec5..9955d16c 100644 --- a/src/target/firmware/fb/fb_rgb332.c +++ b/src/target/firmware/fb/fb_rgb332.c @@ -204,7 +204,7 @@ int fb_rgb332_putstr(char *str,int maxwidth){ 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; // pointer into framebuffer memory + uint8_t *p,fgpixel,bgpixel,trans; // pointer into framebuffer memory int total_w; // total width /* center, if maxwidth < 0 */ @@ -236,6 +236,7 @@ int fb_rgb332_putstr(char *str,int maxwidth){ 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; @@ -288,7 +289,8 @@ int fb_rgb332_putstr(char *str,int maxwidth){ *p = fgpixel; } else { // unset, or outside bitmap outside_char_bitmap: - *p = bgpixel; + if (!trans) + *p = bgpixel; } p++; } // for(x...) -- cgit v1.2.3 From cf5ba98c10508be4f8c10459b431806686df216c Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 30 Jan 2012 08:22:36 +0100 Subject: firmware/fb: Fixed color component shift --- src/target/firmware/fb/fb_rgb332.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/target') diff --git a/src/target/firmware/fb/fb_rgb332.c b/src/target/firmware/fb/fb_rgb332.c index 9955d16c..72ed87b8 100644 --- a/src/target/firmware/fb/fb_rgb332.c +++ b/src/target/firmware/fb/fb_rgb332.c @@ -90,7 +90,7 @@ fb_rgb332_update_damage( 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) >> 2; /* 432 = GGG */ + ret |= (FB_COLOR_TO_G(color) & 0xe0) >> 3; /* 432 = GGG */ ret |= (FB_COLOR_TO_B(color) & 0xc0) >> 6; /* 10 = BB */ return ret; } -- cgit v1.2.3 From 12d7ca237fd7dce4a37497428694d9b6729184e7 Mon Sep 17 00:00:00 2001 From: Christian Vogel Date: Mon, 30 Jan 2012 14:57:44 +0100 Subject: Calypso FB: RGB332 to RGB565 conversion function. --- src/target/firmware/include/fb/fb_rgb332.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/target') diff --git a/src/target/firmware/include/fb/fb_rgb332.h b/src/target/firmware/include/fb/fb_rgb332.h index 8bf8168f..4df44e4e 100644 --- a/src/target/firmware/include/fb/fb_rgb332.h +++ b/src/target/firmware/include/fb/fb_rgb332.h @@ -24,4 +24,24 @@ 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 -- cgit v1.2.3 From 4284a90a2a8dc8220fb15a15fd8793e4ae1a2121 Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Mon, 30 Jan 2012 15:50:43 +0100 Subject: firmware/fb: add framebuffer driver for TD014 display (C139/C140) Signed-off-by: Steve Markgraf --- src/target/firmware/Makefile | 3 +- src/target/firmware/board/compal_e86/init.c | 6 +- src/target/firmware/fb/fb_td014.c | 150 ++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 4 deletions(-) create mode 100644 src/target/firmware/fb/fb_td014.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 8394d441..561cd519 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -13,6 +13,7 @@ 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_dummy_OBJS=$(FB_OBJS) fb/fb_dummy.o # TI Calypso @@ -53,7 +54,7 @@ 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 $(FB_dummy_OBJS) +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 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 #include -#include + +#include #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/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 + * (C) 2012 by Steve Markgraf + * + * 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 +#include + +#include +#include +#include +#include +#include + +#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;ydamage_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; xdamage_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; -- cgit v1.2.3 From 533d5e6dc40946375b7582c08e56b6f8f1c839b6 Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Mon, 30 Jan 2012 18:18:56 +0100 Subject: firmware/fb: add framebuffer driver for J100i display Signed-off-by: Steve Markgraf --- src/target/firmware/Makefile | 3 +- src/target/firmware/board/se_j100/init.c | 6 +- src/target/firmware/fb/fb_ssd1963.c | 196 +++++++++++++++++++++++++++++++ 3 files changed, 201 insertions(+), 4 deletions(-) create mode 100644 src/target/firmware/fb/fb_ssd1963.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 561cd519..89a3d0bf 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -14,6 +14,7 @@ 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 @@ -68,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 $(FB_dummy_OBJS) +se_j100_OBJS=$(compal_COMMON_OBJS) board/se_j100/init.o $(FB_j100_OBJS) se_j100_ENVIRONMENTS=$(compal_COMMON_ENVIRONMENTS) # Global include path 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 #include -#include + +#include #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/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 + * (C) 2012 by Steve Markgraf + * + * 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 +#include + +#include +#include +#include +#include +#include + +#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;ydamage_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;xdamage_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; -- cgit v1.2.3 From 0f95771e62498a20e9b8b0d5a9782543ab0ddd80 Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Mon, 30 Jan 2012 18:23:54 +0100 Subject: firmware: remove deprecated function calls of old display API, cosmetic changes Signed-off-by: Steve Markgraf --- src/target/firmware/apps/layer1/main.c | 10 ++++------ src/target/firmware/board/pirelli_dpl10/init.c | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c index fb4a1fae..f58edd83 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -75,16 +75,14 @@ int main(void) puts(hr); /* initialize SIM */ - calypso_sim_init(); + calypso_sim_init(); - puts("Power up simcard:\n"); - memset(atr,0,sizeof(atr)); - atrLength = calypso_sim_powerup(atr); + puts("Power up simcard:\n"); + memset(atr,0,sizeof(atr)); + atrLength = calypso_sim_powerup(atr); layer1_init(); - display_unset_attr(DISP_ATTR_INVERT); - tpu_frame_irq_en(1, 1); while (1) { 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 #include -#include + +#include #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); -- cgit v1.2.3 From d37d04dfdcd029f0721e8beddb2686d5316f1e5c Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Mon, 30 Jan 2012 18:27:56 +0100 Subject: firmware: remove deprecated display drivers and fonts Signed-off-by: Steve Markgraf --- src/target/firmware/display/display.c | 20 --- src/target/firmware/display/font_r8x8.c | 261 -------------------------------- src/target/firmware/display/ssd1963.c | 210 ------------------------- src/target/firmware/display/st7558.c | 121 --------------- src/target/firmware/display/td014.c | 185 ---------------------- src/target/firmware/include/display.h | 49 ------ 6 files changed, 846 deletions(-) delete mode 100644 src/target/firmware/display/display.c delete mode 100644 src/target/firmware/display/font_r8x8.c delete mode 100644 src/target/firmware/display/ssd1963.c delete mode 100644 src/target/firmware/display/st7558.c delete mode 100644 src/target/firmware/display/td014.c delete mode 100644 src/target/firmware/include/display.h (limited to 'src/target') 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 - -#include - -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/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 - * (C) 2010 by Harald Welte - * - * 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 -#include -#include -#include -#include -#include -#include - -#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 - * - * 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 -#include - -#include -#include -#include -#include -#include -#include - -#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 - * (C) 2010 by Harald Welte - * - * 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 -#include - -#include -#include -#include -#include -#include - -#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/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 -- cgit v1.2.3 From 7ff649a6a7c385140f38f9f4676a4677d3d9a07a Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Fri, 3 Feb 2012 17:20:00 +0100 Subject: firmware/apps: print application name on the display Now we're printing the application name on all apps that initialize the display (again). Signed-off-by: Steve Markgraf --- src/target/firmware/apps/compal_dsp_dump/main.c | 23 +++++++++++++++++++++++ src/target/firmware/apps/hello_world/main.c | 2 +- src/target/firmware/apps/layer1/main.c | 24 ++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/compal_dsp_dump/main.c b/src/target/firmware/apps/compal_dsp_dump/main.c index 8debae73..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 #include #include +#include /* Main Program */ const char *hr = "======================================================================\n"; @@ -52,6 +53,28 @@ 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(); diff --git a/src/target/firmware/apps/hello_world/main.c b/src/target/firmware/apps/hello_world/main.c index 174d7e3f..cdf4dae0 100644 --- a/src/target/firmware/apps/hello_world/main.c +++ b/src/target/firmware/apps/hello_world/main.c @@ -90,7 +90,7 @@ int main(void) fb_clear(); - fb_setfg(FB_COLOR_GREEN); + fb_setfg(FB_COLOR_BLACK); fb_setbg(FB_COLOR_WHITE); fb_setfont(FB_FONT_HELVB14); diff --git a/src/target/firmware/apps/layer1/main.c b/src/target/firmware/apps/layer1/main.c index f58edd83..0513d624 100644 --- a/src/target/firmware/apps/layer1/main.c +++ b/src/target/firmware/apps/layer1/main.c @@ -48,6 +48,8 @@ #include #include +#include + const char *hr = "======================================================================\n"; /* MAIN program **************************************************************/ @@ -74,6 +76,28 @@ 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("Layer 1",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(); + /* initialize SIM */ calypso_sim_init(); -- cgit v1.2.3 From 99a4af4260a288d75cdd0afa24caf366b3e33f53 Mon Sep 17 00:00:00 2001 From: Steve Markgraf Date: Fri, 3 Feb 2012 17:22:37 +0100 Subject: firmware/apps: remove l1test-application This application had already been removed a while ago, but was added again with one of the initial framebuffer commits. Signed-off-by: Steve Markgraf --- src/target/firmware/apps/l1test/main.c | 249 --------------------------------- 1 file changed, 249 deletions(-) delete mode 100644 src/target/firmware/apps/l1test/main.c (limited to 'src/target') 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 - * - * 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 -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#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; - } -} -- cgit v1.2.3 From c338fc3343e3a01c26030ddebb9b42ac6a5b3179 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Thu, 26 Jan 2012 18:58:09 +0100 Subject: Adding "monitor" application to firmware This app is used to measure receive level of given channels. By pressing digits, the channel can be selected. By pressing left or right button, the frequency is increased/decreased. By pressing the menu button, the maximum received level is shown until pressing menu button again. (usefull for hopping) By pressing up or down button, the volume of a tone is changed, that indicates rx level. The left soft button is used to toggle PCS/DCS on shared channel numbers. The right soft button is used to toggle uplink and downlink. --- src/target/firmware/Makefile | 2 +- src/target/firmware/apps/monitor/main.c | 598 ++++++++++++++++++++++++++++++++ 2 files changed, 599 insertions(+), 1 deletion(-) create mode 100644 src/target/firmware/apps/monitor/main.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index 89a3d0bf..de1e71ea 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -4,7 +4,7 @@ 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 monitor # Framebuffer support, board specific drivers # diff --git a/src/target/firmware/apps/monitor/main.c b/src/target/firmware/apps/monitor/main.c new file mode 100644 index 00000000..afd9a055 --- /dev/null +++ b/src/target/firmware/apps/monitor/main.c @@ -0,0 +1,598 @@ +/* Cell Monitor of Free Software for Calypso Phone */ + +/* (C) 2012 by Andreas Eversberg + * + * 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 +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum key_codes key_code = KEY_INV; + +enum mode { + MODE_MAIN, + MODE_ARFCN, +} mode = MODE_MAIN; + +static uint16_t arfcn = 0; +int pcs = 0; +int uplink = 0; +int max = 0; +uint8_t power, max_power; +char input[5]; +int cursor; + +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_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; + +#define TONE_JIFFIES 4 +int tone = 0; +unsigned long tone_time; +int tone_on = 0; + +/* UI */ + +static void refresh_display(void) +{ + char text[16]; + + fb_clear(); + + /* header */ + fb_setfg(FB_COLOR_BLUE); + fb_setbg(FB_COLOR_WHITE); + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(0,6); + fb_putstr("Osmocom Montitor Tool",-1); + fb_gotoxy(0,10); + fb_setfg(FB_COLOR_BLACK); + fb_boxto(framebuffer->width-1,10); + + fb_setfont(FB_FONT_C64); + + /* 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_gotoxy(80,39); + fb_putstr("max",framebuffer->width); + fb_setfont(FB_FONT_C64); + } + fb_gotoxy(0,45); + fb_boxto(framebuffer->width * power / 64, 46); + fb_gotoxy(0,47); + fb_boxto(framebuffer->width * power / 64, 48); + fb_gotoxy(0,49); + fb_boxto(framebuffer->width * power / 64, 50); + } + + /* footer */ + fb_gotoxy(0,55); + fb_boxto(framebuffer->width-1,55); + fb_gotoxy(0,64); + if (mode == MODE_ARFCN) + sprintf(text, "%s %s", (cursor) ? "del " : "back", + (cursor) ? "enter" : " "); + else + sprintf(text, "%s %s", (pcs) ? "PCS" : "DCS", + (uplink) ? "UL" : "DL"); + fb_putstr(text,framebuffer->width); + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(0,63); + sprintf(text, "%d", tone / 25); + fb_putstr(text,-1); + + fb_flush(); +} + +static void exit_arfcn(void) +{ + mode = MODE_MAIN; + refresh_display(); +} + +static void enter_arfcn(enum key_codes code) +{ + /* enter mode */ + if (mode != MODE_ARFCN) { + 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 (!temp->max) + return; + if (check > 1023) + return; + arfcn = check; + band = temp; + mode = MODE_MAIN; + 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 (!band->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 (!band->max) + return -EINVAL; + + refresh_display(); + + return 0; +} + +static void toggle_dcs_pcs(void) +{ + pcs = !pcs; + refresh_display(); +} + +static void toggle_up_down(void) +{ + uplink = !uplink; + 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; +} + +static void handle_key_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_ARFCN) + enter_arfcn(key_code); + break; + case KEY_UP: + tone_inc_dec(1); + break; + case KEY_DOWN: + tone_inc_dec(0); + break; + case KEY_RIGHT: + if (mode == MODE_MAIN) + inc_dec_arfcn(1); + break; + case KEY_LEFT: + if (mode == MODE_MAIN) + inc_dec_arfcn(0); + break; + case KEY_LEFT_SB: + if (mode == MODE_MAIN) + toggle_dcs_pcs(); + else if (mode == MODE_ARFCN) + enter_arfcn(key_code); + break; + case KEY_RIGHT_SB: + if (mode == MODE_MAIN) + toggle_up_down(); + else if (mode == MODE_ARFCN) + enter_arfcn(key_code); + break; + case KEY_MENU: + hold_max(); + break; + case KEY_POWER: + if (mode == MODE_ARFCN) + exit_arfcn(); + 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) { + struct msgb *msg = l1ctl_msgb_alloc(L1CTL_PM_REQ); + struct l1ctl_pm_req *pm; + unsigned short a = arfcn; + + pm = (struct l1ctl_pm_req *) msgb_put(msg, sizeof(*pm)); + pm->type = 1; + if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) + a |= ARFCN_PCS; + if (uplink) + a |= ARFCN_UPLINK; + pm->range.band_arfcn_from = htons(a); + pm->range.band_arfcn_to = htons(a); + + l1a_l23_rx(SC_DLCI_L1A_L23, msg); + + pm_mode = PM_SENT; + 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; + } +} + +/* 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; + + switch (l1h->msg_type) { + case L1CTL_PM_CONF: + pmr = (struct l1ctl_pm_conf *) l1h->data; + pm_meas[pm_count] = pmr->pm[0]; + pm_count++; + pm_mode = PM_RESULT; + l1s.tpu_offset_correction += 5000 / NUM_PM_UL; + 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) + return; + + 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); + + /* 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_tone(); + } + + /* NOT REACHED */ + + twl3025_power_off(); +} + -- cgit v1.2.3 From 97d731de34deebac062f2086d4902b24863a04e2 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 28 Jan 2012 12:09:31 +0100 Subject: layer1/monitor: Adding spectrum analyzer to monitor app By pressing '*', the analyzer is turned on or off. Each beep indicated a new measurement result. Right and left button can be used to scroll. By holding the button, the input is repeated. --- src/target/firmware/apps/monitor/main.c | 246 +++++++++++++++++++++++++++----- 1 file changed, 211 insertions(+), 35 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/monitor/main.c b/src/target/firmware/apps/monitor/main.c index afd9a055..5d247958 100644 --- a/src/target/firmware/apps/monitor/main.c +++ b/src/target/firmware/apps/monitor/main.c @@ -49,11 +49,17 @@ #include 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 = MODE_MAIN; +enum mode last_mode; /* where to return after entering ARFCN */ static uint16_t arfcn = 0; int pcs = 0; @@ -84,6 +90,8 @@ struct band *band; enum pm_mode { PM_IDLE, PM_SENT, + PM_RANGE_SENT, + PM_RANGE_RESULT, PM_RESULT, } pm_mode = PM_IDLE; @@ -92,6 +100,8 @@ enum pm_mode { 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; @@ -107,15 +117,17 @@ static void refresh_display(void) fb_clear(); /* header */ - fb_setfg(FB_COLOR_BLUE); fb_setbg(FB_COLOR_WHITE); - fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(0,6); - fb_putstr("Osmocom Montitor Tool",-1); - fb_gotoxy(0,10); + if (mode != MODE_SPECTRUM) { + fb_setfg(FB_COLOR_BLUE); + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(0,6); + fb_putstr("Osmocom Monitor Tool",-1); + fb_gotoxy(0,10); + fb_setfg(FB_COLOR_BLACK); + fb_boxto(framebuffer->width-1,10); + } fb_setfg(FB_COLOR_BLACK); - fb_boxto(framebuffer->width-1,10); - fb_setfont(FB_FONT_C64); /* ARFCN */ @@ -169,12 +181,67 @@ static void refresh_display(void) fb_putstr("max",framebuffer->width); fb_setfont(FB_FONT_C64); } + fb_setbg(FB_COLOR_BLACK); fb_gotoxy(0,45); - fb_boxto(framebuffer->width * power / 64, 46); - fb_gotoxy(0,47); - fb_boxto(framebuffer->width * power / 64, 48); - fb_gotoxy(0,49); 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; + + 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, " %d", pm_spectrum[arfcn & 1023] - 110); + fb_putstr(text,framebuffer->width); + if (max) { + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(80,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); + } + 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 - 1; 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 * 40 / 64); + if (p > 40) + p = 40; + fb_gotoxy(i, 50 - p); + fb_boxto(i, 50); + } + i = framebuffer->width >> 1; + fb_gotoxy(i, 0); + fb_boxto(i, 4); + fb_gotoxy(i, 50); + fb_boxto(i, 54); } /* footer */ @@ -198,7 +265,7 @@ static void refresh_display(void) static void exit_arfcn(void) { - mode = MODE_MAIN; + mode = last_mode; refresh_display(); } @@ -206,6 +273,7 @@ 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'; @@ -250,13 +318,13 @@ static void enter_arfcn(enum key_codes code) break; } } - if (!temp->max) + if (!bands[i].max) return; if (check > 1023) return; arfcn = check; band = temp; - mode = MODE_MAIN; + mode = last_mode; refresh_display(); return; } @@ -285,7 +353,7 @@ static int inc_dec_arfcn(int inc) break; } } - if (!band->max) + if (!bands[i].max) return -EINVAL; if (inc) { @@ -314,7 +382,7 @@ static int inc_dec_arfcn(int inc) break; } } - if (!band->max) + if (!bands[i].max) return -EINVAL; refresh_display(); @@ -334,6 +402,21 @@ static void toggle_up_down(void) refresh_display(); } +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) { @@ -351,10 +434,41 @@ static void hold_max(void) { max = !max; max_power = power; + refresh_display(); +} + +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 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; @@ -373,31 +487,37 @@ static void handle_key_code() case KEY_7: case KEY_8: case KEY_9: - if (mode == MODE_MAIN || mode == MODE_ARFCN) + if (mode == MODE_MAIN || mode == MODE_SPECTRUM || mode == MODE_ARFCN) enter_arfcn(key_code); break; case KEY_UP: - tone_inc_dec(1); + if (mode == MODE_MAIN) + tone_inc_dec(1); + else if (mode == MODE_SPECTRUM) + inc_dec_spectrum(1); break; case KEY_DOWN: - tone_inc_dec(0); + if (mode == MODE_MAIN) + tone_inc_dec(0); + else if (mode == MODE_SPECTRUM) + inc_dec_spectrum(0); break; case KEY_RIGHT: - if (mode == MODE_MAIN) + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) inc_dec_arfcn(1); break; case KEY_LEFT: - if (mode == MODE_MAIN) + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) inc_dec_arfcn(0); break; case KEY_LEFT_SB: - if (mode == MODE_MAIN) + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) toggle_dcs_pcs(); else if (mode == MODE_ARFCN) enter_arfcn(key_code); break; case KEY_RIGHT_SB: - if (mode == MODE_MAIN) + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) toggle_up_down(); else if (mode == MODE_ARFCN) enter_arfcn(key_code); @@ -408,6 +528,12 @@ static void handle_key_code() case KEY_POWER: if (mode == MODE_ARFCN) exit_arfcn(); + else if (mode == MODE_SPECTRUM) + toggle_spectrum(); + break; + case KEY_STAR: + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) + toggle_spectrum(); break; default: break; @@ -445,23 +571,41 @@ static void handle_tone(void) static void handle_pm(void) { /* start power measurement */ - if (pm_mode == PM_IDLE && mode == MODE_MAIN) { + 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; - unsigned short a = arfcn; + uint16_t a, e; pm = (struct l1ctl_pm_req *) msgb_put(msg, sizeof(*pm)); pm->type = 1; - if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) - a |= ARFCN_PCS; - if (uplink) + 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(a); + pm->range.band_arfcn_to = htons(e); l1a_l23_rx(SC_DLCI_L1A_L23, msg); - pm_mode = PM_SENT; return; } @@ -492,6 +636,16 @@ static void handle_pm(void) } 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; + } } /* Main Program */ @@ -505,10 +659,21 @@ static void l1a_l23_tx(struct msgb *msg) switch (l1h->msg_type) { case L1CTL_PM_CONF: - pmr = (struct l1ctl_pm_conf *) l1h->data; - pm_meas[pm_count] = pmr->pm[0]; - pm_count++; - pm_mode = PM_RESULT; + 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; } @@ -539,8 +704,17 @@ static void l1a_l23_rx_cb(uint8_t dlci, struct msgb *msg) static void key_handler(enum key_codes code, enum key_states state) { - if (state != PRESSED) + 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; } @@ -579,6 +753,8 @@ int main(void) buzzer_mode_pwt(1); buzzer_volume(0); + memset(pm_spectrum, 0, sizeof(pm_spectrum)); + /* inc 0 to 1 and refresh */ inc_dec_arfcn(1); -- cgit v1.2.3 From b7c4b9b6f5babd26d9cbbeb453976e3c40d42549 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 28 Jan 2012 13:29:10 +0100 Subject: rename 'monitor' to 'rssi' Sooner or later we might have a much more comprehensive monitor, so it's good to name the current implementation just RSSI as that's all it does. --- src/target/firmware/Makefile | 2 +- src/target/firmware/apps/monitor/main.c | 774 -------------------------------- src/target/firmware/apps/rssi/main.c | 774 ++++++++++++++++++++++++++++++++ 3 files changed, 775 insertions(+), 775 deletions(-) delete mode 100644 src/target/firmware/apps/monitor/main.c create mode 100644 src/target/firmware/apps/rssi/main.c (limited to 'src/target') diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile index de1e71ea..ffdfe5d2 100644 --- a/src/target/firmware/Makefile +++ b/src/target/firmware/Makefile @@ -4,7 +4,7 @@ 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 monitor +APPLICATIONS?=hello_world compal_dsp_dump layer1 loader chainload rssi # Framebuffer support, board specific drivers # diff --git a/src/target/firmware/apps/monitor/main.c b/src/target/firmware/apps/monitor/main.c deleted file mode 100644 index 5d247958..00000000 --- a/src/target/firmware/apps/monitor/main.c +++ /dev/null @@ -1,774 +0,0 @@ -/* Cell Monitor of Free Software for Calypso Phone */ - -/* (C) 2012 by Andreas Eversberg - * - * 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 -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -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 = MODE_MAIN; -enum mode last_mode; /* where to return after entering ARFCN */ - -static uint16_t arfcn = 0; -int pcs = 0; -int uplink = 0; -int max = 0; -uint8_t power, max_power; -char input[5]; -int cursor; - -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; - -/* UI */ - -static void refresh_display(void) -{ - char text[16]; - - fb_clear(); - - /* header */ - fb_setbg(FB_COLOR_WHITE); - if (mode != MODE_SPECTRUM) { - fb_setfg(FB_COLOR_BLUE); - fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(0,6); - fb_putstr("Osmocom Monitor Tool",-1); - fb_gotoxy(0,10); - fb_setfg(FB_COLOR_BLACK); - fb_boxto(framebuffer->width-1,10); - } - fb_setfg(FB_COLOR_BLACK); - fb_setfont(FB_FONT_C64); - - /* 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_gotoxy(80,39); - fb_putstr("max",framebuffer->width); - fb_setfont(FB_FONT_C64); - } - 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; - - 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, " %d", pm_spectrum[arfcn & 1023] - 110); - fb_putstr(text,framebuffer->width); - if (max) { - fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(80,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); - } - 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 - 1; 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 * 40 / 64); - if (p > 40) - p = 40; - fb_gotoxy(i, 50 - p); - fb_boxto(i, 50); - } - i = framebuffer->width >> 1; - fb_gotoxy(i, 0); - fb_boxto(i, 4); - fb_gotoxy(i, 50); - fb_boxto(i, 54); - } - - /* footer */ - fb_gotoxy(0,55); - fb_boxto(framebuffer->width-1,55); - fb_gotoxy(0,64); - if (mode == MODE_ARFCN) - sprintf(text, "%s %s", (cursor) ? "del " : "back", - (cursor) ? "enter" : " "); - else - sprintf(text, "%s %s", (pcs) ? "PCS" : "DCS", - (uplink) ? "UL" : "DL"); - fb_putstr(text,framebuffer->width); - fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(0,63); - 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 toggle_dcs_pcs(void) -{ - pcs = !pcs; - refresh_display(); -} - -static void toggle_up_down(void) -{ - uplink = !uplink; - refresh_display(); -} - -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_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 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_SPECTRUM) - inc_dec_spectrum(1); - break; - case KEY_DOWN: - if (mode == MODE_MAIN) - tone_inc_dec(0); - else if (mode == MODE_SPECTRUM) - inc_dec_spectrum(0); - break; - case KEY_RIGHT: - if (mode == MODE_MAIN || mode == MODE_SPECTRUM) - inc_dec_arfcn(1); - break; - case KEY_LEFT: - if (mode == MODE_MAIN || mode == MODE_SPECTRUM) - inc_dec_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); - break; - case KEY_RIGHT_SB: - if (mode == MODE_MAIN || mode == MODE_SPECTRUM) - toggle_up_down(); - else if (mode == MODE_ARFCN) - enter_arfcn(key_code); - break; - case KEY_MENU: - hold_max(); - break; - case KEY_POWER: - if (mode == MODE_ARFCN) - exit_arfcn(); - 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; - } -} - -/* 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; - - 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; - } - - 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)); - - /* 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_tone(); - } - - /* NOT REACHED */ - - twl3025_power_off(); -} - diff --git a/src/target/firmware/apps/rssi/main.c b/src/target/firmware/apps/rssi/main.c new file mode 100644 index 00000000..5d247958 --- /dev/null +++ b/src/target/firmware/apps/rssi/main.c @@ -0,0 +1,774 @@ +/* Cell Monitor of Free Software for Calypso Phone */ + +/* (C) 2012 by Andreas Eversberg + * + * 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 +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 = MODE_MAIN; +enum mode last_mode; /* where to return after entering ARFCN */ + +static uint16_t arfcn = 0; +int pcs = 0; +int uplink = 0; +int max = 0; +uint8_t power, max_power; +char input[5]; +int cursor; + +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; + +/* UI */ + +static void refresh_display(void) +{ + char text[16]; + + fb_clear(); + + /* header */ + fb_setbg(FB_COLOR_WHITE); + if (mode != MODE_SPECTRUM) { + fb_setfg(FB_COLOR_BLUE); + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(0,6); + fb_putstr("Osmocom Monitor Tool",-1); + fb_gotoxy(0,10); + fb_setfg(FB_COLOR_BLACK); + fb_boxto(framebuffer->width-1,10); + } + fb_setfg(FB_COLOR_BLACK); + fb_setfont(FB_FONT_C64); + + /* 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_gotoxy(80,39); + fb_putstr("max",framebuffer->width); + fb_setfont(FB_FONT_C64); + } + 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; + + 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, " %d", pm_spectrum[arfcn & 1023] - 110); + fb_putstr(text,framebuffer->width); + if (max) { + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(80,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); + } + 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 - 1; 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 * 40 / 64); + if (p > 40) + p = 40; + fb_gotoxy(i, 50 - p); + fb_boxto(i, 50); + } + i = framebuffer->width >> 1; + fb_gotoxy(i, 0); + fb_boxto(i, 4); + fb_gotoxy(i, 50); + fb_boxto(i, 54); + } + + /* footer */ + fb_gotoxy(0,55); + fb_boxto(framebuffer->width-1,55); + fb_gotoxy(0,64); + if (mode == MODE_ARFCN) + sprintf(text, "%s %s", (cursor) ? "del " : "back", + (cursor) ? "enter" : " "); + else + sprintf(text, "%s %s", (pcs) ? "PCS" : "DCS", + (uplink) ? "UL" : "DL"); + fb_putstr(text,framebuffer->width); + fb_setfont(FB_FONT_HELVR08); + fb_gotoxy(0,63); + 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 toggle_dcs_pcs(void) +{ + pcs = !pcs; + refresh_display(); +} + +static void toggle_up_down(void) +{ + uplink = !uplink; + refresh_display(); +} + +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_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 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_SPECTRUM) + inc_dec_spectrum(1); + break; + case KEY_DOWN: + if (mode == MODE_MAIN) + tone_inc_dec(0); + else if (mode == MODE_SPECTRUM) + inc_dec_spectrum(0); + break; + case KEY_RIGHT: + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) + inc_dec_arfcn(1); + break; + case KEY_LEFT: + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) + inc_dec_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); + break; + case KEY_RIGHT_SB: + if (mode == MODE_MAIN || mode == MODE_SPECTRUM) + toggle_up_down(); + else if (mode == MODE_ARFCN) + enter_arfcn(key_code); + break; + case KEY_MENU: + hold_max(); + break; + case KEY_POWER: + if (mode == MODE_ARFCN) + exit_arfcn(); + 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; + } +} + +/* 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; + + 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; + } + + 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)); + + /* 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_tone(); + } + + /* NOT REACHED */ + + twl3025_power_off(); +} + -- cgit v1.2.3 From 7cc4a4b324bcf65b5d383faf2b3e727953c8df81 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 29 Jan 2012 11:00:53 +0100 Subject: Improvement of neighbour cell power measurement task. 5 measurements are now performed during a 51 multiframe. They are performed at one of the 5 FCCH. Additionally a timeslot offset can be given for each measurement. This way it is possible to measure each timeslot seperately. The given ARFCN must be in sync with the serving cell. --- src/target/firmware/include/layer1/sync.h | 1 + src/target/firmware/layer1/l23_api.c | 7 +++++-- src/target/firmware/layer1/mframe_sched.c | 6 +++++- src/target/firmware/layer1/prim_pm.c | 4 +++- 4 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h index aa03c827..dae85a1a 100644 --- a/src/target/firmware/include/layer1/sync.h +++ b/src/target/firmware/include/layer1/sync.h @@ -151,6 +151,7 @@ struct l1s_state { uint8_t pos; uint8_t running; uint16_t band_arfcn[64]; + uint8_t tn[64]; uint8_t level[64]; } neigh_pm; }; diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c index 2581b5bb..659f3173 100644 --- a/src/target/firmware/layer1/l23_api.c +++ b/src/target/firmware/layer1/l23_api.c @@ -49,7 +49,8 @@ /* 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; @@ -529,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 */ 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 07b72097..1630600a 100644 --- a/src/target/firmware/layer1/prim_pm.c +++ b/src/target/firmware/layer1/prim_pm.c @@ -175,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); @@ -218,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; } -- cgit v1.2.3 From 0fd73c5e0f69e528689617837864fc69ff6d59a6 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 29 Jan 2012 11:28:41 +0100 Subject: firmware: Increased data size for for ram linker scripts. This is required, since monitor app requires a litte more than 64k. --- src/target/firmware/board/compal/highram.lds | 4 ++-- src/target/firmware/board/compal/ram.lds | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/target') 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 { -- cgit v1.2.3 From 284cf9a34c692e1bb1285d4740a48ef90754436c Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sun, 29 Jan 2012 11:32:14 +0100 Subject: firmware/monitor: Improvements and sync support By pressing the green button, the sync mode is entered. The screen show some informations about the cell. The beep indicates, if the received BCCH was valid or not. By pressing the Down button, the list of channels of the serving cell and neighbour cells can be viewed and scrolled through. By pressing the Up button, the levels (downlink or uplink) of the serving cell can be viewed. Also it is possible to select one of the serving cell's frequencies by pressing the Left/Right button. --- src/target/firmware/apps/rssi/main.c | 580 ++++++++++++++++++++++++++++++++--- 1 file changed, 544 insertions(+), 36 deletions(-) (limited to 'src/target') diff --git a/src/target/firmware/apps/rssi/main.c b/src/target/firmware/apps/rssi/main.c index 5d247958..ea8bbb49 100644 --- a/src/target/firmware/apps/rssi/main.c +++ b/src/target/firmware/apps/rssi/main.c @@ -47,6 +47,9 @@ #include #include #include +#include +#include +#include enum key_codes key_code = KEY_INV; int key_pressed = 0; @@ -58,10 +61,11 @@ 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; +static uint16_t arfcn = 0, ul_arfcn; int pcs = 0; int uplink = 0; int max = 0; @@ -69,6 +73,9 @@ 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[] = { @@ -108,8 +115,42 @@ 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]; @@ -118,21 +159,149 @@ static void refresh_display(void) /* header */ fb_setbg(FB_COLOR_WHITE); - if (mode != MODE_SPECTRUM) { + if (mode != MODE_SPECTRUM && !(mode == MODE_SYNC && cursor < 0)) { fb_setfg(FB_COLOR_BLUE); fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(0,6); + fb_gotoxy(0, 7); fb_putstr("Osmocom Monitor Tool",-1); - fb_gotoxy(0,10); - fb_setfg(FB_COLOR_BLACK); - fb_boxto(framebuffer->width-1,10); + 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); + fb_gotoxy(0, 20); if (mode == MODE_ARFCN) sprintf(text, "ARFCN %s", input); else if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) @@ -156,7 +325,7 @@ static void refresh_display(void) /* Frequency / power */ if (mode == MODE_MAIN) { int f; - + if (pcs && arfcn >= PCS_MIN && arfcn <= PCS_MAX) { if (uplink) f = PCS_UL; @@ -168,21 +337,23 @@ static void refresh_display(void) f = band->freq_dl; f += ((arfcn - band->min) & 1023) << 1; - fb_gotoxy(0,30); + fb_gotoxy(0, 30); sprintf(text, "Freq. %d.%d", f / 10, f % 10); fb_putstr(text,framebuffer->width); - fb_gotoxy(0,40); + fb_gotoxy(0, 40); sprintf(text, "Power %d", ((max) ? max_power : power) - 110); - fb_putstr(text,framebuffer->width); + fb_putstr(text, framebuffer->width); if (max) { fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(80,39); - fb_putstr("max",framebuffer->width); + 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_gotoxy(0, 45); fb_boxto(framebuffer->width * power / 64, 50); if (max) { fb_gotoxy(framebuffer->width * max_power / 64 ,45); @@ -195,29 +366,32 @@ static void refresh_display(void) if (mode == MODE_SPECTRUM) { int i; uint16_t a, e, p; + int height = framebuffer->height - 25; - fb_gotoxy(0,8); + 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, " %d", pm_spectrum[arfcn & 1023] - 110); - fb_putstr(text,framebuffer->width); + 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(80,15); - fb_putstr("max",framebuffer->width); + 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); + fb_gotoxy(1, 15); sprintf(text, "x%d", pm_scale); - fb_putstr(text,framebuffer->width); + 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; @@ -225,40 +399,52 @@ static void refresh_display(void) a = band->min; e = band->max; } - for (i = 0; i < framebuffer->width - 1; i++) { + 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 * 40 / 64); - if (p > 40) - p = 40; - fb_gotoxy(i, 50 - p); - fb_boxto(i, 50); + 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, 50); - fb_boxto(i, 54); + fb_gotoxy(i, height + 10); + fb_boxto(i, height + 14); } /* footer */ - fb_gotoxy(0,55); - fb_boxto(framebuffer->width-1,55); - fb_gotoxy(0,64); + 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,framebuffer->width); + fb_putstr(text, -1); + fb_setfg(FB_COLOR_BLACK); fb_setfont(FB_FONT_HELVR08); - fb_gotoxy(0,63); + fb_gotoxy(0, framebuffer->height - 2); sprintf(text, "%d", tone / 25); - fb_putstr(text,-1); + fb_putstr(text, -1); fb_flush(); } @@ -294,7 +480,7 @@ static void enter_arfcn(enum key_codes code) refresh_display(); return; } - + if (code == KEY_RIGHT_SB) { int check = 0; int i; @@ -390,6 +576,35 @@ static int inc_dec_arfcn(int inc) 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; @@ -400,6 +615,9 @@ 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) @@ -437,6 +655,23 @@ static void hold_max(void) 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) { @@ -454,6 +689,9 @@ static int inc_dec_spectrum(int inc) return 0; } +static void enter_sync(void); +static void exit_sync(void); + static void handle_key_code() { /* key repeat */ @@ -493,34 +731,52 @@ static void handle_key_code() 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(); @@ -528,6 +784,8 @@ static void handle_key_code() case KEY_POWER: if (mode == MODE_ARFCN) exit_arfcn(); + else if (mode == MODE_SYNC) + exit_sync(); else if (mode == MODE_SPECTRUM) toggle_spectrum(); break; @@ -648,6 +906,190 @@ static void handle_pm(void) } } +/* 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"; @@ -656,6 +1098,11 @@ 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: @@ -676,6 +1123,65 @@ static void l1a_l23_tx(struct msgb *msg) } 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); @@ -754,6 +1260,7 @@ int main(void) 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); @@ -764,6 +1271,7 @@ int main(void) handle_key_code(); l1a_l23_handler(); handle_pm(); + handle_sync(); handle_tone(); } -- cgit v1.2.3