
;Disclaimer: Use at your own risk. May be completely wrong.
FCON         EQU   0D1h   ;flash control SFR
;FCON = FPL3 FPL2 FPL1 FPL0 FPS FMOD1 FMOD0 FBUSY
FCON_PROG1   EQU   050h
FCON_PROG2   EQU   0A0h
FCON_MAP_FL  EQU   08h    ;maps flash for MOVX write
FCON_MOD_FL  EQU   00h    ;which area accessed:user flash/XAF/HSB
FCON_MOD_XAF EQU   02h
FCON_MOD_HSB EQU   04h

;program 1 byte in A into [dptr]
Flash_ProgByte:
   push  ie
   clr   ea
   mov   FCON,#FCON_MAP_FL|FCON_MOD_FL
   movx  dptr,@a
   mov   FCON,#FCON_PROG1|FCON_MOD_FL
   mov   FCON,#FCON_PROG2|FCON_MOD_FL
Flash_ProgWait:
   mov   a,FCON
   jb    acc.0,Flash_ProgWait
   mov   FCON,#0
   pop   ie
   ret