summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-07-04 23:39:02 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-07-04 23:39:02 +0000
commit9a97e1c7c566c23c6c54a468e5267a0595f0abc7 (patch)
tree4869e0a355fea6dfe2a857439a702261decc476e
parentmoved to binary command codes (diff)
added check for invalid command codes
git-svn-id: https://svn.spreadspace.org/pic/trunk@38 a09c6847-51d9-44de-8ef2-e725cf50f3c7
-rw-r--r--bootloader/bootloader.asm21
1 files changed, 13 insertions, 8 deletions
diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm
index bbf88b8..3ff8aa4 100644
--- a/bootloader/bootloader.asm
+++ b/bootloader/bootloader.asm
@@ -29,7 +29,7 @@
;; -------------------------------------
;; DEFINES
-#define BOOTPIN PORTC,7
+#define BOOTPIN PORTC,7
USERVECT EQU H'100'
ISRVECT EQU USERVECT + H'4'
@@ -76,7 +76,8 @@ current_cmdlen EQU H'0070'
csum EQU H'0071'
flags EQU H'007D'
-weep EQU .0
+#define F_INVALID_CMD flags,0
+#define F_WEEP flags,7
cnt2 EQU H'007E'
cnt1 EQU H'007F'
@@ -120,7 +121,11 @@ send_answer_next
return
check_cmd_code
- retlw CMD_INVALID
+ movf combuff,w
+ sublw CMD_MAX
+ btfss STATUS,C
+ bsf F_INVALID_CMD
+ return
get_cmdlen
addwf PCL,f
@@ -197,7 +202,7 @@ uart_rx_oe ; recover from overflow
uart_rx_byte ; process received command
btfsc RCSTA,FERR
goto uart_rx_fe
- movf RCREG,w ; TODO: check parity??
+ movf RCREG,w
movwf INDF
incf FSR,f
movf current_cmdlen,f
@@ -213,9 +218,9 @@ uart_rx_fe ; recover from framing error
new_cmd ; got new command code
call check_cmd_code
- movf combuff,w
- btfsc STATUS,Z
+ btfsc F_INVALID_CMD
goto invalid_cmd
+ movf combuff,w
call get_cmdlen
movwf current_cmdlen
goto wait_cmd
@@ -338,7 +343,7 @@ cmd_r_eeprom
;; ** write eeprom *******
cmd_w_eeprom
- btfss flags,weep
+ btfss F_WEEP
goto cmd_w_eeprom_len
;; call write_eeprom
movlw E_ADDR_INVALID
@@ -350,7 +355,7 @@ cmd_w_eeprom
cmd_w_eeprom_len
movf combuff + .3,w
movwf current_cmdlen
- bsf flags,weep
+ bsf F_WEEP
goto wait_cmd
;; ** not implemented commands *******