W78E516B
MAIN_4K:
MOV CHPENR,#87H ; CHPENR = 87H, CHPCON WRITE ENABLE.
MOV CHPENR,#59H ; CHPENR = 59H, CHPCON WRITE ENABLE.
MOV A,CHPCON
ANL A,#80H
CJNE A,#80H,UPDATE_64K ; CHECK F04KBOOT MODE ?
MOV CHPCON,#03H ; CHPCON = 03H, ENABLE IN-SYSTEM PROGRAMMING.
MOV CHPENR,#00H ; DISABLE CHPCON WRITE ATTRIBUTE
MOV TCON,#00H
MOV TMOD,#01H
MOV IP,#00H
; TCON = 00H, TR = 0 TIMER0 STOP
; TMOD = 01H, SET TIMER0 A 16BIT TIMER
; IP = 00H
MOV IE,#82H
; IE = 82H, TIMER0 INTERRUPT ENABLED
MOV R6,#FEH
MOV R7,#FFH
MOV TL0,R6
MOV TH0,R7
MOV TCON,#10H
MOV PCON,#01H
; TCON = 10H, TR0 = 1, GO
; ENTER IDLE MODE
UPDATE_64K:
MOV CHPENR,#00H ; DISABLE CHPCON WRITE-ATTRIBUTE
MOV TCON,#00H
MOV IP,#00H
; TCON = 00H , TR = 0 TIM0 STOP
; IP = 00H
MOV IE,#82H
MOV TMOD,#01H
MOV R6,#3CH
; IE = 82H, TIMER0 INTERRUPT ENABLED
; TMOD = 01H, MODE1
; SET WAKE-UP TIME FOR ERASE OPERATION, ABOUT 15 mS. DEPENDING
; ON USER'S SYSTEM CLOCK RATE.
MOV R7,#B0H
MOV TL0,R6
MOV TH0,R7
ERASE_P_4K:
MOV SFRCN,#22H ; SFRCN(C7H) = 22H ERASE 64K
MOV TCON,#10H
MOV PCON,#01H
; TCON = 10H, TR0 = 1,GO
; ENTER IDLE MODE (FOR ERASE OPERATION)
;*********************************************************************
;* BLANK CHECK
;*********************************************************************
MOV SFRCN,#0H
MOV SFRAH,#0H
MOV SFRAL,#0H
MOV R6,#FBH
MOV R7,#FFH
MOV TL0,R6
; READ 64KB APROM MODE
; START ADDRESS = 0H
; SET TIMER FOR READ OPERATION, ABOUT 1.5 mS.
MOV TH0,R7
BLANK_CHECK_LOOP:
SETB TR0
MOV PCON,#01H
MOV A,SFRFD
; ENABLE TIMER 0
; ENTER IDLE MODE
; READ ONE BYTE
CJNE A,#FFH,BLANK_CHECK_ERROR
- 24 -