A2osX/LIB/LIBTCPIP.S.SKT.txt

225 lines
3.5 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
SKT.NEW >PULLW ZPPtrSKT
stz bFound
ldy #S.SOCKET.SRC.PORT+1
lda (ZPPtrSKT),y
dey
ora (ZPPtrSKT),y
bne .1
jsr GetDynPort
sta (ZPPtrSKT),y
txa
iny
sta (ZPPtrSKT),y
.1 >LDYA L.SKT.TABLE
>STYA ZPTmpPtr1
ldx #0
.2 lda (ZPTmpPtr1)
beq .4
ldy #S.SOCKET.SRC.PORT+1
.3 lda (ZPPtrSKT),y
cmp (ZPTmpPtr1),y
bne .5
dey
bpl .3
lda ERR.SBUSY
sec
rts
.4 bit bFound
bmi .5
sec
ror bFound
stx hSocket
>LDYA ZPTmpPtr1
>STYA ZPTmpPtr2
.5 lda ZPTmpPtr1
clc
adc #S.SOCKET
sta ZPTmpPtr1
bcc .6
inc ZPTmpPtr1+1
.6 inx
cpx #K.SKTTABLE.SIZE
bne .2
bit bFound
bpl .9
ldy #S.SOCKET-1
.7 lda (ZPPtrSKT),y
sta (ZPTmpPtr2),y
dey
bpl .7
lda hSocket
clc
rts
.9 lda ERR.OOS
sec
rts
*--------------------------------------
SKT.LISTEN
sec
rts
*--------------------------------------
SKT.ACCEPT
sec
rts
*--------------------------------------
SKT.SENDA
sec
rts
*--------------------------------------
SKT.SEND >PULLB hSocket
pha
>PULLW ZPDataPtr
>PULLW ZPDataLen
pla
jsr SKT.GetA
bcs .9
cmp #S.SOCKET.SOCK.DGRAM
beq SKT.SEND.UDP
bra *
sec
.9 rts
*--------------------------------------
SKT.SEND.UDP jsr NEW.UDP.FRAME
bcs .9
>STYA ZPFrameBase1
lda #S.UDP
clc
adc ZPDataLen
sta ZPFrameLen1
lda /S.UDP
adc ZPDataLen+1
sta ZPFrameLen1+1
ldy #S.SOCKET.SRC.PORT
lda (ZPPtrSKT),y
tax
iny
lda (ZPPtrSKT),y
ldy #S.UDP.SRCPORT
sta (ZPFrameBase1),y
iny
txa
sta (ZPFrameBase1),y
ldy #S.SOCKET.SRC.ADDR
ldx #4
.1 lda (ZPPtrSKT),y
pha
iny
dex
bne .1
ldy #S.IP.DST+3
ldx #4
.2 pla
sta (ZPFrameBase1),y
dey
dex
bne .2
ldy #S.SOCKET.DST.PORT
lda (ZPPtrSKT),y
tax
iny
lda (ZPPtrSKT),y
ldy #S.UDP.DSTPORT
sta (ZPFrameBase1),y
iny
txa
sta (ZPFrameBase1),y
lda #S.UDP
clc
adc ZPFrameBase1
sta ZPTmpPtr1
lda /S.UDP
adc ZPFrameBase1+1
sta ZPTmpPtr1+1
ldy #0
.3 jsr DecDataLen
beq .4
lda (ZPDataPtr),y
sta (ZPTmpPtr1),y
iny
bne .3
inc ZPDataPtr
inc ZPTmpPtr1
bra .3
.4 jmp SEND.UDP.FRAME.I
.9 rts
*--------------------------------------
SKT.RCVDA
sec
rts
*--------------------------------------
SKT.RCVD
sec
rts
*--------------------------------------
SKT.CLOSE
sec
rts
*--------------------------------------
SKT.GETTABLE >LDYA L.SKT.TABLE
clc
rts
*--------------------------------------
SKT.GetA stz ZPPtrSKT+1
asl
rol ZPPtrSKT+1
asl
rol ZPPtrSKT+1
asl
rol ZPPtrSKT+1
asl
rol ZPPtrSKT+1
adc L.SKT.TABLE
sta ZPPtrSKT
lda ZPPtrSKT+1
adc L.SKT.TABLE+1
sta ZPPtrSKT+1
lda (ZPPtrSKT)
beq .9
rts CC
.9 lda #ERR.SBAD
sec
rts
*--------------------------------------
MAN
SAVE LIB/LIBTCPIP.S.SKT
LOAD LIB/LIBTCPIP.S
ASM