diff options
-rw-r--r-- | bootloader/bootloader.asm | 21 |
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 ******* |