aboutsummaryrefslogtreecommitdiff
path: root/firmware/include/SHELL.INC
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/include/SHELL.INC')
-rwxr-xr-xfirmware/include/SHELL.INC51
1 files changed, 51 insertions, 0 deletions
diff --git a/firmware/include/SHELL.INC b/firmware/include/SHELL.INC
new file mode 100755
index 0000000..f951a7f
--- /dev/null
+++ b/firmware/include/SHELL.INC
@@ -0,0 +1,51 @@
+CMDLOOP:
+ ; Receive command safely, EXCEPT zero word
+ CALL REC_BYTE
+ CMP R14,#0
+ JMPR CC_NE,CMDLOOP_ERROR
+ CMP R15,#CMD_PING
+ JMPR CC_NE,CMDLOOP_NO_PING
+ ; Respond to ping
+ MOV R15,#SHELL_ACK
+ CALL SEND_BYTE
+ JMP CMDLOOP
+CMDLOOP_NO_PING:
+ MOV R13,#SEND_BYTE
+ MOV R12,#REC_BYTE
+ CALL ACK_DATA
+ CMP R14,#0
+ JMPR CC_EQ,CMDLOOP_OK
+CMDLOOP_ERROR:
+ MOV R15,R14
+ CALL SEND_BYTE
+ JMP CMDLOOP
+CMDLOOP_OK:
+ PUSH R15
+ MOV R15,#0
+ CALL SEND_BYTE ; Send zero byte
+ POP R15 ; Restore command number
+
+ CMP R15,#CMD_ERASE_BLOCKS
+ JMPR CC_NE,CMDLOOP_1
+ CALL ERASE_BLOCKS
+ JMP CMDLOOP
+CMDLOOP_1:
+ CMP R15,#CMD_READ
+ JMPR CC_NE,CMDLOOP_2
+ CALL READ
+ JMP CMDLOOP
+CMDLOOP_2:
+ CMP R15,#CMD_WRITE
+ JMPR CC_NE,CMDLOOP_3
+ CALL WRITE
+ JMP CMDLOOP
+CMDLOOP_3:
+ CMP R15,#CMD_IDENTIFY
+ JMPR CC_NE,CMDLOOP_4
+ CALL IDENTIFY
+ JMP CMDLOOP
+CMDLOOP_4:
+ CMP R15,#CMD_ERASE_CHIP
+ JMPR CC_NE,CMDLOOP
+ CALL ERASE_CHIP
+ JMP CMDLOOP