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