summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-07-05 00:18:08 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-07-05 00:18:08 +0000
commitdc5c7c50b234ad469aab961dd6bc7bcfa9031268 (patch)
tree1b9a68acb15d67d800d2b10b6765891cc86e0e64
parentadded check for invalid command codes (diff)
read flash segment allmost done
git-svn-id: https://svn.spreadspace.org/pic/trunk@39 a09c6847-51d9-44de-8ef2-e725cf50f3c7
-rw-r--r--bootloader/bootloader.asm47
1 files changed, 41 insertions, 6 deletions
diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm
index 3ff8aa4..93ec185 100644
--- a/bootloader/bootloader.asm
+++ b/bootloader/bootloader.asm
@@ -38,9 +38,9 @@ VERSION_MIN EQU .1
DEVID_H EQU H'20'
DEVID_L EQU H'82'
FSS EQU .8
-MESS_H EQU 0
+MESS_H EQU .0
MESS_L EQU .64
-SUPPORTED_H EQU 0
+SUPPORTED_H EQU .0
SUPPORTED_L EQU b'00011111' ; reset, read/write flash, read/write eeprom
;; ERROR codes
@@ -316,10 +316,7 @@ cmd_reset_wait
;; ** read flash *******
cmd_r_flash
- ;; call read_flash_segment
- movlw E_ADDR_INVALID
- movwf combuff + .1
- movlw .2
+ call read_flash_segment
call send_answer
goto wait_new_cmd
@@ -368,6 +365,44 @@ cmd_w_config
goto wait_new_cmd
;; -------------------------------------
+ ;; actual flash/eeprom functions
+read_flash_segment
+ movlw FSS
+ movwf cnt1
+ movlw b'01011000'
+ movwf STATUS
+ movlw combuff + .1
+ movwf FSR
+ movf INDF,w
+ movwf EEADR
+ incf FSR,f
+ movf INDF,w
+ movwf EEADRH
+read_flash_segment_loop
+ bsf STATUS,RP0
+ bsf EECON1,EEPGD
+ bsf EECON1,RD
+ nop
+ nop
+ bcf STATUS,RP0
+ movf EEDAT,w
+ movwf INDF
+ incf FSR,f
+ movf EEDATH,w
+ movwf INDF
+ incf FSR,f
+ incfsz EEADR,f
+ goto read_flash_segment_next
+ incf EEADRH,f
+read_flash_segment_next
+ decfsz cnt1,f
+ goto read_flash_segment_loop
+ bcf STATUS,RP1
+ clrf combuff + .1 ; = E_OK
+ retlw .2 + 2*FSS ; bytes to send
+
+ ;; -------------------------------------
+ ;; -------------------------------------
;; dummy user code
org USERVECT
;; goto USERVECT