summaryrefslogtreecommitdiff
path: root/bootloader/bootloader.asm
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader/bootloader.asm')
-rw-r--r--bootloader/bootloader.asm86
1 files changed, 21 insertions, 65 deletions
diff --git a/bootloader/bootloader.asm b/bootloader/bootloader.asm
index 02b9105..bbf88b8 100644
--- a/bootloader/bootloader.asm
+++ b/bootloader/bootloader.asm
@@ -54,42 +54,26 @@ E_ADDR_PROHIB EQU .6
E_VALUE_OOB EQU .7
;; CMD codes
-CCMD_IDENTIFY EQU 'i'
-CMD_IDENTIFY EQU .0
+CMD_INVALID EQU .0
-CCMD_BOOT EQU 'b'
-CMD_BOOT EQU .1
+CMD_IDENTIFY EQU .1
+CMD_BOOT EQU .2
+CMD_RESET EQU .3
+CMD_R_FLASH EQU .4
+CMD_W_FLASH EQU .5
+CMD_R_EEPROM EQU .6
+CMD_W_EEPROM EQU .7
+CMD_R_CONFIG EQU .8
+CMD_W_CONFIG EQU .9
-CCMD_RESET EQU 'r'
-CMD_RESET EQU .2
-
-CCMD_R_FLASH EQU 'f'
-CMD_R_FLASH EQU .3
-
-CCMD_W_FLASH EQU 'F'
-CMD_W_FLASH EQU .4
-
-CCMD_R_EEPROM EQU 'e'
-CMD_R_EEPROM EQU .5
-
-CCMD_W_EEPROM EQU 'E'
-CMD_W_EEPROM EQU .6
-
-CCMD_R_CONFIG EQU 'c'
-CMD_R_CONFIG EQU .7
-
-CCMD_W_CONFIG EQU 'C'
-CMD_W_CONFIG EQU .8
-
-CMD_INVALID EQU H'FF'
+CMD_MAX EQU .9
;; Variables
combuff EQU H'0020'
combuff_end EQU H'006F'
-current_cmd EQU H'0070'
-current_cmdlen EQU H'0071'
-csum EQU H'0072'
+current_cmdlen EQU H'0070'
+csum EQU H'0071'
flags EQU H'007D'
weep EQU .0
@@ -135,38 +119,12 @@ send_answer_next
call uart_tx_byte
return
-translate_cmd_codes
- xorlw CCMD_IDENTIFY
- btfsc STATUS,Z
- retlw CMD_IDENTIFY
- xorlw CCMD_BOOT ^ CCMD_IDENTIFY
- btfsc STATUS,Z
- retlw CMD_BOOT
- xorlw CCMD_RESET ^ CCMD_BOOT
- btfsc STATUS,Z
- retlw CMD_RESET
- xorlw CCMD_R_FLASH ^ CCMD_RESET
- btfsc STATUS,Z
- retlw CMD_R_FLASH
- xorlw CCMD_W_FLASH ^ CCMD_R_FLASH
- btfsc STATUS,Z
- retlw CMD_W_FLASH
- xorlw CCMD_R_EEPROM ^ CCMD_W_FLASH
- btfsc STATUS,Z
- retlw CMD_R_EEPROM
- xorlw CCMD_W_EEPROM ^ CCMD_R_EEPROM
- btfsc STATUS,Z
- retlw CMD_W_EEPROM
- xorlw CCMD_R_CONFIG ^ CCMD_W_EEPROM
- btfsc STATUS,Z
- retlw CMD_R_CONFIG
- xorlw CCMD_W_CONFIG ^ CCMD_R_CONFIG
- btfsc STATUS,Z
- retlw CMD_W_CONFIG
+check_cmd_code
retlw CMD_INVALID
get_cmdlen
addwf PCL,f
+ retlw .0 ; invalid
retlw .1 ; identify: <csum>
retlw .1 ; boot: <csum>
retlw .1 ; reset: <csum>
@@ -220,8 +178,7 @@ boot
wait_new_cmd
movlw combuff
movwf FSR
- movlw CMD_INVALID
- movwf current_cmd
+ clrf combuff
clrf current_cmdlen
clrf flags
@@ -255,12 +212,10 @@ uart_rx_fe ; recover from framing error
goto wait_new_cmd
new_cmd ; got new command code
- call translate_cmd_codes
- movwf current_cmd
- xorlw CMD_INVALID
+ call check_cmd_code
+ movf combuff,w
btfsc STATUS,Z
goto invalid_cmd
- movf current_cmd,w ; initializing cmdlen
call get_cmdlen
movwf current_cmdlen
goto wait_cmd
@@ -275,8 +230,9 @@ invalid_cmd ; received command code is not known
exec_cmd ; command is correct and complete
;; TODO: check csum -> csum for write eeprom will not be correct because
;; it isn't finished yet....???
- movf current_cmd,w ; dispatch commands
+ movf combuff,w ; dispatch commands
addwf PCL,f
+ nop
goto cmd_identify
goto cmd_boot
goto cmd_reset
@@ -292,7 +248,7 @@ exec_cmd ; command is correct and complete
;; ** identify *******
cmd_identify
clrf csum
- movlw CCMD_IDENTIFY
+ movf combuff,w
call uart_tx_byte
movlw E_OK