Kernel version 0.9 : TCP & Sockets....

This commit is contained in:
Rémy GIBERT 2017-02-13 08:26:18 +01:00
parent a293fff2a4
commit f856158b7b
14 changed files with 378 additions and 158 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -64,6 +64,8 @@ CS.RUN >SYSCALL GetArgC
>SYSCALL GetArgA >SYSCALL GetArgA
>PUSHYA >PUSHYA
>DEBUG
>SYSCALL SSCANF >SYSCALL SSCANF
bcc CS.RUN.QUERY bcc CS.RUN.QUERY

View File

@ -172,11 +172,11 @@ CS.RUN.SEND.ECHO
jsr Init.Timeout jsr Init.Timeout
>PUSHWI ICMP.RequestLen
>PUSHW L.ICMP.Request
ldy #hSocket ldy #hSocket
>PUSHB (pData),y >PUSHB (pData),y
>PUSHW L.ICMP.Request
>PUSHWI ICMP.RequestLen
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
bcs CS.RUN.ERR bcs CS.RUN.ERR
@ -339,7 +339,6 @@ Socket.Src.Addr .BS 4
Socket.Src.Port .DA 0 Dynamic Socket.Src.Port .DA 0 Dynamic
Socket.Dst.Addr .BS 4 Socket.Dst.Addr .BS 4
Socket.Dst.Port .DA 0 Identifier Socket.Dst.Port .DA 0 Identifier
.BS S.SOCKET-16
*-------------------------------------- *--------------------------------------
ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ ICMP.Request .DA #S.ICMP.TYPE.ECHOREQ
.DA #0 CODE .DA #0 CODE

View File

@ -171,6 +171,8 @@ S.SOCKET.SRC.ADDR .EQ 4
S.SOCKET.SRC.PORT .EQ 8 S.SOCKET.SRC.PORT .EQ 8
S.SOCKET.DST.ADDR .EQ 10 S.SOCKET.DST.ADDR .EQ 10
S.SOCKET.DST.PORT .EQ 14 S.SOCKET.DST.PORT .EQ 14
*
S.SOCKET.TEMPLATE .EQ 16
* Listen type Queue * Listen type Queue
* Raw Type Queue * Raw Type Queue
* Datagram type Queue * Datagram type Queue
@ -185,8 +187,8 @@ S.SOCKET.SQ.OUTHEAD .EQ 20
S.SOCKET.SQ.OUTTAIL .EQ 22 S.SOCKET.SQ.OUTTAIL .EQ 22
S.SOCKET.SQ.INFREE .EQ 24 S.SOCKET.SQ.INFREE .EQ 24
S.SOCKET.SQ.OUTFREE .EQ 26 S.SOCKET.SQ.OUTFREE .EQ 26
* S.SOCKET.SQ.INUSED .EQ 28
* S.SOCKET.SQ.OUTUSED .EQ 30
S.SOCKET.SQ.SEQNUM .EQ 32 S.SOCKET.SQ.SEQNUM .EQ 32
S.SOCKET.SQ.ACKNUM .EQ 36 S.SOCKET.SQ.ACKNUM .EQ 36
* *

View File

