;------------------------------------------------------------------- ; Name/Nome: lcdgrafc.asm ; Version/Versao: 1.0 ; Description/Descricao: ; ROTINAS EM ASSEMBLER PARA LCD GRAFICO KS0108 OU EQUIVALENTE ; (lcd grafico 128x64) ; Author/Autor: Rafael B. Ferrari ; Site: http://rafa.eng.br ;------------------------------------------------------------------- ; FAZER: TROCAR LCD POR GLCD / TROCAR ADRESS / INVERTER F_SIDE(ok) ; OTIMIZAR SETDOT(ok) / Setdot usar registradores / otimizar lcd_char ; VER cod Clear, R6 nao zera(ok) / Colocar funcoes do reg Z p rolagem ; verificar R6 na rotina de texto ; ; REV 26/07/03 - Funcoes read/write/Print ; Hardware LCD_EN EQU P1.2 LCD_DI EQU P1.0 LCD_CS1 EQU P1.4 LCD_CS2 EQU P1.5 LCD_RW EQU P1.1 LCD_RST EQU P1.3 LCD_DAT EQU P3 ; Registradores do Lcd LCD_X_ADDR EQU 0B8h ;Adress base for Page X0 / Endereco base da pagina 0 LCD_Y_ADDR EQU 40h ;Adress base for Y0 / Endereco base da coluna 0 LCD_START_LINE EQU 0C0h ;Adress base for Z0 line / Endereco base da linha 0 LCD_ON EQU 3Fh ;Turn display on / Instrucao para ligar o display LCD_OFF EQU 3Eh ;Turn display off / Instrucao para desligar o display ; Outras definicoes LCD_F_SIDE EQU 00h tempo equ 30h valor equ 31h ORG 0 SJMP INICIO ;----------------------- main / programa principal ------------------ INICIO: lcall lcd_init ;mov R7,#63d ;mov R6,#127d ;lcall lcd_setdot ;mov R7,#62d ;mov R6,#126d ;lcall lcd_setdot mov r7,#0 mov r6,#0 mOV DPTR,#FRASE1 MOV R1,#HIGH(FONT8x8) MOV R0,#LOW(FONT8x8) lcall lcd_print mov r7,#2 mov r6,#0 mOV DPTR,#FRASE2 MOV R1,#HIGH(FONT7x5) MOV R0,#LOW(FONT7x5) lcall lcd_print sjmp $ ;-------------------------------------------------------------------- ;---------------------- SUBROTINAS PARA LCD GRAFICO ----------------- ; ;------------------------ Inicializa e limpa o Lcd ------------------ LCD_INIT: MOV LCD_DAT,#0 CLR LCD_DI CLR LCD_RW CLR LCD_EN CLR LCD_CS1 CLR LCD_CS2 setb lcd_cs1 SETB LCD_RST CLR LCD_RST SETB LCD_RST LCALL LCD_WAIT_BUSY setb LCD_F_SIDE LCD_INIT_L2: LCALL LCD_SIDE MOV A,#LCD_OFF LCALL LCD_INST MOV A,#LCD_START_LINE LCALL LCD_INST MOV A,#LCD_X_ADDR LCALL LCD_INST MOV A,#LCD_Y_ADDR LCALL LCD_INST MOV A,#LCD_ON LCALL LCD_INST JBC LCD_F_SIDE,LCD_INIT_L2 LCALL LCD_CLEAR RET ;-------------------------------------------------------------------- ;----------------------------- limpa o lcd -------------------------- LCD_CLEAR: MOV R7,#0 ; page 0 MOV R6,#0 ; col 0 LCD_CLEAR_P: clr LCD_F_SIDE LCALL LCD_SIDE ; select left side / seleciona o lado esquerdo MOV A,#LCD_X_ADDR ; page 0 / pagina 0 ORL A,R7 ; LCALL LCD_INST ; set page number / seleciona a pagina atual MOV A,#LCD_Y_ADDR ; column 0 / coluna 0 LCALL LCD_INST ; set column 0 / seleciona a coluna 0 LCD_CLEAR_C: CJNE R6,#64d,LCD_CLEAR_C_L ; se coluna igual 64, seleciona coluna 0 do lado direito setb LCD_F_SIDE ; LCALL LCD_SIDE ; select right side / seleciona lado direito MOV A,#LCD_X_ADDR ; ORL A,R7 ; LCALL LCD_INST ; set page number / seleciona a pagina atual MOV A,#LCD_Y_ADDR ; column 0 / coluna 0 LCALL LCD_INST ; set column 0 / seleciona coluna 0 LCD_CLEAR_C_L: CLR A ; LCALL LCD_DATA ; erase column / limpa a coluna atual INC R6 ; CJNE R6,#128d,LCD_CLEAR_C ; erase 128 columns / percorre todas as 128 colunas MOV R6,#0d ; INC R7 ; CJNE R7,#8d,LCD_CLEAR_P ; erase 8 pages / percorre todas as 8 paginas RET ;-------------------------------------------------------------------- ;----------------------- seleciona o lado do lcd -------------------- ;Entrada: LCD_F_SIDE (0=esquerdo / 1=direito) LCD_SIDE: JNB LCD_F_SIDE,LCD_SIDE_LEFT CLR LCD_EN CLR LCD_DI SETB LCD_RW CLR LCD_CS1 SETB LCD_CS2 MOV A,#LCD_Y_ADDR LCALL LCD_INST RET LCD_SIDE_LEFT: CLR LCD_EN CLR LCD_DI SETB LCD_RW SETB LCD_CS1 CLR LCD_CS2 MOV A,#LCD_Y_ADDR LCALL LCD_INST RET ;-------------------------------------------------------------------- ;-------------------- envia uma instrucao para o lcd ---------------- ;Entrada: A (instrucao) LCD_INST: PUSH ACC LCALL LCD_WAIT_BUSY POP ACC CLR LCD_EN CLR LCD_DI CLR LCD_RW MOV LCD_DAT,A SETB LCD_EN NOP NOP CLR LCD_EN RET ;-------------------------------------------------------------------- ;------------------------ envia um dado para o lcd ------------------ ;Entrada: A (dado) LCD_DATA: PUSH ACC LCALL LCD_WAIT_BUSY POP ACC CLR LCD_EN SETB LCD_DI CLR LCD_RW MOV LCD_DAT,A SETB LCD_EN CLR LCD_EN RET ;-------------------------------------------------------------------- ;------------------------- le dados do lcd -------------------------- LCD_READ: LCALL LCD_WAIT_BUSY MOV LCD_DAT,#0FFh CLR LCD_EN SETB LCD_DI ; modo de dados SETB LCD_RW ; modo de leitura SETB LCD_EN MOV A,LCD_DAT ; le os dados do lcd CLR LCD_EN RET ;-------------------------------------------------------------------- ;---------------------- espera o tempo de Busy do lcd --------------- LCD_WAIT_BUSY: CLR LCD_EN CLR LCD_DI SETB LCD_RW MOV LCD_DAT,#0FFh LCD_WAIT_BUSY_LOOP: SETB LCD_EN MOV A,LCD_DAT CLR LCD_EN ANL A,#10010000b JNZ LCD_WAIT_BUSY_LOOP RET ;------------------------ Desenha um ponto no lcd ------------------- ;Entrada: R7 (linha) maximo: 63 / R6 (coluna) maximo: 127 ;Regs modificados: R7,R6 LCD_SETDOT: MOV A,#LCD_START_LINE LCALL LCD_INST ; seleciona a linha 0 MOV A,#64d MOV B,R6 SUBB A,B MOV LCD_F_SIDE,C CLR C LCALL LCD_SIDE ; seleciona o lado correspondente MOV A,R7 MOV B,#8d DIV AB ADD A,#LCD_X_ADDR PUSH ACC ; salva o numero da pagina correspondente LCALL LCD_INST ; seleciona a pagina correspondente MOV A,R6 ADD A,#LCD_Y_ADDR JNB LCD_F_SIDE,LCD_SETDOT_LEFT SUBB A,#64d LCD_SETDOT_LEFT: PUSH ACC ; salva o numero da coluna correspondente LCALL LCD_INST ; seleciona a coluna correspondente LCALL LCD_READ ; le posicao atual no display mov b,a ; coloca o valor lido em B LCALL LCD_READ POP ACC ; restaura num coluna LCALL LCD_INST POP ACC ; restaura num pagina LCALL LCD_INST push b ; salva B MOV A,R7 MOV B,#8d DIV AB MOV A,#1d inc b LCD_SETDOT_DOT: RL A ; seleciona o bit/ponto correspondente DJNZ b,LCD_SETDOT_DOT RR A pop b ORL A,b LCALL LCD_DATA ; escreve o ponto no display ; MOV A,#LCD_START_LINE ; seleciona linha 0 ; LCALL LCD_INST ; CLR LCD_CS1 ; CLR LCD_CS2 RET ;-------------------------------------------------------------------- ;------------ rotina para escrever uma frase no display ------------- ;Entrada: R7 (pagina) / R6 (coluna) / DPTR (endereco da frase) / R1 (end. da fonte)(high) / R0 (end. da fonte)(low) ;Regs. modificados: R7,R6,R5,R4,R3,R2,R1,R0 LCD_PRINT: MOV R5,#0 ; ponteiro para a tabela com a frase MOV R4,#1 MOV R3,DPH ; salva dph MOV R2,DPL ; salva dpl LCD_PRINT_P: clr LCD_F_SIDE LCALL LCD_SIDE MOV A,#LCD_X_ADDR ORL A,R7 LCALL LCD_INST MOV A,#LCD_Y_ADDR LCALL LCD_INST LCD_PRINT_C: CJNE R6,#64d,LCD_PRINT_C_L setb LCD_F_SIDE LCALL LCD_SIDE MOV A,#LCD_X_ADDR ORL A,R7 LCALL LCD_INST MOV A,#LCD_Y_ADDR LCALL LCD_INST LCD_PRINT_C_L: DJNZ R4,LCD_PRINT_CHAR MOV A,R5 ; contador de caracteres MOV DPH,R3 MOV DPL,R2 MOVC A,@A+DPTR ; le o caractere JZ LCD_PRINT_END ; se chegou no final, sai INC R5 ; posiciona para o proximo caractere push acc clr a MOV DPH,R1 MOV DPL,R0 MOVC A,@A+DPTR MOV R4,A INC DPTR CLR A MOVC A,@A+DPTR MOV B,A INC DPTR pop acc clr c subb a,b ; ajusta para o inicio da fonte MOV B,R4 MUL AB ADD A,DPL JNC LCD_PRINT_NDPH INC DPH CLR C LCD_PRINT_NDPH: MOV DPL,A MOV A,B ADD A,DPH MOV DPH,A ;agora dptr tem a posicao correspondente ao caracter desejado LCD_PRINT_CHAR: clr a MOVC A,@A+DPTR inc dptr LCD_PRINT_DATA: LCALL LCD_DATA ; escreve no display um bit da fonte INC R6 CJNE R6,#128d,LCD_PRINT_C ; continua escrevendo na coluna MOV R6,#0 INC R7 CJNE R7,#8d,LCD_PRINT_P ; escreve na proxima pagina, ate a ultima LCD_PRINT_END: ; CLR LCD_CS1 ; CLR LCD_CS2 RET ;-------------------------------------------------------------------- FRASE1: DB 'Display Grafico',0 FRASE2: DB '123456789',0 ;--------------------------- Fonts / Fontes ------------------------- FONT7x5: DB 05d, 32d DB 00h, 00h, 00h, 00h, 00h ; (space) 32 DB 00h, 00h, 5Fh, 00h, 00h ; ! DB 00h, 07h, 00h, 07h, 00h ; " DB 14h, 7Fh, 14h, 7Fh, 14h ; # DB 24h, 2Ah, 7Fh, 2Ah, 12h ; $ DB 23h, 13h, 08h, 64h, 62h ; % DB 36h, 49h, 55h, 22h, 50h ; & DB 00h, 05h, 03h, 00h, 00h ; ' DB 00h, 1Ch, 22h, 41h, 00h ; ( DB 00h, 41h, 22h, 1Ch, 00h ; ) DB 08h, 2Ah, 1Ch, 2Ah, 08h ; * DB 08h, 08h, 3Eh, 08h, 08h ; + DB 00h, 50h, 30h, 00h, 00h ; h, DB 08h, 08h, 08h, 08h, 08h ; - DB 00h, 30h, 30h, 00h, 00h ; . DB 20h, 10h, 08h, 04h, 02h ; / DB 3Eh, 51h, 49h, 45h, 3Eh ; 0 DB 00h, 42h, 7Fh, 40h, 00h ; 1 DB 42h, 61h, 51h, 49h, 46h ; 2 DB 21h, 41h, 45h, 4Bh, 31h ; 3 DB 18h, 14h, 12h, 7Fh, 10h ; 4 DB 27h, 45h, 45h, 45h, 39h ; 5 DB 3Ch, 4Ah, 49h, 49h, 30h ; 6 DB 01h, 71h, 09h, 05h, 03h ; 7 DB 36h, 49h, 49h, 49h, 36h ; 8 DB 06h, 49h, 49h, 29h, 1Eh ; 9 DB 00h, 36h, 36h, 00h, 00h ; : DB 00h, 56h, 36h, 00h, 00h ; ; DB 00h, 08h, 14h, 22h, 41h ; < DB 14h, 14h, 14h, 14h, 14h ; = DB 41h, 22h, 14h, 08h, 00h ; > DB 02h, 01h, 51h, 09h, 06h ; ? DB 32h, 49h, 79h, 41h, 3Eh ; @ DB 7Eh, 11h, 11h, 11h, 7Eh ; A DB 7Fh, 49h, 49h, 49h, 36h ; B DB 3Eh, 41h, 41h, 41h, 22h ; C DB 7Fh, 41h, 41h, 22h, 1Ch ; D DB 7Fh, 49h, 49h, 49h, 41h ; E DB 7Fh, 09h, 09h, 01h, 01h ; F DB 3Eh, 41h, 41h, 51h, 32h ; G DB 7Fh, 08h, 08h, 08h, 7Fh ; H DB 00h, 41h, 7Fh, 41h, 00h ; I DB 20h, 40h, 41h, 3Fh, 01h ; J DB 7Fh, 08h, 14h, 22h, 41h ; K DB 7Fh, 40h, 40h, 40h, 40h ; L DB 7Fh, 02h, 04h, 02h, 7Fh ; M DB 7Fh, 04h, 08h, 10h, 7Fh ; N DB 3Eh, 41h, 41h, 41h, 3Eh ; O DB 7Fh, 09h, 09h, 09h, 06h ; P DB 3Eh, 41h, 51h, 21h, 5Eh ; Q DB 7Fh, 09h, 19h, 29h, 46h ; R DB 46h, 49h, 49h, 49h, 31h ; S DB 01h, 01h, 7Fh, 01h, 01h ; T DB 3Fh, 40h, 40h, 40h, 3Fh ; U DB 1Fh, 20h, 40h, 20h, 1Fh ; V DB 7Fh, 20h, 18h, 20h, 7Fh ; W DB 63h, 14h, 08h, 14h, 63h ; X DB 03h, 04h, 78h, 04h, 03h ; Y DB 61h, 51h, 49h, 45h, 43h ; Z DB 00h, 00h, 7Fh, 41h, 41h ; [ DB 02h, 04h, 08h, 10h, 20h ; "\" DB 41h, 41h, 7Fh, 00h, 00h ; ] DB 04h, 02h, 01h, 02h, 04h ; ^ DB 40h, 40h, 40h, 40h, 40h ; _ DB 00h, 01h, 02h, 04h, 00h ; ` DB 20h, 54h, 54h, 54h, 78h ; a DB 7Fh, 48h, 44h, 44h, 38h ; b DB 38h, 44h, 44h, 44h, 20h ; c DB 38h, 44h, 44h, 48h, 7Fh ; d DB 38h, 54h, 54h, 54h, 18h ; e DB 08h, 7Eh, 09h, 01h, 02h ; f DB 08h, 14h, 54h, 54h, 3Ch ; g DB 7Fh, 08h, 04h, 04h, 78h ; h DB 00h, 44h, 7Dh, 40h, 00h ; i DB 20h, 40h, 44h, 3Dh, 00h ; j DB 00h, 7Fh, 10h, 28h, 44h ; k DB 00h, 41h, 7Fh, 40h, 00h ; l DB 7Ch, 04h, 18h, 04h, 78h ; m DB 7Ch, 08h, 04h, 04h, 78h ; n DB 38h, 44h, 44h, 44h, 38h ; o DB 7Ch, 14h, 14h, 14h, 08h ; p DB 08h, 14h, 14h, 18h, 7Ch ; q DB 7Ch, 08h, 04h, 04h, 08h ; r DB 48h, 54h, 54h, 54h, 20h ; s DB 04h, 3Fh, 44h, 40h, 20h ; t DB 3Ch, 40h, 40h, 20h, 7Ch ; u DB 1Ch, 20h, 40h, 20h, 1Ch ; v DB 3Ch, 40h, 30h, 40h, 3Ch ; w DB 44h, 28h, 10h, 28h, 44h ; x DB 0Ch, 50h, 50h, 50h, 3Ch ; y DB 44h, 64h, 54h, 4Ch, 44h ; z DB 00h, 08h, 36h, 41h, 00h ; { DB 00h, 00h, 7Fh, 00h, 00h ; | DB 00h, 41h, 36h, 08h, 00h ; } DB 08h, 08h, 2Ah, 1Ch, 08h ; -> DB 08h, 1Ch, 2Ah, 08h, 08h ;<- 127 FONT8x8: db 08d, 00d db 000h,07eh,081h,0bdh,09dh,0adh,081h,07eh db 07eh,081h,095h,0b1h,0b1h,095h,081h,07eh db 07eh,0ffh,0ebh,0cfh,0cfh,0ebh,0ffh,07eh db 00eh,01fh,03fh,07eh,03fh,01fh,00eh,000h db 000h,008h,01ch,03eh,07fh,03eh,01ch,008h db 000h,038h,038h,09fh,0ffh,09fh,038h,038h db 010h,038h,0bch,0ffh,0bch,038h,010h,000h db 000h,000h,018h,03ch,03ch,018h,000h,000h db 0ffh,0ffh,0e7h,0c3h,0c3h,0e7h,0ffh,0ffh db 000h,03ch,066h,042h,042h,066h,03ch,000h db 0ffh,0c3h,099h,0bdh,0bdh,099h,0c3h,0ffh db 070h,0f8h,088h,088h,0fdh,07fh,007h,00fh db 000h,04eh,05fh,0f1h,0f1h,05fh,04eh,000h db 0c0h,0e0h,0ffh,07fh,005h,005h,007h,007h db 0c0h,0ffh,07fh,005h,005h,065h,07fh,03fh db 05ah,05ah,03ch,0e7h,0e7h,03ch,05ah,05ah db 07fh,03eh,03eh,01ch,01ch,008h,008h,000h db 008h,008h,01ch,01ch,03eh,03eh,07fh,000h db 000h,024h,066h,0ffh,0ffh,066h,024h,000h db 000h,05fh,05fh,000h,000h,05fh,05fh,000h db 006h,00fh,009h,07fh,07fh,001h,07fh,07fh db 040h,0dah,0bfh,0a5h,0fdh,059h,003h,002h db 000h,070h,070h,070h,070h,070h,070h,000h db 080h,094h,0b6h,0ffh,0ffh,0b6h,094h,080h db 000h,004h,006h,07fh,07fh,006h,004h,000h db 000h,010h,030h,07fh,07fh,030h,010h,000h db 008h,008h,008h,02ah,03eh,01ch,008h,000h db 008h,01ch,03eh,02ah,008h,008h,008h,000h db 03ch,03ch,020h,020h,020h,020h,020h,000h db 008h,01ch,03eh,008h,008h,03eh,01ch,008h db 030h,038h,03ch,03eh,03eh,03ch,038h,030h db 006h,00eh,01eh,03eh,03eh,01eh,00eh,006h db 000h,000h,000h,000h,000h,000h,000h,000h db 000h,006h,05fh,05fh,006h,000h,000h,000h db 000h,007h,007h,000h,007h,007h,000h,000h db 014h,07fh,07fh,014h,07fh,07fh,014h,000h db 000h,024h,02eh,06bh,06bh,03ah,012h,000h db 000h,046h,066h,030h,018h,00ch,066h,062h db 000h,030h,07ah,04fh,05dh,037h,07ah,048h db 000h,004h,007h,003h,000h,000h,000h,000h db 000h,000h,01ch,03eh,063h,041h,000h,000h db 000h,000h,041h,063h,03eh,01ch,000h,000h db 008h,02ah,03eh,01ch,01ch,03eh,02ah,008h db 008h,008h,03eh,03eh,008h,008h,000h,000h db 000h,000h,080h,0e0h,060h,000h,000h,000h db 000h,008h,008h,008h,008h,008h,008h,000h db 000h,000h,000h,060h,060h,000h,000h,000h db 000h,060h,030h,018h,00ch,006h,003h,001h db 000h,03eh,07fh,041h,049h,041h,07fh,03eh db 000h,044h,042h,07fh,07fh,040h,040h,000h db 000h,062h,073h,059h,049h,06fh,066h,000h db 000h,022h,063h,049h,049h,07fh,036h,000h db 000h,018h,01ch,016h,053h,07fh,07fh,050h db 000h,027h,067h,045h,045h,07dh,039h,000h db 000h,03ch,07eh,04bh,049h,079h,030h,000h db 000h,003h,003h,071h,079h,00fh,007h,000h db 000h,036h,07fh,049h,049h,07fh,036h,000h db 000h,006h,04fh,049h,069h,03fh,01eh,000h db 000h,000h,000h,066h,066h,000h,000h,000h db 000h,000h,080h,0e6h,066h,000h,000h,000h db 000h,008h,01ch,036h,063h,041h,000h,000h db 000h,024h,024h,024h,024h,024h,024h,000h db 000h,000h,041h,063h,036h,01ch,008h,000h db 000h,002h,003h,051h,059h,00fh,006h,000h db 000h,03eh,07fh,041h,05dh,055h,057h,01eh db 000h,07ch,07eh,013h,013h,07eh,07ch,000h db 000h,041h,07fh,07fh,049h,049h,07fh,036h db 000h,01ch,03eh,063h,041h,041h,063h,022h db 000h,041h,07fh,07fh,041h,063h,03eh,01ch db 000h,041h,07fh,07fh,049h,05dh,041h,063h db 000h,041h,07fh,07fh,049h,01dh,001h,003h db 000h,01ch,03eh,063h,041h,051h,073h,072h db 000h,07fh,07fh,008h,008h,07fh,07fh,000h db 000h,000h,041h,07fh,07fh,041h,000h,000h db 000h,030h,070h,040h,041h,07fh,03fh,001h db 000h,041h,07fh,07fh,008h,01ch,077h,063h db 000h,041h,07fh,07fh,041h,040h,060h,070h db 000h,07fh,07fh,00eh,01ch,00eh,07fh,07fh db 000h,07fh,07fh,006h,00ch,018h,07fh,07fh db 000h,03eh,07fh,041h,041h,041h,07fh,03eh db 000h,041h,07fh,07fh,049h,009h,00fh,006h db 000h,01eh,03fh,021h,071h,07fh,05eh,000h db 000h,041h,07fh,07fh,009h,019h,07fh,066h db 000h,022h,067h,04dh,059h,073h,022h,000h db 000h,003h,041h,07fh,07fh,041h,003h,000h db 000h,07fh,07fh,040h,040h,07fh,07fh,000h db 000h,01fh,03fh,060h,060h,03fh,01fh,000h db 000h,07fh,07fh,030h,018h,030h,07fh,07fh db 000h,043h,067h,03ch,018h,03ch,067h,043h db 000h,007h,04fh,078h,078h,04fh,007h,000h db 000h,047h,063h,071h,059h,04dh,067h,073h db 000h,000h,07fh,07fh,041h,041h,000h,000h db 000h,001h,003h,006h,00ch,018h,030h,060h db 000h,000h,041h,041h,07fh,07fh,000h,000h db 000h,008h,00ch,006h,003h,006h,00ch,008h db 080h,080h,080h,080h,080h,080h,080h,080h db 000h,000h,000h,003h,007h,004h,000h,000h db 000h,020h,074h,054h,054h,03ch,078h,040h db 000h,041h,07fh,03fh,044h,044h,07ch,038h db 000h,038h,07ch,044h,044h,06ch,028h,000h db 000h,038h,07ch,044h,045h,03fh,07fh,040h db 000h,038h,07ch,054h,054h,05ch,018h,000h db 000h,048h,07eh,07fh,049h,003h,002h,000h db 000h,098h,0bch,0a4h,0a4h,0f8h,07ch,004h db 000h,041h,07fh,07fh,008h,004h,07ch,078h db 000h,000h,044h,07dh,07dh,040h,000h,000h db 000h,060h,0e0h,080h,080h,0fdh,07dh,000h db 000h,041h,07fh,07fh,010h,038h,06ch,044h db 000h,000h,041h,07fh,07fh,040h,000h,000h db 000h,07ch,07ch,018h,038h,01ch,07ch,078h db 000h,07ch,07ch,004h,004h,07ch,078h,000h db 000h,038h,07ch,044h,044h,07ch,038h,000h db 000h,084h,0fch,0f8h,0a4h,024h,03ch,018h db 000h,018h,03ch,024h,0a4h,0f8h,0fch,084h db 000h,044h,07ch,078h,04ch,004h,01ch,018h db 000h,048h,05ch,054h,054h,074h,024h,000h db 000h,000h,004h,03eh,07fh,044h,024h,000h db 000h,03ch,07ch,040h,040h,03ch,07ch,040h db 000h,01ch,03ch,060h,060h,03ch,01ch,000h db 000h,03ch,07ch,070h,038h,070h,07ch,03ch db 000h,044h,06ch,038h,010h,038h,06ch,044h db 000h,09ch,0bch,0a0h,0a0h,0fch,07ch,000h db 000h,04ch,064h,074h,05ch,04ch,064h,000h db 000h,008h,008h,03eh,077h,041h,041h,000h db 000h,000h,000h,000h,077h,077h,000h,000h db 000h,041h,041h,077h,03eh,008h,008h,000h db 000h,002h,003h,001h,003h,002h,003h,001h db 000h,070h,078h,04ch,046h,04ch,078h,070h db 000h,00eh,09fh,091h,0b1h,0fbh,04ah,000h db 000h,03ah,07ah,040h,040h,07ah,07ah,040h db 038h,07ch,054h,055h,05dh,019h,000h,000h db 002h,023h,075h,055h,055h,07dh,07bh,042h db 000h,021h,075h,054h,054h,07dh,079h,040h db 000h,021h,075h,055h,054h,07ch,078h,040h db 000h,020h,074h,057h,057h,07ch,078h,040h db 000h,018h,03ch,0a4h,0a4h,0e4h,040h,000h db 002h,03bh,07dh,055h,055h,05dh,01bh,002h db 039h,07dh,054h,054h,05dh,019h,000h,000h db 000h,039h,07dh,055h,054h,05ch,018h,000h db 000h,001h,045h,07ch,07ch,041h,001h,000h db 000h,002h,003h,045h,07dh,07dh,043h,002h db 000h,001h,045h,07dh,07ch,040h,000h,000h db 000h,079h,07dh,016h,012h,016h,07dh,079h db 000h,078h,07ch,027h,027h,07ch,078h,000h db 044h,07ch,07ch,055h,055h,045h,000h,000h db 020h,074h,054h,054h,07ch,07ch,054h,054h db 000h,07ch,07eh,00bh,009h,07fh,07fh,049h db 000h,032h,07bh,049h,049h,07bh,032h,000h db 000h,032h,07ah,048h,048h,07ah,032h,000h db 000h,032h,07ah,04ah,048h,078h,030h,000h db 000h,03ah,07bh,041h,041h,07bh,07ah,040h db 000h,03ah,07ah,042h,040h,078h,078h,040h db 09ah,0bah,0a0h,0a0h,0fah,07ah,000h,000h db 001h,019h,03ch,066h,066h,03ch,019h,001h db 000h,03dh,07dh,040h,040h,07dh,03dh,000h db 000h,038h,07ch,064h,054h,04ch,07ch,038h db 000h,068h,07eh,07fh,049h,043h,066h,020h db 000h,03eh,07fh,051h,049h,045h,07fh,03eh db 0ffh,0ffh,009h,009h,02fh,0f6h,0f8h,0a0h db 040h,0c0h,088h,0feh,07fh,009h,003h,002h db 000h,020h,074h,054h,055h,07dh,079h,040h db 000h,000h,044h,07dh,07dh,041h,000h,000h db 000h,030h,078h,048h,04ah,07ah,032h,000h db 000h,038h,078h,040h,042h,07ah,07ah,040h db 000h,07ah,07ah,00ah,00ah,07ah,070h,000h db 000h,07dh,07dh,019h,031h,07dh,07dh,000h db 000h,000h,026h,02fh,029h,02fh,02fh,028h db 000h,000h,026h,02fh,029h,02fh,026h,000h db 000h,030h,078h,04dh,045h,060h,020h,000h db 000h,038h,038h,008h,008h,008h,008h,000h db 008h,008h,008h,008h,038h,038h,000h,000h db 04fh,06fh,030h,018h,0cch,0eeh,0bbh,091h db 04fh,06fh,030h,018h,06ch,076h,0fbh,0f9h db 000h,000h,000h,07bh,07bh,000h,000h,000h db 008h,01ch,036h,022h,008h,01ch,036h,022h db 022h,036h,01ch,008h,022h,036h,01ch,008h db 0aah,000h,055h,000h,0aah,000h,055h,000h db 0aah,055h,0aah,055h,0aah,055h,0aah,055h db 0ddh,0ffh,0aah,077h,0ddh,0aah,0ffh,077h db 000h,000h,000h,0ffh,0ffh,000h,000h,000h db 010h,010h,010h,0ffh,0ffh,000h,000h,000h db 014h,014h,014h,0ffh,0ffh,000h,000h,000h db 010h,010h,0ffh,0ffh,000h,0ffh,0ffh,000h db 010h,010h,0f0h,0f0h,010h,0f0h,0f0h,000h db 014h,014h,014h,0fch,0fch,000h,000h,000h db 014h,014h,0f7h,0f7h,000h,0ffh,0ffh,000h db 000h,000h,0ffh,0ffh,000h,0ffh,0ffh,000h db 014h,014h,0f4h,0f4h,004h,0fch,0fch,000h db 014h,014h,017h,017h,010h,01fh,01fh,000h db 010h,010h,01fh,01fh,010h,01fh,01fh,000h db 014h,014h,014h,01fh,01fh,000h,000h,000h db 010h,010h,010h,0f0h,0f0h,000h,000h,000h db 000h,000h,000h,01fh,01fh,010h,010h,010h db 010h,010h,010h,01fh,01fh,010h,010h,010h db 010h,010h,010h,0f0h,0f0h,010h,010h,010h db 000h,000h,000h,0ffh,0ffh,010h,010h,010h db 010h,010h,010h,010h,010h,010h,010h,010h db 010h,010h,010h,0ffh,0ffh,010h,010h,010h db 000h,000h,000h,0ffh,0ffh,014h,014h,014h db 000h,000h,0ffh,0ffh,000h,0ffh,0ffh,010h db 000h,000h,01fh,01fh,010h,017h,017h,014h db 000h,000h,0fch,0fch,004h,0f4h,0f4h,014h db 014h,014h,017h,017h,010h,017h,017h,014h db 014h,014h,0f4h,0f4h,004h,0f4h,0f4h,014h db 000h,000h,0ffh,0ffh,000h,0f7h,0f7h,014h db 014h,014h,014h,014h,014h,014h,014h,014h db 014h,014h,0f7h,0f7h,000h,0f7h,0f7h,014h db 014h,014h,014h,017h,017h,014h,014h,014h db 010h,010h,01fh,01fh,010h,01fh,01fh,010h db 014h,014h,014h,0f4h,0f4h,014h,014h,014h db 010h,010h,0f0h,0f0h,010h,0f0h,0f0h,010h db 000h,000h,01fh,01fh,010h,01fh,01fh,010h db 000h,000h,000h,01fh,01fh,014h,014h,014h db 000h,000h,000h,0fch,0fch,014h,014h,014h db 000h,000h,0f0h,0f0h,010h,0f0h,0f0h,010h db 010h,010h,0ffh,0ffh,010h,0ffh,0ffh,010h db 014h,014h,014h,0ffh,0ffh,014h,014h,014h db 010h,010h,010h,01fh,01fh,000h,000h,000h db 000h,000h,000h,0f0h,0f0h,010h,010h,010h db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh db 0f0h,0f0h,0f0h,0f0h,0f0h,0f0h,0f0h,0f0h db 0ffh,0ffh,0ffh,0ffh,000h,000h,000h,000h db 000h,000h,000h,000h,0ffh,0ffh,0ffh,0ffh db 00fh,00fh,00fh,00fh,00fh,00fh,00fh,00fh db 000h,038h,07ch,044h,06ch,038h,06ch,044h db 000h,0fch,0feh,02ah,02ah,03eh,014h,000h db 000h,07eh,07eh,002h,002h,006h,006h,000h db 000h,002h,07eh,07eh,002h,07eh,07eh,002h db 000h,063h,077h,05dh,049h,063h,063h,000h db 000h,038h,07ch,044h,07ch,03ch,004h,004h db 000h,080h,0feh,07eh,020h,020h,03eh,01eh db 000h,004h,006h,002h,07eh,07ch,006h,002h db 000h,099h,0bdh,0e7h,0e7h,0bdh,099h,000h db 000h,01ch,03eh,06bh,049h,06bh,03eh,01ch db 000h,04ch,07eh,073h,001h,073h,07eh,04ch db 000h,030h,078h,04ah,04fh,07dh,039h,000h db 018h,03ch,024h,03ch,03ch,024h,03ch,018h db 098h,0fch,064h,03ch,03eh,027h,03dh,018h db 000h,01ch,03eh,06bh,049h,049h,000h,000h db 000h,07eh,07fh,001h,001h,07fh,07eh,000h db 000h,02ah,02ah,02ah,02ah,02ah,02ah,000h db 000h,044h,044h,05fh,05fh,044h,044h,000h db 000h,040h,051h,05bh,04eh,044h,040h,000h db 000h,040h,044h,04eh,05bh,051h,040h,000h db 000h,000h,000h,0feh,0ffh,001h,007h,006h db 060h,0e0h,080h,0ffh,07fh,000h,000h,000h db 000h,008h,008h,06bh,06bh,008h,008h,000h db 000h,024h,036h,012h,036h,024h,036h,012h db 000h,000h,006h,00fh,009h,00fh,006h,000h db 000h,000h,000h,000h,018h,018h,000h,000h db 000h,000h,000h,010h,010h,000h,000h,000h db 010h,030h,070h,0c0h,0ffh,0ffh,001h,001h db 000h,01fh,01fh,001h,01fh,01eh,000h,000h db 000h,019h,01dh,017h,012h,000h,000h,000h db 000h,000h,03ch,03ch,03ch,03ch,000h,000h db 000h,03eh,041h,05dh,055h,055h,041h,03eh END