Sunteți pe pagina 1din 19

;*****************************************************************************

***
;* * THIS PROGRAM WILL SCROLL THE PC DATA ON 4 PIECES OF DOT MATRIX OF
;*****************************************************************************
***
BUFFER EQU 30H
FADDR EQU 0A0H
BLOCK1 EQU 0H
BLOCK2 EQU 1H
BLOCK3 EQU 2H
BLOCK4 EQU 3H
BLOCK5 EQU 4H
BLOCK6 EQU 5H
BLOCK7 EQU 6H
BLOCK8 EQU 7H

; FIXED ADDRESS FOR AT24CXX EEPROMS FAMILY


; PROGRAMMABLE MEMORY BLOCK ADDRESS (0..7)

SCL BIT P3.6


SDA BIT P3.7

; SERIAL CLOCK INOUT


; SERIAL DATA

ORG 0000H
JMP MAIN

; RESET INTERRUPT

ORG 0023H
JMP SERIAL

; SERIAL COMMUNICATION INTERRUPT

MAIN:
MOV R0,#0FFH
; CLEAR ALL RAM LOCATION
ZERO:
MOV @R0,#00H
DJNZ R0,ZERO
MOV TMOD,#20H
; TIMER MODE
MOV SCON,#50H
MOV TH1,#0FDH
; BAUD RATE 9600 @ 11.0592 MHZ
MOV TL1,#0FDH
MOV IE,#90H
; SERIAL INTERRUPT ENABLE
MOV R1,#37H
A2:
MOV R7,#BLOCK7
MOV 31H,#10H
MOV BUFFER,#00D
MOV A,R7
CALL WRITE_BYTE
JC A2
MOV 31H,#00D
MOV R7,#BLOCK1

MOV R6,#00
SETB TR1
SETB F0
BAK:
JNB F0,$
CHECK:
CALL READING
CALL RESET
SETB C
CALL DELAY
JMP BAK

;*****************************************************************
;* * WRITE 32 BYTES SEQUENTIALY HAVING VALUE 80H AT THE START *
;*****************************************************************

WRITE_32:
MOV BUFFER,#80H
; WRITE VALUE 80H
MOV B,#20D
; RETRY COUNTER IN CASE OF FAILURE
MOV 31H,#00H
; SETUP ADDRESSES
X52:
MOV A,R7
; PROGRAMMABLE PAGE ADDRESS
CALL WRITE_BYTE
; WRITE BYTE
CALL DELAY_5ms
JNC X53
DJNZ B,X52
; OK OR NOT OK
SETB C
; SET CARRY
JMP X54
X53:
INC 31H
MOV A,31H
CJNE A,#32D,X52
CLR C
X54:
RET

;****************************************************************
;* * WRITE 32 BYTES SEQUENTIALY HAVING VALUE 80H AT THE END *
;****************************************************************

WRITE_32_END:
MOV BUFFER,#80H
; WRITE VALUE 80H
MOV B,#20D
; RETRY COUNTER IN CASE OF FAILURE
X82:
MOV A,R7
; PROGRAMMABLE PAGE ADDRESS
CALL WRITE_BYTE
; WRITE BYTE
CALL DELAY_5ms
JNC X83
JMP X82
; OK OR NOT OK
SETB C
; SET CARRY
JMP X84
X83:
CALL INCREMENT
JNC X
INC 32H
MOV A,32H
CALL BLOCK
; CALCULATE PAGE OF EEPROM (R7=PAGE ADDRESS)
CLR C
X:
DJNZ B,X82
CLR C
X84:
RET

READING:
MOV 33H,#00H
CALL READ_BLOCK
RET

;*******************************************************
;* * READ FROM EEPROM AND SELECTION OF MEMORY BLOCK * *
;*******************************************************
READ_BLOCK:
; READ FROM ONE BYTE TO ONE PAGE OF DATA FROM AN AT24C16A.
; PERFORMS A RANDOM READ WHICH IS EXTENDED INTO A SEQUENTIAL READ
; WHEN MORE THAN ONE BYTE IS READ. CALLED WITH PROGRAMMABLE
ADDRESS
; IN A, ADDRESS OF FIRST BYTE AT ADDRESS 33H.
; RETURNS DATA AT PORT. RETURNS CY SET TO INDICATE THAT THE BUS IS
; NOT AVAILABLE OR THAT THE ADDRESSED DEVICE FAILED TO
ACKNOWLEDGE.
; SEND DUMMY WRITE COMMAND TO ADDRESS FIRST BYTE.

