##// END OF EJS Templates
Factorised stream device structure to reduce memory usage....
jeandet -
r51:1ef095ac0ee3 dev_alexis
parent child
Show More
@@ -0,0 +1,14
1 TEMPLATE = app
2 CONFIG += cpu
3
4
5 UCMODEL=stm32f4
6 DEFINES += CPUFREQ=160000000
7
8 #BSP = BEAGLESYNTH
9 #BSP = SOLAR_LFR_PSU
10 BSP = STM32F4Eval
11
12 SOURCES += \
13 main.c
14
@@ -0,0 +1,73
1 #include <stdio.h>
2 #include <fat32.h>
3 #include <gpio.h>
4 #include <uart.h>
5 #include <stm32f4xx.h>
6 #include <math.h>
7 #include <bsp.h>
8 #include <i2c.h>
9 #include <CS43L22.h>
10 #include <ina226.h>
11 #include <fonts.h>
12 #include <stdlib.h>
13 #include <core.h>
14
15
16 extern streamdevice* __opnfiles__[];
17
18 #define LCD_COLOR_WHITE 0xFFFF
19 #define LCD_COLOR_BLACK 0x0000
20 #define LCD_COLOR_GREY 0xF7DE
21 #define LCD_COLOR_BLUE 0x001F
22 #define LCD_COLOR_BLUE2 0x051F
23 #define LCD_COLOR_RED 0xF800
24 #define LCD_COLOR_MAGENTA 0xF81F
25 #define LCD_COLOR_GREEN 0x07E0
26 #define LCD_COLOR_CYAN 0x7FFF
27 #define LCD_COLOR_YELLOW 0xFFE0
28
29 #ifndef PSU_DISABLE
30 #define PSU_DISABLE LED1
31 #endif
32
33
34 int main()
35 {
36 delay_100us(20000);
37 INA226_t ina5VSens,ina33VSens,ina15VSens;
38 gpioset(PSU_DISABLE);//enable psu!
39 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_BLACK,1,LCD_COLOR_BLACK);
40 if(-1==ina226open(&ina33VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,0,15,1000000))
41 {
42 printf("Can't open 3.3V monitor\n\r");
43 }
44 if(-1==ina226open(&ina5VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,0,1,15,1000000))
45 {
46 printf("Can't open 5V monitor\n\r");
47 }
48 if(-1==ina226open(&ina15VSens,i2c2,INA226_MODE_SHUNT_VOLTAGE_CONTINUOUS|INA226_AVERAGES_16|INA226_BUS_CONV_8244us|INA226_SHUNT_CONV_8244us,1,0,15,1000000))
49 {
50 printf("Can't open 1.5V monitor\n\r");
51 }
52 int current5V,current33V,current15V;
53 while(1)
54 {
55 current5V = ina226getCurrent(&ina5VSens);
56 current33V = ina226getCurrent(&ina33VSens);
57 current15V = ina226getCurrent(&ina15VSens);
58 printf("%dmA\n",current15V/1000);
59 printf("%dmA\n",current33V/1000);
60 printf("%dmA\n",current5V/1000);
61 }
62 printf("Exit\n\r");
63 return 0;
64 }
65
66
67
68
69
70
71
72
73
@@ -0,0 +1,14
1 TEMPLATE = lib
2 OBJECTS_DIR = obj
3
4 SOURCES += thread.c
5
6 INCLUDEPATH += ../../includes \
7 ../CPU/STM32F4xx_StdPeriph_Driver/inc \
8 ../CPU/CMSIS/Include
9
10
11 UCMODEL=stm32f4
12
13 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL
14 INSTALLS += target
@@ -0,0 +1,41
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2013, Alexis Jeandet
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
22
23 #include <thread.h>
24
25
26 int threadcreate(thread_t *thread, void *stack, int stackSize)
27 {
28 return 0;
29 }
30
31
32 int threadstart(thread_t *thread)
33 {
34 return 0;
35 }
36
37
38 int threadstop(thread_t *thread)
39 {
40 return 0;
41 }
@@ -0,0 +1,62
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2013, Alexis Jeandet
4 --
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
9 --
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
14 --
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
22 #ifndef THREAD_H
23 #define THREAD_H
24 #include <stdint.h>
25 #include <uhandle.h>
26 #include <streamdevices.h>
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 typedef struct thread_t
33 {
34 int (*func)(void*);
35 void* __stack__;
36 int __stackSize__;
37 int __stackPointer__;
38 int __programcounter__;
39 }thread_t;
40
41
42 int threadcreate(thread_t* thread,void* stack,int stackSize);
43 int threadstart(thread_t* thread);
44 int threadstop(thread_t* thread);
45
46
47 #ifdef __cplusplus
48 }
49 #endif
50 #endif //THREAD_H
51
52
53
54
55
56
57
58
59
60
61
62
@@ -1,278 +1,308
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #include "bsp.h"
22 #include "bsp.h"
23 #include <streamdevices.h>
23 #include <streamdevices.h>
24 #include <malloc.h>
24 #include <malloc.h>
25 #include <gpio.h>
25 #include <gpio.h>
26 #include <uart.h>
26 #include <uart.h>
27 #include <stdio.h>
27 #include <stdio.h>
28 #include <stm32f4xx_gpio.h>
28 #include <stm32f4xx_gpio.h>
29 #include <stm32f4xx_fsmc.h>
29 #include <stm32f4xx_fsmc.h>
30 #include <i2c.h>
30 #include <i2c.h>
31 #include <core.h>
31 #include <core.h>
32 #include <terminal.h>
33
32 uint32_t OSC0 =8000000;
34 uint32_t OSC0 =8000000;
33 uint32_t INTOSC =16000000;
35 uint32_t INTOSC =16000000;
34 uint32_t RTCOSC =32768;
36 uint32_t RTCOSC =32768;
35 uint32_t currentCpuFreq=0;
37 uint32_t currentCpuFreq=0;
36 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
38 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
37
39
38 LCD_IF_t lcdIF0={
40 LCD_IF_t lcdIF0={
39 .init = &bsp_FSMC_init,
41 .init = &bsp_FSMC_init,
40 .writereg = &bsp_lcd0_write_reg,
42 .writereg = &bsp_lcd0_write_reg,
41 .readreg = &bsp_lcd0_read_reg,
43 .readreg = &bsp_lcd0_read_reg,
42 .writeGRAM = &bsp_lcd0_writeGRAM,
44 .writeGRAM = &bsp_lcd0_writeGRAM,
43 .readGRAM = &bsp_lcd0_readGRAM
45 .readGRAM = &bsp_lcd0_readGRAM
44 };
46 };
45
47
46 LCD_t lcd0={
48 LCD_t lcd0={
47 .interface = &lcdIF0,
49 .interface = &lcdIF0,
48 .init = &ili9328init,
50 .init = &ili9328init,
49 .paint = &ili9328paint,
51 .paint = &ili9328paint,
50 .paintText = &ili9328paintText,
52 .paintText = &ili9328paintText,
51 .paintFilRect = &ili9328paintFilRect,
53 .paintFilRect = &ili9328paintFilRect,
52 .refreshenable = &ili9328refreshenable,
54 .refreshenable = &ili9328refreshenable,
53 .width= 240,
55 .width= 240,
54 .height = 320
56 .height = 320
55 };
57 };
56
58
59 terminal_t terminal0;
60
57 volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000;
61 volatile int16_t* lcd0_CMD=(volatile int16_t*) 0x60000000;
58 volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0);
62 volatile int16_t* lcd0_DATA=(volatile int16_t*)(0x61FFFFF0);
59
63
60 float VREF0 =(float)3.3;
64 float VREF0 =(float)3.3;
61
65
62 int bsp_init()
66 int bsp_init()
63 {
67 {
64 int i=0;
68 int i=0;
65 for(i=0;i<32;i++)
69 for(i=0;i<32;i++)
66 {
70 {
67 __opnfiles__[i] = NULL;
71 __opnfiles__[i] = NULL;
68 }
72 }
69 bsp_GPIO_init();
73 bsp_GPIO_init();
70 bsp_uart_init();
74 bsp_uart_init();
71 bsp_iic_init();
75 bsp_iic_init();
72 bsp_FSMC_init();
76 bsp_FSMC_init();
73 printf("\r================================================================\n\r");
77 bsp_GTerm_init();
74 printf("================================================================\n\r");
78 printf("\r=====================\n\r");
79 printf( "=====================\n\r");
75 printf(BSP);
80 printf(BSP);
76 printf(" initialised\n\r");
81 printf(" initialised\n\r");
77 printf("================================================================\n\r");
82 printf( "=====================\n\r");
78 return 1;
83 return 1;
79 }
84 }
80
85
81 void bsp_GPIO_init()
86 void bsp_GPIO_init()
82 {
87 {
83 gpio_t gpio1 = gpioopen(LED1);
88 gpio_t gpio1 = gpioopen(LED1);
84 gpio_t gpio2 = gpioopen(LED2);
89 gpio_t gpio2 = gpioopen(LED2);
85 gpio_t gpio3 = gpioopen(LED3);
90 gpio_t gpio3 = gpioopen(LED3);
86 gpio_t gpio4 = gpioopen(PSU_DISABLE);
91 gpio_t gpio4 = gpioopen(PSU_DISABLE);
87 gpio_t gpio5 = gpioopen(PSU_ALERT_5V);
92 gpio_t gpio5 = gpioopen(PSU_ALERT_5V);
88 gpio_t gpio6 = gpioopen(PSU_ALERT_1_5V);
93 gpio_t gpio6 = gpioopen(PSU_ALERT_1_5V);
89 gpio_t gpio7 = gpioopen(PSU_ALERT_3_3V);
94 gpio_t gpio7 = gpioopen(PSU_ALERT_3_3V);
90 gpiosetspeed(&gpio1,gpiohighspeed);
95 gpiosetspeed(&gpio1,gpiohighspeed);
91 gpiosetspeed(&gpio2,gpiohighspeed);
96 gpiosetspeed(&gpio2,gpiohighspeed);
92 gpiosetspeed(&gpio3,gpiohighspeed);
97 gpiosetspeed(&gpio3,gpiohighspeed);
93 gpiosetspeed(&gpio4,gpiohighspeed);
98 gpiosetspeed(&gpio4,gpiohighspeed);
94 gpiosetspeed(&gpio5,gpiohighspeed);
99 gpiosetspeed(&gpio5,gpiohighspeed);
95 gpiosetspeed(&gpio6,gpiohighspeed);
100 gpiosetspeed(&gpio6,gpiohighspeed);
96 gpiosetspeed(&gpio7,gpiohighspeed);
101 gpiosetspeed(&gpio7,gpiohighspeed);
97 gpioclr(PSU_DISABLE);
102 gpioclr(PSU_DISABLE);
98 gpiosetdir(&gpio1,gpiooutdir);
103 gpiosetdir(&gpio1,gpiooutdir);
99 gpiosetdir(&gpio3,gpiooutdir);
104 gpiosetdir(&gpio3,gpiooutdir);
100 gpiosetdir(&gpio2,gpiooutdir);
105 gpiosetdir(&gpio2,gpiooutdir);
101 gpiosetdir(&gpio4,gpiooutdir);
106 gpiosetdir(&gpio4,gpiooutdir);
102 gpiosetdir(&gpio5,gpioindir);
107 gpiosetdir(&gpio5,gpioindir);
103 gpiosetdir(&gpio6,gpioindir);
108 gpiosetdir(&gpio6,gpioindir);
104 gpiosetdir(&gpio7,gpioindir);
109 gpiosetdir(&gpio7,gpioindir);
105 gpioclr(PSU_DISABLE);
110 gpioclr(PSU_DISABLE);
106 }
111 }
107
112
108 void bsp_uart_init()
113 void bsp_uart_init()
109 {
114 {
110 if(__opnfiles__[1]==NULL)
115 //if(__opnfiles__[1]==NULL)
111 {
116 //{
112 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
117 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
113 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
118 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
114 uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
119 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
115 uartmkstreamdev(uart,fd1);
120 //uartmkstreamdev(uart,fd1);
116 __opnfiles__[1] = fd1;
121 //__opnfiles__[1] = fd1;
117 }
122 //}
118 else
123 //else
119 {
124 //{
120 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
125 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
121 }
126 //}
122 }
127 }
123
128
124
129
125
130
126 int bsp_FSMC_init()
131 int bsp_FSMC_init()
127 {
132 {
128 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
133 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
129 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
134 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
130
135
131 gpio_t gpio1 = gpioopen(LCD_RESET);
136 gpio_t gpio1 = gpioopen(LCD_RESET);
132 gpiosetspeed(&gpio1,gpiohighspeed);
137 gpiosetspeed(&gpio1,gpiohighspeed);
133 gpiosetdir(&gpio1,gpiooutdir);
138 gpiosetdir(&gpio1,gpiooutdir);
134 gpioclr(LCD_RESET);
139 gpioclr(LCD_RESET);
135
140
136 gpio_t LCD_DBxList[]={PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15\
141 gpio_t LCD_DBxList[]={PD14,PD15,PD0,PD1,PE7,PE8,PE9,PE10,PE11,PE12,PE13,PE14,PE15\
137 ,PD8,PD9,PD10,PD4,PD5,PD7,PE4};
142 ,PD8,PD9,PD10,PD4,PD5,PD7,PE4};
138 for(int i=0;i<20;i++)
143 for(int i=0;i<20;i++)
139 {
144 {
140 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
145 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
141 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
146 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
142 gpiosetconfig(&LCD_DBx);
147 gpiosetconfig(&LCD_DBx);
143 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
148 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
144 }
149 }
145
150
146 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
151 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
147 FSMC_NORSRAMTimingInitTypeDef p;
152 FSMC_NORSRAMTimingInitTypeDef p;
148
153
149 /* Enable FSMC clock */
154 /* Enable FSMC clock */
150 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
155 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
151
156
152 /*-- FSMC Configuration ------------------------------------------------------*/
157 /*-- FSMC Configuration ------------------------------------------------------*/
153 /*----------------------- SRAM Bank 3 ----------------------------------------*/
158 /*----------------------- SRAM Bank 3 ----------------------------------------*/
154 /* FSMC_Bank1_NORSRAM4 configuration */
159 /* FSMC_Bank1_NORSRAM4 configuration */
155 //p.FSMC_AddressSetupTime = 5;
160 //p.FSMC_AddressSetupTime = 5;
156 p.FSMC_AddressSetupTime = 1;
161 p.FSMC_AddressSetupTime = 1;
157 p.FSMC_AddressHoldTime = 0;
162 p.FSMC_AddressHoldTime = 0;
158 //p.FSMC_DataSetupTime = 9;
163 //p.FSMC_DataSetupTime = 9;
159 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
164 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
160 p.FSMC_BusTurnAroundDuration = 0;
165 p.FSMC_BusTurnAroundDuration = 0;
161 p.FSMC_CLKDivision = 0;
166 p.FSMC_CLKDivision = 0;
162 p.FSMC_DataLatency = 0;
167 p.FSMC_DataLatency = 0;
163 p.FSMC_AccessMode = FSMC_AccessMode_A;
168 p.FSMC_AccessMode = FSMC_AccessMode_A;
164 /* Color LCD configuration ------------------------------------
169 /* Color LCD configuration ------------------------------------
165 LCD configured as follow:
170 LCD configured as follow:
166 - Data/Address MUX = Disable
171 - Data/Address MUX = Disable
167 - Memory Type = SRAM
172 - Memory Type = SRAM
168 - Data Width = 16bit
173 - Data Width = 16bit
169 - Write Operation = Enable
174 - Write Operation = Enable
170 - Extended Mode = Enable
175 - Extended Mode = Enable
171 - Asynchronous Wait = Disable */
176 - Asynchronous Wait = Disable */
172
177
173 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
178 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM1;
174 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
179 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
175 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
180 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
176 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
181 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
177 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
182 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
178 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
183 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
179 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
184 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
180 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
185 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
181 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
186 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
182 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
187 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
183 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
188 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
184 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
189 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
185 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
190 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
186 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
191 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
187 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
192 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
188
193
189 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
194 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
190
195
191 /* Enable FSMC NOR/SRAM Bank1 */
196 /* Enable FSMC NOR/SRAM Bank1 */
192 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
197 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM1, ENABLE);
193 gpioset(LCD_RESET);
198 gpioset(LCD_RESET);
194 lcd0.init(&lcd0);
199 lcd0.init(&lcd0);
195 return 1;
200 return 1;
196 }
201 }
197
202
198 void bsp_spi_init()
203 void bsp_spi_init()
199 {
204 {
200
205
201 }
206 }
202
207
203
208
204 void bsp_iic_init()
209 void bsp_iic_init()
205 {
210 {
206 i2copenandconfig(i2c2,0,400000,PF0,PF1);
211 i2copenandconfig(i2c2,0,400000,PF0,PF1);
207 }
212 }
208
213
209 void bsp_SD_init()
214 void bsp_SD_init()
210 {
215 {
211
216
212 }
217 }
213
218
214 void vs10XXclearXCS(){}
219 void vs10XXclearXCS(){}
215 void vs10XXsetXCS(){}
220 void vs10XXsetXCS(){}
216 int vs10XXDREQ()
221 int vs10XXDREQ()
217 {
222 {
218 return 1;
223 return 1;
219 }
224 }
220
225
221
226
222 void bsppowersdcard(char onoff) //always ON
227 void bsppowersdcard(char onoff) //always ON
223 {
228 {
224
229
225 }
230 }
226
231
227 char bspsdcardpresent()
232 char bspsdcardpresent()
228 {
233 {
229 return 0;
234 return 0;
230 }
235 }
231
236
232 char bspsdcardwriteprotected()
237 char bspsdcardwriteprotected()
233 {
238 {
234 return 0;
239 return 0;
235 }
240 }
236
241
237 void bspsdcardselect(char YESNO)
242 void bspsdcardselect(char YESNO)
238 {
243 {
239
244
240 }
245 }
241
246
242
247
243 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
248 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
244 {
249 {
245 *lcd0_CMD=(uint16_t)reg;
250 *lcd0_CMD=(uint16_t)reg;
246 *lcd0_DATA=(uint16_t)data;
251 *lcd0_DATA=(uint16_t)data;
247 }
252 }
248
253
249 uint32_t bsp_lcd0_read_reg(uint32_t reg)
254 uint32_t bsp_lcd0_read_reg(uint32_t reg)
250 {
255 {
251 *lcd0_CMD=(uint16_t)reg;
256 *lcd0_CMD=(uint16_t)reg;
252 return (uint16_t)*lcd0_DATA;
257 return (uint16_t)*lcd0_DATA;
253 }
258 }
254
259
255 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
260 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
256 {
261 {
257 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
262 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
258 uint16_t* castedBuff=(uint16_t*)buffer;
263 uint16_t* castedBuff=(uint16_t*)buffer;
259 for(int i=0;i<(int)count;i++)
264 for(int i=0;i<(int)count;i++)
260 {
265 {
261 *lcd0_DATA=castedBuff[i];
266 *lcd0_DATA=castedBuff[i];
262 }
267 }
263 }
268 }
264
269
265 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
270 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
266 {
271 {
267 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
272 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
268 uint16_t* castedBuff=(uint16_t*)buffer;
273 uint16_t* castedBuff=(uint16_t*)buffer;
269 castedBuff[0]=*lcd0_DATA;
274 castedBuff[0]=*lcd0_DATA;
270 for(int i=0;i<(int)count;i++)
275 for(int i=0;i<(int)count;i++)
271 {
276 {
272 castedBuff[i]=*lcd0_DATA;
277 castedBuff[i]=*lcd0_DATA;
278 }
279 }
280
281
282 void bsp_GTerm_init()
283 {
284 if(__opnfiles__[1]==NULL)
285 {
286 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
287 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
288 terminal_init(&terminal0 ,&lcd0,&ComicSansMS_8,fd1);
289 __opnfiles__[1] = fd1;
290 }
291 else
292 {
293
273 }
294 }
274 }
295 }
275
296
276
297
277
298
278
299
300
301
302
303
304
305
306
307
308
@@ -1,105 +1,106
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #ifndef BSP_H
22 #ifndef BSP_H
23 #define BSP_H
23 #define BSP_H
24 #include <stm32f4xx.h>
24 #include <stm32f4xx.h>
25 #include <stm32f4xx_gpio.h>
25 #include <stm32f4xx_gpio.h>
26 #include <stm32f4xx_rcc.h>
26 #include <stm32f4xx_rcc.h>
27 #include <gpio.h>
27 #include <gpio.h>
28 #include <ili9328.h>
28 #include <ili9328.h>
29 #include <genericLCD_Controler.h>
29 #include <genericLCD_Controler.h>
30
30
31 #define __MAX_OPENED_FILES__ 4
31 #define __MAX_OPENED_FILES__ 4
32 #define __FS_ROOT_SIZE__ 4
32 #define __FS_ROOT_SIZE__ 4
33 /*
33 /*
34 #ifndef PD8
34 #ifndef PD8
35 #define PD8
35 #define PD8
36 #endif
36 #endif
37 #ifndef PD9
37 #ifndef PD9
38 #define PD9
38 #define PD9
39 #endif
39 #endif
40 */
40 */
41
41
42
42
43 #define LED1 PF6
43 #define LED1 PF6
44 #define LED2 PF7
44 #define LED2 PF7
45 #define LED3 PF8
45 #define LED3 PF8
46
46
47 #define PSU_DISABLE PH2
47 #define PSU_DISABLE PH2
48 #define PSU_ALERT_5V PF2
48 #define PSU_ALERT_5V PF2
49 #define PSU_ALERT_1_5V PF3
49 #define PSU_ALERT_1_5V PF3
50 #define PSU_ALERT_3_3V PF4
50 #define PSU_ALERT_3_3V PF4
51
51
52 #define LCD_RESET PE2
52 #define LCD_RESET PE2
53
53
54 extern float VREF0;
54 extern float VREF0;
55
55
56 extern uint32_t currentCpuFreq;
56 extern uint32_t currentCpuFreq;
57 extern LCD_t lcd0;
57 extern LCD_t lcd0;
58
58
59
59
60 extern int bsp_init();
60 extern int bsp_init();
61
61
62 extern void bsp_GPIO_init();
62 extern void bsp_GPIO_init();
63 extern void bsp_uart_init();
63 extern void bsp_uart_init();
64 extern void bsp_iic_init();
64 extern void bsp_iic_init();
65 extern void bsp_spi_init();
65 extern void bsp_spi_init();
66 extern void bsp_SD_init();
66 extern void bsp_SD_init();
67 extern void bsp_GTerm_init();
67 extern int bsp_FSMC_init();
68 extern int bsp_FSMC_init();
68
69
69 /* VS1053 */
70 /* VS1053 */
70 extern void clearXCS();
71 extern void clearXCS();
71 extern void setXCS();
72 extern void setXCS();
72 extern int vs10XXDREQ();
73 extern int vs10XXDREQ();
73
74
74 /* SD CARD */
75 /* SD CARD */
75 void bsppowersdcard(char onoff);
76 void bsppowersdcard(char onoff);
76 char bspsdcardpresent();
77 char bspsdcardpresent();
77 void bspsdcardselect(char YESNO);
78 void bspsdcardselect(char YESNO);
78 char bspsdcardwriteprotected();
79 char bspsdcardwriteprotected();
79
80
80
81
81 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
82 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
82 uint32_t bsp_lcd0_read_reg(uint32_t reg);
83 uint32_t bsp_lcd0_read_reg(uint32_t reg);
83 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
84 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
84 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
85 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
85
86
86 #endif
87 #endif
87
88
88
89
89
90
90
91
91
92
92
93
93
94
94
95
95
96
96
97
97
98
98
99
99
100
100
101
101
102
102
103
103
104
104
105
105
106
@@ -1,326 +1,345
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #include "bsp.h"
22 #include "bsp.h"
23 #include <streamdevices.h>
23 #include <streamdevices.h>
24 #include <malloc.h>
24 #include <malloc.h>
25 #include <gpio.h>
25 #include <gpio.h>
26 #include <uart.h>
26 #include <uart.h>
27 #include <stdio.h>
27 #include <stdio.h>
28 #include <stm32f4xx_gpio.h>
28 #include <stm32f4xx_gpio.h>
29 #include <stm32f4xx_fsmc.h>
29 #include <stm32f4xx_fsmc.h>
30 #include <i2c.h>
30 #include <i2c.h>
31 #include <core.h>
31 #include <core.h>
32 #include <terminal.h>
32 uint32_t OSC0 =8000000;
33 uint32_t OSC0 =8000000;
33 uint32_t INTOSC =16000000;
34 uint32_t INTOSC =16000000;
34 uint32_t RTCOSC =32768;
35 uint32_t RTCOSC =32768;
35 uint32_t currentCpuFreq=0;
36 uint32_t currentCpuFreq=0;
36 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
37 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
37
38
38 LCD_IF_t lcdIF0={
39 LCD_IF_t lcdIF0={
39 .init = &bsp_FSMC_init,
40 .init = &bsp_FSMC_init,
40 .writereg = &bsp_lcd0_write_reg,
41 .writereg = &bsp_lcd0_write_reg,
41 .readreg = &bsp_lcd0_read_reg,
42 .readreg = &bsp_lcd0_read_reg,
42 .writeGRAM = &bsp_lcd0_writeGRAM,
43 .writeGRAM = &bsp_lcd0_writeGRAM,
43 .readGRAM = &bsp_lcd0_readGRAM
44 .readGRAM = &bsp_lcd0_readGRAM
44 };
45 };
45
46
46 LCD_t lcd0={
47 LCD_t lcd0={
47 .interface = &lcdIF0,
48 .interface = &lcdIF0,
48 .init = &ili9328init,
49 .init = &ili9328init,
49 .paint = &ili9328paint,
50 .paint = &ili9328paint,
50 .paintText = &ili9328paintText,
51 .paintText = &ili9328paintText,
51 .paintFilRect = &ili9328paintFilRect,
52 .paintFilRect = &ili9328paintFilRect,
52 .refreshenable = &ili9328refreshenable,
53 .refreshenable = &ili9328refreshenable,
53 .width= 240,
54 .width= 240,
54 .height = 320
55 .height = 320
55 };
56 };
56
57
58 terminal_t terminal0;
59
60
57 volatile int16_t* lcd0_CMD=(volatile int16_t*) (0x60000000 | 0x08000000);
61 volatile int16_t* lcd0_CMD=(volatile int16_t*) (0x60000000 | 0x08000000);
58 volatile int16_t* lcd0_DATA=((volatile int16_t*)(0x60000000 | 0x08000002));
62 volatile int16_t* lcd0_DATA=((volatile int16_t*)(0x60000000 | 0x08000002));
59
63
60 float VREF0 =(float)3.3;
64 float VREF0 =(float)3.3;
61
65
62 int bsp_init()
66 int bsp_init()
63 {
67 {
64 int i=0;
68 int i=0;
65 for(i=0;i<32;i++)
69 for(i=0;i<32;i++)
66 {
70 {
67 __opnfiles__[i] = NULL;
71 __opnfiles__[i] = NULL;
68 }
72 }
69 bsp_GPIO_init();
73 bsp_GPIO_init();
70 bsp_uart_init();
74 bsp_uart_init();
71 bsp_iic_init();
75 bsp_iic_init();
72 bsp_FSMC_init();
76 bsp_FSMC_init();
73 lcd0.init(&lcd0);
77 bsp_GTerm_init();
74 printf("\r================================================================\n\r");
78 printf("\r=====================\n\r");
75 printf("================================================================\n\r");
79 printf( "=====================\n\r");
76 printf(BSP);
80 printf(BSP);
77 printf(" initialised\n\r");
81 printf(" initialised\n\r");
78 printf("================================================================\n\r");
82 printf( "=====================\n\r");
79 return 1;
83 return 1;
80 }
84 }
81
85
82 void bsp_GPIO_init()
86 void bsp_GPIO_init()
83 {
87 {
84 gpio_t gpio1 = gpioopen(LED1);
88 gpio_t gpio1 = gpioopen(LED1);
85 gpio_t gpio2 = gpioopen(LED2);
89 gpio_t gpio2 = gpioopen(LED2);
86 gpio_t gpio3 = gpioopen(LED3);
90 gpio_t gpio3 = gpioopen(LED3);
87 gpiosetspeed(&gpio1,gpiohighspeed);
91 gpiosetspeed(&gpio1,gpiohighspeed);
88 gpiosetspeed(&gpio2,gpiohighspeed);
92 gpiosetspeed(&gpio2,gpiohighspeed);
89 gpiosetspeed(&gpio3,gpiohighspeed);
93 gpiosetspeed(&gpio3,gpiohighspeed);
90 gpiosetdir(&gpio1,gpiooutdir);
94 gpiosetdir(&gpio1,gpiooutdir);
91 gpiosetdir(&gpio2,gpiooutdir);
95 gpiosetdir(&gpio2,gpiooutdir);
92 gpiosetdir(&gpio3,gpiooutdir);
96 gpiosetdir(&gpio3,gpiooutdir);
93 }
97 }
94
98
95 void bsp_uart_init()
99 void bsp_uart_init()
96 {
100 {
97 if(__opnfiles__[1]==NULL)
101 //if(__opnfiles__[1]==NULL)
98 {
102 //{
99 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
103 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
100 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
104 // streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
101 uart_t uart = uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
105 // uart_t uart = uartopenandconfig(uart1,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
102 uartmkstreamdev(uart,fd1);
106 //uartmkstreamdev(uart,fd1);
103 __opnfiles__[1] = fd1;
107 //__opnfiles__[1] = fd1;
104 }
108 //}
105 else
109 //else
106 {
110 //{
107 uartopenandconfig(uart3,uartparitynone | uart8bits | uartonestop,115200,PC10,PC11,-1,-1);
111 uartopenandconfig(0,uartparitynone | uart8bits | uartonestop,115200,PA9,PA10,-1,-1);
108 }
112 //}
109 }
113 }
110
114
111 /*
115 /*
112 D0 PD14 D1 PD15 D2 PD0 D3 PD1 D4 PE7
116 D0 PD14 D1 PD15 D2 PD0 D3 PD1 D4 PE7
113 D5 PE8 D6 PE9 D7 PE10 D8 PE11 D9 PE12
117 D5 PE8 D6 PE9 D7 PE10 D8 PE11 D9 PE12
114 D10 PE13 D11 PE14 D12 PE15 D13 PD8 D14 PD9
118 D10 PE13 D11 PE14 D12 PE15 D13 PD8 D14 PD9
115 D15 PD10
119 D15 PD10
116 A0 PF0 = RS FSMC_NE3 PG10 CS FSMC_NWE PD5 W/S
120 A0 PF0 = RS FSMC_NE3 PG10 CS FSMC_NWE PD5 W/S
117 FSMC_NOE PD4 RD
121 FSMC_NOE PD4 RD
118 */
122 */
119 /*-- GPIOs Configuration -----------------------------------------------------*/
123 /*-- GPIOs Configuration -----------------------------------------------------*/
120 /*
124 /*
121 +-------------------+--------------------+------------------+------------------+
125 +-------------------+--------------------+------------------+------------------+
122 + SRAM pins assignment +
126 + SRAM pins assignment +
123 +-------------------+--------------------+------------------+------------------+
127 +-------------------+--------------------+------------------+------------------+
124 | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 |
128 | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 |
125 | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 |
129 | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 |
126 | PD4 <-> FSMC_NOE | PE3 <-> FSMC_A19 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 |
130 | PD4 <-> FSMC_NOE | PE3 <-> FSMC_A19 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 |
127 | PD5 <-> FSMC_NWE | PE4 <-> FSMC_A20 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 |
131 | PD5 <-> FSMC_NWE | PE4 <-> FSMC_A20 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 |
128 | PD8 <-> FSMC_D13 | PE7 <-> FSMC_D4 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 |
132 | PD8 <-> FSMC_D13 | PE7 <-> FSMC_D4 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 |
129 | PD9 <-> FSMC_D14 | PE8 <-> FSMC_D5 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 |
133 | PD9 <-> FSMC_D14 | PE8 <-> FSMC_D5 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 |
130 | PD10 <-> FSMC_D15 | PE9 <-> FSMC_D6 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 |
134 | PD10 <-> FSMC_D15 | PE9 <-> FSMC_D6 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 |
131 | PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7 | PF13 <-> FSMC_A7 |------------------+
135 | PD11 <-> FSMC_A16 | PE10 <-> FSMC_D7 | PF13 <-> FSMC_A7 |------------------+
132 | PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8 | PF14 <-> FSMC_A8 |
136 | PD12 <-> FSMC_A17 | PE11 <-> FSMC_D8 | PF14 <-> FSMC_A8 |
133 | PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9 | PF15 <-> FSMC_A9 |
137 | PD13 <-> FSMC_A18 | PE12 <-> FSMC_D9 | PF15 <-> FSMC_A9 |
134 | PD14 <-> FSMC_D0 | PE13 <-> FSMC_D10 |------------------+
138 | PD14 <-> FSMC_D0 | PE13 <-> FSMC_D10 |------------------+
135 | PD15 <-> FSMC_D1 | PE14 <-> FSMC_D11 |
139 | PD15 <-> FSMC_D1 | PE14 <-> FSMC_D11 |
136 | | PE15 <-> FSMC_D12 |
140 | | PE15 <-> FSMC_D12 |
137 +-------------------+--------------------+
141 +-------------------+--------------------+
138 */
142 */
139 int bsp_FSMC_init()
143 int bsp_FSMC_init()
140 {
144 {
141 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
145 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
142 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
146 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
143
147
144 gpio_t LCD_DBxList[]={
148 gpio_t LCD_DBxList[]={
145 PD0 ,PD1 ,PD4 ,PD5 ,PD8 ,PD9 ,PD10,PD11,PD12,PD13,PD14,PD15,
149 PD0 ,PD1 ,PD4 ,PD5 ,PD8 ,PD9 ,PD10,PD11,PD12,PD13,PD14,PD15,
146 PE0 ,PE1 ,PE3 ,PE4 ,PE7 ,PE8 ,PE9 ,PE10,PE11,PE12,PE13,PE14,
150 PE0 ,PE1 ,PE3 ,PE4 ,PE7 ,PE8 ,PE9 ,PE10,PE11,PE12,PE13,PE14,
147 PE15,PF0 ,PF1 ,PF2 ,PF3 ,PF4 ,PF5 ,PF12,PF13,PF14,PF15,PG0 ,
151 PE15,PF0 ,PF1 ,PF2 ,PF3 ,PF4 ,PF5 ,PF12,PF13,PF14,PF15,PG0 ,
148 PG1 ,PG2 ,PG3 ,PG4 ,PG5 ,PG9 ,PG10
152 PG1 ,PG2 ,PG3 ,PG4 ,PG5 ,PG9 ,PG10
149 };
153 };
150
154
151 for(int i=0;i<43;i++)
155 for(int i=0;i<43;i++)
152 {
156 {
153 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
157 gpio_t LCD_DBx = gpioopen(LCD_DBxList[i]);
154 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
158 LCD_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
155 gpiosetconfig(&LCD_DBx);
159 gpiosetconfig(&LCD_DBx);
156 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
160 GPIO_PinAFConfig(GPIOGETPORT(LCD_DBx), (uint8_t)(LCD_DBx & 0xF), GPIO_AF_FSMC);
157 }
161 }
158
162
159 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
163 FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure;
160 FSMC_NORSRAMTimingInitTypeDef p;
164 FSMC_NORSRAMTimingInitTypeDef p;
161
165
162 /* Enable FSMC clock */
166 /* Enable FSMC clock */
163 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
167 RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE);
164
168
165 /*-- FSMC Configuration ------------------------------------------------------*/
169 /*-- FSMC Configuration ------------------------------------------------------*/
166 /*----------------------- SRAM Bank 3 ----------------------------------------*/
170 /*----------------------- SRAM Bank 3 ----------------------------------------*/
167 /* FSMC_Bank1_NORSRAM3 configuration */
171 /* FSMC_Bank1_NORSRAM3 configuration */
168 p.FSMC_AddressSetupTime = 1;
172 p.FSMC_AddressSetupTime = 1;
169 p.FSMC_AddressHoldTime = 0;
173 p.FSMC_AddressHoldTime = 0;
170 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
174 p.FSMC_DataSetupTime = getCpuFreq()/14545450 ;// 11;
171 p.FSMC_BusTurnAroundDuration = 0;
175 p.FSMC_BusTurnAroundDuration = 0;
172 p.FSMC_CLKDivision = 0;
176 p.FSMC_CLKDivision = 0;
173 p.FSMC_DataLatency = 0;
177 p.FSMC_DataLatency = 0;
174 p.FSMC_AccessMode = FSMC_AccessMode_A;
178 p.FSMC_AccessMode = FSMC_AccessMode_A;
175 /* Color LCD configuration ------------------------------------
179 /* Color LCD configuration ------------------------------------
176 LCD configured as follow:
180 LCD configured as follow:
177 - Data/Address MUX = Disable
181 - Data/Address MUX = Disable
178 - Memory Type = SRAM
182 - Memory Type = SRAM
179 - Data Width = 16bit
183 - Data Width = 16bit
180 - Write Operation = Enable
184 - Write Operation = Enable
181 - Extended Mode = Enable
185 - Extended Mode = Enable
182 - Asynchronous Wait = Disable */
186 - Asynchronous Wait = Disable */
183
187
184 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
188 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM3;
185 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
189 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
186 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
190 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_SRAM;
187 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
191 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
188 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
192 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
189 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
193 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
190 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
194 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
191 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
195 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
192 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
196 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
193 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
197 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
194 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
198 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
195 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
199 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
196 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
200 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
197 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
201 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
198 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
202 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
199
203
200 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
204 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
201
205
202 /* Enable FSMC NOR/SRAM Bank1 */
206 /* Enable FSMC NOR/SRAM Bank1 */
203 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
207 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);
204
208
205
209
206 p.FSMC_AddressSetupTime = getCpuFreq()/50000000;
210 p.FSMC_AddressSetupTime = getCpuFreq()/50000000;
207 p.FSMC_AddressHoldTime = 0;
211 p.FSMC_AddressHoldTime = 0;
208 p.FSMC_DataSetupTime = getCpuFreq()/25000000;
212 p.FSMC_DataSetupTime = getCpuFreq()/25000000;
209 p.FSMC_BusTurnAroundDuration = 1;
213 p.FSMC_BusTurnAroundDuration = 1;
210 p.FSMC_CLKDivision = 0;
214 p.FSMC_CLKDivision = 0;
211 p.FSMC_DataLatency = 0;
215 p.FSMC_DataLatency = 0;
212 p.FSMC_AccessMode = FSMC_AccessMode_A;
216 p.FSMC_AccessMode = FSMC_AccessMode_A;
213
217
214 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
218 FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
215 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
219 FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
216 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
220 FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_PSRAM;
217 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
221 FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
218 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
222 FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
219 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
223 FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
220 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
224 FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
221 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
225 FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
222 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
226 FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
223 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
227 FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
224 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
228 FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
225 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
229 FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
226 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
230 FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
227 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
231 FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
228 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
232 FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
229
233
230 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
234 FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);
231
235
232 /*!< Enable FSMC Bank1_SRAM2 Bank */
236 /*!< Enable FSMC Bank1_SRAM2 Bank */
233 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
237 FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM2, ENABLE);
234
238 lcd0.init(&lcd0);
235
236 return 1;
239 return 1;
237 }
240 }
238
241
239 void bsp_spi_init()
242 void bsp_spi_init()
240 {
243 {
241
244
242 }
245 }
243
246
244
247
245 void bsp_iic_init()
248 void bsp_iic_init()
246 {
249 {
247 //i2copenandconfig(i2c2,0,400000,PF0,PF1);
250 //i2copenandconfig(i2c2,0,400000,PF0,PF1);
248 }
251 }
249
252
250 void bsp_SD_init()
253 void bsp_SD_init()
251 {
254 {
252 gpio_t SDIO_DBxList[]={PC8 ,PC9 ,PC10 ,PC11 ,PC12,PD2};
255 gpio_t SDIO_DBxList[]={PC8 ,PC9 ,PC10 ,PC11 ,PC12,PD2};
253 for(int i=0;i<6;i++)
256 for(int i=0;i<6;i++)
254 {
257 {
255 gpio_t SDIO_DBx = gpioopen(SDIO_DBxList[i]);
258 gpio_t SDIO_DBx = gpioopen(SDIO_DBxList[i]);
256 SDIO_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
259 SDIO_DBx |= gpiohighspeed | gpioaf | gpiopushpulltype | gpionopulltype;
257 gpiosetconfig(&SDIO_DBx);
260 gpiosetconfig(&SDIO_DBx);
258 GPIO_PinAFConfig(GPIOGETPORT(SDIO_DBx), (uint8_t)(SDIO_DBx & 0xF), GPIO_AF_SDIO);
261 GPIO_PinAFConfig(GPIOGETPORT(SDIO_DBx), (uint8_t)(SDIO_DBx & 0xF), GPIO_AF_SDIO);
259 }
262 }
260 }
263 }
261
264
262 void vs10XXclearXCS(){}
265 void vs10XXclearXCS(){}
263 void vs10XXsetXCS(){}
266 void vs10XXsetXCS(){}
264 int vs10XXDREQ()
267 int vs10XXDREQ()
265 {
268 {
266 return 1;
269 return 1;
267 }
270 }
268
271
269
272
270 void bsppowersdcard(char onoff) //always ON
273 void bsppowersdcard(char onoff) //always ON
271 {
274 {
272
275
273 }
276 }
274
277
275 char bspsdcardpresent()
278 char bspsdcardpresent()
276 {
279 {
277 return 0;
280 return 0;
278 }
281 }
279
282
280 char bspsdcardwriteprotected()
283 char bspsdcardwriteprotected()
281 {
284 {
282 return 0;
285 return 0;
283 }
286 }
284
287
285 void bspsdcardselect(char YESNO)
288 void bspsdcardselect(char YESNO)
286 {
289 {
287
290
288 }
291 }
289
292
290
293
291 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
294 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data)
292 {
295 {
293 *lcd0_CMD=(uint16_t)reg;
296 *lcd0_CMD=(uint16_t)reg;
294 *lcd0_DATA=(uint16_t)data;
297 *lcd0_DATA=(uint16_t)data;
295 }
298 }
296
299
297 uint32_t bsp_lcd0_read_reg(uint32_t reg)
300 uint32_t bsp_lcd0_read_reg(uint32_t reg)
298 {
301 {
299 *lcd0_CMD=(uint16_t)reg;
302 *lcd0_CMD=(uint16_t)reg;
300 return (uint16_t)*lcd0_DATA;
303 return (uint16_t)*lcd0_DATA;
301 }
304 }
302
305
303 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
306 void bsp_lcd0_writeGRAM(void* buffer,uint32_t count)
304 {
307 {
305 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
308 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
306 uint16_t* castedBuff=(uint16_t*)buffer;
309 uint16_t* castedBuff=(uint16_t*)buffer;
307 for(int i=0;i<(int)count;i++)
310 for(int i=0;i<(int)count;i++)
308 {
311 {
309 *lcd0_DATA=castedBuff[i];
312 *lcd0_DATA=castedBuff[i];
310 }
313 }
311 }
314 }
312
315
313 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
316 void bsp_lcd0_readGRAM(void* buffer,uint32_t count)
314 {
317 {
315 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
318 *lcd0_CMD=(uint16_t)ILI9328_REGISTER_WRITEDATATOGRAM;
316 uint16_t* castedBuff=(uint16_t*)buffer;
319 uint16_t* castedBuff=(uint16_t*)buffer;
317 castedBuff[0]=*lcd0_DATA;
320 castedBuff[0]=*lcd0_DATA;
318 for(int i=0;i<(int)count;i++)
321 for(int i=0;i<(int)count;i++)
319 {
322 {
320 castedBuff[i]=*lcd0_DATA;
323 castedBuff[i]=*lcd0_DATA;
321 }
324 }
322 }
325 }
323
326
327 void bsp_GTerm_init()
328 {
329 if(__opnfiles__[1]==NULL)
330 {
331 //uart_t* uart1 = (uart_t*)malloc(sizeof(uart_t));
332 streamdevice* fd1 = (streamdevice*)malloc(sizeof(streamdevice));
333
334 ili9328paintFilRect(&lcd0,0,0,240,320,0x7FFF,5,0);
335 terminal_init(&terminal0,&lcd0,&ComicSansMS_8,fd1);
336 __opnfiles__[1] = fd1;
337 }
338 else
339 {
340
341 }
342 }
324
343
325
344
326
345
@@ -1,93 +1,94
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #ifndef BSP_H
22 #ifndef BSP_H
23 #define BSP_H
23 #define BSP_H
24 #include <stm32f4xx.h>
24 #include <stm32f4xx.h>
25 #include <stm32f4xx_gpio.h>
25 #include <stm32f4xx_gpio.h>
26 #include <stm32f4xx_rcc.h>
26 #include <stm32f4xx_rcc.h>
27 #include <gpio.h>
27 #include <gpio.h>
28 #include <ili9328.h>
28 #include <ili9328.h>
29 #include <genericLCD_Controler.h>
29 #include <genericLCD_Controler.h>
30
30
31 #define __MAX_OPENED_FILES__ 4
31 #define __MAX_OPENED_FILES__ 4
32 #define __FS_ROOT_SIZE__ 4
32 #define __FS_ROOT_SIZE__ 4
33
33
34
34
35
35
36 #define LED1 PG6
36 #define LED1 PG6
37 #define LED2 PG8
37 #define LED2 PG8
38 #define LED3 PI9
38 #define LED3 PI9
39 #define LED4 PC7
39 #define LED4 PC7
40
40
41
41
42 extern float VREF0;
42 extern float VREF0;
43
43
44 extern uint32_t currentCpuFreq;
44 extern uint32_t currentCpuFreq;
45 extern LCD_t lcd0;
45 extern LCD_t lcd0;
46
46
47
47
48 extern int bsp_init();
48 extern int bsp_init();
49
49
50 extern void bsp_GPIO_init();
50 extern void bsp_GPIO_init();
51 extern void bsp_uart_init();
51 extern void bsp_uart_init();
52 extern void bsp_iic_init();
52 extern void bsp_iic_init();
53 extern void bsp_spi_init();
53 extern void bsp_spi_init();
54 extern void bsp_SD_init();
54 extern void bsp_SD_init();
55 extern void bsp_GTerm_init();
55 extern int bsp_FSMC_init();
56 extern int bsp_FSMC_init();
56
57
57 /* VS1053 */
58 /* VS1053 */
58 extern void clearXCS();
59 extern void clearXCS();
59 extern void setXCS();
60 extern void setXCS();
60 extern int vs10XXDREQ();
61 extern int vs10XXDREQ();
61
62
62 /* SD CARD */
63 /* SD CARD */
63 void bsppowersdcard(char onoff);
64 void bsppowersdcard(char onoff);
64 char bspsdcardpresent();
65 char bspsdcardpresent();
65 void bspsdcardselect(char YESNO);
66 void bspsdcardselect(char YESNO);
66 char bspsdcardwriteprotected();
67 char bspsdcardwriteprotected();
67
68
68
69
69 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
70 void bsp_lcd0_write_reg(uint32_t reg,uint32_t data);
70 uint32_t bsp_lcd0_read_reg(uint32_t reg);
71 uint32_t bsp_lcd0_read_reg(uint32_t reg);
71 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
72 void bsp_lcd0_writeGRAM(void *buffer, uint32_t count);
72 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
73 void bsp_lcd0_readGRAM(void *buffer, uint32_t count);
73
74
74 #endif
75 #endif
75
76
76
77
77
78
78
79
79
80
80
81
81
82
82
83
83
84
84
85
85
86
86
87
87
88
88
89
89
90
90
91
91
92
92
93
93
94
@@ -1,17 +1,19
1 TEMPLATE = subdirs
1 TEMPLATE = subdirs
2 CONFIG += ordered
2 CONFIG += ordered
3 SUBDIRS += QtTest/test.pro \
3 SUBDIRS += QtTest/test.pro \
4 SOLAR_PSU_HELLO/hello.pro \
4 SOLAR_PSU_HELLO/hello.pro \
5 SDCARD \
5 SDCARD \
6 STM32F4IT \
6 STM32F4IT \
7 M4StickV2 \
7 M4StickV2 \
8 lcdHello \
8 lcdHello \
9 BeagleSynthHello \
9 BeagleSynthHello \
10 lcdTerminal
10 lcdTerminal \
11 BeagleSynthHelloSupMon \
12 TEST_CMSIS_FFT
11
13
12
14
13
15
14
16
15
17
16
18
17
19
@@ -1,72 +1,71
1 #include <stdio.h>
1 #include <stdio.h>
2 #include <fat32.h>
2 #include <fat32.h>
3 #include <gpio.h>
3 #include <gpio.h>
4 #include <uart.h>
4 #include <uart.h>
5 #include <stm32f4xx.h>
5 #include <stm32f4xx.h>
6 #include <math.h>
6 #include <math.h>
7 #include <bsp.h>
7 #include <bsp.h>
8 #include <i2c.h>
8 #include <i2c.h>
9 #include <CS43L22.h>
9 #include <CS43L22.h>
10 #include <ina226.h>
10 #include <ina226.h>
11 #include <fonts.h>
11 #include <fonts.h>
12 #include <stdlib.h>
12 #include <stdlib.h>
13 #include <core.h>
13 #include <core.h>
14 #include <terminal.h>
14 #include <terminal.h>
15
15
16 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
16 extern streamdevice* __opnfiles__[__MAX_OPENED_FILES__];
17
17
18 #define LCD_COLOR_WHITE 0xFFFF
18 #define LCD_COLOR_WHITE 0xFFFF
19 #define LCD_COLOR_BLACK 0x0000
19 #define LCD_COLOR_BLACK 0x0000
20 #define LCD_COLOR_GREY 0xF7DE
20 #define LCD_COLOR_GREY 0xF7DE
21 #define LCD_COLOR_BLUE 0x001F
21 #define LCD_COLOR_BLUE 0x001F
22 #define LCD_COLOR_BLUE2 0x051F
22 #define LCD_COLOR_BLUE2 0x051F
23 #define LCD_COLOR_RED 0xF800
23 #define LCD_COLOR_RED 0xF800
24 #define LCD_COLOR_MAGENTA 0xF81F
24 #define LCD_COLOR_MAGENTA 0xF81F
25 #define LCD_COLOR_GREEN 0x07E0
25 #define LCD_COLOR_GREEN 0x07E0
26 #define LCD_COLOR_CYAN 0x7FFF
26 #define LCD_COLOR_CYAN 0x7FFF
27 #define LCD_COLOR_YELLOW 0xFFE0
27 #define LCD_COLOR_YELLOW 0xFFE0
28
28
29 extern int __lineCount__;
30 extern int __columnCount__;
31
29
32 int main()
30 int main()
33 {
31 {
34 uint16_t innerbuffer[16];
32 uint16_t innerbuffer[16];
35 uint16_t outterbuffer[16];
33 uint16_t outterbuffer[16];
36 for(int i=0;i<16;i++)innerbuffer[i]=LCD_COLOR_BLUE;
34 for(int i=0;i<16;i++)innerbuffer[i]=LCD_COLOR_BLUE;
37 for(int i=0;i<16;i++)outterbuffer[i]=LCD_COLOR_RED;
35 for(int i=0;i<16;i++)outterbuffer[i]=LCD_COLOR_RED;
38 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_CYAN,5,LCD_COLOR_BLACK);
36 ili9328paintFilRect(&lcd0,0,0,240,320,LCD_COLOR_CYAN,5,LCD_COLOR_BLACK);
39
37
40 streamdevice* terminal=__opnfiles__[1];
38 streamdevice* fd1=__opnfiles__[1];
41 terminal_init(&lcd0,&ComicSansMS_18,terminal);
39 streamdevice fd2;
42 //terminal->write(terminal,"Hi",1, 2);
40 int i=0;
43 //lcd0.paintText(&lcd0,"Hello",10,50,&ComicSansMS_18,0xFF00);
41 terminal_t terminal0,terminal1;
44 // __opnfiles__[1]=terminal;
42 terminal_init(&terminal0,&lcd0,&ComicSansMS_18,fd1);
45 //__opnfiles__[0]=terminal;
43 terminal_init(&terminal1,&lcd0,&ComicSansMS_18,&fd2);
46 int i=1;
44 terminal_setgeometry(&terminal0,5,5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
47 //printf("hello World %d",i);
45 terminal_setbackgroundColor(&terminal1,0xFFFF);
48
46 terminal_settextColor(&terminal1,0x0000);
49 printf("Line cnt :\n \t%d\n",__lineCount__);
47 terminal_setgeometry(&terminal1,5,(terminal0.LCD->height/2)+5,terminal0.LCD->width-10,(terminal0.LCD->height/2)-10);
50 printf("Column cnt :\n \t%d\n",__columnCount__);
48 printf("Line cnt :\n \t%d\n",terminal0.lineCount);
49 printf("Column cnt :\n \t%d\n",terminal0.columnCount);
51 printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000);
50 printf("CPU Freq :\n \t%dMHz\n",getCpuFreq()/1000000);
52 while(1)
51 while(1)
53 {
52 {
54 i%=1000;
53 i%=1000;
55 //terminal->write(&terminal," Hi",1, 2);
54 //terminal->write(&terminal," Hi",1, 2);
56 //delay_100us(1000);
55 //delay_100us(1000);
57 gpioset(LED1);
56 gpioset(LED1);
58 //delay_100us(1000);
57 //delay_100us(1000);
59 gpioclr(LED1);
58 gpioclr(LED1);
60 }
59 }
61 printf("hello world\n\r");
60 printf("hello world\n\r");
62 return 0;
61 return 0;
63 }
62 }
64
63
65
64
66
65
67
66
68
67
69
68
70
69
71
70
72
71
@@ -0,0 +1,1
1 #include <ucdirent.h>
This diff has been collapsed as it changes many lines, (1346 lines changed) Show them Hide them
@@ -1,631 +1,1977
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2012, Alexis Jeandet
3 -- Copyright (C) 2012, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #include <fonts.h>
22 #include <fonts.h>
23
23
24 const uint8_t ComicSansMS_18_TBL[] = {
24 const uint8_t ComicSansMS_18_TBL[] = {
25 /* Character Data - Index: 32 */
25 /* Character Data - Index: 32 */
26 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
26 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
27
27
28 /* Character Data - Index: 33 */
28 /* Character Data - Index: 33 */
29 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
29 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
30
30
31 /* Character Data - Index: 34 */
31 /* Character Data - Index: 34 */
32 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
32 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
33
33
34 /* Character Data - Index: 35 */
34 /* Character Data - Index: 35 */
35 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0xFC,0x07,0x10,0x01,0x08,0x01,0xFE,0x03,0x88,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
35 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0xFC,0x07,0x10,0x01,0x08,0x01,0xFE,0x03,0x88,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
36
36
37 /* Character Data - Index: 36 */
37 /* Character Data - Index: 36 */
38 0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0xF8,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x38,0x00,0x50,0x00,0x90,0x00,0x90,0x00,0x50,0x00,0x3C,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
38 0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0xF8,0x00,0x14,0x00,0x14,0x00,0x14,0x00,0x38,0x00,0x50,0x00,0x90,0x00,0x90,0x00,0x50,0x00,0x3C,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,
39
39
40 /* Character Data - Index: 37 */
40 /* Character Data - Index: 37 */
41 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x01,0xA4,0x00,0xA4,0x00,0xD8,0x00,0x40,0x00,0x40,0x00,0x20,0x03,0xA0,0x04,0x90,0x04,0x10,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
41 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x01,0xA4,0x00,0xA4,0x00,0xD8,0x00,0x40,0x00,0x40,0x00,0x20,0x03,0xA0,0x04,0x90,0x04,0x10,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
42
42
43 /* Character Data - Index: 38 */
43 /* Character Data - Index: 38 */
44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xA0,0x00,0xA0,0x00,0x60,0x00,0x70,0x00,0x48,0x01,0x44,0x01,0x84,0x00,0xC4,0x01,0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xA0,0x00,0xA0,0x00,0x60,0x00,0x70,0x00,0x48,0x01,0x44,0x01,0x84,0x00,0xC4,0x01,0x78,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
45
45
46 /* Character Data - Index: 39 */
46 /* Character Data - Index: 39 */
47 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
47 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
48
48
49 /* Character Data - Index: 40 */
49 /* Character Data - Index: 40 */
50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x00,0x00,
50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x00,0x00,
51
51
52 /* Character Data - Index: 41 */
52 /* Character Data - Index: 41 */
53 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x00,0x00,
53 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x00,0x00,
54
54
55 /* Character Data - Index: 42 */
55 /* Character Data - Index: 42 */
56 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x7E,0x00,0x18,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x7E,0x00,0x18,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
57
57
58 /* Character Data - Index: 43 */
58 /* Character Data - Index: 43 */
59 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
59 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
60
60
61 /* Character Data - Index: 44 */
61 /* Character Data - Index: 44 */
62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x04,0x00,0x00,0x00,0x00,0x00,
63
63
64 /* Character Data - Index: 45 */
64 /* Character Data - Index: 45 */
65 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
65 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
66
66
67 /* Character Data - Index: 46 */
67 /* Character Data - Index: 46 */
68 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
68 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
69
69
70 /* Character Data - Index: 47 */
70 /* Character Data - Index: 47 */
71 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x18,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
71 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x18,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
72
72
73 /* Character Data - Index: 48 */
73 /* Character Data - Index: 48 */
74 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x48,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
74 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x48,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
75
75
76 /* Character Data - Index: 49 */
76 /* Character Data - Index: 49 */
77 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
77 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
78
78
79 /* Character Data - Index: 50 */
79 /* Character Data - Index: 50 */
80 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x30,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
80 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x30,0x00,0x08,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
81
81
82 /* Character Data - Index: 51 */
82 /* Character Data - Index: 51 */
83 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x40,0x00,0x40,0x00,0x38,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
83 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x40,0x00,0x40,0x00,0x38,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
84
84
85 /* Character Data - Index: 52 */
85 /* Character Data - Index: 52 */
86 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x60,0x00,0x50,0x00,0x48,0x00,0x44,0x00,0x42,0x00,0xFE,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
86 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x60,0x00,0x50,0x00,0x48,0x00,0x44,0x00,0x42,0x00,0xFE,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
87
87
88 /* Character Data - Index: 53 */
88 /* Character Data - Index: 53 */
89 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x74,0x00,0x8C,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
89 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x74,0x00,0x8C,0x00,0x84,0x00,0x80,0x00,0x80,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
90
90
91 /* Character Data - Index: 54 */
91 /* Character Data - Index: 54 */
92 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
92 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
93
93
94 /* Character Data - Index: 55 */
94 /* Character Data - Index: 55 */
95 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
95 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
96
96
97 /* Character Data - Index: 56 */
97 /* Character Data - Index: 56 */
98 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
98 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
99
99
100 /* Character Data - Index: 57 */
100 /* Character Data - Index: 57 */
101 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
101 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x78,0x00,0x40,0x00,0x30,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
102
102
103 /* Character Data - Index: 58 */
103 /* Character Data - Index: 58 */
104 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
104 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
105
105
106 /* Character Data - Index: 59 */
106 /* Character Data - Index: 59 */
107 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
107 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x06,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
108
108
109 /* Character Data - Index: 60 */
109 /* Character Data - Index: 60 */
110 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x06,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
110 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x06,0x00,0x08,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
111
111
112 /* Character Data - Index: 61 */
112 /* Character Data - Index: 61 */
113 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
113 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
114
114
115 /* Character Data - Index: 62 */
115 /* Character Data - Index: 62 */
116 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x18,0x00,0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
116 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x18,0x00,0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
117
117
118 /* Character Data - Index: 63 */
118 /* Character Data - Index: 63 */
119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x60,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x60,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
120
120
121 /* Character Data - Index: 64 */
121 /* Character Data - Index: 64 */
122 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x03,0x64,0x06,0x32,0x04,0xCA,0x04,0xCA,0x04,0x72,0x03,0x02,0x00,0x04,0x00,0x08,0x02,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
122 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x0C,0x03,0x64,0x06,0x32,0x04,0xCA,0x04,0xCA,0x04,0x72,0x03,0x02,0x00,0x04,0x00,0x08,0x02,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
123
123
124 /* Character Data - Index: 65 */
124 /* Character Data - Index: 65 */
125 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0xA0,0x00,0x90,0x00,0x90,0x00,0xF8,0x00,0x08,0x01,0x04,0x01,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
125 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0xA0,0x00,0x90,0x00,0x90,0x00,0xF8,0x00,0x08,0x01,0x04,0x01,0x04,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
126
126
127 /* Character Data - Index: 66 */
127 /* Character Data - Index: 66 */
128 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x24,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
128 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x24,0x00,0x7C,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
129
129
130 /* Character Data - Index: 67 */
130 /* Character Data - Index: 67 */
131 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
131 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
132
132
133 /* Character Data - Index: 68 */
133 /* Character Data - Index: 68 */
134 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x34,0x00,0x44,0x00,0x84,0x00,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
134 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x34,0x00,0x44,0x00,0x84,0x00,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
135
135
136 /* Character Data - Index: 69 */
136 /* Character Data - Index: 69 */
137 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
137 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
138
138
139 /* Character Data - Index: 70 */
139 /* Character Data - Index: 70 */
140 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
140 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
141
141
142 /* Character Data - Index: 71 */
142 /* Character Data - Index: 71 */
143 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0xF2,0x01,0x02,0x01,0x82,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
143 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x88,0x00,0x04,0x00,0x04,0x00,0x02,0x00,0xF2,0x01,0x02,0x01,0x82,0x00,0x42,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
144
144
145 /* Character Data - Index: 72 */
145 /* Character Data - Index: 72 */
146 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0xFC,0x03,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
146 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0xFC,0x03,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
147
147
148 /* Character Data - Index: 73 */
148 /* Character Data - Index: 73 */
149 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
149 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
150
150
151 /* Character Data - Index: 74 */
151 /* Character Data - Index: 74 */
152 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
152 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
153
153
154 /* Character Data - Index: 75 */
154 /* Character Data - Index: 75 */
155 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x0C,0x00,0x0C,0x00,0x14,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
155 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x0C,0x00,0x0C,0x00,0x14,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
156
156
157 /* Character Data - Index: 76 */
157 /* Character Data - Index: 76 */
158 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
158 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
159
159
160 /* Character Data - Index: 77 */
160 /* Character Data - Index: 77 */
161 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x10,0x01,0x10,0x01,0x90,0x01,0xA8,0x02,0xA8,0x02,0xA8,0x02,0xA4,0x02,0x44,0x04,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
161 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x01,0x10,0x01,0x10,0x01,0x90,0x01,0xA8,0x02,0xA8,0x02,0xA8,0x02,0xA4,0x02,0x44,0x04,0x44,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
162
162
163 /* Character Data - Index: 78 */
163 /* Character Data - Index: 78 */
164 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x06,0x02,0x0A,0x02,0x0A,0x02,0x12,0x02,0x22,0x02,0x42,0x02,0x82,0x02,0x02,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
164 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x06,0x02,0x0A,0x02,0x0A,0x02,0x12,0x02,0x22,0x02,0x42,0x02,0x82,0x02,0x02,0x03,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
165
165
166 /* Character Data - Index: 79 */
166 /* Character Data - Index: 79 */
167 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x08,0x01,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
167 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x08,0x01,0x04,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x01,0x84,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
168
168
169 /* Character Data - Index: 80 */
169 /* Character Data - Index: 80 */
170 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
170 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
171
171
172 /* Character Data - Index: 81 */
172 /* Character Data - Index: 81 */
173 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x03,0x04,0x02,0x02,0x04,0x02,0x04,0x02,0x04,0x42,0x04,0xC4,0x04,0x8C,0x03,0xF0,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,
173 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x03,0x04,0x02,0x02,0x04,0x02,0x04,0x02,0x04,0x42,0x04,0xC4,0x04,0x8C,0x03,0xF0,0x03,0x00,0x06,0x00,0x0C,0x00,0x00,0x00,0x00,
174
174
175 /* Character Data - Index: 82 */
175 /* Character Data - Index: 82 */
176 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
176 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x24,0x00,0x44,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
177
177
178 /* Character Data - Index: 83 */
178 /* Character Data - Index: 83 */
179 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
179 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x08,0x00,0x04,0x00,0x04,0x00,0xF8,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x82,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
180
180
181 /* Character Data - Index: 84 */
181 /* Character Data - Index: 84 */
182 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
182 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
183
183
184 /* Character Data - Index: 85 */
184 /* Character Data - Index: 85 */
185 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x08,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
185 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02,0x08,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
186
186
187 /* Character Data - Index: 86 */
187 /* Character Data - Index: 86 */
188 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x01,0x82,0x00,0x84,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
188 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x02,0x01,0x82,0x00,0x84,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
189
189
190 /* Character Data - Index: 87 */
190 /* Character Data - Index: 87 */
191 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0x84,0x10,0x84,0x08,0x48,0x09,0x48,0x09,0x28,0x05,0x28,0x05,0x28,0x05,0x10,0x02,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
191 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x84,0x10,0x84,0x10,0x84,0x08,0x48,0x09,0x48,0x09,0x28,0x05,0x28,0x05,0x28,0x05,0x10,0x02,0x10,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
192
192
193 /* Character Data - Index: 88 */
193 /* Character Data - Index: 88 */
194 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00,0x20,0x00,0x50,0x00,0x88,0x00,0x04,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
194 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x04,0x01,0x88,0x00,0x50,0x00,0x20,0x00,0x20,0x00,0x50,0x00,0x88,0x00,0x04,0x01,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
195
195
196 /* Character Data - Index: 89 */
196 /* Character Data - Index: 89 */
197 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x84,0x00,0x88,0x00,0x48,0x00,0x50,0x00,0x30,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
197 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x84,0x00,0x88,0x00,0x48,0x00,0x50,0x00,0x30,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
198
198
199 /* Character Data - Index: 90 */
199 /* Character Data - Index: 90 */
200 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
200 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
201
201
202 /* Character Data - Index: 91 */
202 /* Character Data - Index: 91 */
203 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x00,0x00,
203 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x1C,0x00,0x00,0x00,
204
204
205 /* Character Data - Index: 92 */
205 /* Character Data - Index: 92 */
206 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
206 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
207
207
208 /* Character Data - Index: 93 */
208 /* Character Data - Index: 93 */
209 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x1C,0x00,0x00,0x00,
209 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x1C,0x00,0x00,0x00,
210
210
211 /* Character Data - Index: 94 */
211 /* Character Data - Index: 94 */
212 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x1C,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
212 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x1C,0x00,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
213
213
214 /* Character Data - Index: 95 */
214 /* Character Data - Index: 95 */
215 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,
215 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,
216
216
217 /* Character Data - Index: 96 */
217 /* Character Data - Index: 96 */
218 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
218 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
219
219
220 /* Character Data - Index: 97 */
220 /* Character Data - Index: 97 */
221 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
221 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0xB8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
222
222
223 /* Character Data - Index: 98 */
223 /* Character Data - Index: 98 */
224 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
224 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x44,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
225
225
226 /* Character Data - Index: 99 */
226 /* Character Data - Index: 99 */
227 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
227 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
228
228
229 /* Character Data - Index: 100 */
229 /* Character Data - Index: 100 */
230 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xF0,0x00,0x88,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
230 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0xF0,0x00,0x88,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0x84,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
231
231
232 /* Character Data - Index: 101 */
232 /* Character Data - Index: 101 */
233 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x34,0x00,0x0C,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
233 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x34,0x00,0x0C,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
234
234
235 /* Character Data - Index: 102 */
235 /* Character Data - Index: 102 */
236 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
236 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x10,0x00,0x10,0x00,0x7C,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
237
237
238 /* Character Data - Index: 103 */
238 /* Character Data - Index: 103 */
239 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x64,0x00,0x58,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x1C,0x00,
239 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x64,0x00,0x58,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x1C,0x00,
240
240
241 /* Character Data - Index: 104 */
241 /* Character Data - Index: 104 */
242 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
242 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
243
243
244 /* Character Data - Index: 105 */
244 /* Character Data - Index: 105 */
245 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
245 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
246
246
247 /* Character Data - Index: 106 */
247 /* Character Data - Index: 106 */
248 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x09,0x00,0x06,0x00,
248 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x09,0x00,0x06,0x00,
249
249
250 /* Character Data - Index: 107 */
250 /* Character Data - Index: 107 */
251 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x1C,0x00,0x24,0x00,0x24,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
251 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x44,0x00,0x24,0x00,0x14,0x00,0x1C,0x00,0x24,0x00,0x24,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
252
252
253 /* Character Data - Index: 108 */
253 /* Character Data - Index: 108 */
254 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
254 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
255
255
256 /* Character Data - Index: 109 */
256 /* Character Data - Index: 109 */
257 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB4,0x00,0x6C,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
257 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB4,0x00,0x6C,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
258
258
259 /* Character Data - Index: 110 */
259 /* Character Data - Index: 110 */
260 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
260 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x4C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
261
261
262 /* Character Data - Index: 111 */
262 /* Character Data - Index: 111 */
263 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
263 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
264
264
265 /* Character Data - Index: 112 */
265 /* Character Data - Index: 112 */
266 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
266 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x3C,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,
267
267
268 /* Character Data - Index: 113 */
268 /* Character Data - Index: 113 */
269 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,
269 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x48,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,
270
270
271 /* Character Data - Index: 114 */
271 /* Character Data - Index: 114 */
272 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x2C,0x00,0x24,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
272 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x2C,0x00,0x24,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
273
273
274 /* Character Data - Index: 115 */
274 /* Character Data - Index: 115 */
275 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x04,0x00,0x18,0x00,0x20,0x00,0x20,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
275 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x24,0x00,0x04,0x00,0x18,0x00,0x20,0x00,0x20,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
276
276
277 /* Character Data - Index: 116 */
277 /* Character Data - Index: 116 */
278 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
278 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x3E,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
279
279
280 /* Character Data - Index: 117 */
280 /* Character Data - Index: 117 */
281 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
281 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x44,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
282
282
283 /* Character Data - Index: 118 */
283 /* Character Data - Index: 118 */
284 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
284 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x28,0x00,0x28,0x00,0x28,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
285
285
286 /* Character Data - Index: 119 */
286 /* Character Data - Index: 119 */
287 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x02,0x22,0x02,0x54,0x01,0x54,0x01,0x54,0x01,0xC8,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
287 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x02,0x22,0x02,0x54,0x01,0x54,0x01,0x54,0x01,0xC8,0x00,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
288
288
289 /* Character Data - Index: 120 */
289 /* Character Data - Index: 120 */
290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x44,0x00,0x38,0x00,0x10,0x00,0x28,0x00,0x44,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
290 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x44,0x00,0x38,0x00,0x10,0x00,0x28,0x00,0x44,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
291
291
292 /* Character Data - Index: 121 */
292 /* Character Data - Index: 121 */
293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x18,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x04,0x00,
293 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x42,0x00,0x42,0x00,0x24,0x00,0x24,0x00,0x18,0x00,0x18,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x04,0x00,0x04,0x00,
294
294
295 /* Character Data - Index: 122 */
295 /* Character Data - Index: 122 */
296 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
296 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x20,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x08,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
297
297
298 /* Character Data - Index: 123 */
298 /* Character Data - Index: 123 */
299 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x06,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
299 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x06,0x00,0x06,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x18,0x00,0x00,0x00,
300
300
301 /* Character Data - Index: 124 */
301 /* Character Data - Index: 124 */
302 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
302 0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x00,0x00,0x00,0x00,
303
303
304 /* Character Data - Index: 125 */
304 /* Character Data - Index: 125 */
305 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
305 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x08,0x00,0x06,0x00,0x00,0x00,
306
306
307 /* Character Data - Index: 126 */
307 /* Character Data - Index: 126 */
308 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x00,0xD6,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
308 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x00,0xD6,0x00,0x62,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
309
309
310 /* Character Data - Index: 127 */
310 /* Character Data - Index: 127 */
311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
311 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
312 };
312 };
313
313
314 const uint8_t ComicSansMS_24_TBL[] = {
314 const uint8_t ComicSansMS_24_TBL[] = {
315
315
316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
316 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
317
317
318 /* Character Data - Index: 33 */
318 /* Character Data - Index: 33 */
319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
319 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
320
320
321 /* Character Data - Index: 34 */
321 /* Character Data - Index: 34 */
322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
322 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
323
323
324 /* Character Data - Index: 35 */
324 /* Character Data - Index: 35 */
325 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xFC,0x7F,0x00,0xFC,0x7F,0x00,0x60,0x0C,0x00,0x60,0x0C,0x00,0x30,0x06,0x00,0xFE,0x3F,0x00,0xFE,0x3F,0x00,0x30,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
325 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xC0,0x18,0x00,0xFC,0x7F,0x00,0xFC,0x7F,0x00,0x60,0x0C,0x00,0x60,0x0C,0x00,0x30,0x06,0x00,0xFE,0x3F,0x00,0xFE,0x3F,0x00,0x30,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
326
326
327 /* Character Data - Index: 36 */
327 /* Character Data - Index: 36 */
328 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x03,0x00,0xF8,0x07,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xFC,0x03,0x00,0xF0,0x07,0x00,0xC0,0x0E,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xCC,0x0E,0x00,0xFC,0x07,0x00,0xF8,0x03,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
328 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x03,0x00,0xF8,0x07,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0xFC,0x03,0x00,0xF0,0x07,0x00,0xC0,0x0E,0x00,0xC0,0x0C,0x00,0xC0,0x0C,0x00,0xCC,0x0E,0x00,0xFC,0x07,0x00,0xF8,0x03,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
329
329
330 /* Character Data - Index: 37 */
330 /* Character Data - Index: 37 */
331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x3C,0x06,0x00,0x7E,0x03,0x00,0x66,0x03,0x00,0xFE,0x03,0x00,0xBC,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x1E,0x00,0x60,0x3F,0x00,0x60,0x33,0x00,0x30,0x3F,0x00,0x30,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
331 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x3C,0x06,0x00,0x7E,0x03,0x00,0x66,0x03,0x00,0xFE,0x03,0x00,0xBC,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xE0,0x1E,0x00,0x60,0x3F,0x00,0x60,0x33,0x00,0x30,0x3F,0x00,0x30,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
332
332
333 /* Character Data - Index: 38 */
333 /* Character Data - Index: 38 */
334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xF0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xF0,0x00,0x00,0x70,0x04,0x00,0xDC,0x04,0x00,0xCC,0x04,0x00,0x86,0x07,0x00,0x06,0x07,0x00,0x0E,0x07,0x00,0xFC,0x07,0x00,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
334 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xF0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xF0,0x00,0x00,0x70,0x04,0x00,0xDC,0x04,0x00,0xCC,0x04,0x00,0x86,0x07,0x00,0x06,0x07,0x00,0x0E,0x07,0x00,0xFC,0x07,0x00,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
335
335
336 /* Character Data - Index: 39 */
336 /* Character Data - Index: 39 */
337 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
337 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
338
338
339 /* Character Data - Index: 40 */
339 /* Character Data - Index: 40 */
340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
340 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,
341
341
342 /* Character Data - Index: 41 */
342 /* Character Data - Index: 41 */
343 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
343 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,
344
344
345 /* Character Data - Index: 42 */
345 /* Character Data - Index: 42 */
346 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0xFE,0x01,0x00,0xFC,0x00,0x00,0x78,0x00,0x00,0x6C,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
346 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x10,0x00,0x00,0xFE,0x01,0x00,0xFC,0x00,0x00,0x78,0x00,0x00,0x6C,0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
347
347
348 /* Character Data - Index: 43 */
348 /* Character Data - Index: 43 */
349 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
349 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
350
350
351 /* Character Data - Index: 44 */
351 /* Character Data - Index: 44 */
352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
352 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
353
353
354 /* Character Data - Index: 45 */
354 /* Character Data - Index: 45 */
355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
355 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
356
356
357 /* Character Data - Index: 46 */
357 /* Character Data - Index: 46 */
358 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
358 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
359
359
360 /* Character Data - Index: 47 */
360 /* Character Data - Index: 47 */
361 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
361 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
362
362
363 /* Character Data - Index: 48 */
363 /* Character Data - Index: 48 */
364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x8C,0x01,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
364 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x8C,0x01,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
365
365
366 /* Character Data - Index: 49 */
366 /* Character Data - Index: 49 */
367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x34,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
367 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x34,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
368
368
369 /* Character Data - Index: 50 */
369 /* Character Data - Index: 50 */
370 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x03,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0x70,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
370 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x03,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0x70,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
371
371
372 /* Character Data - Index: 51 */
372 /* Character Data - Index: 51 */
373 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xF0,0x01,0x00,0xF0,0x00,0x00,0x80,0x03,0x00,0x00,0x03,0x00,0x04,0x03,0x00,0x8C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
373 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xF0,0x01,0x00,0xF0,0x00,0x00,0x80,0x03,0x00,0x00,0x03,0x00,0x04,0x03,0x00,0x8C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
374
374
375 /* Character Data - Index: 52 */
375 /* Character Data - Index: 52 */
376 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0xA0,0x01,0x00,0x90,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
376 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0xA0,0x01,0x00,0x90,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
377
377
378 /* Character Data - Index: 53 */
378 /* Character Data - Index: 53 */
379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
379 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
380
380
381 /* Character Data - Index: 54 */
381 /* Character Data - Index: 54 */
382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
382 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0xFC,0x00,0x00,0xFC,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
383
383
384 /* Character Data - Index: 55 */
384 /* Character Data - Index: 55 */
385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
385 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0xFE,0x07,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
386
386
387 /* Character Data - Index: 56 */
387 /* Character Data - Index: 56 */
388 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x03,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFE,0x01,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
388 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x03,0x00,0x0E,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFE,0x01,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
389
389
390 /* Character Data - Index: 57 */
390 /* Character Data - Index: 57 */
391 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
391 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xFC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x3C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
392
392
393 /* Character Data - Index: 58 */
393 /* Character Data - Index: 58 */
394 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
394 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
395
395
396 /* Character Data - Index: 59 */
396 /* Character Data - Index: 59 */
397 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
397 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
398
398
399 /* Character Data - Index: 60 */
399 /* Character Data - Index: 60 */
400 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
400 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x06,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
401
401
402 /* Character Data - Index: 61 */
402 /* Character Data - Index: 61 */
403 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
403 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
404
404
405 /* Character Data - Index: 62 */
405 /* Character Data - Index: 62 */
406 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x30,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
406 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x30,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
407
407
408 /* Character Data - Index: 63 */
408 /* Character Data - Index: 63 */
409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xE0,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
409 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xE0,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
410
410
411 /* Character Data - Index: 64 */
411 /* Character Data - Index: 64 */
412 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x3F,0x00,0x70,0x78,0x00,0x18,0x60,0x00,0x98,0xC3,0x00,0xCC,0xC1,0x00,0x6C,0xC6,0x00,0x6C,0xC6,0x00,0xEC,0x7F,0x00,0xCC,0x3D,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x70,0x18,0x00,0xE0,0x1F,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
412 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x3F,0x00,0x70,0x78,0x00,0x18,0x60,0x00,0x98,0xC3,0x00,0xCC,0xC1,0x00,0x6C,0xC6,0x00,0x6C,0xC6,0x00,0xEC,0x7F,0x00,0xCC,0x3D,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x70,0x18,0x00,0xE0,0x1F,0x00,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
413
413
414 /* Character Data - Index: 65 */
414 /* Character Data - Index: 65 */
415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xC0,0x06,0x00,0xC0,0x06,0x00,0x60,0x06,0x00,0x60,0x07,0x00,0xF0,0x07,0x00,0x78,0x06,0x00,0x18,0x0E,0x00,0x18,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
415 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x03,0x00,0x80,0x03,0x00,0xC0,0x06,0x00,0xC0,0x06,0x00,0x60,0x06,0x00,0x60,0x07,0x00,0xF0,0x07,0x00,0x78,0x06,0x00,0x18,0x0E,0x00,0x18,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
416
416
417 /* Character Data - Index: 66 */
417 /* Character Data - Index: 66 */
418 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x8C,0x07,0x00,0xFC,0x03,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
418 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x8C,0x07,0x00,0xFC,0x03,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
419
419
420 /* Character Data - Index: 67 */
420 /* Character Data - Index: 67 */
421 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF0,0x03,0x00,0x38,0x03,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
421 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0x00,0xF0,0x03,0x00,0x38,0x03,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x00,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xFC,0x01,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
422
422
423 /* Character Data - Index: 68 */
423 /* Character Data - Index: 68 */
424 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xEC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x06,0x00,0x0C,0x0E,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0E,0x00,0x0C,0x07,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
424 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xEC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x06,0x00,0x0C,0x0E,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x0E,0x00,0x0C,0x07,0x00,0xFC,0x03,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
425
425
426 /* Character Data - Index: 69 */
426 /* Character Data - Index: 69 */
427 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
427 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
428
428
429 /* Character Data - Index: 70 */
429 /* Character Data - Index: 70 */
430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
430 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x07,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
431
431
432 /* Character Data - Index: 71 */
432 /* Character Data - Index: 71 */
433 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF0,0x07,0x00,0x38,0x06,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xF6,0x0F,0x00,0xF6,0x0F,0x00,0x06,0x0C,0x00,0x06,0x06,0x00,0x0E,0x07,0x00,0xFC,0x03,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
433 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF0,0x07,0x00,0x38,0x06,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xF6,0x0F,0x00,0xF6,0x0F,0x00,0x06,0x0C,0x00,0x06,0x06,0x00,0x0E,0x07,0x00,0xFC,0x03,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
434
434
435 /* Character Data - Index: 72 */
435 /* Character Data - Index: 72 */
436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x8C,0x1F,0x00,0xFC,0x1F,0x00,0x7C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
436 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x8C,0x1F,0x00,0xFC,0x1F,0x00,0x7C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
437
437
438 /* Character Data - Index: 73 */
438 /* Character Data - Index: 73 */
439 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
439 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFE,0x01,0x00,0xFE,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
440
440
441 /* Character Data - Index: 74 */
441 /* Character Data - Index: 74 */
442 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0xF0,0x0F,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x86,0x01,0x00,0x86,0x01,0x00,0xCE,0x01,0x00,0xFC,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
442 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0xF0,0x0F,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x86,0x01,0x00,0x86,0x01,0x00,0xCE,0x01,0x00,0xFC,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
443
443
444 /* Character Data - Index: 75 */
444 /* Character Data - Index: 75 */
445 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x0C,0x06,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xEC,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x6C,0x00,0x00,0xEC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
445 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x0C,0x06,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xEC,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x6C,0x00,0x00,0xEC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
446
446
447 /* Character Data - Index: 76 */
447 /* Character Data - Index: 76 */
448 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
448 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
449
449
450 /* Character Data - Index: 77 */
450 /* Character Data - Index: 77 */
451 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x14,0x00,0xD8,0x34,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xCC,0x36,0x00,0x8C,0x33,0x00,0x8C,0x63,0x00,0x8C,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
451 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x08,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x14,0x00,0xD8,0x34,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xD8,0x36,0x00,0xCC,0x36,0x00,0x8C,0x33,0x00,0x8C,0x63,0x00,0x8C,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
452
452
453 /* Character Data - Index: 78 */
453 /* Character Data - Index: 78 */
454 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x10,0x00,0x1C,0x30,0x00,0x1C,0x30,0x00,0x3C,0x30,0x00,0x6C,0x30,0x00,0xCC,0x30,0x00,0x8C,0x31,0x00,0x8C,0x31,0x00,0x0C,0x33,0x00,0x0C,0x36,0x00,0x0C,0x3C,0x00,0x0C,0x38,0x00,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
454 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x10,0x00,0x1C,0x30,0x00,0x1C,0x30,0x00,0x3C,0x30,0x00,0x6C,0x30,0x00,0xCC,0x30,0x00,0x8C,0x31,0x00,0x8C,0x31,0x00,0x0C,0x33,0x00,0x0C,0x36,0x00,0x0C,0x3C,0x00,0x0C,0x38,0x00,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
455
455
456 /* Character Data - Index: 79 */
456 /* Character Data - Index: 79 */
457 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x38,0x30,0x00,0x18,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0xF0,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
457 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x38,0x30,0x00,0x18,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x30,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0xF0,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
458
458
459 /* Character Data - Index: 80 */
459 /* Character Data - Index: 80 */
460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
460 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
461
461
462 /* Character Data - Index: 81 */
462 /* Character Data - Index: 81 */
463 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x18,0x30,0x00,0x1C,0x70,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x61,0x00,0x18,0x63,0x00,0x38,0x36,0x00,0xF0,0x3F,0x00,0xC0,0x1B,0x00,0x00,0x30,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
463 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x0F,0x00,0xE0,0x1F,0x00,0x70,0x38,0x00,0x18,0x30,0x00,0x1C,0x70,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x60,0x00,0x0C,0x61,0x00,0x18,0x63,0x00,0x38,0x36,0x00,0xF0,0x3F,0x00,0xC0,0x1B,0x00,0x00,0x30,0x00,0x00,0x70,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x00,0x00,
464
464
465 /* Character Data - Index: 82 */
465 /* Character Data - Index: 82 */
466 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0x7C,0x00,0x00,0xEC,0x00,0x00,0x8C,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
466 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0xFC,0x00,0x00,0xCC,0x01,0x00,0x8C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0x7C,0x00,0x00,0xEC,0x00,0x00,0x8C,0x03,0x00,0x0C,0x07,0x00,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
467
467
468 /* Character Data - Index: 83 */
468 /* Character Data - Index: 83 */
469 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0xF0,0x07,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x03,0x00,0xF0,0x07,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x0C,0x0C,0x00,0x1C,0x0E,0x00,0xF8,0x07,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
469 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0x00,0xF0,0x07,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x03,0x00,0xF0,0x07,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x0C,0x0C,0x00,0x1C,0x0E,0x00,0xF8,0x07,0x00,0xF0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
470
470
471 /* Character Data - Index: 84 */
471 /* Character Data - Index: 84 */
472 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0xFE,0x0F,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
472 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0xFE,0x0F,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
473
473
474 /* Character Data - Index: 85 */
474 /* Character Data - Index: 85 */
475 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x00,0x38,0x0E,0x00,0xF8,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
475 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x18,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x00,0x38,0x0E,0x00,0xF8,0x07,0x00,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
476
476
477 /* Character Data - Index: 86 */
477 /* Character Data - Index: 86 */
478 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x06,0x00,0x18,0x06,0x00,0x18,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x30,0x03,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
478 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x0C,0x06,0x00,0x18,0x06,0x00,0x18,0x06,0x00,0x18,0x03,0x00,0x18,0x03,0x00,0x30,0x03,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
479
479
480 /* Character Data - Index: 87 */
480 /* Character Data - Index: 87 */
481 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x02,0x0C,0x0E,0x03,0x1C,0x0E,0x03,0x18,0x0E,0x03,0x18,0x1B,0x03,0x18,0x9B,0x01,0x30,0x9B,0x01,0xB0,0x99,0x01,0xB0,0xD9,0x00,0xA0,0xD9,0x00,0xE0,0xD8,0x00,0xE0,0x78,0x00,0xE0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
481 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x02,0x0C,0x0E,0x03,0x1C,0x0E,0x03,0x18,0x0E,0x03,0x18,0x1B,0x03,0x18,0x9B,0x01,0x30,0x9B,0x01,0xB0,0x99,0x01,0xB0,0xD9,0x00,0xA0,0xD9,0x00,0xE0,0xD8,0x00,0xE0,0x78,0x00,0xE0,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
482
482
483 /* Character Data - Index: 88 */
483 /* Character Data - Index: 88 */
484 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0x70,0x06,0x00,0x60,0x07,0x00,0xC0,0x03,0x00,0x80,0x01,0x00,0xC0,0x03,0x00,0x60,0x03,0x00,0x30,0x06,0x00,0x18,0x0C,0x00,0x1C,0x1C,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
484 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x00,0x1C,0x18,0x00,0x38,0x0C,0x00,0x70,0x06,0x00,0x60,0x07,0x00,0xC0,0x03,0x00,0x80,0x01,0x00,0xC0,0x03,0x00,0x60,0x03,0x00,0x30,0x06,0x00,0x18,0x0C,0x00,0x1C,0x1C,0x00,0x0C,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
485
485
486 /* Character Data - Index: 89 */
486 /* Character Data - Index: 89 */
487 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x06,0x06,0x00,0x0C,0x03,0x00,0x18,0x03,0x00,0x98,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
487 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x06,0x06,0x00,0x0C,0x03,0x00,0x18,0x03,0x00,0x98,0x01,0x00,0xB0,0x01,0x00,0xB0,0x01,0x00,0xE0,0x00,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
488
488
489 /* Character Data - Index: 90 */
489 /* Character Data - Index: 90 */
490 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x0E,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
490 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x0E,0x00,0x00,0x03,0x00,0x80,0x01,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0x60,0x00,0x00,0x30,0x00,0x00,0x18,0x00,0x00,0x0C,0x00,0x00,0xFC,0x1F,0x00,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
491
491
492 /* Character Data - Index: 91 */
492 /* Character Data - Index: 91 */
493 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,
493 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,
494
494
495 /* Character Data - Index: 92 */
495 /* Character Data - Index: 92 */
496 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
496 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x60,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0xC0,0x00,0x00,0xC0,0x00,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
497
497
498 /* Character Data - Index: 93 */
498 /* Character Data - Index: 93 */
499 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
499 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,
500
500
501 /* Character Data - Index: 94 */
501 /* Character Data - Index: 94 */
502 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xE0,0x00,0x00,0x30,0x01,0x00,0x18,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
502 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0xE0,0x00,0x00,0x30,0x01,0x00,0x18,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
503
503
504 /* Character Data - Index: 95 */
504 /* Character Data - Index: 95 */
505 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
505 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
506
506
507 /* Character Data - Index: 96 */
507 /* Character Data - Index: 96 */
508 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
508 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x18,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
509
509
510 /* Character Data - Index: 97 */
510 /* Character Data - Index: 97 */
511 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x03,0x00,0x70,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
511 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x03,0x00,0x70,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
512
512
513 /* Character Data - Index: 98 */
513 /* Character Data - Index: 98 */
514 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
514 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x8C,0x03,0x00,0xFC,0x01,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
515
515
516 /* Character Data - Index: 99 */
516 /* Character Data - Index: 99 */
517 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x9C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
517 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x9C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
518
518
519 /* Character Data - Index: 100 */
519 /* Character Data - Index: 100 */
520 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0xF0,0x03,0x00,0xF8,0x03,0x00,0x1C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x03,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
520 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0xF0,0x03,0x00,0xF8,0x03,0x00,0x1C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x03,0x00,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
521
521
522 /* Character Data - Index: 101 */
522 /* Character Data - Index: 101 */
523 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0xF8,0x03,0x00,0x18,0x03,0x00,0xCC,0x03,0x00,0xFC,0x00,0x00,0x3C,0x00,0x00,0x1C,0x02,0x00,0xF8,0x03,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
523 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0x00,0xF8,0x03,0x00,0x18,0x03,0x00,0xCC,0x03,0x00,0xFC,0x00,0x00,0x3C,0x00,0x00,0x1C,0x02,0x00,0xF8,0x03,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
524
524
525 /* Character Data - Index: 102 */
525 /* Character Data - Index: 102 */
526 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
526 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0xE0,0x01,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x01,0x00,0xFC,0x01,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
527
527
528 /* Character Data - Index: 103 */
528 /* Character Data - Index: 103 */
529 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xF8,0x01,0x00,0xB8,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,
529 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xF8,0x01,0x00,0xB8,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,
530
530
531 /* Character Data - Index: 104 */
531 /* Character Data - Index: 104 */
532 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
532 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
533
533
534 /* Character Data - Index: 105 */
534 /* Character Data - Index: 105 */
535 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
535 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
536
536
537 /* Character Data - Index: 106 */
537 /* Character Data - Index: 106 */
538 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x33,0x00,0x00,0x33,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,
538 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x33,0x00,0x00,0x33,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,
539
539
540 /* Character Data - Index: 107 */
540 /* Character Data - Index: 107 */
541 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xCC,0x00,0x00,0x6C,0x00,0x00,0x7C,0x00,0x00,0xDC,0x00,0x00,0x8C,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
541 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x03,0x00,0x8C,0x01,0x00,0xCC,0x00,0x00,0x6C,0x00,0x00,0x7C,0x00,0x00,0xDC,0x00,0x00,0x8C,0x01,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
542
542
543 /* Character Data - Index: 108 */
543 /* Character Data - Index: 108 */
544 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
544 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
545
545
546 /* Character Data - Index: 109 */
546 /* Character Data - Index: 109 */
547 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x0E,0x00,0xEC,0x1F,0x00,0xBC,0x1B,0x00,0x9C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
547 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCC,0x0E,0x00,0xEC,0x1F,0x00,0xBC,0x1B,0x00,0x9C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
548
548
549 /* Character Data - Index: 110 */
549 /* Character Data - Index: 110 */
550 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
550 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00,0xFC,0x01,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
551
551
552 /* Character Data - Index: 111 */
552 /* Character Data - Index: 111 */
553 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
553 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x01,0x00,0x98,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x0C,0x03,0x00,0x9C,0x03,0x00,0xF8,0x01,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
554
554
555 /* Character Data - Index: 112 */
555 /* Character Data - Index: 112 */
556 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x00,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,
556 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0xEC,0x00,0x00,0xFC,0x00,0x00,0x9C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xCC,0x01,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,
557
557
558 /* Character Data - Index: 113 */
558 /* Character Data - Index: 113 */
559 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,
559 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0xF8,0x01,0x00,0x98,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xF8,0x01,0x00,0xF0,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,0x80,0x01,0x00,
560
560
561 /* Character Data - Index: 114 */
561 /* Character Data - Index: 114 */
562 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00,0xFC,0x00,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
562 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x00,0x00,0xFC,0x00,0x00,0xDC,0x00,0x00,0xCC,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
563
563
564 /* Character Data - Index: 115 */
564 /* Character Data - Index: 115 */
565 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xF8,0x00,0x00,0xDC,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xF0,0x00,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
565 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xF8,0x00,0x00,0xDC,0x00,0x00,0x0C,0x00,0x00,0x7C,0x00,0x00,0xF0,0x00,0x00,0xC0,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
566
566
567 /* Character Data - Index: 116 */
567 /* Character Data - Index: 116 */
568 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
568 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0xFC,0x00,0x00,0xFC,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
569
569
570 /* Character Data - Index: 117 */
570 /* Character Data - Index: 117 */
571 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
571 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xFC,0x01,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
572
572
573 /* Character Data - Index: 118 */
573 /* Character Data - Index: 118 */
574 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x86,0x01,0x00,0x8C,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
574 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x86,0x01,0x00,0x86,0x01,0x00,0x8C,0x00,0x00,0xCC,0x00,0x00,0xCC,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x38,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
575
575
576 /* Character Data - Index: 119 */
576 /* Character Data - Index: 119 */
577 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0xCC,0x19,0x00,0xCC,0x0D,0x00,0xD8,0x0D,0x00,0x58,0x0D,0x00,0x78,0x0D,0x00,0x38,0x07,0x00,0x30,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
577 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8C,0x19,0x00,0x8C,0x19,0x00,0xCC,0x19,0x00,0xCC,0x0D,0x00,0xD8,0x0D,0x00,0x58,0x0D,0x00,0x78,0x0D,0x00,0x38,0x07,0x00,0x30,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
578
578
579 /* Character Data - Index: 120 */
579 /* Character Data - Index: 120 */
580 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xDC,0x01,0x00,0xF8,0x00,0x00,0x70,0x00,0x00,0xF8,0x00,0x00,0xDC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
580 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x00,0x8E,0x03,0x00,0xDC,0x01,0x00,0xF8,0x00,0x00,0x70,0x00,0x00,0xF8,0x00,0x00,0xDC,0x01,0x00,0x8E,0x03,0x00,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
581
581
582 /* Character Data - Index: 121 */
582 /* Character Data - Index: 121 */
583 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xD8,0x00,0x00,0xD8,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,
583 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x00,0x06,0x03,0x00,0x8C,0x01,0x00,0x8C,0x01,0x00,0xD8,0x00,0x00,0xD8,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x10,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,
584
584
585 /* Character Data - Index: 122 */
585 /* Character Data - Index: 122 */
586 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
586 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0xC0,0x01,0x00,0xC0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0xFC,0x03,0x00,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
587
587
588 /* Character Data - Index: 123 */
588 /* Character Data - Index: 123 */
589 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x78,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
589 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x78,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0E,0x00,0x00,0x06,0x00,0x00,0x0E,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,
590
590
591 /* Character Data - Index: 124 */
591 /* Character Data - Index: 124 */
592 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
592 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
593
593
594 /* Character Data - Index: 125 */
594 /* Character Data - Index: 125 */
595 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
595 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,
596
596
597 /* Character Data - Index: 126 */
597 /* Character Data - Index: 126 */
598 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x78,0x04,0x00,0xC8,0x06,0x00,0xCC,0x07,0x00,0x84,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
598 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x78,0x04,0x00,0xC8,0x06,0x00,0xCC,0x07,0x00,0x84,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
599
599
600 /* Character Data - Index: 127 */
600 /* Character Data - Index: 127 */
601 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
601 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
602
602
603 };
603 };
604
604
605
606 /* Character bitmaps for Comic Sans MS 8pt */
607 const uint8_t comicSansMS_8ptBitmaps[] =
608 {
609 // @0 ' ' (11 pixels wide)
610 0x00, 0x00, //
611 0x00, 0x00, //
612 0x00, 0x00, //
613 0x00, 0x00, //
614 0x00, 0x00, //
615 0x00, 0x00, //
616 0x00, 0x00, //
617 0x00, 0x00, //
618 0x00, 0x00, //
619 0x00, 0x00, //
620 0x00, 0x00, //
621 0x00, 0x00, //
622
623 // @24 '!' (11 pixels wide)
624 0x20, 0x00, // #
625 0x20, 0x00, // #
626 0x20, 0x00, // #
627 0x20, 0x00, // #
628 0x20, 0x00, // #
629 0x20, 0x00, // #
630 0x20, 0x00, // #
631 0x00, 0x00, //
632 0x20, 0x00, // #
633 0x00, 0x00, //
634 0x00, 0x00, //
635 0x00, 0x00, //
636
637 // @48 '"' (11 pixels wide)
638 0x00, 0x00, //
639 0x50, 0x00, // # #
640 0x50, 0x00, // # #
641 0x50, 0x00, // # #
642 0x00, 0x00, //
643 0x00, 0x00, //
644 0x00, 0x00, //
645 0x00, 0x00, //
646 0x00, 0x00, //
647 0x00, 0x00, //
648 0x00, 0x00, //
649 0x00, 0x00, //
650
651 // @72 '#' (11 pixels wide)
652 0x00, 0x00, //
653 0x10, 0x01, // # #
654 0x10, 0x01, // # #
655 0xFC, 0x03, // ########
656 0x88, 0x00, // # #
657 0x88, 0x00, // # #
658 0xFE, 0x01, // ########
659 0x44, 0x00, // # #
660 0x44, 0x00, // # #
661 0x00, 0x00, //
662 0x00, 0x00, //
663 0x00, 0x00, //
664
665 // @96 '$' (11 pixels wide)
666 0x20, 0x00, // #
667 0xF0, 0x00, // ####
668 0x28, 0x00, // # #
669 0x28, 0x00, // # #
670 0x70, 0x00, // ###
671 0xA0, 0x00, // # #
672 0xA0, 0x00, // # #
673 0xA0, 0x00, // # #
674 0x78, 0x00, // ####
675 0x20, 0x00, // #
676 0x20, 0x00, // #
677 0x00, 0x00, //
678
679 // @120 '%' (11 pixels wide)
680 0x80, 0x00, // #
681 0xCC, 0x00, // ## ##
682 0x52, 0x00, // # # #
683 0x72, 0x00, // # ###
684 0x2C, 0x00, // ## #
685 0xB0, 0x01, // ## ##
686 0x50, 0x02, // # # #
687 0x58, 0x02, // ## # #
688 0x88, 0x01, // # ##
689 0x00, 0x00, //
690 0x00, 0x00, //
691 0x00, 0x00, //
692
693 // @144 '&' (11 pixels wide)
694 0x00, 0x00, //
695 0x60, 0x00, // ##
696 0x50, 0x00, // # #
697 0x30, 0x00, // ##
698 0xB8, 0x00, // ### #
699 0xAC, 0x00, // ## # #
700 0xC4, 0x00, // # ##
701 0x44, 0x00, // # #
702 0xB8, 0x00, // ### #
703 0x00, 0x00, //
704 0x00, 0x00, //
705 0x00, 0x00, //
706
707 // @168 ''' (11 pixels wide)
708 0x00, 0x00, //
709 0x20, 0x00, // #
710 0x20, 0x00, // #
711 0x20, 0x00, // #
712 0x00, 0x00, //
713 0x00, 0x00, //
714 0x00, 0x00, //
715 0x00, 0x00, //
716 0x00, 0x00, //
717 0x00, 0x00, //
718 0x00, 0x00, //
719 0x00, 0x00, //
720
721 // @192 '(' (11 pixels wide)
722 0x40, 0x00, // #
723 0x20, 0x00, // #
724 0x20, 0x00, // #
725 0x10, 0x00, // #
726 0x10, 0x00, // #
727 0x10, 0x00, // #
728 0x10, 0x00, // #
729 0x10, 0x00, // #
730 0x10, 0x00, // #
731 0x20, 0x00, // #
732 0x40, 0x00, // #
733 0x00, 0x00, //
734
735 // @216 ')' (11 pixels wide)
736 0x08, 0x00, // #
737 0x10, 0x00, // #
738 0x10, 0x00, // #
739 0x20, 0x00, // #
740 0x20, 0x00, // #
741 0x20, 0x00, // #
742 0x20, 0x00, // #
743 0x20, 0x00, // #
744 0x20, 0x00, // #
745 0x10, 0x00, // #
746 0x08, 0x00, // #
747 0x00, 0x00, //
748
749 // @240 '*' (11 pixels wide)
750 0x00, 0x00, //
751 0x10, 0x00, // #
752 0x7C, 0x00, // #####
753 0x38, 0x00, // ###
754 0x2C, 0x00, // ## #
755 0x00, 0x00, //
756 0x00, 0x00, //
757 0x00, 0x00, //
758 0x00, 0x00, //
759 0x00, 0x00, //
760 0x00, 0x00, //
761 0x00, 0x00, //
762
763 // @264 '+' (11 pixels wide)
764 0x00, 0x00, //
765 0x00, 0x00, //
766 0x00, 0x00, //
767 0x20, 0x00, // #
768 0x20, 0x00, // #
769 0xF8, 0x00, // #####
770 0x20, 0x00, // #
771 0x20, 0x00, // #
772 0x00, 0x00, //
773 0x00, 0x00, //
774 0x00, 0x00, //
775 0x00, 0x00, //
776
777 // @288 ',' (11 pixels wide)
778 0x00, 0x00, //
779 0x00, 0x00, //
780 0x00, 0x00, //
781 0x00, 0x00, //
782 0x00, 0x00, //
783 0x00, 0x00, //
784 0x00, 0x00, //
785 0x00, 0x00, //
786 0x20, 0x00, // #
787 0x10, 0x00, // #
788 0x00, 0x00, //
789 0x00, 0x00, //
790
791 // @312 '-' (11 pixels wide)
792 0x00, 0x00, //
793 0x00, 0x00, //
794 0x00, 0x00, //
795 0x00, 0x00, //
796 0x00, 0x00, //
797 0x00, 0x00, //
798 0x70, 0x00, // ###
799 0x00, 0x00, //
800 0x00, 0x00, //
801 0x00, 0x00, //
802 0x00, 0x00, //
803 0x00, 0x00, //
804
805 // @336 '.' (11 pixels wide)
806 0x00, 0x00, //
807 0x00, 0x00, //
808 0x00, 0x00, //
809 0x00, 0x00, //
810 0x00, 0x00, //
811 0x00, 0x00, //
812 0x00, 0x00, //
813 0x00, 0x00, //
814 0x20, 0x00, // #
815 0x00, 0x00, //
816 0x00, 0x00, //
817 0x00, 0x00, //
818
819 // @360 '/' (11 pixels wide)
820 0x80, 0x00, // #
821 0x40, 0x00, // #
822 0x40, 0x00, // #
823 0x40, 0x00, // #
824 0x20, 0x00, // #
825 0x10, 0x00, // #
826 0x10, 0x00, // #
827 0x08, 0x00, // #
828 0x08, 0x00, // #
829 0x00, 0x00, //
830 0x00, 0x00, //
831 0x00, 0x00, //
832
833 // @384 '0' (11 pixels wide)
834 0x00, 0x00, //
835 0x70, 0x00, // ###
836 0x88, 0x00, // # #
837 0x88, 0x00, // # #
838 0x88, 0x00, // # #
839 0x88, 0x00, // # #
840 0x88, 0x00, // # #
841 0x88, 0x00, // # #
842 0x70, 0x00, // ###
843 0x00, 0x00, //
844 0x00, 0x00, //
845 0x00, 0x00, //
846
847 // @408 '1' (11 pixels wide)
848 0x00, 0x00, //
849 0x20, 0x00, // #
850 0x30, 0x00, // ##
851 0x20, 0x00, // #
852 0x20, 0x00, // #
853 0x20, 0x00, // #
854 0x20, 0x00, // #
855 0x20, 0x00, // #
856 0x70, 0x00, // ###
857 0x00, 0x00, //
858 0x00, 0x00, //
859 0x00, 0x00, //
860
861 // @432 '2' (11 pixels wide)
862 0x00, 0x00, //
863 0x70, 0x00, // ###
864 0x88, 0x00, // # #
865 0x80, 0x00, // #
866 0x40, 0x00, // #
867 0x20, 0x00, // #
868 0x10, 0x00, // #
869 0x08, 0x00, // #
870 0xF8, 0x00, // #####
871 0x00, 0x00, //
872 0x00, 0x00, //
873 0x00, 0x00, //
874
875 // @456 '3' (11 pixels wide)
876 0x00, 0x00, //
877 0x70, 0x00, // ###
878 0x88, 0x00, // # #
879 0x80, 0x00, // #
880 0x70, 0x00, // ###
881 0x80, 0x00, // #
882 0x80, 0x00, // #
883 0x88, 0x00, // # #
884 0x70, 0x00, // ###
885 0x00, 0x00, //
886 0x00, 0x00, //
887 0x00, 0x00, //
888
889 // @480 '4' (11 pixels wide)
890 0x00, 0x00, //
891 0x40, 0x00, // #
892 0x60, 0x00, // ##
893 0x50, 0x00, // # #
894 0x50, 0x00, // # #
895 0x48, 0x00, // # #
896 0xFC, 0x00, // ######
897 0x40, 0x00, // #
898 0x40, 0x00, // #
899 0x00, 0x00, //
900 0x00, 0x00, //
901 0x00, 0x00, //
902
903 // @504 '5' (11 pixels wide)
904 0x00, 0x00, //
905 0xF8, 0x00, // #####
906 0x08, 0x00, // #
907 0x78, 0x00, // ####
908 0x88, 0x00, // # #
909 0x80, 0x00, // #
910 0x80, 0x00, // #
911 0x88, 0x00, // # #
912 0x70, 0x00, // ###
913 0x00, 0x00, //
914 0x00, 0x00, //
915 0x00, 0x00, //
916
917 // @528 '6' (11 pixels wide)
918 0x00, 0x00, //
919 0x40, 0x00, // #
920 0x20, 0x00, // #
921 0x10, 0x00, // #
922 0x78, 0x00, // ####
923 0x88, 0x00, // # #
924 0x88, 0x00, // # #
925 0x88, 0x00, // # #
926 0x70, 0x00, // ###
927 0x00, 0x00, //
928 0x00, 0x00, //
929 0x00, 0x00, //
930
931 // @552 '7' (11 pixels wide)
932 0x00, 0x00, //
933 0xFC, 0x00, // ######
934 0x40, 0x00, // #
935 0x20, 0x00, // #
936 0x20, 0x00, // #
937 0x10, 0x00, // #
938 0x10, 0x00, // #
939 0x10, 0x00, // #
940 0x08, 0x00, // #
941 0x00, 0x00, //
942 0x00, 0x00, //
943 0x00, 0x00, //
944
945 // @576 '8' (11 pixels wide)
946 0x00, 0x00, //
947 0x70, 0x00, // ###
948 0x88, 0x00, // # #
949 0x88, 0x00, // # #
950 0x70, 0x00, // ###
951 0x88, 0x00, // # #
952 0x88, 0x00, // # #
953 0x88, 0x00, // # #
954 0x70, 0x00, // ###
955 0x00, 0x00, //
956 0x00, 0x00, //
957 0x00, 0x00, //
958
959 // @600 '9' (11 pixels wide)
960 0x00, 0x00, //
961 0x70, 0x00, // ###
962 0x88, 0x00, // # #
963 0x88, 0x00, // # #
964 0x88, 0x00, // # #
965 0xF0, 0x00, // ####
966 0x40, 0x00, // #
967 0x20, 0x00, // #
968 0x18, 0x00, // ##
969 0x00, 0x00, //
970 0x00, 0x00, //
971 0x00, 0x00, //
972
973 // @624 ':' (11 pixels wide)
974 0x00, 0x00, //
975 0x00, 0x00, //
976 0x00, 0x00, //
977 0x20, 0x00, // #
978 0x00, 0x00, //
979 0x00, 0x00, //
980 0x00, 0x00, //
981 0x20, 0x00, // #
982 0x00, 0x00, //
983 0x00, 0x00, //
984 0x00, 0x00, //
985 0x00, 0x00, //
986
987 // @648 ';' (11 pixels wide)
988 0x00, 0x00, //
989 0x00, 0x00, //
990 0x00, 0x00, //
991 0x20, 0x00, // #
992 0x00, 0x00, //
993 0x00, 0x00, //
994 0x00, 0x00, //
995 0x00, 0x00, //
996 0x20, 0x00, // #
997 0x10, 0x00, // #
998 0x00, 0x00, //
999 0x00, 0x00, //
1000
1001 // @672 '<' (11 pixels wide)
1002 0x00, 0x00, //
1003 0x00, 0x00, //
1004 0x00, 0x00, //
1005 0x20, 0x00, // #
1006 0x10, 0x00, // #
1007 0x08, 0x00, // #
1008 0x10, 0x00, // #
1009 0x20, 0x00, // #
1010 0x00, 0x00, //
1011 0x00, 0x00, //
1012 0x00, 0x00, //
1013 0x00, 0x00, //
1014
1015 // @696 '=' (11 pixels wide)
1016 0x00, 0x00, //
1017 0x00, 0x00, //
1018 0x00, 0x00, //
1019 0xF0, 0x00, // ####
1020 0x00, 0x00, //
1021 0x00, 0x00, //
1022 0xF0, 0x00, // ####
1023 0x00, 0x00, //
1024 0x00, 0x00, //
1025 0x00, 0x00, //
1026 0x00, 0x00, //
1027 0x00, 0x00, //
1028
1029 // @720 '>' (11 pixels wide)
1030 0x00, 0x00, //
1031 0x00, 0x00, //
1032 0x00, 0x00, //
1033 0x08, 0x00, // #
1034 0x10, 0x00, // #
1035 0x20, 0x00, // #
1036 0x10, 0x00, // #
1037 0x08, 0x00, // #
1038 0x00, 0x00, //
1039 0x00, 0x00, //
1040 0x00, 0x00, //
1041 0x00, 0x00, //
1042
1043 // @744 '?' (11 pixels wide)
1044 0x00, 0x00, //
1045 0x78, 0x00, // ####
1046 0x80, 0x00, // #
1047 0x80, 0x00, // #
1048 0x40, 0x00, // #
1049 0x20, 0x00, // #
1050 0x10, 0x00, // #
1051 0x00, 0x00, //
1052 0x10, 0x00, // #
1053 0x00, 0x00, //
1054 0x00, 0x00, //
1055 0x00, 0x00, //
1056
1057 // @768 '@' (11 pixels wide)
1058 0xF8, 0x00, // #####
1059 0x04, 0x01, // # #
1060 0x72, 0x02, // # ### #
1061 0xDA, 0x02, // # ## ## #
1062 0xCA, 0x02, // # # ## #
1063 0xB2, 0x01, // # ## ##
1064 0x02, 0x00, // #
1065 0x04, 0x01, // # #
1066 0xF8, 0x00, // #####
1067 0x00, 0x00, //
1068 0x00, 0x00, //
1069 0x00, 0x00, //
1070
1071 // @792 'A' (11 pixels wide)
1072 0x00, 0x00, //
1073 0x20, 0x00, // #
1074 0x20, 0x00, // #
1075 0x50, 0x00, // # #
1076 0x48, 0x00, // # #
1077 0x78, 0x00, // ####
1078 0x44, 0x00, // # #
1079 0x84, 0x00, // # #
1080 0x82, 0x00, // # #
1081 0x00, 0x00, //
1082 0x00, 0x00, //
1083 0x00, 0x00, //
1084
1085 // @816 'B' (11 pixels wide)
1086 0x00, 0x00, //
1087 0x78, 0x00, // ####
1088 0x88, 0x00, // # #
1089 0x88, 0x00, // # #
1090 0x48, 0x00, // # #
1091 0x78, 0x00, // ####
1092 0x88, 0x00, // # #
1093 0x88, 0x00, // # #
1094 0x78, 0x00, // ####
1095 0x00, 0x00, //
1096 0x00, 0x00, //
1097 0x00, 0x00, //
1098
1099 // @840 'C' (11 pixels wide)
1100 0x00, 0x00, //
1101 0xE0, 0x00, // ###
1102 0x90, 0x00, // # #
1103 0x08, 0x00, // #
1104 0x04, 0x00, // #
1105 0x04, 0x00, // #
1106 0x04, 0x00, // #
1107 0x84, 0x00, // # #
1108 0x78, 0x00, // ####
1109 0x00, 0x00, //
1110 0x00, 0x00, //
1111 0x00, 0x00, //
1112
1113 // @864 'D' (11 pixels wide)
1114 0x00, 0x00, //
1115 0x0C, 0x00, // ##
1116 0x34, 0x00, // # ##
1117 0x44, 0x00, // # #
1118 0x84, 0x00, // # #
1119 0x84, 0x00, // # #
1120 0x84, 0x00, // # #
1121 0x44, 0x00, // # #
1122 0x3C, 0x00, // ####
1123 0x00, 0x00, //
1124 0x00, 0x00, //
1125 0x00, 0x00, //
1126
1127 // @888 'E' (11 pixels wide)
1128 0x00, 0x00, //
1129 0xF8, 0x00, // #####
1130 0x08, 0x00, // #
1131 0x08, 0x00, // #
1132 0xF8, 0x00, // #####
1133 0x08, 0x00, // #
1134 0x08, 0x00, // #
1135 0x08, 0x00, // #
1136 0xF8, 0x00, // #####
1137 0x00, 0x00, //
1138 0x00, 0x00, //
1139 0x00, 0x00, //
1140
1141 // @912 'F' (11 pixels wide)
1142 0x00, 0x00, //
1143 0xF0, 0x01, // #####
1144 0x10, 0x00, // #
1145 0x10, 0x00, // #
1146 0xF0, 0x00, // ####
1147 0x10, 0x00, // #
1148 0x10, 0x00, // #
1149 0x10, 0x00, // #
1150 0x10, 0x00, // #
1151 0x00, 0x00, //
1152 0x00, 0x00, //
1153 0x00, 0x00, //
1154
1155 // @936 'G' (11 pixels wide)
1156 0x00, 0x00, //
1157 0xE0, 0x00, // ###
1158 0x10, 0x01, // # #
1159 0x08, 0x00, // #
1160 0x04, 0x00, // #
1161 0xF4, 0x01, // # #####
1162 0x04, 0x01, // # #
1163 0x84, 0x00, // # #
1164 0x78, 0x00, // ####
1165 0x00, 0x00, //
1166 0x00, 0x00, //
1167 0x00, 0x00, //
1168
1169 // @960 'H' (11 pixels wide)
1170 0x00, 0x00, //
1171 0x08, 0x01, // # #
1172 0x08, 0x01, // # #
1173 0x08, 0x01, // # #
1174 0xF8, 0x01, // ######
1175 0x08, 0x01, // # #
1176 0x08, 0x01, // # #
1177 0x08, 0x01, // # #
1178 0x08, 0x01, // # #
1179 0x00, 0x00, //
1180 0x00, 0x00, //
1181 0x00, 0x00, //
1182
1183 // @984 'I' (11 pixels wide)
1184 0x00, 0x00, //
1185 0x7C, 0x00, // #####
1186 0x10, 0x00, // #
1187 0x10, 0x00, // #
1188 0x10, 0x00, // #
1189 0x10, 0x00, // #
1190 0x10, 0x00, // #
1191 0x10, 0x00, // #
1192 0x7C, 0x00, // #####
1193 0x00, 0x00, //
1194 0x00, 0x00, //
1195 0x00, 0x00, //
1196
1197 // @1008 'J' (11 pixels wide)
1198 0x00, 0x00, //
1199 0xF0, 0x01, // #####
1200 0x40, 0x00, // #
1201 0x40, 0x00, // #
1202 0x40, 0x00, // #
1203 0x40, 0x00, // #
1204 0x44, 0x00, // # #
1205 0x44, 0x00, // # #
1206 0x78, 0x00, // ####
1207 0x00, 0x00, //
1208 0x00, 0x00, //
1209 0x00, 0x00, //
1210
1211 // @1032 'K' (11 pixels wide)
1212 0x00, 0x00, //
1213 0x88, 0x00, // # #
1214 0x48, 0x00, // # #
1215 0x28, 0x00, // # #
1216 0x18, 0x00, // ##
1217 0x18, 0x00, // ##
1218 0x28, 0x00, // # #
1219 0x48, 0x00, // # #
1220 0x88, 0x00, // # #
1221 0x00, 0x00, //
1222 0x00, 0x00, //
1223 0x00, 0x00, //
1224
1225 // @1056 'L' (11 pixels wide)
1226 0x00, 0x00, //
1227 0x08, 0x00, // #
1228 0x08, 0x00, // #
1229 0x08, 0x00, // #
1230 0x08, 0x00, // #
1231 0x08, 0x00, // #
1232 0x08, 0x00, // #
1233 0x08, 0x00, // #
1234 0x78, 0x00, // ####
1235 0x00, 0x00, //
1236 0x00, 0x00, //
1237 0x00, 0x00, //
1238
1239 // @1080 'M' (11 pixels wide)
1240 0x00, 0x00, //
1241 0x44, 0x00, // # #
1242 0x44, 0x00, // # #
1243 0x44, 0x00, // # #
1244 0xAA, 0x00, // # # # #
1245 0xAA, 0x00, // # # # #
1246 0xAA, 0x00, // # # # #
1247 0x11, 0x01, // # # #
1248 0x11, 0x01, // # # #
1249 0x00, 0x00, //
1250 0x00, 0x00, //
1251 0x00, 0x00, //
1252
1253 // @1104 'N' (11 pixels wide)
1254 0x00, 0x00, //
1255 0x04, 0x01, // # #
1256 0x0C, 0x01, // ## #
1257 0x14, 0x01, // # # #
1258 0x14, 0x01, // # # #
1259 0x24, 0x01, // # # #
1260 0x44, 0x01, // # # #
1261 0x84, 0x01, // # ##
1262 0x04, 0x01, // # #
1263 0x00, 0x00, //
1264 0x00, 0x00, //
1265 0x00, 0x00, //
1266
1267 // @1128 'O' (11 pixels wide)
1268 0x00, 0x00, //
1269 0xF0, 0x00, // ####
1270 0x08, 0x01, // # #
1271 0x04, 0x01, // # #
1272 0x04, 0x01, // # #
1273 0x04, 0x01, // # #
1274 0x04, 0x01, // # #
1275 0x84, 0x00, // # #
1276 0x78, 0x00, // ####
1277 0x00, 0x00, //
1278 0x00, 0x00, //
1279 0x00, 0x00, //
1280
1281 // @1152 'P' (11 pixels wide)
1282 0x00, 0x00, //
1283 0x70, 0x00, // ###
1284 0x90, 0x00, // # #
1285 0x90, 0x00, // # #
1286 0x90, 0x00, // # #
1287 0x90, 0x00, // # #
1288 0x70, 0x00, // ###
1289 0x10, 0x00, // #
1290 0x10, 0x00, // #
1291 0x00, 0x00, //
1292 0x00, 0x00, //
1293 0x00, 0x00, //
1294
1295 // @1176 'Q' (11 pixels wide)
1296 0x00, 0x00, //
1297 0xF0, 0x00, // ####
1298 0x08, 0x01, // # #
1299 0x04, 0x02, // # #
1300 0x04, 0x02, // # #
1301 0x04, 0x02, // # #
1302 0x24, 0x02, // # # #
1303 0x48, 0x01, // # # #
1304 0xF0, 0x01, // #####
1305 0x00, 0x03, // ##
1306 0x00, 0x02, // #
1307 0x00, 0x00, //
1308
1309 // @1200 'R' (11 pixels wide)
1310 0x00, 0x00, //
1311 0x38, 0x00, // ###
1312 0x48, 0x00, // # #
1313 0x48, 0x00, // # #
1314 0x48, 0x00, // # #
1315 0x38, 0x00, // ###
1316 0x28, 0x00, // # #
1317 0x48, 0x00, // # #
1318 0x88, 0x00, // # #
1319 0x00, 0x00, //
1320 0x00, 0x00, //
1321 0x00, 0x00, //
1322
1323 // @1224 'S' (11 pixels wide)
1324 0x00, 0x00, //
1325 0xE0, 0x01, // ####
1326 0x10, 0x00, // #
1327 0x10, 0x00, // #
1328 0xE0, 0x00, // ###
1329 0x00, 0x01, // #
1330 0x00, 0x01, // #
1331 0x08, 0x01, // # #
1332 0xF0, 0x00, // ####
1333 0x00, 0x00, //
1334 0x00, 0x00, //
1335 0x00, 0x00, //
1336
1337 // @1248 'T' (11 pixels wide)
1338 0x00, 0x00, //
1339 0xFC, 0x01, // #######
1340 0x20, 0x00, // #
1341 0x20, 0x00, // #
1342 0x20, 0x00, // #
1343 0x20, 0x00, // #
1344 0x20, 0x00, // #
1345 0x20, 0x00, // #
1346 0x20, 0x00, // #
1347 0x00, 0x00, //
1348 0x00, 0x00, //
1349 0x00, 0x00, //
1350
1351 // @1272 'U' (11 pixels wide)
1352 0x00, 0x00, //
1353 0x84, 0x00, // # #
1354 0x84, 0x00, // # #
1355 0x84, 0x00, // # #
1356 0x84, 0x00, // # #
1357 0x84, 0x00, // # #
1358 0x84, 0x00, // # #
1359 0x84, 0x00, // # #
1360 0x78, 0x00, // ####
1361 0x00, 0x00, //
1362 0x00, 0x00, //
1363 0x00, 0x00, //
1364
1365 // @1296 'V' (11 pixels wide)
1366 0x00, 0x00, //
1367 0x88, 0x00, // # #
1368 0x88, 0x00, // # #
1369 0x88, 0x00, // # #
1370 0x50, 0x00, // # #
1371 0x50, 0x00, // # #
1372 0x50, 0x00, // # #
1373 0x50, 0x00, // # #
1374 0x20, 0x00, // #
1375 0x00, 0x00, //
1376 0x00, 0x00, //
1377 0x00, 0x00, //
1378
1379 // @1320 'W' (11 pixels wide)
1380 0x00, 0x00, //
1381 0x21, 0x04, // # # #
1382 0x21, 0x04, // # # #
1383 0x52, 0x02, // # # # #
1384 0x52, 0x02, // # # # #
1385 0x4A, 0x01, // # # # #
1386 0x4A, 0x01, // # # # #
1387 0x44, 0x01, // # # #
1388 0x84, 0x00, // # #
1389 0x00, 0x00, //
1390 0x00, 0x00, //
1391 0x00, 0x00, //
1392
1393 // @1344 'X' (11 pixels wide)
1394 0x00, 0x00, //
1395 0x82, 0x00, // # #
1396 0x44, 0x00, // # #
1397 0x28, 0x00, // # #
1398 0x10, 0x00, // #
1399 0x10, 0x00, // #
1400 0x28, 0x00, // # #
1401 0x44, 0x00, // # #
1402 0x82, 0x00, // # #
1403 0x00, 0x00, //
1404 0x00, 0x00, //
1405 0x00, 0x00, //
1406
1407 // @1368 'Y' (11 pixels wide)
1408 0x00, 0x00, //
1409 0x84, 0x00, // # #
1410 0x48, 0x00, // # #
1411 0x48, 0x00, // # #
1412 0x50, 0x00, // # #
1413 0x30, 0x00, // ##
1414 0x20, 0x00, // #
1415 0x10, 0x00, // #
1416 0x10, 0x00, // #
1417 0x00, 0x00, //
1418 0x00, 0x00, //
1419 0x00, 0x00, //
1420
1421 // @1392 'Z' (11 pixels wide)
1422 0x00, 0x00, //
1423 0xFC, 0x01, // #######
1424 0x80, 0x00, // #
1425 0x40, 0x00, // #
1426 0x20, 0x00, // #
1427 0x10, 0x00, // #
1428 0x08, 0x00, // #
1429 0x04, 0x00, // #
1430 0xFC, 0x01, // #######
1431 0x00, 0x00, //
1432 0x00, 0x00, //
1433 0x00, 0x00, //
1434
1435 // @1416 '[' (11 pixels wide)
1436 0x70, 0x00, // ###
1437 0x10, 0x00, // #
1438 0x10, 0x00, // #
1439 0x10, 0x00, // #
1440 0x10, 0x00, // #
1441 0x10, 0x00, // #
1442 0x10, 0x00, // #
1443 0x10, 0x00, // #
1444 0x10, 0x00, // #
1445 0x10, 0x00, // #
1446 0x70, 0x00, // ###
1447 0x00, 0x00, //
1448
1449 // @1440 '\' (11 pixels wide)
1450 0x00, 0x00, //
1451 0x08, 0x00, // #
1452 0x08, 0x00, // #
1453 0x10, 0x00, // #
1454 0x10, 0x00, // #
1455 0x20, 0x00, // #
1456 0x20, 0x00, // #
1457 0x20, 0x00, // #
1458 0x40, 0x00, // #
1459 0x40, 0x00, // #
1460 0x00, 0x00, //
1461 0x00, 0x00, //
1462
1463 // @1464 ']' (11 pixels wide)
1464 0x38, 0x00, // ###
1465 0x20, 0x00, // #
1466 0x20, 0x00, // #
1467 0x20, 0x00, // #
1468 0x20, 0x00, // #
1469 0x20, 0x00, // #
1470 0x20, 0x00, // #
1471 0x20, 0x00, // #
1472 0x20, 0x00, // #
1473 0x20, 0x00, // #
1474 0x38, 0x00, // ###
1475 0x00, 0x00, //
1476
1477 // @1488 '^' (11 pixels wide)
1478 0x30, 0x00, // ##
1479 0x30, 0x00, // ##
1480 0x48, 0x00, // # #
1481 0x00, 0x00, //
1482 0x00, 0x00, //
1483 0x00, 0x00, //
1484 0x00, 0x00, //
1485 0x00, 0x00, //
1486 0x00, 0x00, //
1487 0x00, 0x00, //
1488 0x00, 0x00, //
1489 0x00, 0x00, //
1490
1491 // @1512 '_' (11 pixels wide)
1492 0x00, 0x00, //
1493 0x00, 0x00, //
1494 0x00, 0x00, //
1495 0x00, 0x00, //
1496 0x00, 0x00, //
1497 0x00, 0x00, //
1498 0x00, 0x00, //
1499 0x00, 0x00, //
1500 0x00, 0x00, //
1501 0x00, 0x00, //
1502 0xFC, 0x01, // #######
1503 0x00, 0x00, //
1504
1505 // @1536 '`' (11 pixels wide)
1506 0x04, 0x00, // #
1507 0x08, 0x00, // #
1508 0x00, 0x00, //
1509 0x00, 0x00, //
1510 0x00, 0x00, //
1511 0x00, 0x00, //
1512 0x00, 0x00, //
1513 0x00, 0x00, //
1514 0x00, 0x00, //
1515 0x00, 0x00, //
1516 0x00, 0x00, //
1517 0x00, 0x00, //
1518
1519 // @1560 'a' (11 pixels wide)
1520 0x00, 0x00, //
1521 0x00, 0x00, //
1522 0x00, 0x00, //
1523 0xE0, 0x00, // ###
1524 0x90, 0x00, // # #
1525 0x88, 0x00, // # #
1526 0x88, 0x00, // # #
1527 0x88, 0x00, // # #
1528 0x70, 0x01, // ### #
1529 0x00, 0x00, //
1530 0x00, 0x00, //
1531 0x00, 0x00, //
1532
1533 // @1584 'b' (11 pixels wide)
1534 0x08, 0x00, // #
1535 0x08, 0x00, // #
1536 0x08, 0x00, // #
1537 0x78, 0x00, // ####
1538 0x88, 0x00, // # #
1539 0x88, 0x00, // # #
1540 0x88, 0x00, // # #
1541 0x88, 0x00, // # #
1542 0x78, 0x00, // ####
1543 0x00, 0x00, //
1544 0x00, 0x00, //
1545 0x00, 0x00, //
1546
1547 // @1608 'c' (11 pixels wide)
1548 0x00, 0x00, //
1549 0x00, 0x00, //
1550 0x00, 0x00, //
1551 0x60, 0x00, // ##
1552 0x90, 0x00, // # #
1553 0x08, 0x00, // #
1554 0x08, 0x00, // #
1555 0x88, 0x00, // # #
1556 0x70, 0x00, // ###
1557 0x00, 0x00, //
1558 0x00, 0x00, //
1559 0x00, 0x00, //
1560
1561 // @1632 'd' (11 pixels wide)
1562 0x80, 0x00, // #
1563 0x80, 0x00, // #
1564 0x80, 0x00, // #
1565 0xF0, 0x00, // ####
1566 0x88, 0x00, // # #
1567 0x88, 0x00, // # #
1568 0x88, 0x00, // # #
1569 0x88, 0x00, // # #
1570 0xF0, 0x00, // ####
1571 0x00, 0x00, //
1572 0x00, 0x00, //
1573 0x00, 0x00, //
1574
1575 // @1656 'e' (11 pixels wide)
1576 0x00, 0x00, //
1577 0x00, 0x00, //
1578 0x00, 0x00, //
1579 0x38, 0x00, // ###
1580 0x44, 0x00, // # #
1581 0x24, 0x00, // # #
1582 0x1C, 0x00, // ###
1583 0x44, 0x00, // # #
1584 0x38, 0x00, // ###
1585 0x00, 0x00, //
1586 0x00, 0x00, //
1587 0x00, 0x00, //
1588
1589 // @1680 'f' (11 pixels wide)
1590 0xC0, 0x00, // ##
1591 0x20, 0x00, // #
1592 0x20, 0x00, // #
1593 0xF8, 0x00, // #####
1594 0x20, 0x00, // #
1595 0x20, 0x00, // #
1596 0x20, 0x00, // #
1597 0x20, 0x00, // #
1598 0x20, 0x00, // #
1599 0x00, 0x00, //
1600 0x00, 0x00, //
1601 0x00, 0x00, //
1602
1603 // @1704 'g' (11 pixels wide)
1604 0x00, 0x00, //
1605 0x00, 0x00, //
1606 0x00, 0x00, //
1607 0x30, 0x00, // ##
1608 0x48, 0x00, // # #
1609 0x44, 0x00, // # #
1610 0x44, 0x00, // # #
1611 0x44, 0x00, // # #
1612 0x78, 0x00, // ####
1613 0x40, 0x00, // #
1614 0x20, 0x00, // #
1615 0x1C, 0x00, // ###
1616
1617 // @1728 'h' (11 pixels wide)
1618 0x08, 0x00, // #
1619 0x08, 0x00, // #
1620 0x08, 0x00, // #
1621 0x68, 0x00, // # ##
1622 0x98, 0x00, // ## #
1623 0x88, 0x00, // # #
1624 0x88, 0x00, // # #
1625 0x88, 0x00, // # #
1626 0x88, 0x00, // # #
1627 0x00, 0x00, //
1628 0x00, 0x00, //
1629 0x00, 0x00, //
1630
1631 // @1752 'i' (11 pixels wide)
1632 0x00, 0x00, //
1633 0x20, 0x00, // #
1634 0x00, 0x00, //
1635 0x20, 0x00, // #
1636 0x20, 0x00, // #
1637 0x20, 0x00, // #
1638 0x20, 0x00, // #
1639 0x20, 0x00, // #
1640 0x20, 0x00, // #
1641 0x00, 0x00, //
1642 0x00, 0x00, //
1643 0x00, 0x00, //
1644
1645 // @1776 'j' (11 pixels wide)
1646 0x00, 0x00, //
1647 0x10, 0x00, // #
1648 0x00, 0x00, //
1649 0x10, 0x00, // #
1650 0x10, 0x00, // #
1651 0x10, 0x00, // #
1652 0x10, 0x00, // #
1653 0x10, 0x00, // #
1654 0x10, 0x00, // #
1655 0x10, 0x00, // #
1656 0x12, 0x00, // # #
1657 0x0C, 0x00, // ##
1658
1659 // @1800 'k' (11 pixels wide)
1660 0x04, 0x00, // #
1661 0x04, 0x00, // #
1662 0x04, 0x00, // #
1663 0x44, 0x00, // # #
1664 0x24, 0x00, // # #
1665 0x14, 0x00, // # #
1666 0x1C, 0x00, // ###
1667 0x24, 0x00, // # #
1668 0x44, 0x00, // # #
1669 0x00, 0x00, //
1670 0x00, 0x00, //
1671 0x00, 0x00, //
1672
1673 // @1824 'l' (11 pixels wide)
1674 0x20, 0x00, // #
1675 0x20, 0x00, // #
1676 0x20, 0x00, // #
1677 0x20, 0x00, // #
1678 0x20, 0x00, // #
1679 0x20, 0x00, // #
1680 0x20, 0x00, // #
1681 0x20, 0x00, // #
1682 0x20, 0x00, // #
1683 0x00, 0x00, //
1684 0x00, 0x00, //
1685 0x00, 0x00, //
1686
1687 // @1848 'm' (11 pixels wide)
1688 0x00, 0x00, //
1689 0x00, 0x00, //
1690 0x00, 0x00, //
1691 0x94, 0x00, // # # #
1692 0x6C, 0x01, // ## ## #
1693 0x24, 0x01, // # # #
1694 0x24, 0x01, // # # #
1695 0x24, 0x01, // # # #
1696 0x24, 0x01, // # # #
1697 0x00, 0x00, //
1698 0x00, 0x00, //
1699 0x00, 0x00, //
1700
1701 // @1872 'n' (11 pixels wide)
1702 0x00, 0x00, //
1703 0x00, 0x00, //
1704 0x00, 0x00, //
1705 0x68, 0x00, // # ##
1706 0x98, 0x00, // ## #
1707 0x88, 0x00, // # #
1708 0x88, 0x00, // # #
1709 0x88, 0x00, // # #
1710 0x88, 0x00, // # #
1711 0x00, 0x00, //
1712 0x00, 0x00, //
1713 0x00, 0x00, //
1714
1715 // @1896 'o' (11 pixels wide)
1716 0x00, 0x00, //
1717 0x00, 0x00, //
1718 0x00, 0x00, //
1719 0x70, 0x00, // ###
1720 0x88, 0x00, // # #
1721 0x88, 0x00, // # #
1722 0x88, 0x00, // # #
1723 0x88, 0x00, // # #
1724 0x70, 0x00, // ###
1725 0x00, 0x00, //
1726 0x00, 0x00, //
1727 0x00, 0x00, //
1728
1729 // @1920 'p' (11 pixels wide)
1730 0x00, 0x00, //
1731 0x00, 0x00, //
1732 0x00, 0x00, //
1733 0x3C, 0x00, // ####
1734 0x44, 0x00, // # #
1735 0x44, 0x00, // # #
1736 0x44, 0x00, // # #
1737 0x44, 0x00, // # #
1738 0x3C, 0x00, // ####
1739 0x04, 0x00, // #
1740 0x04, 0x00, // #
1741 0x04, 0x00, // #
1742
1743 // @1944 'q' (11 pixels wide)
1744 0x00, 0x00, //
1745 0x00, 0x00, //
1746 0x00, 0x00, //
1747 0xE0, 0x00, // ###
1748 0x90, 0x00, // # #
1749 0x88, 0x00, // # #
1750 0x88, 0x00, // # #
1751 0x88, 0x00, // # #
1752 0xF0, 0x00, // ####
1753 0x80, 0x00, // #
1754 0x80, 0x00, // #
1755 0x80, 0x00, // #
1756
1757 // @1968 'r' (11 pixels wide)
1758 0x00, 0x00, //
1759 0x00, 0x00, //
1760 0x00, 0x00, //
1761 0x70, 0x00, // ###
1762 0x50, 0x00, // # #
1763 0x10, 0x00, // #
1764 0x10, 0x00, // #
1765 0x10, 0x00, // #
1766 0x10, 0x00, // #
1767 0x00, 0x00, //
1768 0x00, 0x00, //
1769 0x00, 0x00, //
1770
1771 // @1992 's' (11 pixels wide)
1772 0x00, 0x00, //
1773 0x00, 0x00, //
1774 0x00, 0x00, //
1775 0x70, 0x00, // ###
1776 0x08, 0x00, // #
1777 0x10, 0x00, // #
1778 0x20, 0x00, // #
1779 0x40, 0x00, // #
1780 0x38, 0x00, // ###
1781 0x00, 0x00, //
1782 0x00, 0x00, //
1783 0x00, 0x00, //
1784
1785 // @2016 't' (11 pixels wide)
1786 0x00, 0x00, //
1787 0x10, 0x00, // #
1788 0x10, 0x00, // #
1789 0x38, 0x00, // ###
1790 0x10, 0x00, // #
1791 0x10, 0x00, // #
1792 0x10, 0x00, // #
1793 0x10, 0x00, // #
1794 0x10, 0x00, // #
1795 0x00, 0x00, //
1796 0x00, 0x00, //
1797 0x00, 0x00, //
1798
1799 // @2040 'u' (11 pixels wide)
1800 0x00, 0x00, //
1801 0x00, 0x00, //
1802 0x00, 0x00, //
1803 0x88, 0x00, // # #
1804 0x88, 0x00, // # #
1805 0x88, 0x00, // # #
1806 0x88, 0x00, // # #
1807 0x88, 0x00, // # #
1808 0xF0, 0x00, // ####
1809 0x00, 0x00, //
1810 0x00, 0x00, //
1811 0x00, 0x00, //
1812
1813 // @2064 'v' (11 pixels wide)
1814 0x00, 0x00, //
1815 0x00, 0x00, //
1816 0x00, 0x00, //
1817 0x88, 0x00, // # #
1818 0x88, 0x00, // # #
1819 0x50, 0x00, // # #
1820 0x50, 0x00, // # #
1821 0x20, 0x00, // #
1822 0x20, 0x00, // #
1823 0x00, 0x00, //
1824 0x00, 0x00, //
1825 0x00, 0x00, //
1826
1827 // @2088 'w' (11 pixels wide)
1828 0x00, 0x00, //
1829 0x00, 0x00, //
1830 0x00, 0x00, //
1831 0x24, 0x01, // # # #
1832 0x24, 0x01, // # # #
1833 0xB4, 0x00, // # ## #
1834 0xB4, 0x00, // # ## #
1835 0xA8, 0x00, // # # #
1836 0x48, 0x00, // # #
1837 0x00, 0x00, //
1838 0x00, 0x00, //
1839 0x00, 0x00, //
1840
1841 // @2112 'x' (11 pixels wide)
1842 0x00, 0x00, //
1843 0x00, 0x00, //
1844 0x00, 0x00, //
1845 0x84, 0x00, // # #
1846 0x48, 0x00, // # #
1847 0x30, 0x00, // ##
1848 0x30, 0x00, // ##
1849 0x48, 0x00, // # #
1850 0x84, 0x00, // # #
1851 0x00, 0x00, //
1852 0x00, 0x00, //
1853 0x00, 0x00, //
1854
1855 // @2136 'y' (11 pixels wide)
1856 0x00, 0x00, //
1857 0x00, 0x00, //
1858 0x00, 0x00, //
1859 0x08, 0x01, // # #
1860 0x88, 0x00, // # #
1861 0x90, 0x00, // # #
1862 0x50, 0x00, // # #
1863 0x60, 0x00, // ##
1864 0x20, 0x00, // #
1865 0x20, 0x00, // #
1866 0x10, 0x00, // #
1867 0x10, 0x00, // #
1868
1869 // @2160 'z' (11 pixels wide)
1870 0x00, 0x00, //
1871 0x00, 0x00, //
1872 0x00, 0x00, //
1873 0x78, 0x00, // ####
1874 0x40, 0x00, // #
1875 0x20, 0x00, // #
1876 0x10, 0x00, // #
1877 0x08, 0x00, // #
1878 0x78, 0x00, // ####
1879 0x00, 0x00, //
1880 0x00, 0x00, //
1881 0x00, 0x00, //
1882
1883 // @2184 '{' (11 pixels wide)
1884 0x60, 0x00, // ##
1885 0x10, 0x00, // #
1886 0x10, 0x00, // #
1887 0x10, 0x00, // #
1888 0x10, 0x00, // #
1889 0x18, 0x00, // ##
1890 0x10, 0x00, // #
1891 0x10, 0x00, // #
1892 0x10, 0x00, // #
1893 0x10, 0x00, // #
1894 0x60, 0x00, // ##
1895 0x00, 0x00, //
1896
1897 // @2208 '|' (11 pixels wide)
1898 0x20, 0x00, // #
1899 0x20, 0x00, // #
1900 0x20, 0x00, // #
1901 0x20, 0x00, // #
1902 0x20, 0x00, // #
1903 0x20, 0x00, // #
1904 0x20, 0x00, // #
1905 0x20, 0x00, // #
1906 0x20, 0x00, // #
1907 0x20, 0x00, // #
1908 0x20, 0x00, // #
1909 0x00, 0x00, //
1910
1911 // @2232 '}' (11 pixels wide)
1912 0x18, 0x00, // ##
1913 0x20, 0x00, // #
1914 0x20, 0x00, // #
1915 0x20, 0x00, // #
1916 0x20, 0x00, // #
1917 0x60, 0x00, // ##
1918 0x20, 0x00, // #
1919 0x20, 0x00, // #
1920 0x20, 0x00, // #
1921 0x20, 0x00, // #
1922 0x18, 0x00, // ##
1923 0x00, 0x00, //
1924
1925 // @2256 '~' (11 pixels wide)
1926 0x00, 0x00, //
1927 0x00, 0x00, //
1928 0x00, 0x00, //
1929 0x98, 0x00, // ## #
1930 0x9C, 0x00, // ### #
1931 0x64, 0x00, // # ##
1932 0x00, 0x00, //
1933 0x00, 0x00, //
1934 0x00, 0x00, //
1935 0x00, 0x00, //
1936 0x00, 0x00, //
1937 0x00, 0x00, //
1938 };
1939
1940
1941
605 sFONT ComicSansMS_18 = {
1942 sFONT ComicSansMS_18 = {
606 .table = ComicSansMS_18_TBL,
1943 .table = ComicSansMS_18_TBL,
607 .Width = 16,
1944 .Width = 16,
608 .Height = 18,
1945 .Height = 18,
609 .bytesPerLine = 2
1946 .bytesPerLine = 2
610 };
1947 };
611
1948
612 sFONT ComicSansMS_24 = {
1949 sFONT ComicSansMS_24 = {
613 .table = ComicSansMS_24_TBL,
1950 .table = ComicSansMS_24_TBL,
614 .Width = 19,
1951 .Width = 19,
615 .Height = 24,
1952 .Height = 24,
616 .bytesPerLine = 3
1953 .bytesPerLine = 3
617 };
1954 };
618
1955
1956 sFONT ComicSansMS_8 = {
1957 .table = comicSansMS_8ptBitmaps,
1958 .Width = 11,
1959 .Height = 12,
1960 .bytesPerLine = 2
1961 };
1962
1963
1964
619 const uint8_t Monk_TBL[] = {
1965 const uint8_t Monk_TBL[] = {
620
1966
621 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xAF,0xFB,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xDF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xEF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xDF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xAF,0xFA,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0xFB,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xE0,0xDF,0xFE,0x03,0x00,0x00,0x00,0x00,0x80,0x6F,0xFD,0x01,0x00,0x00,0x00,0x00,0xA0,0xFF,0xDE,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xBF,0xF5,0x03,0x00,0x00,0x00,0x00,0x80,0xFF,0xFD,0x03,0x00,0x00,0x00,0x00,0xC0,0x7F,0xFD,0x01,0x00,0x00,0x00,0x00,0x80,0xB5,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0x5F,0xDB,0x01,0x00,0x00,0x00,0x00,0xC0,0xED,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xE0,0xAA,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0xBF,0xFA,0x01,0x00,0x00,0x00,0x00,0xE0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x60,0xBE,0xFB,0x01,0x00,0x00,0x00,0x00,0xF0,0xBA,0xFF,0x03,0x00,0x00,0x00,0x00,0x70,0xBC,0xEE,0x00,0x00,0x00,0x00,0x00,0xF0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x7C,0x75,0xBD,0x00,0x00,0x00,0x00,0x00,0xF0,0xAA,0xFF,0x0F,0x00,0x00,0x00,0x00,0x7E,0xF0,0xFE,0x01,0x00,0x00,0x00,0x00,0xE0,0xF5,0xFF,0x0F,0x00,0x00,0x00,0x80,0xFF,0xF0,0xF5,0x07,0x00,0x00,0x00,0x00,0xE0,0xFB,0xFF,0x07,0x00,0x00,0x00,0xE0,0x7F,0xF4,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0xF8,0xFF,0xC8,0xEF,0x3F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x00,0x00,0x00,0xFC,0xFF,0x8A,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xBE,0xFD,0x07,0x00,0x00,0x00,0xFF,0xFF,0x90,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x5F,0xEA,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xA2,0xF7,0xFF,0x01,0x00,0x00,0x00,0xE0,0x3F,0xF8,0x1F,0x00,0x00,0x80,0xFF,0xFF,0x80,0xBF,0xFF,0x03,0x00,0x00,0x00,0xF8,0x1E,0xF8,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xC9,0x5F,0xFF,0x0F,0x00,0x00,0x00,0x3F,0x0E,0xFD,0xFF,0x01,0x00,0xC0,0xFF,0xFF,0x81,0xBF,0xFF,0x0F,0x00,0x00,0xC0,0x9F,0x27,0xFE,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x91,0xBF,0xFF,0x0F,0x00,0x00,0xE0,0x9F,0x0F,0xFE,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0x5F,0xFF,0x0F,0x00,0x00,0xE0,0xCF,0x07,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xC0,0xE7,0x87,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0xBF,0xFF,0x1F,0x00,0x00,0xE0,0xE7,0xC7,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xF3,0xC3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x81,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE1,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xD3,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xFB,0xF3,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x83,0xDF,0xFF,0x3F,0x00,0x00,0xF8,0xF9,0xF1,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xA3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xC3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xD3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xF8,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xFD,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xCB,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFD,0xFC,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFC,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE3,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x78,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xCF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xFF,0xFF,0x1F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x5F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xA3,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x0B,0x0E,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x7F,0x0D,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0B,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xCF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x3F,0x02,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xE1,0xFF,0xFF,0x7F,0x03,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x3F,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xBF,0xBF,0xFF,0xFF,0xFF,0x03,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xDF,0xFF,0xFF,0xFD,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x7E,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xD7,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xEE,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFE,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFE,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xF8,0xFF,0xFF,0xBF,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xFD,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x01,0xFE,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x7F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x3F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x3F,0x00,0xF8,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x1F,0x00,0xF0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x0F,0x00,0xE0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0xC0,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0x80,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x03,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0xFF,0x81,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x01,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0x00,0x00,0x00,0xFF,0x7F,0x00,0xE8,0xFF,0xFF,0x00,0xFF,0xFF,0x0F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFC,0xFF,0x7F,0x00,0xFE,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFE,0xFF,0x3F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xBE,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x01,0x04,0xFC,0x07,0x00,0xC0,0xFF,0x1F,0xC0,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x3C,0x00,0x00,0xF0,0xFF,0x07,0xC0,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xF0,0xDD,0x0E,0x80,0xFF,0x7F,0x00,0x00,0x00,0xFE,0xFF,0x3B,0x00,0x00,0x00,0x00,0x50,0xE0,0x03,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x80,0xFF,0x2E,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x1A,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x55,0x0F,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xD2,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
1967 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xAF,0xFB,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xDF,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xEF,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0xF0,0xFF,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0x00,0x00,0x00,0x00,0x00,0xB0,0xFF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0xF0,0xDF,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0xAF,0xFA,0x00,0x00,0x00,0x00,0x00,0x70,0x7F,0xFB,0x07,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0xE0,0xDF,0xFE,0x03,0x00,0x00,0x00,0x00,0x80,0x6F,0xFD,0x01,0x00,0x00,0x00,0x00,0xA0,0xFF,0xDE,0x01,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xBF,0xF5,0x03,0x00,0x00,0x00,0x00,0x80,0xFF,0xFD,0x03,0x00,0x00,0x00,0x00,0xC0,0x7F,0xFD,0x01,0x00,0x00,0x00,0x00,0x80,0xB5,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0x5F,0xDB,0x01,0x00,0x00,0x00,0x00,0xC0,0xED,0xFF,0x03,0x00,0x00,0x00,0x00,0xC0,0xFF,0xFF,0x01,0x00,0x00,0x00,0x00,0xE0,0xAA,0xFF,0x03,0x00,0x00,0x00,0x00,0x40,0xBF,0xFA,0x01,0x00,0x00,0x00,0x00,0xE0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x60,0xBE,0xFB,0x01,0x00,0x00,0x00,0x00,0xF0,0xBA,0xFF,0x03,0x00,0x00,0x00,0x00,0x70,0xBC,0xEE,0x00,0x00,0x00,0x00,0x00,0xF0,0xF6,0xFF,0x07,0x00,0x00,0x00,0x00,0x7C,0x75,0xBD,0x00,0x00,0x00,0x00,0x00,0xF0,0xAA,0xFF,0x0F,0x00,0x00,0x00,0x00,0x7E,0xF0,0xFE,0x01,0x00,0x00,0x00,0x00,0xE0,0xF5,0xFF,0x0F,0x00,0x00,0x00,0x80,0xFF,0xF0,0xF5,0x07,0x00,0x00,0x00,0x00,0xE0,0xFB,0xFF,0x07,0x00,0x00,0x00,0xE0,0x7F,0xF4,0xFF,0x0F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x03,0x00,0x00,0x00,0xF8,0xFF,0xC8,0xEF,0x3F,0x00,0x00,0x00,0x00,0xE0,0xFF,0xFF,0x07,0x00,0x00,0x00,0xFC,0xFF,0x8A,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0xBE,0xFD,0x07,0x00,0x00,0x00,0xFF,0xFF,0x90,0xFF,0xFF,0x00,0x00,0x00,0x00,0x80,0x5F,0xEA,0x0F,0x00,0x00,0x80,0xFF,0xFF,0xA2,0xF7,0xFF,0x01,0x00,0x00,0x00,0xE0,0x3F,0xF8,0x1F,0x00,0x00,0x80,0xFF,0xFF,0x80,0xBF,0xFF,0x03,0x00,0x00,0x00,0xF8,0x1E,0xF8,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0xC9,0x5F,0xFF,0x0F,0x00,0x00,0x00,0x3F,0x0E,0xFD,0xFF,0x01,0x00,0xC0,0xFF,0xFF,0x81,0xBF,0xFF,0x0F,0x00,0x00,0xC0,0x9F,0x27,0xFE,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x91,0xBF,0xFF,0x0F,0x00,0x00,0xE0,0x9F,0x0F,0xFE,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0x5F,0xFF,0x0F,0x00,0x00,0xE0,0xCF,0x07,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xC0,0xE7,0x87,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xC1,0xBF,0xFF,0x1F,0x00,0x00,0xE0,0xE7,0xC7,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x89,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xF3,0xC3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE3,0xFF,0xFF,0x1F,0x00,0xE0,0xFF,0xFF,0x81,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF3,0xE1,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xD3,0xBF,0xFF,0x1F,0x00,0x00,0xF0,0xFB,0xF3,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0x83,0xDF,0xFF,0x3F,0x00,0x00,0xF8,0xF9,0xF1,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xA3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xF0,0xFF,0xFF,0xC3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xF9,0xF9,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xD3,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xF8,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xFF,0xFF,0x1F,0x00,0x00,0xF8,0xFC,0xFD,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xCB,0xDF,0xFF,0x1F,0x00,0x00,0xF8,0xFD,0xFC,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFC,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xC3,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFE,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0xFE,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE3,0xDF,0xFF,0x0F,0x00,0x00,0xFC,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xD7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xE7,0xDF,0xFF,0x0F,0x00,0x00,0x78,0xFE,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xCF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xDF,0xFF,0x0F,0x00,0x00,0x7C,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xEF,0xFF,0xFF,0x1F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0x3E,0xFF,0xFF,0xFF,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xEF,0xFF,0xFF,0x0F,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0x5F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x1F,0xFF,0xFF,0xFF,0xFF,0x3F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x80,0x9F,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xBF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xA3,0x0F,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0x0B,0x0E,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0x7F,0x0D,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x0B,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xCF,0x03,0x00,0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x1F,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x3F,0x02,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xFF,0xE1,0xFF,0xFF,0x7F,0x03,0x00,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x3F,0xFC,0xFF,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0x00,0xBF,0xBF,0xFF,0xFF,0xFF,0x03,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xDF,0xFF,0xFF,0xFD,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xC0,0xFF,0xFF,0x7E,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xD7,0xFF,0xFF,0x0F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x1F,0x00,0x80,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xE0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xEE,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x00,0xF0,0xFF,0xFF,0xFB,0xFF,0xFF,0x1F,0x00,0xC0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFE,0xFF,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x00,0xF0,0xFF,0xFF,0xFF,0xFE,0xFF,0x3F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x03,0x00,0xF8,0xFF,0xFF,0xFB,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xF8,0xFF,0xFF,0xBF,0xFF,0xFF,0x7F,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0x7F,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x07,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0xFF,0x00,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0x01,0x00,0xFC,0xFF,0xFF,0x03,0xFF,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xFD,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0xFF,0x01,0xFE,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x7F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x3F,0x00,0xFC,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF9,0xFF,0xFF,0x03,0x00,0xFC,0xFF,0x3F,0x00,0xF8,0xFF,0xFF,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x1F,0x00,0xF0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xF1,0xFF,0xFF,0x07,0x00,0xFC,0xFF,0x0F,0x00,0xE0,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0xC0,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x0F,0x00,0x80,0xFF,0x7F,0x00,0xC0,0xFF,0xFF,0xE1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFE,0xFF,0x07,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0xC1,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x03,0x00,0x00,0xFF,0x7F,0x00,0x00,0xFF,0xFF,0x81,0xFF,0xFF,0x07,0x00,0xFF,0xFF,0x01,0x00,0x00,0xFF,0x7F,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x03,0x00,0xFF,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x00,0x80,0xFF,0xFF,0x80,0xFF,0xFF,0x07,0x80,0xFF,0xFF,0x00,0x00,0x00,0xFF,0x7F,0x00,0xE8,0xFF,0xFF,0x00,0xFF,0xFF,0x0F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFC,0xFF,0x7F,0x00,0xFE,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xFE,0xFF,0x3F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x00,0xBE,0xFF,0x1F,0x00,0xC0,0xFF,0x1F,0x80,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x01,0x04,0xFC,0x07,0x00,0xC0,0xFF,0x1F,0xC0,0xFF,0x7F,0x00,0x00,0xC0,0xFF,0xFF,0x1F,0x00,0x3C,0x00,0x00,0xF0,0xFF,0x07,0xC0,0xFF,0x7F,0x00,0x00,0x80,0xFF,0xFF,0x1F,0x00,0x00,0x00,0x00,0xF0,0xDD,0x0E,0x80,0xFF,0x7F,0x00,0x00,0x00,0xFE,0xFF,0x3B,0x00,0x00,0x00,0x00,0x50,0xE0,0x03,0xF0,0xFF,0x7F,0x00,0x00,0x00,0x80,0xFF,0x2E,0x00,0x00,0x00,0x00,0x00,0x40,0x01,0xF8,0xFF,0x3F,0x00,0x00,0x00,0x00,0x1A,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x55,0x0F,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0xD2,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
622 };
1968 };
623
1969
624 sFONT Monk_24 = {
1970 sFONT Monk_24 = {
625 .table = Monk_TBL,
1971 .table = Monk_TBL,
626 .Width = 0x7F,
1972 .Width = 0x7F,
627 .Height = 0x7E,
1973 .Height = 0x7E,
628 .bytesPerLine = 16
1974 .bytesPerLine = 16
629 };
1975 };
630
1976
631
1977
@@ -1,144 +1,186
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2013, Alexis Jeandet
3 -- Copyright (C) 2013, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #include <widget.h>
22 #include <widget.h>
23 #include <terminal.h>
23 #include <terminal.h>
24 #include <stdint.h>
24 #include <stdint.h>
25 #include <stdio.h>
25 #include <stdio.h>
26 #include <gpio.h>
26 #include <gpio.h>
27 #include <core.h>
27 #include <core.h>
28
28
29 int __line__ =0;
30 int __column__=0;
31 int __lineCount__=0;
32 int __columnCount__=0;
33 LCD_t* __LCD__=NULL;
34
29
35 sFONT* __font__;
30 #define CHARXPOS(terminal,charwidth) (((terminal)->column * charwidth) + (terminal)->Xpos)
31 #define CHARYPOS(terminal,charheight) ((terminal)->line * charheight + (terminal)->Ypos+charheight)
36
32
37 int __verticalSpace__=2;
33 streamdevice_ops TERMINAL_OPS=
38 int __horizontalSpace__=0;
34 {
39 int __verticalMargins__=5;
35 .write = &terminal_write,
40 int __horizontalMargins__=5;
36 .read = &terminal_read,
41
37 .setpos= &terminal_setpos,
42 #define CHARXPOS(charwidth) ((__column__*charwidth)+__horizontalMargins__)
38 .close = NULL
43 #define CHARYPOS(charheight) ((__line__*charheight)+__verticalMargins__+charheight)
39 };
44
40
45 #define charwidth (__font__->Width+__horizontalSpace__)
41 int terminal_init(terminal_t* terminal,LCD_t* LCD,sFONT* font,streamdevice* strdev)
46 #define charheight (__font__->Height+__verticalSpace__)
47
48 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev)
49 {
42 {
50 if((LCD!=NULL) && (font!=NULL) && (strdev!=NULL))
43 if((LCD!=NULL) && (font!=NULL) && (strdev!=NULL) && (terminal!=NULL))
51 {
44 {
52 __LCD__=LCD;
45 terminal->LCD=LCD;
53 __font__=font;
46 terminal->font=font;
54 __lineCount__ = (LCD->height - (__verticalMargins__*2))/charheight;
47 terminal->line = 0;
55 __columnCount__ = ((LCD->width - (__horizontalMargins__*2))/charwidth)-1;
48 terminal->column = 0;
49 terminal->horizontalSpace=-2;
50 terminal->verticalSpace=2;
51 int charw=terminal->font->Width + terminal->horizontalSpace;
52 int charh=terminal->font->Height + terminal->verticalSpace;
53 terminal->textColor=0xFFFF;
54 terminal->backgroundColor=0x0000;
55 terminal_setgeometry(terminal,5,5,terminal->LCD->width-(10),terminal->LCD->height-(10));
56
56
57 strdev->_stream = (UHANDLE)__LCD__;
57 strdev->_stream = (UHANDLE)terminal;
58 strdev->write = (write_t)&terminal_write;
58 strdev->ops = &TERMINAL_OPS;
59 strdev->read = (read_t)&terminal_read;
60 strdev->setpos = (setpos_t)&terminal_setpos;
61 strdev->streamPt = 0;
59 strdev->streamPt = 0;
62 __line__ = 0;
60 terminal_clear(terminal);
63 __column__ = 0;
61 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal, charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
64 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
65 return 1;
62 return 1;
66 }
63 }
67 return 0;
64 return 0;
68 }
65 }
69
66
70 void terminal_movecursor(int n)
67 void terminal_setgeometry(terminal_t* terminal,uint16_t Xpos,uint16_t Ypos,uint16_t width,uint16_t height)
71 {
68 {
72 __column__ += n;
69 int charw=terminal->font->Width + terminal->horizontalSpace;
73 if(__column__>__columnCount__)
70 int charh=terminal->font->Height + terminal->verticalSpace;
74 {
71 if(terminal->LCD->height<(Ypos+height))
75 __line__ += (__column__)/__columnCount__;
72 return;
76 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth*(__columnCount__-__column__),charheight,0x0000,0,0x0000);
73 if(terminal->LCD->width<(Xpos+width))
77 __line__ = __line__ % __lineCount__;
74 return;
78 __column__ = __column__ % __columnCount__;
75 terminal->Xpos = Xpos;
79 }
76 terminal->Ypos = Ypos;
80 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
77 terminal->height = height;
78 terminal->width = width;
79 terminal->lineCount = terminal->height/charh;
80 terminal->columnCount = (terminal->width/charw)-1;
81 terminal_clear(terminal);
82 }
81
83
84
85 void terminal_clear(terminal_t* terminal)
86 {
87 terminal->LCD->paintFilRect(terminal->LCD,terminal->Xpos,terminal->Ypos,terminal->width,terminal->height,terminal->backgroundColor,0,terminal->backgroundColor);
88 }
89
90 void terminal_setbackgroundColor(terminal_t* terminal, uint32_t backgrooundColor)
91 {
92 terminal->backgroundColor = backgrooundColor;
82 }
93 }
83
94
84 int terminal_writenc(char* data, int n)
95 void terminal_settextColor(terminal_t* terminal, uint32_t textColor)
96 {
97 terminal->textColor = textColor;
98 }
99
100
101 void terminal_movecursor(terminal_t* terminal,int n)
85 {
102 {
103 int charw=terminal->font->Width + terminal->horizontalSpace;
104 int charh=terminal->font->Height + terminal->verticalSpace;
105 terminal->column += n;
106 if(terminal->column>terminal->columnCount)
107 {
108 terminal->line += (terminal->column)/terminal->columnCount;
109 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal, charw),CHARYPOS(terminal,charh)-charh,charw*(terminal->columnCount-terminal->column),charh,terminal->backgroundColor,0,terminal->backgroundColor);
110 terminal->line = terminal->line % terminal->lineCount;
111 terminal->column = terminal->column % terminal->columnCount;
112 }
113 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal,charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
114 }
115
116 void terminal_clearCurentLine(terminal_t* terminal)
117 {
118 int charw=terminal->font->Width + terminal->horizontalSpace;
119 int charh=terminal->font->Height + terminal->verticalSpace;
120 terminal->LCD->paintFilRect(terminal->LCD,terminal->Xpos,CHARYPOS(terminal, charh)-charh,terminal->width,charh,terminal->backgroundColor,0,terminal->backgroundColor);
121 }
122
123 int terminal_writenc(terminal_t* terminal,char* data, int n)
124 {
125 int charw=terminal->font->Width + terminal->horizontalSpace;
126 int charh=terminal->font->Height + terminal->verticalSpace;
86 int l=0;
127 int l=0;
87 char buffer[2]=" ";
128 char buffer[2]=" ";
88 while(l<n)
129 while(l<n)
89 {
130 {
90
131
91 buffer[0]=data[l];
132 buffer[0]=data[l];
92 if(buffer[0]=='\n')
133 if(buffer[0]=='\n')
93 {
134 {
94 __line__= (__line__+1) % __lineCount__;
135 terminal->line= (terminal->line+1) % terminal->lineCount;
95 __column__ = 0;
136 terminal->column = 0;
96 }else {
137 }else {
97 if(buffer[0]=='\t')
138 if(buffer[0]=='\t')
98 {
139 {
99 __line__ += (__column__+3) / __columnCount__;
140 for(int i=0;i<1;i++)terminal_movecursor(terminal,1);
100 __column__= (__column__+3) % __columnCount__;
141 }else
101 }else {
142 if(terminal->column==0)terminal_clearCurentLine(terminal);
102 __LCD__->paintFilRect(__LCD__,CHARXPOS(charwidth),CHARYPOS(charheight)-charheight,charwidth,charheight,0x0000,0,0x0000);
143 if(buffer[0]!='\r'){
103 __LCD__->paintText(__LCD__,buffer,CHARXPOS(charwidth),CHARYPOS(charheight),__font__,0xFFFF);
144 terminal->LCD->paintFilRect(terminal->LCD,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh)-charh,charw,charh,terminal->backgroundColor,0,terminal->backgroundColor);
104 terminal_movecursor(1);
145 terminal->LCD->paintText(terminal->LCD,buffer,CHARXPOS(terminal,charw),CHARYPOS(terminal, charh),terminal->font,terminal->textColor);
105 }
146 terminal_movecursor(terminal,1);
147 }
106 }
148 }
107 l++;
149 l++;
108 }
150 }
109 return n;
151 return n;
110 }
152 }
111
153
112 int terminal_write(streamdeviceptr device,void* data,int size, int n)
154 int terminal_write(streamdevice* device,void* data,int size, int n)
113 {
155 {
114 return terminal_writenc((char*) data,size*n);
156 return terminal_writenc((terminal_t*)device->_stream,(char*) data,size*n);
115 }
157 }
116
158
117 int terminal_read(streamdeviceptr device,void* data,int size, int n)
159 int terminal_read(streamdevice* device,void* data,int size, int n)
118 {
160 {
119 return n*size;
161 return n*size;
120 }
162 }
121
163
122 int terminal_setpos(streamdeviceptr device,int pos)
164 int terminal_setpos(streamdevice* device,int pos)
123 {
165 {
124 return 1;
166 return 1;
125 }
167 }
126
168
127 int terminal_close(streamdeviceptr device)
169 int terminal_close( streamdevice* device)
128 {
170 {
129 return 1;
171 return 1;
130 }
172 }
131
173
132
174
133
175
134
176
135
177
136
178
137
179
138
180
139
181
140
182
141
183
142
184
143
185
144
186
@@ -1,22 +1,23
1 TEMPLATE = lib
1 TEMPLATE = lib
2 OBJECTS_DIR = obj
2 OBJECTS_DIR = obj
3 TARGET = terminal
3 TARGET = terminal
4
4
5 SOURCES += \
5 SOURCES += \
6 Terminal.c
6 Terminal.c
7
7
8
8
9 INCLUDEPATH += ../../../../includes \
9 INCLUDEPATH += ../../../../includes \
10 ../../../CPU/STM32F4xx_StdPeriph_Driver/inc \
10 ../../../CPU/STM32F4xx_StdPeriph_Driver/inc \
11 ../../../CPU/CMSIS/Include \
11 ../../../CPU/CMSIS/Include \
12 ../../../../includes/GRAPHIC/CONTROLERS \
12 ../../../../includes/GRAPHIC/CONTROLERS \
13 ../../../../includes/GRAPHIC/GUI/FONTS \
13 ../../../../includes/GRAPHIC/GUI/FONTS \
14 ../../../../includes/GRAPHIC/GUI/Widgets
14 ../../../../includes/GRAPHIC/GUI/Widgets
15
15
16
16 HEADERS += \
17 ../../../../../includes/GRAPHIC/GUI/Widgets/terminal.h
17
18
18 UCMODEL=stm32f4
19 UCMODEL=stm32f4
19
20
20 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL
21 target.path = $$[QT_INSTALL_LIBS]/$$UCMODEL
21 INSTALLS += target
22 INSTALLS += target
22
23
@@ -1,13 +1,14
1 TEMPLATE = subdirs
1 TEMPLATE = subdirs
2
2
3 SUBDIRS += FILE_SYSTEM \
3 SUBDIRS += FILE_SYSTEM \
4 AUDIO \
4 AUDIO \
5 POWER \
5 POWER \
6 GRAPHIC
6 GRAPHIC \
7 Threading
7
8
8
9
9
10
10
11
11
12
12
13
13
14
@@ -1,57 +1,58
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2012, Alexis Jeandet
3 -- Copyright (C) 2012, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #ifndef FONTS_H
22 #ifndef FONTS_H
23 #define FONTS_H
23 #define FONTS_H
24
24
25 #ifdef __cplusplus
25 #ifdef __cplusplus
26 extern "C" {
26 extern "C" {
27 #endif
27 #endif
28
28
29 #include <stdint.h>
29 #include <stdint.h>
30
30
31
31
32 typedef struct _tFont
32 typedef struct _tFont
33 {
33 {
34 const uint8_t *table;
34 const uint8_t *table;
35 uint16_t Width;
35 uint16_t Width;
36 uint16_t Height;
36 uint16_t Height;
37 uint8_t bytesPerLine;
37 uint8_t bytesPerLine;
38
38
39 } sFONT;
39 } sFONT;
40
40
41 extern sFONT ComicSansMS_24;
41 extern sFONT ComicSansMS_24;
42 extern sFONT ComicSansMS_18;
42 extern sFONT ComicSansMS_18;
43 extern sFONT ComicSansMS_8;
43 extern sFONT Monk_24;
44 extern sFONT Monk_24;
44
45
45 #ifdef __cplusplus
46 #ifdef __cplusplus
46 }
47 }
47 #endif
48 #endif
48
49
49 #endif
50 #endif
50
51
51
52
52
53
53
54
54
55
55
56
56
57
57
58
@@ -1,45 +1,68
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2012, Alexis Jeandet
3 -- Copyright (C) 2012, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #ifndef TERMINAL_H
22 #ifndef TERMINAL_H
23 #define TERMINAL_H
23 #define TERMINAL_H
24 #include <stdint.h>
24 #include <stdint.h>
25 #include <widget.h>
25 #include <widget.h>
26 #include <streamdevices.h>
26 #include <streamdevices.h>
27 #include <genericLCD_Controler.h>
27 #include <genericLCD_Controler.h>
28 #include <fonts.h>
28 #include <fonts.h>
29
29
30 int terminal_init(LCD_t* LCD,sFONT* font,streamdevice* strdev);
30 typedef struct terminal_t
31 void terminal_movecursor(int n);
31 {
32 int terminal_write(streamdeviceptr device,void* data,int size, int n);
32 uint16_t line;
33 int terminal_read(streamdeviceptr device,void* data,int size, int n);
33 uint16_t column;
34 int terminal_setpos(streamdeviceptr device,int pos);
34 uint16_t lineCount;
35 int terminal_close(streamdeviceptr device);
35 uint16_t columnCount;
36 uint16_t Xpos;
37 uint16_t Ypos;
38 uint16_t width;
39 uint16_t height;
40 uint32_t backgroundColor;
41 uint32_t textColor;
42 int8_t verticalSpace;
43 int8_t horizontalSpace;
44 LCD_t* LCD;
45 sFONT* font;
46 }terminal_t;
47
48 int terminal_init(terminal_t* terminal,LCD_t* LCD,sFONT* font,streamdevice* strdev);
49 void terminal_setgeometry(terminal_t* terminal,uint16_t Xpos,uint16_t Ypos,uint16_t width,uint16_t height);
50 void terminal_clear(terminal_t* terminal);
51 void terminal_setbackgroundColor(terminal_t* terminal, uint32_t backgrooundColor);
52 void terminal_settextColor(terminal_t* terminal, uint32_t textColor);
53 void terminal_movecursor(terminal_t* terminal,int n);
54 void terminal_clearCurentLine(terminal_t* terminal);
55 int terminal_write(streamdevice* device,void* data,int size, int n);
56 int terminal_read(streamdevice* device,void* data,int size, int n);
57 int terminal_setpos(streamdevice* device,int pos);
58 int terminal_close(streamdevice* device);
36
59
37
60
38
61
39
62
40
63
41
64
42
65
43
66
44
67
45 #endif
68 #endif
@@ -1,60 +1,72
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2012, Alexis Jeandet
3 -- Copyright (C) 2012, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #ifndef STREAMDEVICES_H
22 #ifndef STREAMDEVICES_H
23 #define STREAMDEVICES_H
23 #define STREAMDEVICES_H
24 #include <uhandle.h>
24 #include <uhandle.h>
25 #include <stdint.h>
25 #include <stdint.h>
26
26
27 typedef struct streamdevice* streamdeviceptr;
27 typedef struct streamdevice* streamdeviceptr;
28 struct streamdevice_ops;
29
30 typedef volatile struct streamdevice
31 {
32 struct streamdevice_ops* ops;
33 volatile uint32_t streamPt;
34 volatile UHANDLE _stream;
35 volatile uint32_t mode;
36 }streamdevice;
37
38
39 typedef struct streamdevice_ops
40 {
41 int (*write)(streamdevice* device,void* data,int size, int n);
42 int (*read)(streamdevice* device,void* data,int size, int n);
43 int (*setpos)(streamdevice* device,int pos);
44 int (*close)(streamdevice* device);
45 }streamdevice_ops;
46
47
28
48
29 typedef int (*write_t)(streamdeviceptr device,void* data,int size, int n);
49 typedef int (*write_t)(streamdeviceptr device,void* data,int size, int n);
30 typedef int (*read_t)(streamdeviceptr device,void* data,int size, int n);
50 typedef int (*read_t)(streamdeviceptr device,void* data,int size, int n);
31 typedef int (*setpos_t)(streamdeviceptr device,int pos);
51 typedef int (*setpos_t)(streamdeviceptr device,int pos);
32 typedef int (*close_t)(streamdeviceptr device);
52 typedef int (*close_t)(streamdeviceptr device);
33
53
34 typedef volatile struct streamdevice
54
35 {
55
36 write_t write;
37 read_t read;
38 setpos_t setpos;
39 close_t close;
40 volatile uint32_t streamPt;
41 volatile UHANDLE _stream;
42 volatile uint32_t mode;
43 }streamdevice;
44
56
45 #endif
57 #endif
46
58
47
59
48
60
49
61
50
62
51
63
52
64
53
65
54
66
55
67
56
68
57
69
58
70
59
71
60
72
@@ -1,375 +1,375
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22 #include <core.h>
22 #include <core.h>
23 #include <stm32f4xx_rcc.h>
23 #include <stm32f4xx_rcc.h>
24 #include <stdint.h>
24 #include <stdint.h>
25 #include <stdlib.h>
25 #include <stdlib.h>
26 #include <stdio.h>
26 #include <stdio.h>
27 #include <core_cm4.h>
27 #include <core_cm4.h>
28
28
29 extern uint32_t OSC0;
29 extern uint32_t OSC0;
30 extern uint32_t INTOSC;
30 extern uint32_t INTOSC;
31 extern uint32_t RTCOSC;
31 extern uint32_t RTCOSC;
32
32
33 volatile uint32_t tickCounter=0;
33 volatile uint32_t tickCounter=0;
34
34
35
35
36 void SysTick_Handler(void)
36 void SysTick_Handler(void)
37 {
37 {
38 tickCounter+=1;
38 tickCounter+=1;
39 }
39 }
40
40
41 void delay_us(uint32_t value)
41 void delay_us(uint32_t value)
42 {
42 {
43 extern uint32_t currentCpuFreq;
43 extern uint32_t currentCpuFreq;
44 if(value)
44 if(value)
45 {
45 {
46 uint32_t tickperus=currentCpuFreq/(1000*10);
46 uint32_t tickperus=currentCpuFreq/(1000*10);
47 uint32_t tickCounterSnap = SysTick->VAL+((value%100)*tickperus);
47 uint32_t tickCounterSnap = SysTick->VAL+((value%100)*tickperus);
48 uint32_t targetVal=tickCounterSnap +(value/100);
48 uint32_t targetVal=tickCounterSnap +(value/100);
49 if(targetVal < tickCounterSnap)
49 if(targetVal < tickCounterSnap)
50 {
50 {
51 while(tickCounter > targetVal);
51 while(tickCounter > targetVal);
52 }
52 }
53 while((tickCounter < targetVal) | (SysTick->VAL<tickCounterSnap));
53 while((tickCounter < targetVal) | (SysTick->VAL<tickCounterSnap));
54 }
54 }
55 }
55 }
56
56
57 void delay_100us(uint32_t value)
57 void delay_100us(uint32_t value)
58 {
58 {
59 if(value)
59 if(value)
60 {
60 {
61 uint32_t tickCounterSnap = tickCounter;
61 uint32_t tickCounterSnap = tickCounter;
62 uint32_t SysTickSnap = SysTick->VAL;
62 uint32_t SysTickSnap = SysTick->VAL;
63 uint32_t targetVal=tickCounterSnap +(value);
63 uint32_t targetVal=tickCounterSnap +(value);
64 if(targetVal < tickCounterSnap)
64 if(targetVal < tickCounterSnap)
65 {
65 {
66 while(tickCounter > targetVal);
66 while(tickCounter > targetVal);
67 }
67 }
68 while((tickCounter < targetVal) | (SysTick->VAL<SysTickSnap));
68 while((tickCounter < targetVal) | (SysTick->VAL<SysTickSnap));
69 }
69 }
70 }
70 }
71
71
72 uint32_t getAPB1Freq()
72 uint32_t getAPB1Freq()
73 {
73 {
74 RCC_ClocksTypeDef RCC_ClocksStatus;
74 RCC_ClocksTypeDef RCC_ClocksStatus;
75 RCC_GetClocksFreq(&RCC_ClocksStatus);
75 RCC_GetClocksFreq(&RCC_ClocksStatus);
76 return RCC_ClocksStatus.PCLK1_Frequency;
76 return RCC_ClocksStatus.PCLK1_Frequency;
77 }
77 }
78
78
79 uint32_t getAPB2Freq()
79 uint32_t getAPB2Freq()
80 {
80 {
81 RCC_ClocksTypeDef RCC_ClocksStatus;
81 RCC_ClocksTypeDef RCC_ClocksStatus;
82 RCC_GetClocksFreq(&RCC_ClocksStatus);
82 RCC_GetClocksFreq(&RCC_ClocksStatus);
83 return RCC_ClocksStatus.PCLK2_Frequency;
83 return RCC_ClocksStatus.PCLK2_Frequency;
84 }
84 }
85
85
86
86
87 uint32_t getCpuFreq()
87 uint32_t getCpuFreq()
88 {
88 {
89 uint32_t cpufreq = OSC0;
89 uint32_t cpufreq = OSC0;
90 uint32_t PLLN,PLLM,PLLP;
90 uint32_t PLLN,PLLM,PLLP;
91
91
92 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
92 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
93 {
93 {
94 uint32_t pllinput=INTOSC;
94 uint32_t pllinput=INTOSC;
95 if((RCC->PLLCFGR & (1<<22)) == (1<<22))
95 if((RCC->PLLCFGR & (1<<22)) == (1<<22))
96 {
96 {
97 pllinput=OSC0;
97 pllinput=OSC0;
98 }
98 }
99 PLLN = (RCC->PLLCFGR>>6) & 0x1FF;
99 PLLN = (RCC->PLLCFGR>>6) & 0x1FF;
100 PLLM = RCC->PLLCFGR & 0x3F;
100 PLLM = RCC->PLLCFGR & 0x3F;
101 PLLP = 1<<(((RCC->PLLCFGR>>16) & 3 )+1);
101 PLLP = 1<<(((RCC->PLLCFGR>>16) & 3 )+1);
102 cpufreq = (pllinput * PLLN )/(PLLM*PLLP);
102 cpufreq = (pllinput * PLLN )/(PLLM*PLLP);
103 }
103 }
104 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
104 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
105 {
105 {
106 cpufreq=INTOSC;
106 cpufreq=INTOSC;
107 }
107 }
108 if((RCC->CFGR & (1<<7))==1<<7)
108 if((RCC->CFGR & (1<<7))==1<<7)
109 {
109 {
110 return cpufreq>>((RCC->CFGR & (7<<4))>>4);
110 return cpufreq>>((RCC->CFGR & (7<<4))>>4);
111 }
111 }
112 return cpufreq;
112 return cpufreq;
113 }
113 }
114
114
115 void reset_AHB1()
115 void reset_AHB1()
116 {
116 {
117 RCC->AHB1RSTR = -1;
117 RCC->AHB1RSTR = -1;
118 RCC->AHB1RSTR = 0;
118 RCC->AHB1RSTR = 0;
119 }
119 }
120
120
121 void reset_AHB2()
121 void reset_AHB2()
122 {
122 {
123 RCC->AHB2RSTR = -1;
123 RCC->AHB2RSTR = -1;
124 RCC->AHB2RSTR = 0;
124 RCC->AHB2RSTR = 0;
125 }
125 }
126
126
127 void reset_APB1()
127 void reset_APB1()
128 {
128 {
129 RCC->APB1RSTR = -1;
129 RCC->APB1RSTR = -1;
130 RCC->APB1RSTR = 0;
130 RCC->APB1RSTR = 0;
131 }
131 }
132
132
133 void reset_APB2()
133 void reset_APB2()
134 {
134 {
135 RCC->APB2RSTR = -1;
135 RCC->APB2RSTR = -1;
136 RCC->APB2RSTR = 0;
136 RCC->APB2RSTR = 0;
137 }
137 }
138
138
139
139
140
140
141 /*
141 /*
142 | 2.7->3.6V
142 | 2.7->3.6V
143 -------------------------
143 -------------------------
144 0WS | 0<HCLK<=30
144 0WS | 0<HCLK<=30
145 1WS | 30<HCLK<=60
145 1WS | 30<HCLK<=60
146 2WS | 60<HCLK<=90
146 2WS | 60<HCLK<=90
147 3WS | 90<HCLK<=120
147 3WS | 90<HCLK<=120
148 4WS | 120<HCLK<=150
148 4WS | 120<HCLK<=150
149 5WS | 150<HCLK<=168
149 5WS | 150<HCLK<=168
150
150
151 f(VCO clock) = f(PLL clock input) Γ— (PLLN / PLLM) [1]
151 f(VCO clock) = f(PLL clock input) Γ— (PLLN / PLLM) [1]
152 64MHz <= f(VCO clock) <= 432MHz [2]
152 64MHz <= f(VCO clock) <= 432MHz [2]
153
153
154 f(VCO clock input) must be between 1MHz and 2MHz and as close to 2MHz as possible!! [3]
154 f(VCO clock input) must be between 1MHz and 2MHz and as close to 2MHz as possible!! [3]
155
155
156 f(PLL general clock output) = f(VCO clock) / PLLP [4]
156 f(PLL general clock output) = f(VCO clock) / PLLP [4]
157
157
158 CPU<168MHz AHB1<168MHz AHB2<168MHz APB1<42MHz APB2<84MHz [5]
158 CPU<168MHz AHB1<168MHz AHB2<168MHz APB1<42MHz APB2<84MHz [5]
159
159
160 ! 63<=PLLN<=432 [6]
160 ! 63<=PLLN<=432 [6]
161 ! 2<=PLLM<=63 [7]
161 ! 2<=PLLM<=63 [7]
162 ! PLLP=2,4,6,8 [8]
162 ! PLLP=2,4,6,8 [8]
163 4<=PLLM*PLLP<=504
163 4<=PLLM*PLLP<=504
164
164
165 F= f(PLL clock input) * A/B with
165 F= f(PLL clock input) * A/B with
166 63<=A<=432
166 63<=A<=432
167 4<=B<=504
167 4<=B<=504
168
168
169 */
169 */
170
170
171
171
172 int optimizePLLcfg(uint32_t freq, uint32_t srcfreq,uint32_t PLLM,uint32_t* PLLP, uint32_t* PLLN,uint8_t* AHBPRindx)
172 int optimizePLLcfg(uint32_t freq, uint32_t srcfreq,uint32_t PLLM,uint32_t* PLLP, uint32_t* PLLN,uint8_t* AHBPRindx)
173 {
173 {
174 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
174 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
175 uint32_t AHBPR=0,AHBPR_r=0,PLLN_r=0,PLLP_r=0;
175 uint32_t AHBPR=0,AHBPR_r=0,PLLN_r=0,PLLP_r=0;
176 uint32_t Fplli=0;
176 uint32_t Fplli=0;
177 int32_t f_error=100000000;
177 int32_t f_error=100000000;
178 int32_t f_errornw=100000000;
178 int32_t f_errornw=100000000;
179 Fplli = srcfreq / PLLM;
179 Fplli = srcfreq / PLLM;
180 //not efficient but should find the best parameters
180 //not efficient but should find the best parameters
181 for((*AHBPRindx)=0;(*AHBPRindx)<9;(*AHBPRindx)++) //lowest priority
181 for((*AHBPRindx)=0;(*AHBPRindx)<9;(*AHBPRindx)++) //lowest priority
182 {
182 {
183 AHBPR = AHBPRtbl[(*AHBPRindx)];
183 AHBPR = AHBPRtbl[(*AHBPRindx)];
184 for(*PLLP=2;*PLLP<9;*PLLP+=2)
184 for(*PLLP=2;*PLLP<9;*PLLP+=2)
185 {
185 {
186 *PLLN = (freq*(*PLLP)*AHBPR)/Fplli;
186 *PLLN = (freq*(*PLLP)*AHBPR)/Fplli;
187 if(((*PLLN)>62) && ((*PLLN)<433) && ((Fplli * (*PLLN)) < 433000000))
187 if(((*PLLN)>62) && ((*PLLN)<433) && ((Fplli * (*PLLN)) < 433000000))
188 {
188 {
189 f_errornw = abs((int32_t)((int32_t)((Fplli*(*PLLN))/((*PLLP)*AHBPR))-freq));
189 f_errornw = abs((int32_t)((int32_t)((Fplli*(*PLLN))/((*PLLP)*AHBPR))-freq));
190 if( ( (f_error)>(f_errornw) ) || ( (*AHBPRindx==0)&&(*PLLP==2)&&(*PLLN==63) ) )
190 if( ( (f_error)>(f_errornw) ) || ( (*AHBPRindx==0)&&(*PLLP==2)&&(*PLLN==63) ) )
191 {
191 {
192 f_error=f_errornw;
192 f_error=f_errornw;
193 PLLN_r = *PLLN;
193 PLLN_r = *PLLN;
194 PLLP_r = *PLLP;
194 PLLP_r = *PLLP;
195 AHBPR_r=*AHBPRindx;
195 AHBPR_r=*AHBPRindx;
196 if(f_error==0)
196 if(f_error==0)
197 {
197 {
198 *PLLN = PLLN_r;
198 *PLLN = PLLN_r;
199 *PLLP = PLLP_r;
199 *PLLP = PLLP_r;
200 *AHBPRindx = AHBPR_r;
200 *AHBPRindx = AHBPR_r;
201 return 1;
201 return 1;
202 }
202 }
203 }
203 }
204 }
204 }
205 }
205 }
206 }
206 }
207 *PLLN = PLLN_r;
207 *PLLN = PLLN_r;
208 *PLLP = PLLP_r;
208 *PLLP = PLLP_r;
209 *AHBPRindx = AHBPR_r;
209 *AHBPRindx = AHBPR_r;
210 return 1;
210 return 1;
211 }
211 }
212
212
213
213
214 int setPll(uint32_t freq)
214 int setPll(uint32_t freq)
215 {
215 {
216 extern uint32_t OSC0;
216 extern uint32_t OSC0;
217 extern uint32_t INTOSC;
217 extern uint32_t INTOSC;
218 uint32_t srcfreq = INTOSC;
218 uint32_t srcfreq = INTOSC;
219 uint8_t AHBPRindx;
219 uint8_t AHBPRindx;
220 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
220 uint32_t AHBPRtbl[9]={1,2,4,8,16,64,128,256,512};
221 uint32_t PLLN=0,PLLM=0,PLLP=0,AHBPR=0;
221 uint32_t PLLN=0,PLLM=0,PLLP=0,AHBPR=0;
222 uint32_t Fplli=0;
222 uint32_t Fplli=0;
223 if((RCC->PLLCFGR & (1<<22))==(1<<22))
223 if((RCC->PLLCFGR & (1<<22))==(1<<22))
224 {
224 {
225 srcfreq = OSC0;
225 srcfreq = OSC0;
226 }
226 }
227 PLLM = srcfreq / 1500000; // [3]
227 PLLM = srcfreq / 1500000; // [3]
228 Fplli = srcfreq / PLLM;
228 Fplli = srcfreq / PLLM;
229 optimizePLLcfg(freq,srcfreq,PLLM,&PLLP,&PLLN,&AHBPRindx);
229 optimizePLLcfg(freq,srcfreq,PLLM,&PLLP,&PLLN,&AHBPRindx);
230 srcfreq = (Fplli*PLLN)/(PLLP*AHBPRtbl[AHBPRindx]); //Put real clk freq in srcfreq for return value
230 srcfreq = (Fplli*PLLN)/(PLLP*AHBPRtbl[AHBPRindx]); //Put real clk freq in srcfreq for return value
231 //now switch to HSIs
231 //now switch to HSIs
232 if((RCC->CR & 1)==0)RCC->CR |= 1; //turn ON HSI
232 if((RCC->CR & 1)==0)RCC->CR |= 1; //turn ON HSI
233 while((RCC->CR & 2)!=2); //wait for HSI Ready
233 while((RCC->CR & 2)!=2); //wait for HSI Ready
234 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
234 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
235 RCC->CFGR |= RCC_CFGR_SW_HSI; //set HSI as main clk
235 RCC->CFGR |= RCC_CFGR_SW_HSI; //set HSI as main clk
236 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_HSI);
236 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_HSI);
237 RCC->CR &= ~(1<<24); //Turn OFF PLL
237 RCC->CR &= ~(1<<24); //Turn OFF PLL
238 RCC->PLLCFGR &= ~0x37FFF; //clear PLLP PLLM PLLN
238 RCC->PLLCFGR &= ~0x37FFF; //clear PLLP PLLM PLLN
239 RCC->PLLCFGR |= PLLM + (PLLN<<6) + (((PLLP>>1) -1)<<16);
239 RCC->PLLCFGR |= PLLM + (PLLN<<6) + (((PLLP>>1) -1)<<16);
240 RCC->CR |= RCC_CR_PLLON; //Turn ON PLL
240 RCC->CR |= RCC_CR_PLLON; //Turn ON PLL
241 while((RCC->CR & (1<<25))!=(1<<25)); //wait for PLL Ready
241 while((RCC->CR & (1<<25))!=(1<<25)); //wait for PLL Ready
242 if(AHBPRindx!=0)AHBPRindx|=0x8;
242 if(AHBPRindx!=0)AHBPRindx|=0x8;
243 RCC->CFGR &= ~(0xF<<4);
243 RCC->CFGR &= ~(0xF<<4);
244 RCC->CFGR |= (uint32_t)(AHBPRindx<<4);
244 RCC->CFGR |= (uint32_t)(AHBPRindx<<4);
245 AHBPR=0;
245 AHBPR=0;
246 while((srcfreq>>AHBPR)>42000000)AHBPR++; //[5] //Thune APB1 prescaler to keep APB1 CLK below 42MHz
246 while((srcfreq>>AHBPR)>42000000)AHBPR++; //[5] //Thune APB1 prescaler to keep APB1 CLK below 42MHz
247 if(AHBPR!=0)
247 if(AHBPR!=0)
248 {
248 {
249 AHBPR-=1;
249 AHBPR-=1;
250 AHBPR|=0x4;
250 AHBPR|=0x4;
251 }
251 }
252 RCC->CFGR &= ~(0x7<<10);
252 RCC->CFGR &= ~(0x7<<10);
253 RCC->CFGR |= (uint32_t)(AHBPR<<10);
253 RCC->CFGR |= (uint32_t)(AHBPR<<10);
254 AHBPR=0;
254 AHBPR=0;
255 while((srcfreq>>AHBPR)>84000000)AHBPR++; //[5] //Thune APB2 prescaler to keep APB2 CLK below 42MHz
255 while((srcfreq>>AHBPR)>84000000)AHBPR++; //[5] //Thune APB2 prescaler to keep APB2 CLK below 42MHz
256 if(AHBPR!=0)
256 if(AHBPR!=0)
257 {
257 {
258 AHBPR-=1;
258 AHBPR-=1;
259 AHBPR|=0x4;
259 AHBPR|=0x4;
260 }
260 }
261 RCC->CFGR &= ~(0x7<<13);
261 RCC->CFGR &= ~(0x7<<13);
262 RCC->CFGR |= (uint32_t)(AHBPR<<13);
262 RCC->CFGR |= (uint32_t)(AHBPR<<13);
263 FLASH->ACR |= FLASH_ACR_LATENCY_7WS;
263 FLASH->ACR |= FLASH_ACR_LATENCY_7WS;
264 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//Switch to PLL as main clk source
264 RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));//Switch to PLL as main clk source
265 RCC->CFGR |= RCC_CFGR_SW_PLL;
265 RCC->CFGR |= RCC_CFGR_SW_PLL;
266 /* Wait till the main PLL is used as system clock source */
266 /* Wait untill the main PLL is used as system clock source */
267 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
267 while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
268 if(srcfreq>150000000)
268 if(srcfreq>150000000)
269 {
269 {
270 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_5WS;
270 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_5WS;
271 }
271 }
272 if((srcfreq<150000000) && (srcfreq>=120000000))
272 if((srcfreq<150000000) && (srcfreq>=120000000))
273 {
273 {
274 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_4WS;
274 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_4WS;
275 }
275 }
276 if((srcfreq<120000000) && (srcfreq>=90000000))
276 if((srcfreq<120000000) && (srcfreq>=90000000))
277 {
277 {
278 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_3WS;
278 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_3WS;
279 }
279 }
280 if((srcfreq<90000000) && (srcfreq>=60000000))
280 if((srcfreq<90000000) && (srcfreq>=60000000))
281 {
281 {
282 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_2WS;
282 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_2WS;
283 }
283 }
284 if((srcfreq<60000000) && (srcfreq>=30000000))
284 if((srcfreq<60000000) && (srcfreq>=30000000))
285 {
285 {
286 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_1WS;
286 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_1WS;
287 }
287 }
288 if(srcfreq<30000000)
288 if(srcfreq<30000000)
289 {
289 {
290 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_0WS;
290 FLASH->ACR &= (~7)|FLASH_ACR_LATENCY_0WS;
291 }
291 }
292 return srcfreq;
292 return srcfreq;
293 }
293 }
294
294
295 void configureSysTick()
295 void configureSysTick()
296 {
296 {
297 extern uint32_t currentCpuFreq;
297 extern uint32_t currentCpuFreq;
298 uint32_t us=currentCpuFreq/(1000*10);
298 uint32_t us=currentCpuFreq/(1000*10);
299 SysTick_Config(us);
299 SysTick_Config(us);
300 }
300 }
301
301
302 int setCpuFreq(uint32_t freq)
302 int setCpuFreq(uint32_t freq)
303 {
303 {
304 extern uint32_t OSC0;
304 extern uint32_t OSC0;
305 extern uint32_t INTOSC;
305 extern uint32_t INTOSC;
306 uint8_t i=0;
306 uint8_t i=0;
307 uint32_t curentFeq = getCpuFreq();
307 uint32_t curentFeq = getCpuFreq();
308 if(curentFeq==freq)return curentFeq;
308 if(curentFeq==freq)return curentFeq;
309 if((freq>2000000) && (freq<=250000000)) //be carefull with 250MHz!!!
309 if((freq>2000000) && (freq<=250000000)) //be carefull with 250MHz!!!
310 {
310 {
311 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
311 if((RCC->CFGR & 0xC) == 8) //PLL used as sys clk
312 {
312 {
313 return setPll(freq);
313 return setPll(freq);
314 }
314 }
315 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
315 else if((RCC->CFGR & 0xC) == 0) //HSI used as sys clk
316 {
316 {
317 if((INTOSC%freq)==0) //now check if we can directly divide HSI
317 if((INTOSC%freq)==0) //now check if we can directly divide HSI
318 {
318 {
319 if(freq==INTOSC)
319 if(freq==INTOSC)
320 {
320 {
321 RCC->CFGR &= ~(0xF<<4);
321 RCC->CFGR &= ~(0xF<<4);
322 return freq;
322 return freq;
323 }
323 }
324 for(i=1;i<8;i++)
324 for(i=1;i<8;i++)
325 {
325 {
326 if((freq<<i)==INTOSC)
326 if((freq<<i)==INTOSC)
327 {
327 {
328 RCC->CFGR &= ~(0xF<<4);
328 RCC->CFGR &= ~(0xF<<4);
329 RCC->CFGR |= ((0x8|i)<<4);
329 RCC->CFGR |= ((0x8|i)<<4);
330 return freq;
330 return freq;
331 }
331 }
332 }
332 }
333 }
333 }
334 else
334 else
335 return setPll(freq);
335 return setPll(freq);
336 }
336 }
337 else //HSE used as sys clk
337 else //HSE used as sys clk
338 {
338 {
339 if((OSC0%freq)==0) //now check if we can directly divide HSI
339 if((OSC0%freq)==0) //now check if we can directly divide HSI
340 {
340 {
341 if(freq==OSC0)
341 if(freq==OSC0)
342 {
342 {
343 RCC->CFGR &= ~(0xF<<4);
343 RCC->CFGR &= ~(0xF<<4);
344 return freq;
344 return freq;
345 }
345 }
346 for(i=1;i<8;i++)
346 for(i=1;i<8;i++)
347 {
347 {
348 if((freq<<i)==OSC0)
348 if((freq<<i)==OSC0)
349 {
349 {
350 RCC->CFGR &= ~(0xF<<4);
350 RCC->CFGR &= ~(0xF<<4);
351 RCC->CFGR |= ((0x8|i)<<4);
351 RCC->CFGR |= ((0x8|i)<<4);
352 return freq;
352 return freq;
353 }
353 }
354 }
354 }
355 }
355 }
356 else
356 else
357 return setPll(freq);
357 return setPll(freq);
358 }
358 }
359 }
359 }
360 return 0;
360 return 0;
361 }
361 }
362
362
363
363
364 void enable_FPU()
364 void enable_FPU()
365 {
365 {
366 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
366 SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
367 __asm__("dsb");
367 __asm__("dsb");
368 __asm__("isb");
368 __asm__("isb");
369 }
369 }
370
370
371
371
372
372
373
373
374
374
375
375
@@ -1,261 +1,261
1 #include <stdlib.h>
1 #include <stdlib.h>
2 #include <errno.h>
2 #include <errno.h>
3 #include <string.h>
3 #include <string.h>
4 #include <sys/stat.h>
4 #include <sys/stat.h>
5 #include <sys/types.h>
5 #include <sys/types.h>
6 #include <sys/times.h>
6 #include <sys/times.h>
7 #include <streamdevices.h>
7 #include <streamdevices.h>
8 #include <string.h>
8 #include <string.h>
9 #include <stdio.h>
9 #include <stdio.h>
10 #include <gpio.h>
10 #include <gpio.h>
11 #include <uart.h>
11 #include <uart.h>
12 #include <stdint.h>
12 #include <stdint.h>
13
13
14 #undef errno
14 #undef errno
15
15
16
16
17
17
18 #ifdef __cplusplus
18 #ifdef __cplusplus
19 extern "C" {
19 extern "C" {
20 #endif
20 #endif
21 extern int errno;
21 extern int errno;
22 extern int32_t __max_opened_files__;
22 extern int32_t __max_opened_files__;
23 extern streamdevice* __opnfiles__[];
23 extern streamdevice* __opnfiles__[];
24 extern int32_t* __fs_root__;
24 extern int32_t* __fs_root__;
25 extern int32_t __fs_root_size__;
25 extern int32_t __fs_root_size__;
26
26
27 char *__env[1] = { 0 };
27 char *__env[1] = { 0 };
28 char **environ = __env;
28 char **environ = __env;
29
29
30 int _exit()
30 int _exit()
31 {
31 {
32 while(1);
32 while(1);
33 }
33 }
34
34
35 int _close(int file)
35 int _close(int file)
36 {
36 {
37 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
37 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
38 {
38 {
39 return __opnfiles__[file]->close((streamdeviceptr) __opnfiles__[file]);
39 return __opnfiles__[file]->ops->close( __opnfiles__[file]);
40 }
40 }
41 return 0;
41 return 0;
42 }
42 }
43
43
44
44
45 int _write(int file, char *ptr, int len)
45 int _write(int file, char *ptr, int len)
46 {
46 {
47 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
47 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
48 {
48 {
49 if(__opnfiles__[file]->write((streamdeviceptr)__opnfiles__[file],ptr,1,len)) return len;
49 if(__opnfiles__[file]->ops->write(__opnfiles__[file],ptr,1,len)) return len;
50 }
50 }
51 return 0;
51 return 0;
52 }
52 }
53
53
54 int _execve(char *name, char **argv, char **env) {
54 int _execve(char *name, char **argv, char **env) {
55 errno = ENOMEM;
55 errno = ENOMEM;
56 return -1;
56 return -1;
57 }
57 }
58
58
59
59
60 int _fork(void) {
60 int _fork(void) {
61 errno = EAGAIN;
61 errno = EAGAIN;
62 return -1;
62 return -1;
63 }
63 }
64
64
65 int _fstat(int file, struct stat *st) {
65 int _fstat(int file, struct stat *st) {
66 st->st_mode = S_IFCHR;
66 st->st_mode = S_IFCHR;
67 return 0;
67 return 0;
68 }
68 }
69
69
70
70
71 int _getpid(void) {
71 int _getpid(void) {
72 return 1;
72 return 1;
73 }
73 }
74
74
75
75
76 int _isatty(int file) {
76 int _isatty(int file) {
77 return 1;
77 return 1;
78 }
78 }
79
79
80
80
81 int _kill(int pid, int sig) {
81 int _kill(int pid, int sig) {
82 errno = EINVAL;
82 errno = EINVAL;
83 return -1;
83 return -1;
84 }
84 }
85
85
86
86
87 int _link(char *old, char *_new) {
87 int _link(char *old, char *_new) {
88 errno = EMLINK;
88 errno = EMLINK;
89 return -1;
89 return -1;
90 }
90 }
91
91
92
92
93 int _lseek(int file, int ptr, int dir) {
93 int _lseek(int file, int ptr, int dir) {
94 return 0;
94 return 0;
95 }
95 }
96
96
97 #include <gpio.h>
97 #include <gpio.h>
98
98
99 int _open(const char *name, int flags, int mode)
99 int _open(const char *name, int flags, int mode)
100 {
100 {
101 if(!strncmp("UART", name, 4) && ((name[4] & 0x30)==0x30))
101 if(!strncmp("UART", name, 4) && ((name[4] & 0x30)==0x30))
102 {
102 {
103 //uart_t* uart1 = malloc(sizeof(uart_t));
103 //uart_t* uart1 = malloc(sizeof(uart_t));
104 streamdevice* fd1 = malloc(sizeof(streamdevice));
104 streamdevice* fd1 = malloc(sizeof(streamdevice));
105 uart_t uart=uartopen((name[4] & 0xF)-1);
105 uart_t uart=uartopen((name[4] & 0xF)-1);
106 if(uart!=-1);
106 if(uart!=-1);
107 {
107 {
108 uartmkstreamdev(uart,fd1);
108 uartmkstreamdev(uart,fd1);
109 int i=2;
109 int i=2;
110 while(i<__max_opened_files__ && __opnfiles__[i]!=NULL)i++;
110 while((i<__max_opened_files__) && (__opnfiles__[i]!=NULL))i++;
111 if(i!=__max_opened_files__)
111 if(i!=__max_opened_files__)
112 {
112 {
113 __opnfiles__[i] = fd1;
113 __opnfiles__[i] = fd1;
114 return i;
114 return i;
115 }
115 }
116 else printf("Too much files opened\n\r");
116 else printf("Too much files opened\n\r");
117 }
117 }
118 }
118 }
119 return -1;
119 return -1;
120 }
120 }
121
121
122 int _read(int file, char *ptr, int len) {
122 int _read(int file, char *ptr, int len) {
123 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
123 if(file<__max_opened_files__ && __opnfiles__[file]!=NULL)
124 {
124 {
125 if(__opnfiles__[file]->read((streamdeviceptr)__opnfiles__[file],ptr,1,len)) return len;
125 if(__opnfiles__[file]->ops->read(__opnfiles__[file],ptr,1,len)) return len;
126 }
126 }
127 return 0;
127 return 0;
128 }
128 }
129
129
130
130
131
131
132 caddr_t _sbrk(int incr) {
132 caddr_t _sbrk(int incr) {
133 register char * stack_ptr __asm__ ("sp");
133 register char * stack_ptr __asm__ ("sp");
134 extern char _end; /* Defined by the linker */
134 extern char _end; /* Defined by the linker */
135 static char *heap_end;
135 static char *heap_end;
136 char *prev_heap_end;
136 char *prev_heap_end;
137 if (heap_end == 0) {
137 if (heap_end == 0) {
138 heap_end = &_end;
138 heap_end = &_end;
139 }
139 }
140 prev_heap_end = heap_end;
140 prev_heap_end = heap_end;
141 if (heap_end + incr > stack_ptr) {
141 if (heap_end + incr > stack_ptr) {
142 _write (1, "Heap and stack collision\n", 25);
142 _write (1, "Heap and stack collision\n", 25);
143 abort ();
143 abort ();
144 }
144 }
145 heap_end += incr;
145 heap_end += incr;
146 return (caddr_t) prev_heap_end;
146 return (caddr_t) prev_heap_end;
147 }
147 }
148
148
149
149
150
150
151 int _stat(char *file, struct stat *st) {
151 int _stat(char *file, struct stat *st) {
152 st->st_mode = S_IFCHR;
152 st->st_mode = S_IFCHR;
153 return 0;
153 return 0;
154 }
154 }
155
155
156
156
157 int _times(struct tms *buf) {
157 int _times(struct tms *buf) {
158 return -1;
158 return -1;
159 }
159 }
160
160
161
161
162 int _unlink(char *name) {
162 int _unlink(char *name) {
163 errno = ENOENT;
163 errno = ENOENT;
164 return -1;
164 return -1;
165 }
165 }
166
166
167 int _wait(int *status) {
167 int _wait(int *status) {
168 errno = ECHILD;
168 errno = ECHILD;
169 return -1;
169 return -1;
170 }
170 }
171
171
172
172
173 int _read_r (struct _reent *r, int file, char * ptr, int len)
173 int _read_r (struct _reent *r, int file, char * ptr, int len)
174 {
174 {
175 r = r;
175 r = r;
176 file = file;
176 file = file;
177 ptr = ptr;
177 ptr = ptr;
178 len = len;
178 len = len;
179 _read(file,ptr,len);
179 _read(file,ptr,len);
180 errno = EINVAL;
180 errno = EINVAL;
181 return -1;
181 return -1;
182 }
182 }
183
183
184 /***************************************************************************/
184 /***************************************************************************/
185
185
186 int _lseek_r (struct _reent *r, int file, int ptr, int dir)
186 int _lseek_r (struct _reent *r, int file, int ptr, int dir)
187 {
187 {
188 r = r;
188 r = r;
189 file = file;
189 file = file;
190 ptr = ptr;
190 ptr = ptr;
191 dir = dir;
191 dir = dir;
192
192
193 return 0;
193 return 0;
194 }
194 }
195
195
196 /***************************************************************************/
196 /***************************************************************************/
197
197
198 int _write_r (struct _reent *r, int file, char * ptr, int len)
198 int _write_r (struct _reent *r, int file, char * ptr, int len)
199 {
199 {
200 return _write(file, ptr, len);
200 return _write(file, ptr, len);
201 }
201 }
202
202
203 /***************************************************************************/
203 /***************************************************************************/
204
204
205 int _close_r (struct _reent *r, int file)
205 int _close_r (struct _reent *r, int file)
206 {
206 {
207 return 0;
207 return 0;
208 }
208 }
209
209
210 /***************************************************************************/
210 /***************************************************************************/
211
211
212 caddr_t _sbrk_r (struct _reent *r, int incr)
212 caddr_t _sbrk_r (struct _reent *r, int incr)
213 {
213 {
214 register char * stack_ptr __asm__ ("sp");
214 register char * stack_ptr __asm__ ("sp");
215 extern char _end; /* Defined by the linker */
215 extern char _end; /* Defined by the linker */
216 static char *heap_end;
216 static char *heap_end;
217 char *prev_heap_end;
217 char *prev_heap_end;
218 if (heap_end == 0) {
218 if (heap_end == 0) {
219 heap_end = &_end;
219 heap_end = &_end;
220 }
220 }
221 prev_heap_end = heap_end;
221 prev_heap_end = heap_end;
222 if (heap_end + incr > stack_ptr) {
222 if (heap_end + incr > stack_ptr) {
223 _write (1, "Heap and stack collision\n", 25);
223 _write (1, "Heap and stack collision\n", 25);
224 abort ();
224 abort ();
225 }
225 }
226 heap_end += incr;
226 heap_end += incr;
227 return (caddr_t) prev_heap_end;
227 return (caddr_t) prev_heap_end;
228 }
228 }
229
229
230 /***************************************************************************/
230 /***************************************************************************/
231
231
232 int _fstat_r (struct _reent *r, int file, struct stat * st)
232 int _fstat_r (struct _reent *r, int file, struct stat * st)
233 {
233 {
234 r = r;
234 r = r;
235 file = file;
235 file = file;
236
236
237 memset (st, 0, sizeof (* st));
237 memset (st, 0, sizeof (* st));
238 st->st_mode = S_IFCHR;
238 st->st_mode = S_IFCHR;
239 return 0;
239 return 0;
240 }
240 }
241
241
242 /***************************************************************************/
242 /***************************************************************************/
243 int _open_r(struct _reent *r,const char *name, int flags, int mode)
243 int _open_r(struct _reent *r,const char *name, int flags, int mode)
244 {
244 {
245 return _open(name, flags, mode);
245 return _open(name, flags, mode);
246 }
246 }
247
247
248 int _isatty_r(struct _reent *r, int fd)
248 int _isatty_r(struct _reent *r, int fd)
249 {
249 {
250 r = r;
250 r = r;
251 fd = fd;
251 fd = fd;
252
252
253 return 1;
253 return 1;
254 }
254 }
255
255
256
256
257 #ifdef __cplusplus
257 #ifdef __cplusplus
258 }
258 }
259 #endif
259 #endif
260
260
261
261
@@ -1,450 +1,465
1 /*------------------------------------------------------------------------------
1 /*------------------------------------------------------------------------------
2 -- This file is a part of the libuc, microcontroler library
2 -- This file is a part of the libuc, microcontroler library
3 -- Copyright (C) 2011, Alexis Jeandet
3 -- Copyright (C) 2011, Alexis Jeandet
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 -------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@gmail.com
20 -- Mail : alexis.jeandet@gmail.com
21 -------------------------------------------------------------------------------*/
21 -------------------------------------------------------------------------------*/
22
22
23 #include <uart.h>
23 #include <uart.h>
24 #include <stm32f4xx_usart.h>
24 #include <stm32f4xx_usart.h>
25 #include <stm32f4xx_rcc.h>
25 #include <stm32f4xx_rcc.h>
26 #include <stm32f4xx_gpio.h>
26 #include <stm32f4xx_gpio.h>
27 #include <gpio.h>
27 #include <gpio.h>
28 #include <stdio.h>
29
28 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
30 #define GPIOGETPORT(gpio) ((GPIO_TypeDef*)(((((uint32_t)gpio) & (uint32_t)0x0000FF00)*(uint32_t)4) + (uint32_t)GPIOA))
29 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
31 #define GPIOPORTNUM(gpio) (((uint32_t)(gpio) & (uint32_t)0x0000FF00)>>(uint32_t)8)
30
32
31 USART_TypeDef* _uart_dev_table[6]={USART1,USART2,USART3,UART4,UART5,USART6};
33 USART_TypeDef* _uart_dev_table[6]={USART1,USART2,USART3,UART4,UART5,USART6};
32
34
33
35
36 int _uartstrsetpos(streamdevice* device,int pos);
37 int _uartstrread(streamdevice* device,void* data,int size, int n);
38 int _uartstrwrite(streamdevice* device,void* data,int size, int n);
39
40 streamdevice_ops UART_OPS=
41 {
42 .write = &_uartstrwrite,
43 .read = &_uartstrread,
44 .setpos= &_uartstrsetpos,
45 .close = NULL
46 };
47
34 uart_t uartopen(int count)
48 uart_t uartopen(int count)
35 {
49 {
36
50
37 switch(count)
51 switch(count)
38 {
52 {
39 case uart1:
53 case uart1:
40 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
54 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
41 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
55 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
42 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
56 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
43 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
57 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
44 USART1->CR3 &= ~((1<<8) + (1<<9));
58 USART1->CR3 &= ~((1<<8) + (1<<9));
45 return uart1;
59 return uart1;
46 break;
60 break;
47 case uart2:
61 case uart2:
48 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
62 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
49 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
63 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
50 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
64 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, DISABLE);
51 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
65 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
52 USART2->CR3 &= ~((1<<8) + (1<<9));
66 USART2->CR3 &= ~((1<<8) + (1<<9));
53 return uart2;
67 return uart2;
54 break;
68 break;
55 case uart3:
69 case uart3:
56 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
70 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
57 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
71 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
58 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
72 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
59 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
73 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
60 USART3->CR3 &= ~((1<<8) + (1<<9));
74 USART3->CR3 &= ~((1<<8) + (1<<9));
61 return uart3;
75 return uart3;
62 break;
76 break;
63 case uart4:
77 case uart4:
64 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
78 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
65 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
79 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, DISABLE);
66 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
80 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
67 UART4->CR3 &= ~((1<<8) + (1<<9));
81 UART4->CR3 &= ~((1<<8) + (1<<9));
68 return uart4;
82 return uart4;
69 break;
83 break;
70 case uart5:
84 case uart5:
71 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
85 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
72 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
86 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, DISABLE);
73 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
87 RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART5, ENABLE);
74 return uart5;
88 return uart5;
75 break;
89 break;
76 case uart6:
90 case uart6:
77 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
91 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
78 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
92 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, DISABLE);
79 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
93 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
80 return uart6;
94 return uart6;
81 break;
95 break;
82 default:
96 default:
83 break;
97 break;
84 }
98 }
85 return -1;
99 return -1;
86 }
100 }
87
101
88 uart_t uartopenandconfig(int count, uint32_t cfg, uint32_t speed, uint32_t TXpin, uint32_t RXpin, uint32_t RTSpin, uint32_t CTSpin)
102 uart_t uartopenandconfig(int count, uint32_t cfg, uint32_t speed, uint32_t TXpin, uint32_t RXpin, uint32_t RTSpin, uint32_t CTSpin)
89 {
103 {
90 uart_t dev= uartopen(count);
104 uart_t dev= uartopen(count);
91 uartsetconfig(dev,cfg,speed);
105 uartsetconfig(dev,cfg,speed);
92 uartsetpins(dev,TXpin,RXpin,RTSpin,CTSpin);
106 uartsetpins(dev,TXpin,RXpin,RTSpin,CTSpin);
93 return dev;
107 return dev;
94 }
108 }
95
109
96
110
97 int uartclose(uart_t uart)
111 int uartclose(uart_t uart)
98 {
112 {
99 switch(uart)
113 switch(uart)
100 {
114 {
101 case uart1:
115 case uart1:
102 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
116 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, ENABLE);
103 break;
117 break;
104 case uart2:
118 case uart2:
105 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
119 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART2, ENABLE);
106 break;
120 break;
107 case uart3:
121 case uart3:
108 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
122 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, ENABLE);
109 break;
123 break;
110 case uart4:
124 case uart4:
111 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
125 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART4, ENABLE);
112 break;
126 break;
113 case uart5:
127 case uart5:
114 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
128 RCC_APB1PeriphResetCmd(RCC_APB1Periph_UART5, ENABLE);
115 break;
129 break;
116 case uart6:
130 case uart6:
117 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
131 RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART6, ENABLE);
118 break;
132 break;
119 default:
133 default:
120 return -1;
134 return -1;
121 break;
135 break;
122 }
136 }
123 return 1;
137 return 1;
124 }
138 }
125
139
126 int uartsetpins(uart_t uart,uint32_t TXpin,uint32_t RXpin,uint32_t RTSpin,uint32_t CTSpin)
140 int uartsetpins(uart_t uart,uint32_t TXpin,uint32_t RXpin,uint32_t RTSpin,uint32_t CTSpin)
127 {
141 {
128 if(uart >5)return -1;
142 if(uart >5)return -1;
129 if(uart <0)return -1;
143 if(uart <0)return -1;
130 gpio_t TX,RX,CTS,RTS;
144 gpio_t TX,RX,CTS,RTS;
131 TX = gpioopen(TXpin);
145 TX = gpioopen(TXpin);
132 RX = gpioopen(RXpin);
146 RX = gpioopen(RXpin);
133 TX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
147 TX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
134 RX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
148 RX |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
135 gpiosetconfig(&TX);
149 gpiosetconfig(&TX);
136 gpiosetconfig(&RX);
150 gpiosetconfig(&RX);
137 uint8_t gpioAFuartx = GPIO_AF_USART1;
151 uint8_t gpioAFuartx = GPIO_AF_USART1;
138 switch(uart)
152 switch(uart)
139 {
153 {
140 case uart1:
154 case uart1:
141 gpioAFuartx = GPIO_AF_USART1;
155 gpioAFuartx = GPIO_AF_USART1;
142 break;
156 break;
143 case uart2:
157 case uart2:
144 gpioAFuartx = GPIO_AF_USART2;
158 gpioAFuartx = GPIO_AF_USART2;
145 break;
159 break;
146 case uart3:
160 case uart3:
147 gpioAFuartx = GPIO_AF_USART3;
161 gpioAFuartx = GPIO_AF_USART3;
148 break;
162 break;
149 case uart4:
163 case uart4:
150 gpioAFuartx = GPIO_AF_UART4;
164 gpioAFuartx = GPIO_AF_UART4;
151 break;
165 break;
152 case uart5:
166 case uart5:
153 gpioAFuartx = GPIO_AF_UART5;
167 gpioAFuartx = GPIO_AF_UART5;
154 break;
168 break;
155 case uart6:
169 case uart6:
156 gpioAFuartx = GPIO_AF_USART6;
170 gpioAFuartx = GPIO_AF_USART6;
157 break;
171 break;
158 default:
172 default:
159 return -1;
173 return -1;
160 break;
174 break;
161 }
175 }
162 GPIO_PinAFConfig(GPIOGETPORT(TX), (uint8_t)(TX & 0xF), gpioAFuartx);
176 GPIO_PinAFConfig(GPIOGETPORT(TX), (uint8_t)(TX & 0xF), gpioAFuartx);
163 GPIO_PinAFConfig(GPIOGETPORT(RX), (uint8_t)(RX & 0xF), gpioAFuartx);
177 GPIO_PinAFConfig(GPIOGETPORT(RX), (uint8_t)(RX & 0xF), gpioAFuartx);
164 if((gpioAFuartx!=GPIO_AF_UART5) && (gpioAFuartx!=GPIO_AF_UART4))
178 if((gpioAFuartx!=GPIO_AF_UART5) && (gpioAFuartx!=GPIO_AF_UART4))
165 {
179 {
166 if(CTSpin!=-1)
180 if(CTSpin!=-1)
167 {
181 {
168 CTS = gpioopen(CTSpin);
182 CTS = gpioopen(CTSpin);
169 CTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
183 CTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
170 gpiosetconfig(&CTS);
184 gpiosetconfig(&CTS);
171 GPIO_PinAFConfig(GPIOGETPORT(CTS), (uint8_t)(CTS & 0xF), gpioAFuartx);
185 GPIO_PinAFConfig(GPIOGETPORT(CTS), (uint8_t)(CTS & 0xF), gpioAFuartx);
172 }
186 }
173
187
174 if(RTSpin!=-1)
188 if(RTSpin!=-1)
175 {
189 {
176 RTS = gpioopen(RTSpin);
190 RTS = gpioopen(RTSpin);
177 RTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
191 RTS |= gpiolowspeed | gpioaf | gpiopushpulltype | gpionopulltype;
178 gpiosetconfig(&RTS);
192 gpiosetconfig(&RTS);
179 GPIO_PinAFConfig(GPIOGETPORT(RTS), (uint8_t)(RTS & 0xF), gpioAFuartx);
193 GPIO_PinAFConfig(GPIOGETPORT(RTS), (uint8_t)(RTS & 0xF), gpioAFuartx);
180 }
194 }
181 }
195 }
182 return 1;
196 return 1;
183 }
197 }
184
198
185 int uartsetconfig(uart_t uart, uint32_t cfg, uint32_t speed)
199 int uartsetconfig(uart_t uart, uint32_t cfg, uint32_t speed)
186 {
200 {
187 int res=1;
201 int res=1;
188 uartdisable(uart);
202 uartdisable(uart);
189 uartsetspeed(uart,speed);
203 uartsetspeed(uart,speed);
190 uartsetparity(uart,cfg & UARTPARITYMASK);
204 uartsetparity(uart,cfg & UARTPARITYMASK);
191 uartsetdatabits(uart,cfg & UARTBITSMASK);
205 uartsetdatabits(uart,cfg & UARTBITSMASK);
192 uartsetstopbits(uart,cfg & UARTSTOPBITSMASK);
206 uartsetstopbits(uart,cfg & UARTSTOPBITSMASK);
193 uartenable(uart);
207 uartenable(uart);
194 return res;
208 return res;
195 }
209 }
196
210
197 int uartenable(uart_t uart)
211 int uartenable(uart_t uart)
198 {
212 {
199 if((uart<6)&&(uart>=0))
213 if((uart<6)&&(uart>=0))
200 {
214 {
201 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
215 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
202 _dev_->CR1 |= (1<<13);
216 _dev_->CR1 |= (1<<13);
203 _dev_->CR1 |= (1<<2) + (1<<3);
217 _dev_->CR1 |= (1<<2) + (1<<3);
204 _dev_->DR = ' ';
218 _dev_->DR = ' ';
205 return 1;
219 return 1;
206 }
220 }
207 return -1;
221 return -1;
208 }
222 }
209
223
210 int uartdisable(uart_t uart)
224 int uartdisable(uart_t uart)
211 {
225 {
212 if((uart<6)&&(uart>=0))
226 if((uart<6)&&(uart>=0))
213 {
227 {
214 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
228 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
215 if((_dev_->CR1 & ((1<<3) +(1<<13)))==((1<<3) +(1<<13)))
229 if((_dev_->CR1 & ((1<<3) +(1<<13)))==((1<<3) +(1<<13)))
216 {
230 {
217 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
231 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
218 }
232 }
219 _dev_->CR1 &= ~((1<<2) + (1<<3) +(1<<13));
233 _dev_->CR1 &= ~((1<<2) + (1<<3) +(1<<13));
220 return 1;
234 return 1;
221 }
235 }
222 return -1;
236 return -1;
223 }
237 }
224
238
225 int uartsetspeed(uart_t uart,uint32_t speed)
239 int uartsetspeed(uart_t uart,uint32_t speed)
226 {
240 {
227 if((uart<6)&&(uart>=0))
241 if((uart<6)&&(uart>=0))
228 {
242 {
229 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
243 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
230 uint32_t tmpreg = 0x00, apbclock = 0x00;
244 uint32_t tmpreg = 0x00, apbclock = 0x00;
231 uint32_t integerdivider = 0x00;
245 uint32_t integerdivider = 0x00;
232 uint32_t fractionaldivider = 0x00;
246 uint32_t fractionaldivider = 0x00;
233 RCC_ClocksTypeDef RCC_ClocksStatus;
247 RCC_ClocksTypeDef RCC_ClocksStatus;
234 RCC_GetClocksFreq(&RCC_ClocksStatus);
248 RCC_GetClocksFreq(&RCC_ClocksStatus);
235
249
236 if ((_dev_ == USART1) || ((_dev_ == USART6)))
250 if ((_dev_ == USART1) || ((_dev_ == USART6)))
237 {
251 {
238 apbclock = RCC_ClocksStatus.PCLK2_Frequency;
252 apbclock = RCC_ClocksStatus.PCLK2_Frequency;
239 }
253 }
240 else
254 else
241 {
255 {
242 apbclock = RCC_ClocksStatus.PCLK1_Frequency;
256 apbclock = RCC_ClocksStatus.PCLK1_Frequency;
243 }
257 }
244 if (((_dev_->CR1) & USART_CR1_OVER8) != (uint16_t)0)
258 if (((_dev_->CR1) & USART_CR1_OVER8) != (uint16_t)0)
245 {
259 {
246 integerdivider = ((25 * apbclock) / (2 * (speed)));
260 integerdivider = ((25 * apbclock) / (2 * (speed)));
247 }
261 }
248 else
262 else
249 {
263 {
250 integerdivider = ((25 * apbclock) / (4 * (speed)));
264 integerdivider = ((25 * apbclock) / (4 * (speed)));
251 }
265 }
252 tmpreg = (integerdivider / 100) << 4;
266 tmpreg = (integerdivider / 100) << 4;
253 fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
267 fractionaldivider = integerdivider - (100 * (tmpreg >> 4));
254 if ((_dev_->CR1 & USART_CR1_OVER8) != (uint16_t)0)
268 if ((_dev_->CR1 & USART_CR1_OVER8) != (uint16_t)0)
255 {
269 {
256 tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
270 tmpreg |= ((((fractionaldivider * 8) + 50) / 100)) & ((uint8_t)0x07);
257 }
271 }
258 else
272 else
259 {
273 {
260 tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
274 tmpreg |= ((((fractionaldivider * 16) + 50) / 100)) & ((uint8_t)0x0F);
261 }
275 }
262 _dev_->BRR = (uint16_t)tmpreg;
276 _dev_->BRR = (uint16_t)tmpreg;
263 return 1;
277 return 1;
264 }
278 }
265 return -1;
279 return -1;
266 }
280 }
267
281
268 int uartsetparity(uart_t uart,uartparity_t parity)
282 int uartsetparity(uart_t uart,uartparity_t parity)
269 {
283 {
270 if((uart<6)&&(uart>=0))
284 if((uart<6)&&(uart>=0))
271 {
285 {
272 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
286 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
273 _dev_->CR1 &= ~(((1<<9)+(1<<10)));
287 _dev_->CR1 &= ~(((1<<9)+(1<<10)));
274 switch(parity)
288 switch(parity)
275 {
289 {
276 case uartparityeven:
290 case uartparityeven:
277 _dev_->CR1 |= (1<<10);
291 _dev_->CR1 |= (1<<10);
278 break;
292 break;
279 case uartparityodd:
293 case uartparityodd:
280 _dev_->CR1 |= (1<<10) + (1<<9);
294 _dev_->CR1 |= (1<<10) + (1<<9);
281 break;
295 break;
282 case uartparitynone:
296 case uartparitynone:
283 break;
297 break;
284 default :
298 default :
285 return 0;
299 return 0;
286 break;
300 break;
287 }
301 }
288 return 1;
302 return 1;
289 }
303 }
290 return -1;
304 return -1;
291 }
305 }
292
306
293 int uartsetdatabits(uart_t uart,uartbits_t databits)
307 int uartsetdatabits(uart_t uart,uartbits_t databits)
294 {
308 {
295 if((uart<6)&&(uart>=0))
309 if((uart<6)&&(uart>=0))
296 {
310 {
297 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
311 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
298 _dev_->CR1 &= ~(((1<<12)));
312 _dev_->CR1 &= ~(((1<<12)));
299 switch(databits)
313 switch(databits)
300 {
314 {
301 case uart7bits:
315 case uart7bits:
302 return 0;
316 return 0;
303 break;
317 break;
304 case uart8bits:
318 case uart8bits:
305 break;
319 break;
306 case uart9bits:
320 case uart9bits:
307 _dev_->CR1 |= (1<<12);
321 _dev_->CR1 |= (1<<12);
308 break;
322 break;
309 default :
323 default :
310 return 0;
324 return 0;
311 break;
325 break;
312 }
326 }
313 return 1;
327 return 1;
314 }
328 }
315 return -1;
329 return -1;
316 }
330 }
317
331
318 int uartsetstopbits(uart_t uart,uartstopbits_t stopbits)
332 int uartsetstopbits(uart_t uart,uartstopbits_t stopbits)
319 {
333 {
320 if((uart<6)&&(uart>=0))
334 if((uart<6)&&(uart>=0))
321 {
335 {
322 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
336 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
323 _dev_->CR2 &= ~(((1<<12)+(1<<13)));
337 _dev_->CR2 &= ~(((1<<12)+(1<<13)));
324 switch(stopbits)
338 switch(stopbits)
325 {
339 {
326 case uarthalfstop:
340 case uarthalfstop:
327 _dev_->CR2 |= (1<<12);
341 _dev_->CR2 |= (1<<12);
328 break;
342 break;
329 case uartonestop:
343 case uartonestop:
330 break;
344 break;
331 case uartonehalfstop:
345 case uartonehalfstop:
332 _dev_->CR2 |= (1<<12) + (1<<13);
346 _dev_->CR2 |= (1<<12) + (1<<13);
333 break;
347 break;
334 case uarttwostop:
348 case uarttwostop:
335 _dev_->CR2 |= (1<<13);
349 _dev_->CR2 |= (1<<13);
336 break;
350 break;
337 default :
351 default :
338 return 0;
352 return 0;
339 break;
353 break;
340 }
354 }
341 return 1;
355 return 1;
342 }
356 }
343 return -1;
357 return -1;
344 }
358 }
345
359
346 int uartputc(uart_t uart,char c)
360 int uartputc(uart_t uart,char c)
347 {
361 {
348 if((uart<6)&&(uart>=0))
362 if((uart<6)&&(uart>=0))
349 {
363 {
350 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
364 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
351 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
365 while((_dev_->SR & (uint16_t)(1<<7))!=(uint16_t)(1<<7));
352 _dev_->DR = c;
366 _dev_->DR = c;
353 return 1;
367 return 1;
354 }
368 }
355 return -1;
369 return -1;
356 }
370 }
357
371
358 char uartgetc(uart_t uart)
372 char uartgetc(uart_t uart)
359 {
373 {
360 if((uart<6)&&(uart>=0))
374 if((uart<6)&&(uart>=0))
361 {
375 {
362 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
376 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
363 while(!(_dev_->SR & (1<<5)));
377 while(!(_dev_->SR & (1<<5)));
364 return (char)_dev_->DR;
378 return (char)_dev_->DR;
365 }
379 }
366 return -1;
380 return -1;
367 }
381 }
368
382
369 int uartputs(uart_t uart,char* s)
383 int uartputs(uart_t uart,char* s)
370 {
384 {
371 while (*s) uartputc(uart,*s++);
385 while (*s) uartputc(uart,*s++);
372 return 1;
386 return 1;
373 }
387 }
374
388
375 int uartgets(uart_t uart,char* s)
389 int uartgets(uart_t uart,char* s)
376 {
390 {
377 do
391 do
378 {
392 {
379 (*s) = uartgetc(uart);
393 (*s) = uartgetc(uart);
380 }
394 }
381 while(*s++);
395 while(*s++);
382 return 1;
396 return 1;
383 }
397 }
384
398
385 int uartputnc(uart_t uart,char* c,int n)
399 int uartputnc(uart_t uart,char* c,int n)
386 {
400 {
387 int l=0;
401 int l=0;
388 while(l<n)
402 while(l<n)
389 {
403 {
390 uartputc(uart,*c++);
404 uartputc(uart,*c++);
391 l++;
405 l++;
392 }
406 }
393 return n;
407 return n;
394 }
408 }
395
409
396 int uartgetnc(uart_t uart,char* c,int n)
410 int uartgetnc(uart_t uart,char* c,int n)
397 {
411 {
398 int l=0;
412 int l=0;
399 while(l<n)
413 while(l<n)
400 {
414 {
401 *c++=uartgetc(uart);
415 *c++=uartgetc(uart);
402 l++;
416 l++;
403 }
417 }
404 return n;
418 return n;
405 }
419 }
406
420
407 int uartavailiabledata(uart_t uart)
421 int uartavailiabledata(uart_t uart)
408 {
422 {
409 if((uart<6)&&(uart>=0))
423 if((uart<6)&&(uart>=0))
410 {
424 {
411 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
425 USART_TypeDef* _dev_ = _uart_dev_table[(int)uart];
412 if(!(_dev_->SR & (1<<5)))
426 if(!(_dev_->SR & (1<<5)))
413 return 0;
427 return 0;
414 else
428 else
415 return 1;
429 return 1;
416 }
430 }
417 return -1;
431 return -1;
418 }
432 }
419
433
420
434
421 int _uartstrwrite(streamdevice* device,void* data,int size, int n)
435 int _uartstrwrite(streamdevice* device,void* data,int size, int n)
422 {
436 {
423 return uartputnc((uart_t) device->_stream,(char*) data,size*n);
437 return uartputnc((uart_t) device->_stream,(char*) data,size*n);
424 }
438 }
425
439
426 int _uartstrread(streamdevice* device,void* data,int size, int n)
440 int _uartstrread(streamdevice* device,void* data,int size, int n)
427 {
441 {
428 return uartgetnc((uart_t) device->_stream,(char*) data,size*n);
442 return uartgetnc((uart_t) device->_stream,(char*) data,size*n);
429 }
443 }
430
444
431 int _uartstrsetpos(streamdevice* device,int pos)
445 int _uartstrsetpos(streamdevice* device,int pos)
432 {
446 {
433 return 1;
447 return 1;
434 }
448 }
435
449
436 int uartmkstreamdev(uart_t uart,streamdevice* strdev)
450 int uartmkstreamdev(uart_t uart,streamdevice* strdev)
437 {
451 {
438 strdev->_stream = (UHANDLE)uart;
452 strdev->_stream = (UHANDLE)uart;/*
439 strdev->write = (write_t)&_uartstrwrite;
453 strdev->write = (write_t)&_uartstrwrite;
440 strdev->read = (read_t)&_uartstrread;
454 strdev->read = (read_t)&_uartstrread;
441 strdev->setpos = (setpos_t)&_uartstrsetpos;
455 strdev->setpos = (setpos_t)&_uartstrsetpos;*/
456 strdev->ops = &UART_OPS;
442 strdev->streamPt = 0;
457 strdev->streamPt = 0;
443 return 1;
458 return 1;
444 }
459 }
445
460
446
461
447
462
448
463
449
464
450
465
General Comments 0
You need to be logged in to leave comments. Login now