;; 

        radix   dec

	list    p=12ce519                ; list directive to define processor
	include <p12ce519.inc>           ; processor specific variable definitions
        include <coff.inc>              ; Grab some useful macros


 __CONFIG   _CP_OFF & _IntRC_OSC & _MCLRE_OFF & _WDT_ON

;----------------------------------------------------------------------
;----------------------------------------------------------------------
GPR_DATA        UDATA   0x07

ee_state     RES     1
eebyte       RES     1
ee_bitcnt    RES     1
eeaddr       RES     1
eedata       RES     1
failures     RES     1
temp         RES     1
  

GPR2_DATA       UDATA   0x30

eeShadow     RES     0x10

;----------------------------------------------------------------------
;   ******************* MAIN CODE START LOCATION  ******************
;----------------------------------------------------------------------
MAIN    CODE

	goto	start


include "EEdriver.asm"

start:
    movlw   0xC0    ; Set up GPIO pins
    movwf   GPIO
    movlw   0x0F
    tris    GPIO
    movlw   1<<7      ; Assume that we're going to fail
    movwf   failures  ; by setting the MSB of failures

FillEEPROM:
        movlw   0
        movwf   temp
        movlw   eeShadow
        movwf   FSR

FillLoop:
        clrwdt

    ; Set the address
        movf    FSR,W
        andlw   0x0f
        movwf   eeaddr

    ; Set the data
        swapf   temp,W
        iorwf   temp,W
        movwf   eedata
        movwf   INDF

        call    write_byte
  .assert "W == 0x01, \"*** FAILED Write_byte returned error\""
	nop

FillWaitForWrite:
        call    read_current
        btfss   ee_state,ee_ok
        goto    FillWaitForWrite
  .assert "W == 0x01, \"*** FAILED read_current error\""
	nop

        movf    INDF,W
        xorwf   eedata,W
        skpnz
	goto loop_ok
    .assert "\"*** FAILED data mis-match\""
         incf   failures,f      ; failed 

loop_ok:
        incf    FSR,F
        incf    temp,F
        btfss   temp,4
         goto   FillLoop

    ; If we reach this point then it means that we didn't
    ; get stuck in the loop. 
	bcf	failures,7
	movf	failures,W
	skpz
	 goto	failed
done:
  .assert  "\"*** PASSED 12CE518 internal EEPROM test\""
        goto    done

failed:
  .assert  "\"*** FAILED 12CE518 internal EEPROM test\""
	goto	$

	end


syntax highlighted by Code2HTML, v. 0.9.1