.equ CPRO_PACKET_FLASH_START_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes .equ CPRO_PACKET_FLASH_START_OFFS_ADDR = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes .equ CPRO_PACKET_FLASH_ADDR_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes .equ CPRO_PACKET_FLASH_ADDR_OFFS_ADDR = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes .equ CPRO_PACKET_FLASH_DATA_OFFS_MSGNUM = COM_MSG_OFFS_PAYLOAD+0 ; 2 bytes .equ CPRO_PACKET_FLASH_DATA_OFFS_DATA = COM_MSG_OFFS_PAYLOAD+2 ; 2 bytes .equ CPRO_FLASH_ERROR_NONE = 0 .equ CPRO_FLASH_ERROR_BAD_MSGNUM = 1 .equ CPRO_FLASH_ERROR_BAD_ADDR = 2 ; *************************************************************************** ; data .dseg flashDataBegin: flashCurrentAddress: .byte 2 flashLastReceivedMsg: .byte 2 flashDataEnd: ; *************************************************************************** ; code .cseg ; --------------------------------------------------------------------------- ; Enqueue a FLASHDATA_ACK packet. ; ; IN: ; - R16: destination address ; - R17: response code (0 if ok, error code otherwise) ; - R19:R18: msg num ; OUT: ; - CFLAG: set if okay, clear otherwise ; MODIFIED REGS: R6, R7, R8, R9, R10, R11, R12, R16, R17, X, Y (R3, R4, R15, R16, R17, R18, R19, R20, R21) CPRO_EnqueueFlashRsp: mov r6, r16 mov r7, r17 mov r8, r18 mov r9, r19 rcall COM_AllocBufferAndGetXY ; (r16, r17, r21) brcc CPRO_EnqueueFlashRsp_error push xh push xl mov r16, r6 ldi r17, CPRO_PAYLOAD_FLAGS_SECONDS | (3<