summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbigmagic <[email protected]>2020-11-27 14:30:25 +0800
committerbigmagic <[email protected]>2020-11-27 14:30:25 +0800
commit5bcf84edcb0b9459d1fa24b700c22de4efbae899 (patch)
tree89bd7ebff2026cafcb1cc83c5057a685cb9d8ff9
parentf8c8bc1c41b382acc1e6384ba2bc1116cd6cdb97 (diff)
add raspi4 lcd driver
-rw-r--r--bsp/raspberry-pi/raspi4-32/.config31
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/Kconfig33
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/SConscript8
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/board.c3
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/drv_spi.c1
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript18
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c (renamed from bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c)22
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.h (renamed from bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.h)0
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c381
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h13
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c258
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h59
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h2299
-rw-r--r--bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c7
-rw-r--r--bsp/raspberry-pi/raspi4-32/rtconfig.h20
15 files changed, 3133 insertions, 20 deletions
diff --git a/bsp/raspberry-pi/raspi4-32/.config b/bsp/raspberry-pi/raspi4-32/.config
index 4da506e902..041075c70e 100644
--- a/bsp/raspberry-pi/raspi4-32/.config
+++ b/bsp/raspberry-pi/raspi4-32/.config
@@ -142,7 +142,9 @@ CONFIG_RT_USING_DFS_DEVFS=y
#
CONFIG_RT_USING_DEVICE_IPC=y
CONFIG_RT_PIPE_BUFSZ=512
-# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set
+CONFIG_RT_USING_SYSTEM_WORKQUEUE=y
+CONFIG_RT_SYSTEM_WORKQUEUE_STACKSIZE=2048
+CONFIG_RT_SYSTEM_WORKQUEUE_PRIORITY=23
CONFIG_RT_USING_SERIAL=y
CONFIG_RT_SERIAL_USING_DMA=y
CONFIG_RT_SERIAL_RB_BUFSZ=64
@@ -175,7 +177,7 @@ CONFIG_RT_USING_SPI=y
CONFIG_RT_USING_WDT=y
# CONFIG_RT_USING_AUDIO is not set
# CONFIG_RT_USING_SENSOR is not set
-# CONFIG_RT_USING_TOUCH is not set
+CONFIG_RT_USING_TOUCH=y
# CONFIG_RT_USING_HWCRYPTO is not set
# CONFIG_RT_USING_PULSE_ENCODER is not set
# CONFIG_RT_USING_INPUT_CAPTURE is not set
@@ -206,7 +208,13 @@ CONFIG_RT_USING_POSIX=y
#
# Socket abstraction layer
#
-# CONFIG_RT_USING_SAL is not set
+CONFIG_RT_USING_SAL=y
+
+#
+# protocol stack implement
+#
+CONFIG_SAL_USING_LWIP=y
+CONFIG_SAL_USING_POSIX=y
#
# Network interface device
@@ -616,8 +624,8 @@ CONFIG_BSP_USING_UART=y
CONFIG_RT_USING_UART0=y
# CONFIG_RT_USING_UART1 is not set
CONFIG_RT_USING_UART3=y
-CONFIG_RT_USING_UART4=y
-# CONFIG_RT_USING_UART5 is not set
+# CONFIG_RT_USING_UART4 is not set
+CONFIG_RT_USING_UART5=y
CONFIG_BSP_USING_GIC=y
CONFIG_BSP_USING_GIC400=y
# CONFIG_BSP_USING_GIC500 is not set
@@ -625,10 +633,11 @@ CONFIG_BSP_USING_PIN=y
CONFIG_BSP_USING_SPI=y
CONFIG_BSP_USING_SPI0_BUS=y
CONFIG_BSP_USING_SPI0_DEVICE0=y
-# CONFIG_BSP_USING_SPI0_DEVICE1 is not set
+CONFIG_BSP_USING_SPI0_DEVICE1=y
CONFIG_BSP_USING_CORETIMER=y
# CONFIG_BSP_USING_SYSTIMER is not set
CONFIG_BSP_USING_WDT=y
+CONFIG_BSP_USING_ETH=y
# CONFIG_BSP_USING_RTC is not set
CONFIG_BSP_USING_SDIO=y
CONFIG_BSP_USING_SDIO0=y
@@ -636,5 +645,11 @@ CONFIG_BSP_USING_SDIO0=y
#
# Board Peripheral Drivers
#
-CONFIG_BSP_USING_HDMI=y
-CONFIG_BSP_USING_HDMI_DISPLAY=y
+CONFIG_BSP_USING_LCD=y
+# CONFIG_BSP_USING_HDMI_DISPLAY is not set
+CONFIG_BSP_USING_DSI_DISPLAY=y
+# CONFIG_BSP_USING_ILI9486 is not set
+CONFIG_BSP_USING_TOUCH=y
+CONFIG_BSP_USING_DSI_TOUCH_DEV=y
+# CONFIG_BSP_USING_XPT_TOUCH_DEV is not set
+# CONFIG_USING_LCD_CONSOLE is not set
diff --git a/bsp/raspberry-pi/raspi4-32/driver/Kconfig b/bsp/raspberry-pi/raspi4-32/driver/Kconfig
index 5dca313513..42a1045e60 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/Kconfig
+++ b/bsp/raspberry-pi/raspi4-32/driver/Kconfig
@@ -93,6 +93,10 @@ menu "Hardware Drivers Config"
select RT_USING_WDT
default n
+ config BSP_USING_ETH
+ bool "Enable ETH"
+ default n
+
menuconfig BSP_USING_RTC
bool "Enable RTC"
select RT_USING_RTC
@@ -119,14 +123,37 @@ menu "Hardware Drivers Config"
endmenu
menu "Board Peripheral Drivers"
- menuconfig BSP_USING_HDMI
- bool "Enable HDMI"
+ menuconfig BSP_USING_LCD
+ bool "Enable LCD"
default n
- if BSP_USING_HDMI
+ if BSP_USING_LCD
config BSP_USING_HDMI_DISPLAY
bool "HDMI DISPLAY"
default n
+ config BSP_USING_DSI_DISPLAY
+ bool "DSI DISPLAY"
+ default n
+ config BSP_USING_ILI9486
+ bool "ILI9486 DISPLAY"
+ default n
+ endif
+
+ menuconfig BSP_USING_TOUCH
+ bool "Enable Touch"
+ default n
+
+ if BSP_USING_TOUCH
+ config BSP_USING_DSI_TOUCH_DEV
+ bool "DSI TOUCH"
+ default n
+ config BSP_USING_XPT_TOUCH_DEV
+ bool "XPT TOUCH"
+ default n
endif
+
+ config USING_LCD_CONSOLE
+ bool "LCD CONSOLE"
+ default n
endmenu
endmenu
diff --git a/bsp/raspberry-pi/raspi4-32/driver/SConscript b/bsp/raspberry-pi/raspi4-32/driver/SConscript
index 64c764c1b3..c641378249 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/SConscript
+++ b/bsp/raspberry-pi/raspi4-32/driver/SConscript
@@ -1,9 +1,17 @@
+# RT-Thread building script for component
from building import *
cwd = GetCurrentDir()
src = Glob('*.c') + Glob('*.cpp')
CPPPATH = [cwd, str(Dir('#'))]
+if not GetDepend('BSP_USING_ETH'):
+ SrcRemove(src, ['drv_eth.c'])
+if not GetDepend('BSP_USING_SPI'):
+ SrcRemove(src, ['drv_spi.c'])
+if not GetDepend('BSP_USING_WDT'):
+ SrcRemove(src, ['drv_wdt.c'])
+
group = DefineGroup('driver', src, depend = [''], CPPPATH = CPPPATH)
# build for sub-directory
diff --git a/bsp/raspberry-pi/raspi4-32/driver/board.c b/bsp/raspberry-pi/raspi4-32/driver/board.c
index 263745fafc..3e81b2e537 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/board.c
+++ b/bsp/raspberry-pi/raspi4-32/driver/board.c
@@ -21,7 +21,8 @@
struct mem_desc platform_mem_desc[] = {
{0x0, 0x6400000, 0x0, NORMAL_MEM},
{0x8000000, 0x8800000, 0x8000000, DEVICE_MEM}, //mbox msg
- {0x0EA00000, 0x0EE00000, 0x0EA00000, DEVICE_MEM}, //framebuffer
+ {0x0E000000, 0x0EE00000, 0x0E000000, DEVICE_MEM}, //framebuffer
+ {0x0F400000, 0x0FA00000, 0x0F400000, DEVICE_MEM}, //dsi_touch
{0xFD500000, 0xFDA00000, 0xFD500000, DEVICE_MEM}, //gmac
{0xFE000000, 0xFE400000, 0xFE000000, DEVICE_MEM}, //peripheral
{0xFF800000, 0xFFA00000, 0xFF800000, DEVICE_MEM} //gic
diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c b/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c
index d256fca254..f0c6351d7f 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c
+++ b/bsp/raspberry-pi/raspi4-32/driver/drv_spi.c
@@ -75,7 +75,6 @@ static rt_err_t raspi_spi_configure(struct rt_spi_device *device, struct rt_spi_
{
RT_ASSERT(cfg != RT_NULL);
RT_ASSERT(device != RT_NULL);
- rt_uint16_t divider;
struct raspi_spi_device* hw_config = (struct raspi_spi_device *)(device->parent.user_data);
struct raspi_spi_hw_config *hwcfg = (struct raspi_spi_hw_config *)hw_config->spi_hw_config;
// spi clear fifo
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript b/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript
new file mode 100644
index 0000000000..ad749bcb9b
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/Sconscript
@@ -0,0 +1,18 @@
+# RT-Thread building script for component
+
+from building import *
+
+cwd = GetCurrentDir()
+src = Glob('*.c') + Glob('*.cpp')
+CPPPATH = [cwd]
+
+if not (GetDepend('BSP_USING_HDMI_DISPLAY') or GetDepend('BSP_USING_DSI_DISPLAY')):
+ SrcRemove(src, ['drv_hdmi.c'])
+if not GetDepend('BSP_USING_ILI9486'):
+ SrcRemove(src, ['drv_ili9486.c'])
+if not GetDepend('USING_LCD_CONSOLE'):
+ SrcRemove(src, ['lcd_console.c'])
+
+group = DefineGroup('drv_lcd', src, depend = ['BSP_USING_LCD'], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c
index a8d68fd9cf..955e55bcf5 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.c
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.c
@@ -13,10 +13,14 @@
#include "mbox.h"
#include "drv_hdmi.h"
-#ifdef BSP_USING_HDMI
+#ifdef USING_LCD_CONSOLE
+#include "lcd_console.h"
+#endif
+
+#if defined(BSP_USING_HDMI_DISPLAY) || defined(BSP_USING_DSI_DISPLAY)
#define LCD_WIDTH (800)
#define LCD_HEIGHT (480)
-#define LCD_DEPTH (32)
+#define LCD_DEPTH (4)
#define LCD_BPP (32)
#define TAG_ALLOCATE_BUFFER 0x00040001
@@ -84,6 +88,9 @@ rt_size_t hdmi_fb_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t size)
rt_size_t hdmi_fb_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
{
+#ifdef USING_LCD_CONSOLE
+ fb_print((char*)buffer);
+#endif
return size;
}
@@ -105,7 +112,7 @@ rt_err_t hdmi_fb_control(rt_device_t dev, int cmd, void *args)
RT_ASSERT(info != RT_NULL);
info->pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB888;
- info->bits_per_pixel= LCD_DEPTH;
+ info->bits_per_pixel= 32;
info->width = lcd->width;
info->height = lcd->height;
info->framebuffer = lcd->fb;
@@ -285,12 +292,18 @@ void *bcm271x_mbox_fb_alloc(int width, int height, int bpp, int nrender)
mbox[34] = TAG_END;
mbox_call(8, MMU_DISABLE);
+
return (void *)((rt_uint32_t)(mbox[5] & 0x3fffffff));
}
int hdmi_fb_init(void)
{
_hdmi.fb = (rt_uint8_t *)bcm271x_mbox_fb_alloc(LCD_WIDTH, LCD_HEIGHT, LCD_BPP, 1);
+ if(_hdmi.fb == RT_NULL)
+ {
+ rt_kprintf("init dsi or hdmi err!\n");
+ return 0;
+ }
bcm271x_mbox_fb_setoffset(0, 0);
bcm271x_mbox_fb_set_porder(0);
_hdmi.width = LCD_WIDTH;
@@ -299,8 +312,9 @@ int hdmi_fb_init(void)
_hdmi.pitch = 0;
_hdmi.pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB888;
+ rt_memset(_hdmi.fb, 0, LCD_WIDTH*LCD_HEIGHT*(LCD_BPP/8));
//rt_kprintf("_hdmi.fb is %p\n", _hdmi.fb);
- rt_hdmi_fb_device_init(&_hdmi, "lcd");
+ rt_hdmi_fb_device_init(&_hdmi, "hdmi");
return 0;
}
diff --git a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.h
index c9a06358d0..c9a06358d0 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/drv_hdmi.h
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_hdmi.h
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c
new file mode 100644
index 0000000000..c2317bd112
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.c
@@ -0,0 +1,381 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-08 bigmagic first version
+ */
+#include <rtthread.h>
+#include <rtdevice.h>
+
+#include <raspi4.h>
+#include <drv_spi.h>
+#include "drv_ili9486.h"
+
+#ifdef USING_LCD_CONSOLE
+#include "lcd_console.h"
+#endif
+
+//http://www.lcdwiki.com/MHS-3.5inch_RPi_Display
+#define LCD_DEVICE_NAME ("spi0.0")
+
+#define LCD_SPI_SEND_FAST
+//waveshare
+#define LCD_SCREEN_WIDTH (320)
+#define LCD_SCREEN_HEIGHT (480)
+
+#define LCD_RESET_PIN (25)
+#define LCD_RS_PIN (24)
+
+#define LCD_SPI_FREQ_MAX (125*1000*1000)
+
+uint16_t LCD_HEIGHT = LCD_SCREEN_HEIGHT;
+uint16_t LCD_WIDTH = LCD_SCREEN_WIDTH;
+
+#define SCREEN_VERTICAL_1 (0)
+#define SCREEN_HORIZONTAL_1 (1)
+#define SCREEN_VERTICAL_2 (2)
+#define SCREEN_HORIZONTAL_2 (3)
+
+struct rt_semaphore lcd_spi_lock;
+struct rt_semaphore lcd_lock;
+
+//rgb565 lcd buffer
+uint16_t _lcd_buffer[LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT];
+uint16_t send_buffer[LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT];
+
+static struct rt_spi_device *lcd_dev;
+
+static inline void send_cmd(void)
+{
+ rt_pin_write(LCD_RS_PIN, PIN_LOW);
+}
+
+static inline void send_data(void)
+{
+ rt_pin_write(LCD_RS_PIN, PIN_HIGH);
+}
+
+void writeData16(rt_uint16_t data)
+{
+ rt_uint8_t send_data[2];
+ send_data[1] = data & 0x00FF;
+ send_data[0] = ((data >> 8) & 0x00FF);
+ rt_spi_transfer(lcd_dev, &send_data[0], RT_NULL, 2);
+}
+
+void writeData(void* dev,rt_uint8_t data)
+{
+ writeData16((rt_uint16_t)(data));
+}
+
+void writeCommand(void* dev, rt_uint8_t cmd)
+{
+ send_cmd();
+ writeData16((rt_uint16_t)(cmd));
+ send_data();
+}
+
+void lcd_write_commmand(rt_uint8_t cmd)
+{
+ writeCommand(lcd_dev, cmd);
+}
+
+void lcd_write_data(rt_uint8_t data)
+{
+ writeData(lcd_dev, data);
+}
+
+/*Ser rotation of the screen - changes x0 and y0*/
+static inline void lcd_set_rotation(uint8_t rotation)
+{
+ writeCommand(lcd_dev, 0x36);
+ rt_thread_mdelay(100);
+
+ switch(rotation) {
+ case SCREEN_VERTICAL_1:
+ writeData(lcd_dev, 0x48);
+ LCD_WIDTH = 320;
+ LCD_HEIGHT = 480;
+ break;
+ case SCREEN_HORIZONTAL_1:
+ writeData(lcd_dev, 0x28);
+ LCD_WIDTH = 480;
+ LCD_HEIGHT = 320;
+ break;
+ case SCREEN_VERTICAL_2:
+ writeData(lcd_dev, 0x98);
+ LCD_WIDTH = 320;
+ LCD_HEIGHT = 480;
+ break;
+ case SCREEN_HORIZONTAL_2:
+ writeData(lcd_dev, 0xF8);
+ LCD_WIDTH = 480;
+ LCD_HEIGHT = 320;
+ break;
+ default:
+ //EXIT IF SCREEN ROTATION NOT VALID!
+ break;
+ }
+
+ if((rotation == SCREEN_VERTICAL_1) || (rotation == SCREEN_VERTICAL_2))
+ {
+ lcd_write_commmand(0x2A);
+ lcd_write_data(0x00);
+ lcd_write_data(0x00);
+ lcd_write_data(0x01);
+ lcd_write_data(0x3F);
+
+ lcd_write_commmand(0x2B);
+ lcd_write_data(0x00);
+ lcd_write_data(0x00);
+ lcd_write_data(0x01);
+ lcd_write_data(0xE0);
+ }
+
+ if((rotation == SCREEN_HORIZONTAL_1) || (rotation == SCREEN_HORIZONTAL_2))
+ {
+ lcd_write_commmand(0x2B);
+ lcd_write_data(0x00);
+ lcd_write_data(0x00);
+ lcd_write_data(0x01);
+ lcd_write_data(0x3F);
+
+ lcd_write_commmand(0x2A);
+ lcd_write_data(0x00);
+ lcd_write_data(0x00);
+ lcd_write_data(0x01);
+ lcd_write_data(0xE0);
+ }
+}
+
+static inline void fast_send_data(void)
+{
+ rt_uint32_t ii = 0;
+ rt_uint32_t tx_index = 0;
+ char *tx_data = (char *)send_buffer;
+ rt_sem_take(&lcd_spi_lock, RT_WAITING_FOREVER);
+
+ SPI_REG_CS(SPI_0_BASE) &= (~(3 << 0));
+ SPI_REG_CLK(SPI_0_BASE) = 4;
+ SPI_REG_CS(SPI_0_BASE) |= SPI_CS_TA;
+ for(tx_index=0;tx_index<(LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT) * 2;tx_index++)
+ {
+ for(ii = 0; ii < 32; ii = ii + 2)
+ {
+ SPI_REG_FIFO(SPI_0_BASE) = tx_data[tx_index + ii + 1];
+ SPI_REG_FIFO(SPI_0_BASE) = tx_data[tx_index + ii];
+ }
+ while (!(SPI_REG_CS(SPI_0_BASE) & SPI_CS_DONE));
+ SPI_REG_CS(SPI_0_BASE) |= (SPI_CS_CLEAR_TX) | (SPI_CS_CLEAR_RX);
+ tx_index = tx_index + 31;
+ }
+ SPI_REG_CS(SPI_0_BASE) |= (SPI_CS_CLEAR_TX) | (SPI_CS_CLEAR_RX);
+ SPI_REG_CS(SPI_0_BASE) &= (~SPI_CS_TA);
+ rt_sem_release(&lcd_spi_lock);
+}
+
+static inline void lcd_show(void)
+{
+
+ lcd_write_commmand(0x2C); // Memory write?
+
+ //rt_thread_mdelay(150);
+
+#ifdef LCD_SPI_SEND_FAST
+ fast_send_data();
+#else
+ int i, j;
+ for (i = 0 ; i < 30 ; i ++)
+ {
+ uint16_t *tx_data = (uint16_t*)&send_buffer[5120* i];
+ int32_t data_sz = 5120;
+ for( j=0; j<data_sz; j++)
+ {
+ writeData16(tx_data[j]);
+ }
+ }
+#endif
+
+}
+
+static void lcd_init(void)
+{
+ writeCommand(lcd_dev, 0x28);
+ rt_thread_mdelay(150);
+
+ writeCommand(lcd_dev, 0x3A); // Interface Pixel Format
+ writeData(lcd_dev, 0x55); // 16 bit/pixe
+
+ writeCommand(lcd_dev, 0xC2); // Interface Pixel Format
+ writeData(lcd_dev, 0x44);
+
+ writeCommand(lcd_dev, 0xC5); // VCOM Control
+ writeData(lcd_dev, 0x00);
+ writeData(lcd_dev, 0x00);
+ writeData(lcd_dev, 0x00);
+ writeData(lcd_dev, 0x00);
+
+ writeCommand(lcd_dev, 0xE0); // PGAMCTRL(Positive Gamma Control)
+ writeData(lcd_dev, 0x0F);
+ writeData(lcd_dev, 0x1F);
+ writeData(lcd_dev, 0x1C);
+ writeData(lcd_dev, 0x0C);
+ writeData(lcd_dev, 0x0F);
+ writeData(lcd_dev, 0x08);
+ writeData(lcd_dev, 0x48);
+ writeData(lcd_dev, 0x98);
+ writeData(lcd_dev, 0x37);
+ writeData(lcd_dev, 0x0A);
+ writeData(lcd_dev, 0x13);
+ writeData(lcd_dev, 0x04);
+ writeData(lcd_dev, 0x11);
+ writeData(lcd_dev, 0x0D);
+ writeData(lcd_dev, 0x00);
+
+ writeCommand(lcd_dev, 0xE1); // NGAMCTRL (Negative Gamma Correction)
+ writeData(lcd_dev, 0x0F);
+ writeData(lcd_dev, 0x32);
+ writeData(lcd_dev, 0x2E);
+ writeData(lcd_dev, 0x0B);
+ writeData(lcd_dev, 0x0D);
+ writeData(lcd_dev, 0x05);
+ writeData(lcd_dev, 0x47);
+ writeData(lcd_dev, 0x75);
+ writeData(lcd_dev, 0x37);
+ writeData(lcd_dev, 0x06);
+ writeData(lcd_dev, 0x10);
+ writeData(lcd_dev, 0x03);
+ writeData(lcd_dev, 0x24);
+ writeData(lcd_dev, 0x20);
+ writeData(lcd_dev, 0x00);
+
+ writeCommand(lcd_dev, 0x11); // Sleep out, also SW reset
+ rt_thread_mdelay(150);
+
+ writeCommand(lcd_dev, 0x20); // Display Inversion OFF RPi LCD (A)
+ //writeCommand(lcd_dev, 0x21); // Display Inversion ON RPi LCD (B)
+
+ lcd_set_rotation(SCREEN_VERTICAL_2);
+ writeCommand(lcd_dev, 0x29); // Display ON
+ rt_thread_mdelay(150);
+}
+
+static inline void lcd_reset(void)
+{
+ //Reset signal, low reset (pin22)
+ rt_pin_mode(LCD_RESET_PIN,PIN_MODE_OUTPUT);
+
+ rt_pin_write(LCD_RESET_PIN, PIN_HIGH);
+ rt_thread_mdelay(100);
+ rt_pin_write(LCD_RESET_PIN, PIN_LOW);
+ rt_thread_mdelay(100);
+ rt_pin_write(LCD_RESET_PIN, PIN_HIGH);
+}
+
+
+rt_err_t ili9486_open(rt_device_t dev, rt_uint16_t oflag)
+{
+ return RT_EOK;
+}
+
+rt_err_t ili9486_close(rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+rt_size_t ili9486_read(rt_device_t dev, rt_off_t pos, void *buf, rt_size_t size)
+{
+ return 0;
+}
+
+rt_size_t ili9486_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
+{
+#ifdef USING_LCD_CONSOLE
+ fb_print((char*)buffer);
+#endif
+ return size;
+}
+
+rt_err_t ili9486_control(rt_device_t dev, int cmd, void *args)
+{
+ rt_sem_take(&lcd_lock, RT_WAITING_FOREVER);
+ switch (cmd)
+ {
+ case RTGRAPHIC_CTRL_RECT_UPDATE:
+ {
+ struct rt_device_rect_info *info = (struct rt_device_rect_info*)args;
+ info = info;
+ rt_memcpy(send_buffer, _lcd_buffer, LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT * 2);
+ lcd_show();
+ }
+ break;
+
+ case RTGRAPHIC_CTRL_GET_INFO:
+ {
+ struct rt_device_graphic_info* info = (struct rt_device_graphic_info*)args;
+
+ RT_ASSERT(info != RT_NULL);
+ info->pixel_format = RTGRAPHIC_PIXEL_FORMAT_RGB565;
+ info->bits_per_pixel= 16;
+ info->width = LCD_WIDTH;
+ info->height = LCD_HEIGHT;
+ info->framebuffer = (void *)_lcd_buffer;//lcd->fb;
+ }
+ break;
+ }
+ rt_sem_release(&lcd_lock);
+ return RT_EOK;
+}
+
+#ifdef RT_USING_DEVICE_OPS
+const static struct rt_device_ops ili9486_ops =
+{
+ RT_NULL,
+ ili9486_open,
+ ili9486_close,
+ ili9486_read,
+ ili9486_write,
+ ili9486_control,
+};
+#endif
+
+static int hw_ili9486_lcd_init(void)
+{
+ struct rt_device *device;
+ device = rt_malloc(sizeof(struct rt_device));
+ rt_memset(device, 0, sizeof(struct rt_device));
+
+ lcd_reset();
+ rt_pin_mode(LCD_RS_PIN, PIN_MODE_OUTPUT);
+ lcd_dev = (struct rt_spi_device *)rt_device_find(LCD_DEVICE_NAME);
+ if (!lcd_dev)
+ {
+ rt_kprintf("no %s!\n", LCD_DEVICE_NAME);
+ }
+ lcd_dev->config.max_hz = LCD_SPI_FREQ_MAX;//125M
+ lcd_init();
+
+ rt_sem_init(&lcd_spi_lock, "lcd_spi_lock", 1, RT_IPC_FLAG_FIFO);
+ rt_sem_init(&lcd_lock, "lcd_spi_lock", 1, RT_IPC_FLAG_FIFO);
+ /* set device type */
+ device->type = RT_Device_Class_Graphic;
+ /* initialize device interface */
+#ifdef RT_USING_DEVICE_OPS
+ device->ops = &ili9486_ops;
+#else
+ device->init = RT_NULL;
+ device->open = ili9486_open;
+ device->close = ili9486_close;
+ device->read = ili9486_read;
+ device->write = ili9486_write;
+ device->control = ili9486_control;
+#endif
+ /* register to device manager */
+ rt_device_register(device, "lcd", RT_DEVICE_FLAG_RDWR);
+
+ return RT_EOK;
+}
+INIT_DEVICE_EXPORT(hw_ili9486_lcd_init);
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h
new file mode 100644
index 0000000000..b9f2658d0f
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/drv_ili9486.h
@@ -0,0 +1,13 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-08 bigmagic first version
+ */
+#ifndef __DRV_ILI9486_H__
+#define __DRV_ILI9486_H__
+
+#endif//ILI9486
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c
new file mode 100644
index 0000000000..b362f80c05
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.c
@@ -0,0 +1,258 @@
+
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-09 bigmagic first version
+ */
+
+#include "lcd_console.h"
+#include "lcd_font_20.h"
+
+#define LCD_CONSOLE_FLUSH_NOW 1
+
+#define CONSOLE_NAME "hdmi"
+#define COLOR_DELTA 0.05
+
+#ifndef LCD_CONSOLE_FLUSH_NOW
+static rt_thread_t console_flush_thread_tid = RT_NULL;
+#define CONSOLE_FLUSH_THREAD_STACK_SIZE (1024)
+#define CONSOLE_FLUSH_THREAD_PRIORITY (20)
+#define CONSOLE_FLUSH_THREAD_TIMESLICE (10)
+#define LCD_CONSOLE_DELAY (100) //100ms
+#endif
+
+static rt_device_t console_dev = RT_NULL;
+
+static fb_t console_fb;
+static rt_uint8_t* virt_buffer;
+
+static rt_uint32_t CHAR_W = 8;
+static rt_uint32_t CHAR_H = 20;
+
+static int prev_x_offset = 0;
+
+static void newline(fb_t* fb)
+{
+ uint8_t* to;
+ uint8_t* from;
+ int i;
+ fb->y++;
+ fb->x = 5 * fb->depth;
+
+ if (fb->y == (fb->height / CHAR_H))
+ {
+ to = (uint8_t*) fb->vaddr;
+ from = to + (CHAR_H * fb->pitch);
+
+ for (i = 0; i < ((fb->height - CHAR_H) * fb->pitch); i++)
+ {
+ *to++ = *from++;
+ }
+
+ if(fb->depth >= 3)
+ {
+ uint32_t *addr_32bit = (uint32_t*) (fb->vaddr) + (fb->height - CHAR_H) * fb->width;
+
+ for (i = 0; i < (CHAR_H * fb->width); i++)
+ {
+ *addr_32bit++ = fb->back;
+ }
+ }
+ else
+ {
+ uint16_t *addr_16bit = (uint16_t*) (fb->vaddr) + (fb->height - CHAR_H) * fb->width;
+
+ for (i = 0; i < (CHAR_H * fb->width); i++)
+ {
+ *addr_16bit++ = fb->back;
+ }
+ }
+ fb->y = fb->y - 1;
+ }
+}
+
+
+static void fb_draw_char(fb_t *fb, char s)
+{
+ unsigned char* addr = (unsigned char*) fb->vaddr;
+ unsigned char *glyph = (unsigned char *)lcd_console_font_dejavu_20_glyph_bitmap + lcd_console_font_dejavu_20_glyph_dsc[s - 32].glyph_index;
+ CHAR_W = lcd_console_font_dejavu_20_glyph_dsc[s - 32].w_px;
+
+ fb->x = fb->x + prev_x_offset * fb->depth;
+
+ int i, j, line, mask, bytesperline = (CHAR_W + 7) / 8;
+ int kk = (bytesperline) * 8;
+ prev_x_offset = CHAR_W + 2;
+ // calculate the offset on screen
+ int offs = (fb->y * CHAR_H * fb->pitch) + fb->x;
+
+ // display a character
+ for (j = 0; j < CHAR_H; j++)
+ {
+ // display one row
+ line = offs;
+ mask = 1;
+ mask = 0x80;
+ for (i = 0; i < kk; i++)
+ {
+ if(fb->depth >= 3)
+ {
+ *((unsigned int*) (addr + line)) = ((int) *(glyph + ((i)/8)) * 1) & mask ? fb->fore : fb->back;
+ }
+ else
+ {
+ *((unsigned short*) (addr + line)) = ((int) *(glyph + ((i)/8)) * 1) & mask ? fb->fore : fb->back;
+ }
+
+ mask >>= 1;
+ if(mask == 0)
+ {
+ mask = 0x80;
+ }
+ line += fb->depth;
+ }
+ // adjust to next line
+ glyph += bytesperline;
+ offs += fb->pitch;
+ }
+}
+
+void fb_print(char *s)
+{
+ fb_t *fb = &console_fb;
+ // draw next character if it's not zero
+ while (*s)
+ {
+ // handle carrige return
+ if (*s == '\r')
+ {
+ fb->x = 5 * fb->depth;
+ }
+ else if (*s == '\n')
+ {
+ newline(fb);
+ }
+ else if (*s == '\t')
+ {
+ //tab is 8 spaces
+ if((fb->x + 8 * fb->depth) < (fb->width) * fb->depth)
+ {
+ fb->x = fb->x + 8 * fb->depth;
+ }
+ }
+ else if (*s == '\b')
+ {
+ if (fb->x > 5 * fb->depth)
+ {
+ fb->x = fb->x - prev_x_offset * fb->depth;
+ fb_draw_char(fb, ' ');
+ }
+ }
+ else if((fb->x + prev_x_offset * fb->depth + 5 * fb->depth) >= (fb->width * fb->depth))
+ {
+ newline(fb);
+ fb_draw_char(fb, *s);
+ }
+ else
+ {
+ fb_draw_char(fb, *s);
+ }
+ s++;
+ }
+
+#ifdef LCD_CONSOLE_FLUSH_NOW
+ rt_memcpy((void *)fb->paddr, (void *)fb->vaddr, fb->size);
+ if(console_dev != RT_NULL)
+ {
+ rt_device_control(console_dev,RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
+ }
+#endif
+}
+
+#ifndef LCD_CONSOLE_FLUSH_NOW
+void lcd_console_task_entry(void *param)
+{
+ fb_t *fb = (fb_t *)param;
+ while (1)
+ {
+ rt_memcpy((void *)fb->paddr, (void *)fb->vaddr, fb->size);
+ if(console_dev != RT_NULL)
+ {
+ rt_device_control(console_dev,RTGRAPHIC_CTRL_RECT_UPDATE, RT_NULL);
+ }
+ rt_thread_mdelay(LCD_CONSOLE_DELAY);
+ }
+
+}
+#endif
+
+int lcd_console_init(void)
+{
+ struct rt_device_graphic_info info;
+ console_dev = rt_device_find(CONSOLE_NAME);
+ if(console_dev == RT_NULL)
+ {
+ rt_kprintf("no console dev!\n");
+ return 0;
+ }
+
+ if(console_dev->ref_count >= 1)
+ {
+ rt_kprintf("lcd console has open!\n");
+ return 0;
+ }
+
+ rt_device_open(console_dev,RT_DEVICE_OFLAG_RDWR);
+
+ rt_device_control(console_dev, RTGRAPHIC_CTRL_GET_INFO, &info);
+
+ virt_buffer = (rt_uint8_t* )rt_malloc(info.width * info.height * (info.bits_per_pixel/8));
+ rt_memset(virt_buffer, 0 , info.width * info.height * (info.bits_per_pixel/8));
+ console_fb.width = info.width;
+ console_fb.height = info.height;
+ console_fb.pitch = info.width * (info.bits_per_pixel/8);
+ console_fb.vaddr = (rt_uint32_t)virt_buffer;
+ console_fb.paddr = (rt_uint32_t)info.framebuffer;
+ console_fb.size = info.width * info.height * (info.bits_per_pixel/8);
+ console_fb.depth = info.bits_per_pixel/8;
+ console_fb.x = 0;
+ console_fb.y = 0;
+ if(console_fb.depth >= 3)
+ {
+ console_fb.fore = CONSOLE_WHITE_32;
+ console_fb.back = CONSOLE_BLACK_32;
+ }
+ else
+ {
+ console_fb.fore = CONSOLE_WHITE_16;
+ console_fb.back = CONSOLE_BLACK_16;
+ }
+
+#ifndef LCD_CONSOLE_FLUSH_NOW
+ console_flush_thread_tid = rt_thread_create("lcd_console", lcd_console_task_entry, (void *)&console_fb,
+ CONSOLE_FLUSH_THREAD_STACK_SIZE,
+ CONSOLE_FLUSH_THREAD_PRIORITY, CONSOLE_FLUSH_THREAD_TIMESLICE);
+ if (console_flush_thread_tid != RT_NULL)
+ rt_thread_startup(console_flush_thread_tid);
+#endif
+ /*
+ * note:
+ * if serial console and lcd console together
+ * you can add /src/kservice.c:rt_kprintf
+ * #ifdef USING_LCD_CONSOLE
+ * fb_print((char*)rt_log_buf);
+ * #endif
+ *
+ * remove rt_console_set_device(CONSOLE_NAME);
+ */
+ rt_console_set_device(CONSOLE_NAME);
+
+ rt_show_version();//show rt-thread logo
+
+ return 0;
+}
+INIT_APP_EXPORT(lcd_console_init);
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h
new file mode 100644
index 0000000000..ebe6afa068
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_console.h
@@ -0,0 +1,59 @@
+
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-09 bigmagic first version
+ */
+#ifndef __LCD_CONSOLE_H__
+#define __LCD_CONSOLE_H__
+
+#include <rtthread.h>
+
+#define RGB(r, g, b) ((((r))<<16) | (((g))<<8) | ((b)))
+#define COLOR_BLACK RGB(0, 0, 0)
+#define COLOR_GREEN RGB(0, 255, 0)
+#define COLOR_CYAN RGB(0, 255, 255)
+#define COLOR_RED RGB(255, 0, 0)
+#define COLOR_YELLOW RGB(255, 255, 0)
+#define COLOR_WHITE RGB(255, 255, 255)
+
+#define CONSOLE_WHITE_32 COLOR_WHITE
+#define CONSOLE_BLACK_32 COLOR_BLACK
+#define CONSOLE_GREEN_32 COLOR_GREEN
+#define CONSOLE_CYAN_32 COLOR_CYAN
+#define CONSOLE_RED_32 COLOR_RED
+
+
+#define RGB16(r, g, b) ((((r))<<11) | (((g))<<5) | ((b)))
+#define CONSOLE_YELLOW_16 RGB16(0x1f,0x3f,0)
+#define CONSOLE_WHITE_16 RGB16(0x1f,0x3f,0x1f)
+#define CONSOLE_BLACK_16 RGB16(0,0,0)
+#define CONSOLE_GREEN_16 RGB16(0,0x3f,0)
+#define CONSOLE_CYAN_16 RGB16(0,0x3f,0x1f)
+#define CONSOLE_RED_16 RGB16(0x1f,0,0)
+
+typedef struct
+{
+ rt_uint32_t width;
+ rt_uint32_t height;
+ rt_uint32_t vwidth;
+ rt_uint32_t vheight;
+ rt_uint32_t pitch;
+ rt_uint32_t depth;
+ rt_uint32_t fore;
+ rt_uint32_t back;
+ rt_uint32_t x;
+ rt_uint32_t y;
+ rt_uint32_t vaddr;
+ rt_uint32_t paddr;
+ rt_uint32_t size;
+} fb_t;
+
+void fb_print(char *s);
+int lcd_console_init(void);
+
+#endif//CONSOLE
diff --git a/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h
new file mode 100644
index 0000000000..7ef56d7e3c
--- /dev/null
+++ b/bsp/raspberry-pi/raspi4-32/driver/lcd/lcd_font_20.h
@@ -0,0 +1,2299 @@
+/*
+ * Copyright (c) 2006-2020, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2020-11-26 bigmagic first version
+ */
+static const uint8_t lcd_console_font_dejavu_20_glyph_bitmap[] = {
+ /*Unicode: U+0020 ( ) , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+0021 (!) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+0022 (") , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0xcc, //@@..@@
+ 0xcc, //@@..@@
+ 0xcc, //@@..@@
+ 0xcc, //@@..@@
+ 0xcc, //@@..@@
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+0023 (#) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x04, 0x40, //.....@..+@..
+ 0x04, 0x40, //....+@..+@..
+ 0x0c, 0xc0, //....%@..%%..
+ 0x0c, 0x80, //....@%..@+..
+ 0x7f, 0xf0, //.@@@@@@@@@@@
+ 0x7f, 0xf0, //.@@@@@@@@@@@
+ 0x09, 0x80, //...+@..%@...
+ 0x19, 0x00, //...@%..@+...
+ 0xff, 0xe0, //@@@@@@@@@@@.
+ 0xff, 0xe0, //@@@@@@@@@@@.
+ 0x13, 0x00, //..+@..%@....
+ 0x33, 0x00, //..%%..%%....
+ 0x32, 0x00, //..@%..@+....
+ 0x22, 0x00, //..@+..@.....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0024 ($) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x08, 0x00, //....@....
+ 0x08, 0x00, //....@....
+ 0x3e, 0x00, //.+%@@@%..
+ 0x7f, 0x00, //+@@@@@@@.
+ 0xe9, 0x00, //@@%.@.+@.
+ 0xc8, 0x00, //@@..@....
+ 0xf8, 0x00, //%@@%@....
+ 0x7e, 0x00, //.@@@@@@+.
+ 0x0f, 0x00, //...+@@@@+
+ 0x09, 0x80, //....@.+@@
+ 0x09, 0x80, //....@..@@
+ 0x8b, 0x80, //@+..@.%@@
+ 0xff, 0x00, //@@@@@@@@+
+ 0x7e, 0x00, //.%@@@@%+.
+ 0x08, 0x00, //....@....
+ 0x08, 0x00, //....@....
+ 0x08, 0x00, //....@....
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0025 (%) , Width: 15 */
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x78, 0x10, //.%@@%.....+@...
+ 0x48, 0x20, //+@++@+....@....
+ 0xcc, 0x60, //@@..@@...%%....
+ 0xcc, 0x40, //@@..@@...@.....
+ 0xcc, 0x80, //@@..@@..@+.....
+ 0xc8, 0x80, //+@++@+.+%......
+ 0x79, 0x3c, //.%@@%..@..%@@%.
+ 0x02, 0x24, //......%+.+@++@+
+ 0x02, 0x66, //.....+@..@@..@@
+ 0x04, 0x66, //.....@...@@..@@
+ 0x0c, 0x66, //....%%...@@..@@
+ 0x08, 0x24, //....@....+@++@+
+ 0x10, 0x3c, //...@+.....%@@%.
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+
+
+ /*Unicode: U+0026 (&) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x0f, 0x00, //...+@@@%+...
+ 0x1f, 0x80, //..+@@@@@@...
+ 0x30, 0x80, //..@@+..+%...
+ 0x30, 0x00, //..@@........
+ 0x38, 0x00, //..%@%.......
+ 0x3c, 0x00, //..%@@%......
+ 0x7e, 0x60, //.%@%@@%..@@.
+ 0xc7, 0x60, //%@+.+@@%+@%.
+ 0xc3, 0xc0, //@@...+@@@@..
+ 0xc1, 0x80, //@@+...+@@+..
+ 0xe1, 0xc0, //%@@+..+@@%..
+ 0x7f, 0xe0, //.@@@@@@@@@%.
+ 0x3e, 0x70, //..%@@@%.+@@%
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0027 (') , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+0028 (() , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0x30, //..%@
+ 0x20, //..@+
+ 0x60, //.%@.
+ 0x60, //.@%.
+ 0x40, //+@+.
+ 0xc0, //%@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //%@..
+ 0x40, //+@+.
+ 0x60, //.@%.
+ 0x60, //.%@.
+ 0x20, //..@+
+ 0x30, //..%@
+ 0x00, //....
+ 0x00, //....
+
+
+ /*Unicode: U+0029 ()) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0xc0, //@%..
+ 0x40, //+@..
+ 0x60, //.@%.
+ 0x60, //.%@.
+ 0x20, //.+@+
+ 0x30, //..@%
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@%
+ 0x20, //.+@+
+ 0x60, //.%@.
+ 0x60, //.@%.
+ 0x40, //+@..
+ 0xc0, //@%..
+ 0x00, //....
+ 0x00, //....
+
+
+ /*Unicode: U+002a (*) , Width: 7 */
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x10, //...@...
+ 0x92, //%..@..%
+ 0x54, //+@+@+@+
+ 0x38, //..@@@..
+ 0x38, //..@@@..
+ 0x54, //+@+@+@+
+ 0x92, //%..@..%
+ 0x10, //...@...
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+
+
+ /*Unicode: U+002b (+) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0xff, 0xf0, //@@@@@@@@@@@@
+ 0xff, 0xf0, //@@@@@@@@@@@@
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+002c (,) , Width: 3 */
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x60, //.@@
+ 0x60, //.@@
+ 0x40, //+@.
+ 0x80, //@+.
+ 0x00, //...
+ 0x00, //...
+
+
+ /*Unicode: U+002d (-) , Width: 5 */
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0xf8, //@@@@@
+ 0xf8, //@@@@@
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+ 0x00, //.....
+
+
+ /*Unicode: U+002e (.) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+002f (/) , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x0c, //....@@
+ 0x0c, //...+@%
+ 0x18, //...%@+
+ 0x18, //...@@.
+ 0x18, //...@@.
+ 0x38, //..+@%.
+ 0x30, //..@@+.
+ 0x30, //..@@..
+ 0x30, //.+@@..
+ 0x70, //.%@%..
+ 0x60, //.@@+..
+ 0x60, //.@@...
+ 0x60, //+@%...
+ 0xc0, //%@+...
+ 0xc0, //@@....
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+0030 (0) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x1c, 0x00, //..+@@@+..
+ 0x7f, 0x00, //.%@@@@@%.
+ 0x63, 0x00, //+@@+.+@@+
+ 0xc1, 0x80, //%@+...+@%
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //%@+...+@%
+ 0x63, 0x00, //+@@+.+@@+
+ 0x7f, 0x00, //.%@@@@@%.
+ 0x3e, 0x00, //..+@@@+..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0031 (1) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x38, //.+@@@...
+ 0xf8, //@@@@@...
+ 0x98, //@+.@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0032 (2) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x7c, 0x00, //.%@@@%...
+ 0xfe, 0x00, //@@@@@@@+.
+ 0x87, 0x00, //@+...@@@.
+ 0x03, 0x00, //......@@.
+ 0x03, 0x00, //......@@.
+ 0x06, 0x00, //.....%@+.
+ 0x06, 0x00, //....+@@..
+ 0x0c, 0x00, //...+@@...
+ 0x18, 0x00, //..+@@+...
+ 0x30, 0x00, //.+@@+....
+ 0x60, 0x00, //+@@+.....
+ 0xff, 0x00, //@@@@@@@@.
+ 0xff, 0x00, //@@@@@@@@.
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0033 (3) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x7e, 0x00, //.%@@@@%..
+ 0xff, 0x00, //@@@@@@@@+
+ 0x83, 0x80, //@+....%@@
+ 0x01, 0x80, //.......@@
+ 0x03, 0x80, //......%@%
+ 0x3e, 0x00, //..@@@@@+.
+ 0x3f, 0x00, //..@@@@@%.
+ 0x03, 0x80, //.....+@@%
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x83, 0x80, //%+...+@@%
+ 0xff, 0x00, //@@@@@@@@.
+ 0x7e, 0x00, //.%@@@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0034 (4) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x07, 0x00, //.....%@@..
+ 0x07, 0x00, //....+@@@..
+ 0x0b, 0x00, //....@+@@..
+ 0x1b, 0x00, //...%@.@@..
+ 0x13, 0x00, //..+@..@@..
+ 0x23, 0x00, //..@+..@@..
+ 0x63, 0x00, //.@@...@@..
+ 0x43, 0x00, //+@....@@..
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0x03, 0x00, //......@@..
+ 0x03, 0x00, //......@@..
+ 0x03, 0x00, //......@@..
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0035 (5) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x7e, //.@@@@@@.
+ 0x7e, //.@@@@@@.
+ 0x60, //.@@.....
+ 0x60, //.@@.....
+ 0x7c, //.@@@@@..
+ 0x7e, //.@@@@@@.
+ 0x47, //.%...@@%
+ 0x03, //......@@
+ 0x03, //......@@
+ 0x03, //......@@
+ 0x87, //%...+@@%
+ 0xfe, //@@@@@@@.
+ 0x7c, //.%@@@%..
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0036 (6) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x1e, 0x00, //...%@@@+.
+ 0x3f, 0x00, //.+@@@@@@.
+ 0x71, 0x00, //.@@%...%.
+ 0xe0, 0x00, //+@@......
+ 0xc0, 0x00, //@@+......
+ 0xde, 0x00, //@@.%@@%..
+ 0xff, 0x00, //@@%@@@@@.
+ 0xe3, 0x80, //@@%...%@%
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //%@.....@@
+ 0x63, 0x80, //+@%...%@%
+ 0x7f, 0x00, //.%@@@@@@.
+ 0x1e, 0x00, //..+@@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0037 (7) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x06, //.....%@+
+ 0x06, //.....@@.
+ 0x06, //....+@@.
+ 0x0c, //....%@+.
+ 0x0c, //....@@..
+ 0x0c, //....@@..
+ 0x1c, //...%@%..
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x38, //..%@%...
+ 0x30, //..@@+...
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0038 (8) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x3e, 0x00, //.+%@@@%+.
+ 0x7f, 0x00, //+@@@@@@@+
+ 0xe3, 0x80, //@@%...%@@
+ 0xc1, 0x80, //@@.....@@
+ 0xe3, 0x80, //%@%...%@%
+ 0x3e, 0x00, //.+@@@@@+.
+ 0x7f, 0x00, //.%@@@@@%.
+ 0xe3, 0x80, //%@%...%@%
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xe3, 0x80, //@@%...%@@
+ 0x7f, 0x00, //+@@@@@@@+
+ 0x3e, 0x00, //..%@@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0039 (9) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x3c, 0x00, //..%@@@+..
+ 0x7f, 0x00, //.@@@@@@%.
+ 0xe3, 0x00, //%@%...%@.
+ 0xc1, 0x80, //@@.....@%
+ 0xc1, 0x80, //@@.....@@
+ 0xe3, 0x80, //%@%...%@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0x3d, 0x80, //..%@@%.@@
+ 0x01, 0x80, //......+@@
+ 0x03, 0x00, //......@@+
+ 0x47, 0x00, //.%...%@@.
+ 0x7e, 0x00, //.@@@@@@+.
+ 0x3c, 0x00, //.+@@@%...
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+003a (:) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+003b (;) , Width: 3 */
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x60, //.@@
+ 0x60, //.@@
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x00, //...
+ 0x60, //.@@
+ 0x60, //.@@
+ 0x40, //+@.
+ 0x80, //@+.
+ 0x00, //...
+ 0x00, //...
+
+
+ /*Unicode: U+003c (<) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x20, //.........+@
+ 0x01, 0xe0, //.......%@@@
+ 0x07, 0xc0, //....+@@@@%+
+ 0x3e, 0x00, //.+%@@@@+...
+ 0xf8, 0x00, //@@@@%+.....
+ 0xf8, 0x00, //@@@@%+.....
+ 0x3e, 0x00, //.+%@@@@+...
+ 0x07, 0xc0, //....+@@@@%+
+ 0x01, 0xe0, //......+%@@@
+ 0x00, 0x20, //.........+@
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+003d (=) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+003e (>) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x80, 0x00, //@+.........
+ 0xf0, 0x00, //@@@%.......
+ 0x7c, 0x00, //+%@@@@+....
+ 0x0f, 0x80, //...+@@@@%+.
+ 0x03, 0xe0, //.....+%@@@@
+ 0x03, 0xe0, //.....+%@@@@
+ 0x0f, 0x80, //...+@@@@%+.
+ 0x7c, 0x00, //+%@@@@+....
+ 0xf0, 0x00, //@@@%+......
+ 0x80, 0x00, //@+.........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+003f (?) , Width: 7 */
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x78, //.%@@@+.
+ 0xfc, //@@@@@@+
+ 0x8e, //@+..%@@
+ 0x06, //.....@@
+ 0x06, //....+@%
+ 0x0c, //....@@.
+ 0x18, //...@@..
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x00, //.......
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+
+
+ /*Unicode: U+0040 (@) , Width: 16 */
+ 0x00, 0x00, //................
+ 0x00, 0x00, //................
+ 0x00, 0x00, //................
+ 0x07, 0xe0, //.....%@@@@%+....
+ 0x1f, 0xf8, //...%@@@@@@@@@+..
+ 0x3c, 0x1c, //..%@@%....+%@@+.
+ 0x70, 0x06, //.%@@........+@@.
+ 0x60, 0x03, //.@@..........+@%
+ 0xe3, 0x63, //%@%...@@.@@...@@
+ 0xc7, 0xe3, //@@...%@@@@@...@@
+ 0xc6, 0x63, //@@...@@..@@..+@@
+ 0xc6, 0x66, //@@...@@..@@.+@@+
+ 0xc7, 0xfc, //@@...%@@@@@@@@+.
+ 0xe3, 0x70, //%@%...@@.@@%+...
+ 0x60, 0x00, //.@@.............
+ 0x70, 0x00, //.%@@............
+ 0x3c, 0x30, //..@@@+....+@....
+ 0x1f, 0xf0, //...%@@@@@@@@....
+ 0x07, 0xc0, //....+%@@@%+.....
+ 0x00, 0x00, //................
+
+
+ /*Unicode: U+0041 (A) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //....+@@+....
+ 0x0f, 0x00, //....@@@@....
+ 0x0f, 0x00, //....@@@@....
+ 0x19, 0x80, //...%@++@%...
+ 0x19, 0x80, //...@@..@@...
+ 0x19, 0x80, //..+@%..%@+..
+ 0x30, 0xc0, //..@@....@@..
+ 0x3f, 0xc0, //..@@@@@@@@..
+ 0x7f, 0xe0, //.%@@@@@@@@%.
+ 0x60, 0x60, //.@@......@@.
+ 0x60, 0x60, //+@%......%@+
+ 0xc0, 0x30, //@@+......+@@
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0042 (B) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0xfc, 0x00, //@@@@@@+..
+ 0xff, 0x00, //@@@@@@@%.
+ 0xc3, 0x00, //@@...+@@.
+ 0xc3, 0x00, //@@....@@.
+ 0xc3, 0x00, //@@...+@%.
+ 0xfe, 0x00, //@@@@@@%..
+ 0xfe, 0x00, //@@@@@@@+.
+ 0xc3, 0x00, //@@....%@+
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc3, 0x80, //@@....%@@
+ 0xff, 0x00, //@@@@@@@@+
+ 0xfe, 0x00, //@@@@@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0043 (C) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x0f, 0xc0, //...+%@@@@%.
+ 0x3f, 0xe0, //..@@@@@@@@@
+ 0x70, 0x20, //.@@@+....+@
+ 0x60, 0x00, //+@@........
+ 0xc0, 0x00, //%@+........
+ 0xc0, 0x00, //@@.........
+ 0xc0, 0x00, //@@.........
+ 0xc0, 0x00, //@@.........
+ 0xc0, 0x00, //%@+........
+ 0x60, 0x00, //+@@........
+ 0x70, 0x20, //.@@@+....+@
+ 0x3f, 0xe0, //..@@@@@@@@@
+ 0x0f, 0xc0, //...+%@@@@%.
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+0044 (D) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0xfe, 0x00, //@@@@@@%+...
+ 0xff, 0x80, //@@@@@@@@@..
+ 0xc1, 0xc0, //@@....+@@@.
+ 0xc0, 0xc0, //@@......@@+
+ 0xc0, 0x60, //@@......+@@
+ 0xc0, 0x60, //@@.......@@
+ 0xc0, 0x60, //@@.......@@
+ 0xc0, 0x60, //@@.......@@
+ 0xc0, 0x60, //@@......+@@
+ 0xc0, 0xc0, //@@......@@+
+ 0xc1, 0xc0, //@@....+@@@.
+ 0xff, 0x80, //@@@@@@@@@..
+ 0xfe, 0x00, //@@@@@@%+...
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+0045 (E) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0046 (F) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xfe, //@@@@@@@.
+ 0xfe, //@@@@@@@.
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0047 (G) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x0f, 0xc0, //...+%@@@@%.
+ 0x3f, 0xe0, //..@@@@@@@@@
+ 0x70, 0x20, //.@@@+....+@
+ 0x60, 0x00, //+@@........
+ 0xc0, 0x00, //%@+........
+ 0xc3, 0xe0, //@@....@@@@@
+ 0xc3, 0xe0, //@@....@@@@@
+ 0xc0, 0x60, //@@.......@@
+ 0xc0, 0x60, //@@+......@@
+ 0x60, 0x60, //+@@......@@
+ 0x70, 0x60, //.@@@+...+@@
+ 0x3f, 0xc0, //..@@@@@@@@+
+ 0x0f, 0x80, //...+@@@@%..
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+0048 (H) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0049 (I) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+004a (J) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x70, //.%@%
+ 0xe0, //@@@.
+ 0xc0, //@%..
+
+
+ /*Unicode: U+004b (K) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0xc1, 0x80, //@@.....@@+.
+ 0xc3, 0x00, //@@....@@+..
+ 0xc6, 0x00, //@@...@@+...
+ 0xcc, 0x00, //@@..@@+....
+ 0xd8, 0x00, //@@.@@+.....
+ 0xf0, 0x00, //@@@@+......
+ 0xf0, 0x00, //@@@@.......
+ 0xd8, 0x00, //@@+@@......
+ 0xcc, 0x00, //@@.+@@.....
+ 0xc6, 0x00, //@@..+@@....
+ 0xc3, 0x00, //@@...+@@...
+ 0xc1, 0x80, //@@....+@@..
+ 0xc0, 0xc0, //@@.....+@@+
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+004c (L) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+004d (M) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0xe0, 0x70, //@@@+....+@@@
+ 0xf0, 0xf0, //@@@%....%@@@
+ 0xf0, 0xf0, //@@%@....@%@@
+ 0xd8, 0xb0, //@@.@+..+@.@@
+ 0xd9, 0xb0, //@@.@@..@@.@@
+ 0xd9, 0xb0, //@@.%@..@+.@@
+ 0xcf, 0x30, //@@..@%%@..@@
+ 0xcf, 0x30, //@@..@@@@..@@
+ 0xc6, 0x30, //@@..+@@+..@@
+ 0xc6, 0x30, //@@...@@...@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+004e (N) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0xe0, 0xc0, //@@%.....@@
+ 0xe0, 0xc0, //@@@.....@@
+ 0xf0, 0xc0, //@@@%....@@
+ 0xf0, 0xc0, //@@%@+...@@
+ 0xd8, 0xc0, //@@.@@...@@
+ 0xd8, 0xc0, //@@.%@+..@@
+ 0xcc, 0xc0, //@@..@@..@@
+ 0xc6, 0xc0, //@@..+@%.@@
+ 0xc6, 0xc0, //@@...@@.@@
+ 0xc3, 0xc0, //@@...+@@@@
+ 0xc3, 0xc0, //@@....%@@@
+ 0xc1, 0xc0, //@@.....@@@
+ 0xc1, 0xc0, //@@.....%@@
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+004f (O) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x0f, 0x80, //...+@@@@+...
+ 0x3f, 0xc0, //..@@@@@@@@..
+ 0x70, 0xe0, //.@@@+..+@@@.
+ 0x60, 0x60, //+@@......@@+
+ 0xc0, 0x30, //%@+......+@%
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //%@+......+@%
+ 0x60, 0x60, //+@@......@@+
+ 0x70, 0xe0, //.@@@+..+@@@.
+ 0x3f, 0xc0, //..@@@@@@@@..
+ 0x1f, 0x80, //...+@@@@+...
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0050 (P) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xfc, //@@@@@%+.
+ 0xfe, //@@@@@@@+
+ 0xc7, //@@...%@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc7, //@@...%@@
+ 0xfe, //@@@@@@@+
+ 0xfc, //@@@@@@+.
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0051 (Q) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x0f, 0x80, //...+@@@@%...
+ 0x3f, 0xc0, //..@@@@@@@@..
+ 0x70, 0xe0, //.@@@+..+@@@.
+ 0x60, 0x60, //+@@......@@+
+ 0xc0, 0x30, //%@+......+@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //@@........@@
+ 0xc0, 0x30, //%@+......+@%
+ 0x60, 0x60, //+@@......@@+
+ 0x70, 0xe0, //.@@@+..+@@%.
+ 0x3f, 0xc0, //..@@@@@@@%..
+ 0x1f, 0x80, //...%@@@@%...
+ 0x01, 0x80, //......+@@+..
+ 0x00, 0xc0, //.......+@@+.
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0052 (R) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0xfc, 0x00, //@@@@@@+...
+ 0xfe, 0x00, //@@@@@@@+..
+ 0xc7, 0x00, //@@...%@@..
+ 0xc3, 0x00, //@@....@@..
+ 0xc3, 0x00, //@@....@@..
+ 0xc7, 0x00, //@@...%@%..
+ 0xfe, 0x00, //@@@@@@@...
+ 0xfc, 0x00, //@@@@@@+...
+ 0xc6, 0x00, //@@..+@@...
+ 0xc3, 0x00, //@@...+@@..
+ 0xc3, 0x00, //@@....@@+.
+ 0xc1, 0x80, //@@....+@@.
+ 0xc1, 0xc0, //@@.....%@%
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0053 (S) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x3e, 0x00, //..%@@@%..
+ 0x7f, 0x00, //+@@@@@@@.
+ 0xe1, 0x00, //@@%...+%.
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@+......
+ 0x7c, 0x00, //+@@@@%+..
+ 0x3f, 0x00, //..%@@@@@.
+ 0x03, 0x80, //.....+@@%
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x83, 0x80, //@+....%@@
+ 0xff, 0x00, //@@@@@@@@+
+ 0x7e, 0x00, //.%@@@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0054 (T) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0xff, 0xf0, //@@@@@@@@@@@@
+ 0xff, 0xf0, //@@@@@@@@@@@@
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0055 (U) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@+....+@@
+ 0x61, 0x80, //+@@+..+@@+
+ 0x7f, 0x80, //.@@@@@@@@.
+ 0x1e, 0x00, //..+@@@@+..
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0056 (V) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0xc0, 0x30, //@@+......+@@
+ 0x60, 0x60, //+@%......%@+
+ 0x60, 0x60, //.@@......@@.
+ 0x60, 0x60, //.%@+....+@%.
+ 0x30, 0xc0, //..@@....@@..
+ 0x30, 0xc0, //..@@....@@..
+ 0x19, 0x80, //..+@%..%@+..
+ 0x19, 0x80, //...@@..@@...
+ 0x19, 0x80, //...%@++@%...
+ 0x0f, 0x00, //....@@@@+...
+ 0x0f, 0x00, //....@@@@....
+ 0x06, 0x00, //....+@@+....
+ 0x06, 0x00, //.....@@.....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0057 (W) , Width: 17 */
+ 0x00, 0x00, 0x00, //.................
+ 0x00, 0x00, 0x00, //.................
+ 0x00, 0x00, 0x00, //.................
+ 0xc1, 0xc1, 0x80, //@@.....@@@.....@@
+ 0xc1, 0xc1, 0x80, //%@+...+@@@+...+@%
+ 0x63, 0xe3, 0x00, //+@%...%@%@%...%@+
+ 0x63, 0x63, 0x00, //.@@...@@.@@...@@.
+ 0x63, 0x63, 0x00, //.@@...@@.@@...@@.
+ 0x63, 0x63, 0x00, //.%@+.+@%.%@+.+@%.
+ 0x36, 0x36, 0x00, //.+@%.%@+.+@%.%@+.
+ 0x36, 0x36, 0x00, //..@@.@@...@@.@@..
+ 0x36, 0x36, 0x00, //..@@+@@...@@+@@..
+ 0x3e, 0x3e, 0x00, //..%@@@%...%@@@%..
+ 0x1c, 0x1c, 0x00, //..+@@@+...+@@@+..
+ 0x1c, 0x1c, 0x00, //...@@@.....@@@...
+ 0x1c, 0x1c, 0x00, //...@@@.....@@%...
+ 0x00, 0x00, 0x00, //.................
+ 0x00, 0x00, 0x00, //.................
+ 0x00, 0x00, 0x00, //.................
+ 0x00, 0x00, 0x00, //.................
+
+
+ /*Unicode: U+0058 (X) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x70, 0xe0, //.%@%....%@%
+ 0x30, 0xc0, //..@@+..+@@.
+ 0x39, 0x80, //..%@@..@@+.
+ 0x1b, 0x80, //...@@+%@%..
+ 0x0f, 0x00, //...+@@@@...
+ 0x0e, 0x00, //....%@@+...
+ 0x0e, 0x00, //....%@@....
+ 0x0f, 0x00, //...+@@@@...
+ 0x1b, 0x00, //...@@+@@+..
+ 0x39, 0x80, //..%@%.+@@..
+ 0x31, 0xc0, //.+@@...@@%.
+ 0x60, 0xc0, //.@@+....@@.
+ 0xe0, 0xe0, //%@@.....%@%
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+0059 (Y) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0xe0, 0x70, //%@@......@@%
+ 0x60, 0x60, //.@@+....+@@.
+ 0x30, 0xc0, //..@@....@@..
+ 0x19, 0x80, //..+@%..%@+..
+ 0x19, 0x80, //...%@++@%...
+ 0x0f, 0x00, //....@@@@....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //.....@@.....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+005a (Z) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0x01, 0xc0, //.......%@@.
+ 0x03, 0x80, //......%@@..
+ 0x03, 0x00, //.....+@@+..
+ 0x07, 0x00, //.....@@%...
+ 0x0e, 0x00, //....@@%....
+ 0x1c, 0x00, //...%@@.....
+ 0x18, 0x00, //..+@@......
+ 0x30, 0x00, //.+@@+......
+ 0x70, 0x00, //.@@%.......
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+005b ([) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0xf0, //@@@@
+ 0xf0, //@@@@
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xc0, //@@..
+ 0xf0, //@@@@
+ 0xf0, //@@@@
+ 0x00, //....
+ 0x00, //....
+
+
+ /*Unicode: U+005c (\) , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0xc0, //@@....
+ 0xc0, //%@+...
+ 0x60, //+@%...
+ 0x60, //.@@...
+ 0x60, //.@@+..
+ 0x70, //.%@%..
+ 0x30, //.+@@..
+ 0x30, //..@@..
+ 0x30, //..@@+.
+ 0x38, //..+@%.
+ 0x18, //...@@.
+ 0x18, //...@@.
+ 0x18, //...%@+
+ 0x0c, //...+@%
+ 0x0c, //....@@
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+005d (]) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0xf0, //@@@@
+ 0xf0, //@@@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0xf0, //@@@@
+ 0xf0, //@@@@
+ 0x00, //....
+ 0x00, //....
+
+
+ /*Unicode: U+005e (^) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x0e, 0x00, //....@@@....
+ 0x1f, 0x00, //...%@%@%...
+ 0x31, 0x80, //..%@+.+@%..
+ 0x60, 0xc0, //.%@+...+@%.
+ 0xc0, 0x60, //%@+.....+@%
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+
+
+ /*Unicode: U+005f (_) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0xff, 0x80, //@@@@@@@@@
+ 0xff, 0x80, //@@@@@@@@@
+
+
+ /*Unicode: U+0060 (`) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0xc0, //%@..
+ 0x60, //.%@.
+ 0x30, //..%%
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+ 0x00, //....
+
+
+ /*Unicode: U+0061 (a) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x3c, //.+%@@@+.
+ 0x7e, //.@@@@@@.
+ 0x47, //.%...%@%
+ 0x03, //......@@
+ 0x3f, //.+@@@@@@
+ 0xff, //%@@@@@@@
+ 0xc3, //@@+...@@
+ 0xc7, //@@+..%@@
+ 0xff, //%@@@@%@@
+ 0x7b, //.%@@%.@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0062 (b) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xde, 0x00, //@@.%@@%..
+ 0xff, 0x00, //@@%@@@@@.
+ 0xe3, 0x80, //@@@...@@%
+ 0xc1, 0x80, //@@+...+@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xe3, 0x80, //@@@...@@%
+ 0xff, 0x00, //@@%@@@@@.
+ 0xde, 0x00, //@@.%@@%..
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0063 (c) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x1e, //..+@@@%+
+ 0x7f, //.%@@@@@@
+ 0x61, //+@@+...%
+ 0xc0, //@@+.....
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@+.....
+ 0x61, //+@@+...%
+ 0x7f, //.%@@@@@@
+ 0x1e, //..+@@@%+
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0064 (d) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x3d, 0x80, //..%@@%.@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0xe3, 0x80, //%@@...@@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xe3, 0x80, //%@@...@@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0x3d, 0x80, //..%@@%.@@
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+0065 (e) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x1f, 0x00, //..+%@@@%..
+ 0x7f, 0x80, //.%@@@@@@@.
+ 0x61, 0xc0, //+@@+...@@%
+ 0xc0, 0xc0, //@@......@@
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0xff, 0xc0, //@@@@@@@@@@
+ 0xc0, 0x00, //@@........
+ 0x60, 0x40, //+@@+....+@
+ 0x7f, 0xc0, //.%@@@@@@@@
+ 0x1f, 0x80, //..+%@@@@%.
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0066 (f) , Width: 7 */
+ 0x00, //.......
+ 0x00, //.......
+ 0x1e, //...%@@@
+ 0x3e, //..%@@@@
+ 0x30, //..@@+..
+ 0x30, //..@@...
+ 0xfe, //@@@@@@@
+ 0xfe, //@@@@@@@
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x30, //..@@...
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+
+
+ /*Unicode: U+0067 (g) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x3d, 0x80, //..%@@%.@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0xe3, 0x80, //%@@...@@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xe3, 0x80, //%@@...@@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0x3d, 0x80, //..%@@%.@@
+ 0x01, 0x80, //......+@%
+ 0x43, 0x00, //.%...+@@+
+ 0x7f, 0x00, //.@@@@@@@.
+ 0x3e, 0x00, //.+%@@@%..
+
+
+ /*Unicode: U+0068 (h) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xc0, //@@......
+ 0xde, //@@.%@@%.
+ 0xfe, //@@%@@@@+
+ 0xe7, //@@@..%@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0069 (i) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+006a (j) , Width: 4 */
+ 0x00, //....
+ 0x00, //....
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x00, //....
+ 0x00, //....
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //..@@
+ 0x30, //.+@@
+ 0xe0, //@@@+
+ 0xc0, //@@+.
+
+
+ /*Unicode: U+006b (k) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc3, 0x00, //@@....@@+
+ 0xc6, 0x00, //@@..+@@+.
+ 0xcc, 0x00, //@@.+@@+..
+ 0xd8, 0x00, //@@+@@+...
+ 0xf0, 0x00, //@@@@.....
+ 0xf0, 0x00, //@@@@+....
+ 0xd8, 0x00, //@@+@@+...
+ 0xcc, 0x00, //@@.+@@+..
+ 0xc6, 0x00, //@@..+@@+.
+ 0xc3, 0x00, //@@...+@@+
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+
+
+ /*Unicode: U+006c (l) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+ 0x00, //..
+
+
+ /*Unicode: U+006d (m) , Width: 14 */
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0xdc, 0x78, //@@.%@@+..%@@%.
+ 0xfe, 0xf8, //@@%@@@@+@@@@@+
+ 0xe7, 0x9c, //@@@..%@@@..%@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0xc3, 0x0c, //@@....@@....@@
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+ 0x00, 0x00, //..............
+
+
+ /*Unicode: U+006e (n) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xde, //@@.%@@%.
+ 0xfe, //@@%@@@@+
+ 0xe7, //@@@..%@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+006f (o) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x1e, 0x00, //..+@@@@+..
+ 0x7f, 0x80, //.%@@@@@@%.
+ 0x61, 0x80, //+@@+..+@@+
+ 0xc0, 0xc0, //@@+....+@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@......@@
+ 0xc0, 0xc0, //@@+....+@@
+ 0x61, 0x80, //+@@+..+@@+
+ 0x7f, 0x80, //.%@@@@@@%.
+ 0x1e, 0x00, //..+@@@@+..
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0070 (p) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0xde, 0x00, //@@.%@@%..
+ 0xff, 0x00, //@@%@@@@@.
+ 0xe3, 0x80, //@@@...@@%
+ 0xc1, 0x80, //@@+...+@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xe3, 0x80, //@@@...@@%
+ 0xff, 0x00, //@@%@@@@@.
+ 0xde, 0x00, //@@.%@@%..
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+ 0xc0, 0x00, //@@.......
+
+
+ /*Unicode: U+0071 (q) , Width: 9 */
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x00, 0x00, //.........
+ 0x3d, 0x80, //..%@@%.@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0xe3, 0x80, //%@@...@@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@.....@@
+ 0xc1, 0x80, //@@+...+@@
+ 0xe3, 0x80, //%@@...@@@
+ 0x7f, 0x80, //.@@@@@%@@
+ 0x3d, 0x80, //..%@@%.@@
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+ 0x01, 0x80, //.......@@
+
+
+ /*Unicode: U+0072 (r) , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0xdc, //@@.%@@
+ 0xfc, //@@%@@@
+ 0xe0, //@@@+..
+ 0xc0, //@@+...
+ 0xc0, //@@....
+ 0xc0, //@@....
+ 0xc0, //@@....
+ 0xc0, //@@....
+ 0xc0, //@@....
+ 0xc0, //@@....
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+0073 (s) , Width: 7 */
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x7c, //.+@@@%+
+ 0xfe, //%@@@@@@
+ 0xc2, //@@+...%
+ 0xe0, //@@%+...
+ 0x7c, //+@@@@@.
+ 0x1e, //..+%@@%
+ 0x06, //.....@@
+ 0x86, //%+..+@@
+ 0xfe, //@@@@@@%
+ 0x78, //.%@@@+.
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+ 0x00, //.......
+
+
+ /*Unicode: U+0074 (t) , Width: 6 */
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0xfc, //@@@@@@
+ 0xfc, //@@@@@@
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0x60, //.@@...
+ 0x60, //.@@+..
+ 0x7c, //.%@@@@
+ 0x3c, //..%@@@
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+ 0x00, //......
+
+
+ /*Unicode: U+0075 (u) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xc3, //@@....@@
+ 0xe7, //@@%..@@@
+ 0x7f, //+@@@@%@@
+ 0x7b, //.%@@%.@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+0076 (v) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x60, 0x60, //.@@......@@.
+ 0x60, 0x60, //.%@+....+@%.
+ 0x30, 0xc0, //..@@....@@..
+ 0x30, 0xc0, //..@@....@@..
+ 0x19, 0x80, //..+@%..%@+..
+ 0x19, 0x80, //...@@..@@...
+ 0x19, 0x80, //...%@.+@%...
+ 0x0f, 0x00, //...+@%@@....
+ 0x0f, 0x00, //....@@@@....
+ 0x06, 0x00, //....+@@+....
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+
+
+ /*Unicode: U+0077 (w) , Width: 15 */
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x63, 0x8c, //.@@...@@@...@@.
+ 0x63, 0x8c, //.@@...@@@...@@.
+ 0x63, 0x8c, //.%@+.+@@@+.+@%.
+ 0x36, 0xd8, //.+@%.%@+@%.%@+.
+ 0x36, 0xd8, //..@@.@@.@@.@@..
+ 0x36, 0xd8, //..@@.@%.%@.@@..
+ 0x3c, 0x78, //..%@%@+.+@%@%..
+ 0x1c, 0x70, //..+@@@...@@@+..
+ 0x1c, 0x70, //...@@@...@@@...
+ 0x1c, 0x70, //...@@%...%@@...
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+ 0x00, 0x00, //...............
+
+
+ /*Unicode: U+0078 (x) , Width: 10 */
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0xe1, 0xc0, //%@@....@@%
+ 0x61, 0x80, //.@@+..+@@.
+ 0x33, 0x00, //.+@@..@@..
+ 0x33, 0x00, //..%@++@%..
+ 0x1e, 0x00, //...@@@@...
+ 0x1e, 0x00, //...@@@@...
+ 0x33, 0x00, //..%@++@%..
+ 0x33, 0x00, //.+@@..@@+.
+ 0x61, 0x80, //.@@+..+@@.
+ 0xe1, 0xc0, //%@@....@@%
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+ 0x00, 0x00, //..........
+
+
+ /*Unicode: U+0079 (y) , Width: 12 */
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x00, 0x00, //............
+ 0x60, 0x60, //.@@......@@.
+ 0x60, 0x60, //.%@+....+@%.
+ 0x30, 0xc0, //..@@....@@..
+ 0x30, 0xc0, //..%@+..+@@..
+ 0x19, 0x80, //...@@..@@+..
+ 0x19, 0x80, //...@@+.@@...
+ 0x0f, 0x00, //...+@%%@+...
+ 0x0f, 0x00, //....@@@@....
+ 0x06, 0x00, //....+@@+....
+ 0x06, 0x00, //.....@@.....
+ 0x06, 0x00, //....+@%.....
+ 0x0c, 0x00, //....%@......
+ 0x3c, 0x00, //..@@@%......
+ 0x38, 0x00, //..@@%.......
+
+
+ /*Unicode: U+007a (z) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x06, //....+@@.
+ 0x0c, //....@@+.
+ 0x1c, //...@@@..
+ 0x38, //..%@@...
+ 0x30, //.+@@+...
+ 0x70, //.@@%....
+ 0xff, //@@@@@@@@
+ 0xff, //@@@@@@@@
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+ 0x00, //........
+
+
+ /*Unicode: U+007b ({) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0x0f, //....%@@@
+ 0x1f, //...%@@@@
+ 0x18, //...@@+..
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x38, //..%@@...
+ 0xf0, //@@@@....
+ 0xf0, //@@@@....
+ 0x38, //..%@%...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@+..
+ 0x1f, //...%@@@@
+ 0x0f, //....%@@@
+ 0x00, //........
+
+
+ /*Unicode: U+007c (|) , Width: 2 */
+ 0x00, //..
+ 0x00, //..
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+ 0xc0, //@@
+
+
+ /*Unicode: U+007d (}) , Width: 8 */
+ 0x00, //........
+ 0x00, //........
+ 0xf0, //@@@%....
+ 0xf8, //@@@@%...
+ 0x18, //..+@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x1c, //...@@%..
+ 0x0f, //....@@@@
+ 0x0f, //....@@@@
+ 0x1c, //...%@%..
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //...@@...
+ 0x18, //..+@@...
+ 0xf8, //@@@@%...
+ 0xf0, //@@@%....
+ 0x00, //........
+
+
+ /*Unicode: U+007e (~) , Width: 11 */
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x7c, 0x20, //.%@@@%...+@
+ 0xff, 0xe0, //@@@@@@@@@@@
+ 0x87, 0xc0, //@+...%@@@%.
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+ 0x00, 0x00, //...........
+};
+
+typedef struct
+{
+ uint32_t w_px :8;
+ uint32_t glyph_index :24;
+} lcd_console_font_glyph_dsc_t;
+
+/*Store the glyph descriptions*/
+static const lcd_console_font_glyph_dsc_t lcd_console_font_dejavu_20_glyph_dsc[] = {
+ {.w_px = 6, .glyph_index = 0}, /*Unicode: U+0020 ( )*/
+ {.w_px = 2, .glyph_index = 20}, /*Unicode: U+0021 (!)*/
+ {.w_px = 6, .glyph_index = 40}, /*Unicode: U+0022 (")*/
+ {.w_px = 12, .glyph_index = 60}, /*Unicode: U+0023 (#)*/
+ {.w_px = 9, .glyph_index = 100}, /*Unicode: U+0024 ($)*/
+ {.w_px = 15, .glyph_index = 140}, /*Unicode: U+0025 (%)*/
+ {.w_px = 12, .glyph_index = 180}, /*Unicode: U+0026 (&)*/
+ {.w_px = 2, .glyph_index = 220}, /*Unicode: U+0027 (')*/
+ {.w_px = 4, .glyph_index = 240}, /*Unicode: U+0028 (()*/
+ {.w_px = 4, .glyph_index = 260}, /*Unicode: U+0029 ())*/
+ {.w_px = 7, .glyph_index = 280}, /*Unicode: U+002a (*)*/
+ {.w_px = 12, .glyph_index = 300}, /*Unicode: U+002b (+)*/
+ {.w_px = 3, .glyph_index = 340}, /*Unicode: U+002c (,)*/
+ {.w_px = 5, .glyph_index = 360}, /*Unicode: U+002d (-)*/
+ {.w_px = 2, .glyph_index = 380}, /*Unicode: U+002e (.)*/
+ {.w_px = 6, .glyph_index = 400}, /*Unicode: U+002f (/)*/
+ {.w_px = 9, .glyph_index = 420}, /*Unicode: U+0030 (0)*/
+ {.w_px = 8, .glyph_index = 460}, /*Unicode: U+0031 (1)*/
+ {.w_px = 9, .glyph_index = 480}, /*Unicode: U+0032 (2)*/
+ {.w_px = 9, .glyph_index = 520}, /*Unicode: U+0033 (3)*/
+ {.w_px = 10, .glyph_index = 560}, /*Unicode: U+0034 (4)*/
+ {.w_px = 8, .glyph_index = 600}, /*Unicode: U+0035 (5)*/
+ {.w_px = 9, .glyph_index = 620}, /*Unicode: U+0036 (6)*/
+ {.w_px = 8, .glyph_index = 660}, /*Unicode: U+0037 (7)*/
+ {.w_px = 9, .glyph_index = 680}, /*Unicode: U+0038 (8)*/
+ {.w_px = 9, .glyph_index = 720}, /*Unicode: U+0039 (9)*/
+ {.w_px = 2, .glyph_index = 760}, /*Unicode: U+003a (:)*/
+ {.w_px = 3, .glyph_index = 780}, /*Unicode: U+003b (;)*/
+ {.w_px = 11, .glyph_index = 800}, /*Unicode: U+003c (<)*/
+ {.w_px = 11, .glyph_index = 840}, /*Unicode: U+003d (=)*/
+ {.w_px = 11, .glyph_index = 880}, /*Unicode: U+003e (>)*/
+ {.w_px = 7, .glyph_index = 920}, /*Unicode: U+003f (?)*/
+ {.w_px = 16, .glyph_index = 940}, /*Unicode: U+0040 (@)*/
+ {.w_px = 12, .glyph_index = 980}, /*Unicode: U+0041 (A)*/
+ {.w_px = 9, .glyph_index = 1020}, /*Unicode: U+0042 (B)*/
+ {.w_px = 11, .glyph_index = 1060}, /*Unicode: U+0043 (C)*/
+ {.w_px = 11, .glyph_index = 1100}, /*Unicode: U+0044 (D)*/
+ {.w_px = 8, .glyph_index = 1140}, /*Unicode: U+0045 (E)*/
+ {.w_px = 8, .glyph_index = 1160}, /*Unicode: U+0046 (F)*/
+ {.w_px = 11, .glyph_index = 1180}, /*Unicode: U+0047 (G)*/
+ {.w_px = 10, .glyph_index = 1220}, /*Unicode: U+0048 (H)*/
+ {.w_px = 2, .glyph_index = 1260}, /*Unicode: U+0049 (I)*/
+ {.w_px = 4, .glyph_index = 1280}, /*Unicode: U+004a (J)*/
+ {.w_px = 11, .glyph_index = 1300}, /*Unicode: U+004b (K)*/
+ {.w_px = 8, .glyph_index = 1340}, /*Unicode: U+004c (L)*/
+ {.w_px = 12, .glyph_index = 1360}, /*Unicode: U+004d (M)*/
+ {.w_px = 10, .glyph_index = 1400}, /*Unicode: U+004e (N)*/
+ {.w_px = 12, .glyph_index = 1440}, /*Unicode: U+004f (O)*/
+ {.w_px = 8, .glyph_index = 1480}, /*Unicode: U+0050 (P)*/
+ {.w_px = 12, .glyph_index = 1500}, /*Unicode: U+0051 (Q)*/
+ {.w_px = 10, .glyph_index = 1540}, /*Unicode: U+0052 (R)*/
+ {.w_px = 9, .glyph_index = 1580}, /*Unicode: U+0053 (S)*/
+ {.w_px = 12, .glyph_index = 1620}, /*Unicode: U+0054 (T)*/
+ {.w_px = 10, .glyph_index = 1660}, /*Unicode: U+0055 (U)*/
+ {.w_px = 12, .glyph_index = 1700}, /*Unicode: U+0056 (V)*/
+ {.w_px = 17, .glyph_index = 1740}, /*Unicode: U+0057 (W)*/
+ {.w_px = 11, .glyph_index = 1800}, /*Unicode: U+0058 (X)*/
+ {.w_px = 12, .glyph_index = 1840}, /*Unicode: U+0059 (Y)*/
+ {.w_px = 11, .glyph_index = 1880}, /*Unicode: U+005a (Z)*/
+ {.w_px = 4, .glyph_index = 1920}, /*Unicode: U+005b ([)*/
+ {.w_px = 6, .glyph_index = 1940}, /*Unicode: U+005c (\)*/
+ {.w_px = 4, .glyph_index = 1960}, /*Unicode: U+005d (])*/
+ {.w_px = 11, .glyph_index = 1980}, /*Unicode: U+005e (^)*/
+ {.w_px = 9, .glyph_index = 2020}, /*Unicode: U+005f (_)*/
+ {.w_px = 4, .glyph_index = 2060}, /*Unicode: U+0060 (`)*/
+ {.w_px = 8, .glyph_index = 2080}, /*Unicode: U+0061 (a)*/
+ {.w_px = 9, .glyph_index = 2100}, /*Unicode: U+0062 (b)*/
+ {.w_px = 8, .glyph_index = 2140}, /*Unicode: U+0063 (c)*/
+ {.w_px = 9, .glyph_index = 2160}, /*Unicode: U+0064 (d)*/
+ {.w_px = 10, .glyph_index = 2200}, /*Unicode: U+0065 (e)*/
+ {.w_px = 7, .glyph_index = 2240}, /*Unicode: U+0066 (f)*/
+ {.w_px = 9, .glyph_index = 2260}, /*Unicode: U+0067 (g)*/
+ {.w_px = 8, .glyph_index = 2300}, /*Unicode: U+0068 (h)*/
+ {.w_px = 2, .glyph_index = 2320}, /*Unicode: U+0069 (i)*/
+ {.w_px = 4, .glyph_index = 2340}, /*Unicode: U+006a (j)*/
+ {.w_px = 9, .glyph_index = 2360}, /*Unicode: U+006b (k)*/
+ {.w_px = 2, .glyph_index = 2400}, /*Unicode: U+006c (l)*/
+ {.w_px = 14, .glyph_index = 2420}, /*Unicode: U+006d (m)*/
+ {.w_px = 8, .glyph_index = 2460}, /*Unicode: U+006e (n)*/
+ {.w_px = 10, .glyph_index = 2480}, /*Unicode: U+006f (o)*/
+ {.w_px = 9, .glyph_index = 2520}, /*Unicode: U+0070 (p)*/
+ {.w_px = 9, .glyph_index = 2560}, /*Unicode: U+0071 (q)*/
+ {.w_px = 6, .glyph_index = 2600}, /*Unicode: U+0072 (r)*/
+ {.w_px = 7, .glyph_index = 2620}, /*Unicode: U+0073 (s)*/
+ {.w_px = 6, .glyph_index = 2640}, /*Unicode: U+0074 (t)*/
+ {.w_px = 8, .glyph_index = 2660}, /*Unicode: U+0075 (u)*/
+ {.w_px = 12, .glyph_index = 2680}, /*Unicode: U+0076 (v)*/
+ {.w_px = 15, .glyph_index = 2720}, /*Unicode: U+0077 (w)*/
+ {.w_px = 10, .glyph_index = 2760}, /*Unicode: U+0078 (x)*/
+ {.w_px = 12, .glyph_index = 2800}, /*Unicode: U+0079 (y)*/
+ {.w_px = 8, .glyph_index = 2840}, /*Unicode: U+007a (z)*/
+ {.w_px = 8, .glyph_index = 2860}, /*Unicode: U+007b ({)*/
+ {.w_px = 2, .glyph_index = 2880}, /*Unicode: U+007c (|)*/
+ {.w_px = 8, .glyph_index = 2900}, /*Unicode: U+007d (})*/
+ {.w_px = 11, .glyph_index = 2920}, /*Unicode: U+007e (~)*/
+};
diff --git a/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c b/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c
index 4d4cc033a2..894ef1f25c 100644
--- a/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c
+++ b/bsp/raspberry-pi/raspi4-32/driver/touch/drv_dsi_touch.c
@@ -52,6 +52,13 @@ static void dsi_touch_thread_entry(void *param)
{
static volatile uint32_t touchbuf;
touchbuf = bcm271x_mbox_get_touch(); //0x0f436000
+
+ if(touchbuf == RT_NULL)
+ {
+ rt_kprintf("init dsi touch err!\n");
+ return;
+ }
+
while (1)
{
struct touch_regs *regs = (struct touch_regs *)touchbuf;
diff --git a/bsp/raspberry-pi/raspi4-32/rtconfig.h b/bsp/raspberry-pi/raspi4-32/rtconfig.h
index 333aee1b9e..031b5c43ba 100644
--- a/bsp/raspberry-pi/raspi4-32/rtconfig.h
+++ b/bsp/raspberry-pi/raspi4-32/rtconfig.h
@@ -94,6 +94,9 @@
#define RT_USING_DEVICE_IPC
#define RT_PIPE_BUFSZ 512
+#define RT_USING_SYSTEM_WORKQUEUE
+#define RT_SYSTEM_WORKQUEUE_STACKSIZE 2048
+#define RT_SYSTEM_WORKQUEUE_PRIORITY 23
#define RT_USING_SERIAL
#define RT_SERIAL_USING_DMA
#define RT_SERIAL_RB_BUFSZ 64
@@ -106,6 +109,7 @@
#define RT_MMCSD_MAX_PARTITION 16
#define RT_USING_SPI
#define RT_USING_WDT
+#define RT_USING_TOUCH
/* Using USB */
@@ -119,6 +123,12 @@
/* Socket abstraction layer */
+#define RT_USING_SAL
+
+/* protocol stack implement */
+
+#define SAL_USING_LWIP
+#define SAL_USING_POSIX
/* Network interface device */
@@ -240,21 +250,25 @@
#define BSP_USING_UART
#define RT_USING_UART0
#define RT_USING_UART3
-#define RT_USING_UART4
+#define RT_USING_UART5
#define BSP_USING_GIC
#define BSP_USING_GIC400
#define BSP_USING_PIN
#define BSP_USING_SPI
#define BSP_USING_SPI0_BUS
#define BSP_USING_SPI0_DEVICE0
+#define BSP_USING_SPI0_DEVICE1
#define BSP_USING_CORETIMER
#define BSP_USING_WDT
+#define BSP_USING_ETH
#define BSP_USING_SDIO
#define BSP_USING_SDIO0
/* Board Peripheral Drivers */
-#define BSP_USING_HDMI
-#define BSP_USING_HDMI_DISPLAY
+#define BSP_USING_LCD
+#define BSP_USING_DSI_DISPLAY
+#define BSP_USING_TOUCH
+#define BSP_USING_DSI_TOUCH_DEV
#endif