CLR C
MOV R7,#BLOCK1
NEXT_32:
CALL START
JC X35
MOV A,R7
RL A
ORL A,#FADDR
MOV BUFFER,A
CLR ACC.0
CALL SHOUT
JC X34

; PROGRAMMABLE ADDRESS TO BITS 3:1


; ADD FIXED ADDRESS
; SAVE COPY OF DEVICE ADDRESS
; SPECIFY WRITE OPERATION
; SEND DEVICE ADDRESS
; ABORT IF NO ACKNOWLEDGE

MOV A,33H
CALL SHOUT
JC X34

; SEND LOW BYTE OF ADDRESS


;
; ABORT IF NO ACKNOWLEDGE

CALL START
JC X34
MOV A,BUFFER
SETB ACC.0
CALL SHOUT
JC X34
X31:
CALL SHIN
JNZ DISPLAY
CALL NAK
CLR C
X34:
CALL STOP
X35:
RET

; ABORT IF BUS NOT AVAILABLE

; SEND READ COMMAND AND RECEIVE DATA.


; SECOND START FOR READ
; ABORT IF BUS NOT AVAILABLE
; GET DEVICE ADDRESS
; SPECIFY READ OPERATION
; SEND DEVICE ADDRESS
; ABORT IF NO ACKNOWLEDGE

; RECEIVE DATA BYTE


; DO NOT ACKNOWLEDGE LAST BYTE

;*****************************************************************************
****************
;*
* SEND DATA ON PORT 2 READED FROM EEPROM *
*
;*****************************************************************************
****************

DISPLAY:
JB F0,X3
MOV P2,#00H
JMP X35
X3:
MOV P2,A
MOV P1,R6
INC R6
CALL DELAY
CJNE R6,#32D,NLB
CALL NAK
CLR C
CALL STOP
MOV A,33H
ADD A,#1D
MOV 33H,A
JNZ NEXT_PAGE
INC 34H
MOV A,34H
CALL BLOCK
NEXT_PAGE:
MOV R6,#00D
JMP NEXT_32

; READED DATA
; DECODING OUTPUT

; CHECK FOR 4 PIECES (8*4=32)


; NO ACKNOWLEDGE
; STOP CONDITION
; NEXT ADDRESS

; CALCULATE MEMORY PAGE

NLB:
CALL ACK
JMP X31

;*****************************************************************************
****************
;*
* START CONDITION FOR EEPROM *
*
;*****************************************************************************
****************

START:
; SEND START, DEFINED AS HIGH-TO-LOW SDA WITH SCL HIGH.
; RETURN WITH SCL, SDA LOW.
; RETURNS CY SET IF BUS IS NOT AVAILABLE.
SETB SDA
SETB SCL
; VERIFY BUS AVAILABLE.

JNB
JNB
NOP
CLR
NOP
NOP
NOP
NOP
NOP
CLR

SDA,X40
SCL,X40

; JUMP IF NOT HIGH


; JUMP IF NOT HIGH
; ENFORCE SETUP DELAY AND CYCLE DELAY

SDA
; ENFORCE HOLD DELAY
;
;
;
;
SCL

CLR C
JMP X41
X40:
SETB C
X41:
RET

; CLEAR ERROR FLAG

; SET ERROR FLAG

;*****************************************************************************
****************
;*
* STOP CONDITION FOR EEPROM *
*
;*****************************************************************************
****************

STOP:
; SEND STOP, DEFINED AS LOW-TO-HIGH SDA WITH SCL HIGH.
; SCL EXPECTED LOW ON ENTRY. RETURN WITH SCL, SDA HIGH.
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
RET

; ENFORCE SCL LOW AND DATA SETUP

; ENFORCE SETUP DELAY


;
;
;
;

;*****************************************************************************
****************
;*
* DATA BYTE TRANSFOR FROM CONTROLLER TO EEPROM *
*
;*****************************************************************************
****************

