; *******************************************************************************
; *	write data to internal flash
; *	only packets by 4 will be programmed 	 
; *******************************************************************************
_WriteFlash:
	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; read number of bytes to programm
	mov	pFlashBytes,A	; store bytes to write
	CALL	_HEX2_COM

	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; Adr H
	mov	EADRH,A
	CALL	_HEX2_COM

	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; Adr L
	mov	EADRL,A
	CALL	_HEX2_COM
	CALL	_RET_COM
	
_FWL:	mov	R5,#4
	mov	R1,#0BCh	; start adr from EDATA1
_EFDL:	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; data
	mov	@R1,A
	CALL	_HEX2_COM
	inc	R1
	djnz	R5,_EFDL

	mov	ECON,#02h	; write page
	CALL	_Delay_4ms
	
	mov	A,EADRL		; get actual page
        CALL	_HEX2_COM
	add	A,#4
	mov	EADRL,A		; store next page
	CALL	_HEX2_COM

	dec	pFlashBytes
	dec	pFlashBytes
	dec	pFlashBytes
	djnz	pFlashBytes,_FWL
	CALL	_RET_COM

	ret

; *******************************************************************************
; *	write data to internal flash
; *	only packets by 4 will be programmed 	 
; *******************************************************************************
_ReadFlash:
	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; read number of bytes to programm
	mov	pFlashBytes,A	; store bytes to write
	CALL	_HEX2_COM	; test

	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; Adr H
	mov	EADRH,A
	CALL	_HEX2_COM	; test

	jb	bRXF,$		; waitung flag low 	
	movx	A,@R0		; Adr L
	mov	EADRL,A
	CALL	_HEX2_COM	; test
	CALL	_RET_COM
	
_FRL:	mov	R5,#4
	mov	ECON,#01h	; read page
	mov	R1,#0BCh	; start adr from EDATA1
_FDRL:	mov	A,@R1		; load byte from Flash
;	jb	bTXE,$		; waitung flag low 	
;	movx	@R0,A		; data to USB
	CALL	_HEX2_COM
	inc	R1
	djnz	R5,_FDRL

	mov	A,EADRL		; get actual page
	add	A,#4
	mov	EADRL,A		; store next page

	dec	pFlashBytes
	dec	pFlashBytes
	dec	pFlashBytes
	djnz	pFlashBytes,_FRL

	CALL	_RET_COM

	ret