@ -5,25 +5,86 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* #FRM.NewA * FRM.New
* ##In: * In:
* A = S.IP.PROTOCOL.??? * Y,A = DataLen
* ##Out: * X = S.IP.PROTOCOL.xxx
* Out:
* Y,A = Frame PTR * Y,A = Frame PTR
* X = hMem * X = hMem
*-------------------------------------- *--------------------------------------
FRM.NewA sta .2+1 FRM.NewIP stx .8+1
>PUSHWI K.ETH.FRAME.LEN >STYA ZPDataOutLen
>PUSHBI S.MEM.F.INIT0 cpx #S.IP.PROTOCOL.ICMP
bne .1
lda #S.IP-2
bra .4
.1 cpx #S.IP.PROTOCOL.UDP
bne .2
lda #S.UDP-2
bra .4
.2 cpx #S.IP.PROTOCOL.TCP
bne *
lda #S.TCP-2
bra .4
.4 sta .5+1 save Header len for reset later
clc
adc ZPDataOutLen
sta ZPFrameOutLen
pha
lda #0
adc ZPDataOutLen+1
sta ZPFrameOutLen+1
tax
pla
adc #2
tay
txa
adc #0
>PUSHYA
>PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
stx hFrameOut stx hFrameOut
>STYA ZPFrameOutPtr >STYA ZPFrameOutPtr
lda ZPFrameOutLen
sta (ZPFrameOutPtr)
ldy #1
lda ZPFrameOutLen+1
sta (ZPFrameOutPtr),y
iny
.5 ldx #$ff Self Modified, header length
lda #0
.6 sta (ZPFrameOutPtr),y
iny
dex
bne .6
tya
* clc
adc ZPFrameOutPtr
sta ZPDataOutPtr
lda #0
adc ZPFrameOutPtr+1
sta ZPDataOutPtr+1
lda DevFlags lda DevFlags
and #S.DEVSTAT.NET.FLAGS.IPOFFLOAD and #S.DEVSTAT.NET.FLAGS.IPOFFLOAD
bne .1 bne .7
ldy #S.ETH.ETHERTYPE ldy #S.ETH.ETHERTYPE
lda /S.ETH.ETHERTYPE.IP lda /S.ETH.ETHERTYPE.IP
@ -40,45 +101,39 @@ FRM.NewA sta .2+1
* lda #$0 * lda #$0
* sta (ZPFrameOutPtr),y * sta (ZPFrameOutPtr),y
* ldy #S.IP.IDENTIFICATION
* sta (ZPFrameOutPtr),y
* inc
* iny
* sta (ZPFrameOutPtr),y
* dec
* ldy #S.IP.FRAGMENT.FLAGS * ldy #S.IP.FRAGMENT.FLAGS
* sta (ZPFrameOutPtr),y * sta (ZPFrameOutPtr),y
* iny * iny
* sta (ZPFrameOutPtr),y * sta (ZPFrameOutPtr),y
ldy #S.IP.IDENTIFICATION+1
lda IP.ID
ldx IP.ID+1
inc
bne .61
inx
stx IP.ID+1
.61 sta IP.ID
sta (ZPFrameOutPtr),y
dey
txa
sta (ZPFrameOutPtr),y
ldy #S.IP.TTL ldy #S.IP.TTL
lda #K.IP.TTL lda #K.IP.TTL
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
.1 ldy #S.IP.PROTOCOL .7 ldy #S.IP.PROTOCOL
.2 lda #$ff
sta (ZPFrameOutPtr),y
.8 lda #$ff
sta (ZPFrameOutPtr),y
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
FRM.SendICMP >PUSHW ZPFrameOutLen FRM.SendICMP
>PUSHWI S.ICMP.TYPE-2
ldy #S.ICMP.CHECKSUM
lda #0
sta (ZPFrameOutPtr),y
iny
sta (ZPFrameOutPtr),y
jsr IP.ComputeChecksum
phy
ldy #S.ICMP.CHECKSUM
sta (ZPFrameOutPtr),y
iny
pla
sta (ZPFrameOutPtr),y
bra FRM.SendIP bra FRM.SendIP
*-------------------------------------- *--------------------------------------
@ -164,20 +219,25 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload
cmp #S.IP.PROTOCOL.TCP cmp #S.IP.PROTOCOL.TCP
bne .3 bne .3
jsr TCP.ComputeChecksum jsr TCP.ComputeChecksum
bra .4 bra .5
.3 cmp #S.IP.PROTOCOL.UDP .3 cmp #S.IP.PROTOCOL.UDP
bne .4 bne .4
jsr UDP.ComputeChecksum jsr UDP.ComputeChecksum
bra .5
.4 lda DevFlags .4 cmp #S.IP.PROTOCOL.ICMP
and #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD
bne .5 bne .5
jsr ICMP.ComputeChecksum
.5 lda DevFlags
and #S.DEVSTAT.NET.FLAGS.ARPOFFLOAD
bne .6
jsr IP.SetDestMAC jsr IP.SetDestMAC
bcs FRM.Queue bcs FRM.Queue
.5 >LDYA ZPFrameOutPtr .6 >LDYA ZPFrameOutPtr
ldx #DEVMGR.WRITEBLOCK ldx #DEVMGR.WRITEBLOCK
jsr NetDevJmp jsr NetDevJmp
bcs FRM.Queue bcs FRM.Queue

