mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-25 00:23:52 +00:00
809 lines
14 KiB
Plaintext
809 lines
14 KiB
Plaintext
PR#3
|
||
PREFIX /A2OSX.SRC
|
||
LOMEM $A00
|
||
INC 1
|
||
AUTO 6
|
||
.LIST OFF
|
||
*/--------------------------------------
|
||
* #SKT.New
|
||
* Create a new socket
|
||
* ##In :
|
||
* PUSHW = PTR to S.SOCKET template
|
||
* ##Out :
|
||
* YA = PTR to new S.SOCKET
|
||
* X = hSocket
|
||
*\--------------------------------------
|
||
SKT.New >PULLW ZPTmpPtr1
|
||
ldy #S.SOCKET.SRC.PORT+1
|
||
lda (ZPTmpPtr1),y
|
||
dey
|
||
ora (ZPTmpPtr1),y
|
||
bne .1
|
||
|
||
jsr GetDynPort
|
||
sta (ZPTmpPtr1),y
|
||
txa
|
||
iny
|
||
sta (ZPTmpPtr1),y
|
||
|
||
.1 lda hSocketTable
|
||
>SYSCALL GetMemPtrA
|
||
>STYA ZPTmpPtr2
|
||
|
||
lda #$ff
|
||
sta TmpOffset to keep track of any free slot
|
||
|
||
ldx #0
|
||
|
||
.2 lda (ZPTmpPtr2)
|
||
beq .4 empty!!!
|
||
|
||
cmp (ZPTmpPtr1)
|
||
bne .5 not same SKT type...try next
|
||
|
||
ldy #S.SOCKET.SRC.ADDR
|
||
|
||
.3 lda (ZPTmpPtr1),y
|
||
cmp (ZPTmpPtr2),y
|
||
bne .5
|
||
iny
|
||
cpy #S.SOCKET.DST.PORT+2
|
||
bne .3
|
||
|
||
lda #ERR.SKT.BUSY same one!!!!! busy...
|
||
sec
|
||
rts
|
||
|
||
.4 lda TmpOffset
|
||
bpl .5 already found an empty slot....
|
||
|
||
>LDYA ZPTmpPtr2 found one...
|
||
>STYA ZPTmpPtr3 save it!
|
||
stx TmpOffset
|
||
|
||
.5 lda ZPTmpPtr2
|
||
clc
|
||
adc #S.SOCKET
|
||
sta ZPTmpPtr2
|
||
bcc .6
|
||
inc ZPTmpPtr2+1
|
||
.6 inx
|
||
cpx #K.SKTTABLE.SIZE
|
||
bne .2
|
||
|
||
lda TmpOffset Did we found an empty slot ?
|
||
bmi .9
|
||
|
||
ldy #S.SOCKET.TEMPLATE-1
|
||
|
||
.7 lda (ZPTmpPtr1),y
|
||
sta (ZPTmpPtr3),y
|
||
dey
|
||
bpl .7
|
||
|
||
lda (ZPTmpPtr1)
|
||
and #S.SOCKET.SOCK.MASK
|
||
cmp #S.SOCKET.SOCK.STREAM
|
||
bne .8
|
||
|
||
ldy #S.SOCKET.SO
|
||
lda (ZPTmpPtr1),y
|
||
and #S.SOCKET.SO.ACCEPTCONN
|
||
bne .8
|
||
|
||
jsr SKT.New.TCP
|
||
bcs .99
|
||
|
||
.8 ldx TmpOffset
|
||
>LDYA ZPTmpPtr3
|
||
clc
|
||
rts
|
||
|
||
.9 lda #ERR.SKT.OOS
|
||
sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
SKT.New.TCP ldy #S.SOCKET.SQ.INFREE
|
||
lda #K.TCP.WSIZE
|
||
sta (ZPTmpPtr3),y
|
||
iny
|
||
lda /K.TCP.WSIZE
|
||
sta (ZPTmpPtr3),y
|
||
|
||
ldy #S.SOCKET.SQ.OUTFREE
|
||
lda #K.TCP.WSIZE
|
||
sta (ZPTmpPtr3),y
|
||
iny
|
||
lda /K.TCP.WSIZE
|
||
sta (ZPTmpPtr3),y
|
||
|
||
lda #0
|
||
ldy #S.SOCKET.SQ.INUSED
|
||
sta (ZPTmpPtr3),y
|
||
iny
|
||
sta (ZPTmpPtr3),y
|
||
|
||
ldy #S.SOCKET.SQ.OUTUSED
|
||
sta (ZPTmpPtr3),y
|
||
iny
|
||
sta (ZPTmpPtr3),y
|
||
|
||
>PUSHW K.TCP.WSIZE
|
||
>PUSHBI 0
|
||
>SYSCALL GetMem
|
||
bcs .9
|
||
txa
|
||
|
||
ldy #S.SOCKET.STREAM.hInMem
|
||
sta (ZPTmpPtr3),y
|
||
|
||
>PUSHW K.TCP.WSIZE
|
||
>PUSHBI 0
|
||
>SYSCALL GetMem
|
||
bcs .9
|
||
txa
|
||
|
||
ldy #S.SOCKET.STREAM.hOutMem
|
||
sta (ZPTmpPtr3),y
|
||
|
||
clc
|
||
.9 rts
|
||
*/--------------------------------------
|
||
* #SKT.AcceptA
|
||
* Check for an incoming connection
|
||
* ##In :
|
||
* A = hListeningSocket
|
||
* ##Out :
|
||
* A = hSocket
|
||
*\--------------------------------------
|
||
SKT.AcceptA jsr SKT.GetA.I
|
||
bcs .9
|
||
ldy #S.SOCKET.SO
|
||
lda (ZPPtrSKT),y
|
||
and #S.SOCKET.SO.ACCEPTCONN
|
||
bne .99
|
||
|
||
ldy #S.SOCKET.HQ.HEAD
|
||
lda (ZPPtrSKT),y
|
||
ldy #S.SOCKET.HQ.TAIL
|
||
cmp (ZPPtrSKT),y Queue Empty
|
||
beq .9 CC
|
||
|
||
pha
|
||
inc
|
||
cmp #S.SOCKET.HQ.MAX
|
||
bne .1
|
||
|
||
lda #0
|
||
|
||
.1 sta (ZPPtrSKT),y
|
||
pla
|
||
clc
|
||
adc #S.SOCKET.HQ
|
||
tay
|
||
lda (ZPPtrSKT),y
|
||
clc
|
||
rts
|
||
|
||
.99 lda #ERR.SKT.BAD
|
||
sec
|
||
.9 rts
|
||
*/--------------------------------------
|
||
* #SKT.Send (DGRAM,STREAM,RAW)
|
||
* Send block of data
|
||
* ##In :
|
||
* PUSHB = hSocket
|
||
* PUSHW = pBuf
|
||
* PUSHW = len
|
||
* ##Out :
|
||
* A = hFrame
|
||
*\--------------------------------------
|
||
SKT.Send >PULLW ZPDataInLen
|
||
>PULLW ZPDataInPtr
|
||
>PULLB hSocket
|
||
|
||
jsr SKT.GetA.I
|
||
bcs .9
|
||
|
||
and #S.SOCKET.SOCK.MASK
|
||
cmp #S.SOCKET.SOCK.DGRAM
|
||
beq SKT.SEND.UDP
|
||
|
||
cmp #S.SOCKET.SOCK.STREAM
|
||
bne .1
|
||
|
||
ldy #S.SOCKET.SO
|
||
lda (ZPPtrSKT),y
|
||
and #S.SOCKET.SO.ACCEPTCONN
|
||
bne .99
|
||
jmp SKT.SEND.TCP
|
||
|
||
.1 cmp #S.SOCKET.SOCK.RAW
|
||
bne .99
|
||
jmp SKT.SEND.RAW
|
||
|
||
.99 lda #ERR.SKT.BAD
|
||
sec
|
||
.9 rts
|
||
*--------------------------------------
|
||
SKT.SEND.UDP ldx #S.IP.PROTOCOL.UDP
|
||
>LDYA ZPDataInLen
|
||
jsr FRM.NewIP
|
||
bcs .9
|
||
|
||
jsr SKT.SetFrameOutDstIP
|
||
|
||
jsr SKT.SetFrameOutPorts
|
||
|
||
jsr SKT.CopyDataInToOut
|
||
|
||
jmp FRM.SendUDP
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
|
||
lda (ZPPtrSKT),y
|
||
|
||
tax
|
||
>LDYA ZPDataInLen
|
||
jsr FRM.NewIP
|
||
bcs .9
|
||
|
||
jsr SKT.SetFrameOutDstIP
|
||
|
||
jsr SKT.CopyDataInToOut
|
||
|
||
ldy #S.SOCKET.RAW.PROTO
|
||
lda (ZPPtrSKT),y
|
||
cmp #S.IP.PROTOCOL.ICMP
|
||
bne .1
|
||
jmp FRM.SendICMP
|
||
.1 jmp FRM.SendIP
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
SKT.SEND.TCP ldy #S.SOCKET.STATUS
|
||
lda (ZPPtrSKT),y
|
||
and #S.SOCKET.STATUS.MASK
|
||
cmp #S.SOCKET.STATUS.ESTBLSH
|
||
beq .10
|
||
|
||
lda #MLI.ERR.IO
|
||
* sec CS from cmp
|
||
rts
|
||
|
||
.10 ldy #S.SOCKET.STREAM.hOutMem
|
||
lda (ZPPtrSKT),y
|
||
>SYSCALL GetMemPtrA
|
||
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
|
||
|
||
ldy #S.SOCKET.SQ.OUTFREE
|
||
lda (ZPPtrSKT),y
|
||
sec
|
||
sbc ZPDataInLen
|
||
tax
|
||
|
||
iny
|
||
lda (ZPPtrSKT),y
|
||
sbc ZPDataInLen+1 X,A = new OUTFREE
|
||
bcc .91
|
||
|
||
sta (ZPPtrSKT),y
|
||
dey
|
||
txa
|
||
sta (ZPPtrSKT),y Update Socket OUTFREE
|
||
|
||
ldy #S.SOCKET.SQ.OUTHEAD
|
||
lda (ZPPtrSKT),y
|
||
tax
|
||
clc
|
||
adc ZPDataInLen
|
||
sta (ZPPtrSKT),y
|
||
|
||
iny
|
||
lda (ZPPtrSKT),y
|
||
pha
|
||
adc ZPDataInLen+1
|
||
and /K.TCP.WMASK
|
||
sta (ZPPtrSKT),y Update Socket new OUTHEAD
|
||
|
||
txa X,PHA=OUTHEAD
|
||
clc
|
||
adc ZPTmpPtr1
|
||
sta ZPTmpPtr2
|
||
pla
|
||
pha
|
||
adc ZPTmpPtr1+1 Ptr1=Current Base
|
||
sta ZPTmpPtr1+2 Ptr2=Current Base+OUTHEAD
|
||
|
||
stx ZPTmpPtr3
|
||
pla
|
||
clc
|
||
adc /65536-K.TCP.WSIZE
|
||
sta ZPTmpPtr3+1 Ptr3=!(K.TCP.WSIZE-OUTHEAD)
|
||
|
||
lda ZPDataInLen
|
||
eor #$ff
|
||
sta ZPDataInLen
|
||
|
||
lda ZPDataInLen+1
|
||
eor #$ff
|
||
sta ZPDataInLen+1 ZPDataInLen=!ZPDataInLen
|
||
|
||
ldy #0
|
||
|
||
.1 inc ZPTmpPtr3 Reached the TOP of buf ?
|
||
bne .2
|
||
inc ZPTmpPtr3+1
|
||
beq .5
|
||
|
||
.2 inc ZPDataInLen
|
||
bne .3
|
||
inc ZPDataInLen+1
|
||
beq .80
|
||
|
||
.3 lda (ZPDataInPtr),y
|
||
sta (ZPTmpPtr2)
|
||
iny
|
||
bne .4
|
||
|
||
inc ZPDataInPtr+1
|
||
|
||
.4 inc ZPTmpPtr2
|
||
bne .1
|
||
|
||
inc ZPTmpPtr2+1
|
||
bra .1
|
||
|
||
.5 inc ZPDataInLen
|
||
bne .6
|
||
inc ZPDataInLen+1
|
||
beq .80
|
||
|
||
.6 lda (ZPDataInPtr),y
|
||
sta (ZPTmpPtr1)
|
||
iny
|
||
bne .7
|
||
|
||
inc ZPDataInPtr+1
|
||
|
||
.7 inc ZPTmpPtr1
|
||
bne .5
|
||
|
||
inc ZPTmpPtr1+1
|
||
bra .6
|
||
|
||
.80 clc
|
||
rts
|
||
|
||
|
||
|
||
.91 lda #MLI.ERR.VOLFULL
|
||
sec
|
||
rts
|
||
*/--------------------------------------
|
||
* #SKT.RcvdA (DGRAM,RAW)
|
||
* ##In :
|
||
* A = hSocket
|
||
* ##Out :
|
||
* A = hFrame
|
||
*\--------------------------------------
|
||
SKT.RcvdA jsr SKT.GetA.I
|
||
bcs .9
|
||
|
||
ldy #S.SOCKET.HQ.TAIL
|
||
lda (ZPPtrSKT),y
|
||
tax
|
||
|
||
ldy #S.SOCKET.HQ.HEAD
|
||
cmp (ZPPtrSKT),y
|
||
beq .99
|
||
|
||
inc
|
||
cmp #S.SOCKET.HQ.MAX
|
||
bne .1
|
||
lda #0
|
||
|
||
.1 ldy #S.SOCKET.HQ.TAIL
|
||
sta (ZPPtrSKT),y
|
||
|
||
txa
|
||
clc
|
||
adc #S.SOCKET.HQ
|
||
tay
|
||
lda (ZPPtrSKT),y
|
||
clc
|
||
rts
|
||
|
||
.99 sec
|
||
.9 rts
|
||
*/--------------------------------------
|
||
* #SKT.GetCA (STREAM)
|
||
* Read a Char From Stream in A
|
||
* ##In :
|
||
* A = hSocket
|
||
* ##Out :
|
||
* A = char
|
||
*\--------------------------------------
|
||
SKT.GetCA sec
|
||
rts
|
||
*/--------------------------------------
|
||
* #SKT.GetS (STREAM)
|
||
* Read a CR terminated Line in pBuf
|
||
* ##In :
|
||
* PUSHB = hSocket
|
||
* PUSHW = pBuf
|
||
* PUSHW = len
|
||
* ##Out :
|
||
* Y,A = bytes read
|
||
*\--------------------------------------
|
||
SKT.GetS sec
|
||
.HS 90 bcc
|
||
*/--------------------------------------
|
||
* #SKT.Rcvd (STREAM)
|
||
* Read data in pBuf
|
||
* ##In :
|
||
* PUSHB = hSocket
|
||
* PUSHW = pBuf
|
||
* PUSHW = len
|
||
* ##Out :
|
||
* Y,A = bytes transfered
|
||
*\--------------------------------------
|
||
SKT.Rcvd clc
|
||
ror TmpDWord
|
||
>PULLA
|
||
eor #$FF
|
||
sta ZPDataOutLen
|
||
>PULLA
|
||
eor #$FF
|
||
sta ZPDataOutLen+1
|
||
|
||
>PULLW ZPDataOutPtr
|
||
>PULLB hSocket
|
||
|
||
jsr SKT.GetA.I
|
||
bcs .99
|
||
and #S.SOCKET.SOCK.MASK
|
||
cmp #S.SOCKET.SOCK.STREAM
|
||
bne .9
|
||
|
||
ldy #S.SOCKET.SO
|
||
lda (ZPPtrSKT),y
|
||
and #S.SOCKET.SO.ACCEPTCONN
|
||
beq SKT.Rcvd.1
|
||
|
||
.9 lda #ERR.SKT.BAD
|
||
sec
|
||
.99 rts
|
||
|
||
SKT.Rcvd.1 jsr SKT.GetCopy
|
||
|
||
lda SKT.TmpCache+S.SOCKET.STREAM.hOutMem
|
||
>SYSCALL GetMemPtrA
|
||
>STYA ZPTmpPtr1 Make ZPTmpPtr1=buffer base
|
||
|
||
lda ZPTmpPtr1
|
||
clc
|
||
adc SKT.TmpCache+S.SOCKET.SQ.INTAIL
|
||
sta ZPTmpPtr2
|
||
|
||
lda ZPTmpPtr1+1
|
||
adc SKT.TmpCache+S.SOCKET.SQ.INTAIL+1
|
||
sta ZPTmpPtr2+1
|
||
|
||
stz TmpOffset Reset Data Counter
|
||
stz TmpOffset+1
|
||
|
||
ldy #0
|
||
|
||
.2 inc ZPDataOutLen Room left in dest buffer ?
|
||
bne .3
|
||
inc ZPDataOutLen+1
|
||
beq .8
|
||
|
||
.3 lda SKT.TmpCache+S.SOCKET.SQ.INTAIL
|
||
eor SKT.TmpCache+S.SOCKET.SQ.INHEAD
|
||
bne .4
|
||
lda SKT.TmpCache+S.SOCKET.SQ.INTAIL+1
|
||
eor SKT.TmpCache+S.SOCKET.SQ.INHEAD+1
|
||
beq .8 no more data....
|
||
|
||
.4 lda (ZPTmpPtr2)
|
||
|
||
inc SKT.TmpCache+S.SOCKET.SQ.INTAIL
|
||
bne .6
|
||
|
||
inc SKT.TmpCache+S.SOCKET.SQ.INTAIL+1
|
||
ldx SKT.TmpCache+S.SOCKET.SQ.INTAIL+1
|
||
cpx /K.TCP.WSIZE
|
||
bne .5
|
||
|
||
stz SKT.TmpCache+S.SOCKET.SQ.INTAIL+1
|
||
ldx ZPTmpPtr1
|
||
stx ZPTmpPtr2
|
||
ldx ZPTmpPtr1+1
|
||
stx ZPTmpPtr2+1
|
||
bra .6
|
||
|
||
.5 inc ZPTmpPtr2
|
||
bne .6
|
||
inc ZPTmpPtr2+1
|
||
|
||
.6 bit TmpDWord do we need to check CR ?
|
||
bpl .7
|
||
|
||
cmp #13
|
||
beq .80
|
||
|
||
.7 sta (ZPDataOutPtr),y
|
||
iny
|
||
bne .2
|
||
inc ZPDataOutPtr+1
|
||
bra .2
|
||
|
||
.8 lda TmpDWord CR mode ?
|
||
bne .90
|
||
|
||
.80 lda TmpOffset
|
||
eor TmpOffset+1
|
||
beq .9
|
||
|
||
lda S.SOCKET.SQ.INFREE
|
||
clc
|
||
adc TmpOffset
|
||
sta S.SOCKET.SQ.INFREE
|
||
|
||
lda S.SOCKET.SQ.INFREE+1
|
||
adc TmpOffset+1
|
||
sta S.SOCKET.SQ.INFREE+1
|
||
|
||
lda SKT.TmpCache+S.SOCKET.SQ.ACKNUM
|
||
clc
|
||
adc TmpOffset
|
||
sta SKT.TmpCache+S.SOCKET.SQ.ACKNUM
|
||
|
||
lda SKT.TmpCache+S.SOCKET.SQ.ACKNUM+1
|
||
adc TmpOffset+1
|
||
sta SKT.TmpCache+S.SOCKET.SQ.ACKNUM+1
|
||
bcc .81
|
||
inc SKT.TmpCache+S.SOCKET.SQ.ACKNUM+2
|
||
bne .81
|
||
inc SKT.TmpCache+S.SOCKET.SQ.ACKNUM+3
|
||
|
||
.81 lda #S.SOCKET.SOCK.ACK
|
||
tsb SKT.TmpCache+S.SOCKET.SOCK
|
||
|
||
jsr SKT.PutCopy
|
||
>LDYA TmpOffset
|
||
clc
|
||
rts
|
||
|
||
.90 lda #0
|
||
.9 sec A=0, no data
|
||
rts
|
||
*/--------------------------------------
|
||
* #SKT.CloseA
|
||
* Close socket
|
||
* ##In :
|
||
* A = hSocket
|
||
* ##Out :
|
||
*\--------------------------------------
|
||
SKT.CloseA cmp #K.SKTTABLE.SIZE
|
||
bcs SKT.GetA.9
|
||
|
||
jsr SKT.GetA.I
|
||
bcs .9
|
||
|
||
and #S.SOCKET.SOCK.MASK
|
||
cmp #S.SOCKET.SOCK.DGRAM
|
||
beq .8
|
||
|
||
cmp #S.SOCKET.SOCK.RAW
|
||
beq .8
|
||
|
||
ldy #S.SOCKET.SO
|
||
lda (ZPPtrSKT),y
|
||
bit #S.SOCKET.SO.ACCEPTCONN
|
||
|
||
beq *
|
||
|
||
|
||
.8 lda #0
|
||
sta (ZPPtrSKT)
|
||
clc
|
||
.9 rts
|
||
*/--------------------------------------
|
||
* #SKT.GetA
|
||
* Get Ptr to socket
|
||
* ##In :
|
||
* A = hSocket
|
||
* ##Out :
|
||
* Y,A = pS.SOCKET
|
||
*\--------------------------------------
|
||
SKT.GetA cmp #K.SKTTABLE.SIZE
|
||
bcs SKT.GetA.9
|
||
|
||
jsr SKT.GetA.I
|
||
|
||
bcs SKT.GetA.9
|
||
|
||
>LDYA ZPPtrSKT
|
||
rts
|
||
|
||
SKT.GetA.I pha
|
||
lda hSocketTable
|
||
>SYSCALL GetMemPtrA
|
||
>STYA ZPPtrSKT
|
||
|
||
plx
|
||
beq .8
|
||
|
||
.1 lda ZPPtrSKT
|
||
clc
|
||
adc #S.SOCKET
|
||
sta ZPPtrSKT
|
||
bcc .2
|
||
|
||
inc ZPPtrSKT+1
|
||
|
||
.2 dex
|
||
bne .1
|
||
|
||
.8 lda (ZPPtrSKT)
|
||
beq SKT.GetA.9
|
||
|
||
clc
|
||
rts
|
||
|
||
SKT.GetA.9 lda #ERR.SKT.BAD
|
||
sec
|
||
rts
|
||
*/--------------------------------------
|
||
* #SKT.GetTable
|
||
* Get socket table
|
||
* ##In :
|
||
* ##Out :
|
||
* Y,A = pS.SOCKET
|
||
*\--------------------------------------
|
||
SKT.GetTable lda hSocketTable
|
||
>SYSCALL GetMemPtrA
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
* ZPPtrSKT -> actual socket
|
||
* A = hSocket or hFrame
|
||
*--------------------------------------
|
||
SKT.AddToQueueA sta .2+1
|
||
ldy #S.SOCKET.HQ.HEAD
|
||
lda (ZPPtrSKT),y
|
||
tax
|
||
inc
|
||
cmp #S.SOCKET.HQ.MAX
|
||
bne .1
|
||
lda #0
|
||
.1 ldy #S.SOCKET.HQ.TAIL
|
||
cmp (ZPPtrSKT),y
|
||
beq .9 Queue full!!
|
||
|
||
ldy #S.SOCKET.HQ.HEAD
|
||
sta (ZPPtrSKT),y
|
||
txa
|
||
clc
|
||
adc #S.SOCKET.HQ
|
||
tay
|
||
|
||
.2 lda #$ff
|
||
sta (ZPPtrSKT),y
|
||
clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
SKT.AddToQueueS
|
||
clc
|
||
rts
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
SKT.GetCopy ldy #S.SOCKET-1
|
||
.1 lda (ZPPtrSKT),y
|
||
sta SKT.TmpCache
|
||
dey
|
||
bpl .1
|
||
rts
|
||
*--------------------------------------
|
||
SKT.PutCopy ldy #S.SOCKET-1
|
||
.1 lda SKT.TmpCache
|
||
sta (ZPPtrSKT),y
|
||
dey
|
||
bpl .1
|
||
rts
|
||
*--------------------------------------
|
||
SKT.SetFrameOutDstIP
|
||
ldy #S.SOCKET.DST.ADDR
|
||
ldx #4
|
||
|
||
.1 lda (ZPPtrSKT),y
|
||
pha
|
||
iny
|
||
dex
|
||
bne .1
|
||
|
||
ldy #S.IP.DST+3
|
||
ldx #4
|
||
|
||
.2 pla
|
||
sta (ZPFrameOutPtr),y
|
||
dey
|
||
dex
|
||
bne .2
|
||
rts
|
||
*--------------------------------------
|
||
SKT.SetFrameOutPorts
|
||
ldy #S.SOCKET.SRC.PORT
|
||
lda (ZPPtrSKT),y
|
||
tax
|
||
iny
|
||
lda (ZPPtrSKT),y
|
||
ldy #S.UDP.SRCPORT
|
||
sta (ZPFrameOutPtr),y
|
||
iny
|
||
txa
|
||
sta (ZPFrameOutPtr),y
|
||
|
||
ldy #S.SOCKET.DST.PORT
|
||
lda (ZPPtrSKT),y
|
||
tax
|
||
iny
|
||
lda (ZPPtrSKT),y
|
||
ldy #S.UDP.DSTPORT
|
||
sta (ZPFrameOutPtr),y
|
||
iny
|
||
txa
|
||
sta (ZPFrameOutPtr),y
|
||
rts
|
||
*--------------------------------------
|
||
SKT.CopyDataInToOut
|
||
lda ZPDataInPtr+1
|
||
pha
|
||
lda ZPDataOutPtr+1
|
||
pha
|
||
|
||
lda ZPDataInLen
|
||
eor #$ff
|
||
tax
|
||
lda ZPDataInLen+1
|
||
eor #$ff
|
||
pha
|
||
|
||
ldy #0
|
||
|
||
.1 inx
|
||
bne .2
|
||
pla
|
||
inc
|
||
beq .9
|
||
pha
|
||
|
||
.2 lda (ZPDataInPtr),y
|
||
sta (ZPDataOutPtr),y
|
||
iny
|
||
bne .1
|
||
inc ZPDataInPtr+1
|
||
inc ZPDataOutPtr+1
|
||
bne .1
|
||
|
||
.9 pla
|
||
sta ZPDataOutPtr+1
|
||
pla
|
||
sta ZPDataInPtr+1
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE LIB/LIBTCPIP.S.SKT
|
||
LOAD LIB/LIBTCPIP.S
|
||
ASM
|