Diversão para os alunos!
- Código: Selecionar todos
.MODEL SMALL
; 000 ADD
IO0 EQU 0000h ; 000 0000 00000 0000
IO1 EQU 0200h ; 000 0001 00000 0000
; I/O Address Bus decode - every device gets 0x200 addresses */
; 8251A USART
IO2 EQU 0400h
;8253
IO3 EQU 0600h
DATA_LCD EQU (IO0) ; ESCREVE BARRAMENTO LCD
CONT_LCD EQU (IO1) ; ESCREVE BARRAMENTO CONTROLE
; 8251A USART
ADR_USART_DATA EQU (IO2 + 00h)
ADR_USART_CMD EQU (IO2 + 02h)
ADR_USART_STAT EQU (IO2 + 02h)
; 8253A Timer
ADR_TIMER_DATA0 EQU (IO3 + 00h)
ADR_TIMER_DATA1 EQU (IO3 + 02h)
ADR_TIMER_DATA2 EQU (IO3 + 04h)
ADR_TIMER_CONTROL EQU (IO3 + 06h)
TIMER_COUNTER0 EQU 00h
TIMER_COUNTER1 EQU 40h
TIMER_COUNTER2 EQU 80h
TIMER_LATCH EQU 00h
TIMER_LSB EQU 10h
TIMER_MSB EQU 20h
TIMER_LSB_MSB EQU 30h
TIMER_MODE0 EQU 00h
TIMER_MODE1 EQU 02h
TIMER_MODE2 EQU 04h
TIMER_MODE3 EQU 06h
TIMER_MODE4 EQU 08h
TIMER_MODE5 EQU 09h
TIMER_BCD EQU 01h
;8255
IO4 EQU 0800h
ADR_PPI_PORTA EQU (IO4)
ADR_PPI_PORTB EQU (IO4 + 02h)
ADR_PPI_PORTC EQU (IO4 + 04h)
ADR_PPI_CONTROL EQU (IO4 + 06h)
PPI_PORTA_INP EQU 10h
PPI_PORTA_OUT EQU 00h
PPI_PORTB_INP EQU 02h
PPI_PORTB_OUT EQU 00h
PPI_PORTCL_INP EQU 01h
PPI_PORTCL_OUT EQU 00h
PPI_PORTCH_INP EQU 08h
PPI_PORTCH_OUT EQU 00h
PPI_MODE_BCL_0 EQU 00h
PPI_MODE_BCL_1 EQU 04h
PPI_MODE_ACH_0 EQU 00h
PPI_MODE_ACH_1 EQU 20h
PPI_MODE_ACH_2 EQU 40h
PPI_ACTIVE EQU 80h
.8086
.code
MACRO_INICIALIZA_8253_TIMER0 MACRO HIGH,LOW,DELAY
PUSHF
PUSH AX
PUSH CX
PUSH DX
MOV AL,36H
MOV DX, ADR_TIMER_CONTROL
OUT DX,AL
MOV AL,LOW
MOV DX, ADR_TIMER_DATA0
OUT DX,AL
MOV AL,HIGH
MOV DX, ADR_TIMER_DATA0
OUT DX,AL
MOV CX, DELAY
LOOP $
POP DX
POP CX
POP AX
POPF
ENDM
MACRO_INICIALIZA_8253_TIMER1 MACRO HIGH,LOW,DELAY
PUSHF
PUSH AX
PUSH CX
PUSH DX
MOV AL,76H
MOV DX, ADR_TIMER_CONTROL
OUT DX,AL
MOV AL,LOW
MOV DX, ADR_TIMER_DATA1
OUT DX,AL
MOV AL,HIGH
MOV DX, ADR_TIMER_DATA1
OUT DX,AL
MOV CX, DELAY
LOOP $
POP DX
POP CX
POP AX
POPF
ENDM
MACRO_INICIALIZA_8253_TIMER2 MACRO HIGH,LOW,DELAY
PUSHF
PUSH AX
PUSH CX
PUSH DX
MOV AL,0B6H
MOV DX, ADR_TIMER_CONTROL
OUT DX,AL
MOV AL,LOW
MOV DX, ADR_TIMER_DATA2
OUT DX,AL
MOV AL,HIGH
MOV DX, ADR_TIMER_DATA2
OUT DX,AL
MOV CX, DELAY
LOOP $
POP DX
POP CX
POP AX
POPF
ENDM
MACRO_CONTROLE_LCD MACRO CONTROLE
PUSH AX
PUSH DX
MOV AL, CONTROLE
MOV DX, DATA_LCD
OUT DX, AL
MOV DX, CONT_LCD ; E = HIGH
MOV AL, 2
OUT DX, AL
CALL WAITS ; PAUSA LCD PROCESSAR ENTRADA
MOV DX, CONT_LCD ; E = LOW
MOV AL, 0
OUT DX, AL
POP DX
POP AX
ENDM
MACRO_IMPRIME_LCD MACRO DADO
PUSH AX
PUSH DX
MOV AL, DADO
MOV DX, DATA_LCD
OUT DX,AL
MOV DX, CONT_LCD
MOV AL, 3 ; 00000011B
OUT DX, AL
CALL WAITS
MOV DX, CONT_LCD
MOV AL, 1
OUT DX,AL
POP DX
POP AX
ENDM
MACRO_IMPRIME_REGISTRADOR MACRO DADO
PUSH AX
PUSH BX
PUSH CX
XOR AX,AX
MOV DL, DADO
MOV AL,DL
MOV BL,10D ; AX = AL/BL ==> AL QUOCIENTE E AH RESTO
DIV BL
ADD AH,"0"
PUSH AX
MOV AH,0
DIV BL
ADD AH,"0"
PUSH AX
POP AX
MACRO_IMPRIME_LCD AH
POP AX
MACRO_IMPRIME_LCD AH
POP CX
POP BX
POP AX
ENDM
ORG 0008H
PONTEIRO_TRATADOR_INTERRUPCAO DB 4 DUP("J")
ORG 0400H
ENABLE_PULSE:
CALL GLCD_EN_HIGH
CALL GLCD_EN_LOW
RET
GLCD_ON:
CALL GLCD_CS1_LOW
CALL GLCD_CS2_LOW
CALL GLCD_RS_LOW
CALL GLCD_RW_LOW
MOV AL,03FH
CALL MANDA_PORT_B
CALL ENABLE_PULSE
RET
GLCD_SET_START_LINE:
CALL GLCD_RS_LOW
CALL GLCD_RW_LOW
CALL GLCD_CS1_LOW
CALL GLCD_CS2_LOW
MOV GLCD_DATA,0C0H
OR GLCD_DATA, AL
CALL ENABLE_PULSE
RET
GLCD_GOTO_COL:
PUSHF
PUSH AX
CALL GLCD_RS_LOW
CALL GLCD_RW_LOW
CMP AH,64
JL LEFT
CALL GLCD_CS2_LOW
CALL GLCD_CS1_HIGH
SUB AH,64
MOV COL_DATA,AH
JMP SAI_GOTO_COL
LEFT:
CALL GLCD_CS1_LOW
CALL GLCD_CS2_HIGH
MOV COL_DATA,AH
SAI_GOTO_COL:
OR COL_DATA, 40H
AND COL_DATA, 7FH
MOV AL,COL_DATA
CALL MANDA_PORT_B
CALL ENABLE_PULSE
POP AX
POPF
RET
GLCD_GOTO_ROW:
PUSH AX
CALL GLCD_RS_LOW
CALL GLCD_RW_LOW
OR AL,0B8H
AND AL,0BFH
MOV COL_DATA,AL
CALL MANDA_PORT_B
CALL ENABLE_PULSE
POP AX
RET
; AH Y=LINHA E AL X=COLUNA
GLCD_GOTO_XY:
CALL GLCD_GOTO_COL
CALL GLCD_GOTO_ROW
RET
; AL = DATA
GLCD_WRITE:
CALL GLCD_RS_HIGH
CALL GLCD_RW_LOW
CALL MANDA_PORT_B
CALL ENABLE_PULSE
RET
;AL = DATA
GLCD_CLRLN:
PUSHF
PUSH AX
PUSH CX
MOV AH,0
CALL GLCD_GOTO_XY
MOV AH,64
CALL GLCD_GOTO_XY
CALL GLCD_CS1_LOW
MOV AL,0
MOV CX,64
ESCREVA:
CALL GLCD_WRITE
LOOP ESCREVA
POP CX
POP AX
POPF
RET
GLCD_CLR:
PUSHF
PUSH AX
MOV AL,0
CLRLN:
CALL GLCD_CLRLN
ADD AL,1
CMP AL,8
JNE CLRLN
POP AX
POPF
RET
;AH, AL, BH
GLCD_DRAW_POINT:
PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH AX ; SALVA AH, AL
PUSH AX ; SALVA AH, AL
MOV CH,AH ; SALVA AH
MOV AH,0
MOV BL,8
DIV BL
MOV AH,CH
CALL GLCD_GOTO_XY
POP AX ; RESTAURA AH, AL
CMP BH,0
JE LIGHT_SPOT
MOV AH,0
MOV BH,8
DIV BH
; AH RESTO
MOV CL,AH
MOV AL,1
SHL AL,CL
MOV COL_DATA_AUX,AL
MOV AH,CH
CALL GLCD_READ_DATA
OR COL_DATA_AUX,AL
JMP SAI_GLCD_DRAW_POINT
LIGHT_SPOT:
MOV AH,0
MOV BH,8
DIV BH
; AH RESTO
MOV CL,AH
MOV AL,1
SHL AL,CL
NOT AL
MOV COL_DATA_AUX,AL
MOV AH,CH
CALL GLCD_READ_DATA
AND COL_DATA_AUX,AL
SAI_GLCD_DRAW_POINT:
POP AX
MOV CH,AH ; SALVA AH
MOV AH,0
MOV BL,8
DIV BL
MOV AH,CH
CALL GLCD_GOTO_XY
MOV AL, COL_DATA_AUX
CALL GLCD_WRITE
POP CX
POP BX
POP AX
POPF
RET
GLCD_READ_DATA:
CALL INICIALIZA_8255_PORT_INPUT
CALL GLCD_RW_HIGH
CALL GLCD_RS_HIGH
CMP AH,63
JG HAB_CS2
HAB_CS1:
CALL GLCD_CS2_HIGH
CALL GLCD_CS1_LOW
JMP HAB
HAB_CS2:
CALL GLCD_CS2_LOW
CALL GLCD_CS1_HIGH
HAB:
CALL GLCD_EN_HIGH
CALL GLCD_EN_LOW
CALL GLCD_EN_HIGH
CALL LE_PORT_B
MOV READ_DATA,AL
CALL GLCD_EN_LOW
CALL INICIALIZA_8255_PORTB_OUTPUT
RET
; AL = INDICE CARACTER FONT (COMECA EM 0)
PRINT_CAR:
PUSHF
PUSH AX
PUSH BX
PUSH CX
MOV BL,5
MUL BL
MOV BX,AX
MOV CX,5
PRINTING_CAR:
MOV AL,FONTS[BX]
CALL GLCD_WRITE
INC BX
LOOP PRINTING_CAR
POP CX
POP BX
POP AX
POPF
RET
PLOT_BMP:
PUSHF
PUSH AX
PUSH SI
MOV AL,0
MOV AH,0
PLOT:
CALL GLCD_GOTO_XY
PUSH AX
MOV AL,[SI]
CALL GLCD_WRITE
POP AX
INC SI
INC AH
CMP AH,127
JNE PLOT
MOV AH,0
INC AL
CMP AL,8
JNE PLOT
POP SI
POP AX
POPF
RET
GLCD_CS1_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 32
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_CS1_LOW:
PUSHF
PUSH AX
MOV AL, 32
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_CS2_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 16
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_CS2_LOW:
PUSHF
PUSH AX
MOV AL, 16
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RST_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 1
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RST_LOW:
PUSHF
PUSH AX
MOV AL, 1
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_EN_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 2
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_EN_LOW:
PUSHF
PUSH AX
MOV AL, 2
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RW_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 4
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RW_LOW:
PUSHF
PUSH AX
MOV AL, 4
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RS_HIGH:
PUSHF
PUSH AX
OR GLCD_CONTROL, 8
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
GLCD_RS_LOW:
PUSHF
PUSH AX
MOV AL, 8
NOT AL
AND GLCD_CONTROL, AL
MOV AL,GLCD_CONTROL
CALL MANDA_PORT_A
POP AX
POPF
RET
INICIALIZA_8251:
XOR AL,AL
MOV DX, ADR_USART_CMD
OUT DX,AL
OUT DX,AL
OUT DX,AL
MOV AL,40H
OUT DX,AL
MOV AL,4DH
OUT DX,AL
MOV AL,37H
OUT DX,AL
RET
RECEBE_CARACTER:
PUSHF
PUSH DX
AGUARDA_CARACTER:
MOV DX, ADR_USART_STAT
IN AL,DX
TEST AL,2
JZ AGUARDA_CARACTER
MOV DX, ADR_USART_DATA
IN AL,DX
SHR AL,1
NAO_RECEBIDO:
POP DX
POPF
RET
MANDA_CARACTER:
PUSHF
PUSH DX
PUSH AX ; SALVA AL
MOV DX, ADR_USART_DATA
BUSY:
MOV DX, ADR_USART_STAT
IN AL,DX
TEST AL,1
JZ BUSY
MOV DX, ADR_USART_DATA
POP AX ; RESTAURA AL
OUT DX,AL
POP DX
POPF
RET
INICIALIZA_8255_PORTB_OUTPUT:
PUSHF
PUSH AX
PUSH DX
MOV DX, ADR_PPI_CONTROL
MOV AL,0
OR AL,PPI_PORTA_OUT
OR AL,PPI_PORTB_OUT
OR AL,PPI_PORTCL_INP
OR AL,PPI_PORTCH_INP
OR AL,PPI_MODE_BCL_0
OR AL,PPI_MODE_ACH_0
OR AL,PPI_ACTIVE
OUT DX,AL
POPF
POP AX
POP DX
RET
INICIALIZA_8255_PORT_INPUT:
PUSHF
PUSH AX
PUSH DX
MOV DX, ADR_PPI_CONTROL
MOV AL,0
OR AL,PPI_PORTA_OUT
OR AL,PPI_PORTB_INP
OR AL,PPI_PORTCL_INP
OR AL,PPI_PORTCH_INP
OR AL,PPI_MODE_BCL_0
OR AL,PPI_MODE_ACH_0
OR AL,PPI_ACTIVE
OUT DX,AL
POPF
POP AX
POP DX
RET
MANDA_PORT_A:
PUSHF
PUSH DX
MOV DX,ADR_PPI_PORTA
OUT DX,AL
POP DX
POPF
RET
MANDA_PORT_B:
PUSHF
PUSH DX
MOV DX,ADR_PPI_PORTB
OUT DX,AL
POP DX
POPF
RET
LE_PORT_B:
PUSHF
PUSH DX
MOV DX,ADR_PPI_PORTB
IN AL,DX
POP DX
POPF
RET
LE_PORT_C:
PUSHF
PUSH DX
MOV DX,ADR_PPI_PORTC
IN AL,DX
POP DX
POPF
RET
.startup
MOV AX,0000
MOV DS,AX
MOV WORD PTR PONTEIRO_TRATADOR_INTERRUPCAO, OFFSET INTERRUPT_ONE_SECOND
MOV WORD PTR PONTEIRO_TRATADOR_INTERRUPCAO + 2, SEG INTERRUPT_ONE_SECOND
MOV AX,@DATA
MOV DS,AX
MOV AX,@STACK
MOV SS,AX
MOV DX, CONT_LCD
MOV AL, 0
OUT DX, AL
MACRO_CONTROLE_LCD 38H
MACRO_CONTROLE_LCD 0CH
MACRO_CONTROLE_LCD 02H
;31,14,14,4,14,14,31,0
MACRO_CONTROLE_LCD 40H
MACRO_IMPRIME_LCD 31
MACRO_IMPRIME_LCD 14
MACRO_IMPRIME_LCD 14
MACRO_IMPRIME_LCD 04
MACRO_IMPRIME_LCD 14
MACRO_IMPRIME_LCD 14
MACRO_IMPRIME_LCD 31
MACRO_IMPRIME_LCD 00
MACRO_CONTROLE_LCD 80H
MACRO_CONTROLE_LCD 83H
MACRO_IMPRIME_LCD "H"
MACRO_IMPRIME_LCD "O"
MACRO_IMPRIME_LCD "R"
MACRO_IMPRIME_LCD "A"
MACRO_IMPRIME_LCD 00
MACRO_IMPRIME_LCD "C"
MACRO_IMPRIME_LCD "E"
MACRO_IMPRIME_LCD "R"
MACRO_IMPRIME_LCD "T"
MACRO_IMPRIME_LCD "A"
CALL INICIALIZA_8251
CALL INICIALIZA_8255_PORTB_OUTPUT
CALL GLCD_CS1_HIGH
CALL GLCD_CS2_HIGH
CALL GLCD_RST_HIGH
CALL GLCD_ON
DEMO:
CALL GLCD_CLR
MOV AL,0
CALL GLCD_SET_START_LINE
MOV BH,1
AGUARDA:
MOV AL,0
COL:
MOV CX,127
FILL_COL:
MOV AH,CL
CALL GLCD_DRAW_POINT
LOOP FILL_COL
ADD AL,16
CMP AL,64
JNE COL
CALL GLCD_CLR
LEA SI, TRUCK
CALL PLOT_BMP
PAUSA: JMP PAUSA
CALL GLCD_CLR
MOV AH,0
MOV AL,0
CALL GLCD_GOTO_XY
MOV AL,1
CALL PRINT_CAR
FIM: JMP FIM
MACRO_CONTROLE_LCD 0C4H
MACRO_IMPRIME_REGISTRADOR CONTADOR_HORAS
MACRO_IMPRIME_LCD ":"
MACRO_IMPRIME_REGISTRADOR CONTADOR_MINUTOS
MACRO_IMPRIME_LCD ":"
MACRO_IMPRIME_REGISTRADOR CONTADOR_SEGUNDOS
MACRO_INICIALIZA_8253_TIMER0 00H,0BFH,10000 ; 523.25HZ NOTA DO (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,0AAH,10000 ; 587.33HZ NOTA RE (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,97H,10000 ; 659.26HZ NOTA MI (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,8FH,10000 ; 698.46HZ NOTA FA (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,7FH,10000 ; 783.99HZ NOTA SO (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,71H,10000 ; 880.00HZ NOTA LA (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,65H,10000 ; 987.77HZ NOTA SI (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,5FH,10000 ; 1046.50 HZ NOTA DO (020BH)
MACRO_INICIALIZA_8253_TIMER0 00H,00H,10000 ; 1046.50 HZ NOTA DO (020BH)
MACRO_CONTROLE_LCD 0C4H
MACRO_IMPRIME_REGISTRADOR CONTADOR_HORAS
MACRO_IMPRIME_LCD ":"
MACRO_IMPRIME_REGISTRADOR CONTADOR_MINUTOS
MACRO_IMPRIME_LCD ":"
MACRO_IMPRIME_REGISTRADOR CONTADOR_SEGUNDOS
MOV AL,"."
CALL MANDA_CARACTER
JMP DEMO
WAITS:
PUSH CX
MOV CX,500
WAIT1:
NOP
LOOP WAIT1
POP CX
RET
INTERRUPT_ONE_SECOND:
PUSHF
INC BYTE PTR CONTADOR_SEGUNDOS
CMP BYTE PTR CONTADOR_SEGUNDOS,60
JNE SAI_INTERRUPT
MOV BYTE PTR CONTADOR_SEGUNDOS,0
INC BYTE PTR CONTADOR_MINUTOS
CMP BYTE PTR CONTADOR_MINUTOS,60
JNE SAI_INTERRUPT
MOV BYTE PTR CONTADOR_MINUTOS,00
INC BYTE PTR CONTADOR_HORAS
CMP BYTE PTR CONTADOR_HORAS,24
JNE SAI_INTERRUPT
MOV BYTE PTR CONTADOR_HORAS,00
SAI_INTERRUPT:
POPF
IRET
.DATA
CONTADOR_SEGUNDOS DB 0
CONTADOR_MINUTOS DB 0
CONTADOR_HORAS DB 0
GLCD_CONTROL DB 0
GLCD_DATA DB 0
COL_DATA DB 0
COL_DATA_AUX DB 0
READ_DATA DB 0
TRUCK DB 0, 0, 0, 0, 0,248, 8, 8, 8, 8, 8, 8, 12, 12, 12, 12
DB 12, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9
DB 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,137,137,137,137,137,137
DB 137,137,137,137,137,137,137, 9, 9, 9, 9, 9, 9, 9, 9, 9
DB 9, 9, 13,253, 13,195, 6,252, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 240,240,240,240,240,224,224,240,240,240,240,240,224,192,192,224
DB 240,240,240,240,240,224,192, 0, 0, 0,255,255,255,255,255,195
DB 195,195,195,195,195,195, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0,255,240, 79,224,255, 96, 96, 96, 32, 32, 32, 32, 32
DB 32, 32, 32, 32, 32, 32, 32, 32, 64, 64, 64, 64,128, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 255,255,255,255,255, 0, 0, 0, 0,255,255,255,255,255, 0, 0
DB 0, 0,255,255,255,255,255, 0, 0, 0,255,255,255,255,255,129
DB 129,129,129,129,129,129,128, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0,255, 1,248, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
DB 8, 8, 8, 8, 16,224, 24, 36,196, 70,130,130,133,217,102,112
DB 160,192, 96, 96, 32, 32,160,160,224,224,192, 64, 64,128,128,192
DB 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 63, 96, 96, 96,224, 96, 96, 96, 96, 96, 96
DB 99, 99, 99, 99, 99, 96, 96, 96, 96, 99, 99, 99, 99, 99, 96, 96
DB 96, 96, 99, 99, 99, 99, 99, 96, 96, 96, 99, 99, 99, 99, 99, 99
DB 99, 99, 99, 99, 99, 99, 99, 96, 96, 96, 96, 96, 96, 96, 64, 64
DB 64,224,224,255,246, 1, 14, 6, 6, 2, 2, 2, 2, 2, 2, 2
DB 2, 2, 2, 2,130, 67,114, 62, 35, 16, 16, 0, 7, 3, 3, 2
DB 4, 4, 4, 4, 4, 4, 4, 28, 16, 16, 16, 17, 17, 9, 9, 41
DB 112, 32, 67, 5,240,126,174,128, 56, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1
DB 1, 1,127,127,127,127,255,255,247,251,123,191, 95, 93,125,189
DB 189, 63, 93, 89,177,115,243,229,207, 27, 63,119,255,207,191,255
DB 255,255,255,255,255,255,255,127,127,127,127,127,127,127,127,255
DB 255,255,127,127,125,120,120,120,120,120,248,120,120,120,120,120
DB 120,248,248,232,143, 0, 0, 0, 0, 0, 0, 0, 0,128,240,248
DB 120,188,220, 92,252, 28, 28, 60, 92, 92, 60,120,248,248, 96,192
DB 143,168,216,136, 49, 68, 72, 50,160, 96, 0, 0, 0, 0, 0, 0
DB 0, 0, 0,128,192,248,248,248,248,252,254,254,254,254,254,254
DB 254,254,254,254,254,255,255,255,255,255,246,239,208,246,174,173
DB 169,128,209,208,224,247,249,255,255,252,220,240,127,255,223,255
DB 255,255,255,255,255,254,254,255,255,255,255,255,255,255,254,255
DB 255,255,255,255,255,255,254,254,254,254,254,254,254,254,254,254
DB 254,254,254,254,255,255,255,255,255,255,254,255,190,255,255,253
DB 240,239,221,223,254,168,136,170,196,208,228,230,248,127,126,156
DB 223,226,242,242,242,242,242,177, 32, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 1, 1, 1, 1, 3, 3, 3, 7, 7, 7, 7, 7, 15
DB 15, 15, 7, 15, 15, 15, 7, 7, 15, 14, 15, 13, 15, 47, 43, 43
DB 43, 43, 43, 47,111,239,255,253,253,255,254,255,255,255,255,255
DB 191,191,239,239,239,191,255,191,255,255,255,255,255,255,255,255
DB 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
DB 255,255,255,255,127,127,127,127,255,255,191,191,191,191,255,254
DB 255,253,255,255,255,251,255,255,255,127,125, 63, 31, 31, 31, 31
DB 31, 31, 63, 15, 15, 7, 7, 3, 3, 3, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0
DB 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1
DB 1, 1, 1, 1, 3, 3, 3, 11, 11, 11, 11, 7, 3, 14, 6, 6
DB 6, 2, 18, 19, 19, 3, 23, 21, 21, 17, 1, 19, 19, 3, 6, 6
DB 14, 15, 15, 7, 15, 15, 15, 11, 2, 0, 0, 0, 0, 0, 0, 0
DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
FONTS DB 00H, 00H, 00H, 00H, 00H ; (space)
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, 60H, 60H, 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, 08 ; <-
.STACK
MINHA_PILHA DW 128 DUP(?)
END