summaryrefslogtreecommitdiff
path: root/bootloader/bootloader.asm
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/bootloader.asm')
-rw-r--r--bootloader/bootloader.asm98
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"
;; -------------------------------------
;; -------------------------------------