
W78LE58/W78L058A
- 32 -
INC SFRAL ; NEXT ADDRESS
MOV A,SFRAL
JNZ BLANK_CHECK_LOOP
INC SFRAH
MOV A,SFRAH
CJNE A,#80H,BLANK_CHECK_LOOP ; END ADDRESS = 7FFFH
JMP PROGRAM_32KROM
BLANK_CHECK_ERROR:
MOV P1,#F0H
MOV P3,#F0H
JMP $
;*******************************************************************************
;* RE-PROGRAMMING 32KB APROM BANK
;*******************************************************************************
PROGRAM_32KROM:
MOV DPTR,#0H ; THE ADDRESS OF NEW ROM CODE
MOV R2,#00H ; TARGET LOW BYTE ADDRESS
MOV R1,#00H ; TARGET HIGH BYTE ADDRESS
MOV DPTR,#0H ; EXTERNAL SRAM BUFFER ADDRESS
MOV SFRAH,R1 ; SFRAH, TARGET HIGH ADDRESS
MOV SFRCN,#21H ; SFRCN(C7H) = 21 (PROGRAM 32K)
MOV R6,#BEH ; SET TIMER FOR PROGRAMMING, ABOUT 50
μ
S.
MOV R7,#FFH
MOV TL0,R6
MOV TH0,R7
PROG_D_32K:
MOV SFRAL,R2 ; SFRAL(C4H) = LOW BYTE ADDRESS
MOVX A,@DPTR ; READ DATA FROM EXTERNAL SRAM BUFFER. BY ACCORDING USER
; CIRCUIT, USER MUST MODIFY THIS INSTRUCTION TO FETCH CODE
MOV SFRFD,A ; SFRFD(C6H) = DATA IN
MOV TCON,#10H ; TCON = 10H, TR0 = 1,GO
MOV PCON,#01H ; ENTER IDLE MODE (PRORGAMMING)
INC DPTR
INC R2
CJNE R2,#0H,PROG_D_32K
INC R1
MOV SFRAH,R1
CJNE R1,#80H,PROG_D_32K
;*****************************************************************************
; * VERIFY 32KB APROM BANK
;*****************************************************************************
MOV R4,#03H ; ERROR COUNTER
MOV R6,#FEH
; SET TIMER FOR READ VERIFY, ABOUT 1.5
μ
S.
MOV R7,#FFH
MOV TL0,R6
MOV TH0,R7
MOV DPTR,#0H ; The start address of sample code
MOV R2,#0H ; Target low byte address
MOV R1,#0H ; Target high byte address
MOV SFRAH,R1 ; SFRAH, Target high address
MOV SFRCN,#00H ; SFRCN = 00 (Read ROM CODE)