View File

@ -132,6 +132,26 @@ ICMP.IN.ECHOREP jsr IP.FillTmpSocketSrcDst
>SYSCALL FreeMemA >SYSCALL FreeMemA
rts rts
*-------------------------------------- *--------------------------------------
ICMP.ComputeChecksum
>PUSHW ZPFrameOutLen
>PUSHWI S.ICMP.TYPE-2
ldy #S.ICMP.CHECKSUM
lda #0
sta (ZPFrameOutPtr),y
iny
sta (ZPFrameOutPtr),y
jsr IP.ComputeChecksum
phy
ldy #S.ICMP.CHECKSUM
sta (ZPFrameOutPtr),y
iny
pla
sta (ZPFrameOutPtr),y
rts
*--------------------------------------
MAN MAN
SAVE LIB/LIBTCPIP.S.ICMP SAVE LIB/LIBTCPIP.S.ICMP
LOAD LIB/LIBTCPIP.S LOAD LIB/LIBTCPIP.S

View File

@ -6,6 +6,7 @@ AUTO 6
.LIST OFF .LIST OFF
*/-------------------------------------- */--------------------------------------
* #SKT.New * #SKT.New
* Create a new socket
* ##In : * ##In :
* PUSHW = PTR to S.SOCKET template * PUSHW = PTR to S.SOCKET template
* ##Out : * ##Out :
@ -13,7 +14,6 @@ AUTO 6
* X = hSocket * X = hSocket
*\-------------------------------------- *\--------------------------------------
SKT.New >PULLW ZPTmpPtr1 SKT.New >PULLW ZPTmpPtr1
ldy #S.SOCKET.SRC.PORT+1 ldy #S.SOCKET.SRC.PORT+1
lda (ZPTmpPtr1),y lda (ZPTmpPtr1),y
dey dey
@ -74,7 +74,8 @@ SKT.New >PULLW ZPTmpPtr1
lda TmpOffset Did we found an empty slot ? lda TmpOffset Did we found an empty slot ?
bmi .9 bmi .9
ldy #S.SOCKET-1 ldy #S.SOCKET.TEMPLATE-1
.7 lda (ZPTmpPtr1),y .7 lda (ZPTmpPtr1),y
sta (ZPTmpPtr3),y sta (ZPTmpPtr3),y
dey dey
@ -116,6 +117,17 @@ SKT.New.TCP ldy #S.SOCKET.SQ.INFREE
lda /K.TCP.WSIZE lda /K.TCP.WSIZE
sta (ZPTmpPtr3),y 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 >PUSHW K.TCP.WSIZE
>PUSHBI 0 >PUSHBI 0
>SYSCALL GetMem >SYSCALL GetMem
@ -136,7 +148,14 @@ SKT.New.TCP ldy #S.SOCKET.SQ.INFREE
clc clc
.9 rts .9 rts
*-------------------------------------- */--------------------------------------
* #SKT.AcceptA
* Check for an incoming connection
* ##In :
* A = hListeningSocket
* ##Out :
* A = hSocket
*\--------------------------------------
SKT.AcceptA jsr SKT.GetA.I SKT.AcceptA jsr SKT.GetA.I
bcs .9 bcs .9
ldy #S.SOCKET.SO ldy #S.SOCKET.SO
@ -149,11 +168,14 @@ SKT.AcceptA jsr SKT.GetA.I
ldy #S.SOCKET.HQ.TAIL ldy #S.SOCKET.HQ.TAIL
cmp (ZPPtrSKT),y Queue Empty cmp (ZPPtrSKT),y Queue Empty
beq .9 CC beq .9 CC
pha pha
inc inc
cmp #S.SOCKET.HQ.MAX cmp #S.SOCKET.HQ.MAX
bne .1 bne .1
lda #0 lda #0
.1 sta (ZPPtrSKT),y .1 sta (ZPPtrSKT),y
pla pla
clc clc
@ -166,39 +188,49 @@ SKT.AcceptA jsr SKT.GetA.I
.99 lda #ERR.SKT.BAD .99 lda #ERR.SKT.BAD
sec sec
.9 rts .9 rts
*-------------------------------------- */--------------------------------------
* SKT.Send * #SKT.Send (DGRAM,STREAM,RAW)
*-------------------------------------- * Send block of data
* ##In :
* PUSHB = hSocket
* PUSHW = pBuf
* PUSHW = len
* ##Out :
* A = hFrame
*\--------------------------------------
SKT.Send >PULLW ZPDataInLen SKT.Send >PULLW ZPDataInLen
>PULLW ZPDataInPtr >PULLW ZPDataInPtr
>PULLB hSocket >PULLB hSocket
jsr SKT.GetA.I jsr SKT.GetA.I
bcs .9 bcs .9
and #S.SOCKET.SOCK.MASK and #S.SOCKET.SOCK.MASK
cmp #S.SOCKET.SOCK.DGRAM cmp #S.SOCKET.SOCK.DGRAM
beq SKT.SEND.UDP beq SKT.SEND.UDP
cmp #S.SOCKET.SOCK.STREAM cmp #S.SOCKET.SOCK.STREAM
bne .1 bne .1
ldy #S.SOCKET.SO
lda (ZPPtrSKT),y
and #S.SOCKET.SO.ACCEPTCONN
bne .99
jmp SKT.SEND.TCP jmp SKT.SEND.TCP
.1 cmp #S.SOCKET.SOCK.RAW .1 cmp #S.SOCKET.SOCK.RAW
bne .99 bne .99
jmp SKT.SEND.RAW jmp SKT.SEND.RAW
.99 sec .99 lda #ERR.SKT.BAD
sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SKT.SEND.UDP lda #S.IP.PROTOCOL.UDP SKT.SEND.UDP ldx #S.IP.PROTOCOL.UDP
jsr FRM.NewA >LDYA ZPDataInLen
jsr FRM.NewIP
bcs .9 bcs .9
>LDAXI S.UDP-2
jsr SKT.SetFrameOutLenAX
>LDAXI S.UDP
jsr SKT.SetDataOutPtrAX
jsr SKT.SetFrameOutDstIP jsr SKT.SetFrameOutDstIP
jsr SKT.SetFrameOutPorts jsr SKT.SetFrameOutPorts
@ -209,6 +241,28 @@ SKT.SEND.UDP lda #S.IP.PROTOCOL.UDP
.9 rts .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 SKT.SEND.TCP ldy #S.SOCKET.STATUS
lda (ZPPtrSKT),y lda (ZPPtrSKT),y
and #S.SOCKET.STATUS.MASK and #S.SOCKET.STATUS.MASK
@ -328,32 +382,6 @@ SKT.SEND.TCP ldy #S.SOCKET.STATUS
.91 lda #MLI.ERR.VOLFULL .91 lda #MLI.ERR.VOLFULL
sec sec
rts rts
*--------------------------------------
SKT.SEND.RAW ldy #S.SOCKET.RAW.PROTO
lda (ZPPtrSKT),y
jsr FRM.NewA
bcs .9
>LDAXI S.IP-2
jsr SKT.SetFrameOutLenAX
>LDAXI S.IP
jsr SKT.SetDataOutPtrAX
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.RcvdA (DGRAM,RAW) * #SKT.RcvdA (DGRAM,RAW)
* ##In : * ##In :
@ -554,8 +582,14 @@ SKT.Rcvd.1 jsr SKT.GetCopy
.90 lda #0 .90 lda #0
.9 sec A=0, no data .9 sec A=0, no data
rts rts
*-------------------------------------- */--------------------------------------
SKT.CLOSEA cmp #K.SKTTABLE.SIZE * #SKT.CloseA
* Close socket
* ##In :
* A = hSocket
* ##Out :
*\--------------------------------------
SKT.CloseA cmp #K.SKTTABLE.SIZE
bcs SKT.GetA.9 bcs SKT.GetA.9
jsr SKT.GetA.I jsr SKT.GetA.I
@ -579,7 +613,14 @@ SKT.CLOSEA cmp #K.SKTTABLE.SIZE
sta (ZPPtrSKT) sta (ZPPtrSKT)
clc clc
.9 rts .9 rts
*-------------------------------------- */--------------------------------------
* #SKT.GetA
* Get Ptr to socket
* ##In :
* A = hSocket
* ##Out :
* Y,A = pS.SOCKET
*\--------------------------------------
SKT.GetA cmp #K.SKTTABLE.SIZE SKT.GetA cmp #K.SKTTABLE.SIZE
bcs SKT.GetA.9 bcs SKT.GetA.9
@ -609,14 +650,26 @@ SKT.GetA.I pha
.2 dex .2 dex
bne .1 bne .1
lda (ZPPtrSKT) .8 lda (ZPPtrSKT)
beq SKT.GetA.9 beq SKT.GetA.9
.8 rts CC clc
rts
SKT.GetA.9 lda #ERR.SKT.BAD SKT.GetA.9 lda #ERR.SKT.BAD
sec sec
rts rts
*/--------------------------------------
* #SKT.GetTable
* Get socket table
* ##In :
* ##Out :
* Y,A = pS.SOCKET
*\--------------------------------------
SKT.GetTable lda hSocketTable
>SYSCALL GetMemPtrA
clc
rts
*-------------------------------------- *--------------------------------------
* ZPPtrSKT -> actual socket * ZPPtrSKT -> actual socket
* A = hSocket or hFrame * A = hSocket or hFrame
@ -648,11 +701,6 @@ SKT.AddToQueueA sta .2+1
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
SKT.GETTABLE lda hSocketTable
>SYSCALL GetMemPtrA
clc
rts
*--------------------------------------
SKT.AddToQueueS SKT.AddToQueueS
clc clc
rts rts
@ -674,28 +722,6 @@ SKT.PutCopy ldy #S.SOCKET-1
bpl .1 bpl .1
rts rts
*-------------------------------------- *--------------------------------------
SKT.SetFrameOutLenAX
clc
adc ZPDataInLen
sta (ZPFrameOutPtr)
sta ZPFrameOutLen
txa
adc ZPDataInLen+1
ldy #1
sta (ZPFrameOutPtr),y
sta ZPFrameOutLen+1
rts
*--------------------------------------
SKT.SetDataOutPtrAX
clc
adc ZPFrameOutPtr
sta ZPDataOutPtr
txa
adc ZPFrameOutPtr+1
sta ZPDataOutPtr+1
rts
*--------------------------------------
SKT.SetFrameOutDstIP SKT.SetFrameOutDstIP
ldy #S.SOCKET.DST.ADDR ldy #S.SOCKET.DST.ADDR
ldx #4 ldx #4
@ -738,21 +764,29 @@ SKT.SetFrameOutPorts
iny iny
txa txa
sta (ZPFrameOutPtr),y sta (ZPFrameOutPtr),y
rts
*-------------------------------------- *--------------------------------------
SKT.CopyDataInToOut SKT.CopyDataInToOut
lda ZPDataInPtr+1
pha
lda ZPDataOutPtr+1
pha
lda ZPDataInLen lda ZPDataInLen
eor #$ff eor #$ff
sta ZPDataInLen tax
lda ZPDataInLen+1 lda ZPDataInLen+1
eor #$ff eor #$ff
tax pha
ldy #0 ldy #0
.1 inc ZPDataInLen .1 inx
bne .2 bne .2
inx pla
inc
beq .9 beq .9
pha
.2 lda (ZPDataInPtr),y .2 lda (ZPDataInPtr),y
sta (ZPDataOutPtr),y sta (ZPDataOutPtr),y
@ -761,8 +795,13 @@ SKT.CopyDataInToOut
inc ZPDataInPtr+1 inc ZPDataInPtr+1
inc ZPDataOutPtr+1 inc ZPDataOutPtr+1
bne .1 bne .1
.9 rts
.9 pla
sta ZPDataOutPtr+1
pla
sta ZPDataInPtr+1
rts
*--------------------------------------
MAN MAN
SAVE LIB/LIBTCPIP.S.SKT SAVE LIB/LIBTCPIP.S.SKT
LOAD LIB/LIBTCPIP.S LOAD LIB/LIBTCPIP.S

