summaryrefslogtreecommitdiff
path: root/bootloader/cmds-16f1847.inc
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/cmds-16f1847.inc')
-rw-r--r--bootloader/cmds-16f1847.inc121
1 files changed, 121 insertions, 0 deletions
diff --git a/bootloader/cmds-16f1847.inc b/bootloader/cmds-16f1847.inc
new file mode 100644
index 0000000..2e6d7e4
--- /dev/null
+++ b/bootloader/cmds-16f1847.inc
@@ -0,0 +1,121 @@
+ ;;
+ ;; spreadspace pic utils
+ ;;
+ ;;
+ ;; Copyright (C) 2011 Christian Pointner <equinox@spreadspace.org>
+ ;;
+ ;; This file is part of spreadspace pic utils.
+ ;;
+ ;; spreadspace pic utils is free software: you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation, either version 3 of the License, or
+ ;; any later version.
+ ;;
+ ;; spreadspace pic utils is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with spreadspace pic utils. If not, see <http://www.gnu.org/licenses/>.
+ ;;
+
+ ;; 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
+g;; 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
+ movlw E_NOT_IMPL
+ call ack_cmd
+ 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
+ movlw E_NOT_IMPL
+ call ack_cmd
+ goto wait_new_cmd