SHOUT:
; SHIFT OUT A BYTE TO THE AT24C16, MOST SIGNIFICANT BIT FIRST.
; SCL, SDA EXPECTED LOW ON ENTRY. RETURN WITH SCL LOW.
; CALLED WITH DATA TO SEND IN A.
; RETURNS CY SET TO INDICATE FAILURE BY SLAVE TO ACKNOWLEDGE.
; DESTROYS A.
PUSH B
MOV B,#8
X42:
RLC A
MOV SDA,C
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
DJNZ B,X42
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
CLR SCL
POP B
RET

; BIT COUNTER
; MOVE BIT INTO CY
; OUTPUT BIT
; ENFORCE SCL LOW AND DATA SETUP
; RAISE CLOCK
; ENFORCE SCL HIGH
;
;
;
; DROP CLOCK
; NEXT BIT
; RELEASE SDA FOR ACK
; ENFORCE SCL LOW AND TAA
;
; RAISE ACK CLOCK
; ENFORCE SCL HIGH
;
;
;
; GET ACK BIT
; DROP ACK CLOCK

;*****************************************************************************
****************
;*
* DATA BYTE TRANSFOR FROM EEPROM TO CONTROLLER *
*
;*****************************************************************************
****************

SHIN:
; SHIFT IN A BYTE FROM THE AT24CXX, MOST SIGNIFICANT BIT FIRST.
; SCL EXPECTED LOW ON ENTRY. RETURN WITH SCL LOW.
; RETURNS RECEIVED DATA BYTE IN A.
SETB SDA
PUSH B
MOV B,#8
X43:
NOP
NOP
NOP
SETB SCL
NOP
NOP
MOV C,SDA
RLC A
CLR SCL
DJNZ B,X43
POP B
RET

; MAKE SDA AN INPUT


; BIT COUNT
; ENFORCE SCL LOW AND DATA SETUP
;
;
; RAISE CLOCK
; ENFORCE SCL HIGH
;
; INPUT BIT
; MOVE BIT INTO BYTE
; DROP CLOCK
; NEXT BIT

;*****************************************************************************
****************
;*
* ACKNOWLEDGEMENT FOR EEPROM TO GET NEXT BYTE *
*
;*****************************************************************************
****************

ACK:
; CLOCK OUT AN ACKNOWLEDGE BIT (LOW).
; SCL EXPECTED LOW ON ENTRY. RETURN WITH SCL, SDA LOW.
CLR

SDA

; ACK BIT

NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET

; ENFORCE SCL LOW AND DATA SETUP


;
; RAISE CLOCK
; ENFORCE SCL HIGH
;
;
;
; DROP CLOCK

;*****************************************************************************
****************
;*
* NO ACKNOWLEDGEMENT FOR EEPROM TO GET NEXT BYTE *
*
;*****************************************************************************
****************

NAK:
; CLOCK OUT A NEGATIVE ACKNOWLEDGE BIT (HIGH).
; SCL EXPECTED LOW ON ENTRY. RETURN WITH SCL LOW, SDA HIGH.
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
RET

; NAK BIT
; ENFORCE SCL LOW AND DATA SETUP
;
; RAISE CLOCK
; ENFORCE SCL HIGH
;
;
;
; DROP CLOCK

;*****************************************************************************
****************
;*
* SERIAL DATA INTERRUPT ROUTINE *
*
;*****************************************************************************
****************

SERIAL:
MOV A,SBUF
MOV @R1,A
JNZ NEXT
MOV R0,#37H
MOV R1,#37H
MOV R7,#BLOCK1
CALL STOP
CALL RESET
CALL DELAY_5ms
CALL STOP
CALL WRITE_32
VALUE 80H
CALL WRITE_DATA
CLR RI
SETB F0
INC TL0
RETI
NEXT:
INC R1
COMING FROM PC
CLR RI
CLR F0
RETI

; SAVE DATA IN ACCUMULATOR


; SAVE IT AT MEMORY LOCATION
; CHECK FOR END OF STRING
; RESET VALUES

; 32 BYTES WRITE TO EEPROM HAVING


; WRITE WHOLE STRING TO EEPROM
; CLEAR RECIEVE INTERRUPT
; CHECK FLAG FOR DECISION

; NEXT LOCATION FOR BYTE SAVED

;*****************************************************************************
****************
;*
* CALCULATION FOR DPTR *
*
;*****************************************************************************
****************

