;-------------------------------------------------------------------
; 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
