; ; SRAM UDP constants ; .equ UDP_LENGTH = 128 .equ UDP_DATA_LENGTH = (UDP_LENGTH - 8) .equ MAX_NUM_PACKETS = 330 ; packet types .equ DATA_ANNOUNCE = 0 .equ DATA_PACKET = 1 .equ EXECUTE = 2 ; packet table status .equ PACKET_INVALID = 1 .equ PACKET_VALID = 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; SRAM addresses ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; data IDs .equ UNIQUE_ID = RAMSTART + 1 .equ MY_DATA_ID = RAMSTART + 2 .equ CURRENT_SOURCE_ID = RAMSTART + 3 .equ CURRENT_DATA_ID = RAMSTART + 4 .equ CURRENT_REQUEST_ID = RAMSTART + 5 .equ LAST_REQUEST_EXECUTED = RAMSTART + 6 ; UDP rx .equ UDP_RX_STATUS = RAMSTART + 7 .equ UDP_RX_START = UDP_RX_STATUS + 1 .equ UDP_RX_SOURCE_ID = UDP_RX_START + 0 ; "source port" .equ UDP_RX_DATA_ID = UDP_RX_START + 1 .equ UDP_RX_PACKET_TYPE = UDP_RX_START + 2 ; "dest port" .equ UDP_RX_REQUEST_ID = UDP_RX_START + 3 .equ UDP_RX_LENGTH_HI = UDP_RX_START + 4 .equ UDP_RX_LENGTH_LO = UDP_RX_START + 5 .equ UDP_RX_CHECKSUM_HI = UDP_RX_START + 6 .equ UDP_RX_CHECKSUM_LO = UDP_RX_START + 7 .equ UDP_RX_DATA = UDP_RX_START + 8 .equ UDP_RX_END = UDP_RX_START + UDP_LENGTH ; UDP tx .equ UDP_TX_START = UDP_RX_END + 1 .equ UDP_TX_SOURCE_ID = UDP_TX_START + 0 ; "source port" .equ UDP_TX_DATA_ID = UDP_TX_START + 1 .equ UDP_TX_PACKET_TYPE = UDP_TX_START + 2 ; "dest port" .equ UDP_TX_REQUEST_ID = UDP_TX_START + 3 .equ UDP_TX_LENGTH_HI = UDP_TX_START + 4 .equ UDP_TX_LENGTH_LO = UDP_TX_START + 5 .equ UDP_TX_CHECKSUM_HI = UDP_TX_START + 6 .equ UDP_TX_CHECKSUM_LO = UDP_TX_START + 7 .equ UDP_TX_DATA = UDP_TX_START + 8 .equ UDP_TX_END = UDP_TX_START + UDP_LENGTH ; packet table .equ PACKET_TABLE = UDP_TX_END + 1 .equ PACKET_TABLE_BAD_HI = PACKET_TABLE + 0 .equ PACKET_TABLE_BAD_LO = PACKET_TABLE + 1 .equ PACKET_TABLE_PACKETS = PACKET_TABLE + 2 .equ PACKET_TABLE_END = PACKET_TABLE_PACKETS + MAX_NUM_PACKETS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; extra names for particular data addresses ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; for data packets .equ UDP_TX_DATA_SEQ_HI = UDP_TX_DATA + 0 ; used by audio packets .equ UDP_TX_DATA_SEQ_LO = UDP_TX_DATA + 1 .equ UDP_TX_GENERAL_DATA = UDP_TX_DATA + 2 .equ UDP_RX_DATA_SEQ_HI = UDP_RX_DATA + 0 ; used by audio packets .equ UDP_RX_DATA_SEQ_LO = UDP_RX_DATA + 1 .equ UDP_RX_GENERAL_DATA = UDP_RX_DATA + 2 .equ UDP_GENERAL_DATA_LENGTH = UDP_DATA_LENGTH - 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Packet construction ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Arguments: ; @0: packet type (immediate) ; @1: repeat count (immediate) .macro build_packet_header lds temp, CURRENT_SOURCE_ID sts UDP_TX_SOURCE_ID, temp lds temp, CURRENT_DATA_ID sts UDP_TX_DATA_ID, temp stsi UDP_TX_PACKET_TYPE, @0 lds temp, CURRENT_REQUEST_ID sts UDP_TX_REQUEST_ID, temp sts UDP_TX_LENGTH_HI, ZERO ldi temp, UDP_LENGTH sts UDP_TX_LENGTH_LO, temp .endmacro