RECOG:
MOV R2,A
ANL A,#0F0H
SWAP A
MOV R3,A
MOV A,R2
ANL A,#0FH
MOV R2,A

; CHARACTER COME FROM PC


; SPLIT BYTE
; SWAP BYTE
; SAVE RESULT IN R3
; CHARACTER COME FROM PC
; SPLIT BYTE
; SAVE RESULT IN R2

NEXT6:
CJNE R3,#2D,NEXT1
ACCORDING TO CHARACTER
MOV DPTR,#TABLE1
RET
NEXT1:
CJNE R3,#3D,NEXT2
MOV DPTR,#TABLE2
RET
NEXT2:
CJNE R3,#4D,NEXT3
MOV DPTR,#TABLE3
RET
NEXT3:
CJNE R3,#5D,NEXT4
MOV DPTR,#TABLE4
RET
NEXT4:
CJNE R3,#6D,NEXT5
MOV DPTR,#TABLE5
RET
NEXT5:
CJNE R3,#7D,NEXT6
MOV DPTR,#TABLE6
RET

; GET SUITABLE VALUE OF DPTR

;*****************************************************************************
****************
;*
* CALCULATION FOR ACCUMULATOR *
*
;*****************************************************************************
****************

CALCUL:
BYTE FROM ROM
CLR A
BACK:
ADD A,#06D
DJNZ R2,BACK

; GET SUITABLE VALUE OF A TO COPY

RET

;*****************************************************************************
****************
;*
* DATA WRITTEN AT EEPROM *
*
;*****************************************************************************
****************

WRITE_DATA:
MOV R0,#37H
AT EEPROM
BACKWARD:
MOV A,@R0
JNZ SAVE
CALL WRITE_32_END
A1:
MOV BUFFER,#0D
MOV A,R7
CALL WRITE_BYTE
CALL DELAY_5ms
JC A1
MOV R0,#37H
RET
SAVE:
CALL RECOG
CALL CALCUL
MOV R4,#6D
MOV R5,A
REVERSE:
MOV A,R5
MOVC A,@A+DPTR
MOV BUFFER,A
MOV A,R7
CALL WRITE_BYTE
CALL DELAY_5ms
JC REVERSE
CALL INCREMENT
TO BE WRITTEN IN EEPROM
JNC ADDRESS
INC 32H
MOV A,32H
CALL BLOCK

; GET CHARACTER FROM ROM TO WRITE

; COPY IT IN A
; LAST 32 BYTES

; WRITE 0 TO EEPROM AT THE END OF A STRING


; WRITE BYTE
; WRITE TIME CYCLE

; SUITABLE DPTR VALUE


; SUITABLE A
; NO OF BYTES TO BE WRITTEN
; VALUE OF A AFTER CALL CALCUL

; GET BYTE FROM ROM

; WRITE DATA BYTE

; NEXT LOCATION WHERE NEXT BYTE HAS

; SUITABLE PAGING ADDRESS

CLR C
ADDRESS:
INC R5
DJNZ R4,REVERSE
INC R0
FROM PC
JMP BACKWARD

; DECREMENT COUNTER FOR NO OF BYTES


; NEXT ORIGINAL DATA BYTE COMING

;*****************************************************************************
****************
;*
* INCREMENT TO NEXT LOCATION *
*
;*****************************************************************************
****************

INCREMENT:
MOV A,31H
ADD A,#1D
MOV 31H,A
RET

; NEXT LOCATION
;
;
;

;*****************************************************************************
****************
;*
* CALCULATION FOR MEMORY BLOCKS *
*
;*****************************************************************************
****************

BLOCK:
BLOCKS OF EEPROM
CJNE A,#1D,B1
MOV R7,#BLOCK2
RET
B1:
CJNE A,#2D,B2
MOV R7,#BLOCK3
RET
B2:
CJNE A,#3D,B3
MOV R7,#BLOCK4
RET
B3:

; SUITABLE VALUE OF R7 FOR MEMORY

CJNE A,#4D,B4
MOV R7,#BLOCK5
RET
B4:
CJNE A,#5D,B5
MOV R7,#BLOCK6
RET
B5:
CJNE A,#6D,B6
MOV R7,#BLOCK7
RET
B6:
CJNE A,#7D,B0
MOV R7,#BLOCK8
MOV 32H,#00D
B0:
RET