View File

@ -223,6 +223,29 @@ TCP.IN.JMP.TIMEWT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
TCP.OUT jsr SKT.GetCopy
lda SKT.TmpCache+S.SOCKET.SQ.OUTUSED+1
bne .1
ldy SKT.TmpCache+S.SOCKET.SQ.OUTUSED
beq .8 nothing to send....go check if ACK pending
.1 cpy #K.TCP.MSS
pha
sbc /K.TCP.MSS OUTDATA > MSS ?
pla
bcs .2 no....get data len
>LDYAI K.TCP.MSS yes gert only MSS
.2 >STYA ZPDataOutLen
jmp FRM.SendTCP
.8 clc
rts
*--------------------------------------
TCP.UpdateSktAckNum TCP.UpdateSktAckNum
ldy #S.SOCKET.SQ.ACKNUM+3 ldy #S.SOCKET.SQ.ACKNUM+3
lda (ZPPtrSKT),y lda (ZPPtrSKT),y

View File

@ -123,9 +123,6 @@ LIB.LOAD lda bFirstLoad
jsr ARP.CLEAR jsr ARP.CLEAR
jsr DNS.CLEAR jsr DNS.CLEAR
>LDYAI K.DYNPORT.START
>STYA DYNPORT.LAST
>PUSHWI K.SKTTABLE.SIZE*S.SOCKET >PUSHWI K.SKTTABLE.SIZE*S.SOCKET
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
>SYSCALL GetMem >SYSCALL GetMem
@ -138,7 +135,12 @@ LIB.LOAD lda bFirstLoad
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
LIB.UNLOAD clc LIB.UNLOAD lda hSocketTable
beq .8
>SYSCALL FreeMemA
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
POLL ldx #DEVMGR.READBLOCK POLL ldx #DEVMGR.READBLOCK
@ -294,7 +296,6 @@ DNS.SOCKET.SA .BS 4
DNS.SOCKET.SP .DA 0 Dynamic DNS.SOCKET.SP .DA 0 Dynamic
DNS.SOCKET.DA .BS 4 DNS.SOCKET.DA .BS 4
DNS.SOCKET.DP .DA UDP.PORT.DNS DNS.SOCKET.DP .DA UDP.PORT.DNS
.BS S.SOCKET-16
*-------------------------------------- *--------------------------------------
DNS.MSG.LEN .BS 2 DNS.MSG.LEN .BS 2
DNS.MSG DNS.MSG
@ -317,7 +318,7 @@ FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE
bFirstLoad .DA #0 bFirstLoad .DA #0
hSocketTable .BS 1 hSocketTable .BS 1
DevFlags .BS 1 DevFlags .BS 1
DYNPORT.LAST .BS 2 DYNPORT.LAST .DA K.DYNPORT.START
hDNSSocket1 .BS 1 hDNSSocket1 .BS 1
hDNSSocket2 .BS 1 hDNSSocket2 .BS 1
DNS.HostNameLen .BS 1 DNS.HostNameLen .BS 1
@ -333,6 +334,7 @@ hSocket .BS 1
TmpOffset .BS 2 TmpOffset .BS 2
HST.DecStr .BS 4 HST.DecStr .BS 4
HST.IP .BS 5 HST.IP .BS 5
IP.ID .BS 2
IP.CHECKSUM .BS 4 IP.CHECKSUM .BS 4
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -106,7 +106,6 @@ CS.INIT >LDYA L.LIBTCPIP
CS.RUN >PUSHW L.Socket CS.RUN >PUSHW L.Socket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW
bcc .1 bcc .1
jmp CS.RUN.KO jmp CS.RUN.KO
@ -119,10 +118,11 @@ CS.RUN >PUSHW L.Socket
jsr Init.Timeout jsr Init.Timeout
CS.RUN.SDISC >PUSHWI DHCP.DISC.LEN CS.RUN.SDISC ldy #hSocket
>PUSHB (pData),y
>PUSHW L.DHCP.DISC >PUSHW L.DHCP.DISC
jsr CS.RUN.SKT.SEND >PUSHWI DHCP.DISC.LEN
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
bcc .1 bcc .1
jmp CS.RUN.KO jmp CS.RUN.KO
@ -155,9 +155,11 @@ CS.RUN.SREQ ldx #3
>LDYA L.MSG.CFG2 >LDYA L.MSG.CFG2
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
>PUSHWI DHCP.REQ.LEN ldy #hSocket
>PUSHB (pData),y
>PUSHW L.DHCP.REQ >PUSHW L.DHCP.REQ
jsr CS.RUN.SKT.SEND >PUSHWI DHCP.REQ.LEN
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
bcs CS.RUN.KO bcs CS.RUN.KO
lda #S.IPCFG.STATUS.SREQ lda #S.IPCFG.STATUS.SREQ
@ -207,11 +209,6 @@ CS.RUN.KO pha
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.SKT.SEND ldy #hSocket
>PUSHB (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.SEND
rts
*--------------------------------------
CS.RUN.SKT.RCVD ldy #hSocket CS.RUN.SKT.RCVD ldy #hSocket
lda (pData),y lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.RCVDA
@ -243,7 +240,7 @@ CS.DOEVENT lda (pEvent)
CS.QUIT ldy #hSocket CS.QUIT ldy #hSocket
lda (pData),y lda (pData),y
* >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
lda hLIBTCPIP lda hLIBTCPIP
>SYSCALL UnloadLibA >SYSCALL UnloadLibA
@ -449,7 +446,6 @@ Socket .DA #S.SOCKET.SOCK.DGRAM
.DA UDP.PORT.DHCPC Socket.Src.Port .DA UDP.PORT.DHCPC Socket.Src.Port
.HS FF.FF.FF.FF Socket.Dst.Addr .HS FF.FF.FF.FF Socket.Dst.Addr
.DA UDP.PORT.DHCPS Socket.Dst.Port .DA UDP.PORT.DHCPS Socket.Dst.Port
.BS S.SOCKET-16
*-------------------------------------- *--------------------------------------
DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS DHCP.DISC .HS 01010600 OP,HTYPE,HLEN,HOPS
DHCP.DISC.XID .BS 4 DHCP.DISC.XID .BS 4

View File

@ -12,6 +12,7 @@ AUTO 6
.INB /A2OSX.DEV/INC/A2OSX.I .INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/IO.I .INB /A2OSX.DEV/INC/IO.I
.INB /A2OSX.DEV/INC/PRODOS.I .INB /A2OSX.DEV/INC/PRODOS.I
.INB /A2OSX.DEV/INC/MLI.ERR.I
*-------------------------------------- *--------------------------------------
TmpPtr1 .EQ $0 for X.PRINTF.S TmpPtr1 .EQ $0 for X.PRINTF.S
ZPPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope ZPPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope

View File

@ -1,15 +1,7 @@
*** Auto generated by docgen.cmd *** *** Auto generated by docgen.cmd ***
#FRM.NewA
##In:
+ A = S.IP.PROTOCOL.???
##Out:
* Y,A = Frame PTR
* X = hMem
#SKT.New #SKT.New
+ Create a new socket
##In : ##In :
+ PUSHW = PTR to S.SOCKET template + PUSHW = PTR to S.SOCKET template
@ -17,3 +9,87 @@
##Out : ##Out :
+ YA = PTR to new S.SOCKET + YA = PTR to new S.SOCKET
+ X = hSocket + X = hSocket
#SKT.AcceptA
+ Check for an incoming connection
##In :
+ A = hListeningSocket
##Out :
+ A = hSocket
#SKT.Send (DGRAM,STREAM,RAW)
+ Send block of data
##In :
+ PUSHB = hSocket
+ PUSHW = pBuf
+ PUSHW = len
##Out :
+ A = hFrame
#SKT.RcvdA (DGRAM,RAW)
##In :
+ A = hSocket
##Out :
+ A = hFrame
#SKT.GetCA (STREAM)
+ Read a Char From Stream in A
##In :
+ A = hSocket
##Out :
+ A = char
#SKT.GetS (STREAM)
+ Read a CR terminated Line in pBuf
##In :
+ PUSHB = hSocket
+ PUSHW = pBuf
+ PUSHW = len
##Out :
+ Y,A = bytes read
#SKT.Rcvd (STREAM)
+ Read data in pBuf
##In :
+ PUSHB = hSocket
+ PUSHW = pBuf
+ PUSHW = len
##Out :
+ Y,A = bytes transfered
#SKT.CloseA
+ Close socket
##In :
+ A = hSocket
##Out :
#SKT.GetA
+ Get Ptr to socket
##In :
+ A = hSocket
##Out :
+ Y,A = pS.SOCKET
#SKT.GetTable
+ Get socket table
##In :
##Out :
+ Y,A = pS.SOCKET