PR#3 PREFIX /A2OSX.SRC NEW INC 1 AUTO 6 .LIST OFF *-------------------------------------- UDP.IN ldy #S.IP.SRC+3 ldx #3 .1 lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.DST.ADDR,x dey dex bpl .1 ldy #S.UDP.SRCPORT lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.DST.PORT+1 iny lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.DST.PORT ldy #S.IP.DST+3 ldx #3 .2 lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.SRC.ADDR,x dey dex bpl .2 ldy #S.UDP.DSTPORT lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.SRC.PORT+1 iny lda (ZPFrameBase1),y sta TmpSocket+S.SOCKET.SRC.PORT >LDYA L.SKT.TABLE >STYA ZPPtrSKT ldx #0 .3 lda (ZPPtrSKT) beq .7 cmp #S.SOCKET.SOCK.DGRAM bne .7 ldy #S.SOCKET.SRC.ADDR lda (ZPPtrSKT),y SOCKET.SRC.ADDR=0.0.0.0 ? bne .41 ldy #S.SOCKET.SRC.PORT yes, do not check if IP match .4 lda (ZPPtrSKT),y .41 cmp TmpSocket,y bne .7 iny cpy #S.SOCKET.DST.ADDR bne .4 lda (ZPPtrSKT),y SOCKET.DST.ADDR=FF.FF.FF.FF ? cmp #$FF bne .51 ldy #S.SOCKET.DST.PORT yes, do not check if IP match .5 lda (ZPPtrSKT),y .51 cmp TmpSocket,y bne .7 iny cpy #S.SOCKET.DST.PORT+2 bne .5 jsr SKT.AddToQueueD bcs .99 lda (pEvent) Make sure kernel not discard frame... and #$FF^S.EVT.F.hMEM1 sta (pEvent) clc ...when clearing event!!!! rts .7 lda ZPPtrSKT clc adc #S.SOCKET sta ZPPtrSKT bcc .8 inc ZPPtrSKT+1 .8 inx cpx #K.SKTTABLE.SIZE bne .3 .9 sec .99 rts *-------------------------------------- UDP.ComputeChecksum lda #0 RESET.TCP.CHECKSUM ldy #S.UDP.CHECKSUM sta (ZPFrameBase1),y iny sta (ZPFrameBase1),y >LDYA ZPFrameBase1 >STYA ZPTmpPtr1 lda ZPFrameLen1 sec sbc #S.IP-2 sta ZPDataLen lda ZPFrameLen1+1 sbc /S.IP-2 sta ZPDataLen+1 clc ldy #S.UDP.LENGTH lda (ZPFrameBase1),y * adc #0 RESERVED (all zero) sta IP.CHECKSUM iny lda (ZPFrameBase1),y adc #S.IP.PROTOCOL.UDP sta IP.CHECKSUM+1 ldy #S.IP.SRC ldx #4 4 words for SRC & DST IP .10 lda (ZPFrameBase1),y adc IP.CHECKSUM sta IP.CHECKSUM iny lda (ZPFrameBase1),y adc IP.CHECKSUM+1 sta IP.CHECKSUM+1 iny dex bne .10 ldy #S.IP .1 jsr DecDataLen beq .8 lda (ZPTmpPtr1),y adc IP.CHECKSUM sta IP.CHECKSUM iny bne .20 inc ZPTmpPtr1+1 .20 jsr DecDataLen bne .2 lda #0 bra .21 .2 lda (ZPTmpPtr1),y .21 adc IP.CHECKSUM+1 sta IP.CHECKSUM+1 iny bne .1 inc ZPTmpPtr1+1 bra .1 .8 ldy #S.UDP.CHECKSUM lda IP.CHECKSUM adc #0 Don't forget to add last carry!!! eor #$FF sta (ZPFrameBase1),y iny lda IP.CHECKSUM+1 adc #0 Don't forget to add last carry!!! eor #$FF sta (ZPFrameBase1),y rts *-------------------------------------- MAN SAVE LIB/LIBTCPIP.S.UDP LOAD LIB/LIBTCPIP.S ASM