;*****************************************************************************
****************
;*
* BYTE WRITE TO EEPROM *
*
;*****************************************************************************
****************

WRITE_BYTE:
CALL START
JC X49

; ABORT IF BUS NOT AVAILABLE

RL A
ORL A,#FADDR
CLR ACC.0
CALL SHOUT
JC X48

; PROGRAMMABLE ADDRESS TO BITS 3:1


; ADD FIXED ADDRESS
; SPECIFY WRITE OPERATION
; SEND DEVICE ADDRESS
; ABORT IF NO ACKNOWLEDGE

MOV A,31H
CALL SHOUT
JC X48

; SEND LOW BYTE OF ADDRESS


;
; ABORT IF NO ACKNOWLEDGE

MOV A,BUFFER
CALL SHOUT
JC X48

; GET DATA
; SEND DATA
; ABORT IF NO ACKNOWLEDGE

CLR

; CLEAR ERROR FLAG

X48:
CALL STOP
X49:
RET

;*****************************************************************************
****************
;*
* RESET REGISTER VALUES BEFORE NEXT UPDATION *
*
;*****************************************************************************
****************

RESET:
MOV BUFFER,#00D
MOV 31H,#00D
MOV 32H,#00D
MOV 33H,#00D
MOV 34H,#00D
MOV R6,#00D
RET

; RESET VALUES BEFORE NEXT CYCLE

;*****************************************************************************
****************
;*
* DELAY FOR REFRESHING DISPLAY *
*
;*****************************************************************************
****************

DELAY:
MOV 35H,#3D
DL1:
MOV 36H,#120D
DJNZ 36H,$
DJNZ 35H,DL1
RET

; DELAY FOR DISPLAY

;*****************************************************************************
****************

;*

* 5 MILLISECOND DELAY FOR EEPROM WRITE TIME CYCLE *

*
;*****************************************************************************
****************

DELAY_5ms:
MOV 35H,#23D
DL:
MOV 36H,#100D
DJNZ 36H,$
DJNZ 35H,DL
RET

; 5ms DELAY FOR EEPROM WRITE CYCLE

;*****************************************************************************
****************
;*
* LOOK UP TABLE FOR CHARACTERS *
*
;*****************************************************************************
****************

ORG 300H
TABLE1:
DB 80H,80H,80H,80H,80H,80H
DB 80H,80H,5FH,80H,80H,80H
DB 04H,02H,05H,02H,01H,80H
DB 14H,7FH,14H,7FH,14H,80H
DB 26H,49H,7FH,49H,32H,80H
DB 22H,10H,08H,04H,22H,80H
DB 80H,36H,49H,36H,28H,80H
DB 04H,02H,01H,80H,80H,80H
DB 08H,14H,22H,41H,80H,80H
DB 80H,41H,22H,14H,08H,80H
DB 2AH,1CH,08H,1CH,2AH,80H
DB 08H,08H,3EH,08H,08H,80H
DB 80H,58H,38H,80H,80H,80H
DB 08H,08H,08H,08H,08H,80H
DB 40H,80H,80H,80H,80H,80H
DB 20H,10H,08H,04H,02H,80H
TABLE2:

; SPACE
;!
;"
;#
;$
;%
;&
;'
;(
;)
;*
;+
;,
;;.
;/

DB 3EH,41H,41H,41H,3EH,80H
;0
DB 80H,42H,0FFH,40H,80H,80H ; 1
DB 42H,61H,51H,49H,46H,80H
;2
DB 49H,49H,49H,49H,36H,80H
;3
DB 07H,08H,08H,08H,77H,80H
;4
DB 4FH,49H,49H,49H,39H,80H ; 5
DB 3EH,49H,49H,49H,32H,80H ; 6
DB 41H,21H,11H,09H,07H,80H
;7
DB 3EH,49H,49H,49H,3EH,80H
;8
DB 06H,09H,09H,09H,7EH,80H
;9
DB 80H,80H,22H,80H,80H,80H
;:
DB 80H,40H,32H,80H,80H,80H
;;
DB 08H,14H,22H,41H,80H,80H
;<
DB 14H,14H,14H,14H,14H,80H
;=
DB 80H,41H,22H,14H,08H,80H
;>
DB 06H,01H,51H,09H,06H,80H ; ?
TABLE3:
DB 3EH,4DH,53H,1DH,1EH,80H
DB 7CH,12H,11H,12H,7CH,80H
DB 7FH,49H,49H,49H,36H,80H
DB 3EH,41H,41H,41H,22H,80H
DB 7FH,41H,41H,22H,1CH,80H
DB 7FH,49H,49H,49H,41H,80H
DB 7FH,09H,09H,09H,01H,80H
DB 3EH,41H,49H,49H,7AH,80H
DB 7FH,08H,08H,08H,7FH,80H
DB 80H,41H,7FH,41H,80H,80H
DB 20H,40H,41H,3FH,01H,80H
DB 7FH,08H,14H,22H,41H,80H
DB 7FH,40H,40H,40H,40H,80H
DB 7FH,02H,0CH,02H,7FH,80H
DB 7FH,04H,08H,10H,7FH,80H
DB 3EH,41H,41H,41H,3EH,80H

;@
;A
;B
;C
;D
;E
;F
;G
;H
;I
;J
;K
;L
;M
;N
;O

TABLE4:
DB 7FH,09H,09H,09H,06H,80H
DB 3EH,41H,51H,21H,5EH,80H
DB 7FH,09H,19H,29H,46H,80H
DB 46H,49H,49H,49H,31H,80H
DB 01H,01H,7FH,01H,01H,80H
DB 3FH,40H,40H,40H,3FH,80H
DB 1FH,20H,40H,20H,1FH,80H

;P
;Q
;R
;S
;T
;U
;V

DB 3FH,40H,30H,40H,3FH,80H
DB 63H,14H,08H,14H,63H,80H
DB 07H,08H,70H,08H,07H,80H
DB 61H,51H,49H,45H,43H,80H
DB 7FH,41H,41H,41H,80H,80H
DB 02H,04H,08H,10H,40H,80H
DB 80H,41H,41H,41H,7FH,80H
DB 04H,02H,01H,02H,04H,80H
DB 40H,40H,40H,40H,40H,80H

;W
;X
;Y
;Z
;[
; "\"
;]
;^
;_

TABLE5:
DB 01H,02H,04H,80H,80H,80H
DB 7CH,12H,11H,12H,7CH,80H
DB 7FH,49H,49H,49H,36H,80H
DB 3EH,41H,41H,41H,22H,80H
DB 7FH,41H,41H,22H,1CH,80H
DB 7FH,49H,49H,49H,41H,80H
DB 7FH,09H,09H,09H,01H,80H
DB 3EH,41H,49H,49H,7AH,80H
DB 7FH,08H,08H,08H,7FH,80H
DB 80H,41H,7FH,41H,80H,80H
DB 20H,40H,41H,3FH,01H,80H
DB 7FH,08H,14H,22H,41H,80H
DB 7FH,40H,40H,40H,40H,80H
DB 7FH,02H,0CH,02H,7FH,80H
DB 7FH,04H,08H,10H,7FH,80H
DB 3EH,41H,41H,41H,3EH,80H

;'
;A
;B
;C
;D
;E
;F
;G
;H
;I
;J
;K
;L
;M
;N
;O

TABLE6:
DB 7FH,09H,09H,09H,06H,80H
DB 3EH,41H,51H,21H,5EH,80H
DB 7FH,09H,19H,29H,46H,80H
DB 46H,49H,49H,49H,31H,80H
DB 01H,01H,7FH,01H,01H,80H
DB 3FH,40H,40H,40H,3FH,80H
DB 1FH,20H,40H,20H,1FH,80H
DB 3FH,40H,30H,40H,3FH,80H
DB 63H,14H,08H,14H,63H,80H
DB 07H,08H,70H,08H,07H,80H
DB 61H,51H,49H,45H,43H,80H
DB 77H,49H,41H,41H,80H,80H
DB 80H,80H,77H,80H,80H,80H
DB 80H,41H,41H,49H,77H,80H
DB 04H,02H,04H,02H,80H,80H

;P
;Q
;R
;S
;T
;U
;V
;W
;X
;Y
;Z
;{
;|
;}
;~

END

S-ar putea să vă placă și