diff --git a/bsp/pico/.gitattributes b/bsp/pico/.gitattributes
new file mode 100644
index 000000000..dfe077042
--- /dev/null
+++ b/bsp/pico/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/bsp/pico/.gitignore b/bsp/pico/.gitignore
new file mode 100644
index 000000000..b0651bac2
--- /dev/null
+++ b/bsp/pico/.gitignore
@@ -0,0 +1,71 @@
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Linker output
+*.ilk
+*.map
+*.exp
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+*.dep
+project/mdk/template.uvguix.*
+project/mdk/Objects
+*.scvd
+*.iex
+project/mdk/JLinkLog.txt
+project/mdk/template.uf2
+*._ac
+*.__i
+*@*
+
+*.00??
+
+project/mdk/RTE/PikaScript
+RTE_Components.h
+Pre_Include_*
+project/mdk/RTE/Acceleration/README.md
+project/mdk/RTE/Acceleration/img2c.py
+project/mdk/RTE/Acceleration/arm_2d.c
+project/mdk/RTE/Utilities/core_portme.c
diff --git a/bsp/pico/GorgonMeducer.perf_counter.1.9.4.pack b/bsp/pico/GorgonMeducer.perf_counter.1.9.4.pack
deleted file mode 100644
index 7af467163..000000000
Binary files a/bsp/pico/GorgonMeducer.perf_counter.1.9.4.pack and /dev/null differ
diff --git a/bsp/pico/GorgonMeducer.perf_counter.2.1.0.pack b/bsp/pico/GorgonMeducer.perf_counter.2.1.0.pack
new file mode 100644
index 000000000..e555a70f7
Binary files /dev/null and b/bsp/pico/GorgonMeducer.perf_counter.2.1.0.pack differ
diff --git a/bsp/pico/MDK/mdk/AC6-flash.BAT b/bsp/pico/MDK/mdk/AC6-flash.BAT
deleted file mode 100644
index 25b1ef11f..000000000
--- a/bsp/pico/MDK/mdk/AC6-flash.BAT
+++ /dev/null
@@ -1,78 +0,0 @@
-SET PATH=C:\Keil_v5\ARM\ARMCLANG\Bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\CMake\bin;C:\MinGW\bin;C:\Users\lyon\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\Scripts;C:\Program Files\PuTTY\;C:\mipsel-none-elf-win\bin;C:\Program Files\dotnet\;C:\Program Files\MATLAB\R2021b\runtime\win64;C:\Program Files\MATLAB\R2021b\bin;C:\Program Files\nodejs\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Go\bin;C:\Users\lyon\.cargo\bin;C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin;C:\Users\lyon\AppData\Local\Microsoft\WindowsApps;C:\texlive\2021\bin\win32;C:\Loongson_IDE32\msys\bin;C:\Loongson_IDE32\Toolchains\mips-mti-elf\2018.11-01\bin;C:\Users\lyon\.dotnet\tools;C:\Users\lyon\AppData\Roaming\npm;C:\Users\lyon\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\lyon\go\bin
-SET CPU_TYPE=ARMCM0P_MPU
-SET CPU_VENDOR=ARM
-SET UV2_TARGET=AC6-flash
-SET CPU_CLOCK=0x00B71B00
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\startup_rp2040.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\system_rp2040.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\clocks.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\watchdog.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pll.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\platform.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\xosc.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\irq.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\irq_handler_chain._ac"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\gpio.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\multicore.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\sync.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\critical_section.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\lock_core.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\mutex.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\sem.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\time.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\timeout_helper.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\timer.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\claim.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\queue.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pheap.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datetime.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\stdlib.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\uart.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\compile_time_choice._ac"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\runtime.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\i2c.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\spi.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\adc.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\bootrom.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\stdio_uart.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\env_wrapper.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\stdio.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\main.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\baseobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\dataarg.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\dataargs.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datalink.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datalinknode.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datamemory.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\dataqueue.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\dataqueueobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datastack.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datastring.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\datastrs.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikaobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikaparser.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikaplatform.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikavm.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\tinyobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikadebuger_debuger.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata_dict.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata_list.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata_string.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_memchecker.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_rangeobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_stringobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_sysobj.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdtask_task.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikamain-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikascript.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_memchecker-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_rangeobj-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_sysobj-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata_dict-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata_list-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastddata-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\pikastdlib_stringobj-api.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\eventrecorder.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmClang.exe" @".\objects\retarget_io.__i"
-"C:\Keil_v5\ARM\ARMCLANG\Bin\ArmLink" --Via ".\Objects\template.lnp"
diff --git a/bsp/pico/MDK/mdk/RP2040.sct b/bsp/pico/MDK/mdk/RP2040.sct
deleted file mode 100644
index 58b6bd38c..000000000
--- a/bsp/pico/MDK/mdk/RP2040.sct
+++ /dev/null
@@ -1,69 +0,0 @@
-#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc
-; command above MUST be in first line (no comment above!)
-; *************************************************************
-; *** Scatter-Loading Description File generated by uVision ***
-; *************************************************************
-
-#define FLASH_SIZE 0x00200000
-#define SRAM_SIZE (1024*248)
-
-#define STACK_0_SIZE (1024*4)
-#define STACK_1_SIZE (1024*1)
-
-#define HEAP_0_SIZE (1024*32)
-#define HEAP_1_SIZE (1024*1)
-
-#define RAMSIZE_VALID (SRAM_SIZE - \
- STACK_1_SIZE - HEAP_1_SIZE - \
- STACK_0_SIZE - HEAP_0_SIZE - 0x100)
-
-LR_STAGE2_BOOT 0x10000000 0x100 {
- ER_STAGE2_BOOT +0 0x100 {
- compile_time_choice.o (+RO)
- }
- ER_FILL ImageLimit(ER_STAGE2_BOOT) FILL 0xDEADBEEF 0x100 - ImageLength(ER_STAGE2_BOOT) {
- }
-}
-
-LR_IROM1 0x10000100 FLASH_SIZE - ImageLength(LR_STAGE2_BOOT) { ; load region size_region
-
- ER_FLASH +0 0x00200000 { ; load address = execution address
- *.o (RESET, +First)
- *(InRoot$$Sections)
- * (+RO-DATA)
-
- startup_RP2040.o (+RO)
- * (+RO-CODE)
- * (+XO)
- }
-
- ER_RAM_VECTOR_TABLE 0x20000000 {
- * (.ram_vector_table)
- }
-
- ARM_LIB_STACK +0 ALIGN 8 EMPTY STACK_0_SIZE {
- }
-
- ARM_LIB_STACK_ONE +0 ALIGN 8 EMPTY STACK_1_SIZE {
- }
- ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_0_SIZE {
- }
- ARM_LIB_HEAP_ONE +0 ALIGN 8 EMPTY HEAP_1_SIZE {
- }
-
- ER_MUTEX_ARRAY +0 {
- * (.mutex_array.*)
- * (.mutex_array)
- }
-
- ;ER_PREINIT_ARRAY +0 {
- ; * (.preinit_array.*)
- ; * (.preinit_array)
- ;}
-
- RW_IRAM +0 RAMSIZE_VALID { ; RW data
- * (+RW +ZI)
- }
-
-}
-
diff --git a/bsp/pico/MDK/mdk/RP2040_debug_in_sram.sct b/bsp/pico/MDK/mdk/RP2040_debug_in_sram.sct
deleted file mode 100644
index 37ef74716..000000000
--- a/bsp/pico/MDK/mdk/RP2040_debug_in_sram.sct
+++ /dev/null
@@ -1,86 +0,0 @@
-#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc
-; command above MUST be in first line (no comment above!)
-; *************************************************************
-; *** Scatter-Loading Description File generated by uVision ***
-; *************************************************************
-
-#define FLASH_SIZE 0x00200000
-#define SRAM_SIZE (1024*248)
-
-#define STACK_0_SIZE (1024*4)
-#define STACK_1_SIZE (1024*1)
-
-#define HEAP_0_SIZE (1024*32)
-#define HEAP_1_SIZE (1024*1)
-
-#define RAMSIZE_VALID (SRAM_SIZE - \
- STACK_1_SIZE - HEAP_1_SIZE - \
- STACK_0_SIZE - HEAP_0_SIZE - 0x100)
-
-;LR_STAGE2_BOOT 0x10000000 0x100 {
-; ER_STAGE2_BOOT +0 0x100 {
-; compile_time_choice.o (+RO)
-; }
-; ER_FILL ImageLimit(ER_STAGE2_BOOT) FILL 0xDEADBEEF 0x100 - ImageLength(ER_STAGE2_BOOT) {
-; }
-;}
-
-LR_IROM1 0x20000000 SRAM_SIZE { ; load region size_region
-
- ER_BINRAY_INFO +0 {
- * (:gdef:Reset_Handler) //!< please always make sure that Reset_Handler is placed here.
- * (.binary_info_header)
- }
-
- ;ER_RAM_VECTOR_TABLE +0 ALIGN 256 {
- ; * (.ram_vector_table)
- ;}
-
-
- ER_FLASH +0 { ; load address = execution address
- *.o (RESET, +First)
- *(InRoot$$Sections)
- * (+RO-DATA)
- startup_RP2040.o (+RO)
- }
-
- ER_MUTEX_ARRAY +0 {
- * (.mutex_array.*)
- * (.mutex_array)
- }
-
- RW_IRAM_CODE +0 {
- * (+RO-CODE)
- * (+XO)
- }
-
- ARM_LIB_STACK +0 ALIGN 8 EMPTY STACK_0_SIZE {
- }
-
- ARM_LIB_STACK_ONE +0 ALIGN 8 EMPTY STACK_1_SIZE {
- }
- ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_0_SIZE {
- }
- ARM_LIB_HEAP_ONE +0 ALIGN 8 EMPTY HEAP_1_SIZE {
- }
-
-
-
- ;ER_PREINIT_ARRAY +0 {
- ; * (.preinit_array.*)
- ; * (.preinit_array)
- ;}
-
- RW_IRAM +0 { ; RW data
- * (+RW +ZI)
- }
-
- RW_IRAM_UNINIT +0 UNINIT {
- *(.uninitialized_data*)
- *(.bss.noinit)
- }
-
-
-
-}
-
diff --git a/bsp/pico/MDK/mdk/RP2040_run_in_sram.sct b/bsp/pico/MDK/mdk/RP2040_run_in_sram.sct
deleted file mode 100644
index 913dab520..000000000
--- a/bsp/pico/MDK/mdk/RP2040_run_in_sram.sct
+++ /dev/null
@@ -1,68 +0,0 @@
-#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc
-; command above MUST be in first line (no comment above!)
-; *************************************************************
-; *** Scatter-Loading Description File generated by uVision ***
-; *************************************************************
-
-#define FLASH_SIZE 0x00200000
-#define SRAM_SIZE (1024*248)
-
-#define STACK_0_SIZE (1024*4)
-#define STACK_1_SIZE (1024*1)
-
-#define HEAP_0_SIZE (1024*32)
-#define HEAP_1_SIZE (1024*1)
-
-#define RAMSIZE_VALID (SRAM_SIZE - \
- STACK_1_SIZE - HEAP_1_SIZE - \
- STACK_0_SIZE - HEAP_0_SIZE - 0x100)
-
-LR_STAGE2_BOOT 0x10000000 0x100 {
- ER_STAGE2_BOOT +0 0x100 {
- compile_time_choice.o (+RO)
- }
- ER_FILL ImageLimit(ER_STAGE2_BOOT) FILL 0xDEADBEEF 0x100 - ImageLength(ER_STAGE2_BOOT) {
- }
-}
-
-LR_IROM1 0x10000100 FLASH_SIZE - ImageLength(LR_STAGE2_BOOT) { ; load region size_region
-
- ER_FLASH +0 0x00200000 { ; load address = execution address
- *.o (RESET, +First)
- *(InRoot$$Sections)
- * (+RO-DATA)
- startup_RP2040.o (+RO)
- }
-
- ER_RAM_VECTOR_TABLE 0x20000000 {
- * (.ram_vector_table)
- }
-
- ARM_LIB_STACK +0 ALIGN 8 EMPTY STACK_0_SIZE {
- }
-
- ARM_LIB_STACK_ONE +0 ALIGN 8 EMPTY STACK_1_SIZE {
- }
- ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_0_SIZE {
- }
- ARM_LIB_HEAP_ONE +0 ALIGN 8 EMPTY HEAP_1_SIZE {
- }
-
- ER_MUTEX_ARRAY +0 {
- * (.mutex_array.*)
- * (.mutex_array)
- }
-
- ;ER_PREINIT_ARRAY +0 {
- ; * (.preinit_array.*)
- ; * (.preinit_array)
- ;}
-
- RW_IRAM +0 RAMSIZE_VALID { ; RW data
- * (+RW +ZI)
- * (+RO-CODE)
- * (+XO)
- }
-
-}
-
diff --git a/bsp/pico/MDK/mdk/axf2uf2.bat b/bsp/pico/MDK/mdk/axf2uf2.bat
deleted file mode 100644
index 4f8c80022..000000000
--- a/bsp/pico/MDK/mdk/axf2uf2.bat
+++ /dev/null
@@ -1 +0,0 @@
-"..\..\tool\elf2uf2.exe" .\Objects\template.axf .\template.uf2
diff --git a/bsp/pico/MDK/mdk/debug_with_cmsis-dap.ini b/bsp/pico/MDK/mdk/debug_with_cmsis-dap.ini
deleted file mode 100644
index 3cf6d465b..000000000
--- a/bsp/pico/MDK/mdk/debug_with_cmsis-dap.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-
-FUNC void reset_pico(void)
-{
- exec("RESET");
- exec("G, Reset_Handler");
-}
-
-DEFINE BUTTON "Reset Pico", "reset_pico()"
-
-reset_pico();
\ No newline at end of file
diff --git a/bsp/pico/MDK/mdk/debug_with_cmsis-dap_in_ram.ini b/bsp/pico/MDK/mdk/debug_with_cmsis-dap_in_ram.ini
deleted file mode 100644
index d9c186eca..000000000
--- a/bsp/pico/MDK/mdk/debug_with_cmsis-dap_in_ram.ini
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-FUNC void debug_from_ram(void)
-{
- //extern unsigned int Image$$ARM_LIB_STACK$$ZI$$Limit;
-
- printf("Entry Point: %08x\r\n", Reset_Handler);
- printf("Main Stack Pointer: %08x\r\n", Image$$ARM_LIB_STACK$$ZI$$Limit);
-
-/*
- typedef struct {
- unsigned int ctrl;
- unsigned int load;
- unsigned int reason;
- unsigned int scratch[8];
- unsigned int tick;
- } watchdog_hw_t;
-
- #define watchdog_hw ((watchdog_hw_t *const)0x40058000)
-*/
-
- _WWORD(0x4005801C ,0xb007c0d3); //! scratch 4
- _WWORD(0x40058020 ,-0xb007c0d3 ^ (Reset_Handler | 0x01)); //! scratch 5
- _WWORD(0x40058024 ,Image$$ARM_LIB_STACK$$ZI$$Limit); //! scratch 6
- _WWORD(0x40058028 ,Reset_Handler | 0x01); //! scratch 7
-
- exec("RESET");
- //exec("BS main");
- //exec("G, Reset_Handler");
- exec("G, main");
-}
-
-DEFINE BUTTON "Reset Pico", "debug_from_ram()"
-
-debug_from_ram();
diff --git a/bsp/pico/MDK/mdk/template.uvoptx b/bsp/pico/MDK/mdk/template.uvoptx
deleted file mode 100644
index 917ab1d9e..000000000
--- a/bsp/pico/MDK/mdk/template.uvoptx
+++ /dev/null
@@ -1,1435 +0,0 @@
-
-
-
- 1.0
-
- ### uVision Project, (C) Keil Software
-
-
- *.c
- *.s*; *.src; *.a*
- *.obj; *.o
- *.lib
- *.txt; *.h; *.inc; *.md
- *.plm
- *.cpp; *.cc; *.cxx
- 0
-
-
-
- 0
- 0
-
-
-
- AC6-DebugInSRAM-printf
- 0x4
- ARM-ADS
-
- 12000000
-
- 1
- 1
- 0
- 1
- 0
-
-
- 1
- 65535
- 0
- 0
- 0
-
-
- 79
- 66
- 8
- .\Listings\
-
-
- 1
- 1
- 1
- 0
- 1
- 1
- 0
- 1
- 0
- 0
- 0
- 0
-
-
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 0
-
-
- 1
- 0
- 1
-
- 7
-
- 0
- 1
- 1
- 0
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 1
- 1
- 1
- 0
- 1
- 1
- 1
- 1
- 0
- 0
- 1
- 0
- 0
- 3
-
-
-
-
- .\debug.ini
-
-
-
-
- .\debug_with_cmsis-dap_in_ram.ini
- BIN\CMSIS_AGDI.dll
-
-
-
- 0
- CMSIS_AGDI
- -X"Any" -UAny -O718 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BC12477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN0
-
-
- 0
- JL2CM3
- -U17935099 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BC12477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO7 -FD20000000 -FC1000 -FN0
-
-
- 0
- UL2CM3
- UL2CM3(-S0 -C0 -P0 -FC1000 -FD20000000
-
-
- 0
- DLGTARM
- (1010=745,553,1156,1055,0)(1007=105,137,312,358,0)(1008=90,121,466,357,0)(1012=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)
-
-
- 0
- DLGUARM
-
-
-
- 0
- ARMRTXEVENTFLAGS
- -L70 -Z18 -C0 -M0 -T1
-
-
- 0
- DLGDARM
- (1010=75,104,525,661,1)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=643,307,887,855,1)(1012=-1,-1,-1,-1,0)
-
-
- 0
- ARMDBGFLAGS
- -T0
-
-
-
-
-
- 1
- 1
- 0x2000AC00
- 0
-
-
-
- D:\Users\lyon\AppData\Local\Arm\Packs\Keil\ARM_Compiler\1.7.2\EventRecorder.scvd
- Keil.ARM_Compiler.1.7.2
- 1
-
-
-
- 0
- Reset Pico
- debug_from_ram()
-
-
-
- 0
-
-
- 0
- 1
- 1
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
-
-
-
- 0
- 0
- 0
-
-
-
-
-
-
-
-
-
-
-
-
- Pico-SDK
- 0
- 0
- 0
- 0
-
- 1
- 1
- 1
- 0
- 0
- 0
- .\startup_RP2040.c
- startup_RP2040.c
- 0
- 0
-
-
- 1
- 2
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\cmsis\stub\CMSIS\Device\RaspberryPi\RP2040\Source\system_RP2040.c
- system_RP2040.c
- 0
- 0
-
-
- 1
- 3
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_clocks\clocks.c
- clocks.c
- 0
- 0
-
-
- 1
- 4
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_watchdog\watchdog.c
- watchdog.c
- 0
- 0
-
-
- 1
- 5
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_pll\pll.c
- pll.c
- 0
- 0
-
-
- 1
- 6
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_platform\platform.c
- platform.c
- 0
- 0
-
-
- 1
- 7
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_xosc\xosc.c
- xosc.c
- 0
- 0
-
-
- 1
- 8
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_irq\irq.c
- irq.c
- 0
- 0
-
-
- 1
- 9
- 2
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_irq\irq_handler_chain.S
- irq_handler_chain.S
- 0
- 0
-
-
- 1
- 10
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_gpio\gpio.c
- gpio.c
- 0
- 0
-
-
- 1
- 11
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_multicore\multicore.c
- multicore.c
- 0
- 0
-
-
- 1
- 12
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_sync\sync.c
- sync.c
- 0
- 0
-
-
- 1
- 13
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_sync\critical_section.c
- critical_section.c
- 0
- 0
-
-
- 1
- 14
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_sync\lock_core.c
- lock_core.c
- 0
- 0
-
-
- 1
- 15
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_sync\mutex.c
- mutex.c
- 0
- 0
-
-
- 1
- 16
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_sync\sem.c
- sem.c
- 0
- 0
-
-
- 1
- 17
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_time\time.c
- time.c
- 0
- 0
-
-
- 1
- 18
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_time\timeout_helper.c
- timeout_helper.c
- 0
- 0
-
-
- 1
- 19
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_timer\timer.c
- timer.c
- 0
- 0
-
-
- 1
- 20
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_claim\claim.c
- claim.c
- 0
- 0
-
-
- 1
- 21
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_util\queue.c
- queue.c
- 0
- 0
-
-
- 1
- 22
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_util\pheap.c
- pheap.c
- 0
- 0
-
-
- 1
- 23
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\common\pico_util\datetime.c
- datetime.c
- 0
- 0
-
-
- 1
- 24
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\host\pico_stdlib\stdlib.c
- stdlib.c
- 0
- 0
-
-
- 1
- 25
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_uart\uart.c
- uart.c
- 0
- 0
-
-
- 1
- 26
- 2
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\boot_stage2\compile_time_choice.S
- compile_time_choice.S
- 0
- 0
-
-
- 1
- 27
- 2
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\boot_stage2\boot2_w25q080.S
- boot2_w25q080.S
- 0
- 0
-
-
- 1
- 28
- 1
- 0
- 0
- 0
- .\wrapper\runtime.c
- runtime.c
- 0
- 0
-
-
- 1
- 29
- 2
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_printf\printf_none.S
- printf_none.S
- 0
- 0
-
-
- 1
- 30
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_i2c\i2c.c
- i2c.c
- 0
- 0
-
-
- 1
- 31
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_spi\spi.c
- spi.c
- 0
- 0
-
-
- 1
- 32
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\hardware_adc\adc.c
- adc.c
- 0
- 0
-
-
- 1
- 33
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_bootrom\bootrom.c
- bootrom.c
- 0
- 0
-
-
- 1
- 34
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_stdio_uart\stdio_uart.c
- stdio_uart.c
- 0
- 0
-
-
- 1
- 35
- 1
- 0
- 0
- 0
- ..\..\pico-sdk\src\rp2_common\pico_standard_link\binary_info.c
- binary_info.c
- 0
- 0
-
-
-
-
- platform
- 0
- 0
- 0
- 0
-
- 2
- 36
- 5
- 0
- 0
- 0
- .\wrapper\env_wrapper.h
- env_wrapper.h
- 0
- 0
-
-
- 2
- 37
- 5
- 0
- 0
- 0
- .\wrapper\pico\platform.h
- platform.h
- 0
- 0
-
-
- 2
- 38
- 1
- 0
- 0
- 0
- .\wrapper\env_wrapper.c
- env_wrapper.c
- 0
- 0
-
-
- 2
- 39
- 5
- 0
- 0
- 0
- .\wrapper\hardware\sync.h
- sync.h
- 0
- 0
-
-
- 2
- 40
- 1
- 0
- 0
- 0
- .\wrapper\stdio.c
- stdio.c
- 0
- 0
-
-
-
-
- Application
- 0
- 0
- 0
- 0
-
- 3
- 41
- 1
- 0
- 0
- 0
- ..\..\main.c
- main.c
- 0
- 0
-
-
-
-
- pikascript-lib
- 0
- 0
- 0
- 0
-
- 4
- 42
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_RangeObj.c
- PikaStdLib_RangeObj.c
- 0
- 0
-
-
- 4
- 43
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Dict.c
- PikaStdData_Dict.c
- 0
- 0
-
-
- 4
- 44
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdTask_Task.c
- PikaStdTask_Task.c
- 0
- 0
-
-
- 4
- 45
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_StringObj.c
- PikaStdLib_StringObj.c
- 0
- 0
-
-
- 4
- 46
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Tuple.c
- PikaStdData_Tuple.c
- 0
- 0
-
-
- 4
- 47
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c
- PikaStdLib_MemChecker.c
- 0
- 0
-
-
- 4
- 48
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaDebuger_Debuger.c
- PikaDebuger_Debuger.c
- 0
- 0
-
-
- 4
- 49
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_ByteArray.c
- PikaStdData_ByteArray.c
- 0
- 0
-
-
- 4
- 50
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_String.c
- PikaStdData_String.c
- 0
- 0
-
-
- 4
- 51
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Utils.c
- PikaStdData_Utils.c
- 0
- 0
-
-
- 4
- 52
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_List.c
- PikaStdData_List.c
- 0
- 0
-
-
- 4
- 53
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c
- PikaStdLib_SysObj.c
- 0
- 0
-
-
- 4
- 54
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c
- PikaStdData_FILEIO.c
- 0
- 0
-
-
-
-
- pikascript-api
- 0
- 0
- 0
- 0
-
- 5
- 55
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_FILEIO-api.c
- PikaStdData_FILEIO-api.c
- 0
- 0
-
-
- 5
- 56
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib-api.c
- PikaStdLib-api.c
- 0
- 0
-
-
- 5
- 57
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib_PikaObj-api.c
- PikaStdLib_PikaObj-api.c
- 0
- 0
-
-
- 5
- 58
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_Dict-api.c
- PikaStdData_Dict-api.c
- 0
- 0
-
-
- 5
- 59
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/pikaScript.c
- pikaScript.c
- 0
- 0
-
-
- 5
- 60
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_Tuple-api.c
- PikaStdData_Tuple-api.c
- 0
- 0
-
-
- 5
- 61
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdTask_Task-api.c
- PikaStdTask_Task-api.c
- 0
- 0
-
-
- 5
- 62
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaDebug-api.c
- PikaDebug-api.c
- 0
- 0
-
-
- 5
- 63
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_List-api.c
- PikaStdData_List-api.c
- 0
- 0
-
-
- 5
- 64
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaDebug_Debuger-api.c
- PikaDebug_Debuger-api.c
- 0
- 0
-
-
- 5
- 65
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib_RangeObj-api.c
- PikaStdLib_RangeObj-api.c
- 0
- 0
-
-
- 5
- 66
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaMain-api.c
- PikaMain-api.c
- 0
- 0
-
-
- 5
- 67
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData-api.c
- PikaStdData-api.c
- 0
- 0
-
-
- 5
- 68
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_ByteArray-api.c
- PikaStdData_ByteArray-api.c
- 0
- 0
-
-
- 5
- 69
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_Utils-api.c
- PikaStdData_Utils-api.c
- 0
- 0
-
-
- 5
- 70
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib_StringObj-api.c
- PikaStdLib_StringObj-api.c
- 0
- 0
-
-
- 5
- 71
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_String-api.c
- PikaStdData_String-api.c
- 0
- 0
-
-
- 5
- 72
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib_MemChecker-api.c
- PikaStdLib_MemChecker-api.c
- 0
- 0
-
-
- 5
- 73
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdLib_SysObj-api.c
- PikaStdLib_SysObj-api.c
- 0
- 0
-
-
- 5
- 74
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdTask-api.c
- PikaStdTask-api.c
- 0
- 0
-
-
- 5
- 75
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/PikaStdData_dict_keys-api.c
- PikaStdData_dict_keys-api.c
- 0
- 0
-
-
- 5
- 76
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-api/__asset_pikaModules_py_a.c
- __asset_pikaModules_py_a.c
- 0
- 0
-
-
-
-
- Python
- 0
- 0
- 0
- 0
-
- 6
- 77
- 5
- 0
- 0
- 0
- ..\..\pikascript\main.py
- main.py
- 0
- 0
-
-
-
-
- pikascript-core
- 0
- 0
- 0
- 0
-
- 7
- 78
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataLinkNode.c
- dataLinkNode.c
- 0
- 0
-
-
- 7
- 79
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataMemory.c
- dataMemory.c
- 0
- 0
-
-
- 7
- 80
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataQueue.c
- dataQueue.c
- 0
- 0
-
-
- 7
- 81
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataQueueObj.c
- dataQueueObj.c
- 0
- 0
-
-
- 7
- 82
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataStack.c
- dataStack.c
- 0
- 0
-
-
- 7
- 83
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataString.c
- dataString.c
- 0
- 0
-
-
- 7
- 84
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataStrs.c
- dataStrs.c
- 0
- 0
-
-
- 7
- 85
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\BaseObj.c
- BaseObj.c
- 0
- 0
-
-
- 7
- 86
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataArg.c
- dataArg.c
- 0
- 0
-
-
- 7
- 87
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataArgs.c
- dataArgs.c
- 0
- 0
-
-
- 7
- 88
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\dataLink.c
- dataLink.c
- 0
- 0
-
-
- 7
- 89
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\PikaCompiler.c
- PikaCompiler.c
- 0
- 0
-
-
- 7
- 90
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\PikaObj.c
- PikaObj.c
- 0
- 0
-
-
- 7
- 91
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\PikaParser.c
- PikaParser.c
- 0
- 0
-
-
- 7
- 92
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\PikaPlatform.c
- PikaPlatform.c
- 0
- 0
-
-
- 7
- 93
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\PikaVM.c
- PikaVM.c
- 0
- 0
-
-
- 7
- 94
- 1
- 0
- 0
- 0
- ..\..\pikascript\pikascript-core\TinyObj.c
- TinyObj.c
- 0
- 0
-
-
-
-
- ::CMSIS
- 0
- 0
- 0
- 1
-
-
-
- ::Compiler
- 0
- 0
- 0
- 1
-
-
-
- ::Utilities
- 0
- 0
- 0
- 1
-
-
-
diff --git a/bsp/pico/MDK/mdk/template.uvprojx b/bsp/pico/MDK/mdk/template.uvprojx
deleted file mode 100644
index d0abbe61a..000000000
--- a/bsp/pico/MDK/mdk/template.uvprojx
+++ /dev/null
@@ -1,1191 +0,0 @@
-
-
-
- 2.1
-
- ### uVision Project, (C) Keil Software
-
-
-
- AC6-DebugInSRAM-printf
- 0x4
- ARM-ADS
- 6180000::V6.18::ARMCLANG
- 1
-
-
- ARMCM0P_MPU
- ARM
- ARM.CMSIS.5.9.0
- http://www.keil.com/pack/
- IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M0+") CLOCK(12000000) ESEL ELITTLE
-
-
- UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)
- 0
- $$Device:ARMCM0P_MPU$Device\ARM\ARMCM0plus\Include\ARMCM0plus_MPU.h
-
-
-
-
-
-
-
-
-
-
- 0
- 0
-
-
-
-
-
-
- 0
- 0
- 0
- 0
- 1
-
- .\Objects\
- template
- 1
- 0
- 0
- 1
- 1
- .\Listings\
- 1
- 0
- 0
-
- 0
- 0
-
-
- 0
- 0
- 0
- 0
-
-
- 1
- 0
- ..\..\\pikascript\pikaBeforBuild-keil.bat
-
- 0
- 0
- 0
- 0
-
-
- 1
- 0
- .\axf2uf2.bat
-
- 0
- 0
- 0
- 0
-
- 0
-
-
-
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 3
-
-
- 1
-
-
- SARMCM3.DLL
- -MPU
- DARMCM1.DLL
- -pCM0+
- SARMCM3.DLL
- -MPU
- TARMCM1.DLL
- -pCM0+
-
-
-
- 1
- 0
- 0
- 0
- 16
-
-
-
-
- 1
- 1
- 0
- 1
- 1
- 4096
-
- 1
- BIN\UL2CM3.DLL
- "" ()
-
-
-
-
- 0
-
-
-
- 0
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 1
- 1
- 0
- 1
- 1
- 0
- 0
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 0
- "Cortex-M0+"
-
- 0
- 0
- 0
- 1
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 8
- 0
- 1
- 0
- 0
- 3
- 3
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 1
- 0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x20000000
- 0x20000
-
-
- 1
- 0x0
- 0x40000
-
-
- 0
- 0x0
- 0x0
-
-
- 1
- 0x0
- 0x0
-
-
- 1
- 0x0
- 0x0
-
-
- 1
- 0x0
- 0x0
-
-
- 1
- 0x0
- 0x40000
-
-
- 1
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x0
- 0x0
-
-
- 0
- 0x20000000
- 0x20000
-
-
- 0
- 0x0
- 0x0
-
-
-
-
-
- 1
- 5
- 0
- 0
- 1
- 0
- 0
- 0
- 0
- 0
- 3
- 0
- 0
- 0
- 0
- 0
- 6
- 3
- 1
- 1
- 1
- 0
- 0
-
- -include env_wrapper.h
- PICO, NDEBUG, PICO_NO_FLASH, USE_EVR_FOR_STDOUR
-
- ..\..\pico-sdk\src\rp2040\hardware_structs\include;..\..\pico-sdk\src\rp2_common\cmsis\include\cmsis;..\..\pico-sdk\src\rp2_common\cmsis\stub\CMSIS\Device\RaspberryPi\RP2040\Include;..\..\pico-sdk\src\boards\include\boards;..\..\pico-sdk\src\rp2040\hardware_regs\include;.\wrapper;..\..\pico-sdk\src\rp2_common\hardware_base\include;..\..\pico-sdk\src\rp2_common\hardware_watchdog\include;..\..\pico-sdk\src\rp2_common\hardware_pll\include;..\..\pico-sdk\src\rp2_common\hardware_xosc\include;..\..\pico-sdk\src\rp2_common\hardware_irq\include;..\..\pico-sdk\src\rp2_common\hardware_gpio\include;..\..\pico-sdk\src\rp2_common\hardware_resets\include;..\..\pico-sdk\src\rp2_common\hardware_clocks\include;..\..\pico-sdk\src\rp2_common\hardware_timer\include;..\..\pico-sdk\src\rp2_common\hardware_sync\include;..\..\pico-sdk\src\rp2_common\hardware_claim\include;..\..\pico-sdk\src\rp2_common\hardware_spi\include;..\..\pico-sdk\src\rp2_common\hardware_pwm\include;..\..\pico-sdk\src\rp2_common\hardware_i2c\include;..\..\pico-sdk\src\rp2_common\hardware_uart\include;..\..\pico-sdk\src\rp2_common\hardware_adc\include;..\..\pico-sdk\src\common\pico_base\include;..\..\pico-sdk\src\rp2_common\pico_multicore\include;..\..\pico-sdk\src\common\pico_sync\include;..\..\pico-sdk\src\common\pico_time\include;..\..\pico-sdk\src\common\pico_util\include;..\..\pico-sdk\src\common\pico_stdlib\include;..\..\pico-sdk\src\rp2_common\pico_stdio\include;..\..\pico-sdk\src;..\..\pico-sdk\src\rp2_common\pico_runtime\include;..\..\pico-sdk\src\rp2_common\pico_printf\include;..\..\pico-sdk\src\rp2_common\pico_bootrom\include;..\..\pico-sdk\src\rp2_common\pico_stdio\include;..\..\pico-sdk\src\rp2_common\pico_stdio_uart\include;..\..\pico-sdk\src\rp2_common\pico_stdio_usb\include;..\..\pico-sdk\src\common\pico_binary_info\include;..\..\pico-sdk\src\rp2_common\pico_stdio_semihosting\include;..\..\pico-sdk\src\rp2_common\boot_stage2\include;.\wrapper\pico_base;..\..\pikascript\pikascript-lib/PikaStdLib;..\..\pikascript\pikascript-api;..\..\pikascript\pikascript-core
-
-
-
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- 2
-
-
- PICO_MAX_SHARED_IRQ_HANDLERS=4,LIB_CMSIS_CORE=1,PICO_CMSIS_RENAME_EXCEPTIONS=1
-
- ..\..\pico-sdk\src\rp2040\hardware_regs\include;..\..\pico-sdk\src\rp2_common\hardware_irq\include;..\..\pico-sdk\src\rp2_common\pico_platform\include;..\..\pico-sdk\src\common\pico_base\include;.\wrapper\pico_base;..\..\pico-sdk\src\rp2_common\boot_stage2\asminclude;..\..\pico-sdk\src\rp2_common\boot_stage2\include
-
-
-
- 0
- 0
- 0
- 0
- 1
- 0
- 0x00000000
- 0x20000000
-
- .\RP2040_debug_in_sram.sct
-
-
- --diag_suppress=L6170,L6314,L6306,L6329 --entry=Reset_Handler
-
-
-
-
-
-
-
- Pico-SDK
-
-
- startup_RP2040.c
- 1
- .\startup_RP2040.c
-
-
- 2
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 6
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 0
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
- system_RP2040.c
- 1
- ..\..\pico-sdk\src\rp2_common\cmsis\stub\CMSIS\Device\RaspberryPi\RP2040\Source\system_RP2040.c
-
-
- clocks.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_clocks\clocks.c
-
-
- watchdog.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_watchdog\watchdog.c
-
-
- pll.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_pll\pll.c
-
-
- platform.c
- 1
- ..\..\pico-sdk\src\rp2_common\pico_platform\platform.c
-
-
- xosc.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_xosc\xosc.c
-
-
- irq.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_irq\irq.c
-
-
- irq_handler_chain.S
- 2
- ..\..\pico-sdk\src\rp2_common\hardware_irq\irq_handler_chain.S
-
-
- gpio.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_gpio\gpio.c
-
-
- multicore.c
- 1
- ..\..\pico-sdk\src\rp2_common\pico_multicore\multicore.c
-
-
- sync.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_sync\sync.c
-
-
- critical_section.c
- 1
- ..\..\pico-sdk\src\common\pico_sync\critical_section.c
-
-
- lock_core.c
- 1
- ..\..\pico-sdk\src\common\pico_sync\lock_core.c
-
-
- mutex.c
- 1
- ..\..\pico-sdk\src\common\pico_sync\mutex.c
-
-
- sem.c
- 1
- ..\..\pico-sdk\src\common\pico_sync\sem.c
-
-
- time.c
- 1
- ..\..\pico-sdk\src\common\pico_time\time.c
-
-
- timeout_helper.c
- 1
- ..\..\pico-sdk\src\common\pico_time\timeout_helper.c
-
-
- timer.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_timer\timer.c
-
-
- claim.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_claim\claim.c
-
-
- queue.c
- 1
- ..\..\pico-sdk\src\common\pico_util\queue.c
-
-
- pheap.c
- 1
- ..\..\pico-sdk\src\common\pico_util\pheap.c
-
-
- datetime.c
- 1
- ..\..\pico-sdk\src\common\pico_util\datetime.c
-
-
- stdlib.c
- 1
- ..\..\pico-sdk\src\host\pico_stdlib\stdlib.c
-
-
- uart.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_uart\uart.c
-
-
- compile_time_choice.S
- 2
- ..\..\pico-sdk\src\rp2_common\boot_stage2\compile_time_choice.S
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 1
- 1
- 2
- 2
- 2
- 2
- 2
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
- boot2_w25q080.S
- 2
- ..\..\pico-sdk\src\rp2_common\boot_stage2\boot2_w25q080.S
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
- runtime.c
- 1
- .\wrapper\runtime.c
-
-
- printf_none.S
- 2
- ..\..\pico-sdk\src\rp2_common\pico_printf\printf_none.S
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
-
-
-
-
-
-
-
-
-
-
-
- i2c.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_i2c\i2c.c
-
-
- spi.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_spi\spi.c
-
-
- adc.c
- 1
- ..\..\pico-sdk\src\rp2_common\hardware_adc\adc.c
-
-
- bootrom.c
- 1
- ..\..\pico-sdk\src\rp2_common\pico_bootrom\bootrom.c
-
-
- stdio_uart.c
- 1
- ..\..\pico-sdk\src\rp2_common\pico_stdio_uart\stdio_uart.c
-
-
- binary_info.c
- 1
- ..\..\pico-sdk\src\rp2_common\pico_standard_link\binary_info.c
-
-
- 2
- 0
- 0
- 0
- 0
- 0
- 2
- 2
- 2
- 2
- 11
-
-
- 1
-
-
-
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 2
- 0
- 2
- 2
- 2
- 2
- 2
- 0
- 0
- 2
- 2
- 2
- 2
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
- platform
-
-
- env_wrapper.h
- 5
- .\wrapper\env_wrapper.h
-
-
- platform.h
- 5
- .\wrapper\pico\platform.h
-
-
- env_wrapper.c
- 1
- .\wrapper\env_wrapper.c
-
-
- sync.h
- 5
- .\wrapper\hardware\sync.h
-
-
- stdio.c
- 1
- .\wrapper\stdio.c
-
-
-
-
- Application
-
-
- main.c
- 1
- ..\..\main.c
-
-
-
-
- pikascript-lib
-
-
- PikaStdLib_RangeObj.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_RangeObj.c
-
-
- PikaStdData_Dict.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Dict.c
-
-
- PikaStdTask_Task.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdTask_Task.c
-
-
- PikaStdLib_StringObj.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_StringObj.c
-
-
- PikaStdData_Tuple.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Tuple.c
-
-
- PikaStdLib_MemChecker.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c
-
-
- PikaDebuger_Debuger.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaDebuger_Debuger.c
-
-
- PikaStdData_ByteArray.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_ByteArray.c
-
-
- PikaStdData_String.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_String.c
-
-
- PikaStdData_Utils.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_Utils.c
-
-
- PikaStdData_List.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_List.c
-
-
- PikaStdLib_SysObj.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c
-
-
- PikaStdData_FILEIO.c
- 1
- ..\..\pikascript\pikascript-lib/PikaStdLib/PikaStdData_FILEIO.c
-
-
-
-
- pikascript-api
-
-
- PikaStdData_FILEIO-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_FILEIO-api.c
-
-
- PikaStdLib-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib-api.c
-
-
- PikaStdLib_PikaObj-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib_PikaObj-api.c
-
-
- PikaStdData_Dict-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_Dict-api.c
-
-
- pikaScript.c
- 1
- ..\..\pikascript\pikascript-api/pikaScript.c
-
-
- PikaStdData_Tuple-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_Tuple-api.c
-
-
- PikaStdTask_Task-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdTask_Task-api.c
-
-
- PikaDebug-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaDebug-api.c
-
-
- PikaStdData_List-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_List-api.c
-
-
- PikaDebug_Debuger-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaDebug_Debuger-api.c
-
-
- PikaStdLib_RangeObj-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib_RangeObj-api.c
-
-
- PikaMain-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaMain-api.c
-
-
- PikaStdData-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData-api.c
-
-
- PikaStdData_ByteArray-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_ByteArray-api.c
-
-
- PikaStdData_Utils-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_Utils-api.c
-
-
- PikaStdLib_StringObj-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib_StringObj-api.c
-
-
- PikaStdData_String-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_String-api.c
-
-
- PikaStdLib_MemChecker-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib_MemChecker-api.c
-
-
- PikaStdLib_SysObj-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdLib_SysObj-api.c
-
-
- PikaStdTask-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdTask-api.c
-
-
- PikaStdData_dict_keys-api.c
- 1
- ..\..\pikascript\pikascript-api/PikaStdData_dict_keys-api.c
-
-
- __asset_pikaModules_py_a.c
- 1
- ..\..\pikascript\pikascript-api/__asset_pikaModules_py_a.c
-
-
-
-
- Python
-
-
- main.py
- 5
- ..\..\pikascript\main.py
-
-
-
-
- pikascript-core
-
-
- dataLinkNode.c
- 1
- ..\..\pikascript\pikascript-core\dataLinkNode.c
-
-
- dataMemory.c
- 1
- ..\..\pikascript\pikascript-core\dataMemory.c
-
-
- dataQueue.c
- 1
- ..\..\pikascript\pikascript-core\dataQueue.c
-
-
- dataQueueObj.c
- 1
- ..\..\pikascript\pikascript-core\dataQueueObj.c
-
-
- dataStack.c
- 1
- ..\..\pikascript\pikascript-core\dataStack.c
-
-
- dataString.c
- 1
- ..\..\pikascript\pikascript-core\dataString.c
-
-
- dataStrs.c
- 1
- ..\..\pikascript\pikascript-core\dataStrs.c
-
-
- BaseObj.c
- 1
- ..\..\pikascript\pikascript-core\BaseObj.c
-
-
- dataArg.c
- 1
- ..\..\pikascript\pikascript-core\dataArg.c
-
-
- dataArgs.c
- 1
- ..\..\pikascript\pikascript-core\dataArgs.c
-
-
- dataLink.c
- 1
- ..\..\pikascript\pikascript-core\dataLink.c
-
-
- PikaCompiler.c
- 1
- ..\..\pikascript\pikascript-core\PikaCompiler.c
-
-
- PikaObj.c
- 1
- ..\..\pikascript\pikascript-core\PikaObj.c
-
-
- PikaParser.c
- 1
- ..\..\pikascript\pikascript-core\PikaParser.c
-
-
- PikaPlatform.c
- 1
- ..\..\pikascript\pikascript-core\PikaPlatform.c
-
-
- PikaVM.c
- 1
- ..\..\pikascript\pikascript-core\PikaVM.c
-
-
- TinyObj.c
- 1
- ..\..\pikascript\pikascript-core\TinyObj.c
-
-
-
-
- ::CMSIS
-
-
- ::Compiler
-
-
- ::Utilities
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- RTE\Compiler\EventRecorderConf.h
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- template
- 1
-
-
-
-
-
diff --git a/bsp/pico/MDK/mdk/wrapper/pico/platform.h b/bsp/pico/MDK/mdk/wrapper/pico/platform.h
deleted file mode 100644
index 4917dc2c2..000000000
--- a/bsp/pico/MDK/mdk/wrapper/pico/platform.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
-
-#ifndef _PICO_PLATFORM_H_
-#define _PICO_PLATFORM_H_
-
-#include
-#include "pico/types.h"
-#include "hardware/platform_defs.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \file platform.h
-* \defgroup pico_platform pico_platform
-* Compiler definitions for the selected PICO_PLATFORM
-*/
-
-#define __isr
-
-// Section naming macros
-#define __after_data(group) __attribute__((section(".after_data." group)))
-#define __not_in_flash(group) __attribute__((section(".time_critical." group)))
-#define __scratch_x(group) __attribute__((section(".scratch_x." group)))
-#define __scratch_y(group) __attribute__((section(".scratch_y." group)))
-#define __uninitialized_ram(group) __attribute__((section(".uninitialized_ram." #group))) group
-// For use with PICO_COPY_TO_RAM:
-#define __in_flash(group) __attribute__((section(".flashdata" group)))
-
-/**
- * Decorates a function name, such that the function will execute from RAM (assuming it is not inlined
- * into a flash function by the compiler)
- */
-#define __not_in_flash_func(func_name) __not_in_flash(__STRING(func_name)) func_name
-/**
- * Historical synonym for __not_in_flash_func()
- */
-#define __time_critical_func(func_name) __not_in_flash_func(func_name)
-
-/**
- * Decorates a function name, such that the function will execute from RAM, explicitly marking it as
- * noinline to prevent it being inlined into a flash function by the compiler
- */
-#define __no_inline_not_in_flash_func(func_name) __noinline __not_in_flash_func(func_name)
-
-#if !defined(__IS_COMPILER_ARM_COMPILER_6__)
-#define __packed_aligned __packed __aligned(4)
-
-
-#if defined(__GNUC__) && __GNUC__ < 7
-#define __force_inline inline __always_inline
-#else
-#define __force_inline __always_inline
-#endif
-#endif
-
-
-#ifndef count_of
-#define count_of(a) (sizeof(a)/sizeof((a)[0]))
-#endif
-
-#ifndef MAX
-#define MAX(a, b) ((a)>(b)?(a):(b))
-#endif
-
-#ifndef MIN
-#define MIN(a, b) ((b)>(a)?(a):(b))
-#endif
-
-#ifndef offsetof
-#define offsetof(__type, __member) (uintptr_t)(&(((__type *)0)->__member))
-#endif
-
-#if !defined(__IS_COMPILER_ARM_COMPILER_6__)
-/**
- * Execute a breakpoint instruction
- */
-static inline void __breakpoint(void) {
- __asm__("bkpt #0");
-}
-#endif
-
-/**
- * Ensure that the compiler does not move memory access across this method call
- */
-__force_inline static void __compiler_memory_barrier(void) {
- __asm__ volatile ("" : : : "memory");
-}
-
-// return a 32 bit handle for a raw ptr; DMA chaining for example embeds pointers in 32 bit values
-// which of course does not work if we're running the code natively on a 64 bit platforms. Therefore
-// we provide this macro which allows that code to provide a 64->32 bit mapping in host mode
-#define host_safe_hw_ptr(x) ((uintptr_t)(x))
-
-/**
- * Panic (see panic()) with the message "Unsupported".
- */
-void __attribute__((noreturn)) panic_unsupported(void);
-
-/**
- * Panic with a message. An attempt is made to output the message to all registered STDOUT drivers
- * after which this method executes a BKPT instruction.
- *
- * @param fmt format string (printf-like)
- * @param ... printf-like arguments
- */
-void __attribute__((noreturn)) panic(const char *fmt, ...);
-
-// PICO_CONFIG: PICO_NO_FPGA_CHECK, Remove the FPGA platform check for small code size reduction, type=bool, default=0, advanced=true, group=pico_runtime
-#ifndef PICO_NO_FPGA_CHECK
-#define PICO_NO_FPGA_CHECK 0
-#endif
-
-#if PICO_NO_FPGA_CHECK
-static inline bool running_on_fpga(void) {return false;}
-#else
-bool running_on_fpga(void);
-#endif
-
-/**
- * @return the RP2040 chip revision number
- */
-uint8_t rp2040_chip_version(void);
-
-/**
- * @return the RP2040 rom version number
- */
-static inline uint8_t rp2040_rom_version(void) {
- return *(uint8_t*)0x13;
-}
-
-/**
- * Empty function intended to be called by any tight hardware polling loop. using this ubiquitously
- * makes it much easier to find tight loops, but also in the future \#ifdef-ed support for lockup
- * debugging might be added
- */
-static inline void tight_loop_contents(void) {}
-
-/**
- * Helper macro for making chain DMA code portable to PICO_PLATFORM=host. The problem here is
- * that embedded pointers in the data are only 32 bit, which is a problem if the host
- * system is 64 bit. This macro is zero cost on the actual device, but in host mode
- * it provides a 64->32 bit mapping
- */
-#define native_safe_hw_ptr(x) ((uintptr_t)(x))
-
-/**
- * Multiplies a by b using multiply instruction using the ARM mul instruction regardless of values;
- * i.e. this is a 1 cycle operation.
- *
- * \param a the first operand
- * \param b the second operand
- * \return a * b
- */
-__force_inline static int32_t __mul_instruction(int32_t a, int32_t b) {
- asm ("mul %0, %1" : "+l" (a) : "l" (b) : );
- return a;
-}
-
-/**
- * Efficiently Multiplies value a by possibly constant value b.
- * If b is known to be constant and not zero or a power of 2, then a mul instruction is used rather than gcc's default
- * which is often a slow combination of shifts and adds
- *
- * \param a the first operand
- * \param b the second operand
- * \return a * b
- */
-#define __fast_mul(a, b) __builtin_choose_expr(__builtin_constant_p(b) && !__builtin_constant_p(a), \
-(__builtin_popcount(b) >= 2 ? __mul_instruction(a,b) : (a)*(b)), \
-(a)*(b))
-
-
-#if defined(__IS_COMPILER_ARM_COMPILER_6__)
-# define WRAPPER_FUNC(__FUNC) $Sub$$##__FUNC
-# define REAL_FUNC(__FUNC) $Super$$## __FUNC
-#else
-# define WRAPPER_FUNC(x) __wrap_ ## x
-# define REAL_FUNC(x) __real_ ## x
-#endif
-#define __check_type_compatible(type_a, type_b) static_assert(__builtin_types_compatible_p(type_a, type_b), __STRING(type_a) " is not compatible with " __STRING(type_b));
-
-/**
- * Get the current exception level on this core
- * \return the exception number if the CPU is handling an exception, or 0 otherwise
- */
-uint __get_current_exception(void);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
diff --git a/bsp/pico/bsp/Config/DEV_Config.c b/bsp/pico/bsp/Config/DEV_Config.c
new file mode 100644
index 000000000..31dbc6ff2
--- /dev/null
+++ b/bsp/pico/bsp/Config/DEV_Config.c
@@ -0,0 +1,240 @@
+/*****************************************************************************
+* | File : DEV_Config.c
+* | Author :
+* | Function : Hardware underlying interface
+* | Info :
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-16
+* | Info :
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documnetation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of theex Software, and to permit persons to whom the Software is
+# furished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+******************************************************************************/
+#include "DEV_Config.h"
+#include
+
+#define SPI_PORT spi1
+#define I2C_PORT spi1
+
+/**
+ * GPIO
+**/
+int EPD_RST_PIN;
+int EPD_DC_PIN;
+int EPD_CS_PIN;
+int EPD_BL_PIN;
+int EPD_CLK_PIN;
+int EPD_MOSI_PIN;
+int EPD_SCL_PIN;
+int EPD_SDA_PIN;
+
+
+const uint8_t c_chPinMap[] = {
+ [KEY_HOME] = PIN_KEY_HOME,
+ [KEY_UP] = PIN_KEY_UP,
+ [KEY_DOWN] = PIN_KEY_DOWN,
+ [KEY_LEFT] = PIN_KEY_LEFT,
+ [KEY_RIGHT] = PIN_KEY_RIGHT,
+ [KEY_A] = PIN_KEY_A,
+ [KEY_B] = PIN_KEY_B,
+ [KEY_X] = PIN_KEY_X,
+ [KEY_Y] = PIN_KEY_Y,
+};
+
+uint slice_num;
+/**
+ * GPIO read and write
+**/
+void DEV_Digital_Write(UWORD Pin, UBYTE Value)
+{
+ gpio_put(Pin, Value);
+}
+
+UBYTE DEV_Digital_Read(UWORD Pin)
+{
+ return gpio_get(Pin);
+}
+
+/**
+ * SPI
+**/
+void DEV_SPI_WriteByte(uint8_t Value)
+{
+ spi_write_blocking(SPI_PORT, &Value, 1);
+}
+
+void DEV_SPI_Write_nByte(uint8_t pData[], uint32_t Len)
+{
+ spi_write_blocking(SPI_PORT, pData, Len);
+}
+
+
+
+/**
+ * I2C
+**/
+
+void DEV_I2C_Write(uint8_t addr, uint8_t reg, uint8_t Value)
+{
+ uint8_t data[2] = {reg, Value};
+ i2c_write_blocking(i2c1, addr, data, 2, false);
+}
+
+void DEV_I2C_Write_nByte(uint8_t addr, uint8_t *pData, uint32_t Len)
+{
+ i2c_write_blocking(i2c1, addr, pData, Len, false);
+}
+
+uint8_t DEV_I2C_ReadByte(uint8_t addr, uint8_t reg)
+{
+ uint8_t buf;
+ i2c_write_blocking(i2c1,addr,®,1,true);
+ i2c_read_blocking(i2c1,addr,&buf,1,false);
+ return buf;
+}
+
+/**
+ * GPIO Mode
+**/
+void DEV_GPIO_Mode(UWORD Pin, UWORD Mode)
+{
+ gpio_init(Pin);
+ if(Mode == 0 || Mode == GPIO_IN) {
+ gpio_set_dir(Pin, GPIO_IN);
+ } else {
+ gpio_set_dir(Pin, GPIO_OUT);
+ }
+}
+
+/**
+ * KEY Config
+**/
+void dev_key_init(uint8_t chPin)
+{
+ assert(chPin < KEY_NUM);
+ uint32_t wPin = c_chPinMap[chPin];
+
+ gpio_init(wPin);
+ gpio_pull_up(wPin);
+ gpio_set_dir(wPin, GPIO_IN);
+}
+
+bool dev_read_key(uint8_t chPin)
+{
+ assert(chPin < KEY_NUM);
+ return gpio_get(c_chPinMap[chPin]);
+}
+
+/**
+ * delay x ms
+**/
+void DEV_Delay_ms(UDOUBLE xms)
+{
+ sleep_ms(xms);
+}
+
+void DEV_Delay_us(UDOUBLE xus)
+{
+ sleep_us(xus);
+}
+
+
+
+void DEV_GPIO_Init(void)
+{
+ DEV_GPIO_Mode(EPD_RST_PIN, 1);
+ DEV_GPIO_Mode(EPD_DC_PIN, 1);
+ DEV_GPIO_Mode(EPD_CS_PIN, 1);
+ DEV_GPIO_Mode(EPD_BL_PIN, 1);
+
+
+ DEV_GPIO_Mode(EPD_CS_PIN, 1);
+ DEV_GPIO_Mode(EPD_BL_PIN, 1);
+
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_BL_PIN, 1);
+}
+/******************************************************************************
+function: Module Initialize, the library and initialize the pins, SPI protocol
+parameter:
+Info:
+******************************************************************************/
+UBYTE DEV_Module_Init(void)
+{
+ //stdio_init_all();
+
+ //GPIO PIN
+ EPD_RST_PIN = 12;
+ EPD_DC_PIN = 8;
+ EPD_BL_PIN = 13;
+
+ EPD_CS_PIN = 9;
+ EPD_CLK_PIN = 10;
+ EPD_MOSI_PIN = 11;
+
+ EPD_SCL_PIN = 7;
+ EPD_SDA_PIN = 6;
+
+ // SPI Config
+ spi_init(SPI_PORT, 80000 * 1000);
+ gpio_set_function(EPD_CLK_PIN, GPIO_FUNC_SPI);
+ gpio_set_function(EPD_MOSI_PIN, GPIO_FUNC_SPI);
+
+ // GPIO Config
+ DEV_GPIO_Init();
+
+ // PWM Config
+ gpio_set_function(EPD_BL_PIN, GPIO_FUNC_PWM);
+ slice_num = pwm_gpio_to_slice_num(EPD_BL_PIN);
+ pwm_set_wrap(slice_num, 100);
+ pwm_set_chan_level(slice_num, PWM_CHAN_B, 1);
+ pwm_set_clkdiv(slice_num,50);
+ pwm_set_enabled(slice_num, true);
+
+
+ //I2C Config
+ i2c_init(i2c1,300*1000);
+ gpio_set_function(EPD_SDA_PIN,GPIO_FUNC_I2C);
+ gpio_set_function(EPD_SCL_PIN,GPIO_FUNC_I2C);
+ gpio_pull_up(EPD_SDA_PIN);
+ gpio_pull_up(EPD_SCL_PIN);
+
+ //printf("DEV_Module_Init OK \r\n");
+ return 0;
+}
+
+void DEV_SET_PWM(uint8_t Value)
+{
+ if(Value<0 || Value >100){
+ printf("DEV_SET_PWM Error \r\n");
+ }else {
+ pwm_set_chan_level(slice_num, PWM_CHAN_B, Value);
+ }
+}
+
+/******************************************************************************
+function: Module exits, closes SPI and BCM2835 library
+parameter:
+Info:
+******************************************************************************/
+void DEV_Module_Exit(void)
+{
+
+}
diff --git a/bsp/pico/bsp/Config/DEV_Config.h b/bsp/pico/bsp/Config/DEV_Config.h
new file mode 100644
index 000000000..b03106696
--- /dev/null
+++ b/bsp/pico/bsp/Config/DEV_Config.h
@@ -0,0 +1,111 @@
+/*****************************************************************************
+* | File : DEV_Config.h
+* | Author :
+* | Function : Hardware underlying interface
+* | Info :
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-16
+* | Info :
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documnetation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of theex Software, and to permit persons to whom the Software is
+# furished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+******************************************************************************/
+#ifndef _DEV_CONFIG_H_
+#define _DEV_CONFIG_H_
+
+#include "pico/stdlib.h"
+#include "hardware/spi.h"
+#include "stdio.h"
+#include "hardware/i2c.h"
+#include "hardware/pwm.h"
+
+/**
+ * data
+**/
+#define UBYTE uint8_t
+#define UWORD uint16_t
+#define UDOUBLE uint32_t
+
+/**
+ * GPIOI config
+**/
+extern int EPD_RST_PIN;
+extern int EPD_DC_PIN;
+extern int EPD_CS_PIN;
+extern int EPD_BL_PIN;
+extern int EPD_CLK_PIN;
+extern int EPD_MOSI_PIN;
+extern int EPD_SCL_PIN;
+extern int EPD_SDA_PIN;
+
+enum {
+ PIN_KEY_A = 15,
+ PIN_KEY_B = 17,
+ PIN_KEY_X = 19,
+ PIN_KEY_Y = 21,
+ PIN_KEY_UP = 2,
+ PIN_KEY_DOWN = 18,
+ PIN_KEY_LEFT = 16,
+ PIN_KEY_RIGHT = 20,
+ PIN_KEY_HOME = 3,
+
+ KEY_HOME = 0,
+ KEY_UP = 1,
+ KEY_DOWN,
+ KEY_LEFT,
+ KEY_RIGHT,
+ KEY_A,
+ KEY_B,
+ KEY_X,
+ KEY_Y,
+ KEY_NUM,
+};
+
+
+
+/*------------------------------------------------------------------------------------------------------*/
+void DEV_Digital_Write(UWORD Pin, UBYTE Value);
+UBYTE DEV_Digital_Read(UWORD Pin);
+
+void DEV_GPIO_Mode(UWORD Pin, UWORD Mode);
+void dev_key_init(uint8_t chPin);
+bool dev_read_key(uint8_t chPin);
+
+
+void DEV_Digital_Write(UWORD Pin, UBYTE Value);
+UBYTE DEV_Digital_Read(UWORD Pin);
+
+void DEV_SPI_WriteByte(UBYTE Value);
+void DEV_SPI_Write_nByte(uint8_t *pData, uint32_t Len);
+
+void DEV_Delay_ms(UDOUBLE xms);
+void DEV_Delay_us(UDOUBLE xus);
+
+
+void DEV_I2C_Write(uint8_t addr, uint8_t reg, uint8_t Value);
+void DEV_I2C_Write_nByte(uint8_t addr, uint8_t *pData, uint32_t Len);
+uint8_t DEV_I2C_ReadByte(uint8_t addr, uint8_t reg);
+
+void DEV_SET_PWM(uint8_t Value);
+
+UBYTE DEV_Module_Init(void);
+void DEV_Module_Exit(void);
+
+
+#endif
diff --git a/bsp/pico/bsp/Config/Debug.h b/bsp/pico/bsp/Config/Debug.h
new file mode 100644
index 000000000..fe7b737da
--- /dev/null
+++ b/bsp/pico/bsp/Config/Debug.h
@@ -0,0 +1,47 @@
+/*****************************************************************************
+* | File : Debug.h
+* | Author :
+* | Function : debug with printf
+* | Info :
+* Image scanning
+* Please use progressive scanning to generate images or fonts
+*----------------
+* | This version: V2.0
+* | Date : 2018-10-30
+* | Info :
+* 1.USE_DEBUG -> DEBUG, If you need to see the debug information,
+* clear the execution: make DEBUG=-DDEBUG
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documnetation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+******************************************************************************/
+#ifndef __DEBUG_H
+#define __DEBUG_H
+
+#include
+
+#if DEBUG
+ #define Debug(__info,...) printf("Debug: " __info,##__VA_ARGS__)
+#else
+ #define Debug(__info,...)
+#endif
+
+#endif
+
diff --git a/bsp/pico/bsp/Fonts/font12.c b/bsp/pico/bsp/Fonts/font12.c
new file mode 100644
index 000000000..485c3f019
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font12.c
@@ -0,0 +1,1384 @@
+/**
+ ******************************************************************************
+ * @file Font12.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font12_Table[] =
+{
+ // @0 ' ' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @12 '!' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @24 '"' (7 pixels wide)
+ 0x00, //
+ 0x6C, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @36 '#' (7 pixels wide)
+ 0x00, //
+ 0x14, // # #
+ 0x14, // # #
+ 0x28, // # #
+ 0x7C, // #####
+ 0x28, // # #
+ 0x7C, // #####
+ 0x28, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @48 '$' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x38, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x38, // ###
+ 0x48, // # #
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @60 '%' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x0C, // ##
+ 0x70, // ###
+ 0x08, // #
+ 0x14, // # #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @72 '&' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x54, // # # #
+ 0x48, // # #
+ 0x34, // ## #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @84 ''' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @96 '(' (7 pixels wide)
+ 0x00, //
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x08, // #
+ 0x00, //
+
+ // @108 ')' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @120 '*' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x7C, // #####
+ 0x10, // #
+ 0x28, // # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @132 '+' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0xFE, // #######
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @144 ',' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x10, // #
+ 0x30, // ##
+ 0x20, // #
+ 0x00, //
+
+ // @156 '-' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @168 '.' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @180 '/' (7 pixels wide)
+ 0x00, //
+ 0x04, // #
+ 0x04, // #
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+ 0x00, //
+
+ // @192 '0' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @204 '1' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @216 '2' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @228 '3' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x04, // #
+ 0x18, // ##
+ 0x04, // #
+ 0x04, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @240 '4' (7 pixels wide)
+ 0x00, //
+ 0x0C, // ##
+ 0x14, // # #
+ 0x14, // # #
+ 0x24, // # #
+ 0x44, // # #
+ 0x7E, // ######
+ 0x04, // #
+ 0x0E, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @252 '5' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x20, // #
+ 0x20, // #
+ 0x38, // ###
+ 0x04, // #
+ 0x04, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @264 '6' (7 pixels wide)
+ 0x00, //
+ 0x1C, // ###
+ 0x20, // #
+ 0x40, // #
+ 0x78, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @276 '7' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x44, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @288 '8' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @300 '9' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x08, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @312 ':' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @324 ';' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x18, // ##
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x30, // ##
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @336 '<' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x0C, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x80, // #
+ 0x60, // ##
+ 0x10, // #
+ 0x0C, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @348 '=' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @360 '>' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xC0, // ##
+ 0x20, // #
+ 0x18, // ##
+ 0x04, // #
+ 0x18, // ##
+ 0x20, // #
+ 0xC0, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @372 '?' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x18, // ##
+ 0x24, // # #
+ 0x04, // #
+ 0x08, // #
+ 0x10, // #
+ 0x00, //
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @384 '@' (7 pixels wide)
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x4C, // # ##
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x4C, // # ##
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @396 'A' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x28, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x7C, // #####
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @408 'B' (7 pixels wide)
+ 0x00, //
+ 0xF8, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @420 'C' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @432 'D' (7 pixels wide)
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @444 'E' (7 pixels wide)
+ 0x00, //
+ 0xFC, // ######
+ 0x44, // # #
+ 0x50, // # #
+ 0x70, // ###
+ 0x50, // # #
+ 0x40, // #
+ 0x44, // # #
+ 0xFC, // ######
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @456 'F' (7 pixels wide)
+ 0x00, //
+ 0x7E, // ######
+ 0x22, // # #
+ 0x28, // # #
+ 0x38, // ###
+ 0x28, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @468 'G' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x4E, // # ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @480 'H' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @492 'I' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @504 'J' (7 pixels wide)
+ 0x00, //
+ 0x3C, // ####
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @516 'K' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x48, // # #
+ 0x50, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0x44, // # #
+ 0xE6, // ### ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @528 'L' (7 pixels wide)
+ 0x00, //
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x24, // # #
+ 0x24, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @540 'M' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x6C, // ## ##
+ 0x6C, // ## ##
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @552 'N' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x64, // ## #
+ 0x64, // ## #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x4C, // # ##
+ 0xEC, // ### ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @564 'O' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @576 'P' (7 pixels wide)
+ 0x00, //
+ 0x78, // ####
+ 0x24, // # #
+ 0x24, // # #
+ 0x24, // # #
+ 0x38, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @588 'Q' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x1C, // ###
+ 0x00, //
+ 0x00, //
+
+ // @600 'R' (7 pixels wide)
+ 0x00, //
+ 0xF8, // #####
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x48, // # #
+ 0x44, // # #
+ 0xE2, // ### #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @612 'S' (7 pixels wide)
+ 0x00, //
+ 0x34, // ## #
+ 0x4C, // # ##
+ 0x40, // #
+ 0x38, // ###
+ 0x04, // #
+ 0x04, // #
+ 0x64, // ## #
+ 0x58, // # ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @624 'T' (7 pixels wide)
+ 0x00, //
+ 0xFE, // #######
+ 0x92, // # # #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @636 'U' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @648 'V' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @660 'W' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @672 'X' (7 pixels wide)
+ 0x00, //
+ 0xC6, // ## ##
+ 0x44, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x28, // # #
+ 0x44, // # #
+ 0xC6, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @684 'Y' (7 pixels wide)
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @696 'Z' (7 pixels wide)
+ 0x00, //
+ 0x7C, // #####
+ 0x44, // # #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @708 '[' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @720 '\' (7 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+
+ // @732 ']' (7 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @744 '^' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x28, // # #
+ 0x44, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @756 '_' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xFE, // #######
+
+ // @768 '`' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x08, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @780 'a' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x3C, // ####
+ 0x44, // # #
+ 0x44, // # #
+ 0x3E, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @792 'b' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @804 'c' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @816 'd' (7 pixels wide)
+ 0x00, //
+ 0x0C, // ##
+ 0x04, // #
+ 0x34, // ## #
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3E, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @828 'e' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x7C, // #####
+ 0x40, // #
+ 0x40, // #
+ 0x3C, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @840 'f' (7 pixels wide)
+ 0x00, //
+ 0x1C, // ###
+ 0x20, // #
+ 0x7C, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @852 'g' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x36, // ## ##
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @864 'h' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @876 'i' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @888 'j' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x78, // ####
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x08, // #
+ 0x70, // ###
+ 0x00, //
+
+ // @900 'k' (7 pixels wide)
+ 0x00, //
+ 0xC0, // ##
+ 0x40, // #
+ 0x5C, // # ###
+ 0x48, // # #
+ 0x70, // ###
+ 0x50, // # #
+ 0x48, // # #
+ 0xDC, // ## ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @912 'l' (7 pixels wide)
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @924 'm' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xE8, // ### #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0xFE, // #######
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @936 'n' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0xEE, // ### ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @948 'o' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @960 'p' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x64, // ## #
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x78, // ####
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+
+ // @972 'q' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x36, // ## ##
+ 0x4C, // # ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x3C, // ####
+ 0x04, // #
+ 0x0E, // ###
+ 0x00, //
+
+ // @984 'r' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x6C, // ## ##
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @996 's' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x3C, // ####
+ 0x44, // # #
+ 0x38, // ###
+ 0x04, // #
+ 0x44, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1008 't' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x7C, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x22, // # #
+ 0x1C, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1020 'u' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xCC, // ## ##
+ 0x44, // # #
+ 0x44, // # #
+ 0x44, // # #
+ 0x4C, // # ##
+ 0x36, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1032 'v' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x44, // # #
+ 0x28, // # #
+ 0x28, // # #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1044 'w' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x54, // # # #
+ 0x28, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1056 'x' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xCC, // ## ##
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x48, // # #
+ 0xCC, // ## ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1068 'y' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xEE, // ### ###
+ 0x44, // # #
+ 0x24, // # #
+ 0x28, // # #
+ 0x18, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x78, // ####
+ 0x00, //
+
+ // @1080 'z' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x7C, // #####
+ 0x48, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x44, // # #
+ 0x7C, // #####
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @1092 '{' (7 pixels wide)
+ 0x00, //
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x00, //
+
+ // @1104 '|' (7 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @1116 '}' (7 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x08, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+
+ // @1128 '~' (7 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x24, // # #
+ 0x58, // # ##
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+};
+
+sFONT Font12 = {
+ Font12_Table,
+ 7, /* Width */
+ 12, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font12CN.c b/bsp/pico/bsp/Fonts/font12CN.c
new file mode 100644
index 000000000..47ea98886
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font12CN.c
@@ -0,0 +1,152 @@
+/**
+ ******************************************************************************
+ * @file Font12.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+
+//
+// Font data for Courier New 12pt
+//
+
+const CH_CN Font12CN_Table[] =
+{
+/*-- ÎÄ×Ö: Äã --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"Äã"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1D,0xC0,0x1D,0x80,0x3B,0xFF,0x3B,0x07,
+0x3F,0x77,0x7E,0x76,0xF8,0x70,0xFB,0xFE,0xFB,0xFE,0x3F,0x77,0x3F,0x77,0x3E,0x73,
+0x38,0x70,0x38,0x70,0x3B,0xE0,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ºÃ --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"ºÃ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x73,0xFF,0x70,0x0F,0xFE,0x1E,
+0x7E,0x3C,0x6E,0x38,0xEE,0x30,0xEF,0xFF,0xFC,0x30,0x7C,0x30,0x38,0x30,0x3E,0x30,
+0x7E,0x30,0xE0,0x30,0xC1,0xF0,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ê÷ --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"Ê÷"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x0E,0x30,0x0E,0x3F,0xEE,0x30,0xEE,
+0xFC,0xFF,0x76,0xCE,0x77,0xFE,0x7B,0xFE,0xFF,0xFE,0xF3,0xDE,0xF3,0xCE,0x37,0xEE,
+0x3E,0x6E,0x3C,0x0E,0x30,0x3E,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ý® --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"Ý®"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x70,0xFF,0xFF,0x3E,0x70,0x38,0x00,
+0x7F,0xFF,0xE0,0x00,0xFF,0xFC,0x3B,0x8C,0x39,0xCC,0xFF,0xFF,0x73,0x9C,0x71,0xDC,
+0x7F,0xFF,0x00,0x1C,0x01,0xF8,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ÅÉ --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"ÅÉ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1F,0xFF,0xF0,0x3E,0x00,0x0E,0x1F,
+0xCF,0xFB,0xFF,0xF8,0x3F,0xFF,0x0F,0xFF,0x7F,0xD8,0x7F,0xDC,0x6F,0xCE,0xED,0xFF,
+0xFD,0xF7,0xF9,0xC0,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: a --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"a"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3E,0x00,0x67,0x00,0x07,0x80,0x0F,0x80,0x7F,0x80,0xE3,0x80,0xE7,0x80,0xE7,0x80,
+0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: b --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"b"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,
+0x7F,0x00,0x7B,0x80,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x71,0xC0,0x7B,0x80,
+0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: c --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"c"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x3F,0x00,0x73,0x00,0xF0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xF0,0x00,0x73,0x00,
+0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: A --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"A"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x1F,0x00,0x1F,0x00,
+0x1F,0x00,0x3B,0x80,0x3B,0x80,0x71,0x80,0x7F,0xC0,0x71,0xC0,0xE0,0xE0,0xE0,0xE0,
+0xE0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: »¶ --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"Ȧ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0xFF,0xC0,0x0F,0xFF,0xCF,0x87,
+0x6F,0xF6,0x7F,0x7E,0x3C,0x70,0x3C,0x70,0x1C,0x70,0x3E,0xF8,0x3E,0xF8,0x77,0xDC,
+0xE3,0x8C,0xC7,0x0F,0x0E,0x07,0x00,0x00,0x00,0x00}},
+
+
+/*-- ÎÄ×Ö: Ó --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"Ó"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE1,0xC0,0x67,0xFF,0x76,0x77,0x3E,0x77,
+0x06,0x77,0xF6,0x77,0x76,0x77,0x76,0x77,0x76,0x77,0x77,0xF7,0x7F,0x7E,0x70,0x70,
+0x70,0x70,0xF8,0x00,0xCF,0xFF,0x00,0x00,0x00,0x00}},
+
+
+/*-- ÎÄ×Ö: ʹ --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"ʹ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x60,0x3F,0xFF,0x38,0x60,
+0x7F,0xFF,0x7E,0x67,0xFE,0x67,0xFF,0xFF,0x70,0x67,0x77,0x60,0x73,0xE0,0x71,0xE0,
+0x73,0xF8,0x7E,0x1F,0x00,0x00,0x00,0x00,0x00,0x00}},
+
+
+/*-- ÎÄ×Ö: Óà --*/
+/*-- ΢ÈíÑźÚ12; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x21 --*/
+{{"ÓÃ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x71,0xC7,0x71,0xC7,
+0x71,0xC7,0x7F,0xFF,0x71,0xC7,0x71,0xC7,0x71,0xC7,0x7F,0xFF,0x71,0xC7,0x71,0xC7,
+0xE1,0xC6,0xC1,0xFE,0x00,0x00,0x00,0x00,0x00,0x00}},
+};
+
+
+cFONT Font12CN = {
+ Font12CN_Table,
+ sizeof(Font12CN_Table)/sizeof(CH_CN), /*size of table*/
+ 11, /* ASCII Width */
+ 16, /* Width */
+ 21, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font16.c b/bsp/pico/bsp/Fonts/font16.c
new file mode 100644
index 000000000..58ce59b7b
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font16.c
@@ -0,0 +1,1764 @@
+/**
+ ******************************************************************************
+ * @file font16.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font16 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font16_Table[] =
+{
+ // @0 ' ' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @32 '!' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @64 '"' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x1D, 0xC0, // ### ###
+ 0x08, 0x80, // # #
+ 0x08, 0x80, // # #
+ 0x08, 0x80, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @96 '#' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x3F, 0xC0, // ########
+ 0x1B, 0x00, // ## ##
+ 0x3F, 0xC0, // ########
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @128 '$' (11 pixels wide)
+ 0x04, 0x00, // #
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x38, 0x00, // ###
+ 0x1E, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @160 '%' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x24, 0x00, // # #
+ 0x24, 0x00, // # #
+ 0x18, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x1E, 0x00, // ####
+ 0x31, 0x80, // ## ##
+ 0x02, 0x40, // # #
+ 0x02, 0x40, // # #
+ 0x01, 0x80, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @192 '&' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x1D, 0x80, // ### ##
+ 0x37, 0x00, // ## ###
+ 0x33, 0x00, // ## ##
+ 0x1D, 0x80, // ### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @224 ''' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @256 '(' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @288 ')' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x1C, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @320 '*' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xC0, // ########
+ 0x0F, 0x00, // ####
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @352 '+' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x3F, 0x80, // #######
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @384 ',' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x0C, 0x00, // ##
+ 0x08, 0x00, // #
+ 0x08, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @416 '-' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @448 '.' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @480 '/' (11 pixels wide)
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @512 '0' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @544 '1' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @576 '2' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x19, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @608 '3' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x61, 0x80, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x61, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @640 '4' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x0F, 0x00, // ####
+ 0x0B, 0x00, // # ##
+ 0x1B, 0x00, // ## ##
+ 0x13, 0x00, // # ##
+ 0x33, 0x00, // ## ##
+ 0x3F, 0x80, // #######
+ 0x03, 0x00, // ##
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @672 '5' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x11, 0x80, // # ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x21, 0x80, // # ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @704 '6' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1C, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @736 '7' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x43, 0x00, // # ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @768 '8' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @800 '9' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x3C, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @832 ':' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @864 ';' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x08, 0x00, // #
+ 0x08, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @896 '<' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0xC0, // ##
+ 0x03, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x18, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @928 '=' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @960 '>' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x60, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 0x00, 0xC0, // ##
+ 0x03, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x18, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @992 '?' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x01, 0x80, // ##
+ 0x07, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1024 '@' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x11, 0x00, // # #
+ 0x21, 0x00, // # #
+ 0x21, 0x00, // # #
+ 0x27, 0x00, // # ###
+ 0x29, 0x00, // # # #
+ 0x29, 0x00, // # # #
+ 0x27, 0x00, // # ###
+ 0x20, 0x00, // #
+ 0x11, 0x00, // # #
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1056 'A' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x0F, 0x00, // ####
+ 0x09, 0x00, // # #
+ 0x19, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x79, 0xE0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1088 'B' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1120 'C' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x40, // ##### #
+ 0x30, 0xC0, // ## ##
+ 0x60, 0x40, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x60, 0x40, // ## #
+ 0x30, 0x80, // ## #
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1152 'D' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1184 'E' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x30, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x32, 0x00, // ## #
+ 0x3E, 0x00, // #####
+ 0x32, 0x00, // ## #
+ 0x30, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x7F, 0x80, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1216 'F' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xC0, // #########
+ 0x30, 0x40, // ## #
+ 0x30, 0x40, // ## #
+ 0x32, 0x00, // ## #
+ 0x3E, 0x00, // #####
+ 0x32, 0x00, // ## #
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1248 'G' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1E, 0x80, // #### #
+ 0x31, 0x80, // ## ##
+ 0x60, 0x80, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x00, // ##
+ 0x67, 0xC0, // ## #####
+ 0x61, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1280 'H' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x80, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1312 'I' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1344 'J' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x63, 0x00, // ## ##
+ 0x63, 0x00, // ## ##
+ 0x63, 0x00, // ## ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1376 'K' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x33, 0x00, // ## ##
+ 0x36, 0x00, // ## ##
+ 0x3C, 0x00, // ####
+ 0x3E, 0x00, // #####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x79, 0xC0, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1408 'L' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7E, 0x00, // ######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x40, // ## #
+ 0x18, 0x40, // ## #
+ 0x18, 0x40, // ## #
+ 0x7F, 0xC0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1440 'M' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xE0, 0xE0, // ### ###
+ 0x60, 0xC0, // ## ##
+ 0x71, 0xC0, // ### ###
+ 0x7B, 0xC0, // #### ####
+ 0x6A, 0xC0, // ## # # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x64, 0xC0, // ## # ##
+ 0x60, 0xC0, // ## ##
+ 0xFB, 0xE0, // ##### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1472 'N' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x73, 0xC0, // ### ####
+ 0x31, 0x80, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x3D, 0x80, // #### ##
+ 0x35, 0x80, // ## # ##
+ 0x37, 0x80, // ## ####
+ 0x33, 0x80, // ## ###
+ 0x31, 0x80, // ## ##
+ 0x79, 0x80, // #### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1504 'O' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1536 'P' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7E, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1568 'Q' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x0C, 0xC0, // ## ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1600 'R' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x00, // #######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3E, 0x00, // #####
+ 0x33, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7C, 0xE0, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1632 'S' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x38, 0x00, // ###
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1664 'T' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x4C, 0x80, // # ## #
+ 0x4C, 0x80, // # ## #
+ 0x4C, 0x80, // # ## #
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1696 'U' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1728 'V' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0A, 0x00, // # #
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1760 'W' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xFB, 0xE0, // ##### #####
+ 0x60, 0xC0, // ## ##
+ 0x64, 0xC0, // ## # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x2A, 0x80, // # # # #
+ 0x3B, 0x80, // ### ###
+ 0x3B, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1792 'X' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1824 'Y' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x79, 0xE0, // #### ####
+ 0x30, 0xC0, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0F, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1856 'Z' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x21, 0x80, // # ##
+ 0x23, 0x00, // # ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x0C, 0x00, // ##
+ 0x18, 0x80, // ## #
+ 0x30, 0x80, // ## #
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1888 '[' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1920 '\' (11 pixels wide)
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1952 ']' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1E, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1984 '^' (11 pixels wide)
+ 0x04, 0x00, // #
+ 0x0A, 0x00, // # #
+ 0x0A, 0x00, // # #
+ 0x11, 0x00, // # #
+ 0x20, 0x80, // # #
+ 0x20, 0x80, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2016 '_' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 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, 0xE0, // ###########
+
+ // @2048 '`' (11 pixels wide)
+ 0x08, 0x00, // #
+ 0x04, 0x00, // #
+ 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, //
+
+ // @2080 'a' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2112 'b' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x77, 0x00, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2144 'c' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1E, 0x80, // #### #
+ 0x31, 0x80, // ## ##
+ 0x60, 0x80, // ## #
+ 0x60, 0x00, // ##
+ 0x60, 0x80, // ## #
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2176 'd' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1D, 0x80, // ### ##
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2208 'e' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x7F, 0xC0, // #########
+ 0x60, 0x00, // ##
+ 0x30, 0xC0, // ## ##
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2240 'f' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0xE0, // ######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2272 'g' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2304 'h' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x00, // ## ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2336 'i' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2368 'j' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2400 'k' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x80, // ## ####
+ 0x36, 0x00, // ## ##
+ 0x3C, 0x00, // ####
+ 0x3C, 0x00, // ####
+ 0x36, 0x00, // ## ##
+ 0x33, 0x00, // ## ##
+ 0x77, 0xC0, // ### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2432 'l' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2464 'm' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x36, 0xC0, // ## ## ##
+ 0x76, 0xE0, // ### ## ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2496 'n' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x00, // ### ###
+ 0x39, 0x80, // ### ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2528 'o' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x31, 0x80, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x60, 0xC0, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1F, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2560 'p' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x00, // ### ###
+ 0x39, 0x80, // ### ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x39, 0x80, // ### ##
+ 0x37, 0x00, // ## ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2592 'q' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1D, 0xC0, // ### ###
+ 0x33, 0x80, // ## ###
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x61, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0x80, // ### ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2624 'r' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0x80, // #### ###
+ 0x1C, 0xC0, // ### ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2656 's' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x31, 0x80, // ## ##
+ 0x3C, 0x00, // ####
+ 0x1F, 0x00, // #####
+ 0x03, 0x80, // ###
+ 0x31, 0x80, // ## ##
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2688 't' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x80, // ## #
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2720 'u' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x73, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x33, 0x80, // ## ###
+ 0x1D, 0xC0, // ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2752 'v' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x31, 0x80, // ## ##
+ 0x31, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2784 'w' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0xF1, 0xE0, // #### ####
+ 0x60, 0xC0, // ## ##
+ 0x64, 0xC0, // ## # ##
+ 0x6E, 0xC0, // ## ### ##
+ 0x3B, 0x80, // ### ###
+ 0x3B, 0x80, // ### ###
+ 0x31, 0x80, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2816 'x' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7B, 0xC0, // #### ####
+ 0x1B, 0x00, // ## ##
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x1B, 0x00, // ## ##
+ 0x7B, 0xC0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2848 'y' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x79, 0xE0, // #### ####
+ 0x30, 0xC0, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x0B, 0x00, // # ##
+ 0x0F, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2880 'z' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x21, 0x80, // # ##
+ 0x03, 0x00, // ##
+ 0x0E, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x30, 0x80, // ## #
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2912 '{' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2944 '|' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x06, 0x00, // ##
+ 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, //
+
+ // @2976 '}' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3008 '~' (11 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x18, 0x00, // ##
+ 0x24, 0x80, // # # #
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+};
+
+sFONT Font16 = {
+ Font16_Table,
+ 11, /* Width */
+ 16, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font20.c b/bsp/pico/bsp/Fonts/font20.c
new file mode 100644
index 000000000..697e3eddb
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font20.c
@@ -0,0 +1,2142 @@
+/**
+ ******************************************************************************
+ * @file font20.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font20 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+// Character bitmaps for Courier New 15pt
+const uint8_t Font20_Table[] =
+{
+ // @0 ' ' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @40 '!' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x02, 0x00, // #
+ 0x02, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @80 '"' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1C, 0xE0, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x08, 0x40, // # #
+ 0x08, 0x40, // # #
+ 0x08, 0x40, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @120 '#' (14 pixels wide)
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @160 '$' (14 pixels wide)
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0xE0, // ######
+ 0x0F, 0xE0, // #######
+ 0x18, 0x60, // ## ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x0F, 0xC0, // ######
+ 0x00, 0xE0, // ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xC0, // #######
+ 0x1F, 0x80, // ######
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @200 '%' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1C, 0x00, // ###
+ 0x22, 0x00, // # #
+ 0x22, 0x00, // # #
+ 0x22, 0x00, // # #
+ 0x1C, 0x60, // ### ##
+ 0x01, 0xE0, // ####
+ 0x0F, 0x80, // #####
+ 0x3C, 0x00, // ####
+ 0x31, 0xC0, // ## ###
+ 0x02, 0x20, // # #
+ 0x02, 0x20, // # #
+ 0x02, 0x20, // # #
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @240 '&' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0xE0, // #####
+ 0x0F, 0xE0, // #######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0F, 0x30, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x19, 0xE0, // ## ####
+ 0x18, 0xC0, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @280 ''' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x01, 0x00, // #
+ 0x01, 0x00, // #
+ 0x01, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @320 '(' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @360 ')' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @400 '*' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1B, 0x60, // ## ## ##
+ 0x1F, 0xE0, // ########
+ 0x07, 0x80, // ####
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x0C, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @440 '+' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @480 ',' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @520 '-' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @560 '.' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @600 '/' (14 pixels wide)
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @640 '0' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x1F, 0xC0, // #######
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @680 '1' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @720 '2' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @760 '3' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x3F, 0xC0, // ########
+ 0x30, 0xE0, // ## ###
+ 0x00, 0x60, // ##
+ 0x00, 0xE0, // ###
+ 0x07, 0xC0, // #####
+ 0x07, 0xC0, // #####
+ 0x00, 0xE0, // ###
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x60, 0xE0, // ## ###
+ 0x7F, 0xC0, // #########
+ 0x3F, 0x80, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @800 '4' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x06, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0xC0, // ## ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x00, 0xC0, // ##
+ 0x03, 0xE0, // #####
+ 0x03, 0xE0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @840 '5' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0xC0, // #######
+ 0x18, 0xE0, // ## ###
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xC0, // ########
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @880 '6' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xE0, // #####
+ 0x0F, 0xE0, // #######
+ 0x1E, 0x00, // ####
+ 0x18, 0x00, // ##
+ 0x38, 0x00, // ###
+ 0x37, 0x80, // ## ####
+ 0x3F, 0xC0, // ########
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xC0, // #######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @920 '7' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x30, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @960 '8' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x38, 0xE0, // ### ###
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xC0, // #######
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1000 '9' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x1F, 0xC0, // #######
+ 0x38, 0xC0, // ### ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x38, 0xE0, // ### ###
+ 0x1F, 0xE0, // ########
+ 0x0F, 0x60, // #### ##
+ 0x00, 0xE0, // ###
+ 0x00, 0xC0, // ##
+ 0x03, 0xC0, // ####
+ 0x3F, 0x80, // #######
+ 0x3E, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1040 ':' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x80, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1080 ';' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x01, 0xC0, // ###
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x04, 0x00, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1120 '<' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x30, // ##
+ 0x00, 0xF0, // ####
+ 0x03, 0xC0, // ####
+ 0x07, 0x00, // ###
+ 0x1C, 0x00, // ###
+ 0x78, 0x00, // ####
+ 0x1C, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x03, 0xC0, // ####
+ 0x00, 0xF0, // ####
+ 0x00, 0x30, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1160 '=' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xF0, // ###########
+ 0x7F, 0xF0, // ###########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0xF0, // ###########
+ 0x7F, 0xF0, // ###########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1200 '>' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x30, 0x00, // ##
+ 0x3C, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x80, // ###
+ 0x00, 0xE0, // ###
+ 0x00, 0x78, // ####
+ 0x00, 0xE0, // ###
+ 0x03, 0x80, // ###
+ 0x0F, 0x00, // ####
+ 0x3C, 0x00, // ####
+ 0x30, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1240 '?' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0x80, // #####
+ 0x1F, 0xC0, // #######
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x00, 0x60, // ##
+ 0x01, 0xC0, // ###
+ 0x03, 0x80, // ###
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1280 '@' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x80, // ###
+ 0x0C, 0x80, // ## #
+ 0x08, 0x40, // # #
+ 0x10, 0x40, // # #
+ 0x10, 0x40, // # #
+ 0x11, 0xC0, // # ###
+ 0x12, 0x40, // # # #
+ 0x12, 0x40, // # # #
+ 0x12, 0x40, // # # #
+ 0x11, 0xC0, // # ###
+ 0x10, 0x00, // #
+ 0x08, 0x00, // #
+ 0x08, 0x40, // # #
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1320 'A' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x03, 0x80, // ###
+ 0x06, 0xC0, // ## ##
+ 0x06, 0xC0, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x0C, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x30, 0x30, // ## ##
+ 0x78, 0x78, // #### ####
+ 0x78, 0x78, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1360 'B' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x80, // #######
+ 0x3F, 0xC0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xE0, // ########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xE0, // #########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1400 'C' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x0F, 0xF0, // ########
+ 0x1C, 0x70, // ### ###
+ 0x38, 0x30, // ### ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x38, 0x30, // ### ##
+ 0x1C, 0x70, // ### ###
+ 0x0F, 0xE0, // #######
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1440 'D' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7F, 0x80, // ########
+ 0x7F, 0xC0, // #########
+ 0x30, 0xE0, // ## ###
+ 0x30, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x70, // ## ###
+ 0x30, 0xE0, // ## ###
+ 0x7F, 0xC0, // #########
+ 0x7F, 0x80, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1480 'E' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1520 'F' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x1F, 0x80, // ######
+ 0x1F, 0x80, // ######
+ 0x19, 0x80, // ## ##
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1560 'G' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x31, 0xF8, // ## ######
+ 0x31, 0xF8, // ## ######
+ 0x30, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1600 'H' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1640 'I' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1680 'J' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x03, 0xF8, // #######
+ 0x03, 0xF8, // #######
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xC0, // ########
+ 0x0F, 0x80, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1720 'K' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3E, 0xF8, // ##### #####
+ 0x3E, 0xF8, // ##### #####
+ 0x18, 0xE0, // ## ###
+ 0x19, 0x80, // ## ##
+ 0x1B, 0x00, // ## ##
+ 0x1F, 0x00, // #####
+ 0x1D, 0x80, // ### ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3E, 0x78, // ##### ####
+ 0x3E, 0x38, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1760 'L' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x30, // ## ##
+ 0x0C, 0x30, // ## ##
+ 0x0C, 0x30, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1800 'M' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0x78, // #### ####
+ 0x78, 0x78, // #### ####
+ 0x38, 0x70, // ### ###
+ 0x3C, 0xF0, // #### ####
+ 0x34, 0xB0, // ## # # ##
+ 0x37, 0xB0, // ## #### ##
+ 0x37, 0xB0, // ## #### ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x30, 0x30, // ## ##
+ 0x7C, 0xF8, // ##### #####
+ 0x7C, 0xF8, // ##### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1840 'N' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x39, 0xF0, // ### #####
+ 0x3D, 0xF0, // #### #####
+ 0x1C, 0x60, // ### ##
+ 0x1E, 0x60, // #### ##
+ 0x1E, 0x60, // #### ##
+ 0x1B, 0x60, // ## ## ##
+ 0x1B, 0x60, // ## ## ##
+ 0x19, 0xE0, // ## ####
+ 0x19, 0xE0, // ## ####
+ 0x18, 0xE0, // ## ###
+ 0x3E, 0xE0, // ##### ###
+ 0x3E, 0x60, // ##### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1880 'O' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x1C, 0xE0, // ### ###
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1920 'P' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xE0, // #########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xC0, // #######
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x3F, 0x00, // ######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @1960 'Q' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x0F, 0xC0, // ######
+ 0x1C, 0xE0, // ### ###
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x07, 0xB0, // #### ##
+ 0x0F, 0xF0, // ########
+ 0x0C, 0xE0, // ## ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2000 'R' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xE0, // #########
+ 0x18, 0x70, // ## ###
+ 0x18, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xC0, // #######
+ 0x18, 0xE0, // ## ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x3E, 0x38, // ##### ###
+ 0x3E, 0x18, // ##### ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2040 'S' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0xB0, // ##### ##
+ 0x1F, 0xF0, // #########
+ 0x38, 0x70, // ### ###
+ 0x30, 0x30, // ## ##
+ 0x38, 0x00, // ###
+ 0x1F, 0x80, // ######
+ 0x07, 0xE0, // ######
+ 0x00, 0x70, // ###
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x3F, 0xE0, // #########
+ 0x37, 0xC0, // ## #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2080 'T' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0xC0, // ######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2120 'U' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1C, 0xE0, // ### ###
+ 0x0F, 0xC0, // ######
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2160 'V' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2200 'W' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7C, 0x7C, // ##### #####
+ 0x7C, 0x7C, // ##### #####
+ 0x30, 0x18, // ## ##
+ 0x33, 0x98, // ## ### ##
+ 0x33, 0x98, // ## ### ##
+ 0x33, 0x98, // ## ### ##
+ 0x36, 0xD8, // ## ## ## ##
+ 0x16, 0xD0, // # ## ## #
+ 0x1C, 0x70, // ### ###
+ 0x1C, 0x70, // ### ###
+ 0x1C, 0x70, // ### ###
+ 0x18, 0x30, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2240 'X' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x0D, 0x80, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2280 'Y' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x18, 0x60, // ## ##
+ 0x0C, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x07, 0x80, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0xC0, // ######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2320 'Z' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2360 '[' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0xC0, // ####
+ 0x03, 0xC0, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2400 '\' (14 pixels wide)
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x01, 0x80, // ##
+ 0x01, 0x80, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x60, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2440 ']' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x0F, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x0F, 0x00, // ####
+ 0x0F, 0x00, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2480 '^' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x02, 0x00, // #
+ 0x07, 0x00, // ###
+ 0x0D, 0x80, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x30, 0x60, // ## ##
+ 0x20, 0x20, // # #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2520 '_' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 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, 0xFC, // ##############
+ 0xFF, 0xFC, // ##############
+
+ // @2560 '`' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x04, 0x00, // #
+ 0x03, 0x00, // ##
+ 0x00, 0x80, // #
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2600 'a' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0F, 0xC0, // ######
+ 0x1F, 0xE0, // ########
+ 0x00, 0x60, // ##
+ 0x0F, 0xE0, // #######
+ 0x1F, 0xE0, // ########
+ 0x38, 0x60, // ### ##
+ 0x30, 0xE0, // ## ###
+ 0x3F, 0xF0, // ##########
+ 0x1F, 0x70, // ##### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2640 'b' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x70, 0x00, // ###
+ 0x70, 0x00, // ###
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x37, 0x80, // ## ####
+ 0x3F, 0xE0, // #########
+ 0x38, 0x60, // ### ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x60, // ### ##
+ 0x7F, 0xE0, // ##########
+ 0x77, 0x80, // ### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2680 'c' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x38, 0x30, // ### ##
+ 0x1F, 0xF0, // #########
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2720 'd' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x70, // ###
+ 0x00, 0x70, // ###
+ 0x00, 0x30, // ##
+ 0x00, 0x30, // ##
+ 0x07, 0xB0, // #### ##
+ 0x1F, 0xF0, // #########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x70, // ### ###
+ 0x1F, 0xF8, // ##########
+ 0x07, 0xB8, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2760 'e' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x3F, 0xF0, // ##########
+ 0x3F, 0xF0, // ##########
+ 0x30, 0x00, // ##
+ 0x18, 0x30, // ## ##
+ 0x1F, 0xF0, // #########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2800 'f' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0xF0, // ######
+ 0x07, 0xF0, // #######
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2840 'g' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB8, // #### ###
+ 0x1F, 0xF8, // ##########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x30, // ##
+ 0x00, 0x70, // ###
+ 0x0F, 0xE0, // #######
+ 0x0F, 0xC0, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2880 'h' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x38, 0x00, // ###
+ 0x38, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1B, 0xC0, // ## ####
+ 0x1F, 0xE0, // ########
+ 0x1C, 0x60, // ### ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2920 'i' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @2960 'j' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xC0, // #######
+ 0x1F, 0xC0, // #######
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x00, 0xC0, // ##
+ 0x01, 0xC0, // ###
+ 0x3F, 0x80, // #######
+ 0x3F, 0x00, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3000 'k' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x38, 0x00, // ###
+ 0x38, 0x00, // ###
+ 0x18, 0x00, // ##
+ 0x18, 0x00, // ##
+ 0x1B, 0xE0, // ## #####
+ 0x1B, 0xE0, // ## #####
+ 0x1B, 0x00, // ## ##
+ 0x1E, 0x00, // ####
+ 0x1E, 0x00, // ####
+ 0x1B, 0x00, // ## ##
+ 0x19, 0x80, // ## ##
+ 0x39, 0xF0, // ### #####
+ 0x39, 0xF0, // ### #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3040 'l' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1F, 0x00, // #####
+ 0x1F, 0x00, // #####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3080 'm' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x7E, 0xE0, // ###### ###
+ 0x7F, 0xF0, // ###########
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x33, 0x30, // ## ## ##
+ 0x7B, 0xB8, // #### ### ###
+ 0x7B, 0xB8, // #### ### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3120 'n' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3B, 0xC0, // ### ####
+ 0x3F, 0xE0, // #########
+ 0x1C, 0x60, // ### ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3160 'o' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0x80, // ####
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x07, 0x80, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3200 'p' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x77, 0x80, // ### ####
+ 0x7F, 0xE0, // ##########
+ 0x38, 0x60, // ### ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x38, 0x60, // ### ##
+ 0x3F, 0xE0, // #########
+ 0x37, 0x80, // ## ####
+ 0x30, 0x00, // ##
+ 0x30, 0x00, // ##
+ 0x7C, 0x00, // #####
+ 0x7C, 0x00, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3240 'q' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xB8, // #### ###
+ 0x1F, 0xF8, // ##########
+ 0x18, 0x70, // ## ###
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x30, 0x30, // ## ##
+ 0x18, 0x70, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x07, 0xB0, // #### ##
+ 0x00, 0x30, // ##
+ 0x00, 0x30, // ##
+ 0x00, 0xF8, // #####
+ 0x00, 0xF8, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3280 'r' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xE0, // #### ###
+ 0x3D, 0xF0, // #### #####
+ 0x0F, 0x30, // #### ##
+ 0x0E, 0x00, // ###
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0xC0, // ########
+ 0x3F, 0xC0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3320 's' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x07, 0xE0, // ######
+ 0x1F, 0xE0, // ########
+ 0x18, 0x60, // ## ##
+ 0x1E, 0x00, // ####
+ 0x0F, 0xC0, // ######
+ 0x01, 0xE0, // ####
+ 0x18, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0x80, // ######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3360 't' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x3F, 0xE0, // #########
+ 0x3F, 0xE0, // #########
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x0C, 0x30, // ## ##
+ 0x0F, 0xF0, // ########
+ 0x07, 0xC0, // #####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3400 'u' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x38, 0xE0, // ### ###
+ 0x38, 0xE0, // ### ###
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0x60, // ## ##
+ 0x18, 0xE0, // ## ###
+ 0x1F, 0xF0, // #########
+ 0x0F, 0x70, // #### ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3440 'v' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x07, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3480 'w' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x32, 0x60, // ## # ##
+ 0x32, 0x60, // ## # ##
+ 0x37, 0xE0, // ## ######
+ 0x1D, 0xC0, // ### ###
+ 0x1D, 0xC0, // ### ###
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3520 'x' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x0C, 0xC0, // ## ##
+ 0x07, 0x80, // ####
+ 0x03, 0x00, // ##
+ 0x07, 0x80, // ####
+ 0x0C, 0xC0, // ## ##
+ 0x3C, 0xF0, // #### ####
+ 0x3C, 0xF0, // #### ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3560 'y' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x78, 0xF0, // #### ####
+ 0x78, 0xF0, // #### ####
+ 0x30, 0x60, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x18, 0xC0, // ## ##
+ 0x0D, 0x80, // ## ##
+ 0x0F, 0x80, // #####
+ 0x07, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x00, // ##
+ 0x7F, 0x00, // #######
+ 0x7F, 0x00, // #######
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3600 'z' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x18, 0xC0, // ## ##
+ 0x01, 0x80, // ##
+ 0x03, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x0C, 0x60, // ## ##
+ 0x1F, 0xE0, // ########
+ 0x1F, 0xE0, // ########
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3640 '{' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x01, 0xC0, // ###
+ 0x03, 0xC0, // ####
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x0E, 0x00, // ###
+ 0x07, 0x00, // ###
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0xC0, // ####
+ 0x01, 0xC0, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3680 '|' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x03, 0x00, // ##
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3720 '}' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x1C, 0x00, // ###
+ 0x1E, 0x00, // ####
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x07, 0x00, // ###
+ 0x03, 0x80, // ###
+ 0x07, 0x00, // ###
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x06, 0x00, // ##
+ 0x1E, 0x00, // ####
+ 0x1C, 0x00, // ###
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+
+ // @3760 '~' (14 pixels wide)
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x0E, 0x00, // ###
+ 0x3F, 0x30, // ###### ##
+ 0x33, 0xF0, // ## ######
+ 0x01, 0xE0, // ####
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+ 0x00, 0x00, //
+};
+
+
+sFONT Font20 = {
+ Font20_Table,
+ 14, /* Width */
+ 20, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font24.c b/bsp/pico/bsp/Fonts/font24.c
new file mode 100644
index 000000000..fea332129
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font24.c
@@ -0,0 +1,2520 @@
+/**
+ ******************************************************************************
+ * @file font24.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text font24 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+const uint8_t Font24_Table [] =
+{
+ // @0 ' ' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @72 '!' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @144 '"' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x0E, 0x70, 0x00, // ### ###
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x04, 0x20, 0x00, // # #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @216 '#' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @288 '$' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x07, 0xB0, 0x00, // #### ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x1C, 0x00, 0x00, // ###
+ 0x0F, 0x80, 0x00, // #####
+ 0x07, 0xE0, 0x00, // ######
+ 0x00, 0xF0, 0x00, // ####
+ 0x18, 0x30, 0x00, // ## ##
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x1C, 0x70, 0x00, // ### ###
+ 0x1F, 0xE0, 0x00, // ########
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @360 '%' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x80, 0x00, // ####
+ 0x0F, 0xC0, 0x00, // ######
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x07, 0xE0, 0x00, // ######
+ 0x1F, 0xF0, 0x00, // #########
+ 0x07, 0x38, 0x00, // ### ###
+ 0x06, 0x18, 0x00, // ## ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x07, 0x38, 0x00, // ### ###
+ 0x03, 0xF0, 0x00, // ######
+ 0x01, 0xE0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @432 '&' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xF0, 0x00, // ######
+ 0x07, 0xF0, 0x00, // #######
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x07, 0x00, 0x00, // ###
+ 0x0F, 0x9C, 0x00, // ##### ###
+ 0x1D, 0xFC, 0x00, // ### #######
+ 0x18, 0xF0, 0x00, // ## ####
+ 0x18, 0x70, 0x00, // ## ###
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x07, 0xDC, 0x00, // ##### ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @504 ''' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x01, 0x00, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @576 '(' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @648 ')' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x18, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x0F, 0x00, 0x00, // ####
+ 0x0E, 0x00, 0x00, // ###
+ 0x1C, 0x00, 0x00, // ###
+ 0x18, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @720 '*' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1D, 0xB8, 0x00, // ### ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 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, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @792 '+' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @864 ',' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 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, 0xC0, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @936 '-' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1008 '.' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1080 '/' (17 pixels wide)
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x0E, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1152 '0' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x07, 0xE0, 0x00, // ######
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1224 '1' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x80, 0x00, // #
+ 0x07, 0x80, 0x00, // ####
+ 0x1F, 0x80, 0x00, // ######
+ 0x1D, 0x80, 0x00, // ### ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1296 '2' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x38, 0x30, 0x00, // ### ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1368 '3' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xE0, 0x00, // #######
+ 0x0C, 0x70, 0x00, // ## ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xE0, 0x00, // #####
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x0F, 0xC0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1440 '4' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xE0, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x03, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x30, 0x60, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x60, 0x00, // ##
+ 0x03, 0xF8, 0x00, // #######
+ 0x03, 0xF8, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1512 '5' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF0, 0x00, // #########
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x0F, 0xC0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1584 '6' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xF8, 0x00, // #####
+ 0x03, 0xF8, 0x00, // #######
+ 0x07, 0x00, 0x00, // ###
+ 0x0E, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xC0, 0x00, // ## ####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xE0, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1656 '7' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1728 '8' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xE0, 0x00, // ######
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x07, 0xE0, 0x00, // ######
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x07, 0xE0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1800 '9' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x30, 0x00, // ### ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x03, 0xD8, 0x00, // #### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x1F, 0xC0, 0x00, // #######
+ 0x1F, 0x00, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1872 ':' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @1944 ';' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x02, 0x00, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2016 '<' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x1C, 0x00, // ###
+ 0x00, 0x3C, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0xF0, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0x0F, 0x00, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0xF0, 0x00, // ####
+ 0x00, 0x3C, 0x00, // ####
+ 0x00, 0x1C, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2088 '=' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 0xFC, 0x00, // #############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 0xFC, 0x00, // #############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2160 '>' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x70, 0x00, 0x00, // ###
+ 0x78, 0x00, 0x00, // ####
+ 0x1E, 0x00, 0x00, // ####
+ 0x07, 0x80, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x1E, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x01, 0xE0, 0x00, // ####
+ 0x07, 0x80, 0x00, // ####
+ 0x1E, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x70, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2232 '?' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xC0, 0x00, // #####
+ 0x0F, 0xE0, 0x00, // #######
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x30, 0x00, // ## ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0x80, 0x00, // ###
+ 0x03, 0x00, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2304 '@' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xE0, 0x00, // #####
+ 0x07, 0xF0, 0x00, // #######
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x19, 0xD8, 0x00, // ## ### ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0E, 0x18, 0x00, // ### ##
+ 0x07, 0xF8, 0x00, // ########
+ 0x03, 0xE0, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2376 'A' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0xC0, 0x00, // #######
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0xFC, 0x7F, 0x00, // ###### #######
+ 0xFC, 0x7F, 0x00, // ###### #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2448 'B' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x1C, 0x00, // ## ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2520 'C' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2592 'D' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xC0, 0x00, // #########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2664 'E' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7F, 0xF8, 0x00, // ############
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x19, 0x80, 0x00, // ## ##
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x19, 0x80, 0x00, // ## ##
+ 0x19, 0x98, 0x00, // ## ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7F, 0xF8, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2736 'F' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0xCC, 0x00, // ## ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0F, 0xC0, 0x00, // ######
+ 0x0F, 0xC0, 0x00, // ######
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2808 'G' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0xFE, 0x00, // ## #######
+ 0x30, 0xFE, 0x00, // ## #######
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2880 'H' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @2952 'I' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3024 'J' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xFE, 0x00, // ##########
+ 0x07, 0xFE, 0x00, // ##########
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x60, 0x00, // ## ##
+ 0x3F, 0xE0, 0x00, // #########
+ 0x0F, 0x80, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3096 'K' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x3E, 0x00, // ####### #####
+ 0x7F, 0x3E, 0x00, // ####### #####
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0xC0, 0x00, // ## ##
+ 0x19, 0x80, 0x00, // ## ##
+ 0x1B, 0x80, 0x00, // ## ###
+ 0x1F, 0xC0, 0x00, // #######
+ 0x1C, 0xE0, 0x00, // ### ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x1F, 0x00, // ####### #####
+ 0x7F, 0x1F, 0x00, // ####### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3168 'L' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x80, 0x00, // ########
+ 0x7F, 0x80, 0x00, // ########
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x7F, 0xFC, 0x00, // #############
+ 0x7F, 0xFC, 0x00, // #############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3240 'M' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xF0, 0x0F, 0x00, // #### ####
+ 0xF8, 0x1F, 0x00, // ##### #####
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x3C, 0x3C, 0x00, // #### ####
+ 0x3C, 0x3C, 0x00, // #### ####
+ 0x36, 0x6C, 0x00, // ## ## ## ##
+ 0x36, 0x6C, 0x00, // ## ## ## ##
+ 0x33, 0xCC, 0x00, // ## #### ##
+ 0x33, 0xCC, 0x00, // ## #### ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0xFE, 0x7F, 0x00, // ####### #######
+ 0xFE, 0x7F, 0x00, // ####### #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3312 'N' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0xFE, 0x00, // #### #######
+ 0x78, 0xFE, 0x00, // #### #######
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x1E, 0x18, 0x00, // #### ##
+ 0x1F, 0x18, 0x00, // ##### ##
+ 0x1B, 0x18, 0x00, // ## ## ##
+ 0x1B, 0x98, 0x00, // ## ### ##
+ 0x19, 0xD8, 0x00, // ## ### ##
+ 0x18, 0xD8, 0x00, // ## ## ##
+ 0x18, 0xF8, 0x00, // ## #####
+ 0x18, 0x78, 0x00, // ## ####
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x18, 0x00, // ####### ##
+ 0x7F, 0x18, 0x00, // ####### ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3384 'O' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3456 'P' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x0C, 0x1C, 0x00, // ## ###
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x0F, 0xE0, 0x00, // #######
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3528 'Q' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x07, 0xC0, 0x00, // #####
+ 0x07, 0xCC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x0C, 0x38, 0x00, // ## ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3600 'R' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0xE0, 0x00, // ##########
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xC0, 0x00, // #######
+ 0x18, 0xE0, 0x00, // ## ###
+ 0x18, 0x70, 0x00, // ## ###
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x7F, 0x1E, 0x00, // ####### ####
+ 0x7F, 0x0E, 0x00, // ####### ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3672 'S' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x0F, 0xF8, 0x00, // #########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1E, 0x00, 0x00, // ####
+ 0x0F, 0xC0, 0x00, // ######
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x78, 0x00, // ####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3744 'T' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x0F, 0xF0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3816 'U' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3888 'V' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7F, 0x7F, 0x00, // ####### #######
+ 0x7F, 0x7F, 0x00, // ####### #######
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0x80, 0x00, // #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @3960 'W' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xFE, 0x3F, 0x80, // ####### #######
+ 0xFE, 0x3F, 0x80, // ####### #######
+ 0x30, 0x06, 0x00, // ## ##
+ 0x30, 0x06, 0x00, // ## ##
+ 0x30, 0x86, 0x00, // ## # ##
+ 0x19, 0xCC, 0x00, // ## ### ##
+ 0x19, 0xCC, 0x00, // ## ### ##
+ 0x1B, 0x6C, 0x00, // ## ## ## ##
+ 0x1B, 0x6C, 0x00, // ## ## ## ##
+ 0x1E, 0x7C, 0x00, // #### #####
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0E, 0x38, 0x00, // ### ###
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4032 'X' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4104 'Y' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7C, 0x7E, 0x00, // ##### ######
+ 0x7C, 0x7E, 0x00, // ##### ######
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0xF0, 0x00, // ########
+ 0x0F, 0xF0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4176 'Z' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x18, 0xC0, 0x00, // ## ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4248 '[' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xF0, 0x00, // #####
+ 0x01, 0xF0, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4320 '\' (17 pixels wide)
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1C, 0x00, 0x00, // ###
+ 0x0C, 0x00, 0x00, // ##
+ 0x0E, 0x00, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x60, 0x00, // ##
+ 0x00, 0x70, 0x00, // ###
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4392 ']' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x80, 0x00, // #####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x80, 0x00, // #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4464 '^' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x80, 0x00, // #
+ 0x01, 0xC0, 0x00, // ###
+ 0x03, 0xE0, 0x00, // #####
+ 0x07, 0x70, 0x00, // ### ###
+ 0x06, 0x30, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x10, 0x04, 0x00, // # #
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4536 '_' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 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, 0xFF, 0x00, // ################
+ 0xFF, 0xFF, 0x00, // ################
+
+ // @4608 '`' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x03, 0x00, 0x00, // ##
+ 0x03, 0x80, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 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, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4680 'a' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0F, 0xC0, 0x00, // ######
+ 0x1F, 0xE0, 0x00, // ########
+ 0x00, 0x30, 0x00, // ##
+ 0x00, 0x30, 0x00, // ##
+ 0x07, 0xF0, 0x00, // #######
+ 0x1F, 0xF0, 0x00, // #########
+ 0x38, 0x30, 0x00, // ### ##
+ 0x30, 0x30, 0x00, // ## ##
+ 0x30, 0x70, 0x00, // ## ###
+ 0x1F, 0xFC, 0x00, // ###########
+ 0x0F, 0xBC, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4752 'b' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x7F, 0xF8, 0x00, // ############
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4824 'c' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xEC, 0x00, // ##### ##
+ 0x0F, 0xFC, 0x00, // ##########
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x38, 0x0C, 0x00, // ### ##
+ 0x1C, 0x1C, 0x00, // ### ###
+ 0x0F, 0xF8, 0x00, // #########
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4896 'd' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x78, 0x00, // ####
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xFE, 0x00, // ############
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @4968 'e' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xE0, 0x00, // ######
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x30, 0x00, 0x00, // ##
+ 0x30, 0x00, 0x00, // ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1F, 0xFC, 0x00, // ###########
+ 0x07, 0xF0, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5040 'f' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0xFC, 0x00, // #######
+ 0x03, 0xFC, 0x00, // ########
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x3F, 0xF8, 0x00, // ###########
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5112 'g' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x1F, 0xFE, 0x00, // ############
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x38, 0x00, // ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x0F, 0xC0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5184 'h' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x00, 0x00, // ####
+ 0x78, 0x00, 0x00, // ####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5256 'i' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5328 'j' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xF0, 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, 0x70, 0x00, // ###
+ 0x1F, 0xE0, 0x00, // ########
+ 0x1F, 0x80, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5400 'k' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3C, 0x00, 0x00, // ####
+ 0x3C, 0x00, 0x00, // ####
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0xF8, 0x00, // ## #####
+ 0x0C, 0xF8, 0x00, // ## #####
+ 0x0C, 0xC0, 0x00, // ## ##
+ 0x0D, 0x80, 0x00, // ## ##
+ 0x0F, 0x80, 0x00, // #####
+ 0x0F, 0x00, 0x00, // ####
+ 0x0F, 0x80, 0x00, // #####
+ 0x0D, 0xC0, 0x00, // ## ###
+ 0x0C, 0xE0, 0x00, // ## ###
+ 0x3C, 0x7C, 0x00, // #### #####
+ 0x3C, 0x7C, 0x00, // #### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5472 'l' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0x80, 0x00, // ######
+ 0x1F, 0x80, 0x00, // ######
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x3F, 0xFC, 0x00, // ############
+ 0x3F, 0xFC, 0x00, // ############
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5544 'm' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0xF7, 0x78, 0x00, // #### ### ####
+ 0xFF, 0xFC, 0x00, // ##############
+ 0x39, 0xCC, 0x00, // ### ### ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0x31, 0x8C, 0x00, // ## ## ##
+ 0xFD, 0xEF, 0x00, // ###### #### ####
+ 0xFD, 0xEF, 0x00, // ###### #### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5616 'n' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x7F, 0xF0, 0x00, // ###########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x7E, 0x7E, 0x00, // ###### ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5688 'o' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x03, 0xC0, 0x00, // ####
+ 0x0F, 0xF0, 0x00, // ########
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x30, 0x0C, 0x00, // ## ##
+ 0x38, 0x1C, 0x00, // ### ###
+ 0x1C, 0x38, 0x00, // ### ###
+ 0x0F, 0xF0, 0x00, // ########
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5760 'p' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7B, 0xE0, 0x00, // #### #####
+ 0x7F, 0xF8, 0x00, // ############
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x1C, 0x18, 0x00, // ### ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1B, 0xE0, 0x00, // ## #####
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x18, 0x00, 0x00, // ##
+ 0x7F, 0x00, 0x00, // #######
+ 0x7F, 0x00, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5832 'q' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x1F, 0xFE, 0x00, // ############
+ 0x18, 0x38, 0x00, // ## ###
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x30, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x07, 0xD8, 0x00, // ##### ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0x18, 0x00, // ##
+ 0x00, 0xFE, 0x00, // #######
+ 0x00, 0xFE, 0x00, // #######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5904 'r' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3E, 0x78, 0x00, // ##### ####
+ 0x3E, 0xFC, 0x00, // ##### ######
+ 0x07, 0xCC, 0x00, // ##### ##
+ 0x07, 0x00, 0x00, // ###
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x06, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @5976 's' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0xF8, 0x00, // ########
+ 0x0F, 0xF8, 0x00, // #########
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x1F, 0x80, 0x00, // ######
+ 0x0F, 0xF0, 0x00, // ########
+ 0x00, 0xF8, 0x00, // #####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x1F, 0xF0, 0x00, // #########
+ 0x1F, 0xE0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6048 't' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x3F, 0xF0, 0x00, // ##########
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x00, 0x00, // ##
+ 0x0C, 0x1C, 0x00, // ## ###
+ 0x07, 0xFC, 0x00, // #########
+ 0x03, 0xF0, 0x00, // ######
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6120 'u' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x78, 0x00, // #### ####
+ 0x78, 0x78, 0x00, // #### ####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x38, 0x00, // ## ###
+ 0x0F, 0xFE, 0x00, // ###########
+ 0x07, 0xDE, 0x00, // ##### ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6192 'v' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7C, 0x3E, 0x00, // ##### #####
+ 0x7C, 0x3E, 0x00, // ##### #####
+ 0x18, 0x18, 0x00, // ## ##
+ 0x18, 0x18, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x07, 0xE0, 0x00, // ######
+ 0x03, 0xC0, 0x00, // ####
+ 0x03, 0xC0, 0x00, // ####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6264 'w' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x78, 0x3C, 0x00, // #### ####
+ 0x78, 0x3C, 0x00, // #### ####
+ 0x31, 0x18, 0x00, // ## # ##
+ 0x33, 0x98, 0x00, // ## ### ##
+ 0x33, 0x98, 0x00, // ## ### ##
+ 0x1A, 0xB0, 0x00, // ## # # ##
+ 0x1E, 0xF0, 0x00, // #### ####
+ 0x1E, 0xF0, 0x00, // #### ####
+ 0x1C, 0x60, 0x00, // ### ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x0C, 0x60, 0x00, // ## ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6336 'x' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x06, 0x60, 0x00, // ## ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0xC0, 0x00, // ####
+ 0x06, 0x60, 0x00, // ## ##
+ 0x0C, 0x30, 0x00, // ## ##
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x3E, 0x7C, 0x00, // ##### #####
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6408 'y' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x7E, 0x1F, 0x00, // ###### #####
+ 0x7E, 0x1F, 0x00, // ###### #####
+ 0x18, 0x0C, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x06, 0x30, 0x00, // ## ##
+ 0x03, 0x60, 0x00, // ## ##
+ 0x03, 0xE0, 0x00, // #####
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x3F, 0xC0, 0x00, // ########
+ 0x3F, 0xC0, 0x00, // ########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6480 'z' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x18, 0x30, 0x00, // ## ##
+ 0x18, 0x60, 0x00, // ## ##
+ 0x00, 0xC0, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x00, 0x00, // ##
+ 0x06, 0x18, 0x00, // ## ##
+ 0x0C, 0x18, 0x00, // ## ##
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x1F, 0xF8, 0x00, // ##########
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6552 '{' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xE0, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x03, 0x80, 0x00, // ###
+ 0x07, 0x00, 0x00, // ###
+ 0x03, 0x80, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xE0, 0x00, // ####
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6624 '|' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6696 '}' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x07, 0x00, 0x00, // ###
+ 0x07, 0x80, 0x00, // ####
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0xC0, 0x00, // ###
+ 0x00, 0xE0, 0x00, // ###
+ 0x01, 0xC0, 0x00, // ###
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x01, 0x80, 0x00, // ##
+ 0x07, 0x80, 0x00, // ####
+ 0x07, 0x00, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+
+ // @6768 '~' (17 pixels wide)
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x0E, 0x00, 0x00, // ###
+ 0x1F, 0x18, 0x00, // ##### ##
+ 0x3B, 0xB8, 0x00, // ### ### ###
+ 0x31, 0xF0, 0x00, // ## #####
+ 0x00, 0xE0, 0x00, // ###
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+ 0x00, 0x00, 0x00, //
+};
+
+sFONT Font24 = {
+ Font24_Table,
+ 17, /* Width */
+ 24, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font24CN.c b/bsp/pico/bsp/Fonts/font24CN.c
new file mode 100644
index 000000000..bfcd06a8e
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font24CN.c
@@ -0,0 +1,524 @@
+/**
+ ******************************************************************************
+ * @file Font12.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font12 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+
+//
+// Font data for Courier New 12pt
+//
+
+const CH_CN Font24CN_Table[] =
+{
+/*-- ÎÄ×Ö: Äã --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Äã"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC1,0xC0,0x00,
+0x01,0xE3,0xE0,0x00,0x03,0xE3,0xC0,0x00,0x03,0xC7,0x80,0x00,0x03,0xC7,0xFF,0xFF,
+0x07,0x8F,0xFF,0xFF,0x07,0x8F,0x00,0x0F,0x0F,0x1E,0x00,0x1E,0x0F,0x3C,0x1E,0x1E,
+0x1F,0x3C,0x1E,0x3E,0x1F,0x18,0x1E,0x3C,0x3F,0x00,0x1E,0x1C,0x7F,0x00,0x1E,0x00,
+0x7F,0x07,0x9E,0x70,0xFF,0x07,0x9E,0xF0,0xEF,0x0F,0x9E,0x78,0x6F,0x0F,0x1E,0x78,
+0x0F,0x0F,0x1E,0x3C,0x0F,0x1E,0x1E,0x3C,0x0F,0x1E,0x1E,0x1E,0x0F,0x3C,0x1E,0x1E,
+0x0F,0x3C,0x1E,0x1F,0x0F,0x7C,0x1E,0x0F,0x0F,0x78,0x1E,0x0E,0x0F,0x00,0x1E,0x00,
+0x0F,0x00,0x1E,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x07,0xFC,0x00,0x0F,0x07,0xF8,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ºÃ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ºÃ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,
+0x0F,0x07,0xFF,0xFE,0x0F,0x07,0xFF,0xFE,0x0F,0x00,0x00,0x3E,0x1E,0x00,0x00,0xFC,
+0xFF,0xF8,0x01,0xF0,0xFF,0xF8,0x03,0xE0,0x1E,0x78,0x07,0xC0,0x1E,0x78,0x0F,0x80,
+0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00,0x3C,0x78,0x0F,0x00,
+0x3C,0x7F,0xFF,0xFF,0x78,0xFF,0xFF,0xFF,0x78,0xF0,0x0F,0x00,0x78,0xF0,0x0F,0x00,
+0x3D,0xE0,0x0F,0x00,0x1F,0xE0,0x0F,0x00,0x0F,0xE0,0x0F,0x00,0x07,0xC0,0x0F,0x00,
+0x07,0xE0,0x0F,0x00,0x07,0xF0,0x0F,0x00,0x0F,0xF8,0x0F,0x00,0x1E,0x7C,0x0F,0x00,
+0x3C,0x38,0x0F,0x00,0x78,0x00,0x0F,0x00,0xF0,0x03,0xFF,0x00,0x60,0x01,0xFE,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ΢ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"΢"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x01,0xE0,0x07,0x87,0x01,0xE0,
+0x07,0x07,0x01,0xC0,0x0F,0xF7,0x79,0xC0,0x1E,0xF7,0x7B,0xC0,0x1E,0xF7,0x7B,0x80,
+0x3C,0xF7,0x7B,0xFF,0x78,0xF7,0x7B,0xFF,0xF8,0xF7,0x7F,0x9E,0xF7,0xFF,0xFF,0x9E,
+0x67,0xFF,0xFF,0x9E,0x07,0x00,0x7F,0x9C,0x0F,0x00,0x0F,0x9C,0x1E,0x00,0x1F,0x9C,
+0x1E,0x7F,0xFF,0xBC,0x3E,0x7F,0xF3,0xFC,0x3E,0x00,0x03,0xFC,0x7E,0x00,0x01,0xF8,
+0xFE,0x00,0x01,0xF8,0xFE,0x7F,0xE1,0xF8,0xDE,0x7F,0xE1,0xF8,0x1E,0x78,0xE0,0xF0,
+0x1E,0x78,0xEE,0xF0,0x1E,0x78,0xFF,0xF0,0x1E,0x78,0xFD,0xF8,0x1E,0x79,0xFB,0xFC,
+0x1E,0xF1,0xF7,0xBC,0x1E,0xF0,0xEF,0x9E,0x1F,0xE0,0x0F,0x0F,0x1E,0xC0,0x1E,0x0F,
+0x1E,0x00,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Èí --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Èí"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x03,0xC0,0x78,0x00,0x07,0x80,0x78,0x00,0x07,0x80,0x78,0x00,
+0x07,0x80,0xF0,0x00,0x0F,0x00,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+0x1E,0x03,0xC0,0x1F,0x1E,0x03,0xC0,0x1E,0x1F,0xE7,0x8F,0x3E,0x3D,0xE7,0x8F,0x3C,
+0x3D,0xEF,0x0F,0x7C,0x3D,0xE7,0x0F,0x78,0x79,0xE0,0x0F,0x00,0x79,0xE0,0x0E,0x00,
+0x7F,0xFE,0x0E,0x00,0x7F,0xFE,0x1F,0x00,0x01,0xE0,0x1F,0x00,0x01,0xE0,0x1F,0x00,
+0x01,0xE0,0x1F,0x80,0x01,0xE0,0x1F,0x80,0x01,0xE0,0x3F,0x80,0x01,0xFF,0x3F,0xC0,
+0x0F,0xFF,0x7B,0xC0,0xFF,0xF0,0x79,0xE0,0xF9,0xE0,0xF1,0xF0,0x01,0xE1,0xF0,0xF0,
+0x01,0xE3,0xE0,0xF8,0x01,0xE7,0xC0,0x7C,0x01,0xFF,0x80,0x3F,0x01,0xFF,0x00,0x1F,
+0x01,0xEC,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ÑÅ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ÑÅ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,0x00,0x00,0x00,0xFF,0x00,
+0x7F,0xFC,0xF7,0x80,0x7F,0xFD,0xE3,0xC0,0x01,0xC1,0xE3,0xC0,0x01,0xC3,0xC1,0x80,
+0x3D,0xC7,0xFF,0xFF,0x39,0xC7,0xFF,0xFF,0x39,0xCF,0x83,0x80,0x79,0xDF,0x83,0x80,
+0x79,0xFF,0x83,0x80,0x79,0xDF,0x83,0x80,0x71,0xC3,0x83,0x80,0x7F,0xFF,0xFF,0xFE,
+0x7F,0xFF,0xFF,0xFE,0x03,0xC3,0x83,0x80,0x07,0xC3,0x83,0x80,0x07,0xC3,0x83,0x80,
+0x0F,0xC3,0x83,0x80,0x0F,0xC3,0x83,0x80,0x1F,0xC3,0xFF,0xFE,0x1D,0xC3,0xFF,0xFE,
+0x3D,0xC3,0x83,0x80,0x79,0xC3,0x83,0x80,0xF1,0xC3,0x83,0x80,0xF1,0xC3,0x83,0x80,
+0x61,0xC3,0x83,0x80,0x01,0xC3,0xFF,0xFF,0x03,0xC3,0xFF,0xFF,0x1F,0xC3,0x80,0x00,
+0x1F,0x83,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ºÚ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ºÚ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1E,0x03,0xC0,0x3C,0x1E,0xC3,0xC7,0x3C,
+0x1F,0xE3,0xC7,0xBC,0x1E,0xF3,0xCF,0x3C,0x1E,0xFB,0xDF,0x3C,0x1E,0x7B,0xDE,0x3C,
+0x1E,0x33,0xDC,0x3C,0x1E,0x03,0xC0,0x3C,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,
+0x1E,0x03,0xC0,0x3C,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x3F,0xFF,0xFF,0xFC,
+0x3F,0xFF,0xFF,0xFC,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x1C,0x38,0x70,0x70,
+0x3E,0x78,0xF8,0xF8,0x3C,0x7C,0x78,0x7C,0x7C,0x3C,0x3C,0x3E,0xF8,0x3E,0x3C,0x1F,
+0xF0,0x1C,0x18,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ´Ë --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"´Ë"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x3C,0x00,
+0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00,0x00,0x78,0x3C,0x00,
+0x00,0x78,0x3C,0x0C,0x3C,0x78,0x3C,0x1E,0x3C,0x78,0x3C,0x3F,0x3C,0x78,0x3C,0xF8,
+0x3C,0x7F,0xFD,0xF0,0x3C,0x7F,0xFF,0xE0,0x3C,0x78,0x3F,0x80,0x3C,0x78,0x3E,0x00,
+0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,
+0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x00,0x3C,0x78,0x3C,0x0E,0x3C,0x78,0x3C,0x0F,
+0x3C,0x78,0x3C,0x0F,0x3C,0x79,0xFC,0x0F,0x3C,0x7F,0xFC,0x0F,0x3F,0xFF,0x3C,0x0F,
+0x3F,0xF0,0x3E,0x1E,0xFF,0x00,0x1F,0xFE,0xF0,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ×Ö --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"×Ö"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0xC0,0x00,
+0x00,0x03,0xE0,0x00,0x00,0x01,0xE0,0x00,0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,
+0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,0x78,0x00,0x00,0x1E,
+0x7B,0xFF,0xFF,0xDE,0x03,0xFF,0xFF,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3F,0x00,
+0x00,0x00,0x7E,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,
+0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0xE0,0x00,
+0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xC0,0x00,0x00,0xFF,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ìå --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ìå"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x3C,0x00,
+0x03,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x07,0x80,0x3C,0x00,0x07,0x80,0x3C,0x00,
+0x07,0x80,0x3C,0x00,0x0F,0xFF,0xFF,0xFF,0x0F,0xFF,0xFF,0xFF,0x1F,0x01,0xFE,0x00,
+0x1F,0x01,0xFF,0x00,0x3F,0x01,0xFF,0x00,0x3F,0x03,0xFF,0x00,0x7F,0x03,0xFF,0x80,
+0x7F,0x07,0xBF,0x80,0xFF,0x07,0xBF,0xC0,0xEF,0x0F,0x3D,0xC0,0xCF,0x0F,0x3D,0xE0,
+0x0F,0x1E,0x3D,0xE0,0x0F,0x1E,0x3C,0xF0,0x0F,0x3C,0x3C,0x78,0x0F,0x7C,0x3C,0x7C,
+0x0F,0xF8,0x3C,0x3E,0x0F,0xF7,0xFF,0xDF,0x0F,0xE7,0xFF,0xCF,0x0F,0xC0,0x3C,0x06,
+0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00,0x0F,0x00,0x3C,0x00,
+0x0F,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ï --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ÏÂ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,
+0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,
+0x00,0x0F,0xE0,0x00,0x00,0x0F,0xF8,0x00,0x00,0x0F,0xFC,0x00,0x00,0x0F,0xBF,0x00,
+0x00,0x0F,0x9F,0x80,0x00,0x0F,0x87,0xE0,0x00,0x0F,0x83,0xF0,0x00,0x0F,0x80,0xF8,
+0x00,0x0F,0x80,0x7C,0x00,0x0F,0x80,0x38,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,
+0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,
+0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ¶Ô --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"¶Ô"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,
+0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x7F,0xFC,0x00,0x78,0x7F,0xFC,0x00,0x78,
+0x00,0x3C,0x00,0x78,0x00,0x3F,0xFF,0xFF,0x30,0x3F,0xFF,0xFF,0x78,0x3C,0x00,0x78,
+0x3C,0x38,0x00,0x78,0x3E,0x78,0x00,0x78,0x1E,0x78,0xC0,0x78,0x0F,0x79,0xE0,0x78,
+0x0F,0xF0,0xF0,0x78,0x07,0xF0,0xF8,0x78,0x03,0xF0,0x78,0x78,0x01,0xE0,0x3C,0x78,
+0x03,0xF0,0x3E,0x78,0x03,0xF0,0x18,0x78,0x07,0xF8,0x00,0x78,0x07,0xFC,0x00,0x78,
+0x0F,0x3E,0x00,0x78,0x1F,0x1E,0x00,0x78,0x3E,0x1F,0x00,0x78,0x7C,0x0E,0x00,0xF8,
+0xF8,0x00,0x00,0xF0,0xF0,0x00,0x3F,0xF0,0x60,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ó¦ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ó¦"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xE0,0x00,
+0x00,0x01,0xF0,0x00,0x00,0x00,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,0x1F,0xFF,0xFF,0xFF,
+0x1E,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x1E,0x01,0xE0,0x78,0x1E,0x01,0xE0,0x78,
+0x1E,0xE1,0xE0,0x78,0x1F,0xF1,0xF0,0xF8,0x1E,0xF0,0xF0,0xF0,0x1E,0xF0,0xF0,0xF0,
+0x1E,0xF8,0xF0,0xF0,0x1E,0x78,0xF1,0xF0,0x1E,0x78,0xF9,0xE0,0x1E,0x78,0x79,0xE0,
+0x1E,0x7C,0x7B,0xE0,0x1E,0x3C,0x7B,0xC0,0x1E,0x3C,0x7B,0xC0,0x1E,0x3C,0x7B,0xC0,
+0x3C,0x3E,0x07,0x80,0x3C,0x1C,0x07,0x80,0x3C,0x00,0x07,0x80,0x3C,0x00,0x0F,0x00,
+0x78,0x00,0x0F,0x00,0x7B,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x00,
+0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: µÄ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"µÄ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x3C,0x00,0x07,0xC0,0x3E,0x00,
+0x07,0x80,0x3C,0x00,0x07,0x80,0x7C,0x00,0x0F,0x00,0x78,0x00,0x7F,0xFE,0x7F,0xFE,
+0x7F,0xFE,0xFF,0xFE,0x78,0x1E,0xF0,0x1E,0x78,0x1F,0xE0,0x1E,0x78,0x1F,0xE0,0x1E,
+0x78,0x1F,0xC0,0x1E,0x78,0x1F,0xC0,0x1E,0x78,0x1F,0xF0,0x1E,0x78,0x1E,0xF8,0x1E,
+0x78,0x1E,0x7C,0x1E,0x7F,0xFE,0x3C,0x1E,0x7F,0xFE,0x1E,0x1E,0x78,0x1E,0x1F,0x1E,
+0x78,0x1E,0x0F,0x9E,0x78,0x1E,0x07,0x9E,0x78,0x1E,0x07,0x1E,0x78,0x1E,0x00,0x1E,
+0x78,0x1E,0x00,0x1E,0x78,0x1E,0x00,0x3E,0x78,0x1E,0x00,0x3C,0x78,0x1E,0x00,0x3C,
+0x7F,0xFE,0x00,0x3C,0x7F,0xFE,0x00,0x7C,0x78,0x1E,0x3F,0xF8,0x78,0x1E,0x3F,0xF0,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: µã --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"µã"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
+0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,
+0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
+0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,
+0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,0x0F,0x00,0x00,0x78,
+0x0F,0xFF,0xFF,0xF8,0x0F,0xFF,0xFF,0xF8,0x0F,0x00,0x00,0x78,0x00,0x00,0x00,0x00,
+0x0C,0x38,0x38,0x30,0x1E,0x7C,0x78,0x78,0x3E,0x3C,0x78,0x78,0x3C,0x3C,0x3C,0x3C,
+0x7C,0x3E,0x3C,0x3E,0xF8,0x1E,0x3C,0x1E,0xF0,0x1E,0x1E,0x1F,0x70,0x1E,0x1C,0x0E,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Õó --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Õó"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x78,0x00,
+0x7F,0xF0,0x78,0x00,0x7F,0xF0,0x78,0x00,0x79,0xFF,0xFF,0xFF,0x79,0xFF,0xFF,0xFF,
+0x79,0xE1,0xE0,0x00,0x79,0xE1,0xE0,0x00,0x7B,0xC1,0xEF,0x80,0x7B,0xC3,0xCF,0x80,
+0x7B,0xC3,0xCF,0x80,0x7F,0x87,0xCF,0x80,0x7F,0x87,0x8F,0x80,0x7F,0x87,0x8F,0x80,
+0x7B,0xCF,0x0F,0x80,0x7B,0xCF,0xFF,0xFE,0x79,0xEF,0xFF,0xFE,0x79,0xE0,0x0F,0x80,
+0x78,0xE0,0x0F,0x80,0x78,0xF0,0x0F,0x80,0x78,0xF0,0x0F,0x80,0x78,0xF0,0x0F,0x80,
+0x78,0xFF,0xFF,0xFF,0x79,0xFF,0xFF,0xFF,0x7F,0xE0,0x0F,0x80,0x7F,0xC0,0x0F,0x80,
+0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80,0x78,0x00,0x0F,0x80,
+0x78,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ϊ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ϊ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,
+0x0E,0x07,0x80,0x00,0x1F,0x07,0x80,0x00,0x0F,0x87,0x80,0x00,0x07,0xC7,0x80,0x00,
+0x01,0xE7,0x80,0x00,0x00,0xC7,0x80,0x00,0x00,0x07,0x80,0x00,0x7F,0xFF,0xFF,0xFC,
+0x7F,0xFF,0xFF,0xFC,0x00,0x07,0x80,0x3C,0x00,0x0F,0x80,0x3C,0x00,0x0F,0x00,0x3C,
+0x00,0x0F,0x00,0x3C,0x00,0x0F,0x60,0x3C,0x00,0x1F,0xF0,0x3C,0x00,0x1E,0x78,0x3C,
+0x00,0x3E,0x3C,0x3C,0x00,0x3C,0x3E,0x3C,0x00,0x7C,0x1F,0x3C,0x00,0x78,0x0F,0x3C,
+0x00,0xF8,0x06,0x3C,0x01,0xF0,0x00,0x3C,0x03,0xE0,0x00,0x7C,0x07,0xC0,0x00,0x7C,
+0x0F,0x80,0x00,0x78,0x1F,0x00,0x00,0xF8,0x3E,0x00,0xFF,0xF0,0x7C,0x00,0xFF,0xE0,
+0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ê÷ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ê÷"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x38,
+0x0F,0x00,0x00,0x38,0x0F,0x00,0x00,0x38,0x0F,0x3F,0xF8,0x38,0x0F,0x3F,0xF8,0x38,
+0x0F,0x00,0x78,0x38,0xFF,0xE0,0x7F,0xFF,0xFF,0xE0,0x7F,0xFF,0x0F,0x00,0x70,0x38,
+0x0F,0x18,0xF0,0x38,0x1F,0x3C,0xF0,0x38,0x1F,0x1C,0xFE,0x38,0x1F,0xDE,0xFE,0x38,
+0x3F,0xEF,0xEF,0x38,0x3F,0xFF,0xEF,0x38,0x3F,0xF7,0xE7,0xB8,0x7F,0x67,0xC7,0xB8,
+0x7F,0x03,0xC3,0xB8,0xFF,0x07,0xE0,0x38,0xEF,0x07,0xE0,0x38,0xEF,0x0F,0xF0,0x38,
+0xCF,0x1F,0xF0,0x38,0x0F,0x1E,0x78,0x38,0x0F,0x3C,0x7C,0x38,0x0F,0x78,0x3C,0x38,
+0x0F,0xF8,0x38,0x38,0x0F,0x60,0x00,0x78,0x0F,0x00,0x0F,0xF8,0x0F,0x00,0x07,0xF0,
+0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ý® --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ý®"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x1E,0x00,0x00,0x3C,0x1E,0x00,
+0x00,0x3C,0x1E,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x3C,0x1E,0x00,
+0x07,0xBC,0x1E,0x00,0x07,0x80,0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x0F,0xFF,0xFF,0xFC,
+0x1E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xF0,
+0xF7,0xFF,0xFF,0xF0,0x37,0x83,0x80,0xF0,0x07,0x87,0xC0,0xF0,0x07,0x83,0xF0,0xF0,
+0x07,0x00,0xE0,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F,0x0F,0x00,0xE0,
+0x0F,0x0F,0x81,0xE0,0x0E,0x03,0xE1,0xE0,0x1E,0x01,0xC1,0xE0,0x1F,0xFF,0xFF,0xFE,
+0x1F,0xFF,0xFF,0xFE,0x00,0x00,0x01,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0xFF,0xC0,
+0x00,0x00,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ÅÉ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ÅÉ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x3E,
+0x7C,0x00,0x3F,0xFE,0x3F,0x3F,0xFF,0xF0,0x1F,0xBF,0xE0,0x00,0x07,0xBC,0x00,0x00,
+0x03,0x3C,0x00,0x00,0x00,0x3C,0x00,0x3C,0x00,0x3C,0x0F,0xFE,0x70,0x3D,0xFF,0xF8,
+0xF8,0x3D,0xFF,0x00,0x7C,0x3D,0xE7,0x80,0x3F,0x3D,0xE7,0x80,0x1F,0x3D,0xE7,0x8E,
+0x0E,0x3D,0xE7,0x9F,0x00,0x3D,0xE7,0xFE,0x00,0x39,0xE7,0xF8,0x00,0x39,0xE3,0xF0,
+0x1C,0x39,0xE3,0xC0,0x1E,0x79,0xE3,0xC0,0x1E,0x79,0xE1,0xE0,0x1E,0x79,0xE1,0xE0,
+0x3C,0x79,0xE0,0xF0,0x3C,0x79,0xE0,0xF8,0x3C,0xF1,0xE0,0x7C,0x3C,0xF1,0xE3,0x7C,
+0x7D,0xF1,0xEF,0x3F,0x79,0xE1,0xFE,0x1F,0x7B,0xE1,0xF8,0x0E,0x7B,0xC3,0xE0,0x00,
+0x79,0x81,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: A --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{
+"A"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0xFC,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,
+0x01,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,0xEF,0x00,0x00,0x03,0xEF,0x80,0x00,
+0x03,0xCF,0x80,0x00,0x07,0xC7,0x80,0x00,0x07,0xC7,0xC0,0x00,0x07,0x87,0xC0,0x00,
+0x0F,0x83,0xE0,0x00,0x0F,0x83,0xE0,0x00,0x0F,0x01,0xE0,0x00,0x1F,0xFF,0xF0,0x00,
+0x1F,0xFF,0xF0,0x00,0x3F,0xFF,0xF8,0x00,0x3E,0x00,0xF8,0x00,0x3C,0x00,0xF8,0x00,
+0x7C,0x00,0x7C,0x00,0x7C,0x00,0x7C,0x00,0x78,0x00,0x3C,0x00,0xF8,0x00,0x3E,0x00,
+0xF8,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: a --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"a"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xF8,0x00,0x00,
+0x1F,0xFE,0x00,0x00,0x3F,0xFE,0x00,0x00,0x3E,0x3F,0x00,0x00,0x38,0x1F,0x00,0x00,
+0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x03,0xFF,0x00,0x00,0x1F,0xFF,0x00,0x00,
+0x3F,0x8F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x78,0x1F,0x00,0x00,
+0x7C,0x1F,0x00,0x00,0x7E,0x7F,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFF,0x00,0x00,
+0x0F,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: b --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"b"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
+0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,
+0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x3C,0xFE,0x00,0x00,
+0x3D,0xFF,0x80,0x00,0x3F,0xFF,0xC0,0x00,0x3F,0x8F,0xC0,0x00,0x3F,0x07,0xE0,0x00,
+0x3E,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x3C,0x01,0xE0,0x00,0x3C,0x01,0xE0,0x00,
+0x3C,0x01,0xE0,0x00,0x3C,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,0x3E,0x03,0xE0,0x00,
+0x3F,0x07,0xC0,0x00,0x3F,0x8F,0xC0,0x00,0x3F,0xFF,0x80,0x00,0x3F,0xFF,0x00,0x00,
+0x3C,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: c --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"c"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x00,
+0x07,0xFE,0x00,0x00,0x1F,0xFE,0x00,0x00,0x3F,0x86,0x00,0x00,0x3E,0x00,0x00,0x00,
+0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,
+0x78,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,
+0x3E,0x00,0x00,0x00,0x3F,0x86,0x00,0x00,0x1F,0xFE,0x00,0x00,0x0F,0xFE,0x00,0x00,
+0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ΢ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"΢"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x07,0x01,0xE0,0x07,0x87,0x01,0xE0,
+0x07,0x07,0x01,0xC0,0x0F,0xF7,0x79,0xC0,0x1E,0xF7,0x7B,0xC0,0x1E,0xF7,0x7B,0x80,
+0x3C,0xF7,0x7B,0xFF,0x78,0xF7,0x7B,0xFF,0xF8,0xF7,0x7F,0x9E,0xF7,0xFF,0xFF,0x9E,
+0x67,0xFF,0xFF,0x9E,0x07,0x00,0x7F,0x9C,0x0F,0x00,0x0F,0x9C,0x1E,0x00,0x1F,0x9C,
+0x1E,0x7F,0xFF,0xBC,0x3E,0x7F,0xF3,0xFC,0x3E,0x00,0x03,0xFC,0x7E,0x00,0x01,0xF8,
+0xFE,0x00,0x01,0xF8,0xFE,0x7F,0xE1,0xF8,0xDE,0x7F,0xE1,0xF8,0x1E,0x78,0xE0,0xF0,
+0x1E,0x78,0xEE,0xF0,0x1E,0x78,0xFF,0xF0,0x1E,0x78,0xFD,0xF8,0x1E,0x79,0xFB,0xFC,
+0x1E,0xF1,0xF7,0xBC,0x1E,0xF0,0xEF,0x9E,0x1F,0xE0,0x0F,0x0F,0x1E,0xC0,0x1E,0x0F,
+0x1E,0x00,0x0C,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ñ© --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ñ©"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
+0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x78,0x03,0xC0,0x1E,0x78,0x03,0xC0,0x1E,
+0x7F,0xFF,0xFF,0xFE,0x7F,0xFF,0xFF,0xFE,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,
+0x07,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xE0,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,
+0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,
+0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,
+0x00,0x00,0x00,0x78,0x3F,0xFF,0xFF,0xF8,0x3F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x78,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: µç --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"µç"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,
+0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8,
+0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,
+0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8,
+0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,
+0x78,0x07,0x80,0xF8,0x78,0x07,0x80,0xF8,0x7F,0xFF,0xFF,0xF8,0x7F,0xFF,0xFF,0xF8,
+0x78,0x07,0x80,0x0E,0x78,0x07,0x80,0x0F,0x00,0x07,0x80,0x0F,0x00,0x07,0x80,0x0F,
+0x00,0x07,0x80,0x1F,0x00,0x07,0x80,0x1E,0x00,0x03,0xFF,0xFE,0x00,0x01,0xFF,0xFC,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ×Ó --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"×Ó"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1F,0xFF,0xFF,0xF8,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x07,0xE0,
+0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0x80,0x00,0x00,0x3E,0x00,0x00,0x00,0xFC,0x00,
+0x00,0x01,0xF8,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
+0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
+0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
+0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,
+0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x01,0xFF,0xC0,0x00,0x00,0xFF,0x80,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: »¶ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ȧ"},{
+0x00,0x00,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,0x01,0xF0,0x00,
+0x00,0x01,0xE0,0x00,0x7F,0xF1,0xE0,0x00,0xFF,0xF9,0xE0,0x00,0xFF,0xFB,0xFF,0xFF,
+0x7F,0xFB,0xFF,0xFF,0x00,0x7B,0xFF,0xFF,0x00,0x7F,0x8C,0x1E,0x78,0x77,0x9E,0x3E,
+0x78,0xF7,0x9E,0x3C,0x3C,0xFF,0x1E,0x7C,0x3E,0xFF,0x1E,0x78,0x1E,0xF6,0x1E,0x00,
+0x0F,0xE0,0x1E,0x00,0x0F,0xE0,0x1E,0x00,0x07,0xE0,0x1F,0x00,0x03,0xE0,0x3F,0x00,
+0x03,0xE0,0x3F,0x00,0x03,0xE0,0x3F,0x80,0x07,0xF0,0x7F,0x80,0x0F,0xF8,0x7F,0xC0,
+0x0F,0x78,0xFB,0xC0,0x1F,0x7C,0xF3,0xE0,0x3E,0x3D,0xF1,0xF0,0x7C,0x3B,0xE0,0xF8,
+0xF8,0x07,0xC0,0xFC,0xF8,0x1F,0x80,0x7E,0xF0,0x3F,0x00,0x3F,0x60,0x7E,0x00,0x1E,
+0x00,0x38,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Ó --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"Ó"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x38,0x03,0xF0,0x00,
+0x7C,0x3F,0xF0,0x00,0x3E,0x3F,0xFF,0xFE,0x1E,0x3E,0x1F,0xFE,0x1F,0x3C,0x1F,0xFE,
+0x0F,0xBC,0x1E,0x1E,0x07,0x3C,0x1E,0x1E,0x00,0x3C,0x1E,0x1E,0x00,0x3C,0x1E,0x1E,
+0x00,0x3C,0x1E,0x1E,0xFF,0x3C,0x1E,0x1E,0xFF,0x3C,0x1E,0x1E,0xFF,0x3C,0x1E,0x1E,
+0x0F,0x3C,0x1E,0x1E,0x0F,0x3C,0x1E,0x1E,0x0F,0x3C,0x1E,0x1E,0x0F,0x3C,0x7E,0x1E,
+0x0F,0x3D,0xFE,0x1E,0x0F,0x3F,0xFE,0x1E,0x0F,0x3F,0xDF,0xFC,0x0F,0x7F,0x1F,0xFC,
+0x0F,0x3E,0x1F,0xF8,0x0F,0x38,0x1E,0x00,0x1F,0x00,0x1E,0x00,0x3F,0x00,0x1E,0x00,
+0x7F,0x80,0x1E,0x00,0xFF,0xF0,0x00,0x0F,0xF3,0xFF,0xFF,0xFF,0xE0,0xFF,0xFF,0xFF,
+0x60,0x0F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: ʹ --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ʹ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x3C,0x00,0x03,0xC0,0x3C,0x00,
+0x03,0xC0,0x3C,0x00,0x07,0x80,0x3C,0x00,0x07,0xFF,0xFF,0xFE,0x07,0xFF,0xFF,0xFF,
+0x0F,0xFF,0xFF,0xFF,0x0F,0x00,0x3C,0x00,0x1E,0x00,0x3C,0x00,0x1E,0x00,0x3C,0x00,
+0x1E,0x3F,0xFF,0xFC,0x3E,0x3F,0xFF,0xFC,0x3E,0x3C,0x3C,0x1C,0x7E,0x3C,0x3C,0x1C,
+0xFE,0x3C,0x3C,0x1C,0xFE,0x3C,0x3C,0x1C,0xFE,0x3F,0xFF,0xFC,0xFE,0x3F,0xFF,0xFC,
+0x1E,0x3F,0xFF,0xFC,0x1E,0x04,0x3C,0x1C,0x1E,0x1E,0x38,0x00,0x1E,0x1F,0x78,0x00,
+0x1E,0x0F,0x78,0x00,0x1E,0x07,0xF8,0x00,0x1E,0x07,0xF0,0x00,0x1E,0x03,0xF8,0x00,
+0x1E,0x07,0xFE,0x00,0x1E,0x1F,0xFF,0xE0,0x1E,0x7F,0x1F,0xFF,0x1F,0xFE,0x07,0xFF,
+0x1E,0xF8,0x00,0x7E,0x0E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+/*-- ÎÄ×Ö: Óà --*/
+/*-- ΢ÈíÑźÚ24; ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=32x41 --*/
+{{"ÓÃ"},{
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1E,0x01,0xE0,0x3C,
+0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,
+0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1E,0x01,0xE0,0x3C,
+0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,
+0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1F,0xFF,0xFF,0xFC,0x1E,0x01,0xE0,0x3C,
+0x1E,0x01,0xE0,0x3C,0x1E,0x01,0xE0,0x3C,0x3E,0x01,0xE0,0x3C,0x3C,0x01,0xE0,0x3C,
+0x3C,0x01,0xE0,0x3C,0x7C,0x01,0xE0,0x3C,0x78,0x01,0xEF,0xFC,0xF8,0x01,0xEF,0xFC,
+0x70,0x01,0xEF,0xF8,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00}},
+
+};
+
+cFONT Font24CN = {
+ Font24CN_Table,
+ sizeof(Font24CN_Table)/sizeof(CH_CN), /*size of table*/
+ 24, /* ASCII Width */
+ 32, /* Width */
+ 41, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/font8.c b/bsp/pico/bsp/Fonts/font8.c
new file mode 100644
index 000000000..88450d989
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/font8.c
@@ -0,0 +1,1004 @@
+/**
+ ******************************************************************************
+ * @file Font8.c
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief This file provides text Font8 for STM32xx-EVAL's LCD driver.
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Includes ------------------------------------------------------------------*/
+#include "fonts.h"
+
+//
+// Font data for Courier New 12pt
+//
+
+const uint8_t Font8_Table[] =
+{
+ // @0 ' ' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @8 '!' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @16 '"' (5 pixels wide)
+ 0x50, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @24 '#' (5 pixels wide)
+ 0x28, // # #
+ 0x50, // # #
+ 0xF8, // #####
+ 0x50, // # #
+ 0xF8, // #####
+ 0x50, // # #
+ 0xA0, // # #
+ 0x00, //
+
+ // @32 '$' (5 pixels wide)
+ 0x20, // #
+ 0x30, // ##
+ 0x60, // ##
+ 0x30, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x20, // #
+ 0x00, //
+
+ // @40 '%' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x18, // ##
+ 0x60, // ##
+ 0x10, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @48 '&' (5 pixels wide)
+ 0x00, //
+ 0x38, // ###
+ 0x20, // #
+ 0x60, // ##
+ 0x50, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @56 ''' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @64 '(' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @72 ')' (5 pixels wide)
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+
+ // @80 '*' (5 pixels wide)
+ 0x20, // #
+ 0x70, // ###
+ 0x20, // #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @88 '+' (5 pixels wide)
+ 0x00, //
+ 0x20, // #
+ 0x20, // #
+ 0xF8, // #####
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @96 ',' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @104 '-' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @112 '.' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @120 '/' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x40, // #
+ 0x80, // #
+ 0x00, //
+
+ // @128 '0' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @136 '1' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @144 '2' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @152 '3' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @160 '4' (5 pixels wide)
+ 0x10, // #
+ 0x30, // ##
+ 0x50, // # #
+ 0x78, // ####
+ 0x10, // #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @168 '5' (5 pixels wide)
+ 0x70, // ###
+ 0x40, // #
+ 0x60, // ##
+ 0x10, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @176 '6' (5 pixels wide)
+ 0x30, // ##
+ 0x40, // #
+ 0x60, // ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @184 '7' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @192 '8' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x20, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @200 '9' (5 pixels wide)
+ 0x30, // ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x30, // ##
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @208 ':' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @216 ';' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x10, // #
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @224 '<' (5 pixels wide)
+ 0x00, //
+ 0x10, // #
+ 0x20, // #
+ 0xC0, // ##
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+
+ // @232 '=' (5 pixels wide)
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @240 '>' (5 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0x20, // #
+ 0x18, // ##
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+ 0x00, //
+
+ // @248 '?' (5 pixels wide)
+ 0x20, // #
+ 0x50, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x00, //
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @256 '@' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x58, // # ##
+ 0x48, // # #
+ 0x40, // #
+ 0x38, // ###
+ 0x00, //
+
+ // @264 'A' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x50, // # #
+ 0x70, // ###
+ 0x88, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @272 'B' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @280 'C' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @288 'D' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @296 'E' (5 pixels wide)
+ 0xF8, // #####
+ 0x48, // # #
+ 0x60, // ##
+ 0x40, // #
+ 0x48, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @304 'F' (5 pixels wide)
+ 0xF8, // #####
+ 0x48, // # #
+ 0x60, // ##
+ 0x40, // #
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+ 0x00, //
+
+ // @312 'G' (5 pixels wide)
+ 0x70, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x58, // # ##
+ 0x50, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @320 'H' (5 pixels wide)
+ 0xE8, // ### #
+ 0x48, // # #
+ 0x78, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @328 'I' (5 pixels wide)
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @336 'J' (5 pixels wide)
+ 0x38, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x00, //
+ 0x00, //
+
+ // @344 'K' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x60, // ##
+ 0x70, // ###
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @352 'L' (5 pixels wide)
+ 0xE0, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x40, // #
+ 0x48, // # #
+ 0xF8, // #####
+ 0x00, //
+ 0x00, //
+
+ // @360 'M' (5 pixels wide)
+ 0xD8, // ## ##
+ 0xD8, // ## ##
+ 0xD8, // ## ##
+ 0xA8, // # # #
+ 0x88, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @368 'N' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x68, // ## #
+ 0x68, // ## #
+ 0x58, // # ##
+ 0x58, // # ##
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @376 'O' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @384 'P' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x40, // #
+ 0xE0, // ###
+ 0x00, //
+ 0x00, //
+
+ // @392 'Q' (5 pixels wide)
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x18, // ##
+ 0x00, //
+
+ // @400 'R' (5 pixels wide)
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @408 'S' (5 pixels wide)
+ 0x70, // ###
+ 0x50, // # #
+ 0x20, // #
+ 0x10, // #
+ 0x50, // # #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @416 'T' (5 pixels wide)
+ 0xF8, // #####
+ 0xA8, // # # #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @424 'U' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @432 'V' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0x48, // # #
+ 0x50, // # #
+ 0x50, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @440 'W' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @448 'X' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @456 'Y' (5 pixels wide)
+ 0xD8, // ## ##
+ 0x88, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @464 'Z' (5 pixels wide)
+ 0x78, // ####
+ 0x48, // # #
+ 0x10, // #
+ 0x20, // #
+ 0x48, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @472 '[' (5 pixels wide)
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x30, // ##
+ 0x00, //
+
+ // @480 '\' (5 pixels wide)
+ 0x80, // #
+ 0x40, // #
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @488 ']' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+ 0x00, //
+
+ // @496 '^' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @504 '_' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0xF8, // #####
+
+ // @512 '`' (5 pixels wide)
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x00, //
+
+ // @520 'a' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x10, // #
+ 0x70, // ###
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @528 'b' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xF0, // ####
+ 0x00, //
+ 0x00, //
+
+ // @536 'c' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x40, // #
+ 0x40, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @544 'd' (5 pixels wide)
+ 0x18, // ##
+ 0x08, // #
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @552 'e' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x70, // ###
+ 0x70, // ###
+ 0x40, // #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @560 'f' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @568 'g' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x08, // #
+ 0x30, // ##
+
+ // @576 'h' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x70, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0xE8, // ### #
+ 0x00, //
+ 0x00, //
+
+ // @584 'i' (5 pixels wide)
+ 0x20, // #
+ 0x00, //
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @592 'j' (5 pixels wide)
+ 0x20, // #
+ 0x00, //
+ 0x70, // ###
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x10, // #
+ 0x70, // ###
+
+ // @600 'k' (5 pixels wide)
+ 0xC0, // ##
+ 0x40, // #
+ 0x58, // # ##
+ 0x70, // ###
+ 0x50, // # #
+ 0xD8, // ## ##
+ 0x00, //
+ 0x00, //
+
+ // @608 'l' (5 pixels wide)
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @616 'm' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD0, // ## #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x00, //
+ 0x00, //
+
+ // @624 'n' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0xC8, // ## #
+ 0x00, //
+ 0x00, //
+
+ // @632 'o' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @640 'p' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xF0, // ####
+ 0x48, // # #
+ 0x48, // # #
+ 0x70, // ###
+ 0x40, // #
+ 0xE0, // ###
+
+ // @648 'q' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x38, // ###
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x08, // #
+ 0x18, // ##
+
+ // @656 'r' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x78, // ####
+ 0x20, // #
+ 0x20, // #
+ 0x70, // ###
+ 0x00, //
+ 0x00, //
+
+ // @664 's' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x30, // ##
+ 0x20, // #
+ 0x10, // #
+ 0x60, // ##
+ 0x00, //
+ 0x00, //
+
+ // @672 't' (5 pixels wide)
+ 0x00, //
+ 0x40, // #
+ 0xF0, // ####
+ 0x40, // #
+ 0x48, // # #
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @680 'u' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x48, // # #
+ 0x48, // # #
+ 0x38, // ###
+ 0x00, //
+ 0x00, //
+
+ // @688 'v' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xC8, // ## #
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x00, //
+ 0x00, //
+
+ // @696 'w' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0xA8, // # # #
+ 0xA8, // # # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+
+ // @704 'x' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x48, // # #
+ 0x30, // ##
+ 0x30, // ##
+ 0x48, // # #
+ 0x00, //
+ 0x00, //
+
+ // @712 'y' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0xD8, // ## ##
+ 0x50, // # #
+ 0x50, // # #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+
+ // @720 'z' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x78, // ####
+ 0x50, // # #
+ 0x28, // # #
+ 0x78, // ####
+ 0x00, //
+ 0x00, //
+
+ // @728 '{' (5 pixels wide)
+ 0x10, // #
+ 0x20, // #
+ 0x20, // #
+ 0x60, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x10, // #
+ 0x00, //
+
+ // @736 '|' (5 pixels wide)
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x20, // #
+ 0x00, //
+
+ // @744 '}' (5 pixels wide)
+ 0x40, // #
+ 0x20, // #
+ 0x20, // #
+ 0x30, // ##
+ 0x20, // #
+ 0x20, // #
+ 0x40, // #
+ 0x00, //
+
+ // @752 '~' (5 pixels wide)
+ 0x00, //
+ 0x00, //
+ 0x00, //
+ 0x28, // # #
+ 0x50, // # #
+ 0x00, //
+ 0x00, //
+ 0x00, //
+};
+
+sFONT Font8 = {
+ Font8_Table,
+ 5, /* Width */
+ 8, /* Height */
+};
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/Fonts/fonts.h b/bsp/pico/bsp/Fonts/fonts.h
new file mode 100644
index 000000000..c183f0476
--- /dev/null
+++ b/bsp/pico/bsp/Fonts/fonts.h
@@ -0,0 +1,97 @@
+/**
+ ******************************************************************************
+ * @file fonts.h
+ * @author MCD Application Team
+ * @version V1.0.0
+ * @date 18-February-2014
+ * @brief Header for fonts.c file
+ ******************************************************************************
+ * @attention
+ *
+ * © COPYRIGHT(c) 2014 STMicroelectronics
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * 3. Neither the name of STMicroelectronics nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ ******************************************************************************
+ */
+
+/* Define to prevent recursive inclusion -------------------------------------*/
+#ifndef __FONTS_H
+#define __FONTS_H
+
+/*×î´ó×ÖÌå΢ÈíÑźÚ24 (32x41) */
+#define MAX_HEIGHT_FONT 41
+#define MAX_WIDTH_FONT 32
+#define OFFSET_BITMAP
+
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+/* Includes ------------------------------------------------------------------*/
+#include
+
+//ASCII
+typedef struct _tFont
+{
+ const uint8_t *table;
+ uint16_t Width;
+ uint16_t Height;
+
+} sFONT;
+
+
+//GB2312
+typedef struct // ºº×Ö×ÖÄ£Êý¾Ý½á¹¹
+{
+ const char index[2]; // ºº×ÖÄÚÂëË÷Òý
+ const char matrix[MAX_HEIGHT_FONT*MAX_WIDTH_FONT/8+2]; // µãÕóÂëÊý¾Ý
+}CH_CN;
+
+
+typedef struct
+{
+ const CH_CN *table;
+ uint16_t size;
+ uint16_t ASCII_Width;
+ uint16_t Width;
+ uint16_t Height;
+
+}cFONT;
+
+extern sFONT Font24;
+extern sFONT Font20;
+extern sFONT Font16;
+extern sFONT Font12;
+extern sFONT Font8;
+
+extern cFONT Font12CN;
+extern cFONT Font24CN;
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __FONTS_H */
+
+
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/bsp/pico/bsp/GLCD_Config.h b/bsp/pico/bsp/GLCD_Config.h
new file mode 100644
index 000000000..9d84bed99
--- /dev/null
+++ b/bsp/pico/bsp/GLCD_Config.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019 Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Licensed under the Apache License, Version 2.0 (the License); you may
+ * not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*-----------------------------------------------------------------------------
+ * File GLCD_Config.h
+ * Brief Graphic LCD interface configuration file for V2M-MPS3 evaluation board
+ * Version 1.0.0
+ *----------------------------------------------------------------------------*/
+
+#ifndef __GLCD_CONFIG_H
+#define __GLCD_CONFIG_H
+
+/*---------------------- Graphic LCD orientation configuration ---------------*/
+
+/*---------------------- Graphic LCD physical definitions --------------------*/
+#define GLCD_WIDTH 240 /* Screen Width (in pixels) */
+#define GLCD_HEIGHT 240 /* Screen Height (in pixels) */
+
+
+/*---------------------- Graphic LCD color definitions -----------------------*/
+/* Color coding (16-bit):
+ 15..11 = R4..0 (Red)
+ 10..5 = G5..0 (Green)
+ 4..0 = B4..0 (Blue)
+*/
+
+#if defined(__USE_RGB32__)
+# define __RGB(__R, __G, __B) ((((uint32_t)(__R) & 0xFF) << 16) | \
+ (((uint32_t)(__G) & 0xFF) << 8) | \
+ (((uint32_t)(__B) & 0xFF) << 0) | \
+ (uint32_t)0xFF << 24)
+#else
+# define __RGB(__R, __G, __B) ((((uint16_t)(__R) & 0xFF) >> 3 << 11) | \
+ (((uint16_t)(__G) & 0xFF) >> 2 << 5) | \
+ (((uint16_t)(__B) & 0xFF) >> 3 << 0) )
+#endif
+
+/* GLCD RGB color definitions */
+#define GLCD_COLOR_BLACK __RGB( 0, 0, 0 )
+#define GLCD_COLOR_NAVY __RGB( 0, 0, 128 )
+#define GLCD_COLOR_DARK_GREEN __RGB( 0, 128, 0 )
+#define GLCD_COLOR_DARK_CYAN __RGB( 0, 128, 128 )
+#define GLCD_COLOR_MAROON __RGB( 128, 0, 0 )
+#define GLCD_COLOR_PURPLE __RGB( 128, 0, 128 )
+#define GLCD_COLOR_OLIVE __RGB( 128, 128, 0 )
+#define GLCD_COLOR_LIGHT_GREY __RGB( 192, 192, 192 )
+#define GLCD_COLOR_DARK_GREY __RGB( 128, 128, 128 )
+#define GLCD_COLOR_BLUE __RGB( 0, 0, 255 )
+#define GLCD_COLOR_GREEN __RGB( 0, 255, 0 )
+#define GLCD_COLOR_CYAN __RGB( 0, 255, 255 )
+#define GLCD_COLOR_RED __RGB( 255, 0, 0 )
+#define GLCD_COLOR_MAGENTA __RGB( 255, 0, 255 )
+#define GLCD_COLOR_YELLOW __RGB( 255, 255, 0 )
+#define GLCD_COLOR_WHITE __RGB( 255, 255, 255 )
+
+#endif /* __GLCD_CONFIG_H */
diff --git a/bsp/pico/bsp/GUI/GUI_Paint.c b/bsp/pico/bsp/GUI/GUI_Paint.c
new file mode 100644
index 000000000..e6e6b0b6b
--- /dev/null
+++ b/bsp/pico/bsp/GUI/GUI_Paint.c
@@ -0,0 +1,804 @@
+#include "GUI_Paint.h"
+#include "DEV_Config.h"
+#include "Debug.h"
+#include
+#include
+#include //memset()
+#include
+
+PAINT Paint;
+
+/******************************************************************************
+function: Create Image
+parameter:
+ image : Pointer to the image cache
+ width : The width of the picture
+ Height : The height of the picture
+ Color : Whether the picture is inverted
+******************************************************************************/
+void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color)
+{
+ Paint.Image = NULL;
+ Paint.Image = image;
+
+ Paint.WidthMemory = Width;
+ Paint.HeightMemory = Height;
+ Paint.Color = Color;
+ Paint.Scale = 2;
+
+ Paint.WidthByte = (Width % 8 == 0)? (Width / 8 ): (Width / 8 + 1);
+ Paint.HeightByte = Height;
+// printf("WidthByte = %d, HeightByte = %d\r\n", Paint.WidthByte, Paint.HeightByte);
+// printf(" EPD_WIDTH / 8 = %d\r\n", 122 / 8);
+
+ Paint.Rotate = Rotate;
+ Paint.Mirror = MIRROR_NONE;
+
+ if(Rotate == ROTATE_0 || Rotate == ROTATE_180) {
+ Paint.Width = Width;
+ Paint.Height = Height;
+ } else {
+ Paint.Width = Height;
+ Paint.Height = Width;
+ }
+}
+
+/******************************************************************************
+function: Select Image
+parameter:
+ image : Pointer to the image cache
+******************************************************************************/
+void Paint_SelectImage(UBYTE *image)
+{
+ Paint.Image = image;
+}
+
+/******************************************************************************
+function: Select Image Rotate
+parameter:
+ Rotate : 0,90,180,270
+******************************************************************************/
+void Paint_SetRotate(UWORD Rotate)
+{
+ if(Rotate == ROTATE_0 || Rotate == ROTATE_90 || Rotate == ROTATE_180 || Rotate == ROTATE_270) {
+ Debug("Set image Rotate %d\r\n", Rotate);
+ Paint.Rotate = Rotate;
+ } else {
+ Debug("rotate = 0, 90, 180, 270\r\n");
+ }
+}
+
+void Paint_SetScale(UBYTE scale)
+{
+ if(scale == 2){
+ Paint.Scale = scale;
+ Paint.WidthByte = (Paint.WidthMemory % 8 == 0)? (Paint.WidthMemory / 8 ): (Paint.WidthMemory / 8 + 1);
+ }else if(scale == 4){
+ Paint.Scale = scale;
+ Paint.WidthByte = (Paint.WidthMemory % 4 == 0)? (Paint.WidthMemory / 4 ): (Paint.WidthMemory / 4 + 1);
+ }else if(scale ==16) {
+ Paint.Scale = scale;
+ Paint.WidthByte = (Paint.WidthMemory%2==0) ? (Paint.WidthMemory/2) : (Paint.WidthMemory/2+1);
+ }else if(scale ==65) {
+ Paint.Scale = scale;
+ Paint.WidthByte = Paint.WidthMemory*2;
+ }else{
+ Debug("Set Scale Input parameter error\r\n");
+ Debug("Scale Only support: 2 4 16 65\r\n");
+ }
+}
+/******************************************************************************
+function: Select Image mirror
+parameter:
+ mirror :Not mirror,Horizontal mirror,Vertical mirror,Origin mirror
+******************************************************************************/
+void Paint_SetMirroring(UBYTE mirror)
+{
+ if(mirror == MIRROR_NONE || mirror == MIRROR_HORIZONTAL ||
+ mirror == MIRROR_VERTICAL || mirror == MIRROR_ORIGIN) {
+ Debug("mirror image x:%s, y:%s\r\n",(mirror & 0x01)? "mirror":"none", ((mirror >> 1) & 0x01)? "mirror":"none");
+ Paint.Mirror = mirror;
+ } else {
+ Debug("mirror should be MIRROR_NONE, MIRROR_HORIZONTAL, \
+ MIRROR_VERTICAL or MIRROR_ORIGIN\r\n");
+ }
+}
+
+/******************************************************************************
+function: Draw Pixels
+parameter:
+ Xpoint : At point X
+ Ypoint : At point Y
+ Color : Painted colors
+******************************************************************************/
+void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color)
+{
+ if(Xpoint > Paint.Width || Ypoint > Paint.Height){
+ Debug("Exceeding display boundaries\r\n");
+ return;
+ }
+ UWORD X, Y;
+
+ switch(Paint.Rotate) {
+ case 0:
+ X = Xpoint;
+ Y = Ypoint;
+ break;
+ case 90:
+ X = Paint.WidthMemory - Ypoint - 1;
+ Y = Xpoint;
+ break;
+ case 180:
+ X = Paint.WidthMemory - Xpoint - 1;
+ Y = Paint.HeightMemory - Ypoint - 1;
+ break;
+ case 270:
+ X = Ypoint;
+ Y = Paint.HeightMemory - Xpoint - 1;
+ break;
+ default:
+ return;
+ }
+
+ switch(Paint.Mirror) {
+ case MIRROR_NONE:
+ break;
+ case MIRROR_HORIZONTAL:
+ X = Paint.WidthMemory - X - 1;
+ break;
+ case MIRROR_VERTICAL:
+ Y = Paint.HeightMemory - Y - 1;
+ break;
+ case MIRROR_ORIGIN:
+ X = Paint.WidthMemory - X - 1;
+ Y = Paint.HeightMemory - Y - 1;
+ break;
+ default:
+ return;
+ }
+
+ if(X > Paint.WidthMemory || Y > Paint.HeightMemory){
+ Debug("Exceeding display boundaries\r\n");
+ return;
+ }
+
+ if(Paint.Scale == 2){
+ UDOUBLE Addr = X / 8 + Y * Paint.WidthByte;
+ UBYTE Rdata = Paint.Image[Addr];
+ if(Color&0xff == BLACK)
+ Paint.Image[Addr] = Rdata & ~(0x80 >> (X % 8));
+ else
+ Paint.Image[Addr] = Rdata | (0x80 >> (X % 8));
+ }else if(Paint.Scale == 4){
+ UDOUBLE Addr = X / 4 + Y * Paint.WidthByte;
+ Color = Color % 4;//Guaranteed color scale is 4 --- 0~3
+ UBYTE Rdata = Paint.Image[Addr];
+
+ Rdata = Rdata & (~(0xC0 >> ((X % 4)*2)));
+ Paint.Image[Addr] = Rdata | ((Color << 6) >> ((X % 4)*2));
+ }else if(Paint.Scale == 16) {
+ UDOUBLE Addr = X / 2 + Y * Paint.WidthByte;
+ UBYTE Rdata = Paint.Image[Addr];
+ Color = Color % 16;
+ Rdata = Rdata & (~(0xf0 >> ((X % 2)*4)));
+ Paint.Image[Addr] = Rdata | ((Color << 4) >> ((X % 2)*4));
+ }else if(Paint.Scale == 65) {
+ UDOUBLE Addr = X*2 + Y*Paint.WidthByte;
+ Paint.Image[Addr] = 0xff & (Color>>8);
+ Paint.Image[Addr+1] = 0xff & Color;
+ }
+
+}
+
+/******************************************************************************
+function: Clear the color of the picture
+parameter:
+ Color : Painted colors
+******************************************************************************/
+void Paint_Clear(UWORD Color)
+{
+ if(Paint.Scale == 2 || Paint.Scale == 4) {
+ for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
+ for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte
+ UDOUBLE Addr = X + Y*Paint.WidthByte;
+ Paint.Image[Addr] = Color;
+ }
+ }
+ }else if(Paint.Scale == 16) {
+ for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
+ for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte
+ UDOUBLE Addr = X + Y*Paint.WidthByte;
+ Color = Color & 0x0f;
+ Paint.Image[Addr] = (Color<<4) | Color;
+ }
+ }
+ }else if(Paint.Scale == 65) {
+ for (UWORD Y = 0; Y < Paint.HeightByte; Y++) {
+ for (UWORD X = 0; X < Paint.WidthByte; X++ ) {//8 pixel = 1 byte
+ UDOUBLE Addr = X*2 + Y*Paint.WidthByte;
+ Paint.Image[Addr] = 0xff & (Color>>8);
+ Paint.Image[Addr+1] = 0xff & Color;
+ }
+ }
+ }
+}
+
+/******************************************************************************
+function: Clear the color of a window
+parameter:
+ Xstart : x starting point
+ Ystart : Y starting point
+ Xend : x end point
+ Yend : y end point
+ Color : Painted colors
+******************************************************************************/
+void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color)
+{
+ UWORD X, Y;
+ for (Y = Ystart; Y < Yend; Y++) {
+ for (X = Xstart; X < Xend; X++) {//8 pixel = 1 byte
+ Paint_SetPixel(X, Y, Color);
+ }
+ }
+}
+
+/******************************************************************************
+function: Draw Point(Xpoint, Ypoint) Fill the color
+parameter:
+ Xpoint : The Xpoint coordinate of the point
+ Ypoint : The Ypoint coordinate of the point
+ Color : Painted color
+ Dot_Pixel : point size
+ Dot_Style : point Style
+******************************************************************************/
+void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color,
+ DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style)
+{
+ if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
+ Debug("Paint_DrawPoint Input exceeds the normal display range\r\n");
+ printf("Xpoint = %d , Paint.Width = %d \r\n ",Xpoint,Paint.Width);
+ printf("Ypoint = %d , Paint.Height = %d \r\n ",Ypoint,Paint.Height);
+ return;
+ }
+
+ int16_t XDir_Num , YDir_Num;
+ if (Dot_Style == DOT_FILL_AROUND) {
+ for (XDir_Num = 0; XDir_Num < 2 * Dot_Pixel - 1; XDir_Num++) {
+ for (YDir_Num = 0; YDir_Num < 2 * Dot_Pixel - 1; YDir_Num++) {
+ if(Xpoint + XDir_Num - Dot_Pixel < 0 || Ypoint + YDir_Num - Dot_Pixel < 0)
+ break;
+ // printf("x = %d, y = %d\r\n", Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel);
+ Paint_SetPixel(Xpoint + XDir_Num - Dot_Pixel, Ypoint + YDir_Num - Dot_Pixel, Color);
+ }
+ }
+ } else {
+ for (XDir_Num = 0; XDir_Num < Dot_Pixel; XDir_Num++) {
+ for (YDir_Num = 0; YDir_Num < Dot_Pixel; YDir_Num++) {
+ Paint_SetPixel(Xpoint + XDir_Num - 1, Ypoint + YDir_Num - 1, Color);
+ }
+ }
+ }
+}
+
+/******************************************************************************
+function: Draw a line of arbitrary slope
+parameter:
+ Xstart :Starting Xpoint point coordinates
+ Ystart :Starting Xpoint point coordinates
+ Xend :End point Xpoint coordinate
+ Yend :End point Ypoint coordinate
+ Color :The color of the line segment
+ Line_width : Line width
+ Line_Style: Solid and dotted lines
+******************************************************************************/
+void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend,
+ UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style)
+{
+ if (Xstart > Paint.Width || Ystart > Paint.Height ||
+ Xend > Paint.Width || Yend > Paint.Height) {
+ Debug("Paint_DrawLine Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ UWORD Xpoint = Xstart;
+ UWORD Ypoint = Ystart;
+ int dx = (int)Xend - (int)Xstart >= 0 ? Xend - Xstart : Xstart - Xend;
+ int dy = (int)Yend - (int)Ystart <= 0 ? Yend - Ystart : Ystart - Yend;
+
+ // Increment direction, 1 is positive, -1 is counter;
+ int XAddway = Xstart < Xend ? 1 : -1;
+ int YAddway = Ystart < Yend ? 1 : -1;
+
+ //Cumulative error
+ int Esp = dx + dy;
+ char Dotted_Len = 0;
+
+ for (;;) {
+ Dotted_Len++;
+ //Painted dotted line, 2 point is really virtual
+ if (Line_Style == LINE_STYLE_DOTTED && Dotted_Len % 3 == 0) {
+ //Debug("LINE_DOTTED\r\n");
+ if(Color)
+ Paint_DrawPoint(Xpoint, Ypoint, BLACK, Line_width, DOT_STYLE_DFT);
+ else
+ Paint_DrawPoint(Xpoint, Ypoint, WHITE, Line_width, DOT_STYLE_DFT);
+ Dotted_Len = 0;
+ } else {
+ Paint_DrawPoint(Xpoint, Ypoint, Color, Line_width, DOT_STYLE_DFT);
+ }
+ if (2 * Esp >= dy) {
+ if (Xpoint == Xend)
+ break;
+ Esp += dy;
+ Xpoint += XAddway;
+ }
+ if (2 * Esp <= dx) {
+ if (Ypoint == Yend)
+ break;
+ Esp += dx;
+ Ypoint += YAddway;
+ }
+ }
+}
+
+/******************************************************************************
+function: Draw a rectangle
+parameter:
+ Xstart :Rectangular Starting Xpoint point coordinates
+ Ystart :Rectangular Starting Xpoint point coordinates
+ Xend :Rectangular End point Xpoint coordinate
+ Yend :Rectangular End point Ypoint coordinate
+ Color :The color of the Rectangular segment
+ Line_width: Line width
+ Draw_Fill : Whether to fill the inside of the rectangle
+******************************************************************************/
+void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend,
+ UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
+{
+ if (Xstart > Paint.Width || Ystart > Paint.Height ||
+ Xend > Paint.Width || Yend > Paint.Height) {
+ Debug("Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ if (Draw_Fill) {
+ UWORD Ypoint;
+ for(Ypoint = Ystart; Ypoint < Yend; Ypoint++) {
+ Paint_DrawLine(Xstart, Ypoint, Xend, Ypoint, Color , Line_width, LINE_STYLE_SOLID);
+ }
+ } else {
+ Paint_DrawLine(Xstart, Ystart, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID);
+ Paint_DrawLine(Xstart, Ystart, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID);
+ Paint_DrawLine(Xend, Yend, Xend, Ystart, Color, Line_width, LINE_STYLE_SOLID);
+ Paint_DrawLine(Xend, Yend, Xstart, Yend, Color, Line_width, LINE_STYLE_SOLID);
+ }
+}
+
+/******************************************************************************
+function: Use the 8-point method to draw a circle of the
+ specified size at the specified position->
+parameter:
+ X_Center :Center X coordinate
+ Y_Center :Center Y coordinate
+ Radius :circle Radius
+ Color :The color of the :circle segment
+ Line_width: Line width
+ Draw_Fill : Whether to fill the inside of the Circle
+******************************************************************************/
+void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius,
+ UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill)
+{
+ if (X_Center > Paint.Width || Y_Center >= Paint.Height) {
+ Debug("Paint_DrawCircle Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ //Draw a circle from(0, R) as a starting point
+ int16_t XCurrent, YCurrent;
+ XCurrent = 0;
+ YCurrent = Radius;
+
+ //Cumulative error,judge the next point of the logo
+ int16_t Esp = 3 - (Radius << 1 );
+
+ int16_t sCountY;
+ if (Draw_Fill == DRAW_FILL_FULL) {
+ while (XCurrent <= YCurrent ) { //Realistic circles
+ for (sCountY = XCurrent; sCountY <= YCurrent; sCountY ++ ) {
+ Paint_DrawPoint(X_Center + XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//1
+ Paint_DrawPoint(X_Center - XCurrent, Y_Center + sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//2
+ Paint_DrawPoint(X_Center - sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//3
+ Paint_DrawPoint(X_Center - sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//4
+ Paint_DrawPoint(X_Center - XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//5
+ Paint_DrawPoint(X_Center + XCurrent, Y_Center - sCountY, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//6
+ Paint_DrawPoint(X_Center + sCountY, Y_Center - XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);//7
+ Paint_DrawPoint(X_Center + sCountY, Y_Center + XCurrent, Color, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ if (Esp < 0 )
+ Esp += 4 * XCurrent + 6;
+ else {
+ Esp += 10 + 4 * (XCurrent - YCurrent );
+ YCurrent --;
+ }
+ XCurrent ++;
+ }
+ } else { //Draw a hollow circle
+ while (XCurrent <= YCurrent ) {
+ Paint_DrawPoint(X_Center + XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT);//1
+ Paint_DrawPoint(X_Center - XCurrent, Y_Center + YCurrent, Color, Line_width, DOT_STYLE_DFT);//2
+ Paint_DrawPoint(X_Center - YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT);//3
+ Paint_DrawPoint(X_Center - YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT);//4
+ Paint_DrawPoint(X_Center - XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT);//5
+ Paint_DrawPoint(X_Center + XCurrent, Y_Center - YCurrent, Color, Line_width, DOT_STYLE_DFT);//6
+ Paint_DrawPoint(X_Center + YCurrent, Y_Center - XCurrent, Color, Line_width, DOT_STYLE_DFT);//7
+ Paint_DrawPoint(X_Center + YCurrent, Y_Center + XCurrent, Color, Line_width, DOT_STYLE_DFT);//0
+
+ if (Esp < 0 )
+ Esp += 4 * XCurrent + 6;
+ else {
+ Esp += 10 + 4 * (XCurrent - YCurrent );
+ YCurrent --;
+ }
+ XCurrent ++;
+ }
+ }
+}
+
+/******************************************************************************
+function: Show English characters
+parameter:
+ Xpoint :X coordinate
+ Ypoint :Y coordinate
+ Acsii_Char :To display the English characters
+ Font :A structure pointer that displays a character size
+ Color_Foreground : Select the foreground color
+ Color_Background : Select the background color
+******************************************************************************/
+void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char,
+ sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
+{
+ UWORD Page, Column;
+
+ if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
+ Debug("Paint_DrawChar Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ uint32_t Char_Offset = (Acsii_Char - ' ') * Font->Height * (Font->Width / 8 + (Font->Width % 8 ? 1 : 0));
+ const unsigned char *ptr = &Font->table[Char_Offset];
+
+ for (Page = 0; Page < Font->Height; Page ++ ) {
+ for (Column = 0; Column < Font->Width; Column ++ ) {
+
+ //To determine whether the font background color and screen background color is consistent
+ if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
+ if (*ptr & (0x80 >> (Column % 8)))
+ Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground);
+ // Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ } else {
+ if (*ptr & (0x80 >> (Column % 8))) {
+ Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Foreground);
+ // Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ } else {
+ Paint_SetPixel(Xpoint + Column, Ypoint + Page, Color_Background);
+ // Paint_DrawPoint(Xpoint + Column, Ypoint + Page, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ }
+ //One pixel is 8 bits
+ if (Column % 8 == 7)
+ ptr++;
+ }// Write a line
+ if (Font->Width % 8 != 0)
+ ptr++;
+ }// Write all
+}
+
+/******************************************************************************
+function: Display the string
+parameter:
+ Xstart :X coordinate
+ Ystart :Y coordinate
+ pString :The first address of the English string to be displayed
+ Font :A structure pointer that displays a character size
+ Color_Foreground : Select the foreground color
+ Color_Background : Select the background color
+******************************************************************************/
+void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString,
+ sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
+{
+ UWORD Xpoint = Xstart;
+ UWORD Ypoint = Ystart;
+
+ if (Xstart > Paint.Width || Ystart > Paint.Height) {
+ Debug("Paint_DrawString_EN Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ while (* pString != '\0') {
+ //if X direction filled , reposition to(Xstart,Ypoint),Ypoint is Y direction plus the Height of the character
+ if ((Xpoint + Font->Width ) > Paint.Width ) {
+ Xpoint = Xstart;
+ Ypoint += Font->Height;
+ }
+
+ // If the Y direction is full, reposition to(Xstart, Ystart)
+ if ((Ypoint + Font->Height ) > Paint.Height ) {
+ Xpoint = Xstart;
+ Ypoint = Ystart;
+ }
+ Paint_DrawChar(Xpoint, Ypoint, * pString, Font, Color_Background, Color_Foreground);
+
+ //The next character of the address
+ pString ++;
+
+ //The next word of the abscissa increases the font of the broadband
+ Xpoint += Font->Width;
+ }
+}
+
+
+/******************************************************************************
+function: Display the string
+parameter:
+ Xstart :X coordinate
+ Ystart :Y coordinate
+ pString :The first address of the Chinese string and English
+ string to be displayed
+ Font :A structure pointer that displays a character size
+ Color_Foreground : Select the foreground color
+ Color_Background : Select the background color
+******************************************************************************/
+void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font,
+ UWORD Color_Foreground, UWORD Color_Background)
+{
+ const char* p_text = pString;
+ int x = Xstart, y = Ystart;
+ int i, j,Num;
+
+ /* Send the string character by character on EPD */
+ while (*p_text != 0) {
+ if(*p_text <= 0x7F) { //ASCII < 126
+ for(Num = 0; Num < font->size; Num++) {
+ if(*p_text== font->table[Num].index[0]) {
+ const char* ptr = &font->table[Num].matrix[0];
+
+ for (j = 0; j < font->Height; j++) {
+ for (i = 0; i < font->Width; i++) {
+ if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
+ if (*ptr & (0x80 >> (i % 8))) {
+ Paint_SetPixel(x + i, y + j, Color_Foreground);
+ // Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ } else {
+ if (*ptr & (0x80 >> (i % 8))) {
+ Paint_SetPixel(x + i, y + j, Color_Foreground);
+ // Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ } else {
+ Paint_SetPixel(x + i, y + j, Color_Background);
+ // Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ }
+ if (i % 8 == 7) {
+ ptr++;
+ }
+ }
+ if (font->Width % 8 != 0) {
+ ptr++;
+ }
+ }
+ break;
+ }
+ }
+ /* Point on the next character */
+ p_text += 1;
+ /* Decrement the column position by 16 */
+ x += font->ASCII_Width;
+ } else { //Chinese
+ for(Num = 0; Num < font->size; Num++) {
+ if((*p_text== font->table[Num].index[0]) && (*(p_text+1) == font->table[Num].index[1])) {
+ const char* ptr = &font->table[Num].matrix[0];
+
+ for (j = 0; j < font->Height; j++) {
+ for (i = 0; i < font->Width; i++) {
+ if (FONT_BACKGROUND == Color_Background) { //this process is to speed up the scan
+ if (*ptr & (0x80 >> (i % 8))) {
+ Paint_SetPixel(x + i, y + j, Color_Foreground);
+ // Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ } else {
+ if (*ptr & (0x80 >> (i % 8))) {
+ Paint_SetPixel(x + i, y + j, Color_Foreground);
+ // Paint_DrawPoint(x + i, y + j, Color_Foreground, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ } else {
+ Paint_SetPixel(x + i, y + j, Color_Background);
+ // Paint_DrawPoint(x + i, y + j, Color_Background, DOT_PIXEL_DFT, DOT_STYLE_DFT);
+ }
+ }
+ if (i % 8 == 7) {
+ ptr++;
+ }
+ }
+ if (font->Width % 8 != 0) {
+ ptr++;
+ }
+ }
+ break;
+ }
+ }
+ /* Point on the next character */
+ p_text += 2;
+ /* Decrement the column position by 16 */
+ x += font->Width;
+ }
+ }
+}
+
+/******************************************************************************
+function: Display nummber
+parameter:
+ Xstart :X coordinate
+ Ystart : Y coordinate
+ Nummber : The number displayed
+ Font :A structure pointer that displays a character size
+ Digit : Fractional width
+ Color_Foreground : Select the foreground color
+ Color_Background : Select the background color
+******************************************************************************/
+#define ARRAY_LEN 255
+void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber,
+ sFONT* Font, UWORD Digit,UWORD Color_Foreground, UWORD Color_Background)
+{
+ int16_t Num_Bit = 0, Str_Bit = 0;
+ uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0};
+ uint8_t *pStr = Str_Array;
+ int temp = Nummber;
+ float decimals;
+ uint8_t i;
+ if (Xpoint > Paint.Width || Ypoint > Paint.Height) {
+ Debug("Paint_DisNum Input exceeds the normal display range\r\n");
+ return;
+ }
+
+ if(Digit > 0) {
+ decimals = Nummber - temp;
+ for(i=Digit; i > 0; i--) {
+ decimals*=10;
+ }
+ temp = decimals;
+ //Converts a number to a string
+ for(i=Digit; i>0; i--) {
+ Num_Array[Num_Bit] = temp % 10 + '0';
+ Num_Bit++;
+ temp /= 10;
+ }
+ Num_Array[Num_Bit] = '.';
+ Num_Bit++;
+ }
+
+ temp = Nummber;
+ //Converts a number to a string
+ while (temp) {
+ Num_Array[Num_Bit] = temp % 10 + '0';
+ Num_Bit++;
+ temp /= 10;
+ }
+
+ //The string is inverted
+ while (Num_Bit > 0) {
+ Str_Array[Str_Bit] = Num_Array[Num_Bit - 1];
+ Str_Bit ++;
+ Num_Bit --;
+ }
+
+ //show
+ Paint_DrawString_EN(Xpoint, Ypoint, (const char*)pStr, Font, Color_Background, Color_Foreground);
+}
+
+/******************************************************************************
+function: Display time
+parameter:
+ Xstart :X coordinate
+ Ystart : Y coordinate
+ pTime : Time-related structures
+ Font :A structure pointer that displays a character size
+ Color_Foreground : Select the foreground color
+ Color_Background : Select the background color
+******************************************************************************/
+void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font,
+ UWORD Color_Foreground, UWORD Color_Background)
+{
+ uint8_t value[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
+
+ UWORD Dx = Font->Width;
+
+ //Write data into the cache
+ Paint_DrawChar(Xstart , Ystart, value[pTime->Hour / 10], Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx , Ystart, value[pTime->Hour % 10], Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx + Dx / 4 + Dx / 2 , Ystart, ':' , Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx * 2 + Dx / 2 , Ystart, value[pTime->Min / 10] , Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx * 3 + Dx / 2 , Ystart, value[pTime->Min % 10] , Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx * 4 + Dx / 2 - Dx / 4, Ystart, ':' , Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx * 5 , Ystart, value[pTime->Sec / 10] , Font, Color_Background, Color_Foreground);
+ Paint_DrawChar(Xstart + Dx * 6 , Ystart, value[pTime->Sec % 10] , Font, Color_Background, Color_Foreground);
+
+}
+
+
+void Paint_DrawImage(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image)
+{
+ int i,j;
+ for(j = 0; j < H_Image; j++){
+ for(i = 0; i < W_Image; i++){
+ if(xStart+i < Paint.WidthMemory && yStart+j < Paint.HeightMemory)//Exceeded part does not display
+ Paint_SetPixel(xStart + i, yStart + j, (*(image + j*W_Image*2 + i*2+1))<<8 | (*(image + j*W_Image*2 + i*2)));
+ //Using arrays is a property of sequential storage, accessing the original array by algorithm
+ //j*W_Image*2 Y offset
+ //i*2 X offset
+ }
+ }
+}
+
+void Paint_DrawImage1(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image)
+{
+ int i,j;
+ for(j = 0; j < H_Image; j++){
+ for(i = 0; i < W_Image; i++){
+ if(xStart+i < Paint.HeightMemory && yStart+j < Paint.WidthMemory)//Exceeded part does not display
+ Paint_SetPixel(xStart + i, yStart + j, (*(image + j*W_Image*2 + i*2+1))<<8 | (*(image + j*W_Image*2 + i*2)));
+ //Using arrays is a property of sequential storage, accessing the original array by algorithm
+ //j*W_Image*2 Y offset
+ //i*2 X offset
+ }
+ }
+}
+
+/******************************************************************************
+function: Display monochrome bitmap
+parameter:
+ image_buffer :A picture data converted to a bitmap
+info:
+ Use a computer to convert the image into a corresponding array,
+ and then embed the array directly into Imagedata.cpp as a .c file.
+******************************************************************************/
+void Paint_DrawBitMap(const unsigned char* image_buffer)
+{
+ UWORD x, y;
+ UDOUBLE Addr = 0;
+
+ for (y = 0; y < Paint.HeightByte; y++) {
+ for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte
+ Addr = x + y * Paint.WidthByte;
+ Paint.Image[Addr] = (unsigned char)image_buffer[Addr];
+ }
+ }
+}
+
+void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region)
+{
+ UWORD x, y;
+ UDOUBLE Addr = 0;
+ for (y = 0; y < Paint.HeightByte; y++) {
+ for (x = 0; x < Paint.WidthByte; x++) {//8 pixel = 1 byte
+ Addr = x + y * Paint.WidthByte ;
+ Paint.Image[Addr] = \
+ (unsigned char)image_buffer[Addr+ (Paint.HeightByte)*Paint.WidthByte*(Region - 1)];
+ }
+ }
+}
+
+
+
+ void Paint_BmpWindows(unsigned char x,unsigned char y,const unsigned char *pBmp,
+ unsigned char chWidth,unsigned char chHeight)
+{
+ uint16_t i, j, byteWidth = (chWidth + 7)/8;
+ for(j = 0; j < chHeight; j ++){
+ for(i = 0; i < chWidth; i ++ ) {
+ if(*(pBmp + j * byteWidth + i / 8) & (128 >> (i & 7))) {
+ Paint_SetPixel(x+i, y+j, 0xffff);
+ }
+ }
+ }
+}
+
+
diff --git a/bsp/pico/bsp/GUI/GUI_Paint.h b/bsp/pico/bsp/GUI/GUI_Paint.h
new file mode 100644
index 000000000..319793b49
--- /dev/null
+++ b/bsp/pico/bsp/GUI/GUI_Paint.h
@@ -0,0 +1,158 @@
+#ifndef __GUI_PAINT_H
+#define __GUI_PAINT_H
+
+#include "DEV_Config.h"
+#include "../Fonts/fonts.h"
+
+/**
+ * Image attributes
+**/
+typedef struct {
+ UBYTE *Image;
+ UWORD Width;
+ UWORD Height;
+ UWORD WidthMemory;
+ UWORD HeightMemory;
+ UWORD Color;
+ UWORD Rotate;
+ UWORD Mirror;
+ UWORD WidthByte;
+ UWORD HeightByte;
+ UWORD Scale;
+} PAINT;
+extern PAINT Paint;
+
+/**
+ * Display rotate
+**/
+#define ROTATE_0 0
+#define ROTATE_90 90
+#define ROTATE_180 180
+#define ROTATE_270 270
+
+/**
+ * Display Flip
+**/
+typedef enum {
+ MIRROR_NONE = 0x00,
+ MIRROR_HORIZONTAL = 0x01,
+ MIRROR_VERTICAL = 0x02,
+ MIRROR_ORIGIN = 0x03,
+} MIRROR_IMAGE;
+#define MIRROR_IMAGE_DFT MIRROR_NONE
+
+/**
+ * image color
+**/
+#define WHITE 0xFFFF
+#define BLACK 0x0000
+#define BLUE 0x001F
+#define BRED 0XF81F
+#define GRED 0XFFE0
+#define GBLUE 0X07FF
+#define RED 0xF800
+#define MAGENTA 0xF81F
+#define GREEN 0x07E0
+#define CYAN 0x7FFF
+#define YELLOW 0xFFE0
+#define BROWN 0XBC40
+#define BRRED 0XFC07
+#define GRAY 0X8430
+
+#define IMAGE_BACKGROUND WHITE
+#define FONT_FOREGROUND BLACK
+#define FONT_BACKGROUND WHITE
+
+/**
+ * The size of the point
+**/
+typedef enum {
+ DOT_PIXEL_1X1 = 1, // 1 x 1
+ DOT_PIXEL_2X2 , // 2 X 2
+ DOT_PIXEL_3X3 , // 3 X 3
+ DOT_PIXEL_4X4 , // 4 X 4
+ DOT_PIXEL_5X5 , // 5 X 5
+ DOT_PIXEL_6X6 , // 6 X 6
+ DOT_PIXEL_7X7 , // 7 X 7
+ DOT_PIXEL_8X8 , // 8 X 8
+} DOT_PIXEL;
+#define DOT_PIXEL_DFT DOT_PIXEL_1X1 //Default dot pilex
+
+/**
+ * Point size fill style
+**/
+typedef enum {
+ DOT_FILL_AROUND = 1, // dot pixel 1 x 1
+ DOT_FILL_RIGHTUP , // dot pixel 2 X 2
+} DOT_STYLE;
+#define DOT_STYLE_DFT DOT_FILL_AROUND //Default dot pilex
+
+/**
+ * Line style, solid or dashed
+**/
+typedef enum {
+ LINE_STYLE_SOLID = 0,
+ LINE_STYLE_DOTTED,
+} LINE_STYLE;
+
+/**
+ * Whether the graphic is filled
+**/
+typedef enum {
+ DRAW_FILL_EMPTY = 0,
+ DRAW_FILL_FULL,
+} DRAW_FILL;
+
+/**
+ * Custom structure of a time attribute
+**/
+typedef struct {
+ UWORD Year; //0000
+ UBYTE Month; //1 - 12
+ UBYTE Day; //1 - 30
+ UBYTE Hour; //0 - 23
+ UBYTE Min; //0 - 59
+ UBYTE Sec; //0 - 59
+} PAINT_TIME;
+extern PAINT_TIME sPaint_time;
+
+//init and Clear
+void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Color);
+void Paint_SelectImage(UBYTE *image);
+void Paint_SetRotate(UWORD Rotate);
+void Paint_SetMirroring(UBYTE mirror);
+void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color);
+void Paint_SetScale(UBYTE scale);
+
+void Paint_Clear(UWORD Color);
+void Paint_ClearWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color);
+
+//Drawing
+void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_FillWay);
+void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style);
+void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
+void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill);
+
+//Display string
+void Paint_DrawChar(UWORD Xstart, UWORD Ystart, const char Acsii_Char, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
+void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
+void Paint_DrawString_CN(UWORD Xstart, UWORD Ystart, const char * pString, cFONT* font, UWORD Color_Foreground, UWORD Color_Background);
+void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, double Nummber, sFONT* Font, UWORD Digit,UWORD Color_Foreground, UWORD Color_Background);
+void Paint_DrawTime(UWORD Xstart, UWORD Ystart, PAINT_TIME *pTime, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background);
+
+//pic
+void Paint_DrawBitMap(const unsigned char* image_buffer);
+void Paint_DrawBitMap_Block(const unsigned char* image_buffer, UBYTE Region);
+
+void Paint_DrawImage(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image) ;
+void Paint_DrawImage1(const unsigned char *image, UWORD xStart, UWORD yStart, UWORD W_Image, UWORD H_Image);
+ void Paint_BmpWindows(unsigned char x,unsigned char y,const unsigned char *pBmp,\
+ unsigned char chWidth,unsigned char chHeight);
+
+
+#endif
+
+
+
+
+
diff --git a/bsp/pico/bsp/LCD/LCD_0in96.c b/bsp/pico/bsp/LCD/LCD_0in96.c
new file mode 100644
index 000000000..72f85cd15
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_0in96.c
@@ -0,0 +1,302 @@
+/*****************************************************************************
+* | File : LCD_0in96.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-11
+* | Info : Basic version
+*
+******************************************************************************/
+#include "LCD_0in96.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_0IN96_ATTRIBUTES LCD_0IN96;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_0IN96_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(200);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(200);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(200);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_0IN96_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ //DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_0IN96_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_0IN96_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_0IN96_InitReg(void)
+{
+ LCD_0IN96_SendCommand(0x11);//Sleep exit
+ DEV_Delay_ms (120);
+ LCD_0IN96_SendCommand(0x21);
+ LCD_0IN96_SendCommand(0x21);
+
+ LCD_0IN96_SendCommand(0xB1);
+ LCD_0IN96_SendData_8Bit(0x05);
+ LCD_0IN96_SendData_8Bit(0x3A);
+ LCD_0IN96_SendData_8Bit(0x3A);
+
+ LCD_0IN96_SendCommand(0xB2);
+ LCD_0IN96_SendData_8Bit(0x05);
+ LCD_0IN96_SendData_8Bit(0x3A);
+ LCD_0IN96_SendData_8Bit(0x3A);
+
+ LCD_0IN96_SendCommand(0xB3);
+ LCD_0IN96_SendData_8Bit(0x05);
+ LCD_0IN96_SendData_8Bit(0x3A);
+ LCD_0IN96_SendData_8Bit(0x3A);
+ LCD_0IN96_SendData_8Bit(0x05);
+ LCD_0IN96_SendData_8Bit(0x3A);
+ LCD_0IN96_SendData_8Bit(0x3A);
+
+ LCD_0IN96_SendCommand(0xB4);
+ LCD_0IN96_SendData_8Bit(0x03);
+
+ LCD_0IN96_SendCommand(0xC0);
+ LCD_0IN96_SendData_8Bit(0x62);
+ LCD_0IN96_SendData_8Bit(0x02);
+ LCD_0IN96_SendData_8Bit(0x04);
+
+ LCD_0IN96_SendCommand(0xC1);
+ LCD_0IN96_SendData_8Bit(0xC0);
+
+ LCD_0IN96_SendCommand(0xC2);
+ LCD_0IN96_SendData_8Bit(0x0D);
+ LCD_0IN96_SendData_8Bit(0x00);
+
+ LCD_0IN96_SendCommand(0xC3);
+ LCD_0IN96_SendData_8Bit(0x8D);
+ LCD_0IN96_SendData_8Bit(0x6A);
+
+ LCD_0IN96_SendCommand(0xC4);
+ LCD_0IN96_SendData_8Bit(0x8D);
+ LCD_0IN96_SendData_8Bit(0xEE);
+
+ LCD_0IN96_SendCommand(0xC5); /*VCOM*/
+ LCD_0IN96_SendData_8Bit(0x0E);
+
+ LCD_0IN96_SendCommand(0xE0);
+ LCD_0IN96_SendData_8Bit(0x10);
+ LCD_0IN96_SendData_8Bit(0x0E);
+ LCD_0IN96_SendData_8Bit(0x02);
+ LCD_0IN96_SendData_8Bit(0x03);
+ LCD_0IN96_SendData_8Bit(0x0E);
+ LCD_0IN96_SendData_8Bit(0x07);
+ LCD_0IN96_SendData_8Bit(0x02);
+ LCD_0IN96_SendData_8Bit(0x07);
+ LCD_0IN96_SendData_8Bit(0x0A);
+ LCD_0IN96_SendData_8Bit(0x12);
+ LCD_0IN96_SendData_8Bit(0x27);
+ LCD_0IN96_SendData_8Bit(0x37);
+ LCD_0IN96_SendData_8Bit(0x00);
+ LCD_0IN96_SendData_8Bit(0x0D);
+ LCD_0IN96_SendData_8Bit(0x0E);
+ LCD_0IN96_SendData_8Bit(0x10);
+
+ LCD_0IN96_SendCommand(0xE1);
+ LCD_0IN96_SendData_8Bit(0x10);
+ LCD_0IN96_SendData_8Bit(0x0E);
+ LCD_0IN96_SendData_8Bit(0x03);
+ LCD_0IN96_SendData_8Bit(0x03);
+ LCD_0IN96_SendData_8Bit(0x0F);
+ LCD_0IN96_SendData_8Bit(0x06);
+ LCD_0IN96_SendData_8Bit(0x02);
+ LCD_0IN96_SendData_8Bit(0x08);
+ LCD_0IN96_SendData_8Bit(0x0A);
+ LCD_0IN96_SendData_8Bit(0x13);
+ LCD_0IN96_SendData_8Bit(0x26);
+ LCD_0IN96_SendData_8Bit(0x36);
+ LCD_0IN96_SendData_8Bit(0x00);
+ LCD_0IN96_SendData_8Bit(0x0D);
+ LCD_0IN96_SendData_8Bit(0x0E);
+ LCD_0IN96_SendData_8Bit(0x10);
+
+ LCD_0IN96_SendCommand(0x3A);
+ LCD_0IN96_SendData_8Bit(0x05);
+
+ LCD_0IN96_SendCommand(0x36);
+ LCD_0IN96_SendData_8Bit(0xA8);
+
+ LCD_0IN96_SendCommand(0x29);
+}
+
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_0IN96_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ LCD_0IN96_Reset();
+
+ LCD_0IN96.HEIGHT = LCD_0IN96_HEIGHT;
+ LCD_0IN96.WIDTH = LCD_0IN96_WIDTH;
+
+ //Set the initialization register
+ LCD_0IN96_InitReg();
+
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_0IN96_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ Xstart = Xstart + 1;
+ Xend = Xend + 1;
+ Ystart = Ystart + 26;
+ Yend = Yend+26;
+
+ LCD_0IN96_SendCommand(0x2a);
+ LCD_0IN96_SendData_8Bit(Xstart >> 8);
+ LCD_0IN96_SendData_8Bit(Xstart);
+ LCD_0IN96_SendData_8Bit(Xend >> 8);
+ LCD_0IN96_SendData_8Bit(Xend );
+
+ LCD_0IN96_SendCommand(0x2b);
+ LCD_0IN96_SendData_8Bit(Ystart >> 8);
+ LCD_0IN96_SendData_8Bit(Ystart);
+ LCD_0IN96_SendData_8Bit(Yend >> 8);
+ LCD_0IN96_SendData_8Bit(Yend);
+
+ LCD_0IN96_SendCommand(0x2C);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_0IN96_Clear(UWORD Color)
+{
+ UWORD j,i;
+ UWORD Image[LCD_0IN96.WIDTH*LCD_0IN96.HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_0IN96.HEIGHT*LCD_0IN96.WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_0IN96_SetWindows(0, 0, LCD_0IN96.WIDTH-1, LCD_0IN96.HEIGHT-1);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+
+ // for(j = 0; j < LCD_0IN96.WIDTH*LCD_0IN96.HEIGHT; j++){
+ // LCD_0IN96_SendData_16Bit(Image[j]);
+
+ for(j = 0; j < LCD_0IN96.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_0IN96.WIDTH], LCD_0IN96.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_0IN96_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_0IN96_SetWindows(0, 0, LCD_0IN96.WIDTH-1, LCD_0IN96.HEIGHT-1);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ // DEV_Digital_Write(EPD_CS_PIN, 0);
+
+ for (j = 0; j < LCD_0IN96.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_0IN96.WIDTH], LCD_0IN96.WIDTH*2);
+
+ // for(j = 0; j < LCD_0IN96.WIDTH*LCD_0IN96.HEIGHT; j++){
+ // LCD_0IN96_SendData_16Bit(Image[j]);
+ }
+// DEV_Digital_Write(EPD_CS_PIN, 1);
+ //LCD_0IN96_SendCommand(0x29);
+}
+
+void LCD_0IN96_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_0IN96_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_0IN96.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_0IN96_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_0IN96_SetWindows(X,Y,X,Y);
+ LCD_0IN96_SendData_16Bit(Color);
+}
+
+void Handler_0IN96_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_0in96.h b/bsp/pico/bsp/LCD/LCD_0in96.h
new file mode 100644
index 000000000..6498648c1
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_0in96.h
@@ -0,0 +1,52 @@
+/*****************************************************************************
+* | File : LCD_0in96.h
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-11
+* | Info : Basic version
+*
+******************************************************************************/
+#ifndef __LCD_0IN96_H
+#define __LCD_0IN96_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_0IN96_HEIGHT 80
+#define LCD_0IN96_WIDTH 160
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_0IN96_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_0IN96_ATTRIBUTES;
+extern LCD_0IN96_ATTRIBUTES LCD_0IN96;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_0IN96_Init(UBYTE Scan_dir);
+void LCD_0IN96_Clear(UWORD Color);
+void LCD_0IN96_Display(UWORD *Image);
+void LCD_0IN96_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_0IN96_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_0IN96_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in14.c b/bsp/pico/bsp/LCD/LCD_1in14.c
new file mode 100644
index 000000000..304f2754f
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in14.c
@@ -0,0 +1,284 @@
+#include "LCD_1in14.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN14_ATTRIBUTES LCD_1IN14;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN14_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN14_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN14_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN14_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN14_InitReg(void)
+{
+ LCD_1IN14_SendCommand(0x3A);
+ LCD_1IN14_SendData_8Bit(0x05);
+
+ LCD_1IN14_SendCommand(0xB2);
+ LCD_1IN14_SendData_8Bit(0x0C);
+ LCD_1IN14_SendData_8Bit(0x0C);
+ LCD_1IN14_SendData_8Bit(0x00);
+ LCD_1IN14_SendData_8Bit(0x33);
+ LCD_1IN14_SendData_8Bit(0x33);
+
+ LCD_1IN14_SendCommand(0xB7); //Gate Control
+ LCD_1IN14_SendData_8Bit(0x35);
+
+ LCD_1IN14_SendCommand(0xBB); //VCOM Setting
+ LCD_1IN14_SendData_8Bit(0x19);
+
+ LCD_1IN14_SendCommand(0xC0); //LCM Control
+ LCD_1IN14_SendData_8Bit(0x2C);
+
+ LCD_1IN14_SendCommand(0xC2); //VDV and VRH Command Enable
+ LCD_1IN14_SendData_8Bit(0x01);
+ LCD_1IN14_SendCommand(0xC3); //VRH Set
+ LCD_1IN14_SendData_8Bit(0x12);
+ LCD_1IN14_SendCommand(0xC4); //VDV Set
+ LCD_1IN14_SendData_8Bit(0x20);
+
+ LCD_1IN14_SendCommand(0xC6); //Frame Rate Control in Normal Mode
+ LCD_1IN14_SendData_8Bit(0x0F);
+
+ LCD_1IN14_SendCommand(0xD0); // Power Control 1
+ LCD_1IN14_SendData_8Bit(0xA4);
+ LCD_1IN14_SendData_8Bit(0xA1);
+
+ LCD_1IN14_SendCommand(0xE0); //Positive Voltage Gamma Control
+ LCD_1IN14_SendData_8Bit(0xD0);
+ LCD_1IN14_SendData_8Bit(0x04);
+ LCD_1IN14_SendData_8Bit(0x0D);
+ LCD_1IN14_SendData_8Bit(0x11);
+ LCD_1IN14_SendData_8Bit(0x13);
+ LCD_1IN14_SendData_8Bit(0x2B);
+ LCD_1IN14_SendData_8Bit(0x3F);
+ LCD_1IN14_SendData_8Bit(0x54);
+ LCD_1IN14_SendData_8Bit(0x4C);
+ LCD_1IN14_SendData_8Bit(0x18);
+ LCD_1IN14_SendData_8Bit(0x0D);
+ LCD_1IN14_SendData_8Bit(0x0B);
+ LCD_1IN14_SendData_8Bit(0x1F);
+ LCD_1IN14_SendData_8Bit(0x23);
+
+ LCD_1IN14_SendCommand(0xE1); //Negative Voltage Gamma Control
+ LCD_1IN14_SendData_8Bit(0xD0);
+ LCD_1IN14_SendData_8Bit(0x04);
+ LCD_1IN14_SendData_8Bit(0x0C);
+ LCD_1IN14_SendData_8Bit(0x11);
+ LCD_1IN14_SendData_8Bit(0x13);
+ LCD_1IN14_SendData_8Bit(0x2C);
+ LCD_1IN14_SendData_8Bit(0x3F);
+ LCD_1IN14_SendData_8Bit(0x44);
+ LCD_1IN14_SendData_8Bit(0x51);
+ LCD_1IN14_SendData_8Bit(0x2F);
+ LCD_1IN14_SendData_8Bit(0x1F);
+ LCD_1IN14_SendData_8Bit(0x1F);
+ LCD_1IN14_SendData_8Bit(0x20);
+ LCD_1IN14_SendData_8Bit(0x23);
+
+ LCD_1IN14_SendCommand(0x21); //Display Inversion On
+
+ LCD_1IN14_SendCommand(0x11); //Sleep Out
+
+ LCD_1IN14_SendCommand(0x29); //Display On
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN14_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN14.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN14.HEIGHT = LCD_1IN14_WIDTH;
+ LCD_1IN14.WIDTH = LCD_1IN14_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN14.HEIGHT = LCD_1IN14_HEIGHT;
+ LCD_1IN14.WIDTH = LCD_1IN14_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN14_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN14_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN14_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_1IN14_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN14_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN14_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN14_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ UBYTE x,y;
+ if(LCD_1IN14.SCAN_DIR == HORIZONTAL){x=40;y=53;}
+ else{ x=52; y=40; }
+ //set the X coordinates
+ LCD_1IN14_SendCommand(0x2A);
+
+
+ LCD_1IN14_SendData_16Bit(Xstart +x);
+ LCD_1IN14_SendData_16Bit(Xend-1 +x);
+ //set the Y coordinates
+ LCD_1IN14_SendCommand(0x2B);
+ LCD_1IN14_SendData_16Bit(Ystart +y);
+ LCD_1IN14_SendData_16Bit(Yend-1 +y);
+
+ LCD_1IN14_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN14_Clear(UWORD Color)
+{
+ UWORD j,i;
+ UWORD Image[LCD_1IN14.WIDTH*LCD_1IN14.HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_1IN14.HEIGHT*LCD_1IN14.WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN14_SetWindows(0, 0, LCD_1IN14.WIDTH, LCD_1IN14.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ // printf("HEIGHT %d, WIDTH %d\r\n",LCD_1IN14.HEIGHT,LCD_1IN14.WIDTH);
+ for(j = 0; j < LCD_1IN14.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN14.WIDTH], LCD_1IN14.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN14_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN14_SetWindows(0, 0, LCD_1IN14.WIDTH, LCD_1IN14.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN14.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN14.WIDTH], LCD_1IN14.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN14_SendCommand(0x29);
+}
+
+void LCD_1IN14_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN14_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN14.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN14_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN14_SetWindows(X,Y,X,Y);
+ LCD_1IN14_SendData_16Bit(Color);
+}
+
+void Handler_1IN14_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_1in14.h b/bsp/pico/bsp/LCD/LCD_1in14.h
new file mode 100644
index 000000000..4d1c1dde9
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in14.h
@@ -0,0 +1,39 @@
+#ifndef __LCD_1IN14_H
+#define __LCD_1IN14_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_1IN14_HEIGHT 240
+#define LCD_1IN14_WIDTH 135
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_1IN14_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN14_ATTRIBUTES;
+extern LCD_1IN14_ATTRIBUTES LCD_1IN14;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN14_Init(UBYTE Scan_dir);
+void LCD_1IN14_Clear(UWORD Color);
+void LCD_1IN14_Display(UWORD *Image);
+void LCD_1IN14_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN14_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_1IN14_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in14_V2.c b/bsp/pico/bsp/LCD/LCD_1in14_V2.c
new file mode 100644
index 000000000..dd6989604
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in14_V2.c
@@ -0,0 +1,328 @@
+/*****************************************************************************
+* | File : LCD_1IN14_V2.C
+* | Function : test Demo
+* | Info :
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-16
+* | Info :
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documnetation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+******************************************************************************/
+#include "LCD_1in14_V2.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN14_V2_ATTRIBUTES LCD_1IN14_V2;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN14_V2_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN14_V2_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN14_V2_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN14_V2_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN14_V2_InitReg(void)
+{
+ LCD_1IN14_V2_SendCommand(0x3A);
+ LCD_1IN14_V2_SendData_8Bit(0x05);
+
+ LCD_1IN14_V2_SendCommand(0xB2);
+ LCD_1IN14_V2_SendData_8Bit(0x0C);
+ LCD_1IN14_V2_SendData_8Bit(0x0C);
+ LCD_1IN14_V2_SendData_8Bit(0x00);
+ LCD_1IN14_V2_SendData_8Bit(0x33);
+ LCD_1IN14_V2_SendData_8Bit(0x33);
+
+ LCD_1IN14_V2_SendCommand(0xB7); //Gate Control
+ LCD_1IN14_V2_SendData_8Bit(0x35);
+
+ LCD_1IN14_V2_SendCommand(0xBB); //VCOM Setting
+ LCD_1IN14_V2_SendData_8Bit(0x19);
+
+ LCD_1IN14_V2_SendCommand(0xC0); //LCM Control
+ LCD_1IN14_V2_SendData_8Bit(0x2C);
+
+ LCD_1IN14_V2_SendCommand(0xC2); //VDV and VRH Command Enable
+ LCD_1IN14_V2_SendData_8Bit(0x01);
+ LCD_1IN14_V2_SendCommand(0xC3); //VRH Set
+ LCD_1IN14_V2_SendData_8Bit(0x12);
+ LCD_1IN14_V2_SendCommand(0xC4); //VDV Set
+ LCD_1IN14_V2_SendData_8Bit(0x20);
+
+ LCD_1IN14_V2_SendCommand(0xC6); //Frame Rate Control in Normal Mode
+ LCD_1IN14_V2_SendData_8Bit(0x0F);
+
+ LCD_1IN14_V2_SendCommand(0xD0); // Power Control 1
+ LCD_1IN14_V2_SendData_8Bit(0xA4);
+ LCD_1IN14_V2_SendData_8Bit(0xA1);
+
+ LCD_1IN14_V2_SendCommand(0xE0); //Positive Voltage Gamma Control
+ LCD_1IN14_V2_SendData_8Bit(0xD0);
+ LCD_1IN14_V2_SendData_8Bit(0x04);
+ LCD_1IN14_V2_SendData_8Bit(0x0D);
+ LCD_1IN14_V2_SendData_8Bit(0x11);
+ LCD_1IN14_V2_SendData_8Bit(0x13);
+ LCD_1IN14_V2_SendData_8Bit(0x2B);
+ LCD_1IN14_V2_SendData_8Bit(0x3F);
+ LCD_1IN14_V2_SendData_8Bit(0x54);
+ LCD_1IN14_V2_SendData_8Bit(0x4C);
+ LCD_1IN14_V2_SendData_8Bit(0x18);
+ LCD_1IN14_V2_SendData_8Bit(0x0D);
+ LCD_1IN14_V2_SendData_8Bit(0x0B);
+ LCD_1IN14_V2_SendData_8Bit(0x1F);
+ LCD_1IN14_V2_SendData_8Bit(0x23);
+
+ LCD_1IN14_V2_SendCommand(0xE1); //Negative Voltage Gamma Control
+ LCD_1IN14_V2_SendData_8Bit(0xD0);
+ LCD_1IN14_V2_SendData_8Bit(0x04);
+ LCD_1IN14_V2_SendData_8Bit(0x0C);
+ LCD_1IN14_V2_SendData_8Bit(0x11);
+ LCD_1IN14_V2_SendData_8Bit(0x13);
+ LCD_1IN14_V2_SendData_8Bit(0x2C);
+ LCD_1IN14_V2_SendData_8Bit(0x3F);
+ LCD_1IN14_V2_SendData_8Bit(0x44);
+ LCD_1IN14_V2_SendData_8Bit(0x51);
+ LCD_1IN14_V2_SendData_8Bit(0x2F);
+ LCD_1IN14_V2_SendData_8Bit(0x1F);
+ LCD_1IN14_V2_SendData_8Bit(0x1F);
+ LCD_1IN14_V2_SendData_8Bit(0x20);
+ LCD_1IN14_V2_SendData_8Bit(0x23);
+
+ LCD_1IN14_V2_SendCommand(0x21); //Display Inversion On
+
+ LCD_1IN14_V2_SendCommand(0x11); //Sleep Out
+
+ LCD_1IN14_V2_SendCommand(0x29); //Display On
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN14_V2_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN14_V2.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN14_V2.HEIGHT = LCD_1IN14_V2_WIDTH;
+ LCD_1IN14_V2.WIDTH = LCD_1IN14_V2_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN14_V2.HEIGHT = LCD_1IN14_V2_HEIGHT;
+ LCD_1IN14_V2.WIDTH = LCD_1IN14_V2_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN14_V2_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN14_V2_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN14_V2_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_1IN14_V2_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN14_V2_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN14_V2_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN14_V2_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ UBYTE x,y;
+ if(LCD_1IN14_V2.SCAN_DIR == HORIZONTAL){x=40;y=53;}
+ else{ x=52; y=40; }
+ //set the X coordinates
+ LCD_1IN14_V2_SendCommand(0x2A);
+
+
+ LCD_1IN14_V2_SendData_16Bit(Xstart +x);
+ LCD_1IN14_V2_SendData_16Bit(Xend-1 +x);
+ //set the Y coordinates
+ LCD_1IN14_V2_SendCommand(0x2B);
+ LCD_1IN14_V2_SendData_16Bit(Ystart +y);
+ LCD_1IN14_V2_SendData_16Bit(Yend-1 +y);
+
+ LCD_1IN14_V2_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN14_V2_Clear(UWORD Color)
+{
+ UWORD j,i;
+ UWORD Image[LCD_1IN14_V2.WIDTH*LCD_1IN14_V2.HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_1IN14_V2.HEIGHT*LCD_1IN14_V2.WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN14_V2_SetWindows(0, 0, LCD_1IN14_V2.WIDTH, LCD_1IN14_V2.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ // printf("HEIGHT %d, WIDTH %d\r\n",LCD_1IN14_V2.HEIGHT,LCD_1IN14_V2.WIDTH);
+ for(j = 0; j < LCD_1IN14_V2.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN14_V2.WIDTH], LCD_1IN14_V2.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN14_V2_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN14_V2_SetWindows(0, 0, LCD_1IN14_V2.WIDTH, LCD_1IN14_V2.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN14_V2.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN14_V2.WIDTH], LCD_1IN14_V2.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN14_V2_SendCommand(0x29);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+ Image : Written content
+******************************************************************************/
+void LCD_1IN14_V2_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN14_V2_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN14_V2.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Change the color of a point
+parameter:
+ X : X coordinates
+ Y : Y coordinates
+ Color : Color
+******************************************************************************/
+void LCD_1IN14_V2_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN14_V2_SetWindows(X,Y,X,Y);
+ LCD_1IN14_V2_SendData_16Bit(Color);
+}
+
+void Handler_1IN14_V2_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_1in14_V2.h b/bsp/pico/bsp/LCD/LCD_1in14_V2.h
new file mode 100644
index 000000000..502004105
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in14_V2.h
@@ -0,0 +1,68 @@
+/*****************************************************************************
+* | File : LCD_1IN14_V2.h
+* | Function : test Demo
+* | Info :
+*----------------
+* | This version: V1.0
+* | Date : 2021-03-16
+* | Info :
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documnetation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+******************************************************************************/
+#ifndef __LCD_1IN14_V2_H
+#define __LCD_1IN14_V2_H
+
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_1IN14_V2_HEIGHT 240
+#define LCD_1IN14_V2_WIDTH 135
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_1IN14_V2_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN14_V2_ATTRIBUTES;
+extern LCD_1IN14_V2_ATTRIBUTES LCD_1IN14_V2;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN14_V2_Init(UBYTE Scan_dir);
+void LCD_1IN14_V2_Clear(UWORD Color);
+void LCD_1IN14_V2_Display(UWORD *Image);
+void LCD_1IN14_V2_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN14_V2_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_1IN14_V2_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in3.c b/bsp/pico/bsp/LCD/LCD_1in3.c
new file mode 100644
index 000000000..4f3bd0c0c
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in3.c
@@ -0,0 +1,318 @@
+/*****************************************************************************
+* | File : LCD_1in14.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#include "LCD_1in3.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN3_ATTRIBUTES LCD_1IN3;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN3_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN3_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN3_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN3_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN3_InitReg(void)
+{
+ LCD_1IN3_SendCommand(0x3A);
+ LCD_1IN3_SendData_8Bit(0x05);
+
+ LCD_1IN3_SendCommand(0xB2);
+ LCD_1IN3_SendData_8Bit(0x0C);
+ LCD_1IN3_SendData_8Bit(0x0C);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(0x33);
+ LCD_1IN3_SendData_8Bit(0x33);
+
+ LCD_1IN3_SendCommand(0xB7); //Gate Control
+ LCD_1IN3_SendData_8Bit(0x35);
+
+ LCD_1IN3_SendCommand(0xBB); //VCOM Setting
+ LCD_1IN3_SendData_8Bit(0x19);
+
+ LCD_1IN3_SendCommand(0xC0); //LCM Control
+ LCD_1IN3_SendData_8Bit(0x2C);
+
+ LCD_1IN3_SendCommand(0xC2); //VDV and VRH Command Enable
+ LCD_1IN3_SendData_8Bit(0x01);
+ LCD_1IN3_SendCommand(0xC3); //VRH Set
+ LCD_1IN3_SendData_8Bit(0x12);
+ LCD_1IN3_SendCommand(0xC4); //VDV Set
+ LCD_1IN3_SendData_8Bit(0x20);
+
+ LCD_1IN3_SendCommand(0xC6); //Frame Rate Control in Normal Mode
+ LCD_1IN3_SendData_8Bit(0x0F);
+
+ LCD_1IN3_SendCommand(0xB0);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(0xC8);
+
+ LCD_1IN3_SendCommand(0xD0); // Power Control 1
+ LCD_1IN3_SendData_8Bit(0xA4);
+ LCD_1IN3_SendData_8Bit(0xA1);
+
+ LCD_1IN3_SendCommand(0xE0); //Positive Voltage Gamma Control
+ LCD_1IN3_SendData_8Bit(0xD0);
+ LCD_1IN3_SendData_8Bit(0x04);
+ LCD_1IN3_SendData_8Bit(0x0D);
+ LCD_1IN3_SendData_8Bit(0x11);
+ LCD_1IN3_SendData_8Bit(0x13);
+ LCD_1IN3_SendData_8Bit(0x2B);
+ LCD_1IN3_SendData_8Bit(0x3F);
+ LCD_1IN3_SendData_8Bit(0x54);
+ LCD_1IN3_SendData_8Bit(0x4C);
+ LCD_1IN3_SendData_8Bit(0x18);
+ LCD_1IN3_SendData_8Bit(0x0D);
+ LCD_1IN3_SendData_8Bit(0x0B);
+ LCD_1IN3_SendData_8Bit(0x1F);
+ LCD_1IN3_SendData_8Bit(0x23);
+
+ LCD_1IN3_SendCommand(0xE1); //Negative Voltage Gamma Control
+ LCD_1IN3_SendData_8Bit(0xD0);
+ LCD_1IN3_SendData_8Bit(0x04);
+ LCD_1IN3_SendData_8Bit(0x0C);
+ LCD_1IN3_SendData_8Bit(0x11);
+ LCD_1IN3_SendData_8Bit(0x13);
+ LCD_1IN3_SendData_8Bit(0x2C);
+ LCD_1IN3_SendData_8Bit(0x3F);
+ LCD_1IN3_SendData_8Bit(0x44);
+ LCD_1IN3_SendData_8Bit(0x51);
+ LCD_1IN3_SendData_8Bit(0x2F);
+ LCD_1IN3_SendData_8Bit(0x1F);
+ LCD_1IN3_SendData_8Bit(0x1F);
+ LCD_1IN3_SendData_8Bit(0x20);
+ LCD_1IN3_SendData_8Bit(0x23);
+
+ LCD_1IN3_SendCommand(0x21); //Display Inversion On
+
+ LCD_1IN3_SendCommand(0x11); //Sleep Out
+
+ LCD_1IN3_SendCommand(0x29); //Display On
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN3_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN3.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN3.HEIGHT = LCD_1IN3_WIDTH;
+ LCD_1IN3.WIDTH = LCD_1IN3_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN3.HEIGHT = LCD_1IN3_HEIGHT;
+ LCD_1IN3.WIDTH = LCD_1IN3_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN3_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN3_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN3_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_1IN3_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN3_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN3_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN3_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ //set the X coordinates
+ LCD_1IN3_SendCommand(0x2A);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(Xstart);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(Xend-1);
+
+ //set the Y coordinates
+ LCD_1IN3_SendCommand(0x2B);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(Ystart);
+ LCD_1IN3_SendData_8Bit(0x00);
+ LCD_1IN3_SendData_8Bit(Yend-1);
+
+ LCD_1IN3_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN3_Clear(UWORD Color)
+{
+ UWORD j,i;
+ static UWORD Image[LCD_1IN3_WIDTH];
+
+ //Color = ((Color<<8)&0xff00)|(Color>>8);
+ for (j = 0; j < LCD_1IN3_WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN3_SetWindows(0, 0, LCD_1IN3.WIDTH, LCD_1IN3.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+
+ for(j = 0; j < LCD_1IN3.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)Image, LCD_1IN3.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN3_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN3_SetWindows(0, 0, LCD_1IN3.WIDTH, LCD_1IN3.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN3.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN3.WIDTH], LCD_1IN3.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN3_SendCommand(0x29);
+}
+
+
+
+void GLCD_DrawBitmap( int_fast16_t x, int_fast16_t y,
+ int_fast16_t width, int_fast16_t height,
+ uint16_t *frame_ptr)
+{
+ UWORD j;
+ LCD_1IN3_SetWindows(x, y, x+width, y+height);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+
+ DEV_SPI_Write_nByte((uint8_t *)frame_ptr, height*width*2);
+
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN3_SendCommand(0x29);
+}
+
+void Disp0_DrawBitmap( int16_t x,
+ int16_t y,
+ int16_t width,
+ int16_t height,
+ const uint8_t *bitmap)
+{
+ GLCD_DrawBitmap(x, y, width, height, (uint16_t *)bitmap);
+}
+
+void LCD_1IN3_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN3_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN3.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN3_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN3_SetWindows(X,Y,X,Y);
+ LCD_1IN3_SendData_16Bit(Color);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_1in3.h b/bsp/pico/bsp/LCD/LCD_1in3.h
new file mode 100644
index 000000000..ec30f0758
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in3.h
@@ -0,0 +1,56 @@
+/*****************************************************************************
+* | File : LCD_1in54.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#ifndef __LCD_1IN3_H
+#define __LCD_1IN3_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_1IN3_HEIGHT 240
+#define LCD_1IN3_WIDTH 240
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_1IN3_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN3_ATTRIBUTES;
+extern LCD_1IN3_ATTRIBUTES LCD_1IN3;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN3_Init(UBYTE Scan_dir);
+void LCD_1IN3_Clear(UWORD Color);
+void LCD_1IN3_Display(UWORD *Image);
+void LCD_1IN3_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN3_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+extern
+void GLCD_DrawBitmap( int_fast16_t x, int_fast16_t y,
+ int_fast16_t width, int_fast16_t height,
+ uint16_t *frame_ptr);
+
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in44.c b/bsp/pico/bsp/LCD/LCD_1in44.c
new file mode 100644
index 000000000..ad6a6ea9a
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in44.c
@@ -0,0 +1,322 @@
+/*****************************************************************************
+* | File : LCD_1in44.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#include "LCD_1in44.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN44_ATTRIBUTES LCD_1IN44;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN44_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN44_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ // DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN44_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN44_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN44_InitReg(void)
+{
+ LCD_1IN44_SendCommand(0x3A);
+ LCD_1IN44_SendData_8Bit(0x05);
+
+ //ST7735R Frame Rate
+ LCD_1IN44_SendCommand(0xB1);
+ LCD_1IN44_SendData_8Bit(0x01);
+ LCD_1IN44_SendData_8Bit(0x2C);
+ LCD_1IN44_SendData_8Bit(0x2D);
+
+ LCD_1IN44_SendCommand(0xB2);
+ LCD_1IN44_SendData_8Bit(0x01);
+ LCD_1IN44_SendData_8Bit(0x2C);
+ LCD_1IN44_SendData_8Bit(0x2D);
+
+ LCD_1IN44_SendCommand(0xB3);
+ LCD_1IN44_SendData_8Bit(0x01);
+ LCD_1IN44_SendData_8Bit(0x2C);
+ LCD_1IN44_SendData_8Bit(0x2D);
+ LCD_1IN44_SendData_8Bit(0x01);
+ LCD_1IN44_SendData_8Bit(0x2C);
+ LCD_1IN44_SendData_8Bit(0x2D);
+
+ LCD_1IN44_SendCommand(0xB4); //Column inversion
+ LCD_1IN44_SendData_8Bit(0x07);
+
+ //ST7735R Power Sequence
+ LCD_1IN44_SendCommand(0xC0);
+ LCD_1IN44_SendData_8Bit(0xA2);
+ LCD_1IN44_SendData_8Bit(0x02);
+ LCD_1IN44_SendData_8Bit(0x84);
+ LCD_1IN44_SendCommand(0xC1);
+ LCD_1IN44_SendData_8Bit(0xC5);
+
+ LCD_1IN44_SendCommand(0xC2);
+ LCD_1IN44_SendData_8Bit(0x0A);
+ LCD_1IN44_SendData_8Bit(0x00);
+
+ LCD_1IN44_SendCommand(0xC3);
+ LCD_1IN44_SendData_8Bit(0x8A);
+ LCD_1IN44_SendData_8Bit(0x2A);
+ LCD_1IN44_SendCommand(0xC4);
+ LCD_1IN44_SendData_8Bit(0x8A);
+ LCD_1IN44_SendData_8Bit(0xEE);
+
+ LCD_1IN44_SendCommand(0xC5); //VCOM
+ LCD_1IN44_SendData_8Bit(0x0E);
+
+ //ST7735R Gamma Sequence
+ LCD_1IN44_SendCommand(0xe0);
+ LCD_1IN44_SendData_8Bit(0x0f);
+ LCD_1IN44_SendData_8Bit(0x1a);
+ LCD_1IN44_SendData_8Bit(0x0f);
+ LCD_1IN44_SendData_8Bit(0x18);
+ LCD_1IN44_SendData_8Bit(0x2f);
+ LCD_1IN44_SendData_8Bit(0x28);
+ LCD_1IN44_SendData_8Bit(0x20);
+ LCD_1IN44_SendData_8Bit(0x22);
+ LCD_1IN44_SendData_8Bit(0x1f);
+ LCD_1IN44_SendData_8Bit(0x1b);
+ LCD_1IN44_SendData_8Bit(0x23);
+ LCD_1IN44_SendData_8Bit(0x37);
+ LCD_1IN44_SendData_8Bit(0x00);
+ LCD_1IN44_SendData_8Bit(0x07);
+ LCD_1IN44_SendData_8Bit(0x02);
+ LCD_1IN44_SendData_8Bit(0x10);
+
+ LCD_1IN44_SendCommand(0xe1);
+ LCD_1IN44_SendData_8Bit(0x0f);
+ LCD_1IN44_SendData_8Bit(0x1b);
+ LCD_1IN44_SendData_8Bit(0x0f);
+ LCD_1IN44_SendData_8Bit(0x17);
+ LCD_1IN44_SendData_8Bit(0x33);
+ LCD_1IN44_SendData_8Bit(0x2c);
+ LCD_1IN44_SendData_8Bit(0x29);
+ LCD_1IN44_SendData_8Bit(0x2e);
+ LCD_1IN44_SendData_8Bit(0x30);
+ LCD_1IN44_SendData_8Bit(0x30);
+ LCD_1IN44_SendData_8Bit(0x39);
+ LCD_1IN44_SendData_8Bit(0x3f);
+ LCD_1IN44_SendData_8Bit(0x00);
+ LCD_1IN44_SendData_8Bit(0x07);
+ LCD_1IN44_SendData_8Bit(0x03);
+ LCD_1IN44_SendData_8Bit(0x10);
+
+ LCD_1IN44_SendCommand(0x21);// reverse
+ LCD_1IN44_SendCommand(0x11);
+ DEV_Delay_ms(120);
+
+ //Turn on the LCD display
+ LCD_1IN44_SendCommand(0x29);
+
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN44_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN44.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN44.HEIGHT = LCD_1IN44_WIDTH;
+ LCD_1IN44.WIDTH = LCD_1IN44_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN44.HEIGHT = LCD_1IN44_HEIGHT;
+ LCD_1IN44.WIDTH = LCD_1IN44_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN44_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN44_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN44_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_1IN44_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN44_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN44_InitReg();
+
+
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN44_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ UBYTE x,y;
+ if(LCD_1IN44.SCAN_DIR == HORIZONTAL){x=1;y=2;}
+ else{ x=2; y=1; }
+ //set the X coordinates
+ LCD_1IN44_SendCommand(0x2A);
+
+
+ LCD_1IN44_SendData_16Bit(Xstart +x);
+ LCD_1IN44_SendData_16Bit(Xend-1 +x);
+ //set the Y coordinates
+ LCD_1IN44_SendCommand(0x2B);
+ LCD_1IN44_SendData_16Bit(Ystart +y);
+ LCD_1IN44_SendData_16Bit(Yend-1 +y);
+
+ LCD_1IN44_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN44_Clear(UWORD Color)
+{
+ UWORD j,i;
+ UWORD Image[LCD_1IN44.WIDTH*LCD_1IN44.HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_1IN44.HEIGHT*LCD_1IN44.WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN44_SetWindows(0, 0, LCD_1IN44.WIDTH, LCD_1IN44.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ // printf("HEIGHT %d, WIDTH %d\r\n",LCD_1IN44.HEIGHT,LCD_1IN44.WIDTH);
+ for(j = 0; j < LCD_1IN44.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN44.WIDTH], LCD_1IN44.WIDTH*2);
+
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN44_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN44_SetWindows(0, 0, LCD_1IN44.WIDTH, LCD_1IN44.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN44.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN44.WIDTH], LCD_1IN44.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN44_SendCommand(0x29);
+}
+
+void LCD_1IN44_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN44_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN44.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN44_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN44_SetWindows(X,Y,X,Y);
+ LCD_1IN44_SendData_16Bit(Color);
+}
+
+void Handler_1IN44_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
+
diff --git a/bsp/pico/bsp/LCD/LCD_1in44.h b/bsp/pico/bsp/LCD/LCD_1in44.h
new file mode 100644
index 000000000..eda4bfba8
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in44.h
@@ -0,0 +1,51 @@
+/*****************************************************************************
+* | File : LCD_1in54.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#ifndef __LCD_1IN44_H
+#define __LCD_1IN44_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_1IN44_HEIGHT 128
+#define LCD_1IN44_WIDTH 128
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_1IN44_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN44_ATTRIBUTES;
+extern LCD_1IN44_ATTRIBUTES LCD_1IN44;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN44_Init(UBYTE Scan_dir);
+void LCD_1IN44_Clear(UWORD Color);
+void LCD_1IN44_Display(UWORD *Image);
+void LCD_1IN44_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN44_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+void Handler_1IN44_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in54.c b/bsp/pico/bsp/LCD/LCD_1in54.c
new file mode 100644
index 000000000..62baf0f2d
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in54.c
@@ -0,0 +1,276 @@
+#include "LCD_1in54.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN54_ATTRIBUTES LCD_1IN54;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN54_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN54_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN54_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN54_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN54_InitReg(void)
+{
+ LCD_1IN54_SendCommand(0x3A);
+ LCD_1IN54_SendData_8Bit(0x05);
+
+ LCD_1IN54_SendCommand(0xB2);
+ LCD_1IN54_SendData_8Bit(0x0C);
+ LCD_1IN54_SendData_8Bit(0x0C);
+ LCD_1IN54_SendData_8Bit(0x00);
+ LCD_1IN54_SendData_8Bit(0x33);
+ LCD_1IN54_SendData_8Bit(0x33);
+
+ LCD_1IN54_SendCommand(0xB7); //Gate Control
+ LCD_1IN54_SendData_8Bit(0x35);
+
+ LCD_1IN54_SendCommand(0xBB); //VCOM Setting
+ LCD_1IN54_SendData_8Bit(0x19);
+
+ LCD_1IN54_SendCommand(0xC0); //LCM Control
+ LCD_1IN54_SendData_8Bit(0x2C);
+
+ LCD_1IN54_SendCommand(0xC2); //VDV and VRH Command Enable
+ LCD_1IN54_SendData_8Bit(0x01);
+ LCD_1IN54_SendCommand(0xC3); //VRH Set
+ LCD_1IN54_SendData_8Bit(0x12);
+ LCD_1IN54_SendCommand(0xC4); //VDV Set
+ LCD_1IN54_SendData_8Bit(0x20);
+
+ LCD_1IN54_SendCommand(0xC6); //Frame Rate Control in Normal Mode
+ LCD_1IN54_SendData_8Bit(0x0F);
+
+ LCD_1IN54_SendCommand(0xD0); // Power Control 1
+ LCD_1IN54_SendData_8Bit(0xA4);
+ LCD_1IN54_SendData_8Bit(0xA1);
+
+ LCD_1IN54_SendCommand(0xE0); //Positive Voltage Gamma Control
+ LCD_1IN54_SendData_8Bit(0xD0);
+ LCD_1IN54_SendData_8Bit(0x04);
+ LCD_1IN54_SendData_8Bit(0x0D);
+ LCD_1IN54_SendData_8Bit(0x11);
+ LCD_1IN54_SendData_8Bit(0x13);
+ LCD_1IN54_SendData_8Bit(0x2B);
+ LCD_1IN54_SendData_8Bit(0x3F);
+ LCD_1IN54_SendData_8Bit(0x54);
+ LCD_1IN54_SendData_8Bit(0x4C);
+ LCD_1IN54_SendData_8Bit(0x18);
+ LCD_1IN54_SendData_8Bit(0x0D);
+ LCD_1IN54_SendData_8Bit(0x0B);
+ LCD_1IN54_SendData_8Bit(0x1F);
+ LCD_1IN54_SendData_8Bit(0x23);
+
+ LCD_1IN54_SendCommand(0xE1); //Negative Voltage Gamma Control
+ LCD_1IN54_SendData_8Bit(0xD0);
+ LCD_1IN54_SendData_8Bit(0x04);
+ LCD_1IN54_SendData_8Bit(0x0C);
+ LCD_1IN54_SendData_8Bit(0x11);
+ LCD_1IN54_SendData_8Bit(0x13);
+ LCD_1IN54_SendData_8Bit(0x2C);
+ LCD_1IN54_SendData_8Bit(0x3F);
+ LCD_1IN54_SendData_8Bit(0x44);
+ LCD_1IN54_SendData_8Bit(0x51);
+ LCD_1IN54_SendData_8Bit(0x2F);
+ LCD_1IN54_SendData_8Bit(0x1F);
+ LCD_1IN54_SendData_8Bit(0x1F);
+ LCD_1IN54_SendData_8Bit(0x20);
+ LCD_1IN54_SendData_8Bit(0x23);
+
+ LCD_1IN54_SendCommand(0x21); //Display Inversion On
+
+ LCD_1IN54_SendCommand(0x11); //Sleep Out
+
+ LCD_1IN54_SendCommand(0x29); //Display On
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN54_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN54.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN54.HEIGHT = LCD_1IN54_HEIGHT;
+ LCD_1IN54.WIDTH = LCD_1IN54_WIDTH;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN54.HEIGHT = LCD_1IN54_WIDTH;
+ LCD_1IN54.WIDTH = LCD_1IN54_HEIGHT;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN54_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN54_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN54_Init(UBYTE Scan_dir)
+{
+ //Turn on the backlight
+ // LCD_1IN54_BL_1;
+
+ //Hardware reset
+ LCD_1IN54_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN54_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN54_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN54_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ //set the X coordinates
+ LCD_1IN54_SendCommand(0x2A);
+ LCD_1IN54_SendData_8Bit((Xstart >> 8) & 0xFF);
+ LCD_1IN54_SendData_8Bit(Xstart & 0xFF);
+ LCD_1IN54_SendData_8Bit(((Xend - 1) >> 8) & 0xFF);
+ LCD_1IN54_SendData_8Bit((Xend - 1) & 0xFF);
+
+ //set the Y coordinates
+ LCD_1IN54_SendCommand(0x2B);
+ LCD_1IN54_SendData_8Bit((Ystart >> 8) & 0xFF);
+ LCD_1IN54_SendData_8Bit(Ystart & 0xFF);
+ LCD_1IN54_SendData_8Bit(((Yend - 1) >> 8) & 0xFF);
+ LCD_1IN54_SendData_8Bit((Yend - 1) & 0xFF);
+
+ LCD_1IN54_SendCommand(0X2C);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN54_Clear(UWORD Color)
+{
+ UWORD j;
+ UWORD Image[LCD_1IN54_WIDTH*LCD_1IN54_HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_1IN54_HEIGHT*LCD_1IN54_WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN54_SetWindows(0, 0, LCD_1IN54_WIDTH, LCD_1IN54_HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for(j = 0; j < LCD_1IN54_HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN54_WIDTH], LCD_1IN54_WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN54_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN54_SetWindows(0, 0, LCD_1IN54_WIDTH, LCD_1IN54_HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN54_HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN54_WIDTH], LCD_1IN54_WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN54_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN54_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN54_WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN54_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN54_SetWindows(X,Y,X,Y);
+ LCD_1IN54_SendData_16Bit(Color);
+}
+
diff --git a/bsp/pico/bsp/LCD/LCD_1in54.h b/bsp/pico/bsp/LCD/LCD_1in54.h
new file mode 100644
index 000000000..409299b79
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in54.h
@@ -0,0 +1,34 @@
+#ifndef __LCD_1IN54_H
+#define __LCD_1IN54_H
+
+#include "DEV_Config.h"
+
+#define LCD_1IN54_HEIGHT 240
+#define LCD_1IN54_WIDTH 240
+
+#define LCD_1IN54_WIDTH_Byte 240
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN54_ATTRIBUTES;
+extern LCD_1IN54_ATTRIBUTES LCD_1IN54;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN54_Init(UBYTE Scan_dir);
+void LCD_1IN54_Clear(UWORD Color);
+void LCD_1IN54_Display(UWORD *Image);
+void LCD_1IN54_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN54_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_1IN54_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_1in8.c b/bsp/pico/bsp/LCD/LCD_1in8.c
new file mode 100644
index 000000000..5ebfce9a2
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in8.c
@@ -0,0 +1,326 @@
+/*****************************************************************************
+* | File : LCD_1in8.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#include "LCD_1in8.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_1IN8_ATTRIBUTES LCD_1IN8;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_1IN8_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_1IN8_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN8_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_1IN8_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_1IN8_InitReg(void)
+{
+ LCD_1IN8_SendCommand(0x3A);
+ LCD_1IN8_SendData_8Bit(0x05);
+
+ //ST7735R Frame Rate
+ LCD_1IN8_SendCommand(0xB1);
+ LCD_1IN8_SendData_8Bit(0x01);
+ LCD_1IN8_SendData_8Bit(0x2C);
+ LCD_1IN8_SendData_8Bit(0x2D);
+
+ LCD_1IN8_SendCommand(0xB2);
+ LCD_1IN8_SendData_8Bit(0x01);
+ LCD_1IN8_SendData_8Bit(0x2C);
+ LCD_1IN8_SendData_8Bit(0x2D);
+
+ LCD_1IN8_SendCommand(0xB3);
+ LCD_1IN8_SendData_8Bit(0x01);
+ LCD_1IN8_SendData_8Bit(0x2C);
+ LCD_1IN8_SendData_8Bit(0x2D);
+ LCD_1IN8_SendData_8Bit(0x01);
+ LCD_1IN8_SendData_8Bit(0x2C);
+ LCD_1IN8_SendData_8Bit(0x2D);
+
+ LCD_1IN8_SendCommand(0xB4); //Column inversion
+ LCD_1IN8_SendData_8Bit(0x07);
+
+ //ST7735R Power Sequence
+ LCD_1IN8_SendCommand(0xC0);
+ LCD_1IN8_SendData_8Bit(0xA2);
+ LCD_1IN8_SendData_8Bit(0x02);
+ LCD_1IN8_SendData_8Bit(0x84);
+ LCD_1IN8_SendCommand(0xC1);
+ LCD_1IN8_SendData_8Bit(0xC5);
+
+ LCD_1IN8_SendCommand(0xC2);
+ LCD_1IN8_SendData_8Bit(0x0A);
+ LCD_1IN8_SendData_8Bit(0x00);
+
+ LCD_1IN8_SendCommand(0xC3);
+ LCD_1IN8_SendData_8Bit(0x8A);
+ LCD_1IN8_SendData_8Bit(0x2A);
+ LCD_1IN8_SendCommand(0xC4);
+ LCD_1IN8_SendData_8Bit(0x8A);
+ LCD_1IN8_SendData_8Bit(0xEE);
+
+ LCD_1IN8_SendCommand(0xC5); //VCOM
+ LCD_1IN8_SendData_8Bit(0x0E);
+
+ //ST7735R Gamma Sequence
+ LCD_1IN8_SendCommand(0xe0);
+ LCD_1IN8_SendData_8Bit(0x0f);
+ LCD_1IN8_SendData_8Bit(0x1a);
+ LCD_1IN8_SendData_8Bit(0x0f);
+ LCD_1IN8_SendData_8Bit(0x18);
+ LCD_1IN8_SendData_8Bit(0x2f);
+ LCD_1IN8_SendData_8Bit(0x28);
+ LCD_1IN8_SendData_8Bit(0x20);
+ LCD_1IN8_SendData_8Bit(0x22);
+ LCD_1IN8_SendData_8Bit(0x1f);
+ LCD_1IN8_SendData_8Bit(0x1b);
+ LCD_1IN8_SendData_8Bit(0x23);
+ LCD_1IN8_SendData_8Bit(0x37);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(0x07);
+ LCD_1IN8_SendData_8Bit(0x02);
+ LCD_1IN8_SendData_8Bit(0x10);
+
+ LCD_1IN8_SendCommand(0xe1);
+ LCD_1IN8_SendData_8Bit(0x0f);
+ LCD_1IN8_SendData_8Bit(0x1b);
+ LCD_1IN8_SendData_8Bit(0x0f);
+ LCD_1IN8_SendData_8Bit(0x17);
+ LCD_1IN8_SendData_8Bit(0x33);
+ LCD_1IN8_SendData_8Bit(0x2c);
+ LCD_1IN8_SendData_8Bit(0x29);
+ LCD_1IN8_SendData_8Bit(0x2e);
+ LCD_1IN8_SendData_8Bit(0x30);
+ LCD_1IN8_SendData_8Bit(0x30);
+ LCD_1IN8_SendData_8Bit(0x39);
+ LCD_1IN8_SendData_8Bit(0x3f);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(0x07);
+ LCD_1IN8_SendData_8Bit(0x03);
+ LCD_1IN8_SendData_8Bit(0x10);
+
+ LCD_1IN8_SendCommand(0xF0); //Enable test command
+ LCD_1IN8_SendData_8Bit(0x01);
+
+ LCD_1IN8_SendCommand(0xF6); //Disable ram power save mode
+ LCD_1IN8_SendData_8Bit(0x00);
+
+ //sleep out
+ LCD_1IN8_SendCommand(0x11);
+ DEV_Delay_ms(120);
+
+ //Turn on the LCD display
+ LCD_1IN8_SendCommand(0x29);
+ DEV_Delay_ms(120);
+
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_1IN8_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_1IN8.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_1IN8.HEIGHT = LCD_1IN8_WIDTH;
+ LCD_1IN8.WIDTH = LCD_1IN8_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_1IN8.HEIGHT = LCD_1IN8_HEIGHT;
+ LCD_1IN8.WIDTH = LCD_1IN8_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_1IN8_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_1IN8_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_1IN8_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_1IN8_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_1IN8_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_1IN8_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_1IN8_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ //set the X coordinates
+ LCD_1IN8_SendCommand(0x2A);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(Xstart+1);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(Xend);
+
+ //set the Y coordinates
+ LCD_1IN8_SendCommand(0x2B);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(Ystart+1);
+ LCD_1IN8_SendData_8Bit(0x00);
+ LCD_1IN8_SendData_8Bit(Yend);
+
+ LCD_1IN8_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_1IN8_Clear(UWORD Color)
+{
+ UWORD j,i;
+ UWORD Image[LCD_1IN8.WIDTH*LCD_1IN8.HEIGHT];
+
+ Color = ((Color<<8)&0xff00)|(Color>>8);
+
+ for (j = 0; j < LCD_1IN8.HEIGHT*LCD_1IN8.WIDTH; j++) {
+ Image[j] = Color;
+ }
+
+ LCD_1IN8_SetWindows(0, 0, LCD_1IN8.WIDTH, LCD_1IN8.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ // printf("HEIGHT %d, WIDTH %d\r\n",LCD_1IN8.HEIGHT,LCD_1IN8.WIDTH);
+ for(j = 0; j < LCD_1IN8.HEIGHT; j++){
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN8.WIDTH], LCD_1IN8.WIDTH*2);
+
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_1IN8_Display(UWORD *Image)
+{
+ UWORD j;
+ LCD_1IN8_SetWindows(0, 0, LCD_1IN8.WIDTH, LCD_1IN8.HEIGHT);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_1IN8.HEIGHT; j++) {
+ DEV_SPI_Write_nByte((uint8_t *)&Image[j*LCD_1IN8.WIDTH], LCD_1IN8.WIDTH*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_1IN8_SendCommand(0x29);
+}
+
+void LCD_1IN8_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_1IN8_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_1IN8.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_1IN8_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_1IN8_SetWindows(X,Y,X,Y);
+ LCD_1IN8_SendData_16Bit(Color);
+}
+
+void Handler_1IN8_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_1in8.h b/bsp/pico/bsp/LCD/LCD_1in8.h
new file mode 100644
index 000000000..db7037a4a
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_1in8.h
@@ -0,0 +1,52 @@
+/*****************************************************************************
+* | File : LCD_1in54.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#ifndef __LCD_1IN8_H
+#define __LCD_1IN8_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_1IN8_HEIGHT 160
+#define LCD_1IN8_WIDTH 130
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_1IN8_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_1IN8_ATTRIBUTES;
+extern LCD_1IN8_ATTRIBUTES LCD_1IN8;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_1IN8_Init(UBYTE Scan_dir);
+void LCD_1IN8_Clear(UWORD Color);
+void LCD_1IN8_Display(UWORD *Image);
+void LCD_1IN8_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_1IN8_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_1IN8_LCD(int signo);
+#endif
diff --git a/bsp/pico/bsp/LCD/LCD_2in.c b/bsp/pico/bsp/LCD/LCD_2in.c
new file mode 100644
index 000000000..667c1eaac
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_2in.c
@@ -0,0 +1,311 @@
+/*****************************************************************************
+* | File : LCD_1in14.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#include "LCD_2in.h"
+#include "DEV_Config.h"
+
+#include //itoa()
+#include
+
+LCD_2IN_ATTRIBUTES LCD_2IN;
+
+
+/******************************************************************************
+function : Hardware reset
+parameter:
+******************************************************************************/
+static void LCD_2IN_Reset(void)
+{
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 0);
+ DEV_Delay_ms(100);
+ DEV_Digital_Write(EPD_RST_PIN, 1);
+ DEV_Delay_ms(100);
+}
+
+/******************************************************************************
+function : send command
+parameter:
+ Reg : Command register
+******************************************************************************/
+static void LCD_2IN_SendCommand(UBYTE Reg)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 0);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Reg);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_2IN_SendData_8Bit(UBYTE Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte(Data);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : send data
+parameter:
+ Data : Write data
+******************************************************************************/
+static void LCD_2IN_SendData_16Bit(UWORD Data)
+{
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ DEV_SPI_WriteByte((Data >> 8) & 0xFF);
+ DEV_SPI_WriteByte(Data & 0xFF);
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Initialize the lcd register
+parameter:
+******************************************************************************/
+static void LCD_2IN_InitReg(void)
+{
+ LCD_2IN_SendCommand(0x36);
+ LCD_2IN_SendData_8Bit(0x00);
+
+ LCD_2IN_SendCommand(0x3A);
+ LCD_2IN_SendData_8Bit(0x05);
+
+ LCD_2IN_SendCommand(0x21);
+
+ LCD_2IN_SendCommand(0x2A);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0x01);
+ LCD_2IN_SendData_8Bit(0x3F);
+
+ LCD_2IN_SendCommand(0x2B);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0xEF);
+
+ LCD_2IN_SendCommand(0xB2);
+ LCD_2IN_SendData_8Bit(0x0C);
+ LCD_2IN_SendData_8Bit(0x0C);
+ LCD_2IN_SendData_8Bit(0x00);
+ LCD_2IN_SendData_8Bit(0x33);
+ LCD_2IN_SendData_8Bit(0x33);
+
+ LCD_2IN_SendCommand(0xB7);
+ LCD_2IN_SendData_8Bit(0x35);
+
+ LCD_2IN_SendCommand(0xBB);
+ LCD_2IN_SendData_8Bit(0x1F);
+
+ LCD_2IN_SendCommand(0xC0);
+ LCD_2IN_SendData_8Bit(0x2C);
+
+ LCD_2IN_SendCommand(0xC2);
+ LCD_2IN_SendData_8Bit(0x01);
+
+ LCD_2IN_SendCommand(0xC3);
+ LCD_2IN_SendData_8Bit(0x12);
+
+ LCD_2IN_SendCommand(0xC4);
+ LCD_2IN_SendData_8Bit(0x20);
+
+ LCD_2IN_SendCommand(0xC6);
+ LCD_2IN_SendData_8Bit(0x0F);
+
+ LCD_2IN_SendCommand(0xD0);
+ LCD_2IN_SendData_8Bit(0xA4);
+ LCD_2IN_SendData_8Bit(0xA1);
+
+ LCD_2IN_SendCommand(0xE0);
+ LCD_2IN_SendData_8Bit(0xD0);
+ LCD_2IN_SendData_8Bit(0x08);
+ LCD_2IN_SendData_8Bit(0x11);
+ LCD_2IN_SendData_8Bit(0x08);
+ LCD_2IN_SendData_8Bit(0x0C);
+ LCD_2IN_SendData_8Bit(0x15);
+ LCD_2IN_SendData_8Bit(0x39);
+ LCD_2IN_SendData_8Bit(0x33);
+ LCD_2IN_SendData_8Bit(0x50);
+ LCD_2IN_SendData_8Bit(0x36);
+ LCD_2IN_SendData_8Bit(0x13);
+ LCD_2IN_SendData_8Bit(0x14);
+ LCD_2IN_SendData_8Bit(0x29);
+ LCD_2IN_SendData_8Bit(0x2D);
+
+ LCD_2IN_SendCommand(0xE1);
+ LCD_2IN_SendData_8Bit(0xD0);
+ LCD_2IN_SendData_8Bit(0x08);
+ LCD_2IN_SendData_8Bit(0x10);
+ LCD_2IN_SendData_8Bit(0x08);
+ LCD_2IN_SendData_8Bit(0x06);
+ LCD_2IN_SendData_8Bit(0x06);
+ LCD_2IN_SendData_8Bit(0x39);
+ LCD_2IN_SendData_8Bit(0x44);
+ LCD_2IN_SendData_8Bit(0x51);
+ LCD_2IN_SendData_8Bit(0x0B);
+ LCD_2IN_SendData_8Bit(0x16);
+ LCD_2IN_SendData_8Bit(0x14);
+ LCD_2IN_SendData_8Bit(0x2F);
+ LCD_2IN_SendData_8Bit(0x31);
+ LCD_2IN_SendCommand(0x21);
+
+ LCD_2IN_SendCommand(0x11);
+
+ LCD_2IN_SendCommand(0x29);
+}
+
+/********************************************************************************
+function: Set the resolution and scanning method of the screen
+parameter:
+ Scan_dir: Scan direction
+********************************************************************************/
+static void LCD_2IN_SetAttributes(UBYTE Scan_dir)
+{
+ //Get the screen scan direction
+ LCD_2IN.SCAN_DIR = Scan_dir;
+ UBYTE MemoryAccessReg = 0x00;
+
+ //Get GRAM and LCD width and height
+ if(Scan_dir == HORIZONTAL) {
+ LCD_2IN.HEIGHT = LCD_2IN_WIDTH;
+ LCD_2IN.WIDTH = LCD_2IN_HEIGHT;
+ MemoryAccessReg = 0X70;
+ } else {
+ LCD_2IN.HEIGHT = LCD_2IN_HEIGHT;
+ LCD_2IN.WIDTH = LCD_2IN_WIDTH;
+ MemoryAccessReg = 0X00;
+ }
+
+ // Set the read / write scan direction of the frame memory
+ LCD_2IN_SendCommand(0x36); //MX, MY, RGB mode
+ LCD_2IN_SendData_8Bit(MemoryAccessReg); //0x08 set RGB
+}
+
+/********************************************************************************
+function : Initialize the lcd
+parameter:
+********************************************************************************/
+void LCD_2IN_Init(UBYTE Scan_dir)
+{
+ DEV_SET_PWM(90);
+ //Hardware reset
+ LCD_2IN_Reset();
+
+ //Set the resolution and scanning method of the screen
+ LCD_2IN_SetAttributes(Scan_dir);
+
+ //Set the initialization register
+ LCD_2IN_InitReg();
+}
+
+/********************************************************************************
+function: Sets the start position and size of the display area
+parameter:
+ Xstart : X direction Start coordinates
+ Ystart : Y direction Start coordinates
+ Xend : X direction end coordinates
+ Yend : Y direction end coordinates
+********************************************************************************/
+void LCD_2IN_SetWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend)
+{
+ //set the X coordinates
+ LCD_2IN_SendCommand(0x2A);
+ LCD_2IN_SendData_8Bit(Xstart >>8);
+ LCD_2IN_SendData_8Bit(Xstart & 0xff);
+ LCD_2IN_SendData_8Bit((Xend - 1) >> 8);
+ LCD_2IN_SendData_8Bit((Xend-1) & 0xFF);
+
+ //set the Y coordinates
+ LCD_2IN_SendCommand(0x2B);
+ LCD_2IN_SendData_8Bit(Ystart >>8);
+ LCD_2IN_SendData_8Bit(Ystart & 0xff);
+ LCD_2IN_SendData_8Bit((Yend - 1) >> 8);
+ LCD_2IN_SendData_8Bit((Yend - 1) & 0xff);
+
+ LCD_2IN_SendCommand(0X2C);
+ // printf("%d %d\r\n",x,y);
+}
+
+/******************************************************************************
+function : Clear screen
+parameter:
+******************************************************************************/
+void LCD_2IN_Clear(UWORD Color)
+{
+ UWORD i;
+ UWORD image[LCD_2IN_HEIGHT];
+ for(i=0;i>8 | (Color&0xff)<<8;
+ }
+ UBYTE *p = (UBYTE *)(image);
+ LCD_2IN_SetWindows(0, 0, LCD_2IN_HEIGHT,LCD_2IN_WIDTH);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for(i = 0; i < LCD_2IN_WIDTH; i++){
+ DEV_SPI_Write_nByte(p,LCD_2IN_HEIGHT*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+/******************************************************************************
+function : Sends the image buffer in RAM to displays
+parameter:
+******************************************************************************/
+void LCD_2IN_Display(UBYTE *Image)
+{
+ UWORD j;
+ LCD_2IN_SetWindows(0, 0,LCD_2IN.WIDTH,LCD_2IN.HEIGHT );
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = 0; j < LCD_2IN.WIDTH; j++) {
+ DEV_SPI_Write_nByte((UBYTE *)Image+LCD_2IN.HEIGHT*2*j,LCD_2IN.HEIGHT*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+ LCD_2IN_SendCommand(0x29);
+}
+
+void LCD_2IN_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image)
+{
+ // display
+ UDOUBLE Addr = 0;
+
+ UWORD j;
+ LCD_2IN_SetWindows(Xstart, Ystart, Xend , Yend);
+ DEV_Digital_Write(EPD_DC_PIN, 1);
+ DEV_Digital_Write(EPD_CS_PIN, 0);
+ for (j = Ystart; j < Yend - 1; j++) {
+ Addr = Xstart + j * LCD_2IN.WIDTH ;
+ DEV_SPI_Write_nByte((uint8_t *)&Image[Addr], (Xend-Xstart)*2);
+ }
+ DEV_Digital_Write(EPD_CS_PIN, 1);
+}
+
+void LCD_2IN_DisplayPoint(UWORD X, UWORD Y, UWORD Color)
+{
+ LCD_2IN_SetWindows(X,Y,X,Y);
+ LCD_2IN_SendData_16Bit(Color);
+}
+
+void Handler_2IN_LCD(int signo)
+{
+ //System Exit
+ printf("\r\nHandler:Program stop\r\n");
+ DEV_Module_Exit();
+ exit(0);
+}
diff --git a/bsp/pico/bsp/LCD/LCD_2in.h b/bsp/pico/bsp/LCD/LCD_2in.h
new file mode 100644
index 000000000..239402cec
--- /dev/null
+++ b/bsp/pico/bsp/LCD/LCD_2in.h
@@ -0,0 +1,52 @@
+/*****************************************************************************
+* | File : LCD_1in54.c
+* | Author : Waveshare team
+* | Function : Hardware underlying interface
+* | Info :
+* Used to shield the underlying layers of each master
+* and enhance portability
+*----------------
+* | This version: V1.0
+* | Date : 2020-05-20
+* | Info : Basic version
+*
+******************************************************************************/
+#ifndef __LCD_2IN_H
+#define __LCD_2IN_H
+
+#include "DEV_Config.h"
+#include
+
+#include //itoa()
+#include
+
+
+#define LCD_2IN_HEIGHT 240
+#define LCD_2IN_WIDTH 320
+
+
+#define HORIZONTAL 0
+#define VERTICAL 1
+
+#define LCD_2IN_SetBacklight(Value) ;
+
+
+typedef struct{
+ UWORD WIDTH;
+ UWORD HEIGHT;
+ UBYTE SCAN_DIR;
+}LCD_2IN_ATTRIBUTES;
+extern LCD_2IN_ATTRIBUTES LCD_2IN;
+
+/********************************************************************************
+function:
+ Macro definition variable name
+********************************************************************************/
+void LCD_2IN_Init(UBYTE Scan_dir);
+void LCD_2IN_Clear(UWORD Color);
+void LCD_2IN_Display(UBYTE *Image);
+void LCD_2IN_DisplayWindows(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD *Image);
+void LCD_2IN_DisplayPoint(UWORD X, UWORD Y, UWORD Color);
+
+void Handler_2IN_LCD(int signo);
+#endif
diff --git a/bsp/pico/documents/Pictures/Debug_printf_Viewer.png b/bsp/pico/documents/Pictures/Debug_printf_Viewer.png
new file mode 100644
index 000000000..d6557b44d
Binary files /dev/null and b/bsp/pico/documents/Pictures/Debug_printf_Viewer.png differ
diff --git a/bsp/pico/documents/Pictures/EnableThePikaBeforeBuild.png b/bsp/pico/documents/Pictures/EnableThePikaBeforeBuild.png
new file mode 100644
index 000000000..70ad07aa8
Binary files /dev/null and b/bsp/pico/documents/Pictures/EnableThePikaBeforeBuild.png differ
diff --git a/bsp/pico/documents/Pictures/Reset_Pico.png b/bsp/pico/documents/Pictures/Reset_Pico.png
new file mode 100644
index 000000000..c3016d43e
Binary files /dev/null and b/bsp/pico/documents/Pictures/Reset_Pico.png differ
diff --git a/bsp/pico/documents/Pictures/Select_Coremark_In_RTE.png b/bsp/pico/documents/Pictures/Select_Coremark_In_RTE.png
new file mode 100644
index 000000000..6ea02202e
Binary files /dev/null and b/bsp/pico/documents/Pictures/Select_Coremark_In_RTE.png differ
diff --git a/bsp/pico/documents/Pictures/core_portme.png b/bsp/pico/documents/Pictures/core_portme.png
new file mode 100644
index 000000000..1ca8492ac
Binary files /dev/null and b/bsp/pico/documents/Pictures/core_portme.png differ
diff --git a/bsp/pico/documents/Pictures/coremark_result.png b/bsp/pico/documents/Pictures/coremark_result.png
new file mode 100644
index 000000000..1fe831ab2
Binary files /dev/null and b/bsp/pico/documents/Pictures/coremark_result.png differ
diff --git a/bsp/pico/documents/Pictures/enable_lcd_1in3 b/bsp/pico/documents/Pictures/enable_lcd_1in3
new file mode 100644
index 000000000..dd8a047f8
Binary files /dev/null and b/bsp/pico/documents/Pictures/enable_lcd_1in3 differ
diff --git a/bsp/pico/main.c b/bsp/pico/main.c
index dd76da54e..4ad3eca65 100644
--- a/bsp/pico/main.c
+++ b/bsp/pico/main.c
@@ -17,24 +17,45 @@
/*============================ INCLUDES ======================================*/
#include "pico/stdlib.h"
#include "perf_counter.h"
-#include "pikaScript.h"
-#include "PikaParser.h"
-#include "PikaVM.h"
-#include "dataStrs.h"
+
+#if defined(__PICO_USE_LCD_1IN3__) && __PICO_USE_LCD_1IN3__
+#include "DEV_Config.h"
+#include "LCD_1In3.h"
+#include "GLCD_Config.h"
+#endif
+
#include
#include "RTE_Components.h"
-#if defined(RTE_Compiler_EventRecorder) && defined(USE_EVR_FOR_STDOUR)
+#if defined(RTE_Compiler_EventRecorder) && defined(RTE_Compiler_IO_STDOUT_EVR)
# include
#endif
+#if defined(RTE_Script_PikaScript) || defined(USING_PIKAPYTHON)
+# include "pikaScript.h"
+#endif
+
+#if defined(__RTE_ACCELERATION_ARM_2D__) || defined(RTE_Acceleration_Arm_2D)
+# include "arm_2d.h"
+# include "arm_2d_helper.h"
+# include "arm_2d_disp_adapters.h"
+# include "arm_2d_scenes.h"
+#endif
+
+#if defined(__RTE_ACCELERATION_ARM_2D_EXTRA_BENCHMARK_WATCH_PANEL__) \
+ || defined(__RTE_ACCELERATION_ARM_2D_EXTRA_BENCHMARK_GENERIC__)
+# include "arm_2d_benchmark.h"
+#endif
/*============================ MACROS ========================================*/
#define TOP (0x1FFF)
/*============================ MACROFIED FUNCTIONS ===========================*/
-#define ABS(__N) ((__N) < 0 ? -(__N) : (__N))
-#define _BV(__N) ((uint32_t)1<<(__N))
-
+#ifndef ABS
+# define ABS(__N) ((__N) < 0 ? -(__N) : (__N))
+#endif
+#ifndef _BV
+# define _BV(__N) ((uint32_t)1<<(__N))
+#endif
/*============================ TYPES =========================================*/
@@ -94,46 +115,77 @@ static void system_init(void)
*/
init_cycle_counter(false);
-#if defined(RTE_Compiler_EventRecorder) && defined(USE_EVR_FOR_STDOUR)
+#if defined(RTE_Compiler_EventRecorder) && defined(RTE_Compiler_IO_STDOUT_EVR)
EventRecorderInitialize(0, 1);
#endif
-
+ stdio_init_all();
+
gpio_init(PICO_DEFAULT_LED_PIN);
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
+
+#if defined(__PICO_USE_LCD_1IN3__) && __PICO_USE_LCD_1IN3__
+ DEV_Delay_ms(100);
+
+ if(DEV_Module_Init()!=0){
+ //assert(0);
+ }
+
+ DEV_SET_PWM(50);
+ /* LCD Init */
+
+ LCD_1IN3_Init(HORIZONTAL);
+ LCD_1IN3_Clear(GLCD_COLOR_BLUE);
+
+ for (int n = 0; n < KEY_NUM; n++) {
+ dev_key_init(n);
+ }
+#endif
+
}
-static void prime_number_100_c(void) {
- volatile int num = 0;
- /* run */
- for (volatile int i = 2; i < 100; i++) {
- volatile int is_prime = 1;
- for (volatile int j = 2; j < i; j++) {
- if (i % j == 0) {
- is_prime = 0;
- break;
- }
- }
- if (is_prime) {
- num = num + i;
- }
- }
- if ( num != 1060){
- printf("[error] in benchmark prime_number_100_c \r\n");
- }
+
+int stdin_getchar(void);
+char pika_platform_getchar(void) {
+ return stdin_getchar();
}
+
int main(void)
{
system_init();
- printf("Hello Pico-Template\r\n");
- uint32_t n = 0;
- /* run unit test */
- obj_deinit(pikaScriptInit());
+ __cycleof__("printf") {
+ printf("Hello Pico-Template\r\n");
+ }
+
+#if defined(RTE_Script_PikaScript) || defined(USING_PIKAPYTHON)
+ pikaScriptInit();
+#endif
+
+#if defined( __PERF_COUNTER_COREMARK__ ) && __PERF_COUNTER_COREMARK__
+ printf("\r\nRun Coremark 1.0...\r\n");
+ coremark_main();
+#endif
+
+#if defined(__RTE_ACCELERATION_ARM_2D_EXTRA_BENCHMARK_WATCH_PANEL__) \
+ || defined(__RTE_ACCELERATION_ARM_2D_EXTRA_BENCHMARK_GENERIC__)
+ arm_2d_run_benchmark();
+#endif
+
+#if defined(__RTE_ACCELERATION_ARM_2D__) || defined(RTE_Acceleration_Arm_2D)
+ arm_2d_init();
+ disp_adapter0_init();
+
+ //arm_2d_scene_player_switch_to_next_scene(&DISP0_ADAPTER);
+#endif
while (true) {
breath_led();
+
+#if defined(__RTE_ACCELERATION_ARM_2D__) || defined(RTE_Acceleration_Arm_2D)
+ disp_adapter0_task();
+#endif
//gpio_put(PICO_DEFAULT_LED_PIN, 1);
//sleep_ms(500);
//gpio_put(PICO_DEFAULT_LED_PIN, 0);
diff --git a/bsp/pico/pico-sdk/.github/pull_request_template.md b/bsp/pico/pico-sdk/.github/pull_request_template.md
deleted file mode 100644
index e3617774b..000000000
--- a/bsp/pico/pico-sdk/.github/pull_request_template.md
+++ /dev/null
@@ -1,4 +0,0 @@
-_Instructions: (please delete)_
- - _please do not submit against `master`, use `develop` instead_
- - _please make sure there is an associated issue for your PR, and reference it via "Fixes #num" in the description_
- - _please enter a detailed description_
diff --git a/bsp/pico/pico-sdk/.github/workflows/cmake.yml b/bsp/pico/pico-sdk/.github/workflows/cmake.yml
deleted file mode 100644
index a6521e7ca..000000000
--- a/bsp/pico/pico-sdk/.github/workflows/cmake.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: CMake
-on: [push, pull_request]
-
-env:
- # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
- BUILD_TYPE: Release
-
-jobs:
- build:
- if: github.repository_owner == 'raspberrypi'
- runs-on: [self-hosted, Linux, X64]
-
- steps:
- - name: Clean workspace
- run: |
- echo "Cleaning up previous run"
- rm -rf "${{ github.workspace }}"
- mkdir -p "${{ github.workspace }}"
-
- - name: Checkout repo
- uses: actions/checkout@v2
-
- - name: Checkout submodules
- run: git submodule update --init
-
- - name: Create Build Environment
- # Some projects don't allow in-source building, so create a separate build directory
- # We'll use this as our working directory for all subsequent commands
- run: cmake -E make_directory ${{github.workspace}}/build
-
- - name: Configure CMake
- # Use a bash shell so we can use the same syntax for environment variable
- # access regardless of the host operating system
- shell: bash
- working-directory: ${{github.workspace}}/build
- # Note the current convention is to use the -S and -B options here to specify source
- # and build directories, but this is only available with CMake 3.13 and higher.
- # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
- run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
-
- - name: Get core count
- id: core_count
- run : cat /proc/cpuinfo | grep processor | wc -l
-
- - name: Build
- working-directory: ${{github.workspace}}/build
- shell: bash
- # Execute the build. You can specify a specific target with "--target "
- run: cmake --build . --config $BUILD_TYPE --parallel ${{steps.core_count.outputs.output}}
diff --git a/bsp/pico/pico-sdk/.gitmodules b/bsp/pico/pico-sdk/.gitmodules
deleted file mode 100644
index 4846c9c02..000000000
--- a/bsp/pico/pico-sdk/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "tinyusb"]
- path = lib/tinyusb
- url = https://github.com/hathach/tinyusb.git
diff --git a/bsp/pico/pico-sdk/README.md b/bsp/pico/pico-sdk/README.md
index db6cef68e..d039a3c72 100644
--- a/bsp/pico/pico-sdk/README.md
+++ b/bsp/pico/pico-sdk/README.md
@@ -22,6 +22,9 @@ See [Getting Started with the Raspberry Pi Pico](https://rptl.io/pico-get-starte
hardware, IDE/environment and for how to build and debug software for the Raspberry Pi Pico
and other RP2040-based devices.
+See [Connecting to the Internet with Raspberry Pi Pico W](https://rptl.io/picow-connect) to learn more about writing
+applications for your Raspberry Pi Pico W that connect to the internet.
+
See [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk) to learn more about programming using the
SDK, to explore more advanced features, and for complete PDF-based API documentation.
@@ -31,6 +34,12 @@ See [Online Raspberry Pi Pico SDK API docs](https://rptl.io/pico-doxygen) for HT
See [pico-examples](https://github.com/raspberrypi/pico-examples) for example code you can build.
+# Getting the latest SDK code
+
+The [master](https://github.com/raspberrypi/pico-sdk/tree/master/) branch of `pico-sdk` on GitHub contains the
+_latest stable release_ of the SDK. If you need or want to test upcoming features, you can try the
+[develop](https://github.com/raspberrypi/pico-sdk/tree/develop/) branch instead.
+
# Quick-start your own project
These instructions are extremely terse, and Linux-based only. For detailed steps,
@@ -110,6 +119,24 @@ instructions for other platforms, and just in general, we recommend you see [Ras
```
+ * Or by cloning the SDK locally, but without copying `pico_sdk_import.cmake`:
+ 1. `git clone` this Raspberry Pi Pico SDK repository
+ 2. Setup a `CMakeLists.txt` like:
+
+ ```cmake
+ cmake_minimum_required(VERSION 3.13)
+
+ # initialize the SDK directly
+ include(/path/to/pico-sdk/pico_sdk_init.cmake)
+
+ project(my_project)
+
+ # initialize the Raspberry Pi Pico SDK
+ pico_sdk_init()
+
+ # rest of your project
+
+ ```
1. Write your code (see [pico-examples](https://github.com/raspberrypi/pico-examples) or the [Raspberry Pi Pico C/C++ SDK](https://rptl.io/pico-c-sdk) documentation for more information)
About the simplest you can do is a single source file (e.g. hello_world.c)
@@ -141,14 +168,23 @@ instructions for other platforms, and just in general, we recommend you see [Ras
Note this example uses the default UART for _stdout_;
if you want to use the default USB see the [hello-usb](https://github.com/raspberrypi/pico-examples/tree/master/hello_world/usb) example.
-
1. Setup a CMake build directory.
For example, if not using an IDE:
```
$ mkdir build
$ cd build
$ cmake ..
- ```
+ ```
+
+ When building for a board other than the Raspberry Pi Pico, you should pass `-DPICO_BOARD=board_name` to the `cmake` command above, e.g. `cmake -DPICO_BOARD=pico_w ..`
+ to configure the SDK and build options accordingly for that particular board.
+
+ Doing so sets up various compiler defines (e.g. default pin numbers for UART and other hardware) and in certain
+ cases also enables the use of additional libraries (e.g. wireless support when building for `PICO_BOARD=pico_w`) which cannot
+ be built without a board which provides the requisite functionality.
+
+ For a list of boards defined in the SDK itself, look in [this directory](src/boards/include/boards) which has a
+ header for each named board.
1. Make your target from the build directory you created.
```sh
diff --git a/bsp/pico/pico-sdk/cmake/pico_pre_load_platform.cmake b/bsp/pico/pico-sdk/cmake/pico_pre_load_platform.cmake
index 51ee39a00..479eedf3b 100644
--- a/bsp/pico/pico-sdk/cmake/pico_pre_load_platform.cmake
+++ b/bsp/pico/pico-sdk/cmake/pico_pre_load_platform.cmake
@@ -13,7 +13,7 @@ endif ()
set(PICO_PLATFORM ${PICO_PLATFORM} CACHE STRING "PICO Build platform (e.g. rp2040, host)")
-# PICO_CMAKE_CONFIG: PICO_CMAKE_RELOAD_PLATFORM_FILE, custom CMake file to use to set up the platform environment, default=none, group=build
+# PICO_CMAKE_CONFIG: PICO_CMAKE_PRELOAD_PLATFORM_FILE, custom CMake file to use to set up the platform environment, default=none, group=build
set(PICO_CMAKE_PRELOAD_PLATFORM_FILE "" CACHE INTERNAL "")
set(PICO_CMAKE_PRELOAD_PLATFORM_DIR "${CMAKE_CURRENT_LIST_DIR}/preload/platforms" CACHE INTERNAL "")
diff --git a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake
index 1d2c4ebd8..d06d77eae 100644
--- a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake
+++ b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang.cmake
@@ -27,10 +27,6 @@ set(CMAKE_INCLUDE_FLAG_ASM "-I")
set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
-# Disable compiler checks.
-set(CMAKE_C_COMPILER_FORCED TRUE)
-set(CMAKE_CXX_COMPILER_FORCED TRUE)
-
# Add target system root to cmake find path.
get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
@@ -43,11 +39,7 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
include_directories(/usr/include/newlib)
-# todo move to platform/Generix-xxx
-set(ARM_CLANG_COMMON_FLAGS " --target=arm-none-eabi -mcpu=cortex-m0plus -mthumb")
-set(CMAKE_C_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-set(CMAKE_CXX_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-set(CMAKE_ASM_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-set(CMAKE_C_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
-set(CMAKE_CXX_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
+option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0)
+set(ARM_TOOLCHAIN_COMMON_FLAGS " --target=arm-none-eabi -mcpu=cortex-m0plus -mthumb")
+include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake)
diff --git a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake
index 50fabbc35..b943f1bfb 100644
--- a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake
+++ b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_clang_arm.cmake
@@ -27,10 +27,6 @@ set(CMAKE_INCLUDE_FLAG_ASM "-I")
set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
-# Disable compiler checks.
-set(CMAKE_C_COMPILER_FORCED TRUE)
-set(CMAKE_CXX_COMPILER_FORCED TRUE)
-
# Add target system root to cmake find path.
get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
@@ -41,12 +37,7 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-# todo move to platform/Generix-xxx
-set(ARM_CLANG_COMMON_FLAGS " --cpu=Cortex-M0plus")
-string(APPEND CMAKE_C_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-string(APPEND CMAKE_CXX_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-string(APPEND CMAKE_ASM_FLAGS_INIT "${ARM_CLANG_COMMON_FLAGS}")
-string(APPEND CMAKE_C_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
-string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT "${ARM_CLANG_COMMON_FLAGS} -Og")
-
+option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0)
+set(ARM_TOOLCHAIN_COMMON_FLAGS " --cpu=Cortex-M0plus")
+include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake)
diff --git a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake
index d8c56fca1..ad5d33f38 100644
--- a/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake
+++ b/bsp/pico/pico-sdk/cmake/preload/toolchains/pico_arm_gcc.cmake
@@ -35,10 +35,6 @@ set(CMAKE_INCLUDE_FLAG_ASM "-I")
set(CMAKE_OBJCOPY ${PICO_OBJCOPY} CACHE FILEPATH "")
set(CMAKE_OBJDUMP ${PICO_OBJDUMP} CACHE FILEPATH "")
-# Disable compiler checks.
-set(CMAKE_C_COMPILER_FORCED TRUE)
-set(CMAKE_CXX_COMPILER_FORCED TRUE)
-
# Add target system root to cmake find path.
get_filename_component(PICO_COMPILER_DIR "${PICO_COMPILER_CC}" DIRECTORY)
get_filename_component(CMAKE_FIND_ROOT_PATH "${PICO_COMPILER_DIR}" DIRECTORY)
@@ -51,17 +47,6 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
option(PICO_DEOPTIMIZED_DEBUG "Build debug builds with -O0" 0)
-# todo move to platform/Generix-xxx
-
# on ARM -mcpu should not be mixed with -march
-set(ARM_GCC_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb")
-foreach(LANG IN ITEMS C CXX ASM)
- set(CMAKE_${LANG}_FLAGS_INIT "${ARM_GCC_COMMON_FLAGS}")
- if (PICO_DEOPTIMIZED_DEBUG)
- set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0")
- else()
- set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og")
- endif()
- set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none")
-endforeach()
-
+set(ARM_TOOLCHAIN_COMMON_FLAGS " -mcpu=cortex-m0plus -mthumb")
+include(${CMAKE_CURRENT_LIST_DIR}/set_flags.cmake)
diff --git a/bsp/pico/pico-sdk/cmake/preload/toolchains/set_flags.cmake b/bsp/pico/pico-sdk/cmake/preload/toolchains/set_flags.cmake
new file mode 100644
index 000000000..bd6e24070
--- /dev/null
+++ b/bsp/pico/pico-sdk/cmake/preload/toolchains/set_flags.cmake
@@ -0,0 +1,19 @@
+
+get_property(IS_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
+foreach(LANG IN ITEMS C CXX ASM)
+ set(CMAKE_${LANG}_FLAGS_INIT "${ARM_TOOLCHAIN_COMMON_FLAGS}")
+ if (PICO_DEOPTIMIZED_DEBUG)
+ set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-O0")
+ else()
+ set(CMAKE_${LANG}_FLAGS_DEBUG_INIT "-Og")
+ endif()
+ set(CMAKE_${LANG}_LINK_FLAGS "-Wl,--build-id=none")
+
+ # try_compile is where the feature testing is done, and at that point,
+ # pico_standard_link is not ready to be linked in to provide essential
+ # functions like _exit. So pass -nostdlib so it doesn't link in an exit()
+ # function at all.
+ if(IS_IN_TRY_COMPILE)
+ set(CMAKE_${LANG}_LINK_FLAGS "${CMAKE_${LANG}_LINK_FLAGS} -nostdlib")
+ endif()
+endforeach()
diff --git a/bsp/pico/pico-sdk/docs/Doxyfile.in b/bsp/pico/pico-sdk/docs/Doxyfile.in
index cc133f88f..5dc4be72f 100644
--- a/bsp/pico/pico-sdk/docs/Doxyfile.in
+++ b/bsp/pico/pico-sdk/docs/Doxyfile.in
@@ -60,4 +60,5 @@ PREDEFINED = __not_in_flash_func(x) \
__time_critical_func(x) \
__not_in_flash(x)= \
__no_inline_not_in_flash(x)= \
- __attribute__(x)=
+ __attribute__(x)= \
+ DOXYGEN_GENERATION=
diff --git a/bsp/pico/pico-sdk/docs/DoxygenLayout.xml b/bsp/pico/pico-sdk/docs/DoxygenLayout.xml
index 6ba5dfcd6..07c1c980c 100644
--- a/bsp/pico/pico-sdk/docs/DoxygenLayout.xml
+++ b/bsp/pico/pico-sdk/docs/DoxygenLayout.xml
@@ -7,12 +7,13 @@
+
-
+
diff --git a/bsp/pico/pico-sdk/docs/header.html b/bsp/pico/pico-sdk/docs/header.html
index 32bb7eb7e..72332ff29 100644
--- a/bsp/pico/pico-sdk/docs/header.html
+++ b/bsp/pico/pico-sdk/docs/header.html
@@ -54,7 +54,7 @@