diff options
Diffstat (limited to 'bootloader/bootloader.asm')
-rw-r--r-- | bootloader/bootloader.asm | 98 |
1 files changed, 2 insertions, 96 deletions
diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm index 56d7eed..d0ad073 100644 --- a/bootloader/bootloader.asm +++ b/bootloader/bootloader.asm @@ -73,7 +73,7 @@ cnt EQU H'007F' ;; ------------------------------------- - ;; DEFINES (generic defines) + ;; DEFINES (defines) ;; ERROR codes E_OK EQU .0 E_INV_CMD EQU .1 @@ -356,101 +356,7 @@ cmd_not_impl ;; ------------------------------------- ;; chip specific commands - ;; flash read -------- -cmd_r_flash - movlw FSS ; initialize EEADR:EEADRH and FSR - movwf cnt - movlw b'01011000' - movwf STATUS - movlw combuff + .2 - movwf FSR - movf INDF,w - movwf EEADR - incf FSR,f - movf INDF,w - movwf EEADRH -read_flash_segment_loop - bsf STATUS,RP0 ; perform the actual read - bsf EECON1,EEPGD - bsf EECON1,RD - nop - nop - bcf STATUS,RP0 - movf EEDAT,w ; load code word from EEDAT:EEDATH to combuff - movwf INDF - incf FSR,f - movf EEDATH,w - movwf INDF - incf FSR,f - incfsz EEADR,f ; increment flash address - goto read_flash_segment_next - incf EEADRH,f -read_flash_segment_next - decfsz cnt,f - goto read_flash_segment_loop - bcf STATUS,RP1 - clrf combuff + .2 ; = E_OK - movlw .1 + .2*FSS ; bytes to send - call send_answer - goto wait_new_cmd - - ;; flash write -------- -cmd_w_flash - movf combuff + .3,f ; if addr[15:8] == 0 -> boot loader section - btfsc STATUS,Z - goto address_prohibited - movlw FLASH_BOUNDARY ; addr on boundary? - andwf combuff + .2,w - btfss STATUS,Z - goto address_invalid - movlw FSS ; initialize EEADR:EEADRH and FSR - movwf cnt - movlw b'01011000' - movwf STATUS - movlw combuff + .2 - movwf FSR - movf INDF,w - movwf EEADR - incf FSR,f - movf INDF,w - movwf EEADRH - -write_flash_segment_loop - incf FSR,f ; load code word into EEDAT:EEDATH - movf INDF,w - movwf EEDAT - incf FSR,f - movf INDF,w - movwf EEDATH - - bsf STATUS,RP0 ; now start the acutal write sequence - bsf EECON1,EEPGD - bsf EECON1,WREN - movlw H'55' - movwf EECON2 - movlw H'AA' - movwf EECON2 - bsf EECON1,WR - nop - nop - bcf EECON1,WREN - bcf STATUS,RP0 - incfsz EEADR,f ; increment flash address - goto write_flash_segment_next - incf EEADRH,f -write_flash_segment_next - decfsz cnt,f - goto write_flash_segment_loop - bsf STATUS,RP0 - clrw ; check if a write error occured - btfsc EECON1,WRERR - movlw E_FLASH_WERR - bcf STATUS,RP1 - bcf STATUS,RP0 - movwf combuff + .2 ; = E_OK - movlw .1 ; bytes to send - call send_answer - goto wait_new_cmd +#include "cmds-16f887.inc" ;; ------------------------------------- ;; ------------------------------------- |