diff --git a/avr/devices/all/includes.asm b/avr/devices/all/includes.asm index 7b73db1..e2e1dc7 100644 --- a/avr/devices/all/includes.asm +++ b/avr/devices/all/includes.asm @@ -268,6 +268,14 @@ #endif + +#ifdef MODULES_GUI +.include "modules/lcd2/gui/defs.asm" +.include "modules/lcd2/gui/main.asm" +.include "modules/lcd2/gui/window.asm" +#endif + + #ifdef MODULES_FONT_8X8 .include "modules/lcd2/font/defs.asm" .include "modules/lcd2/font/font8x8.asm" diff --git a/avr/devices/all/main.asm b/avr/devices/all/main.asm index 0e5d96e..09b0a9d 100644 --- a/avr/devices/all/main.asm +++ b/avr/devices/all/main.asm @@ -179,6 +179,11 @@ onSystemTimerTick: bigcall Brightness_Every100ms #endif +#ifdef MODULES_GUI + bigcall GUI_Every100ms +#endif + + #ifdef APPS_NETWORK ldi yl, LOW(netInterfaceData) ldi yh, HIGH(netInterfaceData) @@ -196,7 +201,7 @@ onSystemTimerTick: #ifdef APPS_MA_LIGHT bigcall AppMotionLight_Every100ms #endif - + ret ; @end diff --git a/avr/devices/all/modules.asm b/avr/devices/all/modules.asm index 7a0e800..be92db5 100644 --- a/avr/devices/all/modules.asm +++ b/avr/devices/all/modules.asm @@ -193,6 +193,10 @@ initModules: bigcall ILI9341_Init #endif +#ifdef MODULES_GUI + bigcall GUI_Init +#endif + #ifdef MODULES_BRIGHTNESS bigcall Brightness_Init #endif diff --git a/avr/devices/c02/boot/boot.asm b/avr/devices/c02/boot/boot.asm index 5a77152..5704672 100644 --- a/avr/devices/c02/boot/boot.asm +++ b/avr/devices/c02/boot/boot.asm @@ -137,8 +137,7 @@ main: .include "modules/flash/defs.asm" .include "modules/flash/eeprom.asm" .include "modules/flash/io.asm" -.include "modules/flash/io_attn.asm" -.include "modules/flash/io_bitbang.asm" +.include "modules/flash/io_com2w.asm" .include "modules/flash/flash1pmega.asm" .include "modules/flash/flashxp.asm" .include "modules/flash/flashprocess.asm" diff --git a/avr/devices/c02/defs.asm b/avr/devices/c02/defs.asm index 0868133..4095865 100644 --- a/avr/devices/c02/defs.asm +++ b/avr/devices/c02/defs.asm @@ -72,15 +72,15 @@ .equ COM_DATA_OUTPUT = PORTD .equ COM_DATA_PIN = PORTD0 -.equ COM_ATTN_DDR = DDRD -.equ COM_ATTN_INPUT = PIND -.equ COM_ATTN_OUTPUT = PORTD -.equ COM_ATTN_PIN = PORTD2 +.equ COM_CLK_DDR = DDRD +.equ COM_CLK_INPUT = PIND +.equ COM_CLK_OUTPUT = PORTD +.equ COM_CLK_PIN = PORTD2 -.equ COM_IRQ_ADDR_ATTN = EIMSK -.equ COM_IRQ_BIT_ATTN = INT0 -.equ COM_IRQ_GIFR_ATTN = INTF0 -;.equ COM_IRQ_GIMSK_ATTN = PCIE0 +.equ COM_IRQ_ADDR_CLK = EIMSK +.equ COM_IRQ_BIT_CLK = INT0 +.equ COM_IRQ_GIFR_CLK = INTF0 +;.equ COM_IRQ_GIMSK_CLK = PCIE0 @@ -127,9 +127,12 @@ ; --------------------------------------------------------------------------- ; ILI9341 module +.equ DISPLAY_WIDTH = 320 +.equ DISPLAY_HEIGHT = 240 + .equ ILI9341_DEVICENUM = 0 -.equ ILI9341_DSP_WIDTH = 320 -.equ ILI9341_DSP_HEIGHT = 240 +.equ ILI9341_DSP_WIDTH = DISPLAY_WIDTH +.equ ILI9341_DSP_HEIGHT = DISPLAY_HEIGHT .equ ILI9341_RESET_DDR = DDRB .equ ILI9341_RESET_OUTPUT = PORTB diff --git a/avr/devices/c02/main/main.asm b/avr/devices/c02/main/main.asm index 1473cc9..3668710 100644 --- a/avr/devices/c02/main/main.asm +++ b/avr/devices/c02/main/main.asm @@ -47,16 +47,17 @@ ; #define MODULES_TIMER #define MODULES_CLOCK ;#define MODULES_XRAM -#define MODULES_HEAP +;#define MODULES_HEAP #define MODULES_LED_SIMPLE #define MODULES_NETWORK ;#define MODULES_COMONUART0 ;#define MODULES_UART_HW -#define MODULES_UART_BITBANG +;#define MODULES_UART_BITBANG +#define MODULES_COM2W #define MODULES_SPI_HW #define MODULES_ILI9341 #define MODULES_FONT -#define MODULES_WIN +#define MODULES_GUI ;#define MODULES_TWI_MASTER ;#define MODULES_LCD ;#define LCD_MINIMAL_FONT @@ -112,7 +113,7 @@ ; --------------------------------------------------------------------------- ; Reset and interrupt vectors jmp BOOTLOADER_ADDR ; 1: Reset vector RESET - jmp UART_BitBang_PcintIsr ; 2: INT0 External Interrupt Request 0 + jmp com2wPcintIsr ; 2: INT0 External Interrupt Request 0 jmp irqNotSet ; 3: INT1 External Interrupt Request 1 jmp irqNotSet ; 4: INT2 External Interrupt Request 2 jmp irqNotSet ; 5: PCINT0 Pin Change Interrupt Request 0 @@ -227,222 +228,110 @@ onEveryLoop: ;.include "modules/lcd2/font/font16x26.asm" ;.include "modules/lcd2/font/font4.asm" ;.include "modules/lcd2/font/font12x16.asm" -.include "modules/lcd2/font/font5.asm" -.include "modules/lcd2/font/font12x20.asm" +.include "modules/lcd2/ili9341/font6x8.asm" +.include "modules/lcd2/ili9341/font6x8_1.asm" ;.include "common/list_t.asm" -.include "common/tree_t.asm" -.include "common/divide.asm" +;.include "common/tree_t.asm" +;.include "common/divide.asm" ; --------------------------------------------------------------------------- ; defines for network interface ;.equ netInterfaceData = netUartIface -.equ netInterfaceData = uart_bitbang_iface - - - - - -; @param %0 X -; @param %1 Y -; @param %2 W -; @param %3 H -.macro M_FILL_RECT - ldi r16, LOW(@0) ; X0 - mov r4, r16 - ldi r16, HIGH(@0) - mov r5, r16 - - ldi r16, LOW(@1) ; Y0 - mov r6, r16 - ldi r16, HIGH(@1) - mov r7, r16 - - ldi r16, LOW(@2) ; W - mov r8, r16 - ldi r16, HIGH(@2) - mov r9, r16 - - ldi r16, LOW(@3) ; H - mov r10, r16 - ldi r16, HIGH(@3) - mov r11, r16 - - bigcall ILI9341_FillRect -.endmacro +;.equ netInterfaceData = uart_bitbang_iface +.equ netInterfaceData = com2w_iface test: - ; set foreground (r3:r2) -; 0bRRRRRGGGGGGBBBBB - ldi r16, 0b11111111 - mov r3, r16 - ldi r16, 0b11111111 ; white - mov r2, r16 - M_FILL_RECT 0, 0, 319, 239 - - ; set foreground (r3:r2) - ldi r16, 0b00000000 - mov r3, r16 - ldi r16, 0b00011111 ; blue - mov r2, r16 - M_FILL_RECT 0, 0, 319, 32 - - ; set background (r1:r0) - mov r0, r2 - mov r1, r3 - - ; set foreground (r3:r2) - ldi r16, 0b11111111 - mov r3, r16 - ldi r16, 0b11111111 ; white - mov r2, r16 - -; set Xpos - ldi r16, LOW(10) - mov r4, r16 - ldi r16, HIGH(10) - mov r5, r16 - -; setYpos - ldi r16, LOW(3) - mov r6, r16 - ldi r16, HIGH(3) - mov r7, r16 - -; set font -; ldi zl, LOW(font3_16x26*2) -; ldi zh, HIGH(font3_16x26*2) - ldi zl, LOW(font5_12x20*2) - ldi zh, HIGH(font5_12x20*2) - -; set buffer - ldi xl, LOW(glyphBuffer) - ldi xh, HIGH(glyphBuffer) - -; write characters - ldi r16, 'A' - bigcall ili9341_WriteCharacterX1At - - ldi r16, 'Q' - bigcall ili9341_WriteCharacterX1At - - ldi r16, 'H' - bigcall ili9341_WriteCharacterX1At - - ldi r16, 'O' - bigcall ili9341_WriteCharacterX1At - - ldi r16, 'M' - bigcall ili9341_WriteCharacterX1At - - ldi r16, 'E' - bigcall ili9341_WriteCharacterX1At - -#if 0 - push xl - push xh - rcall listTest1 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At - - push xl - push xh - rcall listTest2 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At - - push xl - push xh - rcall listTest3 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At - - push xl - push xh - rcall listTest4 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At -#endif - +#ifdef MODULES_GUI + ldi yl, LOW(mainWindow) + ldi yh, HIGH(mainWindow) + ldi zl, LOW(mainWindowInFlash*2); + ldi zh, HIGH(mainWindowInFlash*2); + ldi r17, WIN_SIZE +testCopyWinLoop: + lpm r16, Z+ + st Y+, r16 + dec r17 + brne testCopyWinLoop + ldi yl, LOW(mainWindow) + ldi yh, HIGH(mainWindow) + bigcall Window_Clear #if 1 - push xl - push xh - rcall treeTest1 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At + ldi zl, LOW(mainWindowTitle*2) + ldi zh, HIGH(mainWindowTitle*2) + ; print title at 10/2 + ldi r16, 10 + mov r4, r16 + clr r5 + ldi r16, 2 + mov r6, r16 + clr r7 + bigcall Window_DrawTextFlash +#else + ldi zl, LOW(ili9341Font6x8_1*2) + ldi zh, HIGH(ili9341Font6x8_1*2) - push xl - push xh - rcall treeTest2 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At + ldi r16, LOW(0b0000000000000000) + mov r0, r16 + ldi r16, HIGH(0b0000000000000000) + mov r1, r16 - push xl - push xh - rcall treeTest3 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At + ldi r16, LOW(0b1111111111111111) + mov r2, r16 + ldi r16, HIGH(0b1111111111111111) + mov r3, r16 - push xl - push xh - rcall treeTest4 - pop xh - pop xl - brcc test_error - ldi r16, '!' - bigcall ili9341_WriteCharacterX1At + ldi r16, 10 + mov r4, r16 + clr r5 + ldi r16, 20 + mov r6, r16 + clr r7 + ldi r16, 'A' + bigcall Display_DrawChar + + add r4, r18 + adc r5, r19 + ldi r16, 'B' + bigcall Display_DrawChar + #endif - - ret - -test_error: - ldi r17, '0' - add r16, r17 - bigcall ili9341_WriteCharacterX1At - - ret - -helloWorld: .db "Hello World", 0 +testHandler: + ret - +#ifdef MODULES_GUI +mainWindowInFlash: + .dw testHandler ; handler + .dw 0 ; X + .dw 0 ; Y + .dw DISPLAY_WIDTH + .dw DISPLAY_HEIGHT +; 0bRRRRRGGGGGGBBBBB + .dw 0b0000000000011111 ; blue +; .dw 0b1111100000000000 ; red + .dw 0b1111111111111111 ; white + .dw (ili9341Font6x8_1*2) + +mainWindowTitle: .db "AQHOME", 0, 0 +#endif .dseg -glyphBuffer: .byte 1024 +mainWindow: .byte WIN_SIZE + heapStart: diff --git a/avr/modules/com2w/com2w.asm b/avr/modules/com2w/com2w.asm index 6f2f056..e94b648 100644 --- a/avr/modules/com2w/com2w.asm +++ b/avr/modules/com2w/com2w.asm @@ -46,6 +46,30 @@ +.macro M_COM2WSETUPINT0 + inr r16, MCUCR + cbr r16, (1< + + + + + font + gui + ili9341 + xpt2046 + + + + diff --git a/avr/modules/lcd2/font/0BUILD b/avr/modules/lcd2/font/0BUILD index de64eca..5fbae95 100644 --- a/avr/modules/lcd2/font/0BUILD +++ b/avr/modules/lcd2/font/0BUILD @@ -4,16 +4,6 @@ defs.asm - font8x8.asm - font6x8.asm - font12x16.asm - font12x20.asm - font16x26.asm - font1.asm - font2.asm - font3.asm - font4.asm - font5.asm main.asm diff --git a/avr/modules/lcd2/font/defs.asm b/avr/modules/lcd2/font/defs.asm index 4a24aeb..b5ffc20 100644 --- a/avr/modules/lcd2/font/defs.asm +++ b/avr/modules/lcd2/font/defs.asm @@ -7,11 +7,12 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** -#ifndef AVR_MODULES_FONT_DEFS -#define AVR_MODULES_FONT_DEFS +#ifndef AQH_AVR_FONT_DEFS_ASM +#define AQH_AVR_FONT_DEFS_ASM -.equ FONT_OFFS_HANDLERFN_LOW = 0 + +.equ FONT_OFFS_HANDLERFN_LOW = 0 ; pointer to handler fn (word address!) .equ FONT_OFFS_HANDLERFN_HI = 1 .equ FONT_OFFS_DATASIZE = 2 ; one byte used, one byte reserved .equ FONT_OFFS_WIDTH = 4 @@ -30,6 +31,7 @@ -#endif +#endif ; AQH_AVR_FONT_DEFS_ASM + diff --git a/avr/modules/lcd2/font/font1.asm b/avr/modules/lcd2/font/font1.asm deleted file mode 100644 index 908b2a0..0000000 --- a/avr/modules/lcd2/font/font1.asm +++ /dev/null @@ -1,100 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; This is a font from the project LCD_fonts at -; https://github.com/basti79/LCD-fonts.git -; which in turn is based on a post by Benedikt K. in a forum post on -; https://www.mikrocontroller.net/topic/54860 -; *************************************************************************** - - - -; *************************************************************************** -; code - -.cseg - - - -font1_8x8: -; header - .dw font6x8MonoHandlerFn ; handlerFn - .db 128, 0 ; needed buffer size - .db 8, 8 ; width, height of chars - .db 32, 64 ; first char, num of chars in font -; data (8x8_horizontal_LSB_2) - .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x20 - .db 0x0C,0x1E,0x1E,0x0C,0x0C,0x00,0x0C,0x00, ; 0x21 - .db 0x36,0x36,0x36,0x00,0x00,0x00,0x00,0x00, ; 0x22 - .db 0x36,0x36,0x7F,0x36,0x7F,0x36,0x36,0x00, ; 0x23 - .db 0x0C,0x3E,0x03,0x1E,0x30,0x1F,0x0C,0x00, ; 0x24 - .db 0x00,0x63,0x33,0x18,0x0C,0x66,0x63,0x00, ; 0x25 - .db 0x1C,0x36,0x1C,0x6E,0x3B,0x33,0x6E,0x00, ; 0x26 - .db 0x06,0x06,0x03,0x00,0x00,0x00,0x00,0x00, ; 0x27 - .db 0x18,0x0C,0x06,0x06,0x06,0x0C,0x18,0x00, ; 0x28 - .db 0x06,0x0C,0x18,0x18,0x18,0x0C,0x06,0x00, ; 0x29 - .db 0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, ; 0x2A - .db 0x00,0x0C,0x0C,0x3F,0x0C,0x0C,0x00,0x00, ; 0x2B - .db 0x00,0x00,0x00,0x00,0x00,0x0E,0x0C,0x06, ; 0x2C - .db 0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, ; 0x2D - .db 0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00, ; 0x2E - .db 0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, ; 0x2F - .db 0x1E,0x33,0x3B,0x3F,0x37,0x33,0x1E,0x00, ; 0x30 - .db 0x0C,0x0F,0x0C,0x0C,0x0C,0x0C,0x3F,0x00, ; 0x31 - .db 0x1E,0x33,0x30,0x1C,0x06,0x33,0x3F,0x00, ; 0x32 - .db 0x1E,0x33,0x30,0x1C,0x30,0x33,0x1E,0x00, ; 0x33 - .db 0x38,0x3C,0x36,0x33,0x7F,0x30,0x30,0x00, ; 0x34 - .db 0x3F,0x03,0x1F,0x30,0x30,0x33,0x1E,0x00, ; 0x35 - .db 0x1C,0x06,0x03,0x1F,0x33,0x33,0x1E,0x00, ; 0x36 - .db 0x3F,0x33,0x30,0x18,0x0C,0x06,0x06,0x00, ; 0x37 - .db 0x1E,0x33,0x33,0x1E,0x33,0x33,0x1E,0x00, ; 0x38 - .db 0x1E,0x33,0x33,0x3E,0x30,0x18,0x0E,0x00, ; 0x39 - .db 0x00,0x00,0x0C,0x0C,0x00,0x0C,0x0C,0x00, ; 0x3A - .db 0x00,0x00,0x0C,0x0C,0x00,0x0E,0x0C,0x06, ; 0x3B - .db 0x18,0x0C,0x06,0x03,0x06,0x0C,0x18,0x00, ; 0x3C - .db 0x00,0x00,0x3F,0x00,0x3F,0x00,0x00,0x00, ; 0x3D - .db 0x06,0x0C,0x18,0x30,0x18,0x0C,0x06,0x00, ; 0x3E - .db 0x1E,0x33,0x30,0x18,0x0C,0x00,0x0C,0x00, ; 0x3F - .db 0x3E,0x63,0x7B,0x7B,0x7B,0x03,0x1E,0x00, ; 0x40 - .db 0x0C,0x1E,0x33,0x33,0x3F,0x33,0x33,0x00, ; 0x41 - .db 0x3F,0x66,0x66,0x3E,0x66,0x66,0x3F,0x00, ; 0x42 - .db 0x3C,0x66,0x03,0x03,0x03,0x66,0x3C,0x00, ; 0x43 - .db 0x3F,0x36,0x66,0x66,0x66,0x36,0x3F,0x00, ; 0x44 - .db 0x7F,0x46,0x16,0x1E,0x16,0x46,0x7F,0x00, ; 0x45 - .db 0x7F,0x46,0x16,0x1E,0x16,0x06,0x0F,0x00, ; 0x46 - .db 0x3C,0x66,0x03,0x03,0x73,0x66,0x7C,0x00, ; 0x47 - .db 0x33,0x33,0x33,0x3F,0x33,0x33,0x33,0x00, ; 0x48 - .db 0x1E,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00, ; 0x49 - .db 0x78,0x30,0x30,0x30,0x33,0x33,0x1E,0x00, ; 0x4A - .db 0x67,0x66,0x36,0x1E,0x36,0x66,0x67,0x00, ; 0x4B - .db 0x0F,0x06,0x06,0x06,0x46,0x66,0x7F,0x00, ; 0x4C - .db 0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x00, ; 0x4D - .db 0x63,0x67,0x6F,0x7B,0x73,0x63,0x63,0x00, ; 0x4E - .db 0x1C,0x36,0x63,0x63,0x63,0x36,0x1C,0x00, ; 0x4F - .db 0x3F,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00, ; 0x50 - .db 0x1E,0x33,0x33,0x33,0x3B,0x1E,0x38,0x00, ; 0x51 - .db 0x3F,0x66,0x66,0x3E,0x1E,0x36,0x67,0x00, ; 0x52 - .db 0x1E,0x33,0x07,0x1C,0x38,0x33,0x1E,0x00, ; 0x53 - .db 0x3F,0x2D,0x0C,0x0C,0x0C,0x0C,0x1E,0x00, ; 0x54 - .db 0x33,0x33,0x33,0x33,0x33,0x33,0x3F,0x00, ; 0x55 - .db 0x33,0x33,0x33,0x33,0x33,0x1E,0x0C,0x00, ; 0x56 - .db 0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, ; 0x57 - .db 0x63,0x63,0x36,0x1C,0x36,0x63,0x63,0x00, ; 0x58 - .db 0x33,0x33,0x33,0x1E,0x0C,0x0C,0x1E,0x00, ; 0x59 - .db 0x7F,0x33,0x19,0x0C,0x46,0x63,0x7F,0x00, ; 0x5A - .db 0x1E,0x06,0x06,0x06,0x06,0x06,0x1E,0x00, ; 0x5B - .db 0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, ; 0x5C - .db 0x1E,0x18,0x18,0x18,0x18,0x18,0x1E,0x00, ; 0x5D - .db 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, ; 0x5E - .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF ; 0x5F - - - diff --git a/avr/modules/lcd2/font/font12x16.asm b/avr/modules/lcd2/font/font12x16.asm deleted file mode 100644 index 4e10f93..0000000 --- a/avr/modules/lcd2/font/font12x16.asm +++ /dev/null @@ -1,117 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; code - -.cseg - - - -; --------------------------------------------------------------------------- -; @routine font12x16MonoHandlerFn -; -; Handler for 12x16 Mono Fonts -; - -font12x16MonoHandlerFn: - cpi r23, FONT_FN_RENDER - breq font12x16MonoRenderCharacter - rjmp FONT_GenericHandler -; @end - - - -; --------------------------------------------------------------------------- -; @routine font12x16RenderCharacter - -; @param R16 character to write -; @param R1:R0 background color -; @param R3:R2 foreground color -; @param Z pointer to font -; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel -; @clobbers r17, r18, r23, r24, r25, x - -font12x16MonoRenderCharacter: - push zl - push zh - rcall font12x16GetCharPosInFont ; (r17, r24, r25, z) - ldi r25, 16 ; 16 bytes height -font12x16MonoRenderCharacter_loop1: - ldi r24, 12 ; 16 bits - ldi r23, 8 - lpm r17, Z+ -font12x16MonoRenderCharacter_loop2: - dec r23 - brne font12x16MonoRenderCharacter_haveByte - lpm r17, Z+ - ldi r23, 8 -font12x16MonoRenderCharacter_haveByte: - lsr r17 - brcs font12x16MonoRenderCharacter_writeForeground - st X+, r0 - st X+, r1 - rjmp font12x16MonoRenderCharacter_loop2end -font12x16MonoRenderCharacter_writeForeground: - st X+, r2 - st X+, r3 -font12x16MonoRenderCharacter_loop2end: - dec r24 - brne font12x16MonoRenderCharacter_loop2 - dec r25 - brne font12x16MonoRenderCharacter_loop1 - ldi r18, 12 - ldi r19, 16 - pop zh - pop zl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine font12x16GetCharPosInFont - -; @param R16 character to write -; @param Z pointer to font -; @return Z pointer to begin of char data -; @clobbers r17, r24, r25, z - -font12x16GetCharPosInFont: - mov r24, r16 - adiw zh:zl, FONT_OFFS_FIRSTCHAR - lpm r24, Z+ ; first char num - lpm r25, Z+ ; num of chars - sub r16, r24 - brcs font12x16GetCharPosInFont_ret - cp r16, r25 - brcc font12x16GetCharPosInFont_ret - mov r25, r16 ; x256 - clr r24 - - lsr r25 ; x128 - ror r24 - - lsr r25 ; x64 - ror r24 - - lsr r25 ; x32 - ror r24 - - add zl, r24 - adc zh, r25 -font12x16GetCharPosInFont_ret: - ret -; @end - - - diff --git a/avr/modules/lcd2/font/font16x26.asm b/avr/modules/lcd2/font/font16x26.asm deleted file mode 100644 index 445e841..0000000 --- a/avr/modules/lcd2/font/font16x26.asm +++ /dev/null @@ -1,123 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; code - -.cseg - - - -; --------------------------------------------------------------------------- -; @routine font16x26MonoHandlerFn -; -; Handler for 16x26 Mono Fonts -; - -font16x26MonoHandlerFn: - cpi r23, FONT_FN_RENDER - breq font16x26MonoRenderCharacter - rjmp FONT_GenericHandler -; @end - - - - -; --------------------------------------------------------------------------- -; @routine font16x26RenderCharacter - -; @param R16 character to write -; @param R1:R0 background color -; @param R3:R2 foreground color -; @param Z pointer to font -; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel -; @clobbers r17, r18, r24, r25, x - -font16x26MonoRenderCharacter: - push zl - push zh - rcall font16x26GetCharPosInFont ; (r17, r24, r25, z) - ldi r25, 26 ; 26 bytes height -font16x26MonoRenderCharacter_loop1: - ldi r24, 16 ; 16 bits -font16x26MonoRenderCharacter_loop2: - mov r23, r24 - andi r23, 7 - brne font16x26MonoRenderCharacter_haveByte - lpm r17, Z+ -font16x26MonoRenderCharacter_haveByte: - lsr r17 - brcs font16x26MonoRenderCharacter_writeForeground - st X+, r0 - st X+, r1 - rjmp font16x26MonoRenderCharacter_loop2end -font16x26MonoRenderCharacter_writeForeground: - st X+, r2 - st X+, r3 -font16x26MonoRenderCharacter_loop2end: - dec r24 - brne font16x26MonoRenderCharacter_loop2 - dec r25 - brne font16x26MonoRenderCharacter_loop1 - ldi r18, 16 - ldi r19, 26 - pop zh - pop zl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine font16x26GetCharPosInFont - -; @param R16 character to write -; @param Z pointer to font -; @return Z pointer to begin of char data -; @clobbers r17, r24, r25, z - -font16x26GetCharPosInFont: - mov r24, r16 - adiw zh:zl, FONT_OFFS_FIRSTCHAR - lpm r24, Z+ ; first char num - lpm r25, Z+ ; num of chars - sub r16, r24 - brcs font16x26GetCharPosInFont_ret - cp r16, r25 - brcc font16x26GetCharPosInFont_ret - mov r24, r16 - clr r25 - lsl r24 ; x2 - rol r25 - add r24, r16 ; x3 - adc r25, r16 - sub r25, r16 - lsl r24 ; x6 - rol r25 - lsl r24 ; x12 - rol r25 - add r24, r16 ; x13 - adc r25, r16 - sub r25, r16 - lsl r24 ; x26 - rol r25 - lsl r24 ; x52 - rol r25 - - add zl, r24 - adc zh, r25 -font16x26GetCharPosInFont_ret: - ret -; @end - - - diff --git a/avr/modules/lcd2/font/font3.asm b/avr/modules/lcd2/font/font3.asm deleted file mode 100644 index 92c1396..0000000 --- a/avr/modules/lcd2/font/font3.asm +++ /dev/null @@ -1,257 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; This is a font from the project LCD_fonts at -; https://github.com/basti79/LCD-fonts.git -; which in turn is based on a post by Benedikt K. in a forum post on -; https://www.mikrocontroller.net/topic/54860 -; *************************************************************************** - - - -; *************************************************************************** -; code - -.cseg - - - -font3_16x26: -; header - .dw font16x26MonoHandlerFn ; handlerFn - .dw 832 ; needed buffer size - .db 16, 26 ; width, height of chars - .db 32, 224 ; first char, num of chars in font -; data (16x26_horizontal_LSB_2) -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 -.db 0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x21 -.db 0x00,0x00,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x10,0x04,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, ; 0x22 -.db 0x00,0x00,0x00,0x00,0x80,0x31,0x80,0x31,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xFC,0x7F,0xFC,0x7F,0x60,0x0C,0x60,0x06,0x30,0x06,0xFE,0x3F,0xFE,0x3F,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x8C,0x01,0x8C,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x23 -.db 0x00,0x03,0x00,0x03,0xC0,0x1F,0xF0,0x3F,0x70,0x23,0x38,0x03,0x38,0x03,0x38,0x03,0x78,0x03,0xF0,0x03,0xE0,0x03,0x80,0x07,0x00,0x1F,0x00,0x1F,0x00,0x3B,0x00,0x3B,0x00,0x3B,0x00,0x3B,0x18,0x1B,0xF8,0x1F,0xE0,0x0F,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x24 -.db 0x00,0x00,0x00,0x00,0x3C,0xC0,0x66,0x60,0xC3,0x30,0xC3,0x18,0xC3,0x18,0xC3,0x0C,0xC3,0x06,0x66,0x03,0x3C,0x03,0x80,0x01,0xC0,0x3C,0xC0,0x66,0x60,0xC3,0x30,0xC3,0x18,0xC3,0x18,0xC3,0x0C,0xC3,0x06,0x66,0x03,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x25 -.db 0x00,0x00,0x00,0x00,0xE0,0x03,0xF0,0x07,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x70,0x07,0xF0,0x01,0xF8,0x00,0xFC,0xE0,0xCE,0xE1,0xC7,0xE3,0x87,0x63,0x07,0x67,0x07,0x7E,0x0F,0x3E,0x1E,0x3C,0xFC,0x7F,0xF0,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x26 -.db 0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x80,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,0x00,0x00,0x00,0x00,0x00, ; 0x27 -.db 0x00,0x00,0x00,0x18,0x00,0x1E,0x00,0x0F,0x80,0x03,0xC0,0x01,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x0F,0x00,0x1E,0x00,0x18,0x00,0x00, ; 0x28 -.db 0x00,0x00,0x0C,0x00,0x3C,0x00,0x78,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x80,0x03,0x80,0x03,0x80,0x03,0xC0,0x01,0xE0,0x00,0x78,0x00,0x3C,0x00,0x0C,0x00,0x00,0x00, ; 0x29 -.db 0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x98,0x1B,0x7C,0x3E,0x30,0x0C,0x40,0x02,0xE0,0x07,0x70,0x0E,0x38,0x1C,0x20,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, ; 0x2A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFE,0x7F,0xFE,0x7F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2B -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x03,0x80,0x03,0x80,0x01,0xC0,0x00,0x00,0x00, ; 0x2C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2E -.db 0x00,0x00,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x80,0x01,0x80,0x01,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x00,0x00, ; 0x2F -.db 0x00,0x00,0x00,0x00,0xE0,0x03,0xF0,0x07,0x38,0x0E,0x1C,0x1C,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x38,0x0E,0xF0,0x07,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x30 -.db 0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x03,0xFC,0x03,0x8C,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0xFC,0x7F,0xFC,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x31 -.db 0x00,0x00,0x00,0x00,0xF0,0x03,0xFC,0x07,0x0C,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x30,0x00,0x38,0x00,0x1C,0x00,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x32 -.db 0x00,0x00,0x00,0x00,0xF0,0x03,0xF8,0x0F,0x08,0x1E,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x0C,0x00,0x06,0xE0,0x03,0xE0,0x07,0x00,0x0F,0x00,0x1E,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1E,0x08,0x0F,0xF8,0x07,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x33 -.db 0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x0F,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xE0,0x0E,0x60,0x0E,0x30,0x0E,0x18,0x0E,0x18,0x0E,0x0C,0x0E,0x06,0x0E,0xFE,0x7F,0xFE,0x7F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x34 -.db 0x00,0x00,0x00,0x00,0xF0,0x3F,0xF0,0x3F,0xF0,0x3F,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0xF0,0x03,0xF0,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x3C,0x10,0x1E,0xF0,0x0F,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x35 -.db 0x00,0x00,0x00,0x00,0x80,0x1F,0xE0,0x3F,0xF0,0x20,0x70,0x00,0x38,0x00,0x38,0x00,0x1C,0x00,0x9C,0x0F,0xDC,0x1F,0x7C,0x3C,0x3C,0x78,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x38,0x70,0x38,0x38,0x70,0x38,0xF0,0x1F,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x36 -.db 0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0xF8,0x3F,0x00,0x18,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0x06,0x00,0x02,0x00,0x03,0x80,0x01,0x80,0x01,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x70,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x37 -.db 0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x78,0x0C,0xF0,0x0F,0xE0,0x03,0xF0,0x0F,0x38,0x1F,0x18,0x1E,0x1C,0x3C,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x38 -.db 0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x1F,0x38,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x78,0x7C,0xF0,0x77,0xE0,0x73,0x00,0x70,0x00,0x38,0x00,0x38,0x00,0x1C,0x08,0x1E,0xF8,0x0F,0xF0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x39 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x03,0x00,0x03,0x80,0x03,0x80,0x01,0xC0,0x00,0x00,0x00, ; 0x3B -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x70,0x00,0x3C,0x00,0x0F,0xC0,0x03,0xF0,0x00,0x3C,0x00,0x3C,0x00,0xF0,0x00,0xC0,0x03,0x00,0x0F,0x00,0x3C,0x00,0x70,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x0E,0x00,0x3C,0x00,0xF0,0x00,0xC0,0x03,0x00,0x0F,0x00,0x3C,0x00,0x3C,0x00,0x0F,0xC0,0x03,0xF0,0x00,0x3C,0x00,0x0E,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3E -.db 0x00,0x00,0x00,0x00,0xF8,0x07,0xFC,0x1F,0x0C,0x3C,0x0C,0x38,0x00,0x38,0x00,0x38,0x00,0x1C,0x00,0x1E,0x00,0x0F,0x80,0x07,0x80,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3F -.db 0x00,0x00,0x00,0x00,0xC0,0x0F,0xE0,0x1F,0x70,0x38,0x18,0x30,0x1C,0x3E,0x0C,0x31,0x8E,0x31,0xC6,0x30,0xC6,0x30,0xC6,0x38,0xC6,0x38,0xC6,0x3C,0xC6,0x34,0x8E,0xF7,0x8C,0xF3,0x1C,0x00,0x38,0x08,0xF0,0x0F,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x40 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x41 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x0F,0x1C,0x1E,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0xFC,0x07,0xFC,0x07,0x1C,0x1E,0x1C,0x3C,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0xFC,0x1F,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x42 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x3F,0x78,0x30,0x3C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x3C,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x43 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x0F,0x1C,0x3C,0x1C,0x38,0x1C,0x78,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x1E,0xFC,0x0F,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x44 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x1F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x7F,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x45 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x7F,0xF8,0x7F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x46 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x3F,0x78,0x30,0x3C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x3F,0x0E,0x3F,0x0E,0x38,0x1C,0x38,0x3C,0x38,0x78,0x38,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x47 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x48 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0xFC,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x49 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0xF8,0x0F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x04,0x07,0xFC,0x03,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x78,0x1C,0x3C,0x1C,0x1E,0x1C,0x0F,0x1C,0x07,0x9C,0x03,0xDC,0x01,0xFC,0x00,0xDC,0x01,0xDC,0x03,0x9C,0x07,0x1C,0x0F,0x1C,0x1E,0x1C,0x3C,0x1C,0x78,0x1C,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4B -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x3F,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,0x1E,0x3C,0x1E,0x3C,0x1E,0x3C,0x36,0x36,0x36,0x36,0x36,0x36,0x66,0x32,0x66,0x33,0x66,0x33,0xC6,0x31,0xC6,0x31,0xC6,0x31,0x06,0x30,0x06,0x30,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x30,0x1C,0x30,0x3C,0x30,0x7C,0x30,0x7C,0x30,0xFC,0x30,0xEC,0x31,0xCC,0x31,0xCC,0x33,0x8C,0x37,0x0C,0x3F,0x0C,0x3E,0x0C,0x3E,0x0C,0x3C,0x0C,0x38,0x0C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x4F -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0xF8,0x3F,0x38,0x78,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x78,0x38,0x3C,0xF8,0x1F,0xF8,0x07,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x50 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x1E,0x00,0x78,0x00,0xF0,0x00,0x40,0x00,0x00, ; 0x51 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x0F,0x1C,0x1E,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0xFC,0x07,0xFC,0x03,0x9C,0x07,0x1C,0x07,0x1C,0x0F,0x1C,0x1E,0x1C,0x3C,0x1C,0x38,0x1C,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x52 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0xF8,0x1F,0x3C,0x18,0x1C,0x00,0x1C,0x00,0x3C,0x00,0xF8,0x00,0xF0,0x07,0xC0,0x1F,0x00,0x3E,0x00,0x38,0x00,0x38,0x00,0x38,0x0C,0x1C,0xFC,0x1F,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x53 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,0xFF,0x7F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x54 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x55 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x0E,0x70,0x0E,0x70,0x1C,0x70,0x1C,0x38,0x3C,0x38,0x38,0x38,0x38,0x1C,0x70,0x1C,0x70,0x0C,0xE0,0x0E,0xE0,0x0E,0xE0,0x07,0xC0,0x07,0xC0,0x07,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x56 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x03,0xC0,0x07,0xC0,0x86,0x61,0xC6,0x63,0xC6,0x63,0xC6,0x63,0xC6,0x63,0x4E,0x76,0x6C,0x36,0x6C,0x36,0x6C,0x36,0x2C,0x3E,0x3C,0x3C,0x3C,0x1C,0x3C,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x57 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xE0,0x3C,0x70,0x78,0x38,0x78,0x1C,0xF0,0x0E,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xC0,0x07,0xE0,0x07,0x60,0x0F,0x30,0x1E,0x18,0x3C,0x1C,0x38,0x0E,0x78,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x58 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x0E,0x70,0x1C,0x30,0x1C,0x18,0x38,0x1C,0x78,0x0E,0x70,0x07,0xE0,0x03,0xE0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x59 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x3F,0xFC,0x3F,0x00,0x38,0x00,0x1C,0x00,0x0E,0x00,0x07,0x80,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x0E,0x00,0xFE,0x3F,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x5A -.db 0x00,0x00,0xC0,0x3F,0xC0,0x3F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x3F,0xC0,0x3F,0x00,0x00, ; 0x5B -.db 0x00,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x00,0x80,0x01,0x80,0x01,0x00,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0x00, ; 0x5C -.db 0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0xFC,0x03,0xFC,0x03,0x00,0x00, ; 0x5D -.db 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x01,0x80,0x03,0x80,0x03,0xC0,0x03,0xC0,0x06,0xE0,0x06,0x60,0x0C,0x30,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x0C,0x30,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x5E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x5F -.db 0xC0,0x01,0x80,0x03,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x60 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x61 -.db 0x00,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x9C,0x07,0xDC,0x1F,0x7C,0x1C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x3C,0x1E,0xFC,0x0F,0xCC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x62 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x3F,0x78,0x20,0x38,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x3C,0x00,0x38,0x00,0xF8,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x63 -.db 0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0xC0,0x73,0xF0,0x7F,0x78,0x7C,0x38,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x7C,0xF0,0x77,0xE0,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x64 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x65 -.db 0x00,0x00,0x00,0xFF,0x80,0xFF,0xC0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x7F,0xFC,0x7F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x66 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x73,0xF0,0x7F,0x78,0x7C,0x38,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x7C,0xF0,0x77,0xE0,0x73,0x00,0x70,0x00,0x38,0x18,0x3C,0xF8,0x1F,0xF0,0x07, ; 0x67 -.db 0x00,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x0F,0xDC,0x1F,0x7C,0x3C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x68 -.db 0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x69 -.db 0x00,0x00,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0xF8,0x0F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x04,0x07,0xFC,0x07,0xF8,0x01, ; 0x6A -.db 0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x3C,0x38,0x1E,0x38,0x0E,0x38,0x0F,0xB8,0x07,0xB8,0x03,0xF8,0x03,0xB8,0x03,0xB8,0x07,0x38,0x0F,0x38,0x0E,0x38,0x1E,0x38,0x3C,0x38,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x6B -.db 0x00,0x00,0xF8,0x07,0xF8,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x6C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xCE,0x31,0xEE,0x79,0xFE,0x7F,0x9E,0x77,0x9E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x8E,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x6D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0F,0xDC,0x1F,0x7C,0x3C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x6E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x6F -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9C,0x07,0xDC,0x1F,0x7C,0x1C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x3C,0x1E,0xFC,0x0F,0x9C,0x07,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00, ; 0x70 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x39,0xF8,0x3F,0x3C,0x3E,0x1C,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x3C,0x1C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38, ; 0x71 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x3E,0x70,0x3F,0xF0,0x31,0xF0,0x30,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x72 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x78,0x10,0x38,0x00,0x38,0x00,0xF8,0x01,0xF0,0x07,0x80,0x1F,0x00,0x3C,0x00,0x38,0x00,0x38,0x18,0x3C,0xF8,0x1F,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x73 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0xE0,0x00,0xFC,0x3F,0xFC,0x3F,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xC0,0x3F,0x80,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x74 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x3C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x75 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x70,0x1C,0x38,0x1C,0x38,0x3C,0x38,0x38,0x18,0x38,0x1C,0x70,0x1C,0x70,0x0C,0xE0,0x0E,0xE0,0x0E,0xE0,0x06,0xC0,0x07,0xC0,0x07,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x76 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x87,0xC3,0x87,0x43,0xC6,0x63,0xC6,0x63,0x46,0x62,0x6E,0x66,0x6E,0x26,0x6C,0x36,0x2C,0x36,0x3C,0x3C,0x3C,0x3C,0x3C,0x1C,0x18,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x77 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x30,0x3C,0x18,0x78,0x0C,0x70,0x0E,0xF0,0x06,0xE0,0x03,0xC0,0x03,0xC0,0x03,0xE0,0x07,0x70,0x0F,0x30,0x0E,0x38,0x1E,0x1C,0x3C,0x0E,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x78 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x70,0x1C,0x30,0x1C,0x38,0x38,0x18,0x38,0x1C,0x78,0x1C,0x70,0x0E,0xF0,0x0E,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x7C,0x00,0x3C,0x00, ; 0x79 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x3F,0xFC,0x3F,0x00,0x38,0x00,0x1C,0x00,0x0E,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0xFC,0x3F,0xFC,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x7A -.db 0x00,0x00,0x00,0x1F,0x80,0x1F,0xC0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0xC0,0x01,0xF8,0x00,0xF8,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x80,0x1F,0x00,0x1F,0x00,0x00, ; 0x7B -.db 0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00, ; 0x7C -.db 0x00,0x00,0x7C,0x00,0xFC,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x01,0x80,0x0F,0x80,0x0F,0xC0,0x01,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xE0,0x01,0xFC,0x00,0x7C,0x00,0x00,0x00, ; 0x7D -.db 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,0x60,0xFC,0x63,0xC6,0x3F,0x06,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x7E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x7F -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x3F,0x78,0x30,0x3C,0x00,0x1C,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1C,0x00,0x3C,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x02,0x00,0x07,0x00,0x0C,0x00,0x0C,0x80,0x07, ; 0x80 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x30,0x06,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x3C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x81 -.db 0x00,0x00,0x00,0x0C,0x00,0x06,0x00,0x03,0x80,0x01,0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x82 -.db 0x00,0x00,0xC0,0x01,0x60,0x03,0x30,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x83 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x0C,0x60,0x0C,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x84 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x85 -.db 0xC0,0x01,0x20,0x02,0x20,0x02,0x20,0x02,0xC0,0x01,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x86 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x3F,0x78,0x20,0x38,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x3C,0x00,0x38,0x00,0xF8,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x01,0x80,0x03,0x00,0x06,0x00,0x06,0xC0,0x03, ; 0x87 -.db 0x00,0x00,0xC0,0x01,0x60,0x03,0x30,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x88 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x0C,0x60,0x0C,0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x89 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0xC0,0x07,0xF0,0x0F,0x78,0x1C,0x38,0x38,0x1C,0x38,0x1C,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x00,0x1C,0x00,0x38,0x00,0x78,0x20,0xF0,0x3F,0xC0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x30,0x06,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8B -.db 0x00,0x00,0x80,0x03,0xC0,0x06,0x60,0x0C,0x30,0x18,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8C -.db 0x00,0x00,0x60,0x00,0xC0,0x00,0x80,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8D -.db 0x30,0x0C,0x30,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8E -.db 0x80,0x03,0x40,0x04,0x40,0x04,0x40,0x04,0x80,0x03,0x80,0x03,0xC0,0x07,0xC0,0x07,0xE0,0x06,0x60,0x0E,0x60,0x0E,0x70,0x0C,0x30,0x1C,0x38,0x1C,0x38,0x38,0xFC,0x3F,0xFC,0x3F,0x1C,0x70,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x8F -.db 0x00,0x0E,0x00,0x07,0x80,0x03,0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x1F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x7F,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x90 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3C,0xFC,0x7F,0x80,0x67,0x80,0xE3,0x80,0xE3,0xF0,0xFF,0xFC,0xFF,0x9C,0x03,0x8E,0x03,0x8E,0x03,0x8E,0x03,0x9E,0x87,0xFC,0xFF,0x78,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x91 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x3F,0xC0,0x3F,0xC0,0x07,0xE0,0x07,0x60,0x07,0x60,0x07,0x70,0x07,0x30,0x3F,0x38,0x3F,0x18,0x07,0x1C,0x07,0xFC,0x07,0xFC,0x07,0x06,0x07,0x06,0x7F,0x03,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x92 -.db 0x00,0x00,0xC0,0x01,0x60,0x03,0x30,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x93 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x30,0x06,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x94 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x95 -.db 0x00,0x00,0xC0,0x01,0x60,0x03,0x30,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x3C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x96 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x3C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x97 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x06,0x30,0x06,0x00,0x00,0x00,0x00,0x1E,0x70,0x1C,0x30,0x1C,0x38,0x38,0x18,0x38,0x1C,0x78,0x1C,0x70,0x0E,0xF0,0x0E,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x7C,0x00,0x3C,0x00, ; 0x98 -.db 0x30,0x0C,0x30,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x99 -.db 0x60,0x18,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x33,0xF8,0x1F,0x3C,0x1E,0x1C,0x1E,0x0E,0x3B,0x0E,0x39,0x8E,0x39,0xCE,0x38,0x6E,0x38,0x6E,0x38,0x3C,0x1C,0x3C,0x1E,0xFC,0x0F,0xE6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9B -.db 0x00,0x00,0x00,0x00,0x00,0x3E,0x80,0x3F,0x80,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xF0,0x0F,0xF0,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xE0,0x00,0x70,0x00,0xF8,0x3F,0xF8,0x3F,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x67,0xF0,0x3F,0x38,0x1C,0x1C,0x3C,0x1C,0x3C,0x0E,0x76,0x0E,0x73,0x8E,0x71,0x8E,0x71,0xCE,0x70,0x6E,0x70,0x3C,0x38,0x3C,0x38,0x38,0x1C,0xFC,0x0F,0xE6,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x20,0x0E,0x70,0x1C,0x38,0x38,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xE0,0x07,0x70,0x0E,0x38,0x1C,0x1C,0x38,0x0E,0x70,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9E -.db 0x00,0x00,0x00,0x3F,0x80,0x3F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xF8,0x1F,0xF8,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFE,0x00,0x7E,0x00, ; 0x9F -.db 0x00,0x00,0x00,0x06,0x00,0x03,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA0 -.db 0x00,0x00,0x00,0x06,0x00,0x03,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA1 -.db 0x00,0x00,0x00,0x06,0x00,0x03,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA2 -.db 0x00,0x00,0x00,0x06,0x00,0x03,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x3C,0x3C,0x3E,0xF8,0x3B,0xF0,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA3 -.db 0x00,0x00,0x00,0x00,0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0x1C,0x0F,0xDC,0x1F,0x7C,0x3C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA4 -.db 0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0x1C,0x30,0x1C,0x30,0x3C,0x30,0x7C,0x30,0x7C,0x30,0xFC,0x30,0xEC,0x31,0xCC,0x31,0xCC,0x33,0x8C,0x37,0x0C,0x3F,0x0C,0x3E,0x0C,0x3E,0x0C,0x3C,0x0C,0x38,0x0C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA5 -.db 0x00,0x00,0x00,0x00,0xE0,0x03,0xF0,0x07,0x10,0x06,0xE0,0x07,0xF0,0x07,0x38,0x06,0x18,0x06,0x18,0x07,0xF8,0x1F,0xF0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA6 -.db 0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA7 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x80,0x03,0x80,0x03,0x80,0x03,0xC0,0x01,0xE0,0x01,0xF0,0x00,0x78,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x30,0x3C,0x30,0xF8,0x3F,0xE0,0x1F, ; 0xA8 -.db 0x00,0x00,0x00,0x00,0xE0,0x03,0x10,0x04,0xE8,0x09,0x24,0x12,0x24,0x12,0xE4,0x11,0x24,0x11,0x24,0x11,0x28,0x0B,0x10,0x04,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xFE,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAA -.db 0x00,0x00,0x00,0x00,0x1F,0x0C,0x1F,0x06,0x1C,0x06,0x1C,0x03,0x1C,0x03,0x9C,0x01,0x9C,0x01,0xDC,0x00,0xDC,0x00,0x7C,0x3C,0x30,0xFE,0x30,0xE0,0x18,0xE0,0x18,0x70,0x0C,0x38,0x0C,0x0C,0x06,0x06,0x06,0xFE,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAB -.db 0x00,0x00,0x00,0x00,0x1F,0x18,0x1F,0x0C,0x1C,0x0C,0x1C,0x06,0x1C,0x06,0x1C,0x03,0x1C,0x03,0x9C,0x01,0x9C,0x01,0xDC,0x38,0x60,0x3C,0x60,0x3A,0x30,0x39,0xB0,0x39,0xD8,0x38,0xD8,0xFF,0x0C,0x38,0x0C,0x38,0x06,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAC -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01, ; 0xAD -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x10,0xE0,0x38,0x70,0x1C,0x38,0x0E,0x1C,0x07,0x0C,0x03,0x8E,0x03,0x1C,0x07,0x38,0x0E,0x70,0x1C,0xE0,0x38,0x40,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x9C,0x03,0x38,0x07,0x70,0x0E,0xE0,0x1C,0xC0,0x39,0xC0,0x18,0xE0,0x1C,0x70,0x0E,0x38,0x07,0x9C,0x03,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAF -.db 0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x00,0x00,0x00,0x00,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x00,0x00,0x00,0x00,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x00,0x00,0x00,0x00,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x00,0x00,0x00,0x00, ; 0xB0 -.db 0x38,0xE7,0x38,0xE7,0x38,0xE7,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0x38,0xE7,0x38,0xE7,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0x38,0xE7,0x38,0xE7,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0x38,0xE7,0x38,0xE7,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C,0x38,0xE7,0x38,0xE7,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C, ; 0xB1 -.db 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0x1C,0xE7,0x1C, ; 0xB2 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xB3 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0x01,0xFF,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xB4 -.db 0x00,0x07,0x80,0x03,0xC0,0x01,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xB5 -.db 0xE0,0x03,0x70,0x07,0x38,0x0E,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xB6 -.db 0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xB7 -.db 0x00,0x00,0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x38,0x38,0x1C,0x70,0x8C,0x6F,0xEE,0xEF,0x66,0xC8,0x36,0xC0,0x36,0xC0,0x36,0xC0,0x36,0xC0,0x36,0xC0,0x66,0xC8,0xEE,0xEF,0x8C,0x67,0x1C,0x70,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xB8 -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x7F,0x06,0x7F,0x06,0x00,0x06,0x00,0x06,0x7F,0x06,0x7F,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xB9 -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xBA -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0xFF,0x07,0x00,0x06,0x00,0x06,0x7F,0x06,0x7F,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xBB -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x7F,0x06,0x7F,0x06,0x00,0x06,0x00,0x06,0xFF,0x07,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xBC -.db 0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,0xC0,0x0F,0xF0,0x0F,0xB8,0x09,0xB8,0x01,0x9C,0x01,0x9C,0x01,0x9C,0x01,0x9C,0x01,0x9C,0x01,0x9C,0x01,0x9C,0x01,0xB8,0x01,0xF8,0x09,0xF0,0x0F,0xE0,0x07,0x80,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xBD -.db 0x00,0x00,0x00,0x00,0x0E,0xE0,0x1C,0x60,0x38,0x30,0x38,0x30,0x70,0x18,0xE0,0x0C,0xE0,0x0C,0xC0,0x07,0x80,0x03,0xF8,0x3F,0xF8,0x3F,0x80,0x03,0x80,0x03,0x80,0x03,0xF8,0x3F,0xF8,0x3F,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xBE -.db 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,0x01,0xFF,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xBF -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0xFF,0x80,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC0 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC1 -.db 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,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xC2 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0xFF,0x80,0xFF,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xC3 -.db 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC4 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0xFF,0xFF,0xFF,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xC5 -.db 0x00,0x00,0x00,0x00,0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0xE0,0x07,0xF8,0x0F,0x18,0x1E,0x00,0x1C,0x00,0x1C,0xE0,0x1F,0xF0,0x1F,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x3C,0x1E,0xF8,0x7B,0xF0,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC6 -.db 0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x03,0xE0,0x03,0x60,0x07,0x60,0x07,0x70,0x06,0x30,0x0E,0x38,0x0E,0x38,0x1C,0x18,0x1C,0xFC,0x3F,0xFC,0x3F,0x0E,0x38,0x0E,0x70,0x0E,0x70,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC7 -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0xFE,0x60,0xFE,0x60,0x00,0x60,0x00,0xE0,0xFF,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC8 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xFF,0xE0,0xFF,0x60,0x00,0x60,0x00,0x60,0xFE,0x60,0xFE,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xC9 -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCA -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xCB -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0xFE,0x60,0xFE,0x60,0x00,0x60,0x00,0x60,0xFE,0x60,0xFE,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xCC -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCD -.db 0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x7F,0xFE,0x7F,0xFE,0x00,0x00,0x00,0x00,0x7F,0xFE,0x7F,0xFE,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x06, ; 0xCE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x20,0xCC,0x33,0xF8,0x1F,0x30,0x0C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x30,0x0C,0xF8,0x1F,0xCC,0x33,0x04,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCF -.db 0x00,0x00,0x1E,0x03,0xFE,0x03,0xF0,0x01,0xF0,0x03,0x18,0x07,0x00,0x0E,0xE0,0x0F,0xF8,0x1F,0x3C,0x1E,0x1C,0x3C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD0 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x0F,0x1C,0x3C,0x1C,0x38,0x1C,0x78,0x1C,0x70,0x1C,0x70,0xFF,0x70,0xFF,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x1E,0xFC,0x0F,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD1 -.db 0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x1F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x7F,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD2 -.db 0x60,0x18,0x60,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x1F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x7F,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD3 -.db 0xC0,0x01,0x80,0x03,0x00,0x07,0x00,0x00,0x00,0x00,0xF8,0x3F,0xF8,0x3F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x1F,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x7F,0xF8,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD4 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD5 -.db 0x00,0x07,0x80,0x03,0xC0,0x01,0x00,0x00,0x00,0x00,0xFC,0x1F,0xFC,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD6 -.db 0xE0,0x03,0x70,0x07,0x38,0x0E,0x00,0x00,0x00,0x00,0xFC,0x1F,0xFC,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD7 -.db 0x30,0x0C,0x30,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,0xFC,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD8 -.db 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFF,0x01,0xFF,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, ; 0xD9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xFF,0x80,0xFF,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01, ; 0xDA -.db 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, ; 0xDB -.db 0x00,0x00,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,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, ; 0xDC -.db 0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00, ; 0xDD -.db 0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0xFC,0x1F,0xFC,0x1F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xFC,0x1F,0xFC,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xDE -.db 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xDF -.db 0x00,0x07,0x80,0x03,0xC0,0x01,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE0 -.db 0x00,0x00,0xF0,0x03,0xF8,0x07,0x3C,0x0E,0x1C,0x0E,0x1C,0x0E,0x1C,0x06,0x1C,0x07,0x9C,0x03,0x9C,0x03,0x9C,0x03,0x9C,0x07,0x1C,0x0F,0x1C,0x1E,0x1C,0x3C,0x1C,0x78,0x1C,0x70,0x1C,0x70,0x9C,0x70,0x9C,0x3F,0x1C,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE1 -.db 0xE0,0x03,0x70,0x07,0x38,0x0E,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE2 -.db 0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE3 -.db 0x00,0x00,0x00,0x00,0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0xE0,0x03,0xF8,0x0F,0x3C,0x1E,0x1C,0x1C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1C,0x1C,0x3C,0x1E,0xF8,0x0F,0xE0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE4 -.db 0xE0,0x0C,0xF0,0x0F,0x30,0x07,0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x0F,0x38,0x1C,0x1C,0x38,0x1C,0x38,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x38,0x1C,0xF0,0x0F,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE5 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x3C,0x3C,0x7C,0x3E,0xFC,0x3B,0xDC,0x7B,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00, ; 0xE6 -.db 0x00,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x9C,0x07,0xDC,0x1F,0x7C,0x1C,0x3C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x1C,0x3C,0x1E,0xFC,0x0F,0x9C,0x07,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00, ; 0xE7 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0xF8,0x1F,0xF8,0x3F,0x38,0x78,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x78,0x38,0x3C,0xF8,0x1F,0xF8,0x07,0x38,0x00,0x38,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE8 -.db 0x00,0x07,0x80,0x03,0xC0,0x01,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xE9 -.db 0xE0,0x03,0x70,0x07,0x38,0x0E,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xEA -.db 0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x3C,0x78,0x38,0x38,0xF0,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xEB -.db 0x00,0x00,0x00,0x06,0x00,0x03,0x80,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x1E,0x70,0x1C,0x30,0x1C,0x38,0x38,0x18,0x38,0x1C,0x78,0x1C,0x70,0x0E,0xF0,0x0E,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xC0,0x03,0xC0,0x01,0x80,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x7C,0x00,0x3C,0x00, ; 0xEC -.db 0x00,0x07,0x80,0x03,0xC0,0x01,0x00,0x00,0x00,0x00,0x07,0xE0,0x0E,0x70,0x1C,0x30,0x1C,0x18,0x38,0x1C,0x78,0x0E,0x70,0x07,0xE0,0x03,0xE0,0x03,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xED -.db 0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xEE -.db 0x80,0x03,0xC0,0x01,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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xEF -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x1F,0xF8,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF0 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xFE,0x7F,0xFE,0x7F,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00,0x00,0x00,0xFE,0x7F,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF1 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x00,0x00,0x00,0x00,0xFF,0xFF, ; 0xF2 -.db 0x00,0x00,0x00,0x00,0x7E,0xE0,0xFE,0x70,0xE0,0x38,0xE0,0x38,0x3C,0x1C,0x7C,0x1C,0xE0,0x0E,0xE0,0x07,0xFE,0x07,0xBE,0x3B,0xC0,0x3D,0xC0,0x3B,0xE0,0x39,0xF0,0x39,0xF0,0x38,0xF8,0xFF,0x38,0x38,0x1C,0x38,0x0E,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF3 -.db 0x00,0x00,0x00,0x00,0xF8,0x1F,0xFC,0x1F,0xFE,0x18,0xFE,0x18,0xFE,0x18,0xFE,0x18,0xFE,0x18,0xFC,0x18,0xF8,0x18,0xF0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0xC0,0x18,0x00,0x00, ; 0xF4 -.db 0x00,0x00,0x00,0x00,0xC0,0x1F,0xF0,0x1F,0x78,0x10,0x38,0x00,0x38,0x00,0x78,0x00,0xF0,0x01,0xE0,0x07,0xF0,0x0F,0x30,0x1E,0x38,0x3C,0x38,0x38,0x78,0x38,0xF0,0x19,0xE0,0x0F,0x80,0x0F,0x00,0x1E,0x00,0x3C,0x00,0x38,0x00,0x38,0x18,0x3C,0xF8,0x1F,0xE0,0x07,0x00,0x00, ; 0xF5 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF6 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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,0x80,0x03,0x00,0x06,0x00,0x06,0xC0,0x03, ; 0xF7 -.db 0x00,0x00,0x00,0x00,0xE0,0x00,0x10,0x01,0x10,0x01,0x10,0x01,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,0x00,0x00,0x00,0x00,0x00, ; 0xF8 -.db 0x30,0x0C,0x30,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFA -.db 0x00,0x00,0x00,0x00,0xE0,0x03,0xE0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFB -.db 0x00,0x00,0x00,0x00,0xE0,0x0F,0xF0,0x1F,0x10,0x1C,0x00,0x1C,0xC0,0x07,0xC0,0x0F,0x00,0x1C,0x00,0x1C,0xF0,0x1F,0xF0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFC -.db 0x00,0x00,0x00,0x00,0xE0,0x07,0xF0,0x1F,0x10,0x1C,0x00,0x1C,0x00,0x0E,0x80,0x07,0xC0,0x01,0x70,0x00,0xF0,0x1F,0xF0,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFD -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 diff --git a/avr/modules/lcd2/font/font4.asm b/avr/modules/lcd2/font/font4.asm deleted file mode 100644 index 9c44a07..0000000 --- a/avr/modules/lcd2/font/font4.asm +++ /dev/null @@ -1,258 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; This is a font from the project LCD_fonts at -; https://github.com/basti79/LCD-fonts.git -; which in turn is based on a post by Benedikt K. in a forum post on -; https://www.mikrocontroller.net/topic/54860 -; *************************************************************************** - - - -; *************************************************************************** -; code - -.cseg - - - -font4_12x16: -; header - .dw font12x16MonoHandlerFn ; handlerFn - .dw 384 ; needed buffer size - .db 12, 16 ; width, height of chars - .db 32, 224 ; first char, num of chars in font -; data (12x16_horizontal_LSB_2) -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 -.db 0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x21 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x98,0x01,0x98,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x22 -.db 0x00,0x00,0x60,0x06,0x60,0x06,0x60,0x06,0xFC,0x0F,0x30,0x03,0x30,0x03,0x98,0x01,0x98,0x01,0xFE,0x03,0xCC,0x00,0xCC,0x00,0xCC,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x23 -.db 0x60,0x00,0x60,0x00,0xF8,0x01,0xFC,0x03,0x6C,0x00,0x6C,0x00,0xFC,0x01,0xF8,0x03,0x60,0x03,0x60,0x03,0xFC,0x03,0xF8,0x01,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x24 -.db 0x00,0x00,0x00,0x00,0x00,0x08,0x1C,0x0C,0x1C,0x0E,0x1C,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x07,0x0E,0x07,0x06,0x07,0x00,0x00,0x00,0x00, ; 0x25 -.db 0x00,0x00,0xE0,0x00,0xB0,0x01,0x98,0x01,0x98,0x01,0xD8,0x00,0x70,0x00,0x78,0x00,0x7C,0x00,0xCC,0x06,0xCC,0x03,0x8C,0x01,0xDC,0x03,0x78,0x06,0x00,0x00,0x00,0x00, ; 0x26 -.db 0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x27 -.db 0xC0,0x01,0x60,0x00,0x70,0x00,0x30,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x38,0x00,0x30,0x00,0x70,0x00,0x60,0x00,0xC0,0x01,0x00,0x00,0x00,0x00, ; 0x28 -.db 0x38,0x00,0x60,0x00,0xE0,0x00,0xC0,0x00,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x60,0x00,0x38,0x00,0x00,0x00,0x00,0x00, ; 0x29 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x03,0x6C,0x03,0xF8,0x01,0xF0,0x00,0xFC,0x03,0xF0,0x00,0xF8,0x01,0x6C,0x03,0x6C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xFC,0x03,0xFC,0x03,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2B -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x30,0x00, ; 0x2C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00, ; 0x2E -.db 0x00,0x00,0x00,0x08,0x00,0x0C,0x00,0x0E,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x0E,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x2F -.db 0xF0,0x01,0xFC,0x07,0x0C,0x06,0x06,0x0E,0x06,0x0F,0x86,0x0D,0xC6,0x0C,0x66,0x0C,0x36,0x0C,0x1E,0x0C,0x0E,0x0C,0x0C,0x06,0xFC,0x07,0xF0,0x01,0x00,0x00,0x00,0x00, ; 0x30 -.db 0xC0,0x00,0xE0,0x00,0xF8,0x00,0xF8,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xF8,0x07,0xF8,0x07,0x00,0x00,0x00,0x00, ; 0x31 -.db 0xF8,0x03,0xFC,0x07,0x0E,0x0E,0x06,0x0C,0x06,0x0E,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0xFE,0x0F,0xFE,0x0F,0x00,0x00,0x00,0x00, ; 0x32 -.db 0xF8,0x03,0xFC,0x07,0x0E,0x0E,0x06,0x0C,0x00,0x0C,0x00,0x0E,0xF0,0x07,0xF0,0x03,0x00,0x06,0x00,0x0C,0x06,0x0C,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00, ; 0x33 -.db 0x80,0x03,0xC0,0x03,0xE0,0x03,0x70,0x03,0x38,0x03,0x1C,0x03,0x0E,0x03,0x06,0x03,0xFE,0x0F,0xFE,0x0F,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00, ; 0x34 -.db 0xFE,0x0F,0xFE,0x0F,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x03,0xFC,0x07,0x00,0x0E,0x00,0x0C,0x00,0x0C,0x06,0x0C,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00, ; 0x35 -.db 0xC0,0x03,0xE0,0x03,0x70,0x00,0x38,0x00,0x1C,0x00,0x0C,0x00,0xFE,0x03,0xFE,0x07,0x0E,0x0E,0x06,0x0C,0x06,0x0C,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00, ; 0x36 -.db 0xFE,0x0F,0xFE,0x0F,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x80,0x01,0x80,0x01,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00, ; 0x37 -.db 0xF0,0x01,0xF8,0x03,0x1C,0x07,0x0C,0x06,0x0C,0x06,0x1C,0x07,0xF8,0x03,0xFC,0x07,0x0E,0x0E,0x06,0x0C,0x06,0x0C,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00, ; 0x38 -.db 0xF8,0x03,0xFC,0x07,0x0E,0x0E,0x06,0x0C,0x06,0x0C,0x0E,0x0E,0xFC,0x0F,0xF8,0x0F,0x00,0x06,0x00,0x07,0x80,0x03,0xC0,0x01,0xF8,0x00,0x78,0x00,0x00,0x00,0x00,0x00, ; 0x39 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x30,0x00, ; 0x3B -.db 0x00,0x03,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x03,0x00,0x00,0x00,0x00, ; 0x3C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x07,0x00,0x00,0x00,0x00,0xFC,0x07,0xFC,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x3D -.db 0x0C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0xC0,0x01,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, ; 0x3E -.db 0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x07,0x80,0x03,0xC0,0x01,0xE0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x3F -.db 0xF8,0x03,0xFC,0x07,0x0C,0x06,0xE6,0x0D,0xF6,0x0D,0xB6,0x0D,0xB6,0x0D,0xB6,0x0D,0xB6,0x0D,0xF6,0x07,0xE6,0x03,0x0E,0x00,0xFC,0x03,0xF0,0x03,0x00,0x00,0x00,0x00, ; 0x40 -.db 0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFC,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x41 -.db 0xFE,0x00,0xFE,0x01,0x86,0x03,0x06,0x03,0x06,0x03,0x86,0x03,0xFE,0x01,0xFE,0x03,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x07,0xFE,0x03,0xFE,0x01,0x00,0x00,0x00,0x00, ; 0x42 -.db 0xF0,0x01,0xF8,0x03,0x1C,0x07,0x0C,0x06,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x06,0x1C,0x07,0xF8,0x03,0xF0,0x01,0x00,0x00,0x00,0x00, ; 0x43 -.db 0xFE,0x00,0xFE,0x01,0x86,0x03,0x06,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x03,0x86,0x03,0xFE,0x01,0xFE,0x00,0x00,0x00,0x00,0x00, ; 0x44 -.db 0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0x45 -.db 0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00, ; 0x46 -.db 0xF0,0x03,0xF8,0x07,0x1C,0x06,0x0C,0x00,0x06,0x00,0x06,0x00,0xC6,0x07,0xC6,0x07,0x06,0x06,0x06,0x06,0x0C,0x06,0x1C,0x06,0xF8,0x07,0xF0,0x07,0x00,0x00,0x00,0x00, ; 0x47 -.db 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xFE,0x07,0xFE,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x48 -.db 0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x49 -.db 0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x06,0x06,0x06,0x06,0x0E,0x03,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x4A -.db 0x06,0x06,0x06,0x07,0x86,0x03,0xC6,0x01,0xE6,0x00,0x76,0x00,0x3E,0x00,0x3E,0x00,0x76,0x00,0xE6,0x00,0xC6,0x01,0x86,0x03,0x06,0x07,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x4B -.db 0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0x4C -.db 0x06,0x06,0x0E,0x07,0x0E,0x07,0x9E,0x07,0x9E,0x07,0xF6,0x06,0xF6,0x06,0x66,0x06,0x66,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x4D -.db 0x06,0x06,0x0E,0x06,0x0E,0x06,0x1E,0x06,0x36,0x06,0x36,0x06,0x66,0x06,0x66,0x06,0xC6,0x06,0xC6,0x06,0x86,0x07,0x06,0x07,0x06,0x07,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x4E -.db 0xF0,0x00,0xF8,0x01,0x9C,0x03,0x0C,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0x9C,0x03,0xF8,0x01,0xF0,0x00,0x00,0x00,0x00,0x00, ; 0x4F -.db 0xFE,0x01,0xFE,0x03,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0xFE,0x03,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00, ; 0x50 -.db 0xF0,0x00,0xF8,0x01,0x9C,0x03,0x0C,0x03,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0xC6,0x06,0xCC,0x03,0x9C,0x03,0xF8,0x07,0xF0,0x06,0x00,0x00,0x00,0x00, ; 0x51 -.db 0xFE,0x01,0xFE,0x03,0x06,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0xFE,0x03,0xFE,0x01,0xE6,0x00,0xC6,0x01,0x86,0x03,0x06,0x07,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x52 -.db 0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x00,0x0E,0x00,0xFC,0x01,0xF8,0x03,0x00,0x07,0x00,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x53 -.db 0xFC,0x03,0xFC,0x03,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x54 -.db 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x55 -.db 0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x56 -.db 0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x06,0x66,0x06,0xF6,0x06,0x9E,0x07,0x0E,0x07,0x0E,0x07,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x57 -.db 0x06,0x06,0x06,0x06,0x0C,0x03,0x0C,0x03,0x98,0x01,0xF0,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x0C,0x03,0x0C,0x03,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x58 -.db 0x06,0x06,0x06,0x06,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x59 -.db 0xFE,0x07,0xFE,0x07,0x00,0x03,0x00,0x03,0x80,0x01,0xC0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0x0C,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0x5A -.db 0xF8,0x01,0xF8,0x01,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x5B -.db 0x00,0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x00,0x07,0x00,0x0E,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x5C -.db 0xF8,0x01,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x5D -.db 0x40,0x00,0xE0,0x00,0xF0,0x01,0xB8,0x03,0x1C,0x07,0x0E,0x0E,0x06,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x5E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x0F,0xFE,0x0F, ; 0x5F -.db 0x00,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x60 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0x61 -.db 0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xF6,0x01,0xFE,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x07,0xFE,0x03,0xFE,0x01,0x00,0x00,0x00,0x00, ; 0x62 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0x06,0x00,0x06,0x00,0x06,0x00,0x0E,0x06,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x63 -.db 0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0xF8,0x06,0xFC,0x07,0x8E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x06,0xFC,0x07,0xF8,0x07,0x00,0x00,0x00,0x00, ; 0x64 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0xFE,0x07,0xFE,0x03,0x06,0x00,0x0E,0x00,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x65 -.db 0xE0,0x01,0xF0,0x01,0x38,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0xFE,0x00,0xFE,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00, ; 0x66 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0xFC,0x07,0x0E,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x06,0x00,0x07,0xFC,0x03,0xFC,0x01, ; 0x67 -.db 0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0xF6,0x00,0xFE,0x01,0x8E,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x00,0x00,0x00,0x00, ; 0x68 -.db 0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x69 -.db 0x00,0x00,0x00,0x00,0x80,0x01,0x80,0x01,0x00,0x00,0xC0,0x01,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x98,0x01,0xF8,0x01,0xF0,0x00, ; 0x6A -.db 0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x8C,0x01,0xCC,0x01,0xEC,0x00,0x7C,0x00,0x7C,0x00,0xEC,0x00,0xCC,0x01,0x8C,0x03,0x0C,0x03,0x00,0x00,0x00,0x00, ; 0x6B -.db 0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x6C -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9A,0x01,0xFE,0x03,0xFE,0x07,0x66,0x06,0x66,0x06,0x66,0x06,0x66,0x06,0x66,0x06,0x66,0x06,0x00,0x00,0x00,0x00, ; 0x6D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x01,0xFC,0x03,0x0C,0x07,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x00,0x00,0x00,0x00, ; 0x6E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x6F -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0xFE,0x03,0x06,0x07,0x06,0x06,0x06,0x06,0x0E,0x07,0xFE,0x03,0xF6,0x01,0x06,0x00,0x06,0x00,0x06,0x00, ; 0x70 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x07,0xFC,0x07,0x0E,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x06,0x00,0x06,0x00,0x06, ; 0x71 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEC,0x03,0xFC,0x07,0x1C,0x06,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, ; 0x72 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0xFE,0x01,0x06,0x00,0xFE,0x00,0xFC,0x01,0x80,0x01,0x80,0x01,0xFE,0x01,0xFC,0x00,0x00,0x00,0x00,0x00, ; 0x73 -.db 0x00,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0xFE,0x00,0xFE,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0xF8,0x01,0xF0,0x01,0x00,0x00,0x00,0x00, ; 0x74 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0x75 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x76 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x06,0x66,0x06,0x66,0x06,0x66,0x06,0x66,0x06,0xF6,0x06,0xFC,0x03,0x9C,0x03,0x08,0x01,0x00,0x00,0x00,0x00, ; 0x77 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x8E,0x03,0xDC,0x01,0xF8,0x00,0x70,0x00,0xF8,0x00,0xDC,0x01,0x8E,0x03,0x06,0x03,0x00,0x00,0x00,0x00, ; 0x78 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00, ; 0x79 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x03,0xFE,0x01,0xC0,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x0C,0x00,0xFE,0x03,0xFE,0x03,0x00,0x00,0x00,0x00, ; 0x7A -.db 0xC0,0x03,0xE0,0x03,0x70,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x38,0x00,0x1C,0x00,0x38,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x70,0x00,0xE0,0x03,0xC0,0x03,0x00,0x00, ; 0x7B -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0x7C -.db 0x3C,0x00,0x7C,0x00,0xE0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x01,0x80,0x03,0xC0,0x01,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xE0,0x00,0x7C,0x00,0x3C,0x00,0x00,0x00, ; 0x7D -.db 0x00,0x00,0x00,0x00,0x38,0x06,0x6C,0x03,0xC6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x7E -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x0C,0x03,0x06,0x06,0x06,0x06,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x7F -.db 0xF0,0x01,0xF8,0x03,0x1C,0x07,0x0C,0x06,0x06,0x06,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x0C,0x06,0x1C,0x07,0xF8,0x03,0xF0,0x01,0x60,0x00,0x78,0x00,0x78,0x00, ; 0x80 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0x81 -.db 0x00,0x00,0x80,0x01,0xC0,0x00,0x60,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0xFE,0x07,0xFE,0x07,0x06,0x00,0x0E,0x00,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x82 -.db 0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0x83 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0x84 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0x85 -.db 0x00,0x00,0x60,0x00,0x90,0x00,0x60,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0x86 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x00,0x06,0x00,0x06,0x00,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x60,0x00,0x78,0x00, ; 0x87 -.db 0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x88 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x89 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x06,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x8A -.db 0x00,0x00,0x00,0x00,0xD8,0x00,0xD8,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x8B -.db 0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x00,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x8C -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x8D -.db 0x98,0x01,0x98,0x01,0x00,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x8E -.db 0x60,0x00,0x90,0x00,0x60,0x00,0x00,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0x8F -.db 0x80,0x01,0xC0,0x00,0x60,0x00,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0x90 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xBC,0x03,0x66,0x06,0x60,0x06,0xFC,0x03,0x66,0x00,0x66,0x00,0x66,0x06,0xDC,0x03,0x00,0x00,0x00,0x00, ; 0x91 -.db 0xE0,0x07,0xE0,0x07,0xF0,0x00,0xF0,0x00,0xF8,0x00,0xD8,0x00,0xD8,0x03,0xCC,0x03,0xCC,0x00,0xFC,0x00,0xFE,0x00,0xC6,0x00,0xC6,0x07,0xC6,0x07,0x00,0x00,0x00,0x00, ; 0x92 -.db 0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x93 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x94 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x95 -.db 0x00,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0x96 -.db 0x00,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0x97 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00, ; 0x98 -.db 0x98,0x01,0x98,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0x99 -.db 0x00,0x00,0x00,0x00,0x98,0x01,0x98,0x01,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0x9A -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x06,0xFC,0x03,0x8E,0x07,0xC6,0x06,0x66,0x06,0x36,0x06,0x1E,0x07,0xFC,0x03,0xF6,0x01,0x00,0x00,0x00,0x00, ; 0x9B -.db 0x00,0x00,0x00,0x00,0xE0,0x01,0xF0,0x03,0x30,0x03,0x30,0x00,0x30,0x00,0xF8,0x00,0x30,0x00,0x30,0x00,0x18,0x00,0xFC,0x07,0xDC,0x03,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9C -.db 0x00,0x00,0x00,0x00,0xF8,0x06,0xFC,0x03,0x8E,0x07,0xC6,0x06,0xC6,0x06,0x66,0x06,0x66,0x06,0x36,0x06,0x36,0x06,0x1E,0x07,0xFC,0x03,0xF6,0x01,0x00,0x00,0x00,0x00, ; 0x9D -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x03,0x98,0x01,0xF0,0x00,0x60,0x00,0xF0,0x00,0x98,0x01,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0x9E -.db 0xC0,0x01,0xE0,0x03,0x60,0x03,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x6C,0x00,0x7C,0x00,0x38,0x00,0x00,0x00, ; 0x9F -.db 0x00,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0xA0 -.db 0x00,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xA1 -.db 0x00,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xA2 -.db 0x00,0x00,0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x07,0xF8,0x06,0x00,0x00,0x00,0x00, ; 0xA3 -.db 0x00,0x00,0x00,0x00,0x70,0x03,0xD8,0x01,0x00,0x00,0xFC,0x01,0xFC,0x03,0x0C,0x07,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x06,0x00,0x00,0x00,0x00, ; 0xA4 -.db 0x70,0x03,0xD8,0x01,0x00,0x00,0x06,0x06,0x0E,0x06,0x1E,0x06,0x3E,0x06,0x76,0x06,0xE6,0x06,0xC6,0x07,0x86,0x07,0x06,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0xA5 -.db 0xF8,0x03,0xFC,0x07,0x00,0x06,0xFC,0x07,0xFE,0x07,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0xFC,0x03,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA6 -.db 0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0xFC,0x03,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA7 -.db 0x60,0x00,0x60,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x0E,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xA8 -.db 0x00,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x0E,0x0E,0xF6,0x0C,0xB6,0x0D,0xF6,0x0C,0xB6,0x0D,0xB6,0x0D,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xA9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x07,0xFF,0x07,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAA -.db 0x00,0x00,0x00,0x00,0x0C,0x00,0x0E,0x00,0x0C,0x03,0x8C,0x01,0xDE,0x00,0x60,0x00,0xB0,0x03,0x18,0x06,0x0C,0x03,0x80,0x01,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAB -.db 0x00,0x00,0x00,0x00,0x0C,0x00,0x0E,0x00,0x0C,0x03,0x8C,0x01,0xDE,0x00,0x60,0x00,0xB0,0x06,0xD8,0x06,0xCC,0x07,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAC -.db 0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0xAD -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x03,0x8C,0x01,0xC6,0x00,0x8C,0x01,0x18,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC6,0x00,0x8C,0x01,0x18,0x03,0x8C,0x01,0xC6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xAF -.db 0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04,0x11,0x01,0x44,0x04, ; 0xB0 -.db 0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05,0xAA,0x0A,0x55,0x05, ; 0xB1 -.db 0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B,0xEE,0x0E,0xBB,0x0B, ; 0xB2 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xB3 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xB4 -.db 0xC0,0x00,0x60,0x00,0x30,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0xB5 -.db 0x60,0x00,0xF0,0x00,0x98,0x01,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0xB6 -.db 0x30,0x00,0x60,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0xB7 -.db 0x00,0x00,0x00,0x00,0xF8,0x03,0xFC,0x07,0x0E,0x0E,0xE6,0x0C,0xB6,0x0D,0x36,0x0C,0xB6,0x0D,0xE6,0x0C,0x0E,0x0E,0xFC,0x07,0xF8,0x03,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xB8 -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6F,0x00,0x6F,0x00,0x60,0x00,0x6F,0x00,0x6F,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xB9 -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xBA -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x7F,0x00,0x60,0x00,0x6F,0x00,0x6F,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xBB -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6F,0x00,0x6F,0x00,0x60,0x00,0x7F,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xBC -.db 0x00,0x00,0x60,0x00,0x60,0x00,0xF0,0x01,0xF8,0x03,0x7C,0x03,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x7C,0x03,0xF8,0x03,0xF0,0x01,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0xBD -.db 0x06,0x06,0x06,0x06,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0xFC,0x03,0x60,0x00,0xFC,0x03,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0xBE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xBF -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xE0,0x0F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC0 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC1 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xC2 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xE0,0x0F,0xE0,0x0F,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xC3 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC4 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xFF,0x0F,0xFF,0x0F,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xC5 -.db 0x00,0x00,0x00,0x00,0x70,0x03,0xD8,0x01,0x00,0x00,0xF8,0x03,0xFC,0x07,0x00,0x06,0xF8,0x07,0xFC,0x07,0x06,0x06,0x06,0x06,0xFE,0x07,0xFC,0x07,0x00,0x00,0x00,0x00, ; 0xC6 -.db 0x70,0x03,0xD8,0x01,0x00,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0xF0,0x00,0x98,0x01,0x98,0x01,0x0C,0x03,0xFC,0x03,0xFE,0x07,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00, ; 0xC7 -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0xEC,0x0F,0xEC,0x0F,0x0C,0x00,0xFC,0x0F,0xFC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xC8 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x0F,0xFC,0x0F,0x0C,0x00,0xEC,0x0F,0xEC,0x0F,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xC9 -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0xEF,0x0F,0xEF,0x0F,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCA -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0xEF,0x0F,0xEF,0x0F,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xCB -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0xEC,0x0F,0xEC,0x0F,0x0C,0x00,0xEC,0x0F,0xEC,0x0F,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xCC -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCD -.db 0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0xEF,0x0F,0xEF,0x0F,0x00,0x00,0xEF,0x0F,0xEF,0x0F,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00,0x6C,0x00, ; 0xCE -.db 0x00,0x00,0x06,0x06,0xF6,0x06,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF6,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xCF -.db 0x00,0x00,0x00,0x00,0xF0,0x00,0xF8,0x01,0x18,0x01,0x18,0x00,0x38,0x00,0x70,0x00,0xE0,0x00,0xF0,0x01,0x98,0x01,0x98,0x01,0xF8,0x01,0xF0,0x00,0x00,0x00,0x00,0x00, ; 0xD0 -.db 0xFC,0x00,0xFC,0x01,0x8C,0x03,0x0C,0x03,0x0C,0x06,0x0C,0x06,0x1E,0x06,0x1E,0x06,0x0C,0x06,0x0C,0x06,0x0C,0x03,0x8C,0x03,0xFC,0x01,0xFC,0x00,0x00,0x00,0x00,0x00, ; 0xD1 -.db 0x60,0x00,0xF0,0x00,0x98,0x01,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0xD2 -.db 0x98,0x01,0x98,0x01,0x00,0x00,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0xD3 -.db 0x18,0x00,0x30,0x00,0x60,0x00,0xFE,0x07,0xFE,0x07,0x06,0x00,0x06,0x00,0xFE,0x01,0xFE,0x01,0x06,0x00,0x06,0x00,0x06,0x00,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00, ; 0xD4 -.db 0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD5 -.db 0x80,0x01,0xC0,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xD6 -.db 0x60,0x00,0xF0,0x00,0x98,0x01,0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xD7 -.db 0x98,0x01,0x98,0x01,0x00,0x00,0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xD8 -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7F,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xD9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0xE0,0x0F,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00, ; 0xDA -.db 0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F, ; 0xDB -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F, ; 0xDC -.db 0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0xDD -.db 0x18,0x00,0x30,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xDE -.db 0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0xFF,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xDF -.db 0x80,0x01,0xC0,0x00,0x60,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE0 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x98,0x01,0x0C,0x03,0x0C,0x03,0xFC,0x01,0x8C,0x03,0x0C,0x03,0x0C,0x03,0x8C,0x03,0xFC,0x01,0x0C,0x00,0x0C,0x00, ; 0xE1 -.db 0x60,0x00,0xF0,0x00,0x98,0x01,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE2 -.db 0x18,0x00,0x30,0x00,0x60,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE3 -.db 0x00,0x00,0x00,0x00,0xB8,0x01,0xEC,0x00,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE4 -.db 0x70,0x03,0xD8,0x01,0x00,0x00,0xF8,0x01,0xFC,0x03,0x0E,0x07,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0E,0x07,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE5 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x8E,0x03,0xFE,0x03,0x7E,0x03,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00, ; 0xE6 -.db 0x00,0x00,0x00,0x00,0x3C,0x00,0x3C,0x00,0x18,0x00,0xF8,0x01,0xF8,0x03,0x18,0x03,0x18,0x03,0xF8,0x03,0xF8,0x01,0x18,0x00,0x3C,0x00,0x3C,0x00,0x00,0x00,0x00,0x00, ; 0xE7 -.db 0x3C,0x00,0x3C,0x00,0x18,0x00,0xF8,0x01,0xF8,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0x18,0x03,0xF8,0x03,0xF8,0x01,0x18,0x00,0x3C,0x00,0x3C,0x00,0x00,0x00,0x00,0x00, ; 0xE8 -.db 0x80,0x01,0xC0,0x00,0x60,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xE9 -.db 0x60,0x00,0xF0,0x00,0x98,0x01,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xEA -.db 0x18,0x00,0x30,0x00,0x60,0x00,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x06,0x0C,0x03,0xFC,0x03,0xF8,0x01,0x00,0x00,0x00,0x00, ; 0xEB -.db 0x00,0x00,0x00,0x00,0x80,0x01,0xC0,0x00,0x60,0x00,0x0C,0x03,0x0C,0x03,0x98,0x01,0x98,0x01,0xF0,0x00,0xF0,0x00,0x60,0x00,0x60,0x00,0x30,0x00,0x30,0x00,0x18,0x00, ; 0xEC -.db 0x80,0x01,0xC0,0x00,0x60,0x00,0x06,0x06,0x0C,0x03,0x98,0x01,0xF0,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00, ; 0xED -.db 0x00,0x00,0x00,0x00,0xE0,0x01,0xE0,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, ; 0xEE -.db 0xC0,0x00,0x60,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xEF -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF0 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0xF8,0x01,0xF8,0x01,0x60,0x00,0x60,0x00,0x00,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF1 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0xF8,0x01,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF2 -.db 0x00,0x00,0x00,0x00,0x0E,0x00,0x18,0x00,0x0C,0x03,0x98,0x01,0xCE,0x00,0x60,0x00,0xB0,0x06,0xD8,0x06,0xCC,0x07,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF3 -.db 0x00,0x00,0xF8,0x07,0x6C,0x03,0x66,0x03,0x66,0x03,0x66,0x03,0x6C,0x03,0x78,0x03,0x60,0x03,0x60,0x03,0x60,0x03,0x60,0x03,0x60,0x03,0x60,0x03,0x00,0x00,0x00,0x00, ; 0xF4 -.db 0x00,0x00,0xF8,0x01,0x0C,0x03,0x0C,0x00,0x0C,0x00,0xF8,0x01,0x0C,0x03,0x0C,0x03,0xF8,0x01,0x00,0x03,0x00,0x03,0x0C,0x03,0xF8,0x01,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF5 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0xFC,0x03,0xFC,0x03,0x00,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF6 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF7 -.db 0xF0,0x00,0xF8,0x01,0x98,0x01,0x98,0x01,0xF8,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF8 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x01,0x9C,0x03,0x9C,0x03,0x08,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xF9 -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0xE0,0x00,0xE0,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFA -.db 0x18,0x00,0x1C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFB -.db 0x3C,0x00,0x60,0x00,0x38,0x00,0x60,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFC -.db 0x3C,0x00,0x60,0x00,0x38,0x00,0x0C,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFD -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFE -.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 - diff --git a/avr/modules/lcd2/font/font8x8.asm b/avr/modules/lcd2/font/font8x8.asm deleted file mode 100644 index 2f2d40a..0000000 --- a/avr/modules/lcd2/font/font8x8.asm +++ /dev/null @@ -1,108 +0,0 @@ -; *************************************************************************** -; copyright : (C) 2025 by Martin Preuss -; email : martin@libchipcard.de -; -; *************************************************************************** -; * This file is part of the project "AqHome". * -; * Please see toplevel file COPYING of that project for license details. * -; *************************************************************************** - - -; *************************************************************************** -; code - -.cseg - - - -; --------------------------------------------------------------------------- -; @routine font8x8MonoHandlerFn -; -; Handler for 8x8 Mono Fonts -; - -font8x8MonoHandlerFn: - cpi r23, FONT_FN_RENDER - breq font8x8MonoRenderCharacter - rjmp FONT_GenericHandler -; @end - - - - -; --------------------------------------------------------------------------- -; @routine font8x8RenderCharacter - -; @param R16 character to write -; @param R1:R0 background color -; @param R3:R2 foreground color -; @param Z pointer to font -; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel -; @clobbers r17, r24, r25, x - -font8x8MonoRenderCharacter: - push zl - push zh - rcall font8x8GetCharPosInFont8x8 ; (r17, r24, r25, z) - ldi r25, 8 ; 8 bytes -font8x8MonoRenderCharacter_loop1: - ldi r24, 8 ; 8 bits - lpm r17, Z+ -font8x8MonoRenderCharacter_loop2: - lsr r17 - brcs font8x8MonoRenderCharacter_writeForeground - st X+, r0 - st X+, r1 - rjmp font8x8MonoRenderCharacter_loop2end -font8x8MonoRenderCharacter_writeForeground: - st X+, r2 - st X+, r3 -font8x8MonoRenderCharacter_loop2end: - dec r24 - brne font8x8MonoRenderCharacter_loop2 - dec r25 - brne font8x8MonoRenderCharacter_loop1 - ldi r18, 8 - ldi r19, 8 - pop zh - pop zl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine font8x8GetCharPosInFont8x8 - -; @param R16 character to write -; @param Z pointer to font -; @return Z pointer to begin of char data -; @clobbers r17, r24, r25, z - -font8x8GetCharPosInFont8x8: - mov r24, r16 - adiw zh:zl, FONT_OFFS_FIRSTCHAR - lpm r24, Z+ ; first char num - lpm r25, Z+ ; num of chars - sub r16, r24 - brcs font8x8GetCharPosInFont8x8_ret - cp r16, r25 - brcc font8x8GetCharPosInFont8x8_ret - mov r24, r16 - clr r25 - lsl r24 ; x2 - rol r25 - lsl r24 ; x4 - rol r25 - lsl r24 ; x8 - rol r25 - add zl, r24 - adc zh, r25 -font8x8GetCharPosInFont8x8_ret: - ret -; @end - - - diff --git a/avr/modules/lcd2/font/main.asm b/avr/modules/lcd2/font/main.asm index d86a602..99ed01b 100644 --- a/avr/modules/lcd2/font/main.asm +++ b/avr/modules/lcd2/font/main.asm @@ -7,6 +7,9 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_FONT_MAIN_ASM +#define AQH_AVR_FONT_MAIN_ASM + ; *************************************************************************** @@ -24,8 +27,8 @@ ; @param R3:R2 foreground color ; @param Z pointer to font ; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel +; @return r18 char width in pixel +; @return r19 char height in pixel ; @clobbers any, !Z FONT_RenderChar: @@ -40,6 +43,7 @@ FONT_RenderChar: ; @routine FONT_GetCharWidth ; @param Z pointer to font +; @param R16 character for which to determine size ; @return R16 character width for given character set ; @clobbers any, !Z @@ -65,11 +69,11 @@ FONT_GetCharHeight: ; --------------------------------------------------------------------------- -; @routine FONT_GetStringWidth +; @routine FONT_GetStringWidthFlash -; @param Z pointer to font -; @param X pointer to null-terminated string in flash -; @return R16 character width for given character set +; @param Z pointer to font +; @param X pointer to null-terminated string in flash +; @return R17:R16 character width for given character set (in pixel) ; @clobbers any, !Z FONT_GetStringWidthFlash: @@ -80,14 +84,14 @@ FONT_GetStringWidthFlash: ; --------------------------------------------------------------------------- -; @routine FONT_GetStringHeight +; @routine FONT_GetStringHeightFlash ; @param Z pointer to font ; @param X pointer to null-terminated string in flash ; @return R16 character width for given character set ; @clobbers any, !Z -FONT_GetStringHeight: +FONT_GetStringHeightFlash: ldi r23, FONT_FN_GETSTRINGHEIGHT rjmp fontCallHandler ; @end @@ -130,38 +134,47 @@ FONT_GenericHandler: cpi r23, FONT_FN_GETSTRINGHEIGHT breq fontGenericFnGetStringHeight ret + fontGenericFnGetCharWidth: adiw zh:zl, FONT_OFFS_WIDTH - ld r16, X + lpm r16, Z sbiw zh:zl, FONT_OFFS_WIDTH ret + fontGenericFnGetCharHeight: adiw zh:zl, FONT_OFFS_HEIGHT - ld r16, X + lpm r16, Z sbiw zh:zl, FONT_OFFS_HEIGHT ret + fontGenericFnGetStringWidth: + clr r16 ; sum (LOW) + clr r17 ; sum (HIGH) adiw zh:zl, FONT_OFFS_WIDTH - ld r17, X + lpm r19, Z sbiw zh:zl, FONT_OFFS_WIDTH - clr r16 push zl push zh mov zl, xl mov zh, xh fontGenericFnGetStringWidth_loop: - lpm r18, Z+ + lpm r18, Z+ ; current byte in string tst r18 breq fontGenericFnGetStringWidth_loopEnd - add r16, r17 + add r16, r19 ; add char width to sum + adc r17, r19 + sub r17, r19 rjmp fontGenericFnGetStringWidth_loop fontGenericFnGetStringWidth_loopEnd: pop zh pop zl ret + fontGenericFnGetStringHeight: rjmp fontGenericFnGetCharHeight ; for now monospace fonts only ; @end +#endif ; AQH_AVR_FONT_MAIN_ASM + diff --git a/avr/modules/lcd2/gui/0BUILD b/avr/modules/lcd2/gui/0BUILD new file mode 100644 index 0000000..1d6fe97 --- /dev/null +++ b/avr/modules/lcd2/gui/0BUILD @@ -0,0 +1,13 @@ + + + + + + defs.asm + main.asm + window.asm + + + + + diff --git a/avr/modules/lcd2/gui/defs.asm b/avr/modules/lcd2/gui/defs.asm index a73cf3a..0ddc851 100644 --- a/avr/modules/lcd2/gui/defs.asm +++ b/avr/modules/lcd2/gui/defs.asm @@ -7,28 +7,28 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** -#ifndef AQH_AVR_GUI_H -#define AQH_AVR_GUI_H +#ifndef AQH_AVR_GUI_DEFS_ASM +#define AQH_AVR_GUI_DEFS_ASM -.equ SCR_OFFS_HANDLER_LO = 0 -.equ SCR_OFFS_HANDLER_HI = 1 -.equ SCR_OFFS_X_LO = 2 -.equ SCR_OFFS_X_HI = 3 -.equ SCR_OFFS_Y_LO = 4 -.equ SCR_OFFS_Y_HI = 5 -.equ SCR_OFFS_WIDTH_LO = 6 -.equ SCR_OFFS_WIDTH_HI = 7 -.equ SCR_OFFS_HEIGHT_LO = 8 -.equ SCR_OFFS_HEIGHT_HI = 9 -.equ SCR_OFFS_BG_COL_LO = 10 -.equ SCR_OFFS_BG_COL_HI = 11 -.equ SCR_OFFS_FG_COL_LO = 12 -.equ SCR_OFFS_FG_COL_HI = 13 -.equ SCR_OFFS_FONT_LO = 14 -.equ SCR_OFFS_FONT_HI = 15 -.equ SCR_SIZE = 16 +.equ WIN_OFFS_HANDLER_LO = 0 ; word address! +.equ WIN_OFFS_HANDLER_HI = 1 +.equ WIN_OFFS_X_LO = 2 +.equ WIN_OFFS_X_HI = 3 +.equ WIN_OFFS_Y_LO = 4 +.equ WIN_OFFS_Y_HI = 5 +.equ WIN_OFFS_WIDTH_LO = 6 +.equ WIN_OFFS_WIDTH_HI = 7 +.equ WIN_OFFS_HEIGHT_LO = 8 +.equ WIN_OFFS_HEIGHT_HI = 9 +.equ WIN_OFFS_BG_COL_LO = 10 +.equ WIN_OFFS_BG_COL_HI = 11 +.equ WIN_OFFS_FG_COL_LO = 12 +.equ WIN_OFFS_FG_COL_HI = 13 +.equ WIN_OFFS_FONT_LO = 14 ;byte address! +.equ WIN_OFFS_FONT_HI = 15 +.equ WIN_SIZE = 16 diff --git a/avr/modules/lcd2/gui/main.asm b/avr/modules/lcd2/gui/main.asm new file mode 100644 index 0000000..a78c443 --- /dev/null +++ b/avr/modules/lcd2/gui/main.asm @@ -0,0 +1,27 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_GUI_MAIN_ASM +#define AQH_AVR_GUI_MAIN_ASM + + +GUI_Init: + sec + ret +; @end + + + +GUI_Every100ms: + ret +; @end + + + +#endif diff --git a/avr/modules/lcd2/gui/window.asm b/avr/modules/lcd2/gui/window.asm new file mode 100644 index 0000000..1f8067d --- /dev/null +++ b/avr/modules/lcd2/gui/window.asm @@ -0,0 +1,368 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_GUI_WINDOW_ASM +#define AQH_AVR_GUI_WINDOW_ASM + + +; --------------------------------------------------------------------------- +; @routine Window_Clear @global +; +; @param Y pointer to screen object in SDRAM +; @clobbers any, !Y + +Window_Clear: + ldd r2, Y+WIN_OFFS_BG_COL_LO ; background color low + ldd r3, Y+WIN_OFFS_BG_COL_HI ; background color high + ldd r4, Y+WIN_OFFS_X_LO ; X low + ldd r5, Y+WIN_OFFS_X_HI ; X high + ldd r6, Y+WIN_OFFS_Y_LO ; Y low + ldd r7, Y+WIN_OFFS_Y_HI ; Y high + ldd r8, Y+WIN_OFFS_WIDTH_LO ; width low + ldd r9, Y+WIN_OFFS_WIDTH_HI ; width high + ldd r10, Y+WIN_OFFS_HEIGHT_LO ; height low + ldd r11, Y+WIN_OFFS_HEIGHT_HI ; height high + bigcall Display_FillRect + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine Window_DrawTextFlash @global +; +; @param Y pointer to screen object in SDRAM +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return R5:R4 X pos behind string +; @return R7:R6 Y pos behind string +; @clobbers any, !Y + +Window_DrawTextFlash: + rcall winCalcAbsPosAndBorders ; (R18, R19) + + ldd r0, Y+WIN_OFFS_BG_COL_LO + ldd r1, Y+WIN_OFFS_BG_COL_HI + ldd r2, Y+WIN_OFFS_FG_COL_LO + ldd r3, Y+WIN_OFFS_FG_COL_HI + +Window_DrawTextFlash_loop: + lpm r16, Z + tst r16 + breq Window_DrawTextFlash_loopEnd + rcall winDrawChar + brcc Window_DrawTextFlash_loopEnd + adiw zh:zl, 1 ; next char + rjmp Window_DrawTextFlash_loop +Window_DrawTextFlash_loopEnd: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine Window_DrawCharAt @global +; +; @param Y pointer to screen object in SDRAM +; @param R16 char to write +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return R5:R4 X pos behind char +; @clobbers any, !Y, !R6, !R7 + +Window_DrawCharAt: + rcall winCalcAbsPosAndBorders + + ldd r0, Y+WIN_OFFS_BG_COL_LO + ldd r1, Y+WIN_OFFS_BG_COL_HI + ldd r2, Y+WIN_OFFS_FG_COL_LO + ldd r3, Y+WIN_OFFS_FG_COL_HI + + rjmp winDrawChar +; @end + + + +; --------------------------------------------------------------------------- +; @routine winCalcAbsPosAndBorders +; +; @param Y pointer to screen object in SDRAM +; @param R5:R4 X relative to window +; @param R7:R6 Y relative to window +; @return R9:R8 first X pos right of windows +; @return R5:R4 X relative to screen +; @return R7:R6 Y relative to screen +; @return R9:R8 first X pos right of window (abs) +; @return R11:R10 first Y pos below window (abs) +; @clobbers r18, r19 + +winCalcAbsPosAndBorders: + ; calc abs X pos + ldd r18, Y+WIN_OFFS_X_LO + ldd r19, Y+WIN_OFFS_X_HI + add r4, r18 ; add X of window + adc r5, r19 + + ; calc first X pos behind window + ldd r8, Y+WIN_OFFS_WIDTH_LO + ldd r9, Y+WIN_OFFS_WIDTH_HI + add r8, r18 + adc r9, r19 + + ; calc abs Y pos + ldd r18, Y+WIN_OFFS_Y_LO + ldd r19, Y+WIN_OFFS_Y_HI + add r6, r18 ; add Y of window + adc r7, r19 + + ; calc first Y pos behind window + ldd r10, Y+WIN_OFFS_HEIGHT_LO + ldd r11, Y+WIN_OFFS_HEIGHT_HI + add r10, r18 + adc r11, r19 + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine winDrawChar +; +; @param Y pointer to screen object in SDRAM +; @param R16 char to write +; @param R5:R4 absolute X on screen +; @param R7:R6 absolute Y on screen +; @param R9:R8 first X pos right of windows +; @return R5:R4 X pos behind char +; @clobbers any, !Y, !R6, !R7 + +winDrawChar: + push zl + push zh + mov r12, r16 + ldd zl, Y+WIN_OFFS_FONT_LO + ldd zh, Y+WIN_OFFS_FONT_HI + + ; check whether the char fits inside window + bigcall FONT_GetCharWidth ; r16=char width + + clr r17 + add r16, r4 ; char width+X + adc r17, r5 + sub r16, r8 ; check against window width + sbc r17, r9 + brcc winDrawChar_ret ; not fit, jmp + + ; actually draw char + mov r16, r12 + push r8 + push r9 + push r10 + push r11 + bigcall Display_DrawChar + pop r11 + pop r10 + pop r9 + pop r8 + clr r16 + add r4, r18 ; increment X + adc r5, r16 + sec ; write succeeded +winDrawChar_ret: + pop zh + pop zl + ret +; @end + + + + + + +#if 0 +; --------------------------------------------------------------------------- +; @routine Window_DrawTextFlash @global +; +; @param Y pointer to screen object in SDRAM +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return R5:R4 X pos behind string +; @return R7:R6 Y pos behind string +; @clobbers any, !Y + +Window_DrawTextFlash: + ; calc abs X pos + ldd r18, Y+WIN_OFFS_X_LO + ldd r19, Y+WIN_OFFS_X_HI + add r4, r18 ; add X of window + adc r5, r19 + + ; calc first X pos behind window + ldd r8, Y+WIN_OFFS_WIDTH_LO + ldd r9, Y+WIN_OFFS_WIDTH_HI + add r8, r18 + adc r9, r19 + + ; calc abs Y pos + ldd r18, Y+WIN_OFFS_Y_LO + ldd r19, Y+WIN_OFFS_Y_HI + add r6, r18 ; add Y of window + adc r7, r19 + + ; calc first Y pos behind window + ldd r10, Y+WIN_OFFS_HEIGHT_LO + ldd r11, Y+WIN_OFFS_HEIGHT_HI + add r10, r18 + adc r11, r19 + +Window_DrawTextFlash_loop: + push zl + push zh + rcall winCalcLengthWordFlash + pop zh + pop zl + mov r18, r4 + mov r19, r5 + add r18, r12 + adc r19, r13 + sub r18, r8 + sbc r19, r9 + brcs Window_DrawTextFlash_xOkay + ; we need to go to the beginning of the next line + rcall Window_DrawTextFlash_nextLine + brcc Window_DrawTextFlash_loopEnd ; outside the window, jmp +Window_DrawTextFlash_xOkay: + rcall winDrawWordFlash ; Z points at blank/0 byte after call + lpm r16, Z+ + tst r16 ; end of string? + breq Window_DrawTextFlash_loopEnd + cpi r16, 13 + breq Window_DrawTextFlash_handle13 + ; insert other handled chars here + ; write blank char + push zl + push zh + ldd zl, Y+WIN_OFFS_FONT_LO + ldd zh, Y+WIN_OFFS_FONT_HI + ldi r16, 32 ; space + bigcall Display_DrawChar + pop zh + pop zl + add r4, r8 ; increment X + adc r5, r9 + + + rjmp Window_DrawTextFlash_loopNext +Window_DrawTextFlash_handle13: + rcall Window_DrawTextFlash_nextLine +Window_DrawTextFlash_loopNext: + rjmp Window_DrawTextFlash_loop +Window_DrawTextFlash_nextLine: + push zl + push zh + ldd zl, Y+WIN_OFFS_FONT_LO + ldd zh, Y+WIN_OFFS_FONT_HI + bigcall FONT_GetCharWidth ; r16=char width + pop zh + pop zl + ldd r4, Y+WIN_OFFS_X_LO ; X=left border + ldd r5, Y+WIN_OFFS_X_HI + clr r17 + add r6, r16 ; increment Y by font height + adc r7, r17 + mov r16, r6 ; check against lower border of window + mov r17, r7 + sub r16, r10 + sbc r17, r11 ; CF set if inside window, cleared otherwise + ret +Window_DrawTextFlash_loopEnd: + ret +; @end + + + + +; --------------------------------------------------------------------------- +; @routine winDrawWordFlash +; +; @param Y pointer to screen object in SDRAM +; @param Z pointer to string in FLASH +; @param R1:R0 background color +; @param R3:R2 foreground color +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @return r5:r4 next X pos +; @return Z pointer to next char behind current word +; @clobbers any, !Y, !r1-r15 + +winDrawWordFlash: +winDrawWordFlash_loop: + lpm r16, Z + cpi r16, 33 + brcs winDrawWordFlash_ret + push zl + push zh + ldd zl, Y+WIN_OFFS_FONT_LO + ldd zh, Y+WIN_OFFS_FONT_HI + bigcall Display_DrawChar + pop zh + pop zl + clr r16 + add r4, r18 ; increment X + adc r5, r16 + adiw zh:zl, 1 + rjmp winDrawWordFlash_loop +winDrawWordFlash_ret: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine winCalcLengthWordFlash +; +; @param Y pointer to screen object in SDRAM +; @param Z pointer to string in FLASH +; @return r13:r12 width of next word in pixels +; @return Z pointer to next char behind current word +; @clobbers any, !Y, !r1-r11, !r14, !r15 + +winCalcLengthWordFlash: + clr r12 + clr r13 +winCalcLengthWordFlash_loop: + lpm r16, Z + cpi r16, 33 + brcs winCalcLengthWordFlash_ret + push zl + push zh + ldd zl, Y+WIN_OFFS_FONT_LO + ldd zh, Y+WIN_OFFS_FONT_HI + bigcall FONT_GetCharWidth ; r16=char width + clr r17 + add r12, r16 + adc r13, r17 + pop zh + pop zl + brcs winCalcLengthWordFlash_error + adiw zh:zl, 1 ; next char + rjmp winCalcLengthWordFlash_loop +winCalcLengthWordFlash_error: + ldi r12, 0xff + ldi r13, 0xff +winCalcLengthWordFlash_ret: + ret +; @end + +#endif ; if 0 + + + +#endif + diff --git a/avr/modules/lcd2/ili9341/0BUILD b/avr/modules/lcd2/ili9341/0BUILD index febd367..48a5458 100644 --- a/avr/modules/lcd2/ili9341/0BUILD +++ b/avr/modules/lcd2/ili9341/0BUILD @@ -3,6 +3,13 @@ + defs.asm + font12x20.asm + font12x20_1.asm + font6x8.asm + font6x8_1.asm + graphops.asm + io_spi.asm main.asm diff --git a/avr/modules/lcd2/ili9341/README b/avr/modules/lcd2/ili9341/README new file mode 100644 index 0000000..437c411 --- /dev/null +++ b/avr/modules/lcd2/ili9341/README @@ -0,0 +1,16 @@ + + + +Display API Implementation for ILI9341 Displays + + +- Display_FillRect +- Display_BitBlit +- Display_WriteChar + +- Display_DrawHLine +- Display_DrawVLine + +later +- Display_DrawLine + diff --git a/avr/modules/lcd2/ili9341/colors.asm b/avr/modules/lcd2/ili9341/colors.asm new file mode 100644 index 0000000..5b2fc42 --- /dev/null +++ b/avr/modules/lcd2/ili9341/colors.asm @@ -0,0 +1,23 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_ILI9341_COLORS_ASM +#define AQH_AVR_ILI9341_COLORS_ASM + + + +; FEDCBA9876543210 +; 0bRRRRRGGGGGGBBBBB + +#define DISPLAY_COLOR_FROM_RGB(r, g, b) ((r<<11) | (g<<5) | (b & 0x1f)) + + + + +#endif diff --git a/avr/modules/lcd2/ili9341/defs.asm b/avr/modules/lcd2/ili9341/defs.asm index aa37ed7..698d8af 100644 --- a/avr/modules/lcd2/ili9341/defs.asm +++ b/avr/modules/lcd2/ili9341/defs.asm @@ -1,3 +1,14 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_ILI9341_DEFS_ASM +#define AQH_AVR_ILI9341_DEFS_ASM @@ -58,4 +69,5 @@ +#endif ; AQH_AVR_ILI9341_DEFS_ASM diff --git a/avr/modules/lcd2/font/font12x20.asm b/avr/modules/lcd2/ili9341/font12x20.asm similarity index 54% rename from avr/modules/lcd2/font/font12x20.asm rename to avr/modules/lcd2/ili9341/font12x20.asm index 73ac5bb..f9e4ca2 100644 --- a/avr/modules/lcd2/font/font12x20.asm +++ b/avr/modules/lcd2/ili9341/font12x20.asm @@ -7,6 +7,10 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_FONT12X20_ASM +#define AQH_AVR_ILI9341_FONT12X20_ASM + + ; *************************************************************************** ; code @@ -14,16 +18,15 @@ .cseg - ; --------------------------------------------------------------------------- -; @routine font12x20MonoHandlerFn +; @routine ili9341Font12x20MonoHandlerFn ; ; Handler for 12x20 Mono Fonts ; -font12x20MonoHandlerFn: +ili9341Font12x20MonoHandlerFn: cpi r23, FONT_FN_RENDER - breq font12x20MonoRenderCharacter + breq ili9341Font12x20MonoRenderChar bigjmp FONT_GenericHandler ; @end @@ -31,45 +34,49 @@ font12x20MonoHandlerFn: ; --------------------------------------------------------------------------- -; @routine font12x20RenderCharacter +; @routine ili9341Font12x20RenderCharacter ; @param R16 character to write ; @param R1:R0 background color ; @param R3:R2 foreground color ; @param Z pointer to font -; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel -; @clobbers r17, r18, r23, r24, r25, x +; @return r18 char width in pixel +; @return r19 char height in pixel +; @clobbers r17, r18, r19, r23, r24, r25, x -font12x20MonoRenderCharacter: +ili9341Font12x20MonoRenderChar: push zl push zh - rcall font12x20GetCharPosInFont ; (r17, r24, r25, z) + rcall ili9341Font12x20GetCharPosInFont ; (r17, r24, r25, z) ldi r25, 20 ; 20 bytes height -font12x20MonoRenderCharacter_loop1: +ili9341Font12x20MonoRenderChar_loop1: ldi r24, 12 ; 16 bits - ldi r23, 8 - lpm r17, Z+ -font12x20MonoRenderCharacter_loop2: + ldi r23, 8 ; bit counter + lpm r17, Z+ ; current font byte +ili9341Font12x20MonoRenderChar_loop2: dec r23 - brne font12x20MonoRenderCharacter_haveByte + brne ili9341Font12x20MonoRenderChar_haveByte lpm r17, Z+ ldi r23, 8 -font12x20MonoRenderCharacter_haveByte: +ili9341Font12x20MonoRenderChar_haveByte: lsr r17 - brcs font12x20MonoRenderCharacter_writeForeground - st X+, r0 - st X+, r1 - rjmp font12x20MonoRenderCharacter_loop2end -font12x20MonoRenderCharacter_writeForeground: - st X+, r2 - st X+, r3 -font12x20MonoRenderCharacter_loop2end: + brcs ili9341Font12x20MonoRenderChar_writeForeground + mov r18, r0 + mov r19, r1 + rjmp ili9341Font12x20MonoRenderChar_sendToDisplay +ili9341Font12x20MonoRenderChar_writeForeground: + mov r18, r2 + mov r19, r3 +ili9341Font12x20MonoRenderChar_sendToDisplay: + mov r16, r18 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r19 + rcall SPIHW_MasterTransfer ; (R16) +ili9341Font12x20MonoRenderChar_loop2end: dec r24 - brne font12x20MonoRenderCharacter_loop2 + brne ili9341Font12x20MonoRenderChar_loop2 dec r25 - brne font12x20MonoRenderCharacter_loop1 + brne ili9341Font12x20MonoRenderChar_loop1 ldi r18, 12 ldi r19, 20 pop zh @@ -80,22 +87,22 @@ font12x20MonoRenderCharacter_loop2end: ; --------------------------------------------------------------------------- -; @routine font12x20GetCharPosInFont +; @routine ili9341Font12x20GetCharPosInFont ; @param R16 character to write ; @param Z pointer to font ; @return Z pointer to begin of char data ; @clobbers r17, r24, r25, z -font12x20GetCharPosInFont: +ili9341Font12x20GetCharPosInFont: mov r24, r16 adiw zh:zl, FONT_OFFS_FIRSTCHAR lpm r24, Z+ ; first char num lpm r25, Z+ ; num of chars sub r16, r24 - brcs font12x20GetCharPosInFont_ret + brcs ili9341Font12x20GetCharPosInFont_ret cp r16, r25 - brcc font12x20GetCharPosInFont_ret + brcc ili9341Font12x20GetCharPosInFont_ret mov r24, r16 clr r25 @@ -121,9 +128,11 @@ font12x20GetCharPosInFont: add zl, r24 adc zh, r25 -font12x20GetCharPosInFont_ret: +ili9341Font12x20GetCharPosInFont_ret: ret ; @end +#endif ; AQH_AVR_ILI9341_FONT12X20_ASM + diff --git a/avr/modules/lcd2/font/font5.asm b/avr/modules/lcd2/ili9341/font12x20_1.asm similarity index 99% rename from avr/modules/lcd2/font/font5.asm rename to avr/modules/lcd2/ili9341/font12x20_1.asm index afe78fc..5bc00ab 100644 --- a/avr/modules/lcd2/font/font5.asm +++ b/avr/modules/lcd2/ili9341/font12x20_1.asm @@ -15,6 +15,9 @@ ; https://www.mikrocontroller.net/topic/54860 ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_FONT12X20_1_ASM +#define AQH_AVR_ILI9341_FONT12X20_1_ASM + ; *************************************************************************** @@ -24,9 +27,9 @@ -font5_12x20: +ili9341Font12x20_1: ; header - .dw font12x20MonoHandlerFn ; handlerFn + .dw ili9341Font12x20MonoHandlerFn ; handlerFn .dw 480 ; needed buffer size .db 12, 20 ; width, height of chars .db 32, 224 ; first char, num of chars in font @@ -256,3 +259,5 @@ font5_12x20: .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ; 0xFE .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,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 + +#endif ; AQH_AVR_ILI9341_FONT12X20_1_ASM diff --git a/avr/modules/lcd2/font/font6x8.asm b/avr/modules/lcd2/ili9341/font6x8.asm similarity index 52% rename from avr/modules/lcd2/font/font6x8.asm rename to avr/modules/lcd2/ili9341/font6x8.asm index 124d44a..2dc006a 100644 --- a/avr/modules/lcd2/font/font6x8.asm +++ b/avr/modules/lcd2/ili9341/font6x8.asm @@ -7,6 +7,11 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_FONT6X8_ASM +#define AQH_AVR_ILI9341_FONT6X8_ASM + + + ; *************************************************************************** ; code @@ -16,57 +21,63 @@ ; --------------------------------------------------------------------------- -; @routine font6x8MonoHandlerFn +; @routine ili9341Font6x8MonoHandlerFn ; ; Handler for 6x8 Mono Fonts ; -font6x8MonoHandlerFn: +ili9341Font6x8MonoHandlerFn: cpi r23, FONT_FN_RENDER - breq font6x8MonoRenderCharacter + breq ili9341Font6x8WriteChar rjmp FONT_GenericHandler ; @end + ; --------------------------------------------------------------------------- -; @routine font6x8RenderCharacter +; @routine ili9341Font6x8WriteChar ; @param R16 character to write ; @param R1:R0 background color ; @param R3:R2 foreground color ; @param Z pointer to font -; @param X pointer to RAM to store data to -; @param r18 char width in pixel -; @param r19 char height in pixel -; @clobbers r16, r17, r24, r25, x +; @return R18 width of char in pixels +; @return R19 height of char in pixels +; @clobbers r16, r17, r18, r19, r22, r23, r24, r25 -font6x8MonoRenderCharacter: +ili9341Font6x8WriteChar: push zl push zh adiw zh:zl, FONT_OFFS_WIDTH lpm r18, Z+ ; char width in pixels lpm r19, Z ; char height in pixels sbiw zh:zl, FONT_OFFS_WIDTH+1 - rcall font6x8GetCharPosInFont ; (r16, r17, r24, r25, z) - mov r25, r19 ; height in pixels -font6x8MonoRenderCharacter_loop1: - mov r24, r18 ; width in pixels - lpm r17, Z+ -font6x8MonoRenderCharacter_loop2: + rcall ili9341Font6x8GetCharPosInFont ; (r16, r24, r25, z) + mov r25, r19 ; height in pixels +ili9341Font6x8WriteChar_loop1: + mov r24, r18 ; width in pixels + lpm r17, Z+ ; font data +ili9341Font6x8WriteChar_loop2: lsr r17 - brcs font6x8MonoRenderCharacter_writeForeground - st X+, r0 - st X+, r1 - rjmp font6x8MonoRenderCharacter_loop2end -font6x8MonoRenderCharacter_writeForeground: - st X+, r2 - st X+, r3 -font6x8MonoRenderCharacter_loop2end: + brcs ili9341Font6x8WriteChar_writeForeground + mov r22, r0 + mov r23, r1 + rjmp ili9341Font6x8WriteChar_sendToDisplay +ili9341Font6x8WriteChar_writeForeground: + mov r22, r2 + mov r23, r3 +ili9341Font6x8WriteChar_sendToDisplay: + mov r16, r23 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r22 + rcall SPIHW_MasterTransfer ; (R16) +ili9341Font6x8WriteChar_loop2end: dec r24 - brne font6x8MonoRenderCharacter_loop2 + brne ili9341Font6x8WriteChar_loop2 dec r25 - brne font6x8MonoRenderCharacter_loop1 + brne ili9341Font6x8WriteChar_loop1 +ili9341Font6x8WriteChar_end: pop zh pop zl ret @@ -75,22 +86,22 @@ font6x8MonoRenderCharacter_loop2end: ; --------------------------------------------------------------------------- -; @routine font6x8GetCharPosInFont (same as font8x8GetCharPosInFont!) +; @routine ili9341Font6x8GetCharPosInFont (same as font8x8GetCharPosInFont!) ; @param R16 character to write ; @param Z pointer to font ; @return Z pointer to begin of char data -; @clobbers r16, r17, r24, r25, z +; @clobbers r16, r24, r25, z -font6x8GetCharPosInFont: - mov r24, r16 +ili9341Font6x8GetCharPosInFont: adiw zh:zl, FONT_OFFS_FIRSTCHAR lpm r24, Z+ ; first char num lpm r25, Z+ ; num of chars + ; Z now points to begin of font data sub r16, r24 - brcs font6x8GetCharPosInFont_ret + brcs ili9341Font6x8GetCharPosInFont_ret cp r16, r25 - brcc font6x8GetCharPosInFont_ret + brcc ili9341Font6x8GetCharPosInFont_ret mov r24, r16 clr r25 lsl r24 ; x2 @@ -101,9 +112,11 @@ font6x8GetCharPosInFont: rol r25 add zl, r24 adc zh, r25 -font6x8GetCharPosInFont_ret: +ili9341Font6x8GetCharPosInFont_ret: ret ; @end +#endif ; AQH_AVR_ILI9341_FONT6X8_ASM + diff --git a/avr/modules/lcd2/font/font2.asm b/avr/modules/lcd2/ili9341/font6x8_1.asm similarity index 98% rename from avr/modules/lcd2/font/font2.asm rename to avr/modules/lcd2/ili9341/font6x8_1.asm index 973b932..298d37b 100644 --- a/avr/modules/lcd2/font/font2.asm +++ b/avr/modules/lcd2/ili9341/font6x8_1.asm @@ -15,6 +15,10 @@ ; https://www.mikrocontroller.net/topic/54860 ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_FONT6X8_1_ASM +#define AQH_AVR_ILI9341_FONT6X8_1_ASM + + ; *************************************************************************** @@ -24,9 +28,9 @@ -font2_6x8: +ili9341Font6x8_1: ; header - .dw font6x8MonoHandlerFn ; handlerFn + .dw ili9341Font6x8MonoHandlerFn ; handlerFn .db 96, 0 ; needed buffer size .db 6, 8 ; width, height of chars .db 32, 224 ; first char, num of chars in font @@ -255,3 +259,7 @@ font2_6x8: .db 0x06,0x08,0x04,0x0E,0x00,0x00,0x00,0x00, ; 0xFD .db 0x00,0x00,0x1E,0x1E,0x1E,0x1E,0x00,0x00, ; 0xFE .db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; 0xFF + + +#endif ; AQH_AVR_ILI9341_FONT6X8_1_ASM + diff --git a/avr/modules/lcd2/ili9341/graphops.asm b/avr/modules/lcd2/ili9341/graphops.asm index 22aa62a..ba1fc09 100644 --- a/avr/modules/lcd2/ili9341/graphops.asm +++ b/avr/modules/lcd2/ili9341/graphops.asm @@ -7,75 +7,21 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_GRAPHOPS_ASM +#define AQH_AVR_ILI9341_GRAPHOPS_ASM + + ; --------------------------------------------------------------------------- -; @routine ili9341SetAddressWindow +; @routine Display_FillRect @global ; -; @param r5:r4 X0 -; @param r7:r6 Y0 -; @param r9:r8 W -; @param r11:r10 H -; @clobbers R16, r20, r21 - -ili9341SetAddressWindow: - ; calc XEnd (=X+W-1) - mov r20, r8 - mov r21, r9 - add r20, r4 - adc r21, r5 - subi r20, 1 - sbci r21, 0 - - ; send column address - ldi r16, ILI9341_CMD_CASET - rcall ili9341SendCommand - ; X0 - mov r16, r5 - rcall ili9341SendData - mov r16, r4 - rcall ili9341SendData - ; X1 - mov r16, r21 - rcall ili9341SendData - mov r16, r20 - rcall ili9341SendData - - ; calc YEnd (=Y+H-1) - mov r20, r10 - mov r21, r11 - add r20, r6 - adc r21, r7 - subi r20, 1 - sbci r21, 0 - - ; send row address - ldi r16, ILI9341_CMD_PASET - rcall ili9341SendCommand - ; Y0 - mov r16, r7 - rcall ili9341SendData - mov r16, r6 - rcall ili9341SendData - ; Y1 - mov r16, r21 - rcall ili9341SendData - mov r16, r20 - rcall ili9341SendData - - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine ILI9341_FillRect ; @param r3:r2 color ; @param r5:r4 X0 ; @param r7:r6 Y0 ; @param r9:r8 X1/W ; @param r11:r10 Y1/H -ILI9341_FillRect: +Display_FillRect: push r15 in r15, SREG cli @@ -87,28 +33,28 @@ ILI9341_FillRect: mov r19, r3 mov r22, r10 ; H low mov r23, r11 ; H high - ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM - rcall ili9341SendCommand + ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM + rcall ili9341SendCommand ; (R16) cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) -ILI9341_FillRect_loopH: +Display_FillRect_loopH: mov r24, r8 ; W low mov r25, r9 ; W high -ILI9341_FillRect_loopW: +Display_FillRect_loopW: mov r16, r19 - rcall SPIHW_MasterTransfer + rcall SPIHW_MasterTransfer ; (R16) mov r16, r18 - rcall SPIHW_MasterTransfer + rcall SPIHW_MasterTransfer ; (R16) sbiw r25:r24, 1 - brne ILI9341_FillRect_loopW + brne Display_FillRect_loopW mov r24, r22 ; H low mov r25, r23 ; H high sbiw r25:r24, 1 ; dec mov r22, r24 ; save in r23:r22 mov r23, r25 - brne ILI9341_FillRect_loopH - sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + brne Display_FillRect_loopH + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high rcall ili9341EndSpi out SREG, r15 pop r15 @@ -118,7 +64,62 @@ ILI9341_FillRect_loopW: ; --------------------------------------------------------------------------- -; @routine ili9341BitBlit +; @routine Display_DrawChar @global + +; @param R16 character to write +; @param R1:R0 background color +; @param R3:R2 foreground color +; @param R5:R4 X (dest) +; @param R7:R6 Y (dest) +; @param Z pointer to font +; @return R18 width of char written (in pixel) +; @return R19 height of char written (in pixel) +; @clobbers any, !Z + +Display_DrawChar: + push r15 + in r15, SREG + cli + + push zl + push zh + mov r22, r16 ; save char to R22 + adiw zh:zl, FONT_OFFS_WIDTH + lpm r8, Z+ ; char width in pixels + clr r9 + lpm r10, Z ; char height in pixels + clr r11 + sbiw zh:zl, FONT_OFFS_WIDTH+1 + + rcall ili9341BeginSpi ; (r16, r17) + rcall ili9341SetAddressWindow ; (R16, R20, R21) + + ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM + rcall ili9341SendCommand ; (R16) + + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) + + mov r16, r22 ; char to write + rcall FONT_RenderChar ; (any) + pop zh + pop zl + + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + rcall ili9341EndSpi ; (R16) + + out SREG, r15 + pop r15 + ret +; @end + + + + + + +; --------------------------------------------------------------------------- +; @routine Display_BitBlit @global ; @param r5:r4 X (dest) ; @param r7:r6 Y (dest) @@ -127,7 +128,7 @@ ILI9341_FillRect_loopW: ; @param X source data pointer (RAM) ; @clobbers r16, r22, r23, r24, r25, X (r17, r20, r21) -ili9341BitBlit: +Display_BitBlit: push r15 in r15, SREG cli @@ -138,30 +139,30 @@ ili9341BitBlit: ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM rcall ili9341SendCommand - mov r22, r10 + mov r22, r10 ; store remaining height mov r23, r11 cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) -ili9341BitBlit_loopH: - mov r24, r8 +Display_BitBlit_loopH: + mov r24, r8 ; r25:r24=width in pixel mov r25, r9 -ili9341BitBlit_loopW: - ld r18, X+ +Display_BitBlit_loopW: + ld r18, X+ ; read color from X ld r19, X+ mov r16, r19 - rcall SPIHW_MasterTransfer ; (R16) + rcall SPIHW_MasterTransfer ; (R16) mov r16, r18 - rcall SPIHW_MasterTransfer ; (R16) + rcall SPIHW_MasterTransfer ; (R16) sbiw r25:r24, 1 - brne ili9341BitBlit_loopW + brne Display_BitBlit_loopW mov r24, r22 mov r25, r23 sbiw r25:r24, 1 mov r22, r24 mov r23, r25 - brne ili9341BitBlit_loopH - sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high - rcall ili9341EndSpi ; (R16) + brne Display_BitBlit_loopH + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + rcall ili9341EndSpi ; (R16) out SREG, r15 pop r15 ret @@ -333,4 +334,67 @@ ili9341BitBlitStretchNWriteLine_loop2: +; --------------------------------------------------------------------------- +; @routine ili9341SetAddressWindow +; +; @param r5:r4 X0 +; @param r7:r6 Y0 +; @param r9:r8 W +; @param r11:r10 H +; @clobbers R16, r20, r21 + +ili9341SetAddressWindow: + ; calc XEnd (=X+W-1) + mov r20, r8 + mov r21, r9 + add r20, r4 + adc r21, r5 + subi r20, 1 + sbci r21, 0 + + ; send column address + ldi r16, ILI9341_CMD_CASET + rcall ili9341SendCommand ; (R16) + ; X0 + mov r16, r5 + rcall ili9341SendData ; (R16) + mov r16, r4 + rcall ili9341SendData ; (R16) + ; X1 + mov r16, r21 + rcall ili9341SendData ; (R16) + mov r16, r20 + rcall ili9341SendData ; (R16) + + ; calc YEnd (=Y+H-1) + mov r20, r10 + mov r21, r11 + add r20, r6 + adc r21, r7 + subi r20, 1 + sbci r21, 0 + + ; send row address + ldi r16, ILI9341_CMD_PASET + rcall ili9341SendCommand ; (R16) + ; Y0 + mov r16, r7 + rcall ili9341SendData ; (R16) + mov r16, r6 + rcall ili9341SendData + ; Y1 + mov r16, r21 + rcall ili9341SendData ; (R16) + mov r16, r20 + rcall ili9341SendData ; (R16) + + ret +; @end + + + + + + +#endif ; AQH_AVR_ILI9341_GRAPHOPS_ASM diff --git a/avr/modules/lcd2/ili9341/io_spi.asm b/avr/modules/lcd2/ili9341/io_spi.asm index a91629a..bce7443 100644 --- a/avr/modules/lcd2/ili9341/io_spi.asm +++ b/avr/modules/lcd2/ili9341/io_spi.asm @@ -7,6 +7,11 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_IO_SPI_ASM +#define AQH_AVR_ILI9341_IO_SPI_ASM + + + ; generally we use the following parameters here: ; @param r1:r0 background color ; @param r3:r2 foreground color @@ -59,7 +64,7 @@ ILI9341IoInit: ili9341BeginSpi: ldi r16, ILI9341_SPIMODE ldi r17, ILI9341_DEVICENUM - rjmp SPIHW_MasterStart ; (R18) + rjmp SPIHW_MasterStart ; (R17) ; @end @@ -75,17 +80,31 @@ ili9341EndSpi: +; --------------------------------------------------------------------------- +; @routine ili9341SendCommand +; +; @param r16 byte to send +; @return r16 byte received +; @clobbers r16 + ili9341SendCommand: cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low cbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D low nop - rcall SPIHW_MasterTransfer + rcall SPIHW_MasterTransfer ; (none) sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low ret ; @end +; --------------------------------------------------------------------------- +; @routine ili9341SendData +; +; @param r16 byte to send +; @return r16 byte received +; @clobbers r16 + ili9341SendData: cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high @@ -96,7 +115,12 @@ ili9341SendData: +; --------------------------------------------------------------------------- +; @routine ili9341Send16BitData +; ; @param r19:18 data +; @clobbers r16 + ili9341Send16BitData: cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high @@ -110,3 +134,5 @@ ili9341Send16BitData: +#endif ; AQH_AVR_ILI9341_IO_SPI_ASM + diff --git a/avr/modules/lcd2/ili9341/main.asm b/avr/modules/lcd2/ili9341/main.asm index f86b984..b48fb2d 100644 --- a/avr/modules/lcd2/ili9341/main.asm +++ b/avr/modules/lcd2/ili9341/main.asm @@ -7,6 +7,11 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_ILI9341_MAIN_ASM +#define AQH_AVR_ILI9341_MAIN_ASM + + + ; generally we use the following parameters here: ; @param r1:r0 background color ; @param r3:r2 foreground color @@ -14,6 +19,8 @@ ; @param r7:r6 Y0 ; @param r9:r8 X1/W ; @param r11:r10 Y1/H +; @param r13:r12 source data width in bytes (for bit blit, i.e. byte offset from +; one source data line to the next) ; *************************************************************************** @@ -65,7 +72,7 @@ ILI9341_Fini: ; Z=byte pointer to command list (as for LPM) ili9341SendCommands: - rcall ili9341BeginSpi + rcall ili9341BeginSpi ; (R16, R17) ili9341SendCommands_loop1: lpm r16, Z+ ; read command lpm r18, Z+ ; read number of args @@ -229,3 +236,6 @@ ili9341InitCommands: .db 0xff, 0xff +#endif ; AQH_AVR_ILI9341_MAIN_ASM + + diff --git a/avr/modules/lcd2/ili9341/text.asm b/avr/modules/lcd2/ili9341/text.asm index 389746b..6c23a4a 100644 --- a/avr/modules/lcd2/ili9341/text.asm +++ b/avr/modules/lcd2/ili9341/text.asm @@ -15,6 +15,7 @@ +#if 0 ; --------------------------------------------------------------------------- ; @routine ili9341_WriteCharacterX1At @@ -256,4 +257,4 @@ Debug_WriteHexBuffer_loop: #endif - +#endif ; if 0 diff --git a/avr/modules/lcd2/win/defs.asm b/avr/modules/lcd2/win/defs.asm index 86e4ebf..9b576dc 100644 --- a/avr/modules/lcd2/win/defs.asm +++ b/avr/modules/lcd2/win/defs.asm @@ -7,8 +7,8 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** -#ifndef AQH_AVR_WIN_H -#define AQH_AVR_WIN_H +#ifndef AQH_AVR_WIN_DEFS_H +#define AQH_AVR_WIN_DEFS_H ; tree/list data @@ -18,12 +18,11 @@ .equ OBJ_OFFS_OBJECT = OBJ_OFFS_TREE+TREE_SIZE .equ OBJ_OFFS_HANDLERFN_LO = OBJ_OFFS_OBJECT .equ OBJ_OFFS_HANDLERFN_HI = OBJ_OFFS_OBJECT+1 -.equ OBJ_OFFS_LINKS_LO = OBJ_OFFS_OBJECT+2 -.equ OBJ_OFFS_LINKS_HI = OBJ_OFFS_OBJECT+3 -.equ OBJ_OFFS_TIMERS_LO = OBJ_OFFS_OBJECT+4 -.equ OBJ_OFFS_TIMERS_HI = OBJ_OFFS_OBJECT+5 -.equ OBJ_OFFS_OPTIONS = OBJ_OFFS_OBJECT+6 -.equ OBJ_OFFS_SIZE = OBJ_OFFS_OBJECT+7 +.equ OBJ_OFFS_TARGET_LO = OBJ_OFFS_OBJECT+2 +.equ OBJ_OFFS_TARGET_HI = OBJ_OFFS_OBJECT+3 +.equ OBJ_OFFS_IDFORTARGET = OBJ_OFFS_OBJECT+4 +.equ OBJ_OFFS_OPTIONS = OBJ_OFFS_OBJECT+5 +.equ OBJ_OFFS_SIZE = OBJ_OFFS_OBJECT+6 ; widget data .equ WID_OFFS_WIDGET = OBJ_OFFS_SIZE @@ -59,6 +58,7 @@ .equ WID_OPTIONS0_BIT_VISIBLE = 0 ; OBJ_OFFS_OPTIONS .equ WID_OPTIONS0_BIT_DIRTY = 1 .equ WID_OPTIONS0_BIT_LAYOUT = 2 +.equ WID_OPTIONS0_BIT_DATAINSDRAM = 3 ; text or other data is in SDRAM, not in flash .equ WID_OPTIONS1_BIT_STRETCH_X = 0 ; WID_OFFS_OPTIONS1 .equ WID_OPTIONS1_BIT_STRETCH_Y = 1 @@ -98,21 +98,6 @@ -; Links - -.equ OBJ_LINK_OFFS_LIST = 0 -.equ OBJ_LINK_OFFS_SIGNAL = LIST_SIZE -.equ OBJ_LINK_OFFS_SLOT = LIST_SIZE+1 -.equ OBJ_LINK_OFFS_TARGET_LO = LIST_SIZE+2 -.equ OBJ_LINK_OFFS_TARGET_HI = LIST_SIZE+3 -.equ OBJ_LINK_SIZE = LIST_SIZE+4 -; fns: -; - removeLinksTo(Y=win, r19:r18=target) -; - addLink(Y=win, r16=signal, r17=slot, r19:r18=target) -; - removeLinks(Y=win) - - - .equ TIMER_OFFS_LIST = 0 .equ TIMER_OFFS_TIMER = LIST_SIZE .equ TIMER_OFFS_VALUE_LO = TIMER_OFFS_TIMER diff --git a/avr/modules/lcd2/win/object.asm b/avr/modules/lcd2/win/object.asm index 544b4c2..d4f907f 100644 --- a/avr/modules/lcd2/win/object.asm +++ b/avr/modules/lcd2/win/object.asm @@ -7,6 +7,9 @@ ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** +#ifndef AQH_AVR_WIN_OBJECT_H +#define AQH_AVR_WIN_OBJECT_H + .cseg @@ -15,20 +18,24 @@ ; --------------------------------------------------------------------------- ; @routine OBJ_Init @global ; -; @param Y pointer to object SRAM -; @param r17 options -; @clobbers X +; Generally every object only reports its signals to a single other object +; (called the target). However, every object can receive signals from multiple +; sender objects. To allow this the target assigns its own id (called idForTarget) +; to the new object in order to determine who sent the signal and to act accordingly. +; There are system signals which don't use idForTarget (like OBJ_SIGNAL_DESTROY). +; +; @param Y pointer to object in SRAM +; @param r18 options +; @clobbers r16, r17, X OBJ_Init: - push r17 - mov xl, yl - mov xh, yh - clr r16 - ldi r17, OBJ_OFFS_SIZE - bigcall Utils_FillSram ; (R17, X) - bigcall Tree_InitObject ; (R16) - pop r17 - std Y+OBJ_OFFS_OPTIONS, r17 + mov xl, yl + mov xh, yh + clr r16 + ldi r17, OBJ_OFFS_SIZE + bigcall Utils_FillSram ; (R17, X) + bigcall Tree_InitObject ; (R16) + std Y+OBJ_OFFS_OPTIONS, r18 ldi r16, LOW(OBJ_DefaultHandler) std Y+OBJ_OFFS_HANDLERFN_LO, r16 ldi r16, HIGH(OBJ_DefaultHandler) @@ -38,12 +45,28 @@ OBJ_Init: +; --------------------------------------------------------------------------- +; @routine OBJ_SetTarget @global +; +; @param r19 srcIdForTarget +; @param X pointer to target +; @clobbers none + +OBJ_SetTarget: + std Y+OBJ_OFFS_TARGET_LO, xl + std Y+OBJ_OFFS_TARGET_HI, xh + std Y+OBJ_OFFS_IDFORTARGET, r19 + ret +; @end + + + ; --------------------------------------------------------------------------- ; @routine OBJ_SetHandler @global ; ; @param Y pointer to object SRAM ; @param Z pointer to handler function (word address) -; @clobbers X +; @clobbers none OBJ_SetHandler: std Y+OBJ_OFFS_HANDLERFN_LO, zl @@ -68,55 +91,20 @@ OBJ_GetHandler: -OBJ_DefaultHandler: - ret -; @end - - - - - ; --------------------------------------------------------------------------- -; @routine OBJ_free @global +; @routine OBJ_DefaultHandler @global ; -; @param Y pointer to object in SRAM +; This is a default signal handler which does nothing. +; +; @param Y pointer to object SRAM +; @param r18 signal +; @param r19 srcIdForTarget +; @param R20 1st param +; @param R21 2nd param +; @param X 3rd param ; @clobbers any -OBJ_free: - ; free children - push yl - push yh - rcall Tree_GetFirstChildObject ; (none) -OBJ_free_loop: - mov r16, xl - or r16, xh - breq OBJ_free_loopEnd - mov yl, xl - mov yh, xh - rcall Tree_GetNextSibling - push xl ; next - push xh ; next - rcall OBJ_free - pop xh ; next - pop xl ; next - rjmp OBJ_free_loop -OBJ_free_loopEnd: - pop yh - pop yl - - rcall Tree_UnlinkObject ; (r16, r17, x) - - push yl - push yh - ldi r16, OBJ_SIGNAL_DESTROY - rcall OBJ_Handler - pop yh - pop yl - rcall objFreeLinks - rcall objFreeTimers - mov xl, yl - mov xh, yh - rcall Heap_free +OBJ_DefaultHandler: clc ret ; @end @@ -124,15 +112,62 @@ OBJ_free_loopEnd: ; --------------------------------------------------------------------------- -; @routine OBJ_Handler +; @routine OBJ_Fini @global +; +; This routine calls OBJ_Fini on every child object, Then it sends the signal +; OBJ_SIGNAL_DESTROY to this object allowing it to release all its ressources +; (including memory space if using heap or other dynamic ressources). +; +; @param Y pointer to object in SRAM +; @clobbers any, !Y + +OBJ_Fini: + ; fini children + push yl + push yh + bigcall Tree_GetFirstChildObject ; (none) +OBJ_Fini_loop: + mov r16, xl + or r16, xh + breq OBJ_Fini_loopEnd + mov yl, xl + mov yh, xh + bigcall Tree_GetNextSibling + push xl ; next + push xh ; next + rcall OBJ_Fini + pop xh ; next + pop xl ; next + rjmp OBJ_Fini_loop +OBJ_Fini_loopEnd: + pop yh + pop yl + + bigcall Tree_UnlinkObject ; (r16, r17, x) + + push yl + push yh + ldi r18, OBJ_SIGNAL_DESTROY + clr r19 + rcall OBJ_Handler + pop yh ; probably no longer usable pointer, + pop yl ; especially if using heap! + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine OBJ_Handler @global ; ; Signal handler for an object. A signal can have up to 3 parameters -; conveyed in registers R18, R19 and X. +; conveyed in registers R20, R21 and X. ; ; @param Y pointer to object SRAM -; @param r16 signal -; @param R18 1st param -; @param R19 2nd param +; @param r18 signal +; @param r19 srcIdForTarget +; @param R20 1st param +; @param R21 2nd param ; @param X 3rd param OBJ_Handler: @@ -146,22 +181,22 @@ OBJ_Handler: ; --------------------------------------------------------------------------- -; @routine OBJ_ForwardSignalToChildren +; @routine OBJ_ForwardSignalToChildren @global ; ; Signal handler for an object. A signal can have up to 3 parameters ; conveyed in registers R18, R19 and X. ; ; @param Y pointer to object SRAM -; @param r16 signal -; @param R18 1st param -; @param R19 2nd param +; @param r18 signal +; @param R20 1st param +; @param R21 2nd param ; @param X 3rd param -; @clobbers any, !r16, !r18, !r19, !Y +; @clobbers any, !r18, !r20, !r21, !Y OBJ_ForwardSignalToChildren: push yl push yh - rcall Tree_GetFirstChildObject ; (none) + bigcall Tree_GetFirstChildObject ; (none) OBJ_ForwardSignalToChildren_loop: clc mov r17, xl @@ -169,21 +204,22 @@ OBJ_ForwardSignalToChildren_loop: breq OBJ_ForwardSignalToChildren_loopEnd mov yl, xl mov yh, xh - push r16 - push r18 - push r19 + push r18 + push r20 + push r21 push xl push xh push yl push yh + clr r19 ; srcId for target set to 0 (this is a direct call to the handler) rcall OBJ_Handler pop yh pop yl pop xh pop xl - pop r19 - pop r18 - pop r16 + pop r21 + pop r20 + pop r18 rcall Tree_GetNextSibling rjmp OBJ_ForwardSignalToChildren_loop OBJ_ForwardSignalToChildren_loopEnd: @@ -195,246 +231,27 @@ OBJ_ForwardSignalToChildren_loopEnd: ; --------------------------------------------------------------------------- -; @routine OBJ_EmitSignal +; @routine OBJ_EmitSignal @global ; ; @param Y pointer to object SRAM -; @param r16 signal to emit -; @param R18 1st param -; @param R19 2nd param +; @param r18 signal +; @param R20 1st param +; @param R21 2nd param ; @param X 3rd param +; @clobbers any, !Y OBJ_EmitSignal: push yl push yh - ldd r17, Y+OBJ_OFFS_LINKS_LO - ldd yh, Y+OBJ_OFFS_LINKS_HI - mov yl, r17 -OBJ_EmitSignal_loop: - push r16 - rcall objCheckEmitSignalForLink ; (any, !X, !Y, !R18, !R19) - pop r16 - push xl - push xh - rcall List_GetNextObject ; (none) - mov yl, xl - mov yh, xh - pop xh - pop xl - mov r17, yl - or r17, yh - brne OBJ_EmitSignal_loop -OBJ_EmitSignal_popRet: - pop yh - pop yl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_AddLink @global -; -; @param Y pointer to object SRAM -; @param X pointer to link -; @clobbers R16, R17 - -OBJ_AddLink: - ldd r16, Y+OBJ_OFFS_LINKS_LO - ldd r17, Y+OBJ_OFFS_LINKS_HI - tst r16 - brne OBJ_AddLink_addToExisting - tst r17 - brne OBJ_AddLink_addToExisting - ; empty list, new link is first - std Y+OBJ_OFFS_LINKS_LO, xl - std Y+OBJ_OFFS_LINKS_HI, xh - rjmp OBJ_AddLink_end -OBJ_AddLink_addToExisting: - push xl - push xh - push yl - push yh - mov yl, xl - mov yh, xh - mov xl, r16 - mov xh, r17 - rcall List_AddObject ; (r16, r17, x) - pop yh - pop yl - pop xh - pop xl -OBJ_AddLink_end: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_RemoveLink @global -; -; @param Y pointer to object SRAM -; @param X pointer to link -; @clobbers R16, R17 - -OBJ_RemoveLink: - ldd r16, Y+OBJ_OFFS_LINKS_LO - ldd r17, Y+OBJ_OFFS_LINKS_HI - cp r16, xl - brne OBJ_RemoveLink_notFirst - cp r17, xh - brne OBJ_RemoveLink_notFirst - clr r16 - std Y+OBJ_OFFS_LINKS_LO, r16 - std Y+OBJ_OFFS_LINKS_HI, r16 - rjmp OBJ_RemoveLink_end -OBJ_RemoveLink_notFirst: - push xl - push xh - push yl - push yh - mov yl, xl - mov yh, r17 - mov xl, r16 - mov xh, r17 - rcall List_UnlinkObject ; (r16, r17, x) - pop yh - pop yl - pop xh - pop xl -OBJ_RemoveLink_end: - ret -; @end - - - - - -; --------------------------------------------------------------------------- -; @routine OBJ_AddTimer @global -; -; @param Y pointer to object SRAM -; @param X pointer to timer -; @clobbers R16, R17 - -OBJ_AddTimer: - ldd r16, Y+OBJ_OFFS_TIMERS_LO - ldd r17, Y+OBJ_OFFS_TIMERS_HI - tst r16 - brne OBJ_AddTimer_addToExisting - tst r17 - brne OBJ_AddTimer_addToExisting - ; empty list, new timer is first - std Y+OBJ_OFFS_TIMERS_LO, xl - std Y+OBJ_OFFS_TIMERS_HI, xh - rjmp OBJ_AddTimer_end -OBJ_AddTimer_addToExisting: - push xl - push xh - push yl - push yh - mov yl, xl - mov yh, xh - mov xl, r16 - mov xh, r17 - rcall List_AddObject ; (r16, r17, x) - pop yh - pop yl - pop xh - pop xl -OBJ_AddTimer_end: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_RemoveTimer @global -; -; @param Y pointer to object SRAM -; @param X pointer to timer -; @clobbers R16, R17 - -OBJ_RemoveTimer: - ldd r16, Y+OBJ_OFFS_TIMERS_LO - ldd r17, Y+OBJ_OFFS_TIMERS_HI - cp r16, xl - brne OBJ_RemoveTimer_notFirst - cp r17, xh - brne OBJ_RemoveTimer_notFirst - clr r16 - std Y+OBJ_OFFS_TIMERS_LO, r16 - std Y+OBJ_OFFS_TIMERS_HI, r16 - rjmp OBJ_RemoveTimer_end -OBJ_RemoveTimer_notFirst: - push xl - push xh - push yl - push yh - mov yl, xl - mov yh, r17 - mov xl, r16 - mov xh, r17 - rcall List_UnlinkObject ; (r16, r17, x) - pop yh - pop yl - pop xh - pop xl -OBJ_RemoveTimer_end: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @param r16 signal -; @param Y link -; @clobbers any, !X, !Y, !R18, !R19 - -objCheckEmitSignalForLink: - ldd r17, Y+OBJ_LINK_OFFS_SIGNAL - cp r16, r17 - brne objCheckEmitSignalForLink_ret - push yl - push yh - push xl - push xh - push r18 - push r19 - ldd r16, Y+OBJ_LINK_OFFS_SLOT - ldd r17, Y+OBJ_LINK_OFFS_TARGET_LO - ldd yh, Y+OBJ_LINK_OFFS_TARGET_HI - mov yl, r17 - rcall OBJ_Handler - pop r19 - pop r18 - pop xh - pop xl - pop yh - pop yl -objCheckEmitSignalForLink_ret: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine objFreeLinks -; -; @clobbers r16, r17, r18, r19, r24, r25, X - -objFreeLinks: - push yl - push yh - ldd r16, Y+OBJ_OFFS_LINKS_LO - ldd r17, Y+OBJ_OFFS_LINKS_HI - clr r18 - std Y+OBJ_OFFS_LINKS_LO, r18 - std Y+OBJ_OFFS_LINKS_HI, r18 + ldd r16, Y+OBJ_OFFS_TARGET_LO + ldd r17, Y+OBJ_OFFS_TARGET_HI + ldd r19, Y+OBJ_OFFS_IDFORTARGET mov yl, r16 mov yh, r17 - ldi zl, LOW(Obj_Link_free) - ldi zh, HIGH(Obj_Link_free) - rcall List_ForEveryObject ; (r16, r17, r18, r19, r24, r25, X, Y) + or r16, r17 + breq OBJ_EmitSignal_end + rcall OBJ_Handler +OBJ_EmitSignal_end: pop yh pop yl ret @@ -442,115 +259,5 @@ objFreeLinks: -; --------------------------------------------------------------------------- -; @routine objFreeTimers -; -; @clobbers r16, r17, r18, r19, r24, r25, X - -objFreeTimers: - push yl - push yh - ldd r16, Y+OBJ_OFFS_TIMERS_LO - ldd r17, Y+OBJ_OFFS_TIMERS_HI - clr r18 - std Y+OBJ_OFFS_TIMERS_LO, r18 - std Y+OBJ_OFFS_TIMERS_HI, r18 - mov yl, r16 - mov yh, r17 - ldi zl, LOW(Obj_Timer_free) - ldi zh, HIGH(Obj_Timer_free) - rcall List_ForEveryObject ; (r16, r17, r18, r19, r24, r25, X, Y) - pop yh - pop yl - ret -; @end - - - - - - -; --------------------------------------------------------------------------- -; @routine OBJ_Link_new @global -; -; @return CF set if okay, cleared on error -; @return Y pointer to SRAM for link -; @clobbers r16, r17, X - -OBJ_Link_new: - ldi r24, LOW(OBJ_LINK_SIZE) - ldi r25, HIGH(OBJ_LINK_SIZE) - bigcall Heap_Alloc - brcc OBJ_Link_new_end - mov yl, xl - mov yh, xh - clr r16 - ldi r17, OBJ_LINK_SIZE - bigcall Utils_FillSram ; (R17, X) - rcall List_InitObject ; (R16) - sec -OBJ_Link_new_end: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_Link_free @global -; -; @param Y pointer to SRAM for link -; @clobbers r16, r17, r24, r25, X - -OBJ_Link_free: - rcall List_FiniObject ; (R16) - mov xl, yl - mov xh, yh - rcall Heap_free ; (r16, r17, r24, r25, X) - clc - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_Timer_new @global -; -; @return CF set if okay, cleared on error -; @return Y pointer to SRAM for timer -; @clobbers r16, r17, X - -OBJ_Timer_new: - ldi r24, LOW(TIMER_SIZE) - ldi r25, HIGH(TIMER_SIZE) - bigcall Heap_Alloc - brcc OBJ_Timer_new_end - mov yl, xl - mov yh, xh - clr r16 - ldi r17, TIMER_SIZE - bigcall Utils_FillSram ; (R17, X) - rcall List_InitObject ; (R16) - sec -OBJ_Timer_new_end: - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine OBJ_Timer_free @global -; -; @param Y pointer to SRAM for timer -; @clobbers r16, r17, r24, r25, X - -OBJ_Timer_free: - rcall List_FiniObject ; (R16) - mov xl, yl - mov xh, yh - bigcall Heap_free ; (r16, r17, r24, r25, X) - clc - ret -; @end - - +#endif ; AQH_AVR_WIN_OBJECT_H diff --git a/avr/modules/lcd2/win/w_layout.asm b/avr/modules/lcd2/win/w_layout.asm new file mode 100644 index 0000000..655aee9 --- /dev/null +++ b/avr/modules/lcd2/win/w_layout.asm @@ -0,0 +1,770 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + + +; *************************************************************************** +; defs + +.equ WID_WIDGET_INTER_BORDER = 2 + + + +; *************************************************************************** +; code + +.cseg + + + +; --------------------------------------------------------------------------- +; @routine WID_Widget_new @global +; +; @param Y pointer to window SRAM +; @param X pointer to parent +; @param r18 WID_OFFS_OPTIONS1 +; @param r19 WID_OFFS_OPTIONS2 + +WID_Widget_Init: + push r18 + push r19 + push xl + push xh + ldi zl, LOW(WID_Widget_Handler) + ldi zh, HIGH(WID_Widget_Handler) + clr r17 + rcall OBJ_Init + pop xh + pop xl + pop r19 + pop r18 + std Y+WID_OFFS_OPTIONS1, r18 + std Y+WID_OFFS_OPTIONS2, r19 + mov r16, xl + or r16, xh + breq WID_Widget_noParent + ; copy defaults from parent + adiw xh:xl, WID_OFFS_BG_COL_LO + ld r16, X+ ; WID_OFFS_BG_COL_LO + std Y+WID_OFFS_BG_COL_LO, r16 + ld r16, X+ ; WID_OFFS_BG_COL_HI + std Y+WID_OFFS_BG_COL_HI, r16 + ld r16, X+ ; WID_OFFS_FG_COL_LO + std Y+WID_OFFS_FG_COL_LO, r16 + ld r16, X+ ; WID_OFFS_FG_COL_HI + std Y+WID_OFFS_FG_COL_HI, r16 + ld r16, X+ ; WID_OFFS_FONT_LO + std Y+WID_OFFS_FONT_LO, r16 + ld r16, X+ ; WID_OFFS_FONT_HI + std Y+WID_OFFS_FONT_HI, r16 + rjmp WID_Widget_end +WID_Widget_noParent: ; preset without parent + clr r16 + std Y+WID_OFFS_FONT_LO, r16 + std Y+WID_OFFS_FONT_HI, r16 + + std Y+WID_OFFS_FG_COL_LO, r16 ; foreground black + std Y+WID_OFFS_FG_COL_HI, r16 + dec r16 + std Y+WID_OFFS_BG_COL_LO, r16 ; background white + std Y+WID_OFFS_BG_COL_HI, r16 + + ldi r16, 2 ; default borders + std Y+WID_OFFS_BORDER_TOP, r16 + std Y+WID_OFFS_BORDER_BOT, r16 + std Y+WID_OFFS_BORDER_LEFT, r16 + std Y+WID_OFFS_BORDER_RIGHT, r16 +WID_Widget_end: + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine WID_Widget_Handler +; +; Signal handler for an object. A signal can have up to 3 parameters +; conveyed in registers R18, R19 and X. +; +; @param Y pointer to object SRAM +; @param r16 signal +; @param R18 1st param +; @param R19 2nd param +; @param X 3rd param +; @clobbers any, !Y + +WID_Widget_Handler: + cpi r16, WID_SIGNAL_GETMINWIDTH + breq WID_Widget_Handler_getMinWidth + cpi r16, WID_SIGNAL_GETMINHEIGHT + breq WID_Widget_Handler_getMinHeight + cpi r16, WID_SIGNAL_LAYOUT + breq WID_Widget_Handler_layout + cpi r16, WID_SIGNAL_DRAW + breq WID_Widget_Handler_draw + ; for now just forward signal to all children +WID_Widget_Handler_forward: + rcall OBJ_ForwardSignalToChildren + ret +WID_Widget_Handler_getMinWidth: + rjmp widgetGetMinWidth +WID_Widget_Handler_getMinHeight: + rjmp widgetGetMinHeight +WID_Widget_Handler_layout: + rjmp widgetLayout +WID_Widget_Handler_draw: + rjmp wDraw +; @end + + + + +wDraw: + ldd r16, Y+OBJ_OFFS_OPTIONS + sbrs r16, WID_OPTIONS0_BIT_VISIBLE ; only draw visible widgets + rjmp wDraw_ret + cbr r16, (1< count all visible children + rcall wGetSumOfMatchingVisibleChildrenHeights ; r19:r18=sum of all children heights + pop r22 + clr r23 ; r23:r22=number of visible expandable children + ; calculate number of bytes to add to each expandable child widget + ldd r20, Y+WID_OFFS_HEIGHT_LO ; total height + ldd r21, Y+WID_OFFS_HEIGHT_HI + clr r16 + ldd r17, Y+WID_OFFS_BORDER_TOP ; subtract top border + sub r20, r17 + sbc r21, r16 + brcs wVLayout_heightTooSmall ; jmp if too small + ldd r17, Y+WID_OFFS_BORDER_BOT ; subtract bottom border + sub r20, r17 + sbc r21, r16 + brcs wVLayout_heightTooSmall ; jmp if too small + + sub r20, r18 ; r21:r20 = HEIGHT-SUM_OF_VIS_CHILDREN_HEIGHTS + sbc r21, r19 + brcc wVLayout_heightTooSmall + breq wVLayout_yDone ; nothing to distribute + bigcall Utils_Divu16_16_16 ; r17:r16 = r21:r20 / r23:r22 + ; add additional pixel to heights of expandable child widgets + rcall wAddToHeightsOfExpandableVisibleChildren + +wVLayout_yDone: + rcall wSetRelYFromHeightInVisibleChildren + rcall wAlignChildrenHorizontally +; rcall wSetAbsoluteCoords call in GUI loop after calling layout on all widgets +wVLayout_heightTooSmall: + ; TODO: how to handle this case? + ret +; @end + + + +wSetAbsoluteCoords: + push yl + push yh +wSetAbsoluteCoords_loop: + ldd r18, Y+OBJ_OFFS_OPTIONS + andi r18, WID_OPTIONS0_BIT_VISIBLE + breq wSetAbsoluteCoords_nextSibling + push yl + push yh + bigcall Tree_GetParentObject + clr r18 + clr r19 + clr r20 + clr r21 + mov r17, xl + or r17, xh + breq wSetAbsoluteCoords_r1820set + mov yl, xl + mov yh, xh + ldd r18, Y+WID_OFFS_ABS_X_LO + ldd r19, Y+WID_OFFS_ABS_X_HI + ldd r20, Y+WID_OFFS_ABS_Y_LO + ldd r21, Y+WID_OFFS_ABS_Y_HI +wSetAbsoluteCoords_r1820set: + pop yh + pop yl + ; handle X + ldd r16, Y+WID_OFFS_REL_X_LO + ldd r17, Y+WID_OFFS_REL_X_HI + add r16, r18 + adc r17, r19 + std Y+WID_OFFS_ABS_X_LO, r16 + std Y+WID_OFFS_ABS_X_HI, r17 + ; handle Y + ldd r16, Y+WID_OFFS_REL_Y_LO + ldd r17, Y+WID_OFFS_REL_Y_HI + add r16, r20 + adc r17, r21 + std Y+WID_OFFS_ABS_Y_LO, r16 + std Y+WID_OFFS_ABS_Y_HI, r17 + bigcall Tree_GetObjectBelow + rjmp wSetAbsoluteCoords_loopEnd +wSetAbsoluteCoords_nextSibling: + bigcall Tree_GetNextSibling +wSetAbsoluteCoords_loopEnd: + mov r17, xl + or r17, xh + breq wSetAbsoluteCoords_end + mov yl, xl + mov yh, xh + rjmp wSetAbsoluteCoords_loop +wSetAbsoluteCoords_end: + pop yh + pop yl + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine wAlignChildrenHorizontally +; +; Horizontally align children within the width of the parent widget. +; Only changes Y+WID_OFFS_REL_X_LO/HI. +; +; @param Y pointer to object SRAM +; @clobbers r16, r17, r18, r19, r24, r25 + +wAlignChildrenHorizontally: + push yl + push yh + ldd r24, Y+WID_OFFS_WIDTH_LO ; parent width + ldd r25, Y+WID_OFFS_WIDTH_HI + ldd r19, Y+WID_OFFS_BORDER_LEFT ; subtract left border + mov r16, r19 + clr r17 + sub r24, r16 + sbc r25, r17 + ldd r16, Y+WID_OFFS_BORDER_RIGHT ; subtract right border + sub r24, r16 + sbc r25, r17 ; r25:r24=parent width minus lateral borders, r19=left border + rcall Tree_GetFirstChildObject ; (none) +wAlignChildrenHorizontally_loop: + mov r17, xl + or r17, xh + breq wAlignChildrenHorizontally_loopEnd + mov yl, xl + mov yh, yl + ldd r18, Y+OBJ_OFFS_OPTIONS + andi r18, WID_OPTIONS0_BIT_VISIBLE + breq wAlignChildrenHorizontally_loopNext + push r24 + push r25 + push r19 + rcall wAlignHorizontally + pop r19 + add r24, r19 + adc r25, r19 + sub r25, r19 + std Y+WID_OFFS_REL_X_LO, r24 + std Y+WID_OFFS_REL_X_HI, r25 + pop r25 + pop r24 +wAlignChildrenHorizontally_loopNext: + rcall Tree_GetNextSibling ; (none) + rjmp wAlignChildrenHorizontally_loop +wAlignChildrenHorizontally_loopEnd: + pop yh + pop yl + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine wAlignHorizontally +; +; @param r25:r24 parent width minus lateral borders +; @return r25:r24 proposed X position relative to parent +; @clobbers r16, r17 + +wAlignHorizontally: + ldd r16, Y+WID_OFFS_OPTIONS1 + sbrc r16, WID_OPTIONS1_BIT_STRETCH_X + rjmp wAlignHorizontally_stretch + andi r16, (WID_OPTIONS1_BIT_HALIGN0 | WID_OPTIONS1_BIT_HALIGN1) + cpi r16, (0< count all visible children - rcall wGetSumOfMatchingVisibleChildrenHeights ; r19:r18=sum of all children heights - pop r22 - clr r23 ; r23:r22=number of visible expandable children - ; calculate number of bytes to add to each expandable child widget - ldd r20, Y+WID_OFFS_HEIGHT_LO ; total height - ldd r21, Y+WID_OFFS_HEIGHT_HI - clr r16 - ldd r17, Y+WID_OFFS_BORDER_TOP ; subtract top border - sub r20, r17 - sbc r21, r16 - brcs wVLayout_heightTooSmall ; jmp if too small - ldd r17, Y+WID_OFFS_BORDER_BOT ; subtract bottom border - sub r20, r17 - sbc r21, r16 - brcs wVLayout_heightTooSmall ; jmp if too small - - sub r20, r18 ; r21:r20 = HEIGHT-SUM_OF_VIS_CHILDREN_HEIGHTS - sbc r21, r19 - brcc wVLayout_heightTooSmall - breq wVLayout_yDone ; nothing to distribute - bigcall Utils_Divu16_16_16 ; r17:r16 = r21:r20 / r23:r22 - ; add additional pixel to heights of expandable child widgets - rcall wAddToHeightsOfExpandableVisibleChildren - -wVLayout_yDone: - rcall wSetRelYFromHeightInVisibleChildren - rcall wAlignChildrenHorizontally -; rcall wSetAbsoluteCoords call in GUI loop after calling layout on all widgets -wVLayout_heightTooSmall: - ; TODO: how to handle this case? - ret -; @end - - - -wSetAbsoluteCoords: +Widget_SetAbsoluteCoords: push yl push yh -wSetAbsoluteCoords_loop: +Widget_SetAbsoluteCoords_loop: ldd r18, Y+OBJ_OFFS_OPTIONS andi r18, WID_OPTIONS0_BIT_VISIBLE - breq wSetAbsoluteCoords_nextSibling + breq Widget_SetAbsoluteCoords_nextSibling push yl push yh bigcall Tree_GetParentObject @@ -219,14 +183,14 @@ wSetAbsoluteCoords_loop: clr r21 mov r17, xl or r17, xh - breq wSetAbsoluteCoords_r1820set + breq Widget_SetAbsoluteCoords_r1820set mov yl, xl mov yh, xh ldd r18, Y+WID_OFFS_ABS_X_LO ldd r19, Y+WID_OFFS_ABS_X_HI ldd r20, Y+WID_OFFS_ABS_Y_LO ldd r21, Y+WID_OFFS_ABS_Y_HI -wSetAbsoluteCoords_r1820set: +Widget_SetAbsoluteCoords_r1820set: pop yh pop yl ; handle X @@ -244,152 +208,17 @@ wSetAbsoluteCoords_r1820set: std Y+WID_OFFS_ABS_Y_LO, r16 std Y+WID_OFFS_ABS_Y_HI, r17 bigcall Tree_GetObjectBelow - rjmp wSetAbsoluteCoords_loopEnd -wSetAbsoluteCoords_nextSibling: + rjmp Widget_SetAbsoluteCoords_loopEnd +Widget_SetAbsoluteCoords_nextSibling: bigcall Tree_GetNextSibling -wSetAbsoluteCoords_loopEnd: +Widget_SetAbsoluteCoords_loopEnd: mov r17, xl or r17, xh - breq wSetAbsoluteCoords_end + breq Widget_SetAbsoluteCoords_end mov yl, xl mov yh, xh - rjmp wSetAbsoluteCoords_loop -wSetAbsoluteCoords_end: - pop yh - pop yl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine wAlignChildrenHorizontally -; -; Horizontally align children within the width of the parent widget. -; Only changes Y+WID_OFFS_REL_X_LO/HI. -; -; @param Y pointer to object SRAM -; @clobbers r16, r17, r18, r19, r24, r25 - -wAlignChildrenHorizontally: - push yl - push yh - ldd r24, Y+WID_OFFS_WIDTH_LO ; parent width - ldd r25, Y+WID_OFFS_WIDTH_HI - ldd r19, Y+WID_OFFS_BORDER_LEFT ; subtract left border - mov r16, r19 - clr r17 - sub r24, r16 - sbc r25, r17 - ldd r16, Y+WID_OFFS_BORDER_RIGHT ; subtract right border - sub r24, r16 - sbc r25, r17 ; r25:r24=parent width minus lateral borders, r19=left border - rcall Tree_GetFirstChildObject ; (none) -wAlignChildrenHorizontally_loop: - mov r17, xl - or r17, xh - breq wAlignChildrenHorizontally_loopEnd - mov yl, xl - mov yh, yl - ldd r18, Y+OBJ_OFFS_OPTIONS - andi r18, WID_OPTIONS0_BIT_VISIBLE - breq wAlignChildrenHorizontally_loopNext - push r24 - push r25 - push r19 - rcall wAlignHorizontally - pop r19 - add r24, r19 - adc r25, r19 - sub r25, r19 - std Y+WID_OFFS_REL_X_LO, r24 - std Y+WID_OFFS_REL_X_HI, r25 - pop r25 - pop r24 -wAlignChildrenHorizontally_loopNext: - rcall Tree_GetNextSibling ; (none) - rjmp wAlignChildrenHorizontally_loop -wAlignChildrenHorizontally_loopEnd: - pop yh - pop yl - ret -; @end - - - -; --------------------------------------------------------------------------- -; @routine wAlignHorizontally -; -; @param r25:r24 parent width minus lateral borders -; @return r25:r24 proposed X position relative to parent -; @clobbers r16, r17 - -wAlignHorizontally: - ldd r16, Y+WID_OFFS_OPTIONS1 - sbrc r16, WID_OPTIONS1_BIT_STRETCH_X - rjmp wAlignHorizontally_stretch - andi r16, (WID_OPTIONS1_BIT_HALIGN0 | WID_OPTIONS1_BIT_HALIGN1) - cpi